xref: /csrg-svn/usr.bin/pascal/pxp/const.c (revision 3050)
1*3050Smckusic static	char *sccsid = "@(#)const.c	1.2 (Berkeley) 03/07/81";
22851Speter /* Copyright (c) 1979 Regents of the University of California */
32851Speter #
42851Speter /*
52851Speter  * pxp - Pascal execution profiler
62851Speter  *
72851Speter  * Bill Joy UCB
82851Speter  * Version 1.2 January 1979
92851Speter  */
102851Speter 
112851Speter #include "0.h"
122851Speter #include "tree.h"
132851Speter 
14*3050Smckusic STATIC	int constcnt = -1;
152851Speter 
162851Speter /*
172851Speter  * The const declaration part
182851Speter  */
192851Speter constbeg(l, cline)
202851Speter 	int l, cline;
212851Speter {
222851Speter 
232851Speter 	line = l;
242851Speter 	if (nodecl)
252851Speter 		printoff();
262851Speter 	puthedr();
272851Speter 	putcm();
282851Speter 	ppnl();
292851Speter 	indent();
302851Speter 	ppkw("const");
312851Speter 	ppgoin(DECL);
322851Speter 	constcnt = 0;
332851Speter 	setline(cline);
342851Speter }
352851Speter 
362851Speter const(cline, cid, cdecl)
372851Speter 	int cline;
382851Speter 	char *cid;
392851Speter 	int *cdecl;
402851Speter {
412851Speter 
422851Speter 	if (constcnt)
432851Speter 		putcm();
442851Speter 	setline(cline);
452851Speter 	ppitem();
462851Speter 	ppid(cid);
472851Speter 	ppsep(" = ");
482851Speter 	gconst(cdecl);
492851Speter 	ppsep(";");
502851Speter 	constcnt++;
512851Speter 	setinfo(cline);
522851Speter 	putcml();
532851Speter }
542851Speter 
552851Speter constend()
562851Speter {
572851Speter 
582851Speter 	if (constcnt == -1)
592851Speter 		return;
602851Speter 	if (nodecl)
612851Speter 		return;
622851Speter 	if (constcnt == 0)
632851Speter 		ppid("{const decls}");
642851Speter 	ppgoout(DECL);
652851Speter 	constcnt = -1;
662851Speter }
672851Speter 
682851Speter /*
692851Speter  * A constant in an expression
702851Speter  * or a declaration.
712851Speter  */
722851Speter gconst(r)
732851Speter 	int *r;
742851Speter {
752851Speter 	register *cn;
762851Speter 
772851Speter 	cn = r;
782851Speter loop:
792851Speter 	if (cn == NIL) {
802851Speter 		ppid("{constant}");
812851Speter 		return;
822851Speter 	}
832851Speter 	switch (cn[0]) {
842851Speter 		default:
852851Speter 			panic("gconst");
862851Speter 		case T_PLUSC:
872851Speter 			ppop("+");
882851Speter 			cn = cn[1];
892851Speter 			goto loop;
902851Speter 		case T_MINUSC:
912851Speter 			ppop("-");
922851Speter 			cn = cn[1];
932851Speter 			goto loop;
942851Speter 		case T_ID:
952851Speter 			ppid(cn[1]);
962851Speter 			return;
972851Speter 		case T_CBINT:
982851Speter 		case T_CINT:
992851Speter 		case T_CFINT:
1002851Speter 			ppnumb(cn[1]);
1012851Speter 			if (cn[0] == T_CBINT)
1022851Speter 				ppsep("b");
1032851Speter 			return;
1042851Speter 		case T_CSTRNG:
1052851Speter 			ppstr(cn[1]);
1062851Speter 			return;
1072851Speter 	}
1082851Speter }
109