summaryrefslogtreecommitdiff
path: root/symbol.c
diff options
context:
space:
mode:
Diffstat (limited to 'symbol.c')
-rw-r--r--symbol.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/symbol.c b/symbol.c
new file mode 100644
index 0000000..a9d1d1f
--- /dev/null
+++ b/symbol.c
@@ -0,0 +1,31 @@
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+
+#include "apl9.h"
+
+Symtab *globalsymtab;
+
+Symbol *
+getsym(Symtab *tab, Rune *name)
+{
+ for(int i = 0; i < tab->nsyms; i++)
+ if(runestrcmp(tab->syms[i]->name, name) == 0)
+ return tab->syms[i];
+
+ tab->nsyms++;
+ tab->syms = realloc(tab->syms, sizeof(Symbol *) * tab->nsyms);
+ tab->syms[tab->nsyms-1] = malloc(sizeof(Symbol));
+ tab->syms[tab->nsyms-1]->name = runestrdup(name);
+ tab->syms[tab->nsyms-1]->undefined = 1;
+ return tab->syms[tab->nsyms-1];
+}
+
+Symtab *
+newsymtab(void)
+{
+ Symtab *tab = malloc(sizeof(Symtab));
+ tab->nsyms = 0;
+ tab->syms = nil;
+ return tab;
+} \ No newline at end of file