cppmacro.c (funlike_invocation_p): Re-disable macros enabled by contexts drops AFTER argument pre-expansion...
* cppmacro.c (funlike_invocation_p): Re-disable macros enabled by contexts drops AFTER argument pre-expansion, so that they remain enabled during argument pre-expansion. (_cpp_pop_context): Unconditionally re-enable a macro when dropping a context level. From-SVN: r37971
This commit is contained in:
parent
94a3d3b9c3
commit
8aaef6e0c9
2 changed files with 25 additions and 10 deletions
|
@ -1,3 +1,11 @@
|
|||
2000-12-03 Neil Booth <neilb@earthling.net>
|
||||
|
||||
* cppmacro.c (funlike_invocation_p): Re-disable macros enabled
|
||||
by contexts drops AFTER argument pre-expansion, so that they
|
||||
remain enabled during argument pre-expansion.
|
||||
(_cpp_pop_context): Unconditionally re-enable a macro when
|
||||
dropping a context level.
|
||||
|
||||
2000-12-03 Manfred Hollstein <manfredh@redhat.com>
|
||||
|
||||
* arm/t-linux (MULTILIB_OPTIONS): Comment.
|
||||
|
|
|
@ -606,7 +606,7 @@ funlike_invocation_p (pfile, node, list)
|
|||
const cpp_hashnode *node;
|
||||
struct toklist *list;
|
||||
{
|
||||
cpp_context *orig_context;
|
||||
cpp_context *orig, *final;
|
||||
cpp_token maybe_paren;
|
||||
macro_arg *args = 0;
|
||||
cpp_lexer_pos macro_pos;
|
||||
|
@ -614,7 +614,7 @@ funlike_invocation_p (pfile, node, list)
|
|||
macro_pos = pfile->lexer_pos;
|
||||
pfile->state.parsing_args = 1;
|
||||
pfile->state.prevent_expansion++;
|
||||
orig_context = pfile->context;
|
||||
orig = pfile->context;
|
||||
|
||||
cpp_start_lookahead (pfile);
|
||||
cpp_get_token (pfile, &maybe_paren);
|
||||
|
@ -628,7 +628,8 @@ funlike_invocation_p (pfile, node, list)
|
|||
node->name);
|
||||
|
||||
/* Restore original context. */
|
||||
pfile->context = orig_context;
|
||||
final = pfile->context;
|
||||
pfile->context = orig;
|
||||
pfile->state.prevent_expansion--;
|
||||
pfile->state.parsing_args = 0;
|
||||
|
||||
|
@ -648,6 +649,13 @@ funlike_invocation_p (pfile, node, list)
|
|||
free (args);
|
||||
}
|
||||
|
||||
/* Re-disable macros *after* pre-expansion. */
|
||||
while (final != orig)
|
||||
{
|
||||
final = final->next;
|
||||
final->macro->disabled = 1;
|
||||
}
|
||||
|
||||
return args != 0;
|
||||
}
|
||||
|
||||
|
@ -885,13 +893,12 @@ _cpp_pop_context (pfile)
|
|||
cpp_context *context = pfile->context;
|
||||
|
||||
pfile->context = context->prev;
|
||||
/* Re-enable a macro and free resources when leaving its expansion. */
|
||||
if (!pfile->state.parsing_args)
|
||||
{
|
||||
if (!pfile->context->prev)
|
||||
unlock_pools (pfile);
|
||||
context->macro->disabled = 0;
|
||||
}
|
||||
if (!pfile->context->prev && !pfile->state.parsing_args)
|
||||
unlock_pools (pfile);
|
||||
|
||||
/* Re-enable a macro, temporarily if parsing_args, when leaving its
|
||||
expansion. */
|
||||
context->macro->disabled = 0;
|
||||
}
|
||||
|
||||
/* Eternal routine to get a token. Also used nearly everywhere
|
||||
|
|
Loading…
Add table
Reference in a new issue