symbol.c - 9base - revived minimalist port of Plan 9 userland to Unix | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
symbol.c (980B) | |
--- | |
1 #include <u.h> | |
2 #include <libc.h> | |
3 #include "hoc.h" | |
4 #include "y.tab.h" | |
5 | |
6 static Symbol *symlist = 0; /* symbol table: linked list */ | |
7 | |
8 Symbol* | |
9 lookup(char* s) /* find s in symbol table */ | |
10 { | |
11 Symbol *sp; | |
12 | |
13 for (sp = symlist; sp != (Symbol *) 0; sp = sp->next) | |
14 if (strcmp(sp->name, s) == 0) | |
15 return sp; | |
16 return 0; /* 0 ==> not found */ | |
17 } | |
18 | |
19 Symbol* | |
20 install(char* s, int t, double d) /* install s in symbol table */ | |
21 { | |
22 Symbol *sp; | |
23 | |
24 sp = emalloc(sizeof(Symbol)); | |
25 sp->name = emalloc(strlen(s)+1); /* +1 for '\0' */ | |
26 strcpy(sp->name, s); | |
27 sp->type = t; | |
28 sp->u.val = d; | |
29 sp->next = symlist; /* put at front of list */ | |
30 symlist = sp; | |
31 return sp; | |
32 } | |
33 | |
34 void* | |
35 emalloc(unsigned n) /* check return from malloc */ | |
36 { | |
37 char *p; | |
38 | |
39 p = malloc(n); | |
40 if (p == 0) | |
41 execerror("out of memory", (char *) 0); | |
42 return p; | |
43 } | |
44 | |
45 Formal* | |
46 formallist(Symbol *formal, Formal *list) /* add formal to list */ | |
47 { | |
48 Formal *f; | |
49 | |
50 f = emalloc(sizeof(Formal)); | |
51 f->sym = formal; | |
52 f->save = 0; | |
53 f->next = list; | |
54 return f; | |
55 } |