]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/hoc/symbol.c
merge
[plan9front.git] / sys / src / cmd / hoc / symbol.c
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 }