From 0bdf2ff42892b6363f703fe8f00f865a96dde223 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 19 Apr 2022 11:03:19 -0300 Subject: Make distinction between sym parameter and variables --- src/semantic.c | 4 +++- src/viz.c | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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[] = { typedef enum SymbolType { SYMBOL_VAR, + SYMBOL_PAR, SYMBOL_FUN, } SymbolType; @@ -298,6 +299,7 @@ resolve_type(ParseTree *ast, Scope *scope, Node *node) { Type *type = NULL; switch (val->type) { + case SYMBOL_PAR: case SYMBOL_VAR: { type = find_type(scope, val->var.type); } break; @@ -321,7 +323,7 @@ resolve_type(ParseTree *ast, Scope *scope, Node *node) { for (size_t i = 0; i < array_size(node->fun.param_names); ++i) { Node *param = node->fun.param_names[i]; Node *type = node->fun.param_types[i]; - Symbol *var = alloc_symval(param, SYMBOL_VAR); + Symbol *var = alloc_symval(param, SYMBOL_PAR); var->var.type = type; if (!insert_symbol(scope, param, var)) { return false; diff --git a/src/viz.c b/src/viz.c index c3b05f9..d57ece5 100644 --- a/src/viz.c +++ b/src/viz.c @@ -196,6 +196,12 @@ viz_symtables(Scope **scopes) { print_node(sym->name); printf(""); switch (sym->type) { + case SYMBOL_PAR: { + printf("par"); + printf(""); + print_node(sym->var.type); + printf(""); + } break; case SYMBOL_VAR: { printf("var"); printf(""); -- cgit v1.2.1