aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/semantic.c4
-rw-r--r--src/viz.c6
2 files changed, 9 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
52typedef enum SymbolType { 52typedef 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;
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) {
196 print_node(sym->name); 196 print_node(sym->name);
197 printf("</td>"); 197 printf("</td>");
198 switch (sym->type) { 198 switch (sym->type) {
199 case SYMBOL_PAR: {
200 printf("<td>par</td>");
201 printf("<td>");
202 print_node(sym->var.type);
203 printf("</td>");
204 } break;
199 case SYMBOL_VAR: { 205 case SYMBOL_VAR: {
200 printf("<td>var</td>"); 206 printf("<td>var</td>");
201 printf("<td>"); 207 printf("<td>");