diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2019-02-16 08:09:56 +0000 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2019-02-16 08:09:56 +0000 |
commit | eb7b989c6173fd22911d69636e64f2e4a044c1d6 (patch) | |
tree | 4964a81274d8e64fe129883ddb27bdb1e30999cc /Source | |
parent | 6522afe90a475d38e9b47583fad7b40904098aea (diff) | |
download | swig-eb7b989c6173fd22911d69636e64f2e4a044c1d6.tar.gz |
Fix parser error containing multiple #define statements inside an enum.
The second #define fails to parse:
enum FooEnum {
ENUM1 = 0,
ENUM2 = 1,
#define MACRO_DEF1 "Hello"
#define MACRO_DEF2 "World!"
ENUM3 = 2,
ENUM4 = 3,
};
Bug mentioned at https://sourceforge.net/p/swig/patches/333/
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CParse/parser.y | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y index 29e5705bf..f20f1db2f 100644 --- a/Source/CParse/parser.y +++ b/Source/CParse/parser.y @@ -6342,8 +6342,12 @@ ename : identifier { $$ = $1; } | empty { $$ = (char *) 0;} ; -optional_ignored_define - : constant_directive +constant_directives : constant_directive + | constant_directive constant_directives + ; + +optional_ignored_defines + : constant_directives | empty ; @@ -6364,7 +6368,7 @@ enumlist : enumlist_item optional_ignored_define_after_comma { Setattr($2,"_last",NULL); $$ = $1; } - | optional_ignored_define { + | optional_ignored_defines { $$ = 0; } ; @@ -6380,7 +6384,7 @@ enumlist_tail : COMMA enumlist_item { } ; -enumlist_item : optional_ignored_define edecl_with_dox optional_ignored_define { +enumlist_item : optional_ignored_defines edecl_with_dox optional_ignored_defines { $$ = $2; } ; |