summaryrefslogtreecommitdiff
path: root/symbol.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-13 19:45:22 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-13 19:45:22 +0000
commit50d6dd8b50958271bf1ff13f99dc21d4cd8431f7 (patch)
tree504f2a16f29fefedc7ff0a326475f122d018590a /symbol.c
parentb1b55e907a5aaf177344769d2b303351ba936bff (diff)
Implement basic reference counting for arrays, which so they
get freed when not in use anymore.
Diffstat (limited to 'symbol.c')
-rw-r--r--symbol.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/symbol.c b/symbol.c
index 55e3f15..294d9a4 100644
--- a/symbol.c
+++ b/symbol.c
@@ -38,6 +38,21 @@ newsymtab(void)
return tab;
}
+void
+freesymtab(Symtab *tab)
+{
+ print("Freeing symtab\n");
+ int i;
+ for(i = 0; i < tab->nsyms; i++){
+ Symbol *s = tab->syms[i];
+ if(s->undefined == 0 && s->value.tag == ArrayTag)
+ freearray(s->value.array);
+ }
+ free(tab->syms);
+ free(tab);
+ print("Done freeing symtab\n");
+}
+
vlong
globalIO(void)
{