Fix building tools/widl (for bison 1.75, among others)
Robert Shearman
rob at codeweavers.com
Fri May 2 08:17:06 CDT 2008
Gerald Pfeifer wrote:
> After the following change about a week ago
>
> Rob Shearman <rob at 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.
>
Oops, thanks for spotting it. Actually, I was developing on version 1.28
and didn't get those errors so it doesn't appear to be a deliberate
change by the bison developers.
> 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);
>
>
Looks good. Please send to wine-patches.
--
Rob Shearman
More information about the wine-devel
mailing list