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