summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2019-02-16 08:09:56 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2019-02-16 08:09:56 +0000
commiteb7b989c6173fd22911d69636e64f2e4a044c1d6 (patch)
tree4964a81274d8e64fe129883ddb27bdb1e30999cc /Source
parent6522afe90a475d38e9b47583fad7b40904098aea (diff)
downloadswig-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.y12
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;
}
;