|
|
1.1 ! root 1: /* Copyright (c) 1979 Regents of the University of California */ ! 2: # ! 3: /* ! 4: * pi - Pascal interpreter code translator ! 5: * ! 6: * Charles Haley, Bill Joy UCB ! 7: * Version 1.2 November 1978 ! 8: */ ! 9: ! 10: #include "whoami" ! 11: #include "0.h" ! 12: ! 13: /* ! 14: * Lookup is called to ! 15: * find a symbol in the ! 16: * block structure symbol ! 17: * table and returns a pointer to ! 18: * its namelist entry. ! 19: */ ! 20: struct nl * ! 21: lookup(s) ! 22: register char *s; ! 23: { ! 24: register struct nl *p; ! 25: register struct udinfo *udp; ! 26: ! 27: if (s == NIL) { ! 28: nocascade(); ! 29: return (NIL); ! 30: } ! 31: p = lookup1(s); ! 32: if (p == NIL) { ! 33: derror("%s is undefined", s); ! 34: return (NIL); ! 35: } ! 36: if (p->class == FVAR) { ! 37: p = p->chain; ! 38: bn--; ! 39: } ! 40: return (p); ! 41: } ! 42: ! 43: #ifndef PI0 ! 44: int flagwas; ! 45: #endif ! 46: /* ! 47: * Lookup1 is an internal lookup. ! 48: * It is not an error to call lookup1 ! 49: * if the symbol is not defined. Also ! 50: * lookup1 will return FVARs while ! 51: * lookup never will, thus asgnop ! 52: * calls it when it thinks you are ! 53: * assigning to the function variable. ! 54: */ ! 55: ! 56: struct nl * ! 57: lookup1(s) ! 58: register char *s; ! 59: { ! 60: register struct nl *p; ! 61: #ifndef PI0 ! 62: register struct nl *q; ! 63: #endif ! 64: register int i; ! 65: ! 66: if (s == NIL) ! 67: return (NIL); ! 68: bn = cbn; ! 69: #ifndef PI0 ! 70: /* ! 71: * We first check the field names ! 72: * of the currently active with ! 73: * statements (expensive since they ! 74: * are not hashed). ! 75: */ ! 76: for (p = withlist; p != NIL; p = p->nl_next) { ! 77: q = p->type; ! 78: if (q == NIL) ! 79: continue; ! 80: if (reclook(q, s) != NIL) ! 81: /* ! 82: * Return the WITHPTR, lvalue understands. ! 83: */ ! 84: return (p); ! 85: } ! 86: #endif ! 87: /* ! 88: * Symbol table is a 64 way hash ! 89: * on the low bits of the character ! 90: * pointer value. (Simple, but effective) ! 91: */ ! 92: i = (int) s & 077; ! 93: for (p = disptab[i]; p != NIL; p = p->nl_next) ! 94: if (p->symbol == s && p->class != FIELD && p->class != BADUSE) { ! 95: bn = (p->nl_block & 037); ! 96: #ifndef PI0 ! 97: flagwas = p->nl_flags; ! 98: p->nl_flags |= NUSED; ! 99: #endif ! 100: return (p); ! 101: } ! 102: return (NIL); ! 103: } ! 104: ! 105: #ifndef PI01 ! 106: nlfund(sp) ! 107: char *sp; ! 108: { ! 109: register struct nl *p; ! 110: register int i; ! 111: ! 112: i = (int) sp & 077; ! 113: for (p = disptab[i]; p != NIL; p = p->nl_next) ! 114: if (p->symbol == sp && (p->nl_block & 037) == 0) ! 115: return (nloff(p)); ! 116: return (0); ! 117: } ! 118: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.