fixed: #82 parsing error
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 11 Dec 2023 17:10:58 +0000 (11:10 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 11 Dec 2023 17:10:58 +0000 (11:10 -0600)
compiler/src/parser.c

index 543e82be55326459ed8f9526d3e491488b585797..b89077a6662651e162b0ed7b8312ee194c72c37e 100644 (file)
@@ -620,12 +620,21 @@ static AstTyped* parse_factor(OnyxParser* parser) {
             }
 
             if (parser->curr->type != '{') {
-                onyx_report_error(parser->curr->pos, Error_Critical, "Expected '{' after 'do', got '%s'.", token_name(parser->curr));
-                retval = NULL;
-                break;
-            }
+                AstBlock *tmp_block = make_node(AstBlock, Ast_Kind_Block);
+                tmp_block->token = do_token;
+
+                tmp_block->binding_scope = scope_create(parser->allocator, parser->current_scope, parser->curr->pos);
+                tmp_block->binding_scope->name = "<anonymous do block>";
+
+                parser->current_scope = tmp_block->binding_scope;
+                tmp_block->body = parse_statement(parser);
+                parser->current_scope = parser->current_scope->parent;
 
-            do_block->block = parse_block(parser, 1, NULL);
+                do_block->block = tmp_block;
+
+            } else {
+                do_block->block = parse_block(parser, 1, NULL);
+            }
 
             retval = (AstTyped *) do_block;
             break;