From 37fe04b08b3cae7390f75eb1bb25d8fd4e958384 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Tue, 11 Jan 2022 23:21:05 +0000 Subject: First try at implementing variables --- symbol.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 symbol.c (limited to 'symbol.c') 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 +#include +#include + +#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 -- cgit v1.2.3