diff options
Diffstat (limited to 'src/semantic.c')
-rw-r--r-- | src/semantic.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/semantic.c b/src/semantic.c index dd95d28..62c1e86 100644 --- a/src/semantic.c +++ b/src/semantic.c | |||
@@ -51,6 +51,7 @@ static Type default_types[] = { | |||
51 | 51 | ||
52 | typedef enum SymbolType { | 52 | typedef enum SymbolType { |
53 | SYMBOL_VAR, | 53 | SYMBOL_VAR, |
54 | SYMBOL_PAR, | ||
54 | SYMBOL_FUN, | 55 | SYMBOL_FUN, |
55 | } SymbolType; | 56 | } SymbolType; |
56 | 57 | ||
@@ -298,6 +299,7 @@ resolve_type(ParseTree *ast, Scope *scope, Node *node) { | |||
298 | 299 | ||
299 | Type *type = NULL; | 300 | Type *type = NULL; |
300 | switch (val->type) { | 301 | switch (val->type) { |
302 | case SYMBOL_PAR: | ||
301 | case SYMBOL_VAR: { | 303 | case SYMBOL_VAR: { |
302 | type = find_type(scope, val->var.type); | 304 | type = find_type(scope, val->var.type); |
303 | } break; | 305 | } break; |
@@ -321,7 +323,7 @@ resolve_type(ParseTree *ast, Scope *scope, Node *node) { | |||
321 | for (size_t i = 0; i < array_size(node->fun.param_names); ++i) { | 323 | for (size_t i = 0; i < array_size(node->fun.param_names); ++i) { |
322 | Node *param = node->fun.param_names[i]; | 324 | Node *param = node->fun.param_names[i]; |
323 | Node *type = node->fun.param_types[i]; | 325 | Node *type = node->fun.param_types[i]; |
324 | Symbol *var = alloc_symval(param, SYMBOL_VAR); | 326 | Symbol *var = alloc_symval(param, SYMBOL_PAR); |
325 | var->var.type = type; | 327 | var->var.type = type; |
326 | if (!insert_symbol(scope, param, var)) { | 328 | if (!insert_symbol(scope, param, var)) { |
327 | return false; | 329 | return false; |