summaryrefslogtreecommitdiff
path: root/symbol.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-11 23:21:05 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-11 23:21:05 +0000
commit37fe04b08b3cae7390f75eb1bb25d8fd4e958384 (patch)
tree53a6fd51258c5a7113b7bd7fa3766a47a0173070 /symbol.c
parentba681c740d09deb36587b847a3307c68de933c4c (diff)
First try at implementing variables
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