After the following change about a week ago
Rob Shearman <rob(a)codeweavers.com>
widl: Make the rules for parsing fields in structures, encapsulated unions
and non-encapsulated unions more strict.
Move the rules in fields that handle empty union cases into separate
union rules so that they can't erroneously be accepted for structures or
other types of unions.
I started seeing the following build failure on one older installation:
bison -p parser_ -o parser.tab.c -d parser.y
parser.y:749.2-751.15: type clash (`var' `attr_list') on default action
parser.y:751.16: parse error, unexpected ":", expecting ";" or "|"
parser.y:752.35-59: $2 of `ne_union_field' has no declared type
parser.y:757.2-759.7: type clash (`var' `') on default action
parser.y:759.8: parse error, unexpected ":", expecting ";" or "|"
parser.y:759.45-760.50: $1 of `union_field' has no declared type
parser.y:759.45-761.23: $2 of `union_field' has no declared type
gmake: *** [parser.tab.h] Error 1
It turns out that current versions of bison do not enforce the documented
grammer as strictly as older ones such as bison 1.75. Fixed thusly.
Gerald
ChangeLog:
Fix syntax to also work with older versions of bison.
Index: tools/widl/parser.y
===================================================================
RCS file: /home/wine/wine/tools/widl/parser.y,v
retrieving revision 1.199
diff -u -3 -p -r1.199 parser.y
--- tools/widl/parser.y 1 May 2008 18:38:07 -0000 1.199
+++ tools/widl/parser.y 2 May 2008 12:07:24 -0000
@@ -747,6 +747,7 @@ field: m_attributes decl_spec declarat
ne_union_field:
s_field ';' { $$ = $1; }
| attributes ';' { $$ = make_var(NULL); $$->attrs = $1; }
+ ;
ne_union_fields: { $$ = NULL; }
| ne_union_fields ne_union_field { $$ = append_var( $1, $2 ); }
@@ -755,6 +756,7 @@ ne_union_fields: { $$ = NULL; }
union_field:
s_field ';' { $$ = $1; }
| ';' { $$ = NULL; }
+ ;
s_field: m_attributes decl_spec declarator { $$ = $3->var;
$$->attrs = check_field_attrs($$->name, $1);