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