zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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:
Mparser.c | 9++++++++-
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; } }