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