parse_expression_leave: also end at a closing } - enum: check for } and , after an...
authorWolfgang Bumiller <blub@speed.at>
Thu, 10 Jan 2013 17:52:43 +0000 (18:52 +0100)
committerWolfgang Bumiller <blub@speed.at>
Thu, 10 Jan 2013 17:52:43 +0000 (18:52 +0100)
parser.c

index 8090be4..f99fd79 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -1957,7 +1957,7 @@ static ast_expression* parse_expression_leave(parser_t *parser, bool stopatcomma
             goto onerr;
         }
         if (parser->tok == ';' ||
-            (!parens && (parser->tok == ']' || parser->tok == ')')))
+            (!parens && (parser->tok == ']' || parser->tok == ')' || parser->tok == '}')))
         {
             break;
         }
@@ -3508,6 +3508,13 @@ static bool parse_enum(parser_t *parser)
             goto onerror;
         }
         num = (var->constval.vfloat = asvalue->constval.vfloat) + 1;
+
+        if (parser->tok == '}')
+            break;
+        if (parser->tok != ',') {
+            parseerror(parser, "expected `}` or comma after expression");
+            goto onerror;
+        }
     }
 
     if (parser->tok != '}') {