diff options
Diffstat (limited to 'symbol.c')
-rw-r--r-- | symbol.c | 31 |
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 |