xref: /csrg-svn/usr.bin/pascal/pxp/const.c (revision 2851)
1*2851Speter static	char *sccsid = "@(#)const.c	1.1 (Berkeley) 03/02/81";
2*2851Speter /* Copyright (c) 1979 Regents of the University of California */
3*2851Speter #
4*2851Speter /*
5*2851Speter  * pxp - Pascal execution profiler
6*2851Speter  *
7*2851Speter  * Bill Joy UCB
8*2851Speter  * Version 1.2 January 1979
9*2851Speter  */
10*2851Speter 
11*2851Speter #include "0.h"
12*2851Speter #include "tree.h"
13*2851Speter 
14*2851Speter STATIC	int constcnt -1;
15*2851Speter 
16*2851Speter /*
17*2851Speter  * The const declaration part
18*2851Speter  */
19*2851Speter constbeg(l, cline)
20*2851Speter 	int l, cline;
21*2851Speter {
22*2851Speter 
23*2851Speter 	line = l;
24*2851Speter 	if (nodecl)
25*2851Speter 		printoff();
26*2851Speter 	puthedr();
27*2851Speter 	putcm();
28*2851Speter 	ppnl();
29*2851Speter 	indent();
30*2851Speter 	ppkw("const");
31*2851Speter 	ppgoin(DECL);
32*2851Speter 	constcnt = 0;
33*2851Speter 	setline(cline);
34*2851Speter }
35*2851Speter 
36*2851Speter const(cline, cid, cdecl)
37*2851Speter 	int cline;
38*2851Speter 	char *cid;
39*2851Speter 	int *cdecl;
40*2851Speter {
41*2851Speter 
42*2851Speter 	if (constcnt)
43*2851Speter 		putcm();
44*2851Speter 	setline(cline);
45*2851Speter 	ppitem();
46*2851Speter 	ppid(cid);
47*2851Speter 	ppsep(" = ");
48*2851Speter 	gconst(cdecl);
49*2851Speter 	ppsep(";");
50*2851Speter 	constcnt++;
51*2851Speter 	setinfo(cline);
52*2851Speter 	putcml();
53*2851Speter }
54*2851Speter 
55*2851Speter constend()
56*2851Speter {
57*2851Speter 
58*2851Speter 	if (constcnt == -1)
59*2851Speter 		return;
60*2851Speter 	if (nodecl)
61*2851Speter 		return;
62*2851Speter 	if (constcnt == 0)
63*2851Speter 		ppid("{const decls}");
64*2851Speter 	ppgoout(DECL);
65*2851Speter 	constcnt = -1;
66*2851Speter }
67*2851Speter 
68*2851Speter /*
69*2851Speter  * A constant in an expression
70*2851Speter  * or a declaration.
71*2851Speter  */
72*2851Speter gconst(r)
73*2851Speter 	int *r;
74*2851Speter {
75*2851Speter 	register *cn;
76*2851Speter 
77*2851Speter 	cn = r;
78*2851Speter loop:
79*2851Speter 	if (cn == NIL) {
80*2851Speter 		ppid("{constant}");
81*2851Speter 		return;
82*2851Speter 	}
83*2851Speter 	switch (cn[0]) {
84*2851Speter 		default:
85*2851Speter 			panic("gconst");
86*2851Speter 		case T_PLUSC:
87*2851Speter 			ppop("+");
88*2851Speter 			cn = cn[1];
89*2851Speter 			goto loop;
90*2851Speter 		case T_MINUSC:
91*2851Speter 			ppop("-");
92*2851Speter 			cn = cn[1];
93*2851Speter 			goto loop;
94*2851Speter 		case T_ID:
95*2851Speter 			ppid(cn[1]);
96*2851Speter 			return;
97*2851Speter 		case T_CBINT:
98*2851Speter 		case T_CINT:
99*2851Speter 		case T_CFINT:
100*2851Speter 			ppnumb(cn[1]);
101*2851Speter 			if (cn[0] == T_CBINT)
102*2851Speter 				ppsep("b");
103*2851Speter 			return;
104*2851Speter 		case T_CSTRNG:
105*2851Speter 			ppstr(cn[1]);
106*2851Speter 			return;
107*2851Speter 	}
108*2851Speter }
109