Annotation of 41BSD/cmd/pxp/type.c, revision 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.