Fix bug as in previous fix, but with multi-token argument.

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).
This commit is contained in:
Carl Worth 2010-05-19 07:49:47 -07:00
parent 69f390d609
commit 59ca98990f
2 changed files with 12 additions and 12 deletions

View 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 *

View file

@ -0,0 +1,2 @@
#define foo(bar) bar
foo(1 + foo)