diff options
author | Tucker Evans <tuckerevans24@gmail.com> | 2019-09-30 23:19:04 -0400 |
---|---|---|
committer | Tucker Evans <tuckerevans24@gmail.com> | 2019-09-30 23:28:25 -0400 |
commit | 59f7f4ccb71eb489690ada8821977455ab377699 (patch) | |
tree | e23b192f57e5bc836b733e5eea19637c9f700b19 | |
parent | 6b3e004224ccba39199606f2683265c9e4606e43 (diff) |
Fix search now uses scope->ret_var
Allows for the scope to contain the function without having to worry
about multiple nodes with the same name.
-rw-r--r-- | pc.y | 2 | ||||
-rw-r--r-- | scope.c | 13 |
2 files changed, 11 insertions, 4 deletions
@@ -222,7 +222,7 @@ sub_prog_head /* Need to duplicate ID.name so it is not freed with inner * scope*/ - cur_scope->ret_var = scope_insert(cur_scope, strdup($2)); + cur_scope->ret_var = mknode(strdup($2)); cur_scope->ret_var->var_type = $5; $$ = $2; @@ -36,7 +36,9 @@ scope *s; free_list(s->table[i]); } - /*free_list takes care of freeing s->ret_var*/ + if (s->ret_var) + free(s->ret_var); + s->ret_var = NULL; free(s); s = NULL; @@ -100,9 +102,14 @@ node* scope_search(root, name) scope *root; char *name; { - int hash = hashpjw(name); + int hash; + node *tmp; - node *tmp = root->table[hash]; + if (root->ret_var && !strcmp(root->ret_var->name, name)) + return root->ret_var; + + hash = hashpjw(name); + tmp = root->table[hash]; return list_search(tmp, name); } |