diff options
| author | gingerBill <bill@gingerbill.org> | 2021-08-09 13:01:47 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-08-09 13:01:47 +0100 |
| commit | e793f92e675d8af49f24c62c1589bc0c26dce35b (patch) | |
| tree | a0441cc92a620a92b35c0d47a5067e7b6d49aa15 /src/parser.cpp | |
| parent | 042f376626d00cc9f954fef1a5b94143afe4b5c6 (diff) | |
Improve parsing handling for the `{ return }` cases
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 931563986..ee8aa46fa 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1548,6 +1548,15 @@ void expect_semicolon(AstFile *f, Ast *s) { expect_semicolon_newline_error(f, f->prev_token, s); return; } + switch (f->curr_token.kind) { + case Token_CloseBrace: + case Token_CloseParen: + if (f->curr_token.pos.line == f->prev_token.pos.line) { + return; + } + break; + } + prev_token = f->prev_token; if (prev_token.kind == Token_Semicolon) { expect_semicolon_newline_error(f, f->prev_token, s); @@ -1558,6 +1567,8 @@ void expect_semicolon(AstFile *f, Ast *s) { return; } + + if (s != nullptr) { bool insert_semi = (f->tokenizer.flags & TokenizerFlag_InsertSemicolon) != 0; if (insert_semi) { @@ -3926,7 +3937,7 @@ Ast *parse_return_stmt(AstFile *f) { auto results = array_make<Ast *>(heap_allocator()); - while (f->curr_token.kind != Token_Semicolon) { + while (f->curr_token.kind != Token_Semicolon && f->curr_token.kind != Token_CloseBrace) { Ast *arg = parse_expr(f, false); array_add(&results, arg); if (f->curr_token.kind != Token_Comma || |