From 05b4a9c58e244ba436947f53deb8c5930ea56fe2 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Thu, 19 Jun 2008 15:06:47 +0000 Subject: [PATCH] Fixed direct-declarator grammar --- src/parser.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/parser.c b/src/parser.c index 7b7901d..1a8600c 100644 --- a/src/parser.c +++ b/src/parser.c @@ -773,7 +773,7 @@ static int _type_qualifier_list(C99 * c99) static int _direct_declarator(C99 * c99) /* identifier * "(" declarator ")" - * direct-declarator "[" (assignment-expr | "*") "]" + * direct-declarator "[" [ assignment-expr | "*" ] "]" * direct-declarator "(" parameter-type-list ")" * direct-declarator "(" [ identifier-list ] ")" */ { @@ -798,7 +798,7 @@ static int _direct_declarator(C99 * c99) { if(_parse_is_code(c99, C99_CODE_OPERATOR_TIMES)) ret |= scan(c99); - else + else if(_parse_in_set(c99, c99set_assignment_expr)) ret |= _assignment_expr(c99); ret |= _parse_check(c99, C99_CODE_OPERATOR_RBRACKET); } @@ -1477,7 +1477,8 @@ static int _cast_expr(C99 * c99) ret |= _postfix_expr_do(c99); return ret; } - ret |= _unary_expr(c99); + ret |= _parse_check_set(c99, c99set_unary_expr, "unary expression", + _unary_expr); return ret; }