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/
This commit is contained in:
William S Fulton 2019-02-16 08:09:56 +00:00
commit eb7b989c61
6 changed files with 92 additions and 17 deletions

View file

@ -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;
}
;