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

unix.superglobalmegacorp.com

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