xref: /plan9/sys/src/cmd/hoc/symbol.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier #include "hoc.h"
43e12c5d1SDavid du Colombier #include "y.tab.h"
53e12c5d1SDavid du Colombier 
63e12c5d1SDavid du Colombier static Symbol *symlist = 0;  /* symbol table: linked list */
73e12c5d1SDavid du Colombier 
83e12c5d1SDavid du Colombier Symbol*
lookup(char * s)93e12c5d1SDavid du Colombier lookup(char* s)	/* find s in symbol table */
103e12c5d1SDavid du Colombier {
113e12c5d1SDavid du Colombier 	Symbol *sp;
123e12c5d1SDavid du Colombier 
133e12c5d1SDavid du Colombier 	for (sp = symlist; sp != (Symbol *) 0; sp = sp->next)
143e12c5d1SDavid du Colombier 		if (strcmp(sp->name, s) == 0)
153e12c5d1SDavid du Colombier 			return sp;
163e12c5d1SDavid du Colombier 	return 0;	/* 0 ==> not found */
173e12c5d1SDavid du Colombier }
183e12c5d1SDavid du Colombier 
193e12c5d1SDavid du Colombier Symbol*
install(char * s,int t,double d)203e12c5d1SDavid du Colombier install(char* s, int t, double d)  /* install s in symbol table */
213e12c5d1SDavid du Colombier {
223e12c5d1SDavid du Colombier 	Symbol *sp;
233e12c5d1SDavid du Colombier 
243e12c5d1SDavid du Colombier 	sp = emalloc(sizeof(Symbol));
253e12c5d1SDavid du Colombier 	sp->name = emalloc(strlen(s)+1); /* +1 for '\0' */
263e12c5d1SDavid du Colombier 	strcpy(sp->name, s);
273e12c5d1SDavid du Colombier 	sp->type = t;
283e12c5d1SDavid du Colombier 	sp->u.val = d;
293e12c5d1SDavid du Colombier 	sp->next = symlist; /* put at front of list */
303e12c5d1SDavid du Colombier 	symlist = sp;
313e12c5d1SDavid du Colombier 	return sp;
323e12c5d1SDavid du Colombier }
333e12c5d1SDavid du Colombier 
343e12c5d1SDavid du Colombier void*
emalloc(unsigned n)353e12c5d1SDavid du Colombier emalloc(unsigned n)	/* check return from malloc */
363e12c5d1SDavid du Colombier {
373e12c5d1SDavid du Colombier 	char *p;
383e12c5d1SDavid du Colombier 
393e12c5d1SDavid du Colombier 	p = malloc(n);
403e12c5d1SDavid du Colombier 	if (p == 0)
413e12c5d1SDavid du Colombier 		execerror("out of memory", (char *) 0);
423e12c5d1SDavid du Colombier 	return p;
433e12c5d1SDavid du Colombier }
44*7dd7cddfSDavid du Colombier 
45*7dd7cddfSDavid du Colombier Formal*
formallist(Symbol * formal,Formal * list)46*7dd7cddfSDavid du Colombier formallist(Symbol *formal, Formal *list)	/* add formal to list */
47*7dd7cddfSDavid du Colombier {
48*7dd7cddfSDavid du Colombier 	Formal *f;
49*7dd7cddfSDavid du Colombier 
50*7dd7cddfSDavid du Colombier 	f = emalloc(sizeof(Formal));
51*7dd7cddfSDavid du Colombier 	f->sym = formal;
52*7dd7cddfSDavid du Colombier 	f->save = 0;
53*7dd7cddfSDavid du Colombier 	f->next = list;
54*7dd7cddfSDavid du Colombier 	return f;
55*7dd7cddfSDavid du Colombier }
56