Fix bug as in previous fix, but with multi-token argument.
authorCarl Worth <cworth@cworth.org>
Wed, 19 May 2010 14:49:47 +0000 (07:49 -0700)
committerCarl Worth <cworth@cworth.org>
Wed, 19 May 2010 14:49:47 +0000 (07:49 -0700)
The previous fix added FUNC_MACRO to a production one higher in teh
grammar than it should have. So it prevented a FUNC_MACRO from
appearing as part of a mutli-token argument rather than just alone as
an argument. Fix this (and add a test).

glcpp-parse.y
tests/035-define-func-self-compose-non-func-multi-token-argument.c [new file with mode: 0644]

index ea27184c47c2605668a26e1342f32f3ae51cde96..400f138d17eb1c5a8a4bbbfba6e79a428c56f1f6 100644 (file)
@@ -94,7 +94,7 @@ _argument_list_member_at (argument_list_t *list, int index);
 %lex-param {void *scanner}
 
 %token DEFINE FUNC_MACRO IDENTIFIER NEWLINE OBJ_MACRO REPLACEMENT TOKEN UNDEF
-%type <str> FUNC_MACRO IDENTIFIER OBJ_MACRO REPLACEMENT TOKEN word
+%type <str> argument_word FUNC_MACRO IDENTIFIER OBJ_MACRO REPLACEMENT TOKEN
 %type <string_list> argument macro parameter_list
 %type <argument_list> argument_list
 
@@ -165,18 +165,14 @@ argument_list:
 ;
 
 argument:
-       word {
+       argument_word {
                $$ = _string_list_create (parser);
                _string_list_append_item ($$, $1);
        }
 |      macro {
                $$ = _string_list_create (parser);
        }
-|      FUNC_MACRO {
-               $$ = _string_list_create (parser);
-               _string_list_append_item ($$, $1);
-       }
-|      argument word {
+|      argument argument_word {
                _string_list_append_item ($1, $2);
                talloc_free ($2);
                $$ = $1;
@@ -189,6 +185,13 @@ argument:
        }
 ;
 
+argument_word:
+       IDENTIFIER { $$ = $1; }
+|      TOKEN { $$ = $1; }
+|      FUNC_MACRO { $$ = $1; }
+;
+
+
 directive:
        DEFINE IDENTIFIER REPLACEMENT {
                _define_object_macro (parser, $2, $3);
@@ -225,11 +228,6 @@ parameter_list:
        }
 ;
 
-word:
-       IDENTIFIER { $$ = $1; }
-|      TOKEN { $$ = $1; }
-;
-
 %%
 
 string_list_t *
diff --git a/tests/035-define-func-self-compose-non-func-multi-token-argument.c b/tests/035-define-func-self-compose-non-func-multi-token-argument.c
new file mode 100644 (file)
index 0000000..9955219
--- /dev/null
@@ -0,0 +1,2 @@
+#define foo(bar) bar
+foo(1 + foo)