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