mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 14:48:47 +00:00
Improve error handling for missing semicolon separators in a for loop
This commit is contained in:
@@ -848,12 +848,24 @@ parse_for_stmt :: proc(p: ^Parser) -> ^ast.Stmt {
|
|||||||
if !is_range && parse_control_statement_semicolon_separator(p) {
|
if !is_range && parse_control_statement_semicolon_separator(p) {
|
||||||
init = cond;
|
init = cond;
|
||||||
cond = nil;
|
cond = nil;
|
||||||
if p.curr_tok.kind != .Semicolon {
|
|
||||||
cond = parse_simple_stmt(p, nil);
|
|
||||||
}
|
if f.curr_tok.kind == .Open_Brace || f.curr_tok.kind == .Do {
|
||||||
expect_semicolon(p, cond);
|
error(p, f.curr_tok.pos, "Expected ';', followed by a condition expression and post statement, got %s", token.tokens[f.curr_tok.kind]);
|
||||||
if p.curr_tok.kind != .Open_Brace && p.curr_tok.kind != .Do {
|
} else {
|
||||||
post = parse_simple_stmt(p, nil);
|
if p.curr_tok.kind != .Semicolon {
|
||||||
|
cond = parse_simple_stmt(p, nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
if p.curr_tok.text != ";" {
|
||||||
|
error(p, p.curr_tok.pos, "Expected ';', got %s", tokenizer.token_to_string(p.curr_tok));
|
||||||
|
} else {
|
||||||
|
expect_semicolon(p, nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
if p.curr_tok.kind != .Open_Brace && p.curr_tok.kind != .Do {
|
||||||
|
post = parse_simple_stmt(p, nil);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-8
@@ -4133,16 +4133,26 @@ Ast *parse_for_stmt(AstFile *f) {
|
|||||||
if (!is_range && parse_control_statement_semicolon_separator(f)) {
|
if (!is_range && parse_control_statement_semicolon_separator(f)) {
|
||||||
init = cond;
|
init = cond;
|
||||||
cond = nullptr;
|
cond = nullptr;
|
||||||
if (f->curr_token.kind != Token_Semicolon) {
|
|
||||||
cond = parse_simple_stmt(f, StmtAllowFlag_None);
|
if (f->curr_token.kind == Token_OpenBrace || f->curr_token.kind == Token_do) {
|
||||||
}
|
syntax_error(f->curr_token, "Expected ';', followed by a condition expression and post statement, got %.*s", LIT(token_strings[f->curr_token.kind]));
|
||||||
expect_semicolon(f, cond);
|
} else {
|
||||||
if (f->curr_token.kind != Token_OpenBrace &&
|
if (f->curr_token.kind != Token_Semicolon) {
|
||||||
f->curr_token.kind != Token_do) {
|
cond = parse_simple_stmt(f, StmtAllowFlag_None);
|
||||||
post = parse_simple_stmt(f, StmtAllowFlag_None);
|
}
|
||||||
|
|
||||||
|
if (f->curr_token.string != ";") {
|
||||||
|
syntax_error(f->curr_token, "Expected ';', got %.*s", LIT(token_to_string(f->curr_token)));
|
||||||
|
} else {
|
||||||
|
expect_semicolon(f, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (f->curr_token.kind != Token_OpenBrace &&
|
||||||
|
f->curr_token.kind != Token_do) {
|
||||||
|
post = parse_simple_stmt(f, StmtAllowFlag_None);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user