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 Colombierlookup(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 Colombierinstall(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 Colombieremalloc(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 Colombierformallist(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