commit c0ec218e4249cda3f7808aab3e5f6c354dbd1480 (tree)
parent a799d4a3cb82889751db2ac57daa4768273362a3
Author: Motiejus Jakštys <motiejus@jakstys.lt>
Date: Thu, 24 Apr 2025 22:27:56 +0300
trying to fix infinite loop
Diffstat:
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git 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;
}
}