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