Annotation of 43BSDReno/pgrm/pascal/pxp/stat.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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