From c56d9ad350684c0b8963d2d370fa1c53718f5548 Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov Date: Thu, 11 Feb 2010 15:12:19 +0300 Subject: [PATCH] expand_smacro: Don't search for ID in global context The corner case is the code like %define foo 1 %push bar %$foo: %pop for which v2.07 ends up with "foo = 1" while 0.98.39 issue an error. hpa said that ideally we may need to create a context structure for the global context but this seems to be too agressive for 2.08. Based on patch from nasm64developer Signed-off-by: Cyrill Gorcunov --- preproc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/preproc.c b/preproc.c index 575755f0..5d97b2a2 100644 --- a/preproc.c +++ b/preproc.c @@ -3747,7 +3747,6 @@ static Token *expand_mmac_params(Token * tline) static Token *expand_smacro(Token * tline) { Token *t, *tt, *mstart, **tail, *thead; - struct hash_table *smtbl; SMacro *head = NULL, *m; Token **params; int *paramsize; @@ -3788,12 +3787,13 @@ again: if ((mname = tline->text)) { /* if this token is a local macro, look in local context */ - if (tline->type == TOK_ID || tline->type == TOK_PREPROC_ID) + if (tline->type == TOK_ID) { + head = (SMacro *)hash_findix(&smacros, mname); + } else if (tline->type == TOK_PREPROC_ID) { ctx = get_ctx(mname, &mname, true); - else - ctx = NULL; - smtbl = ctx ? &ctx->localmac : &smacros; - head = (SMacro *) hash_findix(smtbl, mname); + head = ctx ? (SMacro *)hash_findix(&ctx->localmac, mname) : NULL; + } else + head = NULL; /* * We've hit an identifier. As in is_mmacro below, we first -- 2.11.4.GIT