From: Rémi Bernon rbernon@codeweavers.com
--- tools/widl/expr.c | 4 ++-- tools/widl/parser.y | 20 ++++++++++---------- tools/widl/widl.h | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/tools/widl/expr.c b/tools/widl/expr.c index 546a3fac445..b5417591f13 100644 --- a/tools/widl/expr.c +++ b/tools/widl/expr.c @@ -108,11 +108,11 @@ static int is_float_type(const type_t *type) type_basic_get_type(type) == TYPE_BASIC_DOUBLE)); }
-expr_t *make_expr(enum expr_type type) +expr_t *expr_void(void) { expr_t *e = xmalloc( sizeof(expr_t) ); memset( e, 0, sizeof(*e) ); - e->type = type; + e->type = EXPR_VOID; return e; }
diff --git a/tools/widl/parser.y b/tools/widl/parser.y index 703db705c94..e1a68477c79 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -557,13 +557,13 @@ arg: attributes decl_spec m_any_declarator { if ($2->stgclass != STG_NONE && $ } ;
-array: '[' expr ']' { $$ = $2; - if (!$$->is_const || $$->cval <= 0) - error_loc("array dimension is not a positive integer constant\n"); - } - | '[' '*' ']' { $$ = make_expr(EXPR_VOID); } - | '[' ']' { $$ = make_expr(EXPR_VOID); } - ; +array: '[' expr ']' { if (!$expr->is_const) error_loc( "array dimension is not constant\n" ); + if ($expr->cval <= 0) error_loc( "array dimension is not positive\n" ); + $$ = $expr; + } + | '[' '*' ']' { $$ = expr_void(); } + | '[' ']' { $$ = expr_void(); } + ;
m_attributes : %empty { $$ = NULL; } @@ -830,9 +830,9 @@ m_exprs: m_expr { $$ = append_expr( NULL, $1 ); ;
m_expr - : %empty { $$ = make_expr(EXPR_VOID); } - | expr - ; + : %empty { $$ = expr_void(); } + | expr + ;
expr: aNUM { $$ = make_exprl(EXPR_NUM, $1); } | aHEXNUM { $$ = make_exprl(EXPR_HEXNUM, $1); } diff --git a/tools/widl/widl.h b/tools/widl/widl.h index d6e82412d4b..c84d23bdb29 100644 --- a/tools/widl/widl.h +++ b/tools/widl/widl.h @@ -139,7 +139,7 @@ struct expr_loc const char *attr; };
-extern expr_t *make_expr( enum expr_type type ); +extern expr_t *expr_void(void); extern expr_t *make_exprl( enum expr_type type, int val ); extern expr_t *make_exprd( enum expr_type type, double val ); extern expr_t *make_exprs( enum expr_type type, char *val );