trying to fix infinite loop
This commit is contained in:
9
parser.c
9
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user