From c0ec218e4249cda3f7808aab3e5f6c354dbd1480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Thu, 24 Apr 2025 22:27:56 +0300 Subject: [PATCH] trying to fix infinite loop --- parser.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/parser.c b/parser.c index 1a0564e..9d11d47 100644 --- a/parser.c +++ b/parser.c @@ -16,6 +16,7 @@ static AstNodeIndex parseBlock(Parser* p); static AstNodeIndex parseLabeledStatement(Parser*); static AstNodeIndex parseExpr(Parser*); static AstNodeIndex expectExpr(Parser*); +static AstNodeIndex expectSemicolon(Parser*); typedef struct { enum { FIELD_STATE_NONE, FIELD_STATE_SEEN, FIELD_STATE_END } tag; @@ -463,6 +464,10 @@ static AstTokenIndex expectToken(Parser* p, TokenizerTag tag) { return 0; // tcc } +static AstNodeIndex expectSemicolon(Parser *p) { + return expectToken(p, TOKEN_SEMICOLON); +} + static AstNodeIndex parseErrorUnionExpr(Parser* p) { const AstNodeIndex suffix_expr = parseSuffixExpr(p); if (suffix_expr == 0) @@ -983,7 +988,9 @@ static AstNodeIndex expectStatement(Parser* p, bool allow_defer_var) { if (allow_defer_var) { return expectVarDeclExprStatement(p); } else { - return parseAssignExpr(p); + const AstNodeIndex assign_expr = parseAssignExpr(p); + expectSemicolon(p); + return assign_expr; } }