Annotation of researchv10no/cmd/lint/cgram.c, revision 1.1

1.1     ! root        1: # define NAME 2
        !             2: # define STRING 3
        !             3: # define ICON 4
        !             4: # define FCON 5
        !             5: # define PLUS 6
        !             6: # define MINUS 8
        !             7: # define MUL 11
        !             8: # define AND 14
        !             9: # define OR 17
        !            10: # define ER 19
        !            11: # define QUEST 21
        !            12: # define COLON 22
        !            13: # define ANDAND 23
        !            14: # define OROR 24
        !            15: # define ASOP 25
        !            16: # define RELOP 26
        !            17: # define EQUOP 27
        !            18: # define DIVOP 28
        !            19: # define SHIFTOP 29
        !            20: # define INCOP 30
        !            21: # define UNOP 31
        !            22: # define STROP 32
        !            23: # define TYPE 33
        !            24: # define CLASS 34
        !            25: # define STRUCT 35
        !            26: # define RETURN 36
        !            27: # define GOTO 37
        !            28: # define IF 38
        !            29: # define ELSE 39
        !            30: # define SWITCH 40
        !            31: # define BREAK 41
        !            32: # define CONTINUE 42
        !            33: # define WHILE 43
        !            34: # define DO 44
        !            35: # define FOR 45
        !            36: # define DEFAULT 46
        !            37: # define CASE 47
        !            38: # define SIZEOF 48
        !            39: # define ENUM 49
        !            40: # define LP 50
        !            41: # define RP 51
        !            42: # define LC 52
        !            43: # define RC 53
        !            44: # define LB 54
        !            45: # define RB 55
        !            46: # define CM 56
        !            47: # define SM 57
        !            48: # define ASSIGN 58
        !            49: 
        !            50: # line 108 "../pcc1/mip/cgram.y"
        !            51: # include "mfile1"
        !            52: #define yyclearin yychar = -1
        !            53: #define yyerrok yyerrflag = 0
        !            54: extern int yychar;
        !            55: extern short yyerrflag;
        !            56: #ifndef YYMAXDEPTH
        !            57: #define YYMAXDEPTH 150
        !            58: #endif
        !            59: YYSTYPE yylval, yyval;
        !            60: 
        !            61: # line 127 "../pcc1/mip/cgram.y"
        !            62:        static int fake = 0;
        !            63: #ifndef FLEXNAMES
        !            64:        static char fakename[NCHNAM+1];
        !            65: #else
        !            66:        static char fakename[24];
        !            67: #endif
        !            68: # define YYERRCODE 256
        !            69: 
        !            70: # line 840 "../pcc1/mip/cgram.y"
        !            71: 
        !            72: 
        !            73: NODE *
        !            74: mkty( t, d, s ) unsigned t; {
        !            75:        return( block( TYPE, NIL, NIL, t, d, s ) );
        !            76:        }
        !            77: 
        !            78: NODE *
        !            79: bdty( op, p, v ) NODE *p; {
        !            80:        register NODE *q;
        !            81: 
        !            82:        q = block( op, p, NIL, INT, 0, INT );
        !            83: 
        !            84:        switch( op ){
        !            85: 
        !            86:        case UNARY MUL:
        !            87:        case UNARY CALL:
        !            88:                break;
        !            89: 
        !            90:        case LB:
        !            91:                q->in.right = bcon(v);
        !            92:                break;
        !            93: 
        !            94:        case NAME:
        !            95:                q->tn.rval = v;
        !            96:                break;
        !            97: 
        !            98:        default:
        !            99:                cerror( "bad bdty" );
        !           100:                }
        !           101: 
        !           102:        return( q );
        !           103:        }
        !           104: 
        !           105: dstash( n ){ /* put n into the dimension table */
        !           106:        if( curdim >= DIMTABSZ-1 ){
        !           107:                cerror( "dimension table overflow");
        !           108:                }
        !           109:        dimtab[ curdim++ ] = n;
        !           110:        }
        !           111: 
        !           112: savebc() {
        !           113:        if( psavbc > & asavbc[BCSZ-4 ] ){
        !           114:                cerror( "whiles, fors, etc. too deeply nested");
        !           115:                }
        !           116:        *psavbc++ = brklab;
        !           117:        *psavbc++ = contlab;
        !           118:        *psavbc++ = flostat;
        !           119:        *psavbc++ = swx;
        !           120:        flostat = 0;
        !           121:        }
        !           122: 
        !           123: resetbc(mask){
        !           124: 
        !           125:        swx = *--psavbc;
        !           126:        flostat = *--psavbc | (flostat&mask);
        !           127:        contlab = *--psavbc;
        !           128:        brklab = *--psavbc;
        !           129: 
        !           130:        }
        !           131: 
        !           132: addcase(p) NODE *p; { /* add case to switch */
        !           133: 
        !           134:        p = optim( p );  /* change enum to ints */
        !           135:        if( p->in.op != ICON ){
        !           136:                uerror( "non-constant case expression");
        !           137:                return;
        !           138:                }
        !           139:        if( swp == swtab ){
        !           140:                uerror( "case not in switch");
        !           141:                return;
        !           142:                }
        !           143:        if( swp >= &swtab[SWITSZ] ){
        !           144:                cerror( "switch table overflow");
        !           145:                }
        !           146:        swp->sval = p->tn.lval;
        !           147:        deflab( swp->slab = getlab() );
        !           148:        ++swp;
        !           149:        tfree(p);
        !           150:        }
        !           151: 
        !           152: adddef(){ /* add default case to switch */
        !           153:        if( swtab[swx].slab >= 0 ){
        !           154:                uerror( "duplicate default in switch");
        !           155:                return;
        !           156:                }
        !           157:        if( swp == swtab ){
        !           158:                uerror( "default not inside switch");
        !           159:                return;
        !           160:                }
        !           161:        deflab( swtab[swx].slab = getlab() );
        !           162:        }
        !           163: 
        !           164: swstart(){
        !           165:        /* begin a switch block */
        !           166:        if( swp >= &swtab[SWITSZ] ){
        !           167:                cerror( "switch table overflow");
        !           168:                }
        !           169:        swx = swp - swtab;
        !           170:        swp->slab = -1;
        !           171:        ++swp;
        !           172:        }
        !           173: 
        !           174: swend(){ /* end a switch block */
        !           175: 
        !           176:        register struct sw *swbeg, *p, *q, *r, *r1;
        !           177:        CONSZ temp;
        !           178:        int tempi;
        !           179: 
        !           180:        swbeg = &swtab[swx+1];
        !           181: 
        !           182:        /* sort */
        !           183: 
        !           184:        r1 = swbeg;
        !           185:        r = swp-1;
        !           186: 
        !           187:        while( swbeg < r ){
        !           188:                /* bubble largest to end */
        !           189:                for( q=swbeg; q<r; ++q ){
        !           190:                        if( q->sval > (q+1)->sval ){
        !           191:                                /* swap */
        !           192:                                r1 = q+1;
        !           193:                                temp = q->sval;
        !           194:                                q->sval = r1->sval;
        !           195:                                r1->sval = temp;
        !           196:                                tempi = q->slab;
        !           197:                                q->slab = r1->slab;
        !           198:                                r1->slab = tempi;
        !           199:                                }
        !           200:                        }
        !           201:                r = r1;
        !           202:                r1 = swbeg;
        !           203:                }
        !           204: 
        !           205:        /* it is now sorted */
        !           206: 
        !           207:        for( p = swbeg+1; p<swp; ++p ){
        !           208:                if( p->sval == (p-1)->sval ){
        !           209:                        uerror( "duplicate case in switch, %d", tempi=p->sval );
        !           210:                        return;
        !           211:                        }
        !           212:                }
        !           213: 
        !           214:        genswitch( swbeg-1, swp-swbeg );
        !           215:        swp = swbeg-1;
        !           216:        }
        !           217: short yyexca[] ={
        !           218: -1, 1,
        !           219:        0, -1,
        !           220:        2, 23,
        !           221:        11, 23,
        !           222:        50, 23,
        !           223:        57, 23,
        !           224:        -2, 0,
        !           225: -1, 19,
        !           226:        56, 82,
        !           227:        57, 82,
        !           228:        -2, 7,
        !           229: -1, 24,
        !           230:        56, 81,
        !           231:        57, 81,
        !           232:        -2, 79,
        !           233: -1, 26,
        !           234:        56, 85,
        !           235:        57, 85,
        !           236:        -2, 80,
        !           237: -1, 32,
        !           238:        52, 46,
        !           239:        -2, 44,
        !           240: -1, 34,
        !           241:        52, 38,
        !           242:        -2, 36,
        !           243: -1, 57,
        !           244:        53, 50,
        !           245:        57, 50,
        !           246:        -2, 0,
        !           247: -1, 109,
        !           248:        33, 18,
        !           249:        34, 18,
        !           250:        35, 18,
        !           251:        49, 18,
        !           252:        -2, 13,
        !           253: -1, 280,
        !           254:        33, 16,
        !           255:        34, 16,
        !           256:        35, 16,
        !           257:        49, 16,
        !           258:        -2, 14,
        !           259: -1, 297,
        !           260:        33, 17,
        !           261:        34, 17,
        !           262:        35, 17,
        !           263:        49, 17,
        !           264:        -2, 15,
        !           265:        };
        !           266: # define YYNPROD 187
        !           267: # define YYLAST 1228
        !           268: short yyact[]={
        !           269: 
        !           270:  211,  18, 262,  93, 231,  89,  87,  88,  27, 209,
        !           271:   80, 200, 132,  78,   6, 147,  79,  21,  10,   9,
        !           272:   14,  20, 100, 166,  51, 131,  27, 311,  96,  92,
        !           273:  310,  46,  82,  81,  16,  21,  98, 110, 221, 222,
        !           274:  226,  59, 230, 219, 220, 227, 228, 229, 233, 232,
        !           275:   83,  75,  84, 304, 110, 256,  22,  66,  56, 223,
        !           276:  231,  89,  87,  88,  27, 291,  80, 266, 112,  78,
        !           277:   36, 297,  79,  21,  22, 271, 265, 133, 107, 270,
        !           278:   45, 280, 212, 101,  27, 148, 152, 204,  82,  81,
        !           279:  164,  24, 203,  21, 221, 222, 226,  91, 230, 219,
        !           280:  220, 227, 228, 229, 233, 232,  83,  74,  84, 193,
        !           281:  110, 210,  22,  40,  42, 223, 168, 169, 170, 172,
        !           282:  174, 176, 178, 180, 181, 183, 185, 187, 188, 189,
        !           283:  190, 191,  22,  27,  94, 133, 156, 162, 195,  17,
        !           284:   19, 160,  21,  10,   9,  14, 103, 148,  99,  95,
        !           285:  155, 156, 207,  96, 158, 298,  41,  43, 161,  16,
        !           286:  194, 284, 197,  36,  35,  70,  77, 114, 192, 157,
        !           287:   71, 136, 235, 138, 236,  38, 237, 111, 238,  39,
        !           288:  239,  22, 234, 240,  73, 241, 250, 242, 163, 208,
        !           289:  286, 139,  65, 250, 133, 137, 102,  48,  48,  95,
        !           290:  202,  49,  49, 283, 254, 244, 245,  38,  69, 255,
        !           291:   33,  39, 159, 252, 253, 206,  48,  68, 263,  31,
        !           292:   49,   8, 268, 258, 259, 260, 261, 154, 264,  28,
        !           293:  306, 246, 289, 278, 202, 272, 281, 277, 248, 201,
        !           294:  251, 108, 198,  27, 282, 140, 141, 142, 143, 144,
        !           295:  145,  53,  21,  57,  10,   9,  14,  72, 224,  64,
        !           296:  300, 299,  97, 276, 275, 153, 274, 273, 153,  52,
        !           297:   16, 288, 287, 201, 292, 293, 263, 295, 294,   9,
        !           298:   26, 231,  89,  87,  88,  47,  10,  80,  14,  54,
        !           299:   78,  22,  30,  79, 121, 279, 269,  95, 196, 301,
        !           300:   60, 307,  16,   7, 113, 263, 149, 308, 285,  82,
        !           301:   81, 117,  29,  57, 224, 221, 222, 226,  26, 230,
        !           302:  219, 220, 227, 228, 229, 233, 232,  83,  67,  84,
        !           303:   34, 110, 118,  32, 119, 225, 223, 121,  26, 118,
        !           304:  123, 119, 109, 124, 121, 125, 106, 128, 105, 126,
        !           305:  127, 129, 115, 122, 117, 120, 134,  50,  25, 115,
        !           306:  122, 117, 120,  61,  44, 249,   4, 205, 149, 102,
        !           307:  118,  90, 119,  55,  58, 121, 167, 309, 118, 165,
        !           308:  119, 104, 116, 121, 130,  63, 123,  97,  62, 124,
        !           309:   37, 125, 117, 128,   3, 126, 127, 129, 115, 122,
        !           310:  117, 120,   2, 151,  85,  11,  12,   5,  23,  13,
        !           311:   15, 218, 216, 217, 118, 249, 119, 215, 213, 121,
        !           312:  214,   1, 123, 305,   0, 124,   0, 125, 116, 128,
        !           313:  130, 126, 127, 129, 115, 122, 117, 120,   0,   0,
        !           314:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        !           315:  118,   0, 119,   0,   0, 121,   0,   0, 123, 303,
        !           316:    0, 124,   0, 125, 116, 128, 130, 126, 127, 129,
        !           317:  115, 122, 117, 120,   0,   0,   0,   0,   0,   0,
        !           318:    0,   0,   0,   0,   0,   0,   0,   0, 118,   0,
        !           319:  119,   0, 118, 121, 119, 302, 123, 121,   0, 124,
        !           320:  116, 125, 130, 128, 296, 126, 127, 129, 115, 122,
        !           321:  117, 120, 115,   0, 117, 120,   0,   0,   0,   0,
        !           322:    0,   0,   0,   0,   0,   0, 118,   0, 119,   0,
        !           323:    0, 121,   0,   0, 123, 224,   0, 124, 116, 125,
        !           324:  130, 128,   0, 126, 127, 129, 115, 122, 117, 120,
        !           325:  118,   0, 119,   0,   0, 121,   0, 118, 123, 119,
        !           326:    0, 124, 121, 125,   0, 128,   0, 126, 127, 129,
        !           327:  115, 122, 117, 120,   0,   0, 116, 290, 130, 117,
        !           328:  120,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        !           329:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        !           330:  116, 257, 130, 118,   0, 119,   0,   0, 121,   0,
        !           331:    0, 123,   0,   0, 124,   0, 125,   0, 128,   0,
        !           332:  126, 127, 129, 115, 122, 117, 120, 118,   0, 119,
        !           333:    0,   0, 121,   0,   0, 123,   0,   0, 124,   0,
        !           334:  125,   0, 128, 243, 126, 127, 129, 115, 122, 117,
        !           335:  120,   0, 247, 116,   0, 130,   0,   0,   0,   0,
        !           336:    0,   0,   0, 118,   0, 119,   0, 118, 121, 119,
        !           337:    0, 123, 121,   0, 124, 123, 125, 116, 128, 130,
        !           338:  126, 127, 129, 115, 122, 117, 120, 115, 122, 117,
        !           339:  120,   0,   0,   0,   0,   0,   0,   0,   0, 118,
        !           340:    0, 119,   0,   0, 121,   0,   0, 123, 199,   0,
        !           341:  124,   0, 125, 116, 128, 130, 126, 127, 129, 115,
        !           342:  122, 117, 120, 118,   0, 119,   0,   0, 121,   0,
        !           343:    0, 123,   0,   0, 124,   0, 125,   0, 128,   0,
        !           344:  126, 127, 129, 115, 122, 117, 120,   0,   0, 116,
        !           345:    0, 130,  86,  89,  87,  88,   0,   0,  80,   0,
        !           346:    0,  78,   0,   0,  79,  86,  89,  87,  88,   0,
        !           347:    0,  80,   0,   0,  78, 130,   0,  79,   0,   0,
        !           348:   82,  81,   0,   0,   0,   0,   0,   0,   0,   0,
        !           349:    0,   0,   0,  82,  81,   0,   0,   0,  83,   0,
        !           350:   84,   0,   0,  86,  89,  87,  88,   0, 186,  80,
        !           351:    0,  83,  78,  84,   0,  79,  86,  89,  87,  88,
        !           352:    0, 184,  80,   0,   0,  78,   0,   0,  79,   0,
        !           353:    0,  82,  81,   0,   0,   0,   0,   0,   0,   0,
        !           354:    0,   0,   0,   0,  82,  81,   0,   0,   0,  83,
        !           355:    0,  84,   0,   0,  86,  89,  87,  88,   0, 182,
        !           356:   80,   0,  83,  78,  84,   0,  79,  86,  89,  87,
        !           357:   88,   0, 179,  80,   0,   0,  78,   0,   0,  79,
        !           358:    0,   0,  82,  81,   0,   0,   0,   0,   0,   0,
        !           359:    0,   0,   0,   0,   0,  82,  81,   0,   0,   0,
        !           360:   83,   0,  84,   0,   0,  86,  89,  87,  88,   0,
        !           361:  177,  80,   0,  83,  78,  84,   0,  79,  86,  89,
        !           362:   87,  88,   0, 175,  80,   0,   0,  78,   0,   0,
        !           363:   79,   0,   0,  82,  81,   0,   0,   0,   0,   0,
        !           364:    0,   0,   0,   0,   0,   0,  82,  81,   0,   0,
        !           365:    0,  83,   0,  84,   0,   0,  86,  89,  87,  88,
        !           366:    0, 173,  80,   0,  83,  78,  84,   0,  79,  86,
        !           367:   89,  87,  88,   0, 171,  80,   0,   0,  78,   0,
        !           368:    0,  79,   0,   0,  82,  81, 118,   0, 119,   0,
        !           369:    0, 121,   0,   0, 123,   0,   0,  82,  81, 125,
        !           370:    0,   0,  83,   0,  84,   0, 115, 122, 117, 120,
        !           371:    0, 267,   0,   0,   0,  83,   0,  84,   0, 135,
        !           372:   86,  89,  87,  88,   0,   0,  80,   0,   0,  78,
        !           373:    0,   0,  79,  86,  89,  87,  88,   0,   0,  80,
        !           374:    0,   0,  78,   0,   0,  79,   0,   0,  82,  81,
        !           375:    0,  10,   0,  14,   0,   0,   0,   0,   0,   0,
        !           376:    0,  82,  81,   0,   0,   0,  83,  16,  84,   0,
        !           377:    0,   0,   0,  86,  89,  87,  88,   0,   0,  83,
        !           378:    0,  84,   0,  76,  86,  89,  87,  88,   0,   0,
        !           379:   80,   0,   0,  78,   0,   0,  79,  86,  89,  87,
        !           380:   88,  82,  81,  80,   0,   0,  78,   0,   0,  79,
        !           381:    0,   0,  82,  81,   0,   0,   0,   0,   0,  83,
        !           382:    0,  84,   0,   0,   0,  82,  81,   0,   0,   0,
        !           383:   83,   0,  84, 150,   0,  86,  89,  87,  88,   0,
        !           384:    0,  80,   0,  83,  78,  84,   0,  79,   0,   0,
        !           385:    0,   0,   0,   0, 118,   0, 119,   0,   0, 121,
        !           386:    0,   0, 123,  82,  81, 124,   0, 125,   0, 128,
        !           387:    0, 126, 127,   0, 115, 122, 117, 120,   0,   0,
        !           388:  118,  83, 119, 146,   0, 121,   0,   0, 123,   0,
        !           389:    0, 124,   0, 125,   0,   0,   0, 126,   0,   0,
        !           390:  115, 122, 117, 120, 118,   0, 119,   0,   0, 121,
        !           391:    0,   0, 123,   0,   0, 124,   0, 125,   0,   0,
        !           392:    0,   0,   0,   0, 115, 122, 117, 120 };
        !           393: short yypact[]={
        !           394: 
        !           395: -1000, 110,-1000,-1000,-1000,  82,-1000, 253, 245,-1000,
        !           396:  259,-1000,-1000, 167, 331, 158, 328,-1000, 107, 125,
        !           397: -1000, 241, 241,  29, 148, -34,-1000, 219,-1000, 253,
        !           398:  256, 253,-1000, 298,-1000,-1000,-1000,-1000, 208, 137,
        !           399:  148, 125, 166, 157, 114,-1000,-1000,-1000, 206, 129,
        !           400: 1031,-1000,-1000,-1000,-1000,  40,-1000,   6,  92,-1000,
        !           401:  -36,  62,-1000, -15,-1000,-1000, 122,1095,-1000,-1000,
        !           402: -1000, 302,-1000,-1000, 112, 717, 967, 141,1095,1095,
        !           403: 1095,1095,1095,1133,1018,1082, 218,-1000,-1000,-1000,
        !           404:  174, 253,  80,-1000, 125, 147,-1000,-1000, 159, 298,
        !           405: -1000,-1000, 125,-1000,-1000,-1000,-1000, 131,  33,-1000,
        !           406: -1000,-1000, 717,-1000,-1000,1095,1095, 916, 903, 865,
        !           407:  852, 814,1095, 801, 763, 750,1095,1095,1095,1095,
        !           408: 1095,  53,-1000, 717, 967,-1000,-1000,1095, 296,-1000,
        !           409:  141, 141, 141, 141, 141, 141,1018, 191, 657, 223,
        !           410: -1000,  36, 717,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
        !           411: -1000,-1000,  95,-1000,-1000,-1000,  58, 221, 551, 717,
        !           412: -1000,1095, 283,1095, 283,1095, 364,1095,-1000,1095,
        !           413:  486, 333,1095, 980,1095, 661,1095,1198,1174, 621,
        !           414:  717, 717, 152, 967,  53, 597,-1000, 187,1095,-1000,
        !           415:  132, 189, 223,1095,-1000,   6,-1000,-1000,   2,-1000,
        !           416: -1000, 544,-1000, 279, 279, 279, 279,1095, 279,  19,
        !           417:   10, 954, 294,-1000,  22, 279, 217, 216,-1000, 214,
        !           418:  213, 215,1095, 273,  24, 717, 717, 717, 717, 717,
        !           419:  717, 717, 717,1095,-1000,-1000, 150,-1000,1071, 141,
        !           420:  106,-1000, 139, 132, 717,-1000,-1000,-1000, 233,-1000,
        !           421: -1000, 228, 181, 693,-1000,-1000,-1000,-1000, 520,   8,
        !           422: -1000,-1000,-1000,1095,1095,1095,1095,-1000, 482,-1000,
        !           423: -1000,  14,1148,-1000,-1000, 100, 211,-1000, 210, 279,
        !           424: -1000,-1000, 444, 408,  -4, 372,-1000,-1000,-1000, 179,
        !           425: 1095,-1000,-1000,-1000,1095,-1000,-1000, 326, -27, -30,
        !           426: -1000,-1000 };
        !           427: short yypgo[]={
        !           428: 
        !           429:    0, 421,  57, 420, 418, 417, 413, 412, 411, 410,
        !           430:  409, 408,   0,   2, 166,  14, 407, 221, 406, 405,
        !           431:   15,  11, 404,   3, 134,  91, 403, 402, 394,   1,
        !           432:  390, 388, 385,  82, 381,  23,   9, 379, 376,  29,
        !           433:  303, 374,  36,  41, 373, 371,  58, 367, 364,  21,
        !           434:  363, 358, 357,  25,  12, 356, 348, 346, 342, 335,
        !           435:  328 };
        !           436: short yyr1[]={
        !           437: 
        !           438:    0,   1,   1,  27,  27,  28,  28,  30,  28,  31,
        !           439:   32,  32,  35,  35,  37,  37,  38,  38,  38,  34,
        !           440:   34,  34,  16,  16,  15,  15,  15,  15,  15,  40,
        !           441:   17,  17,  17,  17,  17,  18,  18,   9,   9,  41,
        !           442:   41,  43,  43,  19,  19,  10,  10,  44,  44,  46,
        !           443:   46,  39,  47,  39,  23,  23,  23,  23,  23,  25,
        !           444:   25,  25,  25,  25,  25,  24,  24,  24,  24,  24,
        !           445:   24,  24,  11,  48,  48,  48,  29,  50,  29,  51,
        !           446:   51,  49,  49,  49,  49,  49,  53,  53,  54,  54,
        !           447:   42,  42,  45,  45,  52,  52,  55,  33,  33,  56,
        !           448:   57,  58,  36,  36,  36,  36,  36,  36,  36,  36,
        !           449:   36,  36,  36,  36,  36,  36,  36,  36,  36,  59,
        !           450:   59,  59,   7,   4,   3,   5,   6,   8,  60,   2,
        !           451:   13,  13,  26,  26,  12,  12,  12,  12,  12,  12,
        !           452:   12,  12,  12,  12,  12,  12,  12,  12,  12,  12,
        !           453:   12,  12,  12,  12,  12,  12,  12,  12,  12,  14,
        !           454:   14,  14,  14,  14,  14,  14,  14,  14,  14,  14,
        !           455:   14,  14,  14,  14,  14,  14,  14,  20,  21,  21,
        !           456:   21,  21,  21,  21,  21,  22,  22 };
        !           457: short yyr2[]={
        !           458: 
        !           459:    0,   2,   0,   1,   1,   2,   3,   0,   4,   2,
        !           460:    2,   0,   2,   0,   3,   4,   3,   4,   0,   3,
        !           461:    2,   2,   1,   0,   2,   2,   1,   1,   3,   1,
        !           462:    1,   2,   3,   1,   1,   5,   2,   1,   2,   1,
        !           463:    3,   1,   3,   5,   2,   1,   2,   1,   3,   2,
        !           464:    1,   1,   0,   4,   1,   1,   3,   2,   1,   2,
        !           465:    3,   3,   4,   1,   3,   2,   3,   3,   4,   3,
        !           466:    3,   2,   2,   1,   3,   1,   1,   0,   4,   1,
        !           467:    1,   1,   1,   3,   6,   1,   1,   3,   1,   4,
        !           468:    0,   1,   0,   1,   0,   1,   1,   1,   1,   4,
        !           469:    3,   1,   2,   1,   2,   2,   2,   7,   4,   2,
        !           470:    2,   2,   2,   3,   3,   1,   2,   2,   2,   2,
        !           471:    3,   2,   1,   4,   3,   4,   6,   4,   0,   2,
        !           472:    1,   0,   1,   3,   3,   3,   3,   3,   3,   3,
        !           473:    3,   3,   3,   3,   3,   3,   3,   4,   4,   4,
        !           474:    4,   4,   4,   4,   4,   5,   3,   3,   1,   2,
        !           475:    2,   2,   2,   2,   2,   2,   4,   4,   4,   2,
        !           476:    3,   3,   1,   1,   1,   1,   3,   2,   0,   2,
        !           477:    5,   2,   3,   4,   3,   2,   2 };
        !           478: short yychk[]={
        !           479: 
        !           480: -1000,  -1, -27, -28, 256, -16, -15, -40, -17,  34,
        !           481:   33, -19, -18, -10,  35,  -9,  49,  57, -29, -24,
        !           482:  -49,  11,  50, -11, -25, -51, 256,   2, -17, -40,
        !           483:   33,  52,   2,  52,   2,  57,  56, -30,  50,  54,
        !           484:  -25, -24, -25, -24, -48,  51,   2, 256,  50,  54,
        !           485:  -52,  58,  50, -17,  33, -44, -46, -17, -41, -43,
        !           486:    2, -50, -31, -32,  51,  55,  -2, -60,  51,  51,
        !           487:   51,  56,  51,  55,  -2, -12,  52, -14,  11,  14,
        !           488:    8,  31,  30,  48,  50, -22,   2,   4,   5,   3,
        !           489:  -45,  57, -39, -23, -24, -25,  22, 256, -42,  56,
        !           490:   58, -49, -24, -33, -34, -56, -57, -15, 256, -58,
        !           491:   52,  55, -12,   2,  55,  26,  56,  28,   6,   8,
        !           492:   29,  11,  27,  14,  17,  19,  23,  24,  21,  25,
        !           493:   58, -53, -54, -12, -55,  52,  30,  54,  32,  50,
        !           494:  -14, -14, -14, -14, -14, -14,  50, -20, -12, -17,
        !           495:   51, -26, -12,  50,  53, -46,  56,  22,  -2,  53,
        !           496:  -43,  -2, -39,  57,  57, -37, -35, -38, -12, -12,
        !           497:  -12,  58, -12,  58, -12,  58, -12,  58, -12,  58,
        !           498:  -12, -12,  58, -12,  58, -12,  58, -12, -12, -12,
        !           499:  -12, -12, -42,  56, -53, -12,   2, -20,  51,  51,
        !           500:  -21,  50,  11,  56,  51, -47,  -2,  57, -35, -36,
        !           501:   53, -12, -33,  -4,  -3,  -5,  -7,  -6,  -8,  41,
        !           502:   42,  36,  37,  57, 256, -59,  38,  43,  44,  45,
        !           503:   40,   2,  47,  46, -15, -12, -12, -12, -12, -12,
        !           504:  -12, -12, -12,  22,  53, -54, -42,  55,  51, -14,
        !           505:   54,  51, -21, -21, -12, -23,  53,  57, -36, -36,
        !           506:  -36, -36, -13, -12, -36,  57,  57,  57, -12,   2,
        !           507:   57,  53, -36,  50,  50,  50,  50,  22, -12,  22,
        !           508:   57, -29, -12,  53,  55,  -2,  51,  39,  43,  51,
        !           509:   57,  57, -12, -12, -13, -12,  22,  57,  55,  50,
        !           510:   50, -36,  51,  51,  57,  51,  51, -12, -13,  51,
        !           511:   57,  57 };
        !           512: short yydef[]={
        !           513: 
        !           514:    2,  -2,   1,   3,   4,   0,  22,  26,  27,  29,
        !           515:   30,  33,  34,   0,  45,   0,  37,   5,   0,  -2,
        !           516:   76,   0,   0,   0,  -2,  94,  -2,  63,  24,  25,
        !           517:   31,   0,  -2,   0,  -2,   6,  77,  11,   0, 128,
        !           518:   59,  65,   0,   0,   0,  71,  73,  75,   0, 128,
        !           519:    0,  95,  72,  28,  32,  92,  47,  -2,  90,  39,
        !           520:   41,   0,   8,   0,  66,  67,   0,   0,  64,  69,
        !           521:   70,   0,  60,  61,   0,  83,   0, 158,   0,   0,
        !           522:    0,   0,   0,   0,   0,   0, 172, 173, 174, 175,
        !           523:    0,  93,  49,  51,  54,  55, 128,  58,   0,  91,
        !           524:  128,  78,  82,   9,  10,  97,  98,   0,   0,  -2,
        !           525:  101,  68, 129,  74,  62,   0,   0,   0,   0,   0,
        !           526:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        !           527:    0,  90,  86,  88,   0,  96, 159,   0,   0, 186,
        !           528:  160, 161, 162, 163, 164, 165,   0,   0,   0, 178,
        !           529:  169,   0, 132, 185,  43,  48,  52, 128,  57,  35,
        !           530:   40,  42,   0,  20,  21,  13,   0,   0, 134, 135,
        !           531:  136,   0, 137,   0, 138,   0, 139,   0, 140,   0,
        !           532:  141, 142,   0, 143,   0, 144,   0, 145, 146,   0,
        !           533:  156, 157,   0,  91,  90,   0, 171,   0,   0, 176,
        !           534:  177, 178, 178,   0, 170,   0,  56,  19,   0,  12,
        !           535:  100,   0, 103,   0,   0,   0,   0, 131,   0,   0,
        !           536:    0,   0,   0, 115,   0,   0,   0,   0, 122,   0,
        !           537:    0, 172,   0,   0,   0, 148, 149, 150, 151, 147,
        !           538:  152, 153, 154,   0,  84,  87,   0, 168, 167, 166,
        !           539:  128, 179,   0, 181, 133,  53,  99, 102, 104, 105,
        !           540:  106,   0,   0, 130, 109, 110, 111, 112,   0,   0,
        !           541:  116, 117, 118,   0,   0, 131,   0, 119,   0, 121,
        !           542:   -2,   0, 155,  89, 182,   0, 184, 124,   0,   0,
        !           543:  113, 114,   0,   0,   0,   0, 120,  -2, 183,   0,
        !           544:    0, 108, 123, 125, 131, 127, 180,   0,   0,   0,
        !           545:  126, 107 };
        !           546: # ifdef YYDEBUG
        !           547: # include "y.debug"
        !           548: # endif
        !           549: 
        !           550: # define YYFLAG -1000
        !           551: # define YYERROR goto yyerrlab
        !           552: # define YYACCEPT return(0)
        !           553: # define YYABORT return(1)
        !           554: 
        !           555: /*     parser for yacc output  */
        !           556: 
        !           557: #ifdef YYDEBUG
        !           558: int yydebug = 0; /* 1 for debugging */
        !           559: #endif
        !           560: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
        !           561: int yychar = -1; /* current input token number */
        !           562: int yynerrs = 0;  /* number of errors */
        !           563: short yyerrflag = 0;  /* error recovery flag */
        !           564: 
        !           565: yyparse()
        !           566: {      short yys[YYMAXDEPTH];
        !           567:        int yyj, yym;
        !           568:        register YYSTYPE *yypvt;
        !           569:        register int yystate, yyn;
        !           570:        register short *yyps;
        !           571:        register YYSTYPE *yypv;
        !           572:        register short *yyxi;
        !           573: 
        !           574:        yystate = 0;
        !           575:        yychar = -1;
        !           576:        yynerrs = 0;
        !           577:        yyerrflag = 0;
        !           578:        yyps= &yys[-1];
        !           579:        yypv= &yyv[-1];
        !           580: 
        !           581: yystack:    /* put a state and value onto the stack */
        !           582: #ifdef YYDEBUG
        !           583:        if(yydebug >= 3)
        !           584:                if(yychar < 0 || yytoknames[yychar] == 0)
        !           585:                        printf("char %d in %s", yychar, yystates[yystate]);
        !           586:                else
        !           587:                        printf("%s in %s", yytoknames[yychar], yystates[yystate]);
        !           588: #endif
        !           589:        if( ++yyps >= &yys[YYMAXDEPTH] ) { 
        !           590:                yyerror( "yacc stack overflow" ); 
        !           591:                return(1)        !           592:        }
        !           593:        *yyps = yystate;
        !           594:        ++yypv;
        !           595:        *yypv = yyval;
        !           596: yynewstate:
        !           597:        yyn = yypact[yystate];
        !           598:        if(yyn <= YYFLAG) goto yydefault; /* simple state */
        !           599:        if(yychar<0) {
        !           600:                yychar = yylex();
        !           601: #ifdef YYDEBUG
        !           602:                if(yydebug >= 2) {
        !           603:                        if(yychar <= 0)
        !           604:                                printf("lex EOF\n");
        !           605:                        else if(yytoknames[yychar])
        !           606:                                printf("lex %s\n", yytoknames[yychar]);
        !           607:                        else
        !           608:                                printf("lex (%c)\n", yychar);
        !           609:                }
        !           610: #endif
        !           611:                if(yychar < 0)
        !           612:                        yychar = 0;
        !           613:        }
        !           614:        if((yyn += yychar) < 0 || yyn >= YYLAST)
        !           615:                goto yydefault;
        !           616:        if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
        !           617:                yychar = -1;
        !           618:                yyval = yylval;
        !           619:                yystate = yyn;
        !           620:                if( yyerrflag > 0 ) --yyerrflag;
        !           621:                goto yystack;
        !           622:        }
        !           623: yydefault:
        !           624:        /* default state action */
        !           625:        if( (yyn=yydef[yystate]) == -2 ) {
        !           626:                if(yychar < 0) {
        !           627:                        yychar = yylex();
        !           628: #ifdef YYDEBUG
        !           629:                        if(yydebug >= 2)
        !           630:                                if(yychar < 0)
        !           631:                                        printf("lex EOF\n");
        !           632:                                else
        !           633:                                        printf("lex %s\n", yytoknames[yychar]);
        !           634: #endif
        !           635:                        if(yychar < 0)
        !           636:                                yychar = 0;
        !           637:                }
        !           638:                /* look through exception table */
        !           639:                for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate);
        !           640:                        yyxi += 2 ) ; /* VOID */
        !           641:                while( *(yyxi+=2) >= 0 ){
        !           642:                        if( *yyxi == yychar ) break;
        !           643:                }
        !           644:                if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
        !           645:        }
        !           646:        if( yyn == 0 ){ /* error */
        !           647:                /* error ... attempt to resume parsing */
        !           648:                switch( yyerrflag ){
        !           649:                case 0:   /* brand new error */
        !           650: #ifdef YYDEBUG
        !           651:                        yyerror("syntax error\n%s", yystates[yystate]);
        !           652:                        if(yytoknames[yychar])
        !           653:                                yyerror("saw %s\n", yytoknames[yychar]);
        !           654:                        else if(yychar >= ' ' && yychar < '\177')
        !           655:                                yyerror("saw `%c'\n", yychar);
        !           656:                        else if(yychar == 0)
        !           657:                                yyerror("saw EOF\n");
        !           658:                        else
        !           659:                                yyerror("saw char 0%o\n", yychar);
        !           660: #else
        !           661:                        yyerror( "syntax error" );
        !           662: #endif
        !           663: yyerrlab:
        !           664:                        ++yynerrs;
        !           665:                case 1:
        !           666:                case 2: /* incompletely recovered error ... try again */
        !           667:                        yyerrflag = 3;
        !           668:                        /* find a state where "error" is a legal shift action */
        !           669:                        while ( yyps >= yys ) {
        !           670:                                yyn = yypact[*yyps] + YYERRCODE;
        !           671:                                if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
        !           672:                                        yystate = yyact[yyn];  /* simulate a shift of "error" */
        !           673:                                        goto yystack;
        !           674:                                }
        !           675:                                yyn = yypact[*yyps];
        !           676:                                /* the current yyps has no shift onn "error", pop stack */
        !           677: #ifdef YYDEBUG
        !           678:                                if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
        !           679: #endif
        !           680:                                --yyps;
        !           681:                                --yypv;
        !           682:                        }
        !           683:                        /* there is no state on the stack with an error shift ... abort */
        !           684: yyabort:
        !           685:                        return(1);
        !           686:                case 3:  /* no shift yet; clobber input char */
        !           687: #ifdef YYDEBUG
        !           688:                        if( yydebug ) {
        !           689:                                printf("error recovery discards ");
        !           690:                                if(yytoknames[yychar])
        !           691:                                        printf("%s\n", yytoknames[yychar]);
        !           692:                                else if(yychar >= ' ' && yychar < '\177')
        !           693:                                        printf("`%c'\n", yychar);
        !           694:                                else if(yychar == 0)
        !           695:                                        printf("EOF\n");
        !           696:                                else
        !           697:                                        printf("char 0%o\n", yychar);
        !           698:                        }
        !           699: #endif
        !           700:                        if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
        !           701:                        yychar = -1;
        !           702:                        goto yynewstate;   /* try again in the same state */
        !           703:                }
        !           704:        }
        !           705:        /* reduction by production yyn */
        !           706: #ifdef YYDEBUG
        !           707:        if(yydebug) {   char *s;
        !           708:                printf("reduce %d in:\n\t", yyn);
        !           709:                for(s = yystates[yystate]; *s; s++) {
        !           710:                        putchar(*s);
        !           711:                        if(*s == '\n' && *(s+1))
        !           712:                                putchar('\t');
        !           713:                }
        !           714:        }
        !           715: #endif
        !           716:        yyps -= yyr2[yyn];
        !           717:        yypvt = yypv;
        !           718:        yypv -= yyr2[yyn];
        !           719:        yyval = yypv[1];
        !           720:        yym=yyn;
        !           721:        /* consult goto table to find next state */
        !           722:        yyn = yyr1[yyn];
        !           723:        yyj = yypgo[yyn] + *yyps + 1;
        !           724:        if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
        !           725:        switch(yym){
        !           726:                
        !           727: case 2:
        !           728: # line 137 "../pcc1/mip/cgram.y"
        !           729: ftnend(); break;
        !           730: case 3:
        !           731: # line 140 "../pcc1/mip/cgram.y"
        !           732: { curclass = SNULL;  blevel = 0; } break;
        !           733: case 4:
        !           734: # line 142 "../pcc1/mip/cgram.y"
        !           735: { curclass = SNULL;  blevel = 0; } break;
        !           736: case 5:
        !           737: # line 146 "../pcc1/mip/cgram.y"
        !           738: {  yypvt[-1].nodep->in.op = FREE; } break;
        !           739: case 6:
        !           740: # line 148 "../pcc1/mip/cgram.y"
        !           741: {  yypvt[-2].nodep->in.op = FREE; } break;
        !           742: case 7:
        !           743: # line 149 "../pcc1/mip/cgram.y"
        !           744: {
        !           745:                                defid( tymerge(yypvt[-1].nodep,yypvt[-0].nodep), curclass==STATIC?STATIC:EXTDEF );
        !           746: #ifndef LINT
        !           747:                                pfstab(stab[yypvt[-0].nodep->tn.rval].sname);
        !           748: #endif
        !           749:                                } break;
        !           750: case 8:
        !           751: # line 155 "../pcc1/mip/cgram.y"
        !           752: {  
        !           753:                            if( blevel ) cerror( "function level error" );
        !           754:                            if( reached ) retstat |= NRETVAL; 
        !           755:                            yypvt[-3].nodep->in.op = FREE;
        !           756:                            ftnend();
        !           757:                            } break;
        !           758: case 11:
        !           759: # line 166 "../pcc1/mip/cgram.y"
        !           760: {  blevel = 1; } break;
        !           761: case 13:
        !           762: # line 171 "../pcc1/mip/cgram.y"
        !           763: {  bccode();
        !           764:                            locctr(PROG);
        !           765:                            } break;
        !           766: case 14:
        !           767: # line 177 "../pcc1/mip/cgram.y"
        !           768: {  yypvt[-1].nodep->in.op = FREE; 
        !           769: #ifndef LINT
        !           770:                            plcstab(blevel);
        !           771: #endif
        !           772:                            } break;
        !           773: case 15:
        !           774: # line 183 "../pcc1/mip/cgram.y"
        !           775: {  yypvt[-2].nodep->in.op = FREE; 
        !           776: #ifndef LINT
        !           777:                            plcstab(blevel);
        !           778: #endif
        !           779:                            } break;
        !           780: case 16:
        !           781: # line 191 "../pcc1/mip/cgram.y"
        !           782: {  yypvt[-1].nodep->in.op = FREE; } break;
        !           783: case 17:
        !           784: # line 193 "../pcc1/mip/cgram.y"
        !           785: {  yypvt[-2].nodep->in.op = FREE; } break;
        !           786: case 19:
        !           787: # line 197 "../pcc1/mip/cgram.y"
        !           788: { curclass = SNULL;  yypvt[-2].nodep->in.op = FREE; } break;
        !           789: case 20:
        !           790: # line 199 "../pcc1/mip/cgram.y"
        !           791: { curclass = SNULL;  yypvt[-1].nodep->in.op = FREE; } break;
        !           792: case 21:
        !           793: # line 201 "../pcc1/mip/cgram.y"
        !           794: {  curclass = SNULL; } break;
        !           795: case 23:
        !           796: # line 205 "../pcc1/mip/cgram.y"
        !           797: {  yyval.nodep = mkty(INT,0,INT);  curclass = SNULL; } break;
        !           798: case 24:
        !           799: # line 208 "../pcc1/mip/cgram.y"
        !           800: {  yyval.nodep = yypvt[-0].nodep; } break;
        !           801: case 26:
        !           802: # line 211 "../pcc1/mip/cgram.y"
        !           803: {  yyval.nodep = mkty(INT,0,INT); } break;
        !           804: case 27:
        !           805: # line 213 "../pcc1/mip/cgram.y"
        !           806: { curclass = SNULL ; } break;
        !           807: case 28:
        !           808: # line 215 "../pcc1/mip/cgram.y"
        !           809: {  yypvt[-2].nodep->in.type = types( yypvt[-2].nodep->in.type, yypvt[-0].nodep->in.type, UNDEF );
        !           810:                            yypvt[-0].nodep->in.op = FREE;
        !           811:                            } break;
        !           812: case 29:
        !           813: # line 222 "../pcc1/mip/cgram.y"
        !           814: {  curclass = yypvt[-0].intval; } break;
        !           815: case 31:
        !           816: # line 227 "../pcc1/mip/cgram.y"
        !           817: {  yypvt[-1].nodep->in.type = types( yypvt[-1].nodep->in.type, yypvt[-0].nodep->in.type, UNDEF );
        !           818:                            yypvt[-0].nodep->in.op = FREE;
        !           819:                            } break;
        !           820: case 32:
        !           821: # line 231 "../pcc1/mip/cgram.y"
        !           822: {  yypvt[-2].nodep->in.type = types( yypvt[-2].nodep->in.type, yypvt[-1].nodep->in.type, yypvt[-0].nodep->in.type );
        !           823:                            yypvt[-1].nodep->in.op = yypvt[-0].nodep->in.op = FREE;
        !           824:                            } break;
        !           825: case 35:
        !           826: # line 239 "../pcc1/mip/cgram.y"
        !           827: { yyval.nodep = dclstruct(yypvt[-4].intval); } break;
        !           828: case 36:
        !           829: # line 241 "../pcc1/mip/cgram.y"
        !           830: {  yyval.nodep = rstruct(yypvt[-0].intval,0);  stwart = instruct; } break;
        !           831: case 37:
        !           832: # line 245 "../pcc1/mip/cgram.y"
        !           833: {  yyval.intval = bstruct(-1,0); stwart = SEENAME; } break;
        !           834: case 38:
        !           835: # line 247 "../pcc1/mip/cgram.y"
        !           836: {  yyval.intval = bstruct(yypvt[-0].intval,0); stwart = SEENAME; } break;
        !           837: case 41:
        !           838: # line 255 "../pcc1/mip/cgram.y"
        !           839: {  moedef( yypvt[-0].intval ); } break;
        !           840: case 42:
        !           841: # line 257 "../pcc1/mip/cgram.y"
        !           842: {  strucoff = yypvt[-0].intval;  moedef( yypvt[-2].intval ); } break;
        !           843: case 43:
        !           844: # line 261 "../pcc1/mip/cgram.y"
        !           845: { yyval.nodep = dclstruct(yypvt[-4].intval);  } break;
        !           846: case 44:
        !           847: # line 263 "../pcc1/mip/cgram.y"
        !           848: {  yyval.nodep = rstruct(yypvt[-0].intval,yypvt[-1].intval); } break;
        !           849: case 45:
        !           850: # line 267 "../pcc1/mip/cgram.y"
        !           851: {  yyval.intval = bstruct(-1,yypvt[-0].intval);  stwart=0; } break;
        !           852: case 46:
        !           853: # line 269 "../pcc1/mip/cgram.y"
        !           854: {  yyval.intval = bstruct(yypvt[-0].intval,yypvt[-1].intval);  stwart=0;  } break;
        !           855: case 49:
        !           856: # line 277 "../pcc1/mip/cgram.y"
        !           857: { curclass = SNULL;  stwart=0; yypvt[-1].nodep->in.op = FREE; } break;
        !           858: case 50:
        !           859: # line 279 "../pcc1/mip/cgram.y"
        !           860: {  if( curclass != MOU ){
        !           861:                                curclass = SNULL;
        !           862:                                }
        !           863:                            else {
        !           864:                                sprintf( fakename, "$%dFAKE", fake++ );
        !           865: #ifdef FLEXSTRINGS
        !           866:                                /* No need to hash this, we won't look it up */
        !           867:                                defid( tymerge(yypvt[-0].nodep, bdty(NAME,NIL,lookup( savestr(fakename), SMOS ))), curclass );
        !           868: #else
        !           869:                                defid( tymerge(yypvt[-0].nodep, bdty(NAME,NIL,lookup( fakename, SMOS ))), curclass );
        !           870: #endif
        !           871:                                werror("structure typed union member must be named");
        !           872:                                }
        !           873:                            stwart = 0;
        !           874:                            yypvt[-0].nodep->in.op = FREE;
        !           875:                            } break;
        !           876: case 51:
        !           877: # line 299 "../pcc1/mip/cgram.y"
        !           878: { defid( tymerge(yypvt[-1].nodep,yypvt[-0].nodep), curclass);  stwart = instruct; } break;
        !           879: case 52:
        !           880: # line 300 "../pcc1/mip/cgram.y"
        !           881: {yyval.nodep=yypvt[-2].nodep;} break;
        !           882: case 53:
        !           883: # line 301 "../pcc1/mip/cgram.y"
        !           884: { defid( tymerge(yypvt[-4].nodep,yypvt[-0].nodep), curclass);  stwart = instruct; } break;
        !           885: case 56:
        !           886: # line 307 "../pcc1/mip/cgram.y"
        !           887: {  if( !(instruct&INSTRUCT) ) uerror( "field outside of structure" );
        !           888:                            if( yypvt[-0].intval<0 || yypvt[-0].intval >= FIELD ){
        !           889:                                uerror( "illegal field size" );
        !           890:                                yypvt[-0].intval = 1;
        !           891:                                }
        !           892:                            defid( tymerge(yypvt[-3].nodep,yypvt[-2].nodep), FIELD|yypvt[-0].intval );
        !           893:                            yyval.nodep = NIL;
        !           894:                            } break;
        !           895: case 57:
        !           896: # line 317 "../pcc1/mip/cgram.y"
        !           897: {  if( !(instruct&INSTRUCT) ) uerror( "field outside of structure" );
        !           898:                            falloc( stab, yypvt[-0].intval, -1, yypvt[-2].nodep );  /* alignment or hole */
        !           899:                            yyval.nodep = NIL;
        !           900:                            } break;
        !           901: case 58:
        !           902: # line 322 "../pcc1/mip/cgram.y"
        !           903: {  yyval.nodep = NIL; } break;
        !           904: case 59:
        !           905: # line 327 "../pcc1/mip/cgram.y"
        !           906: {  umul:
        !           907:                                yyval.nodep = bdty( UNARY MUL, yypvt[-0].nodep, 0 ); } break;
        !           908: case 60:
        !           909: # line 330 "../pcc1/mip/cgram.y"
        !           910: {  uftn:
        !           911:                                yyval.nodep = bdty( UNARY CALL, yypvt[-2].nodep, 0 );  } break;
        !           912: case 61:
        !           913: # line 333 "../pcc1/mip/cgram.y"
        !           914: {  uary:
        !           915:                                yyval.nodep = bdty( LB, yypvt[-2].nodep, 0 );  } break;
        !           916: case 62:
        !           917: # line 336 "../pcc1/mip/cgram.y"
        !           918: {  bary:
        !           919:                                if( (int)yypvt[-1].intval <= 0 ) werror( "zero or negative subscript" );
        !           920:                                yyval.nodep = bdty( LB, yypvt[-3].nodep, yypvt[-1].intval );  } break;
        !           921: case 63:
        !           922: # line 340 "../pcc1/mip/cgram.y"
        !           923: {  yyval.nodep = bdty( NAME, NIL, yypvt[-0].intval );  } break;
        !           924: case 64:
        !           925: # line 342 "../pcc1/mip/cgram.y"
        !           926: { yyval.nodep=yypvt[-1].nodep; } break;
        !           927: case 65:
        !           928: # line 345 "../pcc1/mip/cgram.y"
        !           929: {  goto umul; } break;
        !           930: case 66:
        !           931: # line 347 "../pcc1/mip/cgram.y"
        !           932: {  goto uftn; } break;
        !           933: case 67:
        !           934: # line 349 "../pcc1/mip/cgram.y"
        !           935: {  goto uary; } break;
        !           936: case 68:
        !           937: # line 351 "../pcc1/mip/cgram.y"
        !           938: {  goto bary; } break;
        !           939: case 69:
        !           940: # line 353 "../pcc1/mip/cgram.y"
        !           941: { yyval.nodep = yypvt[-1].nodep; } break;
        !           942: case 70:
        !           943: # line 355 "../pcc1/mip/cgram.y"
        !           944: {
        !           945:                                if( blevel!=0 ) uerror("function declaration in bad context");
        !           946:                                yyval.nodep = bdty( UNARY CALL, bdty(NAME,NIL,yypvt[-2].intval), 0 );
        !           947:                                stwart = 0;
        !           948:                                } break;
        !           949: case 71:
        !           950: # line 361 "../pcc1/mip/cgram.y"
        !           951: {
        !           952:                                yyval.nodep = bdty( UNARY CALL, bdty(NAME,NIL,yypvt[-1].intval), 0 );
        !           953:                                stwart = 0;
        !           954:                                } break;
        !           955: case 72:
        !           956: # line 368 "../pcc1/mip/cgram.y"
        !           957: {
        !           958:                                /* turn off typedefs for argument names */
        !           959:                                stwart = SEENAME;
        !           960:                                if( stab[yypvt[-1].intval].sclass == SNULL )
        !           961:                                    stab[yypvt[-1].intval].stype = FTN;
        !           962:                                } break;
        !           963: case 73:
        !           964: # line 377 "../pcc1/mip/cgram.y"
        !           965: { ftnarg( yypvt[-0].intval );  stwart = SEENAME; } break;
        !           966: case 74:
        !           967: # line 379 "../pcc1/mip/cgram.y"
        !           968: { ftnarg( yypvt[-0].intval );  stwart = SEENAME; } break;
        !           969: case 77:
        !           970: # line 385 "../pcc1/mip/cgram.y"
        !           971: {yyval.nodep=yypvt[-2].nodep;} break;
        !           972: case 79:
        !           973: # line 389 "../pcc1/mip/cgram.y"
        !           974: {  defid( yypvt[-0].nodep = tymerge(yypvt[-1].nodep,yypvt[-0].nodep), curclass);
        !           975:                            beginit(yypvt[-0].nodep->tn.rval);
        !           976:                            } break;
        !           977: case 81:
        !           978: # line 396 "../pcc1/mip/cgram.y"
        !           979: {  nidcl( tymerge(yypvt[-1].nodep,yypvt[-0].nodep) ); } break;
        !           980: case 82:
        !           981: # line 398 "../pcc1/mip/cgram.y"
        !           982: {  defid( tymerge(yypvt[-1].nodep,yypvt[-0].nodep), uclass(curclass) );
        !           983:                        } break;
        !           984: case 83:
        !           985: # line 402 "../pcc1/mip/cgram.y"
        !           986: {  doinit( yypvt[-0].nodep );
        !           987:                            endinit(); } break;
        !           988: case 84:
        !           989: # line 405 "../pcc1/mip/cgram.y"
        !           990: {  endinit(); } break;
        !           991: case 88:
        !           992: # line 415 "../pcc1/mip/cgram.y"
        !           993: {  doinit( yypvt[-0].nodep ); } break;
        !           994: case 89:
        !           995: # line 417 "../pcc1/mip/cgram.y"
        !           996: {  irbrace(); } break;
        !           997: case 94:
        !           998: # line 429 "../pcc1/mip/cgram.y"
        !           999: {  werror( "old-fashioned initialization: use =" ); } break;
        !          1000: case 96:
        !          1001: # line 434 "../pcc1/mip/cgram.y"
        !          1002: {  ilbrace(); } break;
        !          1003: case 99:
        !          1004: # line 444 "../pcc1/mip/cgram.y"
        !          1005: {  
        !          1006: #ifndef LINT
        !          1007:                            prcstab(blevel);
        !          1008: #endif
        !          1009:                            --blevel;
        !          1010:                            if( blevel == 1 ) blevel = 0;
        !          1011:                            clearst( blevel );
        !          1012:                            checkst( blevel );
        !          1013:                            autooff = *--psavbc;
        !          1014:                            regvar = *--psavbc;
        !          1015:                            } break;
        !          1016: case 100:
        !          1017: # line 458 "../pcc1/mip/cgram.y"
        !          1018: {  --blevel;
        !          1019:                            if( blevel == 1 ) blevel = 0;
        !          1020:                            clearst( blevel );
        !          1021:                            checkst( blevel );
        !          1022:                            autooff = *--psavbc;
        !          1023:                            regvar = *--psavbc;
        !          1024:                            } break;
        !          1025: case 101:
        !          1026: # line 468 "../pcc1/mip/cgram.y"
        !          1027: {  if( blevel == 1 ) dclargs();
        !          1028:                            ++blevel;
        !          1029:                            if( psavbc > &asavbc[BCSZ-2] ) cerror( "nesting too deep" );
        !          1030:                            *psavbc++ = regvar;
        !          1031:                            *psavbc++ = autooff;
        !          1032:                            } break;
        !          1033: case 102:
        !          1034: # line 477 "../pcc1/mip/cgram.y"
        !          1035: { ecomp( yypvt[-1].nodep ); } break;
        !          1036: case 104:
        !          1037: # line 480 "../pcc1/mip/cgram.y"
        !          1038: { deflab(yypvt[-1].intval);
        !          1039:                           reached = 1;
        !          1040:                           } break;
        !          1041: case 105:
        !          1042: # line 484 "../pcc1/mip/cgram.y"
        !          1043: {  if( yypvt[-1].intval != NOLAB ){
        !          1044:                                deflab( yypvt[-1].intval );
        !          1045:                                reached = 1;
        !          1046:                                }
        !          1047:                            } break;
        !          1048: case 106:
        !          1049: # line 490 "../pcc1/mip/cgram.y"
        !          1050: {  branch(  contlab );
        !          1051:                            deflab( brklab );
        !          1052:                            if( (flostat&FBRK) || !(flostat&FLOOP)) reached = 1;
        !          1053:                            else reached = 0;
        !          1054:                            resetbc(0);
        !          1055:                            } break;
        !          1056: case 107:
        !          1057: # line 497 "../pcc1/mip/cgram.y"
        !          1058: {  deflab( contlab );
        !          1059:                            if( flostat & FCONT ) reached = 1;
        !          1060:                            ecomp( buildtree( CBRANCH, buildtree( NOT, yypvt[-2].nodep, NIL ), bcon( yypvt[-6].intval ) ) );
        !          1061:                            deflab( brklab );
        !          1062:                            reached = 1;
        !          1063:                            resetbc(0);
        !          1064:                            } break;
        !          1065: case 108:
        !          1066: # line 505 "../pcc1/mip/cgram.y"
        !          1067: {  deflab( contlab );
        !          1068:                            if( flostat&FCONT ) reached = 1;
        !          1069:                            if( yypvt[-2].nodep ) ecomp( yypvt[-2].nodep );
        !          1070:                            branch( yypvt[-3].intval );
        !          1071:                            deflab( brklab );
        !          1072:                            if( (flostat&FBRK) || !(flostat&FLOOP) ) reached = 1;
        !          1073:                            else reached = 0;
        !          1074:                            resetbc(0);
        !          1075:                            } break;
        !          1076: case 109:
        !          1077: # line 515 "../pcc1/mip/cgram.y"
        !          1078: {  if( reached ) branch( brklab );
        !          1079:                            deflab( yypvt[-1].intval );
        !          1080:                           swend();
        !          1081:                            deflab(brklab);
        !          1082:                            if( (flostat&FBRK) || !(flostat&FDEF) ) reached = 1;
        !          1083:                            resetbc(FCONT);
        !          1084:                            } break;
        !          1085: case 110:
        !          1086: # line 523 "../pcc1/mip/cgram.y"
        !          1087: {  if( brklab == NOLAB ) uerror( "illegal break");
        !          1088:                            else if(reached) branch( brklab );
        !          1089:                            flostat |= FBRK;
        !          1090:                            if( brkflag ) goto rch;
        !          1091:                            reached = 0;
        !          1092:                            } break;
        !          1093: case 111:
        !          1094: # line 530 "../pcc1/mip/cgram.y"
        !          1095: {  if( contlab == NOLAB ) uerror( "illegal continue");
        !          1096:                            else branch( contlab );
        !          1097:                            flostat |= FCONT;
        !          1098:                            goto rch;
        !          1099:                            } break;
        !          1100: case 112:
        !          1101: # line 536 "../pcc1/mip/cgram.y"
        !          1102: {  retstat |= NRETVAL;
        !          1103:                            branch( retlab );
        !          1104:                        rch:
        !          1105:                            if( !reached ) werror( "statement not reached");
        !          1106:                            reached = 0;
        !          1107:                            } break;
        !          1108: case 113:
        !          1109: # line 543 "../pcc1/mip/cgram.y"
        !          1110: {  register NODE *temp;
        !          1111:                            idname = curftn;
        !          1112:                            temp = buildtree( NAME, NIL, NIL );
        !          1113:                            if(temp->in.type == TVOID)
        !          1114:                                uerror("void function %s cannot return value",
        !          1115:                                        stab[idname].sname);
        !          1116:                            temp->in.type = DECREF( temp->in.type );
        !          1117:                            temp = buildtree( RETURN, temp, yypvt[-1].nodep );
        !          1118:                            /* now, we have the type of the RHS correct */
        !          1119:                            temp->in.left->in.op = FREE;
        !          1120:                            temp->in.op = FREE;
        !          1121:                            ecomp( buildtree( FORCE, temp->in.right, NIL ) );
        !          1122:                            retstat |= RETVAL;
        !          1123:                            branch( retlab );
        !          1124:                            reached = 0;
        !          1125:                            } break;
        !          1126: case 114:
        !          1127: # line 560 "../pcc1/mip/cgram.y"
        !          1128: {  register NODE *q;
        !          1129:                            q = block( FREE, NIL, NIL, INT|ARY, 0, INT );
        !          1130:                            q->tn.rval = idname = yypvt[-1].intval;
        !          1131:                            defid( q, ULABEL );
        !          1132:                            stab[idname].suse = -lineno;
        !          1133:                            branch( stab[idname].offset );
        !          1134:                            goto rch;
        !          1135:                            } break;
        !          1136: case 119:
        !          1137: # line 574 "../pcc1/mip/cgram.y"
        !          1138: {  register NODE *q;
        !          1139:                            q = block( FREE, NIL, NIL, INT|ARY, 0, LABEL );
        !          1140:                            q->tn.rval = yypvt[-1].intval;
        !          1141:                            defid( q, LABEL );
        !          1142:                            reached = 1;
        !          1143:                            } break;
        !          1144: case 120:
        !          1145: # line 581 "../pcc1/mip/cgram.y"
        !          1146: {  addcase(yypvt[-1].nodep);
        !          1147:                            reached = 1;
        !          1148:                            } break;
        !          1149: case 121:
        !          1150: # line 585 "../pcc1/mip/cgram.y"
        !          1151: {  reached = 1;
        !          1152:                            adddef();
        !          1153:                            flostat |= FDEF;
        !          1154:                            } break;
        !          1155: case 122:
        !          1156: # line 591 "../pcc1/mip/cgram.y"
        !          1157: {  savebc();
        !          1158:                            if( !reached ) werror( "loop not entered at top");
        !          1159:                            brklab = getlab();
        !          1160:                            contlab = getlab();
        !          1161:                            deflab( yyval.intval = getlab() );
        !          1162:                            reached = 1;
        !          1163:                            } break;
        !          1164: case 123:
        !          1165: # line 600 "../pcc1/mip/cgram.y"
        !          1166: {  ecomp( buildtree( CBRANCH, yypvt[-1].nodep, bcon( yyval.intval=getlab()) ) ) ;
        !          1167:                            reached = 1;
        !          1168:                            } break;
        !          1169: case 124:
        !          1170: # line 605 "../pcc1/mip/cgram.y"
        !          1171: {  if( reached ) branch( yyval.intval = getlab() );
        !          1172:                            else yyval.intval = NOLAB;
        !          1173:                            deflab( yypvt[-2].intval );
        !          1174:                            reached = 1;
        !          1175:                            } break;
        !          1176: case 125:
        !          1177: # line 613 "../pcc1/mip/cgram.y"
        !          1178: {  savebc();
        !          1179:                            if( !reached ) werror( "loop not entered at top");
        !          1180:                            if( yypvt[-1].nodep->in.op == ICON && yypvt[-1].nodep->tn.lval != 0 ) flostat = FLOOP;
        !          1181:                            deflab( contlab = getlab() );
        !          1182:                            reached = 1;
        !          1183:                            brklab = getlab();
        !          1184:                            if( flostat == FLOOP ) tfree( yypvt[-1].nodep );
        !          1185:                            else ecomp( buildtree( CBRANCH, yypvt[-1].nodep, bcon( brklab) ) );
        !          1186:                            } break;
        !          1187: case 126:
        !          1188: # line 624 "../pcc1/mip/cgram.y"
        !          1189: {  if( yypvt[-3].nodep ) ecomp( yypvt[-3].nodep );
        !          1190:                            else if( !reached ) werror( "loop not entered at top");
        !          1191:                            savebc();
        !          1192:                            contlab = getlab();
        !          1193:                            brklab = getlab();
        !          1194:                            deflab( yyval.intval = getlab() );
        !          1195:                            reached = 1;
        !          1196:                            if( yypvt[-1].nodep ) ecomp( buildtree( CBRANCH, yypvt[-1].nodep, bcon( brklab) ) );
        !          1197:                            else flostat |= FLOOP;
        !          1198:                            } break;
        !          1199: case 127:
        !          1200: # line 636 "../pcc1/mip/cgram.y"
        !          1201: {  savebc();
        !          1202:                            brklab = getlab();
        !          1203:                            ecomp( buildtree( FORCE, yypvt[-1].nodep, NIL ) );
        !          1204:                            branch( yyval.intval = getlab() );
        !          1205:                            swstart();
        !          1206:                            reached = 0;
        !          1207:                            } break;
        !          1208: case 128:
        !          1209: # line 645 "../pcc1/mip/cgram.y"
        !          1210: { yyval.intval=instruct; stwart=instruct=0; } break;
        !          1211: case 129:
        !          1212: # line 647 "../pcc1/mip/cgram.y"
        !          1213: {  yyval.intval = icons( yypvt[-0].nodep );  instruct=yypvt[-1].intval; } break;
        !          1214: case 131:
        !          1215: # line 651 "../pcc1/mip/cgram.y"
        !          1216: { yyval.nodep=0; } break;
        !          1217: case 133:
        !          1218: # line 656 "../pcc1/mip/cgram.y"
        !          1219: {  goto bop; } break;
        !          1220: case 134:
        !          1221: # line 660 "../pcc1/mip/cgram.y"
        !          1222: {
        !          1223:                        preconf:
        !          1224:                            if( yychar==RELOP||yychar==EQUOP||yychar==AND||yychar==OR||yychar==ER ){
        !          1225:                            precplaint:
        !          1226:                                if( hflag ) werror( "precedence confusion possible: parenthesize!" );
        !          1227:                                }
        !          1228:                        bop:
        !          1229:                            yyval.nodep = buildtree( yypvt[-1].intval, yypvt[-2].nodep, yypvt[-0].nodep );
        !          1230:                            } break;
        !          1231: case 135:
        !          1232: # line 670 "../pcc1/mip/cgram.y"
        !          1233: {  yypvt[-1].intval = COMOP;
        !          1234:                            goto bop;
        !          1235:                            } break;
        !          1236: case 136:
        !          1237: # line 674 "../pcc1/mip/cgram.y"
        !          1238: {  goto bop; } break;
        !          1239: case 137:
        !          1240: # line 676 "../pcc1/mip/cgram.y"
        !          1241: {  if(yychar==SHIFTOP) goto precplaint; else goto bop; } break;
        !          1242: case 138:
        !          1243: # line 678 "../pcc1/mip/cgram.y"
        !          1244: {  if(yychar==SHIFTOP ) goto precplaint; else goto bop; } break;
        !          1245: case 139:
        !          1246: # line 680 "../pcc1/mip/cgram.y"
        !          1247: {  if(yychar==PLUS||yychar==MINUS) goto precplaint; else goto bop; } break;
        !          1248: case 140:
        !          1249: # line 682 "../pcc1/mip/cgram.y"
        !          1250: {  goto bop; } break;
        !          1251: case 141:
        !          1252: # line 684 "../pcc1/mip/cgram.y"
        !          1253: {  goto preconf; } break;
        !          1254: case 142:
        !          1255: # line 686 "../pcc1/mip/cgram.y"
        !          1256: {  if( yychar==RELOP||yychar==EQUOP ) goto preconf;  else goto bop; } break;
        !          1257: case 143:
        !          1258: # line 688 "../pcc1/mip/cgram.y"
        !          1259: {  if(yychar==RELOP||yychar==EQUOP) goto preconf; else goto bop; } break;
        !          1260: case 144:
        !          1261: # line 690 "../pcc1/mip/cgram.y"
        !          1262: {  if(yychar==RELOP||yychar==EQUOP) goto preconf; else goto bop; } break;
        !          1263: case 145:
        !          1264: # line 692 "../pcc1/mip/cgram.y"
        !          1265: {  goto bop; } break;
        !          1266: case 146:
        !          1267: # line 694 "../pcc1/mip/cgram.y"
        !          1268: {  goto bop; } break;
        !          1269: case 147:
        !          1270: # line 696 "../pcc1/mip/cgram.y"
        !          1271: {  abop:
        !          1272:                                yyval.nodep = buildtree( ASG yypvt[-2].intval, yypvt[-3].nodep, yypvt[-0].nodep );
        !          1273:                                } break;
        !          1274: case 148:
        !          1275: # line 700 "../pcc1/mip/cgram.y"
        !          1276: {  goto abop; } break;
        !          1277: case 149:
        !          1278: # line 702 "../pcc1/mip/cgram.y"
        !          1279: {  goto abop; } break;
        !          1280: case 150:
        !          1281: # line 704 "../pcc1/mip/cgram.y"
        !          1282: {  goto abop; } break;
        !          1283: case 151:
        !          1284: # line 706 "../pcc1/mip/cgram.y"
        !          1285: {  goto abop; } break;
        !          1286: case 152:
        !          1287: # line 708 "../pcc1/mip/cgram.y"
        !          1288: {  goto abop; } break;
        !          1289: case 153:
        !          1290: # line 710 "../pcc1/mip/cgram.y"
        !          1291: {  goto abop; } break;
        !          1292: case 154:
        !          1293: # line 712 "../pcc1/mip/cgram.y"
        !          1294: {  goto abop; } break;
        !          1295: case 155:
        !          1296: # line 714 "../pcc1/mip/cgram.y"
        !          1297: {  yyval.nodep=buildtree(QUEST, yypvt[-4].nodep, buildtree( COLON, yypvt[-2].nodep, yypvt[-0].nodep ) );
        !          1298:                            } break;
        !          1299: case 156:
        !          1300: # line 717 "../pcc1/mip/cgram.y"
        !          1301: {  werror( "old-fashioned assignment operator" );  goto bop; } break;
        !          1302: case 157:
        !          1303: # line 719 "../pcc1/mip/cgram.y"
        !          1304: {  goto bop; } break;
        !          1305: case 159:
        !          1306: # line 723 "../pcc1/mip/cgram.y"
        !          1307: {  yyval.nodep = buildtree( yypvt[-0].intval, yypvt[-1].nodep, bcon(1) ); } break;
        !          1308: case 160:
        !          1309: # line 725 "../pcc1/mip/cgram.y"
        !          1310: { ubop:
        !          1311:                            yyval.nodep = buildtree( UNARY yypvt[-1].intval, yypvt[-0].nodep, NIL );
        !          1312:                            } break;
        !          1313: case 161:
        !          1314: # line 729 "../pcc1/mip/cgram.y"
        !          1315: {  if( ISFTN(yypvt[-0].nodep->in.type) || ISARY(yypvt[-0].nodep->in.type) ){
        !          1316:                                werror( "& before array or function: ignored" );
        !          1317:                                yyval.nodep = yypvt[-0].nodep;
        !          1318:                                }
        !          1319:                            else goto ubop;
        !          1320:                            } break;
        !          1321: case 162:
        !          1322: # line 736 "../pcc1/mip/cgram.y"
        !          1323: {  goto ubop; } break;
        !          1324: case 163:
        !          1325: # line 738 "../pcc1/mip/cgram.y"
        !          1326: {
        !          1327:                            yyval.nodep = buildtree( yypvt[-1].intval, yypvt[-0].nodep, NIL );
        !          1328:                            } break;
        !          1329: case 164:
        !          1330: # line 742 "../pcc1/mip/cgram.y"
        !          1331: {  yyval.nodep = buildtree( yypvt[-1].intval==INCR ? ASG PLUS : ASG MINUS,
        !          1332:                                                yypvt[-0].nodep,
        !          1333:                                                bcon(1)  );
        !          1334:                            } break;
        !          1335: case 165:
        !          1336: # line 747 "../pcc1/mip/cgram.y"
        !          1337: {  yyval.nodep = doszof( yypvt[-0].nodep ); } break;
        !          1338: case 166:
        !          1339: # line 749 "../pcc1/mip/cgram.y"
        !          1340: {  yyval.nodep = buildtree( CAST, yypvt[-2].nodep, yypvt[-0].nodep );
        !          1341:                            yyval.nodep->in.left->in.op = FREE;
        !          1342:                            yyval.nodep->in.op = FREE;
        !          1343:                            yyval.nodep = yyval.nodep->in.right;
        !          1344:                            } break;
        !          1345: case 167:
        !          1346: # line 755 "../pcc1/mip/cgram.y"
        !          1347: {  yyval.nodep = doszof( yypvt[-1].nodep ); } break;
        !          1348: case 168:
        !          1349: # line 757 "../pcc1/mip/cgram.y"
        !          1350: {  yyval.nodep = buildtree( UNARY MUL, buildtree( PLUS, yypvt[-3].nodep, yypvt[-1].nodep ), NIL ); } break;
        !          1351: case 169:
        !          1352: # line 759 "../pcc1/mip/cgram.y"
        !          1353: {  yyval.nodep=buildtree(UNARY CALL,yypvt[-1].nodep,NIL); } break;
        !          1354: case 170:
        !          1355: # line 761 "../pcc1/mip/cgram.y"
        !          1356: {  yyval.nodep=buildtree(CALL,yypvt[-2].nodep,yypvt[-1].nodep); } break;
        !          1357: case 171:
        !          1358: # line 763 "../pcc1/mip/cgram.y"
        !          1359: {  if( yypvt[-1].intval == DOT ){
        !          1360:                                if( notlval( yypvt[-2].nodep ) )uerror("structure reference must be addressable");
        !          1361:                                yypvt[-2].nodep = buildtree( UNARY AND, yypvt[-2].nodep, NIL );
        !          1362:                                }
        !          1363:                            idname = yypvt[-0].intval;
        !          1364:                            yyval.nodep = buildtree( STREF, yypvt[-2].nodep, buildtree( NAME, NIL, NIL ) );
        !          1365:                            } break;
        !          1366: case 172:
        !          1367: # line 771 "../pcc1/mip/cgram.y"
        !          1368: {  idname = yypvt[-0].intval;
        !          1369:                            /* recognize identifiers in initializations */
        !          1370:                            if( blevel==0 && stab[idname].stype == UNDEF ) {
        !          1371:                                register NODE *q;
        !          1372: #ifndef FLEXNAMES
        !          1373:                                werror( "undeclared initializer name %.8s", stab[idname].sname );
        !          1374: #else
        !          1375:                                werror( "undeclared initializer name %s", stab[idname].sname );
        !          1376: #endif
        !          1377:                                q = block( FREE, NIL, NIL, INT, 0, INT );
        !          1378:                                q->tn.rval = idname;
        !          1379:                                defid( q, EXTERN );
        !          1380:                                }
        !          1381:                            yyval.nodep=buildtree(NAME,NIL,NIL);
        !          1382:                            stab[yypvt[-0].intval].suse = -lineno;
        !          1383:                        } break;
        !          1384: case 173:
        !          1385: # line 788 "../pcc1/mip/cgram.y"
        !          1386: {  yyval.nodep=bcon(0);
        !          1387:                            yyval.nodep->tn.lval = lastcon;
        !          1388:                            yyval.nodep->tn.rval = NONAME;
        !          1389:                            if( yypvt[-0].intval ) yyval.nodep->fn.csiz = yyval.nodep->in.type = ctype(LONG);
        !          1390:                            } break;
        !          1391: case 174:
        !          1392: # line 794 "../pcc1/mip/cgram.y"
        !          1393: {  yyval.nodep=buildtree(FCON,NIL,NIL);
        !          1394:                            yyval.nodep->fpn.dval = dcon;
        !          1395:                            } break;
        !          1396: case 175:
        !          1397: # line 798 "../pcc1/mip/cgram.y"
        !          1398: {  yyval.nodep = getstr(); /* get string contents */ } break;
        !          1399: case 176:
        !          1400: # line 800 "../pcc1/mip/cgram.y"
        !          1401: { yyval.nodep=yypvt[-1].nodep; } break;
        !          1402: case 177:
        !          1403: # line 804 "../pcc1/mip/cgram.y"
        !          1404: {
        !          1405:                        yyval.nodep = tymerge( yypvt[-1].nodep, yypvt[-0].nodep );
        !          1406:                        yyval.nodep->in.op = NAME;
        !          1407:                        yypvt[-1].nodep->in.op = FREE;
        !          1408:                        } break;
        !          1409: case 178:
        !          1410: # line 812 "../pcc1/mip/cgram.y"
        !          1411: { yyval.nodep = bdty( NAME, NIL, -1 ); } break;
        !          1412: case 179:
        !          1413: # line 814 "../pcc1/mip/cgram.y"
        !          1414: { yyval.nodep = bdty( UNARY CALL, bdty(NAME,NIL,-1),0); } break;
        !          1415: case 180:
        !          1416: # line 816 "../pcc1/mip/cgram.y"
        !          1417: {  yyval.nodep = bdty( UNARY CALL, yypvt[-3].nodep, 0 ); } break;
        !          1418: case 181:
        !          1419: # line 818 "../pcc1/mip/cgram.y"
        !          1420: {  goto umul; } break;
        !          1421: case 182:
        !          1422: # line 820 "../pcc1/mip/cgram.y"
        !          1423: {  goto uary; } break;
        !          1424: case 183:
        !          1425: # line 822 "../pcc1/mip/cgram.y"
        !          1426: {  goto bary;  } break;
        !          1427: case 184:
        !          1428: # line 824 "../pcc1/mip/cgram.y"
        !          1429: { yyval.nodep = yypvt[-1].nodep; } break;
        !          1430: case 185:
        !          1431: # line 828 "../pcc1/mip/cgram.y"
        !          1432: {  if( stab[yypvt[-1].intval].stype == UNDEF ){
        !          1433:                                register NODE *q;
        !          1434:                                q = block( FREE, NIL, NIL, FTN|INT, 0, INT );
        !          1435:                                q->tn.rval = yypvt[-1].intval;
        !          1436:                                defid( q, EXTERN );
        !          1437:                                }
        !          1438:                            idname = yypvt[-1].intval;
        !          1439:                            yyval.nodep=buildtree(NAME,NIL,NIL);
        !          1440:                            stab[idname].suse = -lineno;
        !          1441:                        } break;
        !          1442:        }
        !          1443:        goto yystack;  /* stack new state and value */
        !          1444: }

unix.superglobalmegacorp.com

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