Prevent unexpanded macros from being expanded again in the future.
authorCarl Worth <cworth@cworth.org>
Wed, 26 May 2010 15:15:49 +0000 (08:15 -0700)
committerCarl Worth <cworth@cworth.org>
Wed, 26 May 2010 15:15:49 +0000 (08:15 -0700)
With this fix, tests 37 - 39 now pass.

glcpp-parse.y

index 5b792a976e676d79fda018795a2389266cc94c1a..ec104330631b4d650bb93c6967ab6a54856da9ca 100644 (file)
@@ -676,8 +676,17 @@ _glcpp_parser_expand_token_onto (glcpp_parser_t *parser,
 
        /* Finally, don't expand this macro if we're already actively
         * expanding it, (to avoid infinite recursion). */
-       if (_string_list_contains (parser->active, identifier, NULL)) {
-               _token_list_append (result, token);
+       if (_string_list_contains (parser->active, identifier, NULL))
+       {
+               /* We change the token type here from IDENTIFIER to
+                * OTHER to prevent any future expansion of this
+                * unexpanded token. */
+               char *str;
+               token_t *new_token;
+
+               str = xtalloc_strdup (result, token->value.str);
+               new_token = _token_create_str (result, OTHER, str);
+               _token_list_append (result, new_token);
                return 0;
        }