diff options
author | Bad Diode <bd@badd10de.dev> | 2022-04-19 11:03:19 -0300 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-04-19 11:03:19 -0300 |
commit | 0bdf2ff42892b6363f703fe8f00f865a96dde223 (patch) | |
tree | 4ecf5c654d6428abffee03ceb4c14d04f71938be | |
parent | d9538a32bfe8e2cb9de4cdcfdf8a8c6e1a27ac3c (diff) | |
download | bdl-0bdf2ff42892b6363f703fe8f00f865a96dde223.tar.gz bdl-0bdf2ff42892b6363f703fe8f00f865a96dde223.zip |
Make distinction between sym parameter and variables
-rw-r--r-- | src/semantic.c | 4 | ||||
-rw-r--r-- | src/viz.c | 6 |
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 | ||
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; |
@@ -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>"); |