aboutsummaryrefslogtreecommitdiffstats
path: root/src/semantic.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2022-04-19 10:55:40 -0300
committerBad Diode <bd@badd10de.dev>2022-04-19 10:55:40 -0300
commitd9538a32bfe8e2cb9de4cdcfdf8a8c6e1a27ac3c (patch)
tree28e5f760f72b838bd2408351c0b525ab20a049e1 /src/semantic.c
parentc69929cc501203829082b810bafe75a22947e00c (diff)
downloadbdl-d9538a32bfe8e2cb9de4cdcfdf8a8c6e1a27ac3c.tar.gz
bdl-d9538a32bfe8e2cb9de4cdcfdf8a8c6e1a27ac3c.zip
Fix semantic analysis bug in block scoped functions
Diffstat (limited to 'src/semantic.c')
-rw-r--r--src/semantic.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/semantic.c b/src/semantic.c
index 6c9f290..dd95d28 100644
--- a/src/semantic.c
+++ b/src/semantic.c
@@ -311,6 +311,8 @@ resolve_type(ParseTree *ast, Scope *scope, Node *node) {
311 node->expr_type = type; 311 node->expr_type = type;
312 } break; 312 } break;
313 case NODE_FUN: { 313 case NODE_FUN: {
314 node->expr_type = &default_types[TYPE_VOID];
315
314 // Fill up new scope with parameters 316 // Fill up new scope with parameters
315 scope = alloc_scope(scope); 317 scope = alloc_scope(scope);
316 array_push(ast->scopes, scope); 318 array_push(ast->scopes, scope);
@@ -336,7 +338,7 @@ resolve_type(ParseTree *ast, Scope *scope, Node *node) {
336 } 338 }
337 } 339 }
338 Node *last_expr = body->block.expr[array_size(body->block.expr) - 1]; 340 Node *last_expr = body->block.expr[array_size(body->block.expr) - 1];
339 node->expr_type = last_expr->expr_type; 341 node->fun.body->expr_type = last_expr->expr_type;
340 } else { 342 } else {
341 if (!resolve_type(ast, scope, body)) { 343 if (!resolve_type(ast, scope, body)) {
342 return false; 344 return false;