xref: /csrg-svn/usr.bin/pascal/pxp/const.c (revision 62189)
148112Sbostic /*-
2*62189Sbostic  * Copyright (c) 1980, 1993
3*62189Sbostic  *	The Regents of the University of California.  All rights reserved.
448112Sbostic  *
548112Sbostic  * %sccs.include.redist.c%
622225Sdist  */
722225Sdist 
822225Sdist #ifndef lint
9*62189Sbostic static char sccsid[] = "@(#)const.c	8.1 (Berkeley) 06/06/93";
1048112Sbostic #endif /* not lint */
1122225Sdist 
1222225Sdist /*
132851Speter  * pxp - Pascal execution profiler
142851Speter  *
152851Speter  * Bill Joy UCB
162851Speter  * Version 1.2 January 1979
172851Speter  */
182851Speter 
192851Speter #include "0.h"
202851Speter #include "tree.h"
212851Speter 
223050Smckusic STATIC	int constcnt = -1;
232851Speter 
242851Speter /*
252851Speter  * The const declaration part
262851Speter  */
constbeg(l,cline)272851Speter constbeg(l, cline)
282851Speter 	int l, cline;
292851Speter {
302851Speter 
312851Speter 	line = l;
322851Speter 	if (nodecl)
332851Speter 		printoff();
342851Speter 	puthedr();
352851Speter 	putcm();
362851Speter 	ppnl();
372851Speter 	indent();
382851Speter 	ppkw("const");
392851Speter 	ppgoin(DECL);
402851Speter 	constcnt = 0;
412851Speter 	setline(cline);
422851Speter }
432851Speter 
constant(cline,cid,cdecl)4433239Sbostic constant(cline, cid, cdecl)
452851Speter 	int cline;
462851Speter 	char *cid;
472851Speter 	int *cdecl;
482851Speter {
492851Speter 
502851Speter 	if (constcnt)
512851Speter 		putcm();
522851Speter 	setline(cline);
532851Speter 	ppitem();
542851Speter 	ppid(cid);
552851Speter 	ppsep(" = ");
562851Speter 	gconst(cdecl);
572851Speter 	ppsep(";");
582851Speter 	constcnt++;
592851Speter 	setinfo(cline);
602851Speter 	putcml();
612851Speter }
622851Speter 
constend()632851Speter constend()
642851Speter {
652851Speter 
662851Speter 	if (constcnt == -1)
672851Speter 		return;
682851Speter 	if (nodecl)
692851Speter 		return;
702851Speter 	if (constcnt == 0)
712851Speter 		ppid("{const decls}");
722851Speter 	ppgoout(DECL);
732851Speter 	constcnt = -1;
742851Speter }
752851Speter 
762851Speter /*
772851Speter  * A constant in an expression
782851Speter  * or a declaration.
792851Speter  */
gconst(r)802851Speter gconst(r)
812851Speter 	int *r;
822851Speter {
832851Speter 	register *cn;
842851Speter 
852851Speter 	cn = r;
862851Speter loop:
872851Speter 	if (cn == NIL) {
882851Speter 		ppid("{constant}");
892851Speter 		return;
902851Speter 	}
912851Speter 	switch (cn[0]) {
922851Speter 		default:
932851Speter 			panic("gconst");
942851Speter 		case T_PLUSC:
952851Speter 			ppop("+");
962851Speter 			cn = cn[1];
972851Speter 			goto loop;
982851Speter 		case T_MINUSC:
992851Speter 			ppop("-");
1002851Speter 			cn = cn[1];
1012851Speter 			goto loop;
1022851Speter 		case T_ID:
1032851Speter 			ppid(cn[1]);
1042851Speter 			return;
1052851Speter 		case T_CBINT:
1062851Speter 		case T_CINT:
1072851Speter 		case T_CFINT:
1082851Speter 			ppnumb(cn[1]);
1092851Speter 			if (cn[0] == T_CBINT)
1102851Speter 				ppsep("b");
1112851Speter 			return;
1122851Speter 		case T_CSTRNG:
1132851Speter 			ppstr(cn[1]);
1142851Speter 			return;
1152851Speter 	}
1162851Speter }
117