Annotation of researchv9/cmd/sun/pcc/cgram.c, revision 1.1

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

unix.superglobalmegacorp.com

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