Blame


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