Annotation of 42BSD/ucb/pascal/pxp/stat.c, revision 1.1.1.1

1.1       root        1: static char *sccsid = "@(#)stat.c      1.3 (Berkeley) 8/30/82";
                      2: /* Copyright (c) 1979 Regents of the University of California */
                      3: #
                      4: /*
                      5:  * pxp - Pascal execution profiler
                      6:  *
                      7:  * Bill Joy UCB
                      8:  * Version 1.2 January 1979
                      9:  */
                     10: 
                     11: #include "0.h"
                     12: #include "tree.h"
                     13: 
                     14: int cntstat;
                     15: int cnts = 3;
                     16: 
                     17: statlist(r)
                     18:        int *r;
                     19: {
                     20:        register int *sl;
                     21: 
                     22:        sl = r;
                     23:        if (sl != NIL)
                     24:                for (;;) {
                     25:                        statement(sl[1]);
                     26:                        sl = sl[2];
                     27:                        if (sl == NIL)
                     28:                                break;
                     29:                        ppsep(";");
                     30:                }
                     31:        else
                     32:                statement(NIL);
                     33: }
                     34: 
                     35: 
                     36: statement(r)
                     37:        int *r;
                     38: {
                     39:        register int *s;
                     40: 
                     41:        s = r;
                     42: top:
                     43:        if (cntstat) {
                     44:                cntstat = 0;
                     45:                getcnt();
                     46:        }
                     47:        if (s == NIL) {
                     48:                putcm();
                     49:                ppitem();
                     50:                ppid("null");
                     51:                return;
                     52:        }
                     53:        if (s[0] == T_REPEAT)
                     54:                setinfo(s[1]);
                     55:        else
                     56:                setline(s[1]);
                     57:        if (s[0] == T_LABEL) {
                     58:                cntstat = 1;
                     59:                ppnl();
                     60:                labeled(s[2]);
                     61:                statement(s[3]);
                     62:                return;
                     63:        }
                     64:        switch (s[0]) {
                     65:                default:
                     66:                        panic("stat");
                     67:                case T_PCALL:
                     68:                        ppitem();
                     69:                        proc(s);
                     70:                        break;
                     71:                case T_IF:
                     72:                case T_IFEL:
                     73:                        ppnl();
                     74:                        indent();
                     75:                        ifop(s);
                     76:                        break;
                     77:                case T_WHILE:
                     78:                        ppnl();
                     79:                        indent();
                     80:                        whilop(s);
                     81:                        break;
                     82:                case T_REPEAT:
                     83:                        ppnl();
                     84:                        indent();
                     85:                        repop(s);
                     86:                        break;
                     87:                case T_FORU:
                     88:                case T_FORD:
                     89:                        ppnl();
                     90:                        indent();
                     91:                        forop(s);
                     92:                        break;
                     93:                case T_BLOCK:
                     94:                        ppnl();
                     95:                        indent();
                     96:                        ppstbl(s, DECL);
                     97:                        break;
                     98:                case T_ASGN:
                     99:                        ppitem();
                    100:                        asgnop(s);
                    101:                        break;
                    102:                case T_GOTO:
                    103:                        ppitem();
                    104:                        gotoop(s[2]);
                    105:                        cntstat = 1;
                    106:                        break;
                    107:                case T_CASE:
                    108:                        ppnl();
                    109:                        indent();
                    110:                        caseop(s);
                    111:                        break;
                    112:                case T_WITH:
                    113:                        ppnl();
                    114:                        indent();
                    115:                        withop(s);
                    116:                        break;
                    117:        }
                    118:        setinfo(s[1]);
                    119:        putcm();
                    120: }
                    121: 
                    122: withop(s)
                    123:        int *s;
                    124: {
                    125:        register *p;
                    126: 
                    127:        ppkw("with");
                    128:        ppspac();
                    129:        p = s[2];
                    130:        if (p != NIL)
                    131:                for (;;) {
                    132:                        lvalue(p[1]);
                    133:                        p = p[2];
                    134:                        if (p == NIL)
                    135:                                break;
                    136:                        ppsep(", ");
                    137:                }
                    138:        else
                    139:                ppid("{record variable list}");
                    140:        ppstdo(s[3], DECL);
                    141: }
                    142: 
                    143: asgnop(r)
                    144:        int *r;
                    145: {
                    146: 
                    147:        lvalue(r[2]);
                    148:        ppsep(" := ");
                    149:        rvalue(r[3], NIL);
                    150: }
                    151: 
                    152: forop(r)
                    153:        int *r;
                    154: {
                    155:        struct pxcnt scnt;
                    156: 
                    157:        savecnt(&scnt);
                    158:        ppkw("for");
                    159:        ppspac();
                    160:        asgnop(r[2]);
                    161:        ppspac();
                    162:        ppkw(r[0] == T_FORU ? "to" : "downto");
                    163:        ppspac();
                    164:        rvalue(r[3], NIL);
                    165:        getcnt();
                    166:        ppstdo(r[4], STAT);
                    167:        if (rescnt(&scnt))
                    168:                getcnt();
                    169: }
                    170: 
                    171: ifop(r)
                    172:        int *r;
                    173: {
                    174:        register *s;
                    175:        struct pxcnt scnt;
                    176: 
                    177:        ppkw("if");
                    178:        ppspac();
                    179:        rvalue(r[2], NIL);
                    180:        ppspac();
                    181:        ppkw("then");
                    182:        ppspac();
                    183:        s = r[3];
                    184:        savecnt(&scnt);
                    185:        getcnt();
                    186:        if (s != NIL && s[0] == T_BLOCK)
                    187:                ppstbl1(s, STAT);
                    188:        else {
                    189:                ppgoin(STAT);
                    190:                statement(s);
                    191:                ppgoout(STAT);
                    192:        }
                    193:        if (r[0] == T_IFEL) {
                    194:                setcnt(cntof(&scnt)-nowcnt());
                    195:                if (s == NIL || s[0] != T_BLOCK) {
                    196:                        ppnl();
                    197:                        indent();
                    198:                } else {
                    199:                        ppstbl2();
                    200:                        ppspac();
                    201:                }
                    202:                s = r[4];
                    203:                ppkw("else");
                    204:                unprint();
                    205:                ppspac();
                    206:                if (s == NIL)
                    207:                        goto burp;
                    208:                if (s[0] == T_BLOCK)
                    209:                        ppstbl1(s, STAT);
                    210:                else if (s[0] == T_IF || s[0] == T_IFEL)
                    211:                        ifop(s);
                    212:                else {
                    213: burp:
                    214:                        ppgoin(STAT);
                    215:                        statement(s);
                    216:                        ppgoout(STAT);
                    217:                }
                    218:        }
                    219:        if (rescnt(&scnt))
                    220:                getcnt();
                    221:        if (r[4] != NIL)
                    222:                unprint();
                    223:        if (s != NIL && s[0] == T_BLOCK)
                    224:                ppstbl2();
                    225: }
                    226: 
                    227: whilop(r)
                    228:        int *r;
                    229: {
                    230:        struct pxcnt scnt;
                    231: 
                    232:        ppkw("while");
                    233:        ppspac();
                    234:        rvalue(r[2], NIL);
                    235:        savecnt(&scnt);
                    236:        getcnt();
                    237:        ppstdo(r[3], STAT);
                    238:        if (rescnt(&scnt))
                    239:                getcnt();
                    240: }
                    241: 
                    242: repop(r)
                    243:        int *r;
                    244: {
                    245:        struct pxcnt scnt;
                    246: 
                    247:        ppkw("repeat");
                    248:        ppgoin(STAT);
                    249:        savecnt(&scnt);
                    250:        getcnt();
                    251:        statlist(r[2]);
                    252:        ppgoout(DECL);
                    253:        ppnl();
                    254:        indent();
                    255:        ppkw("until");
                    256:        ppspac();
                    257:        rvalue(r[3], NIL);
                    258:        ppgoin(DECL);
                    259:        ppgoout(STAT);
                    260:        if (rescnt(&scnt))
                    261:                getcnt();
                    262: }
                    263: 
                    264: ppstbl(r, m)
                    265: int *r;
                    266: {
                    267:        ppstbl1(r, m);
                    268:        ppstbl2();
                    269: }
                    270: 
                    271: ppstbl1(r, m)
                    272: int *r;
                    273: {
                    274:        ppkw("begin");
                    275:        ppgoin(m);
                    276:        statlist(r[2]);
                    277:        ppgoout(m);
                    278: }
                    279: 
                    280: ppstbl2()
                    281: {
                    282:        ppnl();
                    283:        indent();
                    284:        ppkw("end");
                    285: }
                    286: 
                    287: ppstdo(r, l)
                    288: int *r;
                    289: {
                    290:        register *s;
                    291: 
                    292:        ppspac();
                    293:        ppkw("do");
                    294:        ppspac();
                    295:        s = r;
                    296:        if (s != NIL && s[0] == T_BLOCK)
                    297:                ppstbl(s, l);
                    298:        else {
                    299:                ppgoin(l);
                    300:                statement(s);
                    301:                ppgoout(l);
                    302:        }
                    303: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.