From: Elizabeth Figura zfigura@codeweavers.com
--- tools/widl/parser.l | 11 ++++++----- tools/widl/parser.y | 23 +++++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/tools/widl/parser.l b/tools/widl/parser.l index 75cdae22550..1e7c543e8af 100644 --- a/tools/widl/parser.l +++ b/tools/widl/parser.l @@ -154,10 +154,11 @@ static int token_str( int token, const char *str, YYSTYPE *yylval ) return token; }
-static int token_num( int token, const char *yytext, YYSTYPE *yylval ) +static int token_num( const char *yytext, YYSTYPE *yylval, int is_hex ) { - yylval->num = xstrtoul( yytext, NULL, 0 ); - return token; + yylval->integer.value = xstrtoul( yytext, NULL, 0 ); + yylval->integer.is_hex = is_hex; + return is_hex ? aHEXNUM : aNUM; }
static int token_ident( const char *str, YYSTYPE *yylval ) @@ -431,8 +432,8 @@ SAFEARRAY{ws}*/( return tSAFEARRAY;
[a-zA-Z_][0-9a-zA-Z_]* { return token_ident( yytext, yylval ); }
- 0[xX]{hd}+[uU]?[lL]? { return token_num( aHEXNUM, yytext, yylval ); } - [0-9]+[uU]?[lL]? { return token_num( aNUM, yytext, yylval ); } + 0[xX]{hd}+[uU]?[lL]? { return token_num( yytext, yylval, TRUE ); } + [0-9]+[uU]?[lL]? { return token_num( yytext, yylval, FALSE ); }
L"(\.|[^"\])*" { return token_str( aWSTRING, yytext + 1, yylval ); } "(\.|[^"\])*" { return token_str( aSTRING, yytext, yylval ); } diff --git a/tools/widl/parser.y b/tools/widl/parser.y index 3d64587d526..062edfd2079 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -151,6 +151,7 @@ PARSER_LTYPE pop_import(void); char *str; struct uuid *uuid; unsigned int num; + struct integer integer; double dbl; typelib_t *typelib; struct _import_t *import; @@ -163,7 +164,7 @@ PARSER_LTYPE pop_import(void);
%token <str> aIDENTIFIER aPRAGMA %token <str> aKNOWNTYPE -%token <num> aNUM aHEXNUM +%token <integer> aNUM aHEXNUM %token <dbl> aDOUBLE %token <str> aSTRING aWSTRING aSQSTRING %token <str> tCDECL @@ -494,8 +495,8 @@ pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')' ;
warnings: - aNUM { $$ = append_warning(NULL, $1); } - | warnings aNUM { $$ = append_warning($1, $2); } + aNUM { $$ = append_warning(NULL, $1.value); } + | warnings aNUM { $$ = append_warning($1, $2.value); } ;
typedecl: @@ -591,8 +592,8 @@ marshaling_behavior: ;
contract_ver: - aNUM { $$ = MAKEVERSION(0, $1); } - | aNUM '.' aNUM { $$ = MAKEVERSION($3, $1); } + aNUM { $$ = MAKEVERSION(0, $1.value); } + | aNUM '.' aNUM { $$ = MAKEVERSION($3.value, $1.value); } ;
contract_req @@ -844,10 +845,8 @@ m_expr | expr ;
-expr: aNUM { struct integer integer = {.value = $1}; - $$ = make_exprl(EXPR_NUM, &integer); } - | aHEXNUM { struct integer integer = {.value = $1, .is_hex = TRUE}; - $$ = make_exprl(EXPR_NUM, &integer); } +expr: aNUM { $$ = make_exprl(EXPR_NUM, &$1); } + | aHEXNUM { $$ = make_exprl(EXPR_NUM, &$1); } | aDOUBLE { $$ = make_exprd(EXPR_DOUBLE, $1); } | tFALSE { struct integer integer = {.value = 0}; $$ = make_exprl(EXPR_TRUEFALSE, &integer); } @@ -1385,9 +1384,9 @@ uniondef: tUNION m_typename '{' ne_union_fields '}' ;
version: - aNUM { $$ = MAKEVERSION($1, 0); } - | aNUM '.' aNUM { $$ = MAKEVERSION($1, $3); } - | aHEXNUM { $$ = $1; } + aNUM { $$ = MAKEVERSION($1.value, 0); } + | aNUM '.' aNUM { $$ = MAKEVERSION($1.value, $3.value); } + | aHEXNUM { $$ = $1.value; } ;
acf_statements