|
|
1.1 ! root 1: static char *sccsid = "@(#)lval.c 1.1 (Berkeley) 3/2/81"; ! 2: /* Copyright (c) 1979 Regents of the University of California */ ! 3: # ! 4: /* ! 5: * pxp - Pascal execution profiler ! 6: * ! 7: * Bill Joy UCB ! 8: * Version 1.2 January 1979 ! 9: */ ! 10: ! 11: #include "0.h" ! 12: #include "tree.h" ! 13: ! 14: /* ! 15: * A "variable" ! 16: */ ! 17: lvalue(r) ! 18: register int *r; ! 19: { ! 20: register *c, *co; ! 21: ! 22: ppid(r[2]); ! 23: for (c = r[3]; c != NIL; c = c[2]) { ! 24: co = c[1]; ! 25: if (co == NIL) ! 26: continue; ! 27: switch (co[0]) { ! 28: case T_PTR: ! 29: ppop("^"); ! 30: continue; ! 31: case T_ARY: ! 32: arycod(co[1]); ! 33: continue; ! 34: case T_FIELD: ! 35: ppop("."); ! 36: ppid(co[1]); ! 37: continue; ! 38: case T_ARGL: ! 39: ppid("{unexpected argument list}"); ! 40: break; ! 41: default: ! 42: panic("lval2"); ! 43: } ! 44: } ! 45: } ! 46: ! 47: /* ! 48: * Subscripting ! 49: */ ! 50: arycod(el) ! 51: register int *el; ! 52: { ! 53: ! 54: ppbra("["); ! 55: if (el != NIL) ! 56: for (;;) { ! 57: rvalue(el[1], NIL); ! 58: el = el[2]; ! 59: if (el == NIL) ! 60: break; ! 61: ppsep(", "); ! 62: } ! 63: else ! 64: rvalue(NIL, NIL); ! 65: ppket("]"); ! 66: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.