Annotation of researchv8dc/cmd/ccom/common/cgram.c, revision 1.1

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

unix.superglobalmegacorp.com

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