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