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