From 59f7f4ccb71eb489690ada8821977455ab377699 Mon Sep 17 00:00:00 2001 From: Tucker Evans Date: Mon, 30 Sep 2019 23:19:04 -0400 Subject: 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. --- pc.y | 2 +- scope.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/pc.y b/pc.y index 32be027..72ac10b 100644 --- a/pc.y +++ b/pc.y @@ -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; diff --git a/scope.c b/scope.c index 8b70c5b..ef9e4f5 100644 --- a/scope.c +++ b/scope.c @@ -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); } -- cgit v1.1