mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
56 lines
980 B
C
56 lines
980 B
C
|
#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;
|
||
|
}
|