symbol.c 980 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <u.h>
  2. #include <libc.h>
  3. #include "hoc.h"
  4. #include "y.tab.h"
  5. static Symbol *symlist = 0; /* symbol table: linked list */
  6. Symbol*
  7. lookup(char* s) /* find s in symbol table */
  8. {
  9. Symbol *sp;
  10. for (sp = symlist; sp != (Symbol *) 0; sp = sp->next)
  11. if (strcmp(sp->name, s) == 0)
  12. return sp;
  13. return 0; /* 0 ==> not found */
  14. }
  15. Symbol*
  16. install(char* s, int t, double d) /* install s in symbol table */
  17. {
  18. Symbol *sp;
  19. sp = emalloc(sizeof(Symbol));
  20. sp->name = emalloc(strlen(s)+1); /* +1 for '\0' */
  21. strcpy(sp->name, s);
  22. sp->type = t;
  23. sp->u.val = d;
  24. sp->next = symlist; /* put at front of list */
  25. symlist = sp;
  26. return sp;
  27. }
  28. void*
  29. emalloc(unsigned n) /* check return from malloc */
  30. {
  31. char *p;
  32. p = malloc(n);
  33. if (p == 0)
  34. execerror("out of memory", (char *) 0);
  35. return p;
  36. }
  37. Formal*
  38. formallist(Symbol *formal, Formal *list) /* add formal to list */
  39. {
  40. Formal *f;
  41. f = emalloc(sizeof(Formal));
  42. f->sym = formal;
  43. f->save = 0;
  44. f->next = list;
  45. return f;
  46. }