xref: /csrg-svn/usr.bin/pascal/pxp/lval.c (revision 22231)
12857Speter /*
2*22231Sdist  * Copyright (c) 1980 Regents of the University of California.
3*22231Sdist  * All rights reserved.  The Berkeley software License Agreement
4*22231Sdist  * specifies the terms and conditions for redistribution.
5*22231Sdist  */
6*22231Sdist 
7*22231Sdist #ifndef lint
8*22231Sdist static char sccsid[] = "@(#)lval.c	5.1 (Berkeley) 06/05/85";
9*22231Sdist #endif not lint
10*22231Sdist 
11*22231Sdist /*
122857Speter  * pxp - Pascal execution profiler
132857Speter  *
142857Speter  * Bill Joy UCB
152857Speter  * Version 1.2 January 1979
162857Speter  */
172857Speter 
182857Speter #include "0.h"
192857Speter #include "tree.h"
202857Speter 
212857Speter /*
222857Speter  * A "variable"
232857Speter  */
242857Speter lvalue(r)
252857Speter 	register int *r;
262857Speter {
272857Speter 	register *c, *co;
282857Speter 
292857Speter 	ppid(r[2]);
302857Speter 	for (c = r[3]; c != NIL; c = c[2]) {
312857Speter 		co = c[1];
322857Speter 		if (co == NIL)
332857Speter 			continue;
342857Speter 		switch (co[0]) {
352857Speter 			case T_PTR:
362857Speter 				ppop("^");
372857Speter 				continue;
382857Speter 			case T_ARY:
392857Speter 				arycod(co[1]);
402857Speter 				continue;
412857Speter 			case T_FIELD:
422857Speter 				ppop(".");
432857Speter 				ppid(co[1]);
442857Speter 				continue;
452857Speter 			case T_ARGL:
462857Speter 				ppid("{unexpected argument list}");
472857Speter 				break;
482857Speter 			default:
492857Speter 				panic("lval2");
502857Speter 		}
512857Speter 	}
522857Speter }
532857Speter 
542857Speter /*
552857Speter  * Subscripting
562857Speter  */
572857Speter arycod(el)
582857Speter 	register int *el;
592857Speter {
602857Speter 
612857Speter 	ppbra("[");
622857Speter 	if (el != NIL)
632857Speter 		for (;;) {
642857Speter 			rvalue(el[1], NIL);
652857Speter 			el = el[2];
662857Speter 			if (el == NIL)
672857Speter 				break;
682857Speter 			ppsep(", ");
692857Speter 		}
702857Speter 	else
712857Speter 		rvalue(NIL, NIL);
722857Speter 	ppket("]");
732857Speter }
74