Fix case of a macro formal parameter matching a defined macro.
authorCarl Worth <cworth@cworth.org>
Thu, 13 May 2010 19:58:49 +0000 (12:58 -0700)
committerCarl Worth <cworth@cworth.org>
Fri, 14 May 2010 16:53:50 +0000 (09:53 -0700)
Simply need to allow for a macro name to appear in the parameter list.

This makes the recently-added test pass.

glcpp-parse.y

index 4b4a754..1b6c939 100644 (file)
@@ -93,7 +93,7 @@ _list_length (list_t *list);
 %lex-param {void *scanner}
 
 %token DEFINE FUNC_MACRO IDENTIFIER NEWLINE OBJ_MACRO SPACE TOKEN UNDEF
-%type <str> FUNC_MACRO IDENTIFIER OBJ_MACRO TOKEN word word_or_symbol
+%type <str> FUNC_MACRO IDENTIFIER identifier_perhaps_macro OBJ_MACRO TOKEN word word_or_symbol
 %type <list> argument argument_list parameter_list replacement_list
 
 %%
@@ -215,18 +215,24 @@ parameter_list:
        /* empty */ {
                $$ = _list_create (parser);
        }
-|      IDENTIFIER {
+|      identifier_perhaps_macro {
                $$ = _list_create (parser);
                _list_append_item ($$, $1);
                talloc_free ($1);
        }
-|      parameter_list ',' IDENTIFIER {
+|      parameter_list ',' identifier_perhaps_macro {
                _list_append_item ($1, $3);
                talloc_free ($3);
                $$ = $1;
        }
 ;
 
+identifier_perhaps_macro:
+       IDENTIFIER { $$ = $1; }
+|      FUNC_MACRO { $$ = $1; }
+|      OBJ_MACRO { $$ = $1; }
+;
+
 word_or_symbol:
        word    { $$ = $1; }
 |      '('     { $$ = xtalloc_strdup (parser, "("); }