mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-01 12:18:15 +00:00
Recover from faulty parameter in parse_proc_type
This commit is contained in:
@@ -436,6 +436,24 @@ expect_closing_brace_of_field_list :: proc(p: ^Parser) -> tokenizer.Token {
|
|||||||
return expect_brace
|
return expect_brace
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expect_closing_parentheses_of_field_list :: proc(p: ^Parser) -> tokenizer.Token {
|
||||||
|
token := p.curr_tok
|
||||||
|
if allow_token(p, .Close_Paren) {
|
||||||
|
return token
|
||||||
|
}
|
||||||
|
|
||||||
|
if allow_token(p, .Semicolon) && !tokenizer.is_newline(token) {
|
||||||
|
str := tokenizer.token_to_string(token)
|
||||||
|
error(p, end_of_line_pos(p, p.prev_tok), "expected a comma, got %s", str)
|
||||||
|
}
|
||||||
|
|
||||||
|
for p.curr_tok.kind != .Close_Paren && p.curr_tok.kind != .EOF && !is_non_inserted_semicolon(p.curr_tok) {
|
||||||
|
advance_token(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
return expect_token(p, .Close_Paren)
|
||||||
|
}
|
||||||
|
|
||||||
is_non_inserted_semicolon :: proc(tok: tokenizer.Token) -> bool {
|
is_non_inserted_semicolon :: proc(tok: tokenizer.Token) -> bool {
|
||||||
return tok.kind == .Semicolon && tok.text != "\n"
|
return tok.kind == .Semicolon && tok.text != "\n"
|
||||||
}
|
}
|
||||||
@@ -2095,7 +2113,7 @@ parse_proc_type :: proc(p: ^Parser, tok: tokenizer.Token) -> ^ast.Proc_Type {
|
|||||||
|
|
||||||
expect_token(p, .Open_Paren)
|
expect_token(p, .Open_Paren)
|
||||||
params, _ := parse_field_list(p, .Close_Paren, ast.Field_Flags_Signature_Params)
|
params, _ := parse_field_list(p, .Close_Paren, ast.Field_Flags_Signature_Params)
|
||||||
expect_token(p, .Close_Paren)
|
expect_closing_parentheses_of_field_list(p)
|
||||||
results, diverging := parse_results(p)
|
results, diverging := parse_results(p)
|
||||||
|
|
||||||
is_generic := false
|
is_generic := false
|
||||||
|
|||||||
Reference in New Issue
Block a user