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