OSDN Git Service

Avoid re-expanding a macro name that has once been rejected from expansion.
authorCarl Worth <cworth@cworth.org>
Thu, 20 May 2010 15:01:44 +0000 (08:01 -0700)
committerCarl Worth <cworth@cworth.org>
Thu, 20 May 2010 15:01:44 +0000 (08:01 -0700)
commitb569383bbdfa22ed591255f56fb93832633a95ae
tree04a52c022ccec5658c0fac901f427fefafbadc17
parent472524413d004680dbdb89602617f32da8f42f56
Avoid re-expanding a macro name that has once been rejected from expansion.

The specification of the preprocessor in C99 says that when we see a
macro name that we are already expanding that we refuse to expand it
now, (which we've done for a while), but also that we refuse to ever
expand it later if seen in other contexts at which it would be
legitimate to expand.

We add a test case for that here, and fix it to work. The fix takes
advantage of a new token_t value for tokens and argument words along
with the recently added IDENTIFIER_FINALIZED token type which
instructs the parser to not even look for another expansion.
glcpp-lex.l
glcpp-parse.y
glcpp.h
tests/037-finalize-unexpanded-macro.c [new file with mode: 0644]