Annotation of 41BSD/cmd/pxp/type.c, revision 1.1.1.1

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 typecnt -1;
                     14: /*
                     15:  * Type declaration part
                     16:  */
                     17: typebeg(l, tline)
                     18:        int l, tline;
                     19: {
                     20: 
                     21:        line = l;
                     22:        if (nodecl)
                     23:                printoff();
                     24:        puthedr();
                     25:        putcm();
                     26:        ppnl();
                     27:        indent();
                     28:        ppkw("type");
                     29:        ppgoin(DECL);
                     30:        typecnt = 0;
                     31:        setline(tline);
                     32: }
                     33: 
                     34: type(tline, tid, tdecl)
                     35:        int tline;
                     36:        char *tid;
                     37:        int *tdecl;
                     38: {
                     39: 
                     40:        if (typecnt)
                     41:                putcm();
                     42:        setline(tline);
                     43:        ppitem();
                     44:        ppid(tid);
                     45:        ppsep(" =");
                     46:        gtype(tdecl);
                     47:        ppsep(";");
                     48:        setinfo(tline);
                     49:        putcml();
                     50:        typecnt++;
                     51: }
                     52: 
                     53: typeend()
                     54: {
                     55: 
                     56:        if (typecnt == -1)
                     57:                return;
                     58:        if (typecnt == 0)
                     59:                ppid("{type decls}");
                     60:        ppgoout(DECL);
                     61:        typecnt = -1;
                     62: }
                     63: 
                     64: /*
                     65:  * A single type declaration
                     66:  */
                     67: gtype(r)
                     68:        register int *r;
                     69: {
                     70: 
                     71:        if (r == NIL) {
                     72:                ppid("{type}");
                     73:                return;
                     74:        }
                     75:        if (r[0] != T_ID && r[0] != T_TYPACK)
                     76:                setline(r[1]);
                     77:        switch (r[0]) {
                     78:                default:
                     79:                        panic("type");
                     80:                case T_ID:
                     81:                        ppspac();
                     82:                        ppid(r[1]);
                     83:                        return;
                     84:                case T_TYID:
                     85:                        ppspac();
                     86:                        ppid(r[2]);
                     87:                        break;
                     88:                case T_TYSCAL:
                     89:                        ppspac();
                     90:                        tyscal(r);
                     91:                        break;
                     92:                case T_TYRANG:
                     93:                        ppspac();
                     94:                        tyrang(r);
                     95:                        break;
                     96:                case T_TYPTR:
                     97:                        ppspac();
                     98:                        ppop("^");
                     99:                        gtype(r[2]);
                    100:                        break;
                    101:                case T_TYPACK:
                    102:                        ppspac();
                    103:                        ppkw("packed");
                    104:                        gtype(r[2]);
                    105:                        break;
                    106:                case T_TYARY:
                    107:                        ppspac();
                    108:                        tyary(r);
                    109:                        break;
                    110:                case T_TYREC:
                    111:                        ppspac();
                    112:                        tyrec(r[2], NIL);
                    113:                        break;
                    114:                case T_TYFILE:
                    115:                        ppspac();
                    116:                        ppkw("file");
                    117:                        ppspac();
                    118:                        ppkw("of");
                    119:                        gtype(r[2]);
                    120:                        break;
                    121:                case T_TYSET:
                    122:                        ppspac();
                    123:                        ppkw("set");
                    124:                        ppspac();
                    125:                        ppkw("of");
                    126:                        gtype(r[2]);
                    127:                        break;
                    128:        }
                    129:        setline(r[1]);
                    130:        putcml();
                    131: }
                    132: 
                    133: /*
                    134:  * Scalar type declaration
                    135:  */
                    136: tyscal(r)
                    137:        register int *r;
                    138: {
                    139:        register int i;
                    140: 
                    141:        ppsep("(");
                    142:        r = r[2];
                    143:        if (r != NIL) {
                    144:                i = 0;
                    145:                ppgoin(DECL);
                    146:                for (;;) {
                    147:                        ppid(r[1]);
                    148:                        r = r[2];
                    149:                        if (r == NIL)
                    150:                                break;
                    151:                        ppsep(", ");
                    152:                        i++;
                    153:                        if (i == 7) {
                    154:                                ppitem();
                    155:                                i = 0;
                    156:                        }
                    157:                }
                    158:                ppgoout(DECL);
                    159:        } else
                    160:                ppid("{constant list}");
                    161:        ppsep(")");
                    162: }
                    163: 
                    164: /*
                    165:  * Subrange type declaration
                    166:  */
                    167: tyrang(r)
                    168:        register int *r;
                    169: {
                    170: 
                    171:        gconst(r[2]);
                    172:        ppsep("..");
                    173:        gconst(r[3]);
                    174: }
                    175: 
                    176: /*
                    177:  * Array type declaration
                    178:  */
                    179: tyary(r)
                    180:        register int *r;
                    181: {
                    182:        register int *tl;
                    183: 
                    184:        ppkw("array");
                    185:        ppspac();
                    186:        ppsep("[");
                    187:        tl = r[2];
                    188:        if (tl != NIL) {
                    189:                ppunspac();
                    190:                for (;;) {
                    191:                        gtype(tl[1]);
                    192:                        tl = tl[2];
                    193:                        if (tl == NIL)
                    194:                                break;
                    195:                        ppsep(",");
                    196:                }
                    197:        } else
                    198:                ppid("{subscr list}");
                    199:        ppsep("]");
                    200:        ppspac();
                    201:        ppkw("of");
                    202:        gtype(r[3]);
                    203: }

unix.superglobalmegacorp.com

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