|
|
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: /*
14: * Case statement
15: */
16: caseop(r)
17: int *r;
18: {
19: register *cl, *cs, i;
20: struct pxcnt scnt;
21:
22: savecnt(&scnt);
23: ppkw("case");
24: ppspac();
25: rvalue(r[2], NIL);
26: ppspac();
27: ppkw("of");
28: for (cl = r[3]; cl != NIL;) {
29: cs = cl[1];
30: if (cs == NIL)
31: continue;
32: baroff();
33: ppgoin(DECL);
34: setline(cs[1]);
35: ppnl();
36: indent();
37: ppbra(NIL);
38: cs = cs[2];
39: if (cs != NIL) {
40: i = 0;
41: for (;;) {
42: gconst(cs[1]);
43: cs = cs[2];
44: if (cs == NIL)
45: break;
46: i++;
47: if (i == 7) {
48: ppsep(",");
49: ppitem();
50: i = 0;
51: } else
52: ppsep(", ");
53: }
54: } else
55: ppid("{case label list}");
56: ppket(":");
57: cs = cl[1];
58: cs = cs[3];
59: getcnt();
60: ppgoin(STAT);
61: if (cs != NIL && cs[0] == T_BLOCK) {
62: ppnl();
63: indent();
64: baron();
65: ppstbl1(cs, STAT);
66: baroff();
67: ppstbl2();
68: baron();
69: } else {
70: baron();
71: statement(cs);
72: }
73: ppgoout(STAT);
74: ppgoout(DECL);
75: cl = cl[2];
76: if (cl == NIL)
77: break;
78: ppsep(";");
79: }
80: if (rescnt(&scnt))
81: getcnt();
82: ppnl();
83: indent();
84: ppkw("end");
85: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.