|
|
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.