12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #include <u.h>
- #include <libc.h>
- #include "hoc.h"
- #include "y.tab.h"
- static Symbol *symlist = 0; /* symbol table: linked list */
- Symbol*
- lookup(char* s) /* find s in symbol table */
- {
- Symbol *sp;
- for (sp = symlist; sp != (Symbol *) 0; sp = sp->next)
- if (strcmp(sp->name, s) == 0)
- return sp;
- return 0; /* 0 ==> not found */
- }
- Symbol*
- install(char* s, int t, double d) /* install s in symbol table */
- {
- Symbol *sp;
- sp = emalloc(sizeof(Symbol));
- sp->name = emalloc(strlen(s)+1); /* +1 for '\0' */
- strcpy(sp->name, s);
- sp->type = t;
- sp->u.val = d;
- sp->next = symlist; /* put at front of list */
- symlist = sp;
- return sp;
- }
- void*
- emalloc(unsigned n) /* check return from malloc */
- {
- char *p;
- p = malloc(n);
- if (p == 0)
- execerror("out of memory", (char *) 0);
- return p;
- }
- Formal*
- formallist(Symbol *formal, Formal *list) /* add formal to list */
- {
- Formal *f;
- f = emalloc(sizeof(Formal));
- f->sym = formal;
- f->save = 0;
- f->next = list;
- return f;
- }
|