|
|
1.1 root 1: #include "hoc.h"
2: #include "y.tab.h"
3:
4: static Symbol *symlist = 0; /* symbol table: linked list */
5:
6: Symbol *lookup(s) /* find s in symbol table */
7: char *s;
8: {
9: Symbol *sp;
10:
11: for (sp = symlist; sp != (Symbol *) 0; sp = sp->next)
12: if (strcmp(sp->name, s) == 0)
13: return sp;
14: return 0; /* 0 ==> not found */
15: }
16:
17: Symbol *install(s, t, d) /* install s in symbol table */
18: char *s;
19: int t;
20: double d;
21: {
22: Symbol *sp;
23: char *emalloc();
24:
25: sp = (Symbol *) emalloc(sizeof(Symbol));
26: sp->name = emalloc(strlen(s)+1); /* +1 for '\0' */
27: strcpy(sp->name, s);
28: sp->type = t;
29: sp->u.val = d;
30: sp->next = symlist; /* put at front of list */
31: symlist = sp;
32: return sp;
33: }
34:
35: char *emalloc(n) /* check return from malloc */
36: unsigned n;
37: {
38: char *p, *malloc();
39:
40: p = malloc(n);
41: if (p == 0)
42: execerror("out of memory", (char *) 0);
43: return p;
44: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.