Annotation of cci/usr/src/lib/fpcc/cgram.c, revision 1.1

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

unix.superglobalmegacorp.com

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