|
|
1.1 root 1: /* Copyright (c) 1979 Regents of the University of California */
2: #
3: /*
4: * pxp - Pascal execution profiler
5: *
6: * Bill Joy UCB
7: * Version 1.2 January 1979
8: */
9:
10: #include "0.h"
11: #include "tree.h"
12:
13: STATIC int constcnt -1;
14:
15: /*
16: * The const declaration part
17: */
18: constbeg(l, cline)
19: int l, cline;
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: setline(cline);
33: }
34:
35: const(cline, cid, cdecl)
36: int cline;
37: char *cid;
38: int *cdecl;
39: {
40:
41: if (constcnt)
42: putcm();
43: setline(cline);
44: ppitem();
45: ppid(cid);
46: ppsep(" = ");
47: gconst(cdecl);
48: ppsep(";");
49: constcnt++;
50: setinfo(cline);
51: putcml();
52: }
53:
54: constend()
55: {
56:
57: if (constcnt == -1)
58: return;
59: if (nodecl)
60: return;
61: if (constcnt == 0)
62: ppid("{const decls}");
63: ppgoout(DECL);
64: constcnt = -1;
65: }
66:
67: /*
68: * A constant in an expression
69: * or a declaration.
70: */
71: gconst(r)
72: int *r;
73: {
74: register *cn;
75:
76: cn = r;
77: loop:
78: if (cn == NIL) {
79: ppid("{constant}");
80: return;
81: }
82: switch (cn[0]) {
83: default:
84: panic("gconst");
85: case T_PLUSC:
86: ppop("+");
87: cn = cn[1];
88: goto loop;
89: case T_MINUSC:
90: ppop("-");
91: cn = cn[1];
92: goto loop;
93: case T_ID:
94: ppid(cn[1]);
95: return;
96: case T_CBINT:
97: case T_CINT:
98: case T_CFINT:
99: ppnumb(cn[1]);
100: if (cn[0] == T_CBINT)
101: ppsep("b");
102: return;
103: case T_CSTRNG:
104: ppstr(cn[1]);
105: return;
106: }
107: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.