|
|
1.1 root 1:
2: # line 24 "gram.y"
3: #include "cfront.h"
4: #include "size.h"
5:
6: extern int ansi_opt;
7: #define YYMAXDEPTH 600
8:
9: static init_seen = 0;
10: static cdi = 0;
11: static Pnlist cd = 0, cd_vec[BLMAX];
12: static char stmt_seen = 0, stmt_vec[BLMAX];
13:
14: //local class
15: //static Plist tn_vec[BLMAX];
16: extern Plist local_blk; // put in cfront.h
17: static Plist tn_vec[BLMAX], lcl_tn_vec[BLMAX], lcl_blk_vec[BLMAX];
18: extern void local_restore();
19: extern void local_name();
20:
21: static Pname err_name = 0;
22:
23: // fcts put into norm2.c just to get them out of gram.y
24: void sig_name(Pname);
25: Ptype tok_to_type(TOK);
26: void memptrdcl(Pname, Pname, Ptype, Pname);
27:
28: static Pptr doptr(TOK p, TOK t)
29: {
30: Pptr r = new ptr(p,0);
31: switch (t) {
32: case CONST:
33: r->rdo = 1;
34: // if (p == RPTR) error('w',"redundant `const' after &");
35: break;
36: case VOLATILE:
37: error('w',"\"volatile\" not implemented (ignored)");
38: break;
39: default:
40: error("syntax error: *%k",t);
41: }
42: return r;
43: }
44:
45: static Pbcl dobase(TOK pr, Pname n, TOK v = 0)
46: {
47: Pbcl b = new basecl(0,0);
48:
49: if (pr == PROTECTED) {
50: pr = PUBLIC;
51: error("protectedBC");
52: }
53: b->ppp = pr; // save protection indicator
54:
55: if (n) {
56: if (n->base != TNAME) {
57: error("BN%n not aTN",n);
58: return 0;
59: }
60:
61: Pbase bt = Pbase(n->tp);
62: while (bt->base == TYPE) bt = Pbase(bt->b_name->tp);
63:
64: if (bt->base != COBJ) {
65: error("BN%n not aCN",n);
66: return 0;
67: }
68:
69: if (v) {
70: if (v != VIRTUAL) error("syntax error:%k inBCD",v);
71: b->base = VIRTUAL;
72: }
73: else
74: b->base = NAME;
75:
76: b->bclass = Pclass(bt->b_name->tp);
77: }
78:
79: return b;
80: }
81:
82:
83: #define lex_unget(x) back = x
84:
85: #define Ndata(a,b) b->normalize(Pbase(a),0,0)
86: #define Ncast(a,b) b->normalize(Pbase(a),0,1)
87: #define Nfct(a,b,c) b->normalize(Pbase(a),Pblock(c),0)
88: #define Ncopy(n) (n->base==TNAME)?new name(n->string):n
89:
90: #define Finit(p) Pfct(p)->f_init
91: #define Fargdcl(p,q,r) Pfct(p)->argdcl(q,r)
92: #define Freturns(p) Pfct(p)->returns
93: #define Vtype(v) Pvec(v)->typ
94: #define Ptyp(p) Pptr(p)->typ
95:
96: /* avoid redefinitions */
97: #undef EOFTOK
98: #undef ASM
99: #undef BREAK
100: #undef CASE
101: #undef CONTINUE
102: #undef DEFAULT
103: #undef DELETE
104: #undef DO
105: #undef ELSE
106: #undef ENUM
107: #undef FOR
108: #undef FORTRAN
109: #undef GOTO
110: #undef IF
111: #undef NEW
112: #undef OPERATOR
113: #undef RETURN
114: #undef SIZEOF
115: #undef SWITCH
116: #undef THIS
117: #undef WHILE
118: #undef LP
119: #undef RP
120: #undef LB
121: #undef RB
122: #undef REF
123: #undef DOT
124: #undef NOT
125: #undef COMPL
126: #undef MUL
127: #undef AND
128: #undef PLUS
129: #undef MINUS
130: #undef ER
131: #undef OR
132: #undef ANDAND
133: #undef OROR
134: #undef QUEST
135: #undef COLON
136: #undef ASSIGN
137: #undef CM
138: #undef SM
139: #undef LC
140: #undef RC
141: #undef ID
142: #undef STRING
143: #undef ICON
144: #undef FCON
145: #undef CCON
146: #undef ZERO
147: #undef ASOP
148: #undef RELOP
149: #undef EQUOP
150: #undef DIVOP
151: #undef SHIFTOP
152: #undef ICOP
153: #undef TYPE
154: #undef TNAME
155: #undef EMPTY
156: #undef NO_ID
157: #undef NO_EXPR
158: #undef ELLIPSIS
159: #undef AGGR
160: #undef MEM
161: #undef MEMPTR
162: #undef PR
163: #undef TSCOPE
164: #undef DECL_MARKER
165: #undef REFMUL
166: #undef LDOUBLE
167: #undef LINKAGE
168: #undef LOCAL
169:
170: # line 192 "gram.y"
171: typedef union {
172: char* s;
173: TOK t;
174: int i;
175: loc l;
176: Pname pn;
177: Ptype pt;
178: Pexpr pe;
179: Pstmt ps;
180: Pbase pb;
181: Pnlist nl;
182: Pslist sl;
183: Pelist el;
184: Pbcl pbc;
185: Pptr pp;
186: PP p; // fudge: pointer to all class node objects
187: } YYSTYPE;
188:
189: # line 210 "gram.y"
190: extern YYSTYPE yylval, yyval;
191: extern int yyparse();
192:
193: // interface to lalex/tlex
194: extern TOK la_look();
195: extern void la_backup( TOK, YYSTYPE );
196: extern int la_cast();
197: extern int la_decl();
198: extern TOK lalex();
199:
200: extern int declTag; // !1: inline, virtual mod permitted
201: Ptype in_typedef = 0; // catch redefinition of TNAME
202: Pname in_tag = 0; // handle complex typedefs: int (*)()
203: extern int defer_check; // redefinition typedef check delay
204:
205: extern int must_be_id; // !0, TNAME => ID, i.e., int X
206: int DECL_TYPE = 0; // lalex() wants this set for global x(*fp)()
207: int in_arg_list=0; // !0 when parsing argument list
208: int in_class_decl=0; // !0 when parsing class definition
209: int in_mem_fct=0; // !0 when parsing member function definition
210:
211: #define yylex lalex
212: #define NEXTTOK() ( (yychar==-1) ? (yychar=yylex(),yychar) : yychar )
213: #define EXPECT_ID() must_be_id = 1
214: #define NOT_EXPECT_ID() must_be_id = 0
215:
216: Pname syn()
217: {
218: ll:
219: switch (yyparse()) {
220: case 0: return 0; // EOF
221: case 1: goto ll; // no action needed
222: default: return yyval.pn;
223: }
224: }
225:
226: # define EOFTOK 0
227: # define ASM 1
228: # define BREAK 3
229: # define CASE 4
230: # define CONTINUE 7
231: # define DEFAULT 8
232: # define DELETE 9
233: # define DO 10
234: # define ELSE 12
235: # define ENUM 13
236: # define FOR 16
237: # define FORTRAN 17
238: # define GOTO 19
239: # define IF 20
240: # define NEW 23
241: # define OPERATOR 24
242: # define RETURN 28
243: # define SIZEOF 30
244: # define SWITCH 33
245: # define THIS 34
246: # define WHILE 39
247: # define LP 40
248: # define RP 41
249: # define LB 42
250: # define RB 43
251: # define REF 44
252: # define DOT 45
253: # define NOT 46
254: # define COMPL 47
255: # define MUL 50
256: # define AND 52
257: # define PLUS 54
258: # define MINUS 55
259: # define ER 64
260: # define OR 65
261: # define ANDAND 66
262: # define OROR 67
263: # define QUEST 68
264: # define COLON 69
265: # define ASSIGN 70
266: # define CM 71
267: # define SM 72
268: # define LC 73
269: # define RC 74
270: # define MEMPTR 173
271: # define ID 80
272: # define STRING 81
273: # define ICON 82
274: # define FCON 83
275: # define CCON 84
276: # define ZERO 86
277: # define ASOP 90
278: # define RELOP 91
279: # define EQUOP 92
280: # define DIVOP 93
281: # define SHIFTOP 94
282: # define ICOP 95
283: # define TYPE 97
284: # define TNAME 123
285: # define EMPTY 124
286: # define NO_ID 125
287: # define NO_EXPR 126
288: # define ELLIPSIS 155
289: # define AGGR 156
290: # define MEM 160
291: # define PR 175
292: # define TSCOPE 178
293: # define DECL_MARKER 179
294: # define REFMUL 180
295: # define LDOUBLE 181
296: # define LINKAGE 182
297: # define LOCAL 183
298: #define yyclearin yychar = -1
299: #define yyerrok yyerrflag = 0
300: extern int yychar;
301: extern short yyerrflag;
302: #ifndef YYMAXDEPTH
303: #define YYMAXDEPTH 150
304: #endif
305: YYSTYPE yylval, yyval;
306: # define YYERRCODE 256
307:
308: # line 1697 "gram.y"
309:
310:
311: static void
312: check_cast()
313: /*
314: Lookahead to direct parsing of cast
315: la_cast() returns 1 if lookahead sees an ambiguous old-style C cast.
316: */
317: {
318: switch( NEXTTOK() ) {
319: case TYPE: case TNAME:
320: if ( la_look() == LP && la_cast() ) {
321: must_be_id = 0;
322: yychar = DECL_MARKER;
323: }
324: }
325: }
326:
327: static void
328: check_decl()
329: /*
330: Lookahead to direct parsing of local/arg type declarations
331: la_decl() returns 1 if lookahead sees a declaration.
332: */
333: {
334:
335: switch( NEXTTOK() ) {
336: case TYPE: case TNAME:
337: if ( la_look() == LP && la_decl() ) {
338: must_be_id = 0;
339: DECL_TYPE=yychar;
340: yychar = DECL_MARKER;
341: }
342: }
343: }
344:
345: static void
346: check_tag()
347: /*
348: Allow the case of inline/virtual/overload as
349: modifiers of return type of form struct/class/union x foo()
350: SM, COLON, LC ==> real class declaration, not return type
351: */
352: {
353: switch ( NEXTTOK() ) {
354: case SM: case COLON: case LC:
355: declTag = 1;
356: break;
357: default:
358: declTag = 0;
359: break;
360: }
361: }
362:
363: short yyexca[] ={
364: -1, 1,
365: 0, -1,
366: -2, 0,
367: -1, 39,
368: 71, 22,
369: 72, 22,
370: -2, 21,
371: -1, 54,
372: 155, 309,
373: -2, 246,
374: -1, 59,
375: 13, 303,
376: 97, 303,
377: 123, 303,
378: 155, 303,
379: 156, 303,
380: 179, 303,
381: 182, 303,
382: -2, 246,
383: -1, 106,
384: 73, 56,
385: -2, 53,
386: -1, 231,
387: 13, 294,
388: 97, 294,
389: 123, 294,
390: 156, 294,
391: 179, 294,
392: 182, 294,
393: -2, 246,
394: -1, 254,
395: 1, 151,
396: 3, 151,
397: 4, 151,
398: 7, 151,
399: 8, 151,
400: 9, 151,
401: 10, 151,
402: 13, 151,
403: 16, 151,
404: 19, 151,
405: 20, 151,
406: 23, 151,
407: 24, 151,
408: 28, 151,
409: 30, 151,
410: 33, 151,
411: 34, 151,
412: 39, 151,
413: 40, 151,
414: 46, 151,
415: 47, 151,
416: 50, 151,
417: 52, 151,
418: 54, 151,
419: 55, 151,
420: 72, 151,
421: 73, 151,
422: 80, 151,
423: 81, 151,
424: 82, 151,
425: 83, 151,
426: 84, 151,
427: 86, 151,
428: 95, 151,
429: 97, 151,
430: 123, 151,
431: 156, 151,
432: 160, 151,
433: 178, 151,
434: 179, 151,
435: 182, 151,
436: -2, 0,
437: -1, 316,
438: 13, 294,
439: 97, 294,
440: 123, 294,
441: 156, 294,
442: 179, 294,
443: 182, 294,
444: -2, 246,
445: };
446: # define YYNPROD 322
447: # define YYLAST 2323
448: short yyact[]={
449:
450: 123, 253, 150, 7, 454, 8, 160, 55, 256, 159,
451: 285, 52, 258, 19, 325, 328, 193, 267, 337, 233,
452: 12, 73, 22, 60, 257, 162, 74, 58, 192, 134,
453: 125, 16, 180, 156, 400, 44, 34, 230, 136, 333,
454: 34, 109, 109, 23, 26, 111, 106, 112, 61, 20,
455: 65, 60, 109, 72, 262, 58, 45, 149, 288, 109,
456: 31, 20, 54, 148, 109, 18, 48, 25, 20, 20,
457: 28, 152, 29, 385, 164, 120, 60, 274, 259, 60,
458: 58, 164, 167, 58, 110, 110, 330, 104, 54, 49,
459: 103, 102, 247, 169, 172, 110, 28, 108, 29, 465,
460: 47, 109, 110, 511, 109, 478, 9, 110, 184, 424,
461: 114, 185, 10, 181, 194, 248, 54, 251, 359, 54,
462: 21, 401, 218, 198, 21, 12, 234, 235, 236, 237,
463: 238, 239, 240, 241, 242, 152, 287, 361, 263, 381,
464: 144, 27, 471, 71, 110, 201, 154, 110, 109, 205,
465: 154, 113, 346, 27, 20, 229, 245, 246, 453, 63,
466: 27, 27, 244, 232, 243, 290, 20, 249, 364, 235,
467: 254, 189, 250, 197, 290, 44, 356, 289, 269, 33,
468: 36, 283, 344, 33, 199, 195, 37, 44, 355, 34,
469: 293, 110, 211, 30, 279, 181, 45, 265, 35, 294,
470: 338, 20, 24, 107, 286, 153, 24, 278, 45, 153,
471: 357, 34, 186, 270, 276, 339, 316, 264, 187, 30,
472: 20, 282, 312, 291, 292, 26, 461, 320, 295, 296,
473: 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
474: 307, 308, 309, 310, 234, 311, 27, 326, 25, 54,
475: 317, 34, 245, 314, 31, 318, 44, 321, 27, 329,
476: 315, 232, 323, 34, 28, 324, 29, 151, 44, 331,
477: 177, 345, 343, 21, 332, 347, 459, 45, 231, 348,
478: 31, 173, 164, 269, 269, 334, 335, 351, 352, 45,
479: 28, 340, 29, 27, 268, 21, 117, 118, 62, 154,
480: 358, 360, 53, 280, 56, 191, 56, 362, 57, 465,
481: 57, 69, 27, 463, 464, 174, 62, 363, 270, 270,
482: 268, 154, 119, 228, 54, 224, 523, 225, 227, 403,
483: 63, 396, 33, 372, 50, 21, 374, 350, 383, 367,
484: 326, 373, 379, 329, 329, 376, 377, 21, 382, 34,
485: 368, 378, 471, 469, 33, 24, 386, 371, 153, 347,
486: 347, 154, 145, 348, 348, 388, 389, 394, 390, 370,
487: 286, 353, 391, 154, 392, 384, 31, 24, 223, 455,
488: 153, 372, 342, 145, 374, 374, 28, 30, 29, 273,
489: 28, 393, 29, 260, 33, 228, 404, 224, 26, 225,
490: 227, 196, 397, 432, 416, 414, 33, 408, 415, 398,
491: 232, 407, 176, 30, 31, 480, 268, 24, 143, 155,
492: 153, 25, 12, 456, 28, 458, 29, 405, 457, 24,
493: 330, 481, 153, 42, 406, 232, 31, 69, 452, 143,
494: 28, 341, 29, 252, 251, 38, 522, 28, 51, 29,
495: 223, 222, 205, 515, 17, 485, 203, 204, 493, 266,
496: 460, 322, 26, 432, 432, 432, 432, 432, 432, 432,
497: 432, 432, 432, 432, 432, 432, 432, 432, 432, 491,
498: 489, 487, 319, 434, 513, 25, 492, 69, 115, 486,
499: 479, 488, 33, 490, 178, 211, 209, 71, 36, 465,
500: 26, 205, 336, 463, 464, 203, 204, 483, 512, 30,
501: 284, 190, 261, 30, 510, 46, 35, 221, 64, 36,
502: 179, 222, 432, 25, 517, 531, 518, 530, 520, 157,
503: 31, 222, 56, 534, 36, 226, 57, 35, 161, 99,
504: 525, 135, 471, 527, 211, 13, 158, 30, 410, 31,
505: 526, 56, 35, 409, 528, 57, 64, 402, 39, 535,
506: 349, 281, 53, 30, 56, 67, 70, 380, 57, 40,
507: 30, 537, 494, 495, 496, 497, 498, 499, 500, 501,
508: 502, 503, 504, 505, 506, 507, 508, 509, 429, 183,
509: 425, 422, 116, 105, 426, 423, 430, 428, 36, 66,
510: 34, 32, 26, 419, 465, 14, 427, 417, 463, 464,
511: 124, 145, 1, 255, 2, 412, 35, 133, 31, 0,
512: 420, 142, 0, 0, 0, 25, 418, 148, 28, 0,
513: 29, 529, 0, 130, 131, 0, 36, 126, 59, 127,
514: 56, 129, 128, 0, 57, 472, 470, 471, 469, 0,
515: 0, 465, 399, 56, 35, 463, 464, 57, 17, 411,
516: 254, 0, 121, 200, 0, 0, 34, 421, 140, 138,
517: 139, 141, 53, 137, 56, 69, 124, 145, 57, 31,
518: 387, 56, 132, 133, 413, 57, 0, 142, 0, 0,
519: 0, 34, 472, 148, 471, 469, 0, 0, 200, 130,
520: 131, 68, 0, 126, 0, 127, 0, 129, 128, 0,
521: 166, 205, 0, 0, 0, 203, 204, 275, 330, 465,
522: 0, 466, 0, 463, 464, 0, 163, 0, 28, 0,
523: 29, 0, 0, 143, 140, 138, 139, 141, 36, 137,
524: 53, 354, 56, 33, 375, 56, 57, 431, 132, 57,
525: 165, 30, 212, 121, 211, 209, 35, 34, 0, 0,
526: 472, 470, 471, 469, 0, 35, 24, 124, 145, 153,
527: 0, 34, 0, 0, 133, 42, 166, 0, 142, 53,
528: 175, 56, 0, 0, 148, 57, 0, 0, 0, 0,
529: 130, 131, 0, 0, 126, 0, 127, 0, 129, 128,
530: 0, 266, 0, 0, 0, 0, 0, 95, 28, 33,
531: 29, 0, 0, 122, 0, 0, 0, 0, 0, 0,
532: 0, 94, 0, 0, 143, 140, 138, 139, 141, 0,
533: 137, 35, 24, 0, 33, 153, 0, 0, 87, 132,
534: 88, 165, 96, 0, 89, 90, 0, 0, 77, 0,
535: 78, 30, 75, 76, 0, 42, 0, 46, 0, 0,
536: 0, 0, 80, 79, 85, 86, 0, 166, 93, 97,
537: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
538: 0, 266, 0, 0, 0, 0, 0, 121, 92, 84,
539: 82, 83, 81, 91, 0, 100, 0, 0, 0, 0,
540: 33, 124, 145, 0, 122, 465, 0, 466, 133, 463,
541: 464, 205, 142, 206, 33, 203, 204, 0, 148, 468,
542: 467, 101, 35, 24, 130, 131, 153, 0, 126, 0,
543: 127, 30, 129, 128, 0, 0, 0, 46, 0, 0,
544: 0, 0, 0, 0, 0, 0, 472, 470, 471, 469,
545: 0, 163, 212, 210, 211, 209, 0, 0, 143, 140,
546: 138, 139, 141, 0, 137, 0, 0, 0, 121, 0,
547: 0, 0, 0, 132, 0, 146, 0, 0, 98, 0,
548: 0, 0, 124, 145, 0, 0, 205, 0, 0, 133,
549: 203, 204, 0, 142, 0, 0, 0, 0, 0, 148,
550: 170, 147, 0, 0, 0, 130, 131, 0, 0, 168,
551: 0, 127, 0, 129, 128, 0, 0, 0, 0, 465,
552: 0, 466, 0, 463, 464, 0, 0, 212, 210, 211,
553: 209, 0, 163, 468, 121, 0, 0, 0, 122, 143,
554: 140, 138, 139, 141, 0, 137, 0, 0, 124, 145,
555: 0, 0, 0, 430, 132, 133, 35, 0, 0, 142,
556: 472, 470, 471, 469, 0, 148, 0, 124, 145, 0,
557: 0, 130, 131, 0, 133, 126, 0, 127, 142, 129,
558: 128, 0, 0, 0, 148, 0, 0, 0, 0, 0,
559: 130, 131, 0, 0, 126, 0, 127, 0, 129, 128,
560: 0, 0, 0, 0, 0, 143, 140, 138, 139, 141,
561: 0, 137, 0, 0, 0, 0, 0, 0, 0, 122,
562: 132, 0, 146, 0, 143, 140, 138, 139, 141, 0,
563: 137, 0, 171, 124, 145, 0, 0, 35, 0, 132,
564: 133, 146, 0, 0, 142, 0, 0, 0, 147, 0,
565: 148, 0, 514, 0, 0, 0, 130, 131, 0, 0,
566: 126, 0, 127, 0, 129, 128, 0, 147, 0, 205,
567: 0, 206, 0, 203, 204, 0, 0, 0, 0, 0,
568: 0, 0, 0, 208, 207, 122, 0, 0, 0, 0,
569: 143, 140, 138, 139, 141, 0, 137, 0, 0, 0,
570: 0, 0, 0, 35, 431, 132, 0, 146, 124, 145,
571: 212, 210, 211, 209, 0, 133, 0, 0, 0, 142,
572: 0, 0, 35, 0, 0, 148, 0, 482, 0, 0,
573: 0, 130, 131, 147, 0, 126, 0, 127, 0, 129,
574: 128, 0, 0, 465, 0, 466, 0, 463, 464, 0,
575: 0, 0, 0, 0, 0, 0, 0, 468, 467, 473,
576: 474, 477, 0, 0, 0, 143, 140, 138, 139, 141,
577: 220, 137, 124, 145, 0, 0, 0, 0, 0, 133,
578: 132, 0, 146, 142, 472, 470, 471, 469, 35, 148,
579: 0, 313, 0, 0, 0, 130, 131, 0, 0, 126,
580: 0, 127, 0, 129, 128, 0, 0, 0, 147, 0,
581: 4, 11, 0, 0, 0, 0, 0, 0, 0, 0,
582: 0, 0, 0, 34, 0, 0, 0, 0, 0, 143,
583: 140, 138, 139, 141, 26, 137, 0, 0, 0, 0,
584: 0, 0, 124, 145, 132, 220, 146, 0, 0, 133,
585: 31, 0, 0, 142, 0, 0, 0, 25, 0, 148,
586: 28, 219, 29, 35, 0, 130, 131, 0, 0, 126,
587: 0, 127, 147, 129, 128, 0, 0, 0, 0, 0,
588: 0, 0, 3, 0, 6, 0, 0, 0, 0, 0,
589: 17, 0, 0, 0, 0, 0, 0, 0, 0, 143,
590: 140, 138, 139, 141, 0, 137, 465, 21, 466, 220,
591: 463, 464, 0, 0, 132, 0, 146, 0, 0, 0,
592: 468, 467, 473, 474, 477, 0, 462, 35, 0, 0,
593: 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,
594: 0, 0, 147, 0, 124, 145, 475, 472, 470, 471,
595: 469, 133, 0, 0, 0, 142, 0, 0, 0, 0,
596: 0, 148, 0, 0, 0, 0, 33, 130, 131, 0,
597: 36, 126, 0, 127, 0, 129, 128, 0, 0, 220,
598: 0, 0, 0, 30, 0, 0, 0, 0, 35, 24,
599: 0, 0, 5, 0, 121, 0, 0, 35, 0, 0,
600: 0, 143, 140, 138, 139, 141, 0, 137, 124, 145,
601: 0, 0, 0, 0, 0, 133, 132, 0, 146, 142,
602: 0, 0, 0, 0, 0, 148, 0, 0, 0, 0,
603: 0, 130, 131, 0, 0, 126, 34, 127, 0, 129,
604: 128, 0, 0, 0, 147, 0, 0, 26, 205, 0,
605: 206, 0, 203, 204, 0, 0, 0, 0, 163, 0,
606: 0, 0, 208, 31, 0, 143, 140, 138, 139, 141,
607: 25, 137, 0, 28, 0, 29, 0, 124, 145, 0,
608: 132, 220, 0, 0, 133, 0, 0, 0, 142, 212,
609: 210, 211, 209, 0, 148, 0, 0, 182, 0, 35,
610: 130, 131, 0, 17, 126, 34, 127, 0, 129, 128,
611: 0, 0, 0, 205, 0, 206, 26, 203, 204, 0,
612: 21, 0, 0, 0, 0, 0, 0, 208, 207, 213,
613: 214, 217, 31, 202, 272, 140, 138, 139, 141, 25,
614: 137, 0, 28, 0, 29, 122, 15, 0, 0, 132,
615: 0, 146, 0, 215, 212, 210, 211, 209, 124, 145,
616: 0, 49, 0, 35, 41, 133, 0, 0, 0, 142,
617: 0, 0, 47, 0, 0, 148, 0, 147, 0, 33,
618: 0, 130, 131, 36, 0, 0, 0, 0, 0, 42,
619: 0, 0, 0, 0, 0, 0, 30, 0, 188, 0,
620: 0, 35, 24, 0, 0, 153, 0, 0, 0, 0,
621: 0, 0, 0, 0, 220, 43, 140, 138, 139, 141,
622: 0, 137, 0, 0, 0, 0, 0, 0, 0, 0,
623: 132, 450, 35, 440, 446, 0, 0, 441, 447, 0,
624: 439, 0, 0, 0, 0, 0, 437, 0, 33, 442,
625: 435, 0, 36, 0, 0, 0, 0, 0, 443, 0,
626: 0, 0, 0, 436, 0, 30, 0, 536, 0, 438,
627: 35, 46, 0, 0, 0, 0, 205, 0, 206, 0,
628: 203, 204, 0, 0, 0, 0, 0, 0, 0, 0,
629: 208, 207, 213, 214, 217, 220, 202, 216, 0, 451,
630: 0, 0, 433, 0, 445, 0, 0, 0, 0, 0,
631: 444, 0, 0, 35, 0, 0, 215, 212, 210, 211,
632: 209, 205, 0, 206, 0, 203, 204, 448, 0, 0,
633: 0, 0, 0, 0, 0, 208, 207, 213, 214, 217,
634: 0, 202, 216, 533, 0, 532, 0, 0, 0, 0,
635: 0, 0, 205, 449, 206, 0, 203, 204, 0, 0,
636: 0, 215, 212, 210, 211, 209, 208, 207, 213, 214,
637: 217, 0, 202, 216, 0, 0, 524, 0, 0, 0,
638: 0, 0, 0, 205, 0, 206, 0, 203, 204, 0,
639: 0, 0, 215, 212, 210, 211, 209, 208, 207, 213,
640: 214, 217, 0, 202, 216, 0, 0, 0, 0, 0,
641: 0, 0, 0, 0, 465, 0, 466, 0, 463, 464,
642: 0, 0, 0, 215, 212, 210, 211, 209, 468, 467,
643: 473, 474, 477, 521, 462, 476, 0, 0, 0, 0,
644: 0, 0, 0, 0, 0, 205, 0, 206, 0, 203,
645: 204, 0, 0, 0, 475, 472, 470, 471, 469, 208,
646: 207, 213, 214, 217, 519, 202, 216, 516, 0, 0,
647: 0, 0, 0, 0, 0, 0, 205, 0, 206, 0,
648: 203, 204, 0, 0, 0, 215, 212, 210, 211, 209,
649: 208, 207, 213, 214, 217, 0, 202, 216, 0, 0,
650: 0, 0, 0, 0, 0, 0, 0, 205, 0, 206,
651: 0, 203, 204, 0, 0, 0, 215, 212, 210, 211,
652: 209, 208, 207, 213, 214, 217, 0, 202, 216, 484,
653: 0, 395, 0, 0, 0, 0, 0, 0, 205, 0,
654: 206, 0, 203, 204, 0, 0, 0, 215, 212, 210,
655: 211, 209, 208, 207, 213, 214, 217, 0, 202, 216,
656: 0, 0, 369, 0, 0, 0, 0, 0, 0, 205,
657: 0, 206, 0, 203, 204, 0, 0, 0, 215, 212,
658: 210, 211, 209, 208, 207, 213, 214, 217, 0, 202,
659: 216, 0, 0, 366, 0, 0, 0, 0, 0, 0,
660: 205, 0, 206, 0, 203, 204, 0, 0, 0, 215,
661: 212, 210, 211, 209, 208, 207, 213, 214, 217, 0,
662: 202, 216, 0, 0, 0, 0, 0, 0, 0, 0,
663: 0, 205, 0, 206, 0, 203, 204, 0, 0, 0,
664: 215, 212, 210, 211, 209, 208, 207, 213, 214, 217,
665: 365, 202, 216, 327, 0, 0, 0, 0, 0, 0,
666: 0, 0, 205, 0, 206, 0, 203, 204, 0, 0,
667: 0, 215, 212, 210, 211, 209, 208, 207, 213, 214,
668: 217, 0, 202, 216, 0, 0, 271, 0, 0, 0,
669: 0, 0, 0, 205, 0, 206, 0, 203, 204, 0,
670: 0, 0, 215, 212, 210, 211, 209, 208, 207, 213,
671: 214, 217, 0, 202, 216, 0, 0, 0, 0, 0,
672: 0, 0, 0, 0, 465, 0, 466, 0, 463, 464,
673: 0, 0, 0, 215, 212, 210, 211, 209, 468, 467,
674: 473, 474, 477, 0, 462, 476, 0, 465, 0, 466,
675: 0, 463, 464, 0, 0, 205, 0, 206, 0, 203,
676: 204, 468, 467, 473, 475, 472, 470, 471, 469, 208,
677: 207, 213, 214, 217, 0, 0, 0, 0, 205, 0,
678: 206, 0, 203, 204, 0, 0, 0, 0, 472, 470,
679: 471, 469, 208, 207, 213, 0, 212, 210, 211, 209,
680: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
681: 0, 0, 0, 0, 0, 0, 0, 0, 0, 212,
682: 210, 211, 209 };
683: short yypact[]={
684:
685: 1310,-1000,-1000,-1000,-1000, 113,-1000,-1000,-1000,-1000,
686: -1000, 405,1592, 262,-1000, 598,-1000, 271, 476, 578,
687: 374,-1000,-1000,-1000,-1000, -70, 798,-1000, -6, -7,
688: -10,-1000,-1000, 24, -28,-1000,-1000,-1000, 29, 522,
689: 225,-1000,-1000, 598,-1000,-1000,-1000, 253,-1000,1025,
690: -1000, 198,-1000, 378, 653,-1000,1025,-1000,-1000, 959,
691: -1000, 250, 201,-1000, 270,-1000,-1000, 632, 598,-1000,
692: 739, 598,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
693: -1000,-1000,-1000,-1000,-1000,-1000,-1000, 371, 227,-1000,
694: -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 397,
695: -1000,-1000,-1000,-1000,-1000,1523, 236,-1000,-1000,-1000,
696: -1000, 34, 112,-1000, 360, 198, 878, 20,-1000,1025,
697: 1563,1319, 508, 355, 238,1421,1421,1421,1421,1421,
698: 1421,1421,1421,1421,-1000,-1000, 744,-1000,-1000,-1000,
699: -1000,-1000,-1000,-1000, 68, 798, 404, 403,-1000, 97,
700: -1000, -16,1592,-1000,-1000, -19, 352, -17, 146,-1000,
701: -1000,-1000,1563, 878, 336, 404, 403,2143,1554, 348,
702: -20, 374,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
703: -1000, 340,-1000,-1000,-1000, 135, 122,-1000, 234, 438,
704: 108, -39, 103,-1000, 153, 34, 118, 97,-1000,-1000,
705: 522,1563,1025,1025,1025,1025,1025,1025,1025,1025,
706: 1025,1025,1025,1025,1025,1025,1025,1025, 355,1025,
707: 428,1249, 176,-1000,1025, 359,1421, 338, 878,-1000,
708: -1000,1485, 250, 758, 283, 355, 355, 355, 355, 283,
709: 283, 283, 283,1635,2112, 678,-1000, 798, -84,-1000,
710: -1000, 878, 878,-1000, -56, 144,-1000, 878, 401,-1000,
711: -1000, 341, 27,-1000, 878, 78,-1000, 490,-1000, 214,
712: 240,-1000, 330,-1000,-1000, 700,-1000,-1000,-1000,-1000,
713: -1000, 116, 104,-1000, 139,-1000,-1000, 21, -38,-1000,
714: 34,1025, 94,-1000,-1000,1563, 99, 99,-1000, 936,
715: 1498, 861, 451, 661,-1000, 402,1119,2228,1563,1563,
716: 2081,2050, 355,1025,-1000,-1000,1485,2019,-1000,-1000,
717: 283,-1000,-1000, 328, 316, 264, 340,-1000, 703, 390,
718: 46,-1000,-1000,-1000, 310, 301,-1000,-1000, 65, -16,
719: 297, 878, -24,-1000,-1000,-1000,-1000,-1000,-1000, 878,
720: -1000, 509, 639, 396, 396,-1000,-1000, -39,-1000, -21,
721: -1000, -21,-1000,1563,-1000,1025,1421,1988, 290,-1000,
722: -1000, 23,-1000, 264,-1000,-1000, 264, 611,-1000,-1000,
723: 47,-1000,-1000,-1000, 288,-1000,-1000,-1000,-1000,-1000,
724: -1000,-1000,-1000,2205, 355,1421, 23,-1000,-1000, 509,
725: -1000,-1000, 587,-1000, 355,-1000,-1000,-1000,-1000,-1000,
726: 1730,-1000,1025, 77,-1000,-1000,-1000, 339, 339, 388,
727: 339, 207,-1000, 157,2174,-1000,-1000, 25,-1000, 375,
728: 1185, 498, 355,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
729: -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
730: -1000,-1000,1957, 97,-1000,1025,-1000,-1000,-1000,-1000,
731: 1025,-1000,1044,1044,1044,1044,1044,1044,1044,1044,
732: 1044,1044,1044,1044,1044,1044,1044,1044,-1000,-1000,
733: 22, 355,1025,1110,-1000,-1000, 441,1926,-1000,-1000,
734: -1000,-1000,1895,-1000,1356, 49, 49,-1000, 554, 969,
735: 669, 449, 601,-1000, 259, 855,2197,1356,1356,1864,
736: 407, 285,1833, 355,1025,-1000,-1000,1025,-1000,-1000,
737: -1000,1044, 339,-1000,1421,1802,-1000,1771,-1000,1193,
738: -1000, 355,1421,1025, 355,1726,-1000,-1000 };
739: short yypgo[]={
740:
741: 0, 614, 112, 106, 5, 448, 57, 613, 8, 2,
742: 612, 7, 13, 19, 605, 43, 28, 16, 12, 601,
743: 22, 593, 589, 66, 569, 31, 545, 6, 567, 34,
744: 557, 1, 553, 548, 546, 33, 25, 109, 0, 29,
745: 541, 15, 30, 32, 26, 539, 17, 9, 538, 11,
746: 529, 14, 37, 4, 140, 65, 21, 512, 511, 510,
747: 10, 48, 502, 490, 483, 480, 479, 460, 458, 38 };
748: short yyr1[]={
749:
750: 0, 10, 10, 10, 10, 10, 1, 1, 1, 1,
751: 1, 2, 4, 3, 6, 6, 7, 7, 8, 8,
752: 5, 5, 23, 23, 23, 23, 24, 24, 9, 9,
753: 14, 14, 14, 14, 14, 14, 13, 13, 13, 13,
754: 13, 13, 15, 15, 15, 15, 16, 16, 17, 17,
755: 17, 20, 20, 20, 20, 58, 58, 59, 59, 60,
756: 60, 60, 60, 60, 19, 19, 18, 18, 21, 21,
757: 22, 22, 22, 22, 22, 22, 22, 22, 22, 25,
758: 25, 25, 25, 56, 56, 56, 56, 56, 56, 56,
759: 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
760: 56, 56, 56, 56, 56, 56, 56, 55, 55, 55,
761: 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
762: 26, 26, 26, 26, 26, 26, 26, 26, 26, 46,
763: 46, 46, 46, 46, 46, 46, 51, 51, 51, 41,
764: 41, 41, 41, 41, 43, 43, 28, 28, 29, 30,
765: 53, 62, 31, 31, 31, 33, 33, 33, 33, 63,
766: 33, 33, 64, 64, 64, 64, 64, 64, 64, 64,
767: 64, 64, 64, 64, 64, 64, 64, 64, 64, 32,
768: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
769: 65, 32, 32, 66, 32, 67, 32, 68, 32, 35,
770: 34, 34, 27, 27, 37, 37, 37, 37, 37, 37,
771: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
772: 37, 37, 37, 37, 37, 36, 36, 36, 36, 36,
773: 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
774: 36, 36, 36, 36, 36, 36, 36, 38, 38, 38,
775: 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
776: 38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
777: 38, 38, 38, 38, 38, 38, 38, 40, 40, 40,
778: 40, 40, 40, 40, 54, 54, 39, 39, 39, 39,
779: 39, 39, 39, 42, 69, 45, 45, 45, 45, 44,
780: 52, 48, 48, 61, 49, 49, 50, 50, 47, 47,
781: 57, 57, 57, 12, 12, 12, 12, 12, 12, 12,
782: 11, 11 };
783: short yyr2[]={
784:
785: 0, 1, 1, 1, 2, 1, 1, 1, 1, 1,
786: 5, 2, 5, 4, 2, 0, 1, 3, 3, 4,
787: 2, 0, 1, 3, 2, 3, 1, 3, 3, 2,
788: 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
789: 2, 2, 4, 5, 2, 2, 1, 3, 1, 3,
790: 0, 3, 4, 2, 2, 2, 0, 1, 3, 1,
791: 2, 2, 3, 3, 2, 4, 1, 1, 2, 0,
792: 1, 2, 2, 1, 1, 1, 2, 3, 3, 1,
793: 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
794: 1, 1, 1, 1, 1, 2, 2, 1, 1, 1,
795: 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
796: 2, 3, 4, 2, 4, 6, 4, 3, 4, 6,
797: 1, 3, 2, 2, 2, 2, 2, 2, 3, 1,
798: 2, 0, 2, 2, 2, 3, 0, 2, 2, 0,
799: 2, 2, 4, 4, 0, 2, 0, 2, 2, 0,
800: 3, 0, 4, 2, 3, 1, 1, 1, 2, 0,
801: 5, 4, 1, 1, 1, 1, 1, 1, 1, 1,
802: 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
803: 2, 1, 3, 3, 1, 1, 1, 3, 5, 3,
804: 0, 9, 3, 0, 4, 0, 5, 0, 4, 1,
805: 1, 3, 1, 3, 3, 3, 3, 3, 3, 3,
806: 3, 3, 3, 3, 3, 3, 3, 3, 3, 5,
807: 2, 5, 3, 6, 1, 3, 3, 3, 3, 3,
808: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
809: 5, 2, 5, 3, 6, 1, 0, 2, 2, 3,
810: 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,
811: 2, 2, 4, 3, 3, 3, 3, 3, 1, 1,
812: 3, 1, 1, 1, 1, 1, 1, 4, 4, 5,
813: 5, 6, 6, 4, 1, 1, 1, 2, 2, 3,
814: 2, 3, 3, 4, 1, 1, 1, 2, 2, 2,
815: 2, 2, 4, 1, 4, 5, 3, 1, 1, 0,
816: 0, 1, 2, 1, 1, 2, 2, 2, 1, 2,
817: 3, 1 };
818: short yychk[]={
819:
820: -1000, -10, -1, 72, 0, 182, 74, -9, -4, -3,
821: -2, 1, -13, -26, -14, 123, -25, 80, -55, -12,
822: -61, 97, -20, -15, 179, 47, 24, -54, 50, 52,
823: 173, 40, -19, 156, 13, 178, 160, 73, 40, -26,
824: -24, 72, 97, 123, -20, -15, 179, 80, -23, 69,
825: 72, -5, -49, 40, -61, -11, 42, 46, -49, 40,
826: -11, -61, 45, -54, 80, -25, 123, -26, 123, 97,
827: -26, 123, 123, -56, -44, 54, 55, 50, 52, 65,
828: 64, 94, 92, 93, 91, 66, 67, 40, 42, 46,
829: 47, 95, 90, 70, 23, 9, 44, 71, 180, -45,
830: 97, 123, 97, 97, 97, -21, -18, 179, 73, 80,
831: 123, 73, -18, 179, 81, -5, 70, 71, 72, 69,
832: -36, 9, 160, -38, 23, -42, 50, 52, 55, 54,
833: 46, 47, 95, 30, -39, -40, -69, 86, 82, 83,
834: 81, 84, 34, 80, -54, 24, 97, 123, 40, -6,
835: -9, 69, -13, 182, 123, 41, -35, -50, -34, -47,
836: -27, -48, -36, 73, -13, 97, 123, -36, 50, -35,
837: 41, 173, -25, 80, 45, 41, 41, 43, 97, 123,
838: -43, -12, 74, -22, -9, -4, -3, -2, 175, -55,
839: -58, 69, -16, -17, 80, 73, 41, -6, -27, -23,
840: -26, -36, 70, 54, 55, 50, 52, 65, 64, 94,
841: 92, 93, 91, 66, 67, 90, 71, 68, -38, 42,
842: 160, 9, 23, 95, 42, 44, 180, 45, 40, -42,
843: -52, 40, -69, -13, -38, -38, -38, -38, -38, -38,
844: -38, -38, -38, -42, -36, -13, -18, 24, 47, -56,
845: -44, 40, 40, -31, 73, -7, -8, 40, -18, 97,
846: 41, -57, 71, 155, 71, -35, 123, -46, 80, -12,
847: -61, 43, 80, 41, 97, -26, -43, 97, 72, 72,
848: 69, 123, -25, 73, -59, -60, -18, 175, 97, 74,
849: 71, 70, -16, 72, -31, -36, -36, -36, -36, -36,
850: -36, -36, -36, -36, -36, -36, -36, -36, -36, -36,
851: -36, -36, -38, 42, -42, -52, 40, -36, -39, 123,
852: -38, -39, 123, -35, -35, -51, -12, 41, -41, -12,
853: 40, -56, -44, 123, -35, -35, -62, 74, 256, 71,
854: -35, 40, 41, -47, 155, -27, 74, -11, -49, 70,
855: 123, -46, -46, 41, 41, 72, 72, 71, -18, 97,
856: -18, 175, -17, -36, 74, 69, 43, -36, -35, 43,
857: 41, 41, -11, -51, -11, 41, -41, -41, 41, 41,
858: -28, 74, -8, 41, -35, 97, -27, 41, -49, -49,
859: -60, -18, -18, -36, -38, 43, 41, -42, -52, 41,
860: -29, 74, -30, 41, -38, -42, -52, -49, -11, -32,
861: -33, 72, 28, 97, -9, -4, -31, 20, 39, 16,
862: 33, 80, 4, 8, -37, 3, 7, 19, 10, 1,
863: 9, 160, -38, 72, -64, 20, 33, 16, 39, 10,
864: 3, 7, 19, 28, 80, 74, 4, 8, 97, 123,
865: 1, 69, -36, 81, -53, 40, -53, 40, -53, 69,
866: -67, 69, 70, 54, 55, 50, 52, 65, 64, 94,
867: 92, 93, 91, 66, 67, 90, 71, 68, 80, -63,
868: 40, -38, 42, 9, 72, -31, -29, -36, -29, -65,
869: -29, -66, -36, -68, -37, -37, -37, -37, -37, -37,
870: -37, -37, -37, -37, -37, -37, -37, -37, -37, -37,
871: -29, 81, -36, -38, 42, 12, 41, -29, -29, 69,
872: -29, 69, 39, 41, 43, -36, -29, -36, -29, -37,
873: -53, -38, 43, 72, -38, -36, 41, -29 };
874: short yydef[]={
875:
876: 0, -2, 1, 2, 3, 31, 5, 6, 7, 8,
877: 9, 0, 0, 21, 36, 32, 120, 79, 0, 0,
878: 0, 30, 33, 34, 35, 0, 0, 107, 313, 314,
879: 318, 303, 69, 0, 0, 284, 285, 4, 0, -2,
880: 0, 29, 37, 38, 39, 40, 41, 79, 26, 246,
881: 11, 15, 110, 303, -2, 127, 246, 321, 113, -2,
882: 126, 309, 0, 108, 79, 122, 123, 124, 125, 316,
883: 0, 0, 80, 81, 82, 83, 84, 85, 86, 87,
884: 88, 89, 90, 91, 92, 93, 94, 0, 0, 97,
885: 98, 99, 100, 101, 102, 103, 104, 105, 106, 144,
886: 295, 296, 315, 317, 319, 0, -2, 54, 64, 66,
887: 67, 50, 44, 45, 0, 15, 246, 0, 28, 246,
888: 24, 0, 285, 245, 0, 0, 0, 0, 0, 0,
889: 0, 0, 0, 0, 268, 269, 246, 271, 272, 273,
890: 274, 275, 276, 286, 0, 0, 0, 0, 294, 0,
891: 20, 0, 0, 31, 32, 111, 0, 310, 199, 307,
892: 200, 308, 202, 246, 131, 30, 32, 0, 0, 0,
893: 117, 0, 121, 79, 109, 128, 95, 96, 297, 298,
894: 299, 144, 51, 68, 70, 74, 73, 75, 0, 0,
895: 0, 0, 0, 46, 48, 50, 0, 0, 25, 27,
896: 22, 23, 246, 246, 246, 246, 246, 246, 246, 246,
897: 246, 246, 246, 246, 246, 246, 246, 246, 241, 246,
898: 285, 0, 0, 251, 246, 0, 0, 0, 246, 247,
899: 248, -2, 0, 136, 252, 253, 254, 255, 256, 257,
900: 258, 259, 260, 261, 0, 139, 287, 0, 0, 288,
901: 290, 246, 246, 13, -2, 14, 16, 246, 0, 112,
902: 114, 0, 309, 311, 246, 0, 38, 301, 129, 131,
903: 131, 320, 286, 116, 118, 0, 145, 52, 71, 72,
904: 76, 123, 122, 65, 55, 57, 59, 0, 0, 42,
905: 50, 246, 0, 10, 12, 225, 226, 227, 228, 229,
906: 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
907: 0, 0, 243, 246, 249, 250, -2, 0, 263, 265,
908: 264, 266, 267, 0, 0, 300, 136, 270, 0, 139,
909: 139, 289, 291, 292, 0, 0, 146, 153, 0, 0,
910: 0, 246, 304, 306, 312, 201, 203, 133, 134, 246,
911: 130, 132, 0, 0, 0, 77, 78, 0, 60, 0,
912: 61, 0, 47, 49, 43, 246, 0, 0, 0, 262,
913: 283, 0, 138, 137, 141, 293, 140, 0, 277, 278,
914: 149, 154, 17, 18, 0, 305, 302, 135, 115, 119,
915: 58, 62, 63, 240, 242, 0, 0, 279, 280, 0,
916: 147, 152, 0, 19, 244, 281, 282, 142, 143, 148,
917: 0, 181, 246, 30, 184, 185, 186, 0, 0, 0,
918: 0, 286, 195, 0, 155, 156, 157, 0, 159, 0,
919: 0, 285, 224, 179, 180, 162, 163, 164, 165, 166,
920: 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
921: 177, 178, 0, 0, 149, 246, 149, 190, 149, 193,
922: 246, 197, 0, 0, 0, 0, 0, 0, 0, 0,
923: 0, 0, 0, 0, 0, 0, 0, 0, 158, 149,
924: 0, 220, 246, 0, 182, 183, 187, 0, 189, 149,
925: 192, 149, 0, 149, 204, 205, 206, 207, 208, 209,
926: 210, 211, 212, 213, 214, 215, 216, 217, 218, 0,
927: 0, 0, 0, 222, 246, 149, 150, 246, 194, 149,
928: 198, 0, 0, 161, 0, 0, 188, 0, 196, 219,
929: 160, 221, 0, 246, 223, 0, 149, 191 };
930: # ifdef YYDEBUG
931: # include "y.debug"
932: # endif
933:
934: # define YYFLAG -1000
935: # define YYERROR goto yyerrlab
936: # define YYACCEPT return(0)
937: # define YYABORT return(1)
938:
939: /* parser for yacc output */
940:
941: #ifdef YYDEBUG
942: int yydebug = 0; /* 1 for debugging */
943: #endif
944: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
945: int yychar = -1; /* current input token number */
946: int yynerrs = 0; /* number of errors */
947: short yyerrflag = 0; /* error recovery flag */
948:
949: yyparse()
950: { short yys[YYMAXDEPTH];
951: int yyj, yym;
952: register YYSTYPE *yypvt;
953: register int yystate, yyn;
954: register short *yyps;
955: register YYSTYPE *yypv;
956: register short *yyxi;
957:
958: yystate = 0;
959: yychar = -1;
960: yynerrs = 0;
961: yyerrflag = 0;
962: yyps= &yys[-1];
963: yypv= &yyv[-1];
964:
965: yystack: /* put a state and value onto the stack */
966: #ifdef YYDEBUG
967: if(yydebug >= 3)
968: if(yychar < 0 || yytoknames[yychar] == 0)
969: printf("char %d in %s", yychar, yystates[yystate]);
970: else
971: printf("%s in %s", yytoknames[yychar], yystates[yystate]);
972: #endif
973: if( ++yyps >= &yys[YYMAXDEPTH] ) {
974: yyerror( "yacc stack overflow" );
975: return(1);
976: }
977: *yyps = yystate;
978: ++yypv;
979: *yypv = yyval;
980: yynewstate:
981: yyn = yypact[yystate];
982: if(yyn <= YYFLAG) goto yydefault; /* simple state */
983: if(yychar<0) {
984: yychar = yylex();
985: #ifdef YYDEBUG
986: if(yydebug >= 2) {
987: if(yychar <= 0)
988: printf("lex EOF\n");
989: else if(yytoknames[yychar])
990: printf("lex %s\n", yytoknames[yychar]);
991: else
992: printf("lex (%c)\n", yychar);
993: }
994: #endif
995: if(yychar < 0)
996: yychar = 0;
997: }
998: if((yyn += yychar) < 0 || yyn >= YYLAST)
999: goto yydefault;
1000: if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
1001: yychar = -1;
1002: yyval = yylval;
1003: yystate = yyn;
1004: if( yyerrflag > 0 ) --yyerrflag;
1005: goto yystack;
1006: }
1007: yydefault:
1008: /* default state action */
1009: if( (yyn=yydef[yystate]) == -2 ) {
1010: if(yychar < 0) {
1011: yychar = yylex();
1012: #ifdef YYDEBUG
1013: if(yydebug >= 2)
1014: if(yychar < 0)
1015: printf("lex EOF\n");
1016: else
1017: printf("lex %s\n", yytoknames[yychar]);
1018: #endif
1019: if(yychar < 0)
1020: yychar = 0;
1021: }
1022: /* look through exception table */
1023: for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate);
1024: yyxi += 2 ) ; /* VOID */
1025: while( *(yyxi+=2) >= 0 ){
1026: if( *yyxi == yychar ) break;
1027: }
1028: if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */
1029: }
1030: if( yyn == 0 ){ /* error */
1031: /* error ... attempt to resume parsing */
1032: switch( yyerrflag ){
1033: case 0: /* brand new error */
1034: #ifdef YYDEBUG
1035: yyerror("syntax error\n%s", yystates[yystate]);
1036: if(yytoknames[yychar])
1037: yyerror("saw %s\n", yytoknames[yychar]);
1038: else if(yychar >= ' ' && yychar < '\177')
1039: yyerror("saw `%c'\n", yychar);
1040: else if(yychar == 0)
1041: yyerror("saw EOF\n");
1042: else
1043: yyerror("saw char 0%o\n", yychar);
1044: #else
1045: yyerror( "syntax error" );
1046: #endif
1047: yyerrlab:
1048: ++yynerrs;
1049: case 1:
1050: case 2: /* incompletely recovered error ... try again */
1051: yyerrflag = 3;
1052: /* find a state where "error" is a legal shift action */
1053: while ( yyps >= yys ) {
1054: yyn = yypact[*yyps] + YYERRCODE;
1055: if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
1056: yystate = yyact[yyn]; /* simulate a shift of "error" */
1057: goto yystack;
1058: }
1059: yyn = yypact[*yyps];
1060: /* the current yyps has no shift onn "error", pop stack */
1061: #ifdef YYDEBUG
1062: if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
1063: #endif
1064: --yyps;
1065: --yypv;
1066: }
1067: /* there is no state on the stack with an error shift ... abort */
1068: yyabort:
1069: return(1);
1070: case 3: /* no shift yet; clobber input char */
1071: #ifdef YYDEBUG
1072: if( yydebug ) {
1073: printf("error recovery discards ");
1074: if(yytoknames[yychar])
1075: printf("%s\n", yytoknames[yychar]);
1076: else if(yychar >= ' ' && yychar < '\177')
1077: printf("`%c'\n", yychar);
1078: else if(yychar == 0)
1079: printf("EOF\n");
1080: else
1081: printf("char 0%o\n", yychar);
1082: }
1083: #endif
1084: if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
1085: yychar = -1;
1086: goto yynewstate; /* try again in the same state */
1087: }
1088: }
1089: /* reduction by production yyn */
1090: #ifdef YYDEBUG
1091: if(yydebug) { char *s;
1092: printf("reduce %d in:\n\t", yyn);
1093: for(s = yystates[yystate]; *s; s++) {
1094: putchar(*s);
1095: if(*s == '\n' && *(s+1))
1096: putchar('\t');
1097: }
1098: }
1099: #endif
1100: yyps -= yyr2[yyn];
1101: yypvt = yypv;
1102: yypv -= yyr2[yyn];
1103: yyval = yypv[1];
1104: yym=yyn;
1105: /* consult goto table to find next state */
1106: yyn = yyr1[yyn];
1107: yyj = yypgo[yyn] + *yyps + 1;
1108: if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
1109: switch(yym){
1110:
1111: case 1:
1112: # line 399 "gram.y"
1113: { return 2; } break;
1114: case 2:
1115: # line 400 "gram.y"
1116: { return 1; } break;
1117: case 3:
1118: # line 401 "gram.y"
1119: { return 0; } break;
1120: case 4:
1121: # line 403 "gram.y"
1122: {
1123: set_linkage(yypvt[-1].s);
1124: bl_level--;
1125: return 1;
1126: } break;
1127: case 5:
1128: # line 409 "gram.y"
1129: {
1130: set_linkage(0);
1131: bl_level++;
1132: return 1;
1133: } break;
1134: case 6:
1135: # line 417 "gram.y"
1136: {
1137: /* if function declartion with arguments
1138: * need to make sure modified_tn is traversed */
1139: if ( yypvt[-0].pn != 0
1140: && yypvt[-0].pn->tp->base == FCT
1141: && Pfct(yypvt[-0].pn->tp)->nargs !=0 )
1142: goto mod;
1143: else {
1144: modified_tn = 0;
1145: if (yypvt[-0].pn==0) yyval.i = 1;
1146: }
1147: } break;
1148: case 7:
1149: # line 430 "gram.y"
1150: { goto mod; } break;
1151: case 8:
1152: # line 432 "gram.y"
1153: { goto mod; } break;
1154: case 9:
1155: # line 434 "gram.y"
1156: { mod: if (modified_tn) {
1157: restore();
1158: modified_tn = 0;
1159: }
1160: local_blk = 0;
1161: if (local_tn) {
1162: extern void local_restore();
1163: local_restore();
1164: local_tn = 0;
1165: }
1166: } break;
1167: case 10:
1168: # line 446 "gram.y"
1169: { Pname n = new name(make_name('A'));
1170: n->tp = new basetype(ASM,0);
1171: Pbase(n->tp)->b_name = Pname(yypvt[-2].s);
1172: yyval.p = n;
1173: } break;
1174: case 11:
1175: # line 462 "gram.y"
1176: {
1177: Ptype t;
1178: /* fix: */
1179: if (err_name == 0) err_name = yypvt[-1].pn;
1180: if (err_name == 0) {
1181: error("syntax error:TX");
1182: yyval.p = Ndata(defa_type,err_name);
1183: }
1184: else if ((t=err_name->tp) == 0) {
1185: error("TX for%n",err_name);
1186: yyval.p = Ndata(defa_type,err_name);
1187: }
1188: else if (t->base==FCT) {
1189: if (Pfct(t)->returns==0)
1190: yyval.p = Nfct(defa_type,err_name,0);
1191: else
1192: yyval.p = Ndata(0,err_name);
1193: }
1194: else {
1195: error("syntax error:TX for%k%n",t->base,err_name);
1196: yyval.p = Ndata(defa_type,err_name);
1197: }
1198: err_name = 0;
1199: } break;
1200: case 12:
1201: # line 489 "gram.y"
1202: { Pname n = Nfct(yypvt[-4].p,yypvt[-3].pn,yypvt[-0].p);
1203: Fargdcl(n->tp,name_unlist(yypvt[-2].nl),n);
1204: Finit(n->tp) = yypvt[-1].pn;
1205: yyval.p = n;
1206: NOT_EXPECT_ID();
1207: in_mem_fct = 0;
1208: } break;
1209: case 13:
1210: # line 499 "gram.y"
1211: { Pname n = Nfct(defa_type,yypvt[-3].pn,yypvt[-0].p);
1212: Fargdcl(n->tp,name_unlist(yypvt[-2].nl),n);
1213: Finit(n->tp) = yypvt[-1].pn;
1214: yyval.p = n;
1215: NOT_EXPECT_ID();
1216: in_mem_fct = 0;
1217: } break;
1218: case 14:
1219: # line 509 "gram.y"
1220: {
1221: yyval.p = yypvt[-0].p;
1222: in_arg_list = 0;
1223: } break;
1224: case 15:
1225: # line 514 "gram.y"
1226: { yyval.p = 0; } break;
1227: case 16:
1228: # line 518 "gram.y"
1229: { yyval.p = yypvt[-0].p; } break;
1230: case 17:
1231: # line 520 "gram.y"
1232: { yyval.pn = yypvt[-0].pn; yyval.pn->n_list = yypvt[-2].pn; } break;
1233: case 18:
1234: # line 524 "gram.y"
1235: {
1236: yyval.pn = new name;
1237: yyval.pn->n_initializer = yypvt[-1].pe;
1238: } break;
1239: case 19:
1240: # line 529 "gram.y"
1241: {
1242: Pname n = Ncopy(yypvt[-3].pn);
1243: n->base = yypvt[-3].pn->base;
1244: n->n_initializer = yypvt[-1].pe;
1245: yyval.pn = n;
1246: } break;
1247: case 20:
1248: # line 552 "gram.y"
1249: { if (yypvt[-0].pn == 0)
1250: error("badAD");
1251: else if (yypvt[-0].pn->tp->base == FCT)
1252: error("FD inAL (%n)",yypvt[-0].pn);
1253: else if (yypvt[-1].p)
1254: yypvt[-1].nl->add_list(yypvt[-0].pn);
1255: else
1256: yyval.nl = new nlist(yypvt[-0].pn);
1257: } break;
1258: case 21:
1259: # line 562 "gram.y"
1260: {
1261: yyval.p = 0;
1262: /* error( 'd', "arg_dcl_list: in_class_decl: %d", in_class_decl );
1263: */
1264: if ( in_class_decl ) in_mem_fct = 1;
1265: } break;
1266: case 23:
1267: # line 572 "gram.y"
1268: { yyval.p = yypvt[-2].pn;
1269: yyval.pn->tp = new basetype(FIELD,yypvt[-0].pn);
1270: } break;
1271: case 24:
1272: # line 576 "gram.y"
1273: { yyval.p = new name;
1274: yyval.pn->tp = new basetype(FIELD,yypvt[-0].pn);
1275: } break;
1276: case 25:
1277: # line 580 "gram.y"
1278: { Pexpr e = yypvt[-0].pe;
1279: if (e == dummy) error("emptyIr");
1280: yypvt[-2].pn->n_initializer = e;
1281: init_seen = 0;
1282: } break;
1283: case 26:
1284: # line 588 "gram.y"
1285: {
1286: if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn);
1287: if ( NEXTTOK() == CM &&
1288: la_look() == TNAME )
1289: EXPECT_ID();
1290: } break;
1291: case 27:
1292: # line 595 "gram.y"
1293: { if (yypvt[-2].p)
1294: if (yypvt[-0].p)
1295: yypvt[-2].nl->add(yypvt[-0].pn);
1296: else
1297: error("DL syntax");
1298: else {
1299: if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn);
1300: error("DL syntax");
1301: }
1302: } break;
1303: case 28:
1304: # line 608 "gram.y"
1305: {
1306: extern int co_hack;
1307: co_hack = 1;
1308: /*$$ = Ndata($1,name_unlist($<nl>2));*/
1309: Pname n = Ndata(yypvt[-2].p,name_unlist(yypvt[-1].nl));
1310: if ( in_typedef && in_tag ) {
1311: if ( n->tp->check( in_tag->tp, 0 ))
1312: error("%nredefined: previous: %t now: %t", in_tag, in_tag->tp, n->tp );
1313: }
1314: in_typedef = 0;
1315: in_tag = 0;
1316: co_hack = 0;
1317: DECL_TYPE = 0;
1318: yyval.p = n;
1319: } break;
1320: case 29:
1321: # line 624 "gram.y"
1322: {
1323: yyval.p = yypvt[-1].pb->aggr();
1324: DECL_TYPE = 0;
1325:
1326: } break;
1327: case 30:
1328: # line 633 "gram.y"
1329: {
1330: yyval.p = new basetype(yypvt[-0].t,0);
1331: if ( yypvt[-0].t == TYPEDEF ) in_typedef = yyval.pt;
1332: if (DECL_TYPE == -1) DECL_TYPE = 0;
1333: } break;
1334: case 31:
1335: # line 639 "gram.y"
1336: { yyval.p = new basetype(EXTERN,0);
1337: yyval.pb->b_linkage = yypvt[-0].s;
1338: if (DECL_TYPE == -1) DECL_TYPE = 0;
1339: } break;
1340: case 32:
1341: # line 644 "gram.y"
1342: {
1343: yyval.p = new basetype(TYPE,yypvt[-0].pn);
1344: if (DECL_TYPE == -1) DECL_TYPE = 0;
1345: } break;
1346: case 35:
1347: # line 651 "gram.y"
1348: {
1349: if (DECL_TYPE == TNAME)
1350: yyval.p = new basetype(TYPE,yypvt[-0].pn);
1351: else
1352: yyval.p = new basetype(yypvt[-0].t,0);
1353: DECL_TYPE = -1;
1354: } break;
1355: case 37:
1356: # line 662 "gram.y"
1357: {
1358: if ( DECL_TYPE != -1 )
1359: yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t);
1360: DECL_TYPE = 0;
1361: } break;
1362: case 38:
1363: # line 668 "gram.y"
1364: {
1365: if ( DECL_TYPE != -1 )
1366: yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn);
1367: DECL_TYPE = 0;
1368: } break;
1369: case 39:
1370: # line 673 "gram.y"
1371: { yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break;
1372: case 40:
1373: # line 674 "gram.y"
1374: { yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break;
1375: case 41:
1376: # line 676 "gram.y"
1377: {
1378: if (DECL_TYPE == TYPE)
1379: yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t);
1380: else
1381: yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn);
1382: DECL_TYPE = -1;
1383: } break;
1384: case 42:
1385: # line 688 "gram.y"
1386: { yyval.p = end_enum(0,yypvt[-1].pn); } break;
1387: case 43:
1388: # line 689 "gram.y"
1389: { yyval.p = end_enum(yypvt[-3].pn,yypvt[-1].pn); } break;
1390: case 44:
1391: # line 690 "gram.y"
1392: { yyval.pb = (Pbase)yypvt[-0].pn->tp;} break;
1393: case 45:
1394: # line 691 "gram.y"
1395: { yyval.pb = (Pbase)yypvt[-0].pn->tp;} break;
1396: case 46:
1397: # line 695 "gram.y"
1398: { if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); } break;
1399: case 47:
1400: # line 697 "gram.y"
1401: { if( yypvt[-0].p)
1402: if (yypvt[-2].p)
1403: yypvt[-2].nl->add(yypvt[-0].pn);
1404: else
1405: yyval.nl = new nlist(yypvt[-0].pn);
1406: } break;
1407: case 48:
1408: # line 706 "gram.y"
1409: { yyval.p = yypvt[-0].pn; yyval.pn->tp = moe_type; } break;
1410: case 49:
1411: # line 708 "gram.y"
1412: { yyval.p = yypvt[-2].pn;
1413: yyval.pn->tp = moe_type;
1414: yyval.pn->n_initializer = yypvt[-0].pe;
1415: } break;
1416: case 50:
1417: # line 713 "gram.y"
1418: { yyval.p = 0; } break;
1419: case 51:
1420: # line 717 "gram.y"
1421: {
1422: ccl->mem_list = name_unlist(yypvt[-1].nl);
1423: end_cl();
1424: --in_class_decl;
1425: declTag = 1;
1426: } break;
1427: case 52:
1428: # line 724 "gram.y"
1429: {
1430: ccl->mem_list = name_unlist(yypvt[-2].nl);
1431: end_cl();
1432: --in_class_decl;
1433: error("`;' or declaratorX afterCD");
1434: lex_unget(yypvt[-0].t);
1435: /* lex_unget($4); but only one unget, sorry */
1436: declTag = 1;
1437: } break;
1438: case 53:
1439: # line 734 "gram.y"
1440: {
1441: yyval.pb = (Pbase)yypvt[-0].pn->tp;
1442: check_tag();
1443: } break;
1444: case 54:
1445: # line 740 "gram.y"
1446: {
1447: yyval.pb = (Pbase)yypvt[-0].pn->tp;
1448: check_tag();
1449:
1450: } break;
1451: case 55:
1452: # line 747 "gram.y"
1453: { yyval.pbc = yypvt[-0].pbc; } break;
1454: case 56:
1455: # line 748 "gram.y"
1456: { yyval.pbc = 0; } break;
1457: case 58:
1458: # line 753 "gram.y"
1459: { if (yypvt[-0].pbc) { yyval.pbc = yypvt[-0].pbc; yyval.pbc->next = yypvt[-2].pbc; } } break;
1460: case 59:
1461: # line 756 "gram.y"
1462: { yyval.pbc = dobase(0,yypvt[-0].pn); } break;
1463: case 60:
1464: # line 757 "gram.y"
1465: { yyval.pbc = dobase(yypvt[-1].t,yypvt[-0].pn); } break;
1466: case 61:
1467: # line 758 "gram.y"
1468: { yyval.pbc = dobase(0,yypvt[-0].pn,yypvt[-1].t); } break;
1469: case 62:
1470: # line 759 "gram.y"
1471: { yyval.pbc = dobase(yypvt[-2].t,yypvt[-0].pn,yypvt[-1].t); } break;
1472: case 63:
1473: # line 760 "gram.y"
1474: { yyval.pbc = dobase(yypvt[-1].t,yypvt[-0].pn,yypvt[-2].t); } break;
1475: case 64:
1476: # line 764 "gram.y"
1477: {
1478: yyval.p = start_cl(yypvt[-1].t,0,0);
1479: ++in_class_decl;
1480: } break;
1481: case 65:
1482: # line 770 "gram.y"
1483: {
1484: yyval.p = start_cl(yypvt[-3].t,yypvt[-2].pn,yypvt[-1].pbc);
1485: ++in_class_decl;
1486: } break;
1487: case 66:
1488: # line 776 "gram.y"
1489: { yyval.p = yypvt[-0].pn; } break;
1490: case 68:
1491: # line 781 "gram.y"
1492: {
1493: if (yypvt[-0].p) {
1494: if (yypvt[-1].p)
1495: yypvt[-1].nl->add_list(yypvt[-0].pn);
1496: else
1497: yyval.nl = new nlist(yypvt[-0].pn);
1498: }
1499: } break;
1500: case 69:
1501: # line 790 "gram.y"
1502: { yyval.p = 0; } break;
1503: case 76:
1504: # line 800 "gram.y"
1505: { yyval.p = new name;
1506: yyval.pn->base = yypvt[-1].t;
1507: } break;
1508: case 77:
1509: # line 804 "gram.y"
1510: { Pname n = Ncopy(yypvt[-1].pn);
1511: n->n_qualifier = yypvt[-2].pn;
1512: n->base = PR;
1513: yyval.p = n;
1514: } break;
1515: case 78:
1516: # line 810 "gram.y"
1517: { Pname n = Ncopy(yypvt[-1].pn);
1518: if (n->n_oper == TYPE) {
1519: error('s',"visibilityD for conversion operator");
1520: n->tp = Ptype(n->n_initializer);
1521: n->n_initializer = 0;
1522: n->n_oper = 0;
1523: sig_name(n);
1524: }
1525: n->n_qualifier = yypvt[-2].pn;
1526: n->base = PR;
1527: yyval.p = n;
1528: } break;
1529: case 79:
1530: # line 839 "gram.y"
1531: { yyval.p = yypvt[-0].pn; } break;
1532: case 80:
1533: # line 841 "gram.y"
1534: { yyval.p = Ncopy(yypvt[-0].pn);
1535: yyval.pn->n_oper = DTOR;
1536: } break;
1537: case 81:
1538: # line 845 "gram.y"
1539: { yyval.p = new name(oper_name(yypvt[-0].t));
1540: yyval.pn->n_oper = yypvt[-0].t;
1541: } break;
1542: case 82:
1543: # line 849 "gram.y"
1544: { Pname n = yypvt[-0].pn;
1545: n->string = "_type";
1546: n->n_oper = TYPE;
1547: n->n_initializer = Pexpr(n->tp);
1548: n->tp = 0;
1549: yyval.p = n;
1550: } break;
1551: case 95:
1552: # line 870 "gram.y"
1553: { yyval.t = CALL; } break;
1554: case 96:
1555: # line 871 "gram.y"
1556: { yyval.t = DEREF; } break;
1557: case 102:
1558: # line 877 "gram.y"
1559: { yyval.t = NEW; } break;
1560: case 103:
1561: # line 878 "gram.y"
1562: { yyval.t = DELETE; } break;
1563: case 104:
1564: # line 879 "gram.y"
1565: { yyval.t = REF; } break;
1566: case 105:
1567: # line 880 "gram.y"
1568: { yyval.t = CM; } break;
1569: case 106:
1570: # line 881 "gram.y"
1571: { yyval.t = REFMUL;
1572: if (yypvt[-0].t == DOT) error(".* cannot be overloaded");
1573: } break;
1574: case 107:
1575: # line 886 "gram.y"
1576: { yyval.pn = yypvt[-0].pn; } break;
1577: case 108:
1578: # line 887 "gram.y"
1579: { error("CNs do not nest"); } break;
1580: case 109:
1581: # line 888 "gram.y"
1582: { error("CNs do not nest"); } break;
1583: case 110:
1584: # line 892 "gram.y"
1585: { Freturns(yypvt[-0].p) = yypvt[-1].pn->tp;
1586: yypvt[-1].pn->tp = yypvt[-0].pt;
1587: } break;
1588: case 111:
1589: # line 896 "gram.y"
1590: { yypvt[-2].pn->tp = new fct(yypvt[-2].pn->tp,0,1);
1591: } break;
1592: case 112:
1593: # line 900 "gram.y"
1594: { yypvt[-3].pn->tp = new fct(yypvt[-3].pn->tp,0,1);
1595: Pfct(yypvt[-3].pn->tp)->f_const = 1;
1596: } break;
1597: case 113:
1598: # line 904 "gram.y"
1599: { Pname n = yypvt[-1].pn;
1600: yyval.p = Ncopy(n);
1601: if (ccl && strcmp(n->string,ccl->string)) n->hide();
1602: yyval.pn->n_oper = TNAME;
1603: Freturns(yypvt[-0].p) = yyval.pn->tp;
1604: yyval.pn->tp = yypvt[-0].pt;
1605: } break;
1606: case 114:
1607: # line 916 "gram.y"
1608: {
1609: yypvt[-3].pn->tp = new fct(yypvt[-3].pn->tp,yypvt[-1].pn,1);
1610: in_arg_list = 0;
1611: } break;
1612: case 115:
1613: # line 921 "gram.y"
1614: {
1615: Pptr p = new ptr( PTR, 0 );
1616: Ptyp(p) = yypvt[-2].pn->tp;
1617: Freturns( yypvt[-0].p ) = Ptype(p);
1618: yypvt[-2].pn->tp = yypvt[-0].pt;
1619: yyval.p = yypvt[-2].pn;
1620: if (DECL_TYPE == -1) DECL_TYPE = 0;
1621: } break;
1622: case 116:
1623: # line 930 "gram.y"
1624: { yyval.p = Ncopy(yypvt[-3].pn);
1625: yyval.pn->n_oper = TNAME;
1626: yyval.pn->tp = new fct(0,yypvt[-1].pn,1);
1627: } break;
1628: case 117:
1629: # line 935 "gram.y"
1630: { yyval.p = Ncopy(yypvt[-2].pn);
1631: yyval.pn->n_oper = TNAME;
1632: yyval.pn->tp = new fct(0,0,1);
1633: } break;
1634: case 118:
1635: # line 941 "gram.y"
1636: { yyval.p = Ncopy(yypvt[-3].pn);
1637: yyval.pn->n_oper = TNAME;
1638: yyval.pn->tp = new fct(0,0,1);
1639: Pfct(yypvt[-3].pn->tp)->f_const = 1;
1640: } break;
1641: case 119:
1642: # line 947 "gram.y"
1643: { memptrdcl(yypvt[-3].pn,yypvt[-5].pn,yypvt[-0].pt,yypvt[-2].pn);
1644: yyval.p = yypvt[-2].p;
1645: } break;
1646: case 121:
1647: # line 952 "gram.y"
1648: { yyval.p = Ncopy(yypvt[-0].pn);
1649: yyval.pn->n_qualifier = yypvt[-2].pn;
1650: error(ansi_opt?0:'w',"anachronism `.' used for qualification; please use `::'");
1651: } break;
1652: case 122:
1653: # line 957 "gram.y"
1654: { yyval.p = yypvt[-0].p;
1655: if ( yypvt[-1].pn != sta_name ) {
1656: set_scope(yypvt[-1].pn);
1657: yyval.pn->n_qualifier = yypvt[-1].pn;
1658: }
1659: } break;
1660: case 123:
1661: # line 964 "gram.y"
1662: {
1663: if ( yypvt[-1].pn == sta_name )
1664: error( ":: applied to CN%n", yypvt[-0].pn );
1665: yyval.p = Ncopy(yypvt[-0].pn);
1666: set_scope(yypvt[-1].pn);
1667: yyval.pn->n_oper = TNAME;
1668: yyval.pn->n_qualifier = yypvt[-1].pn;
1669: } break;
1670: case 124:
1671: # line 973 "gram.y"
1672: { Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
1673: yypvt[-0].pn->tp = yypvt[-1].pt;
1674: yyval.p = yypvt[-0].p;
1675: } break;
1676: case 125:
1677: # line 978 "gram.y"
1678: { yyval.p = Ncopy(yypvt[-0].pn);
1679: yyval.pn->n_oper = TNAME;
1680: // cannot evaluate at this point: defer until data_dcl
1681: if ( in_typedef ) {
1682: defer_check = 1;
1683: in_tag = yypvt[-0].pn;
1684: }
1685: yypvt[-0].pn->hide();
1686: defer_check = 0;
1687: yyval.pn->tp = yypvt[-1].pt;
1688: } break;
1689: case 126:
1690: # line 990 "gram.y"
1691: { yyval.p = Ncopy(yypvt[-1].pn);
1692: yyval.pn->n_oper = TNAME;
1693: if ( in_typedef ) {
1694: defer_check = 1;
1695: in_tag = yypvt[-0].pn;
1696: }
1697: yypvt[-1].pn->hide();
1698: defer_check = 0;
1699: yyval.pn->tp = yypvt[-0].pt;
1700: } break;
1701: case 127:
1702: # line 1001 "gram.y"
1703: { Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
1704: yypvt[-1].pn->tp = yypvt[-0].pt;
1705: } break;
1706: case 128:
1707: # line 1018 "gram.y"
1708: {
1709: yyval.p = yypvt[-1].p;
1710: in_arg_list = 0;
1711: } break;
1712: case 129:
1713: # line 1025 "gram.y"
1714: { yyval.p = yypvt[-0].pn; } break;
1715: case 130:
1716: # line 1027 "gram.y"
1717: { yyval.p = Ncopy(yypvt[-0].pn);
1718: yyval.pn->n_oper = TNAME;
1719: yypvt[-0].pn->hide();
1720: yyval.pn->tp = yypvt[-1].pt;
1721: } break;
1722: case 131:
1723: # line 1033 "gram.y"
1724: {
1725: yyval.p = new name;
1726: NOT_EXPECT_ID();
1727: } break;
1728: case 132:
1729: # line 1038 "gram.y"
1730: { Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
1731: yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
1732: yyval.p = yypvt[-0].p;
1733: } break;
1734: case 133:
1735: # line 1043 "gram.y"
1736: { Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
1737: yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
1738: } break;
1739: case 134:
1740: # line 1047 "gram.y"
1741: { Freturns(yypvt[-0].p) = yypvt[-1].pn->tp;
1742: yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
1743: } break;
1744: case 135:
1745: # line 1063 "gram.y"
1746: {
1747: // error('d', "arg_lp arg_decl rp in_arg_list: %d", in_arg_list );
1748: yyval.p = yypvt[-1].p;
1749: in_arg_list = 0;
1750: } break;
1751: case 136:
1752: # line 1071 "gram.y"
1753: { yyval.p = new name; } break;
1754: case 137:
1755: # line 1073 "gram.y"
1756: { Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
1757: yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
1758: yyval.p = yypvt[-0].p;
1759: NOT_EXPECT_ID();
1760: } break;
1761: case 138:
1762: # line 1079 "gram.y"
1763: { Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
1764: yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
1765: } break;
1766: case 139:
1767: # line 1084 "gram.y"
1768: { yyval.p = new name; } break;
1769: case 140:
1770: # line 1086 "gram.y"
1771: { Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
1772: yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
1773: yyval.p = yypvt[-0].p;
1774: NOT_EXPECT_ID();
1775: } break;
1776: case 141:
1777: # line 1092 "gram.y"
1778: { Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
1779: yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
1780: } break;
1781: case 142:
1782: # line 1096 "gram.y"
1783: { Freturns(yypvt[-0].p) = yypvt[-2].pn->tp;
1784: yypvt[-2].pn->tp = yypvt[-0].pt;
1785: yyval.p = yypvt[-2].p;
1786: } break;
1787: case 143:
1788: # line 1101 "gram.y"
1789: { Vtype(yypvt[-0].p) = yypvt[-2].pn->tp;
1790: yypvt[-2].pn->tp = yypvt[-0].pt;
1791: yyval.p = yypvt[-2].p;
1792: } break;
1793: case 144:
1794: # line 1108 "gram.y"
1795: { yyval.p = new name; } break;
1796: case 145:
1797: # line 1110 "gram.y"
1798: { Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
1799: yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
1800: yyval.p = yypvt[-0].p;
1801: } break;
1802: case 146:
1803: # line 1120 "gram.y"
1804: {
1805: yyval.p = 0;
1806: } break;
1807: case 147:
1808: # line 1124 "gram.y"
1809: {
1810: if (yypvt[-0].p)
1811: if (yypvt[-1].p)
1812: yypvt[-1].sl->add(yypvt[-0].ps);
1813: else {
1814: yyval.sl = new slist(yypvt[-0].ps);
1815: stmt_seen = 1;
1816: }
1817: } break;
1818: case 148:
1819: # line 1135 "gram.y"
1820: {
1821: yyval.p = yypvt[-0].p;
1822: if (yypvt[-0].p) stmt_seen = 1;
1823: } break;
1824: case 149:
1825: # line 1142 "gram.y"
1826: {
1827: yyval.p = 0;
1828: check_decl();
1829: } break;
1830: case 150:
1831: # line 1149 "gram.y"
1832: { yyval.p = yypvt[-1].p;
1833: /* if ($<pe>$ == dummy) error("empty condition");*/
1834: stmt_seen = 1;
1835: } break;
1836: case 151:
1837: # line 1156 "gram.y"
1838: { cd_vec[cdi] = cd;
1839: stmt_vec[cdi] = stmt_seen;
1840: tn_vec[cdi] = modified_tn;
1841: lcl_blk_vec[cdi++] = local_blk;
1842: lcl_tn_vec[cdi] = local_tn;
1843: local_blk = 0;
1844: local_tn = 0;
1845: cd = 0;
1846: stmt_seen = 0;
1847: modified_tn = 0;
1848: } break;
1849: case 152:
1850: # line 1168 "gram.y"
1851: { Pname n = name_unlist(cd);
1852: Pstmt ss = stmt_unlist(yypvt[-1].sl);
1853: yyval.p = new block(yypvt[-3].l,n,ss);
1854: if ( local_tn ) local_restore();
1855: if ( local_blk ) local_name();
1856: if (modified_tn) restore();
1857: cd = cd_vec[--cdi];
1858: stmt_seen = stmt_vec[cdi];
1859: modified_tn = tn_vec[cdi];
1860: local_tn = lcl_tn_vec[cdi];
1861: local_blk = lcl_blk_vec[cdi];
1862: if (cdi < 0) error('i',"block level(%d)",cdi);
1863: NOT_EXPECT_ID();
1864: } break;
1865: case 153:
1866: # line 1183 "gram.y"
1867: { yyval.p = new block(yypvt[-1].l,0,0); NOT_EXPECT_ID();} break;
1868: case 154:
1869: # line 1185 "gram.y"
1870: { yyval.p = new block(yypvt[-2].l,0,0); NOT_EXPECT_ID();} break;
1871: case 155:
1872: # line 1189 "gram.y"
1873: { yyval.p = new estmt(SM,curloc,yypvt[-0].pe,0); } break;
1874: case 156:
1875: # line 1191 "gram.y"
1876: { yyval.p = new stmt(BREAK,yypvt[-0].l,0); } break;
1877: case 157:
1878: # line 1193 "gram.y"
1879: { yyval.p = new stmt(CONTINUE,yypvt[-0].l,0); } break;
1880: case 158:
1881: # line 1195 "gram.y"
1882: { yyval.p = new lstmt(GOTO,yypvt[-1].l,yypvt[-0].pn,0); } break;
1883: case 159:
1884: # line 1196 "gram.y"
1885: { stmt_seen=1; } break;
1886: case 160:
1887: # line 1197 "gram.y"
1888: { yyval.p = new estmt(DO,yypvt[-4].l,yypvt[-0].pe,yypvt[-2].ps); } break;
1889: case 161:
1890: # line 1199 "gram.y"
1891: {
1892: if (stmt_seen)
1893: yyval.p = new estmt(ASM,curloc,(Pexpr)yypvt[-1].s,0);
1894: else {
1895: Pname n = new name(make_name('A'));
1896: n->tp = new basetype(ASM,(Pname)yypvt[-1].s);
1897: if (cd)
1898: cd->add_list(n);
1899: else
1900: cd = new nlist(n);
1901: yyval.p = 0;
1902: }
1903: } break;
1904: case 180:
1905: # line 1235 "gram.y"
1906: { error("`;' missing afterS"); } break;
1907: case 181:
1908: # line 1237 "gram.y"
1909: { yyval.p = new estmt(SM,yypvt[-0].l,dummy,0); } break;
1910: case 182:
1911: # line 1239 "gram.y"
1912: { yyval.p = new estmt(RETURN,yypvt[-2].l,yypvt[-1].pe,0); } break;
1913: case 183:
1914: # line 1241 "gram.y"
1915: {
1916: error("local linkage specification");
1917: yyval.p = yypvt[-0].pn;
1918: } break;
1919: case 184:
1920: # line 1246 "gram.y"
1921: { Pname n = yypvt[-0].pn;
1922: if (n)
1923: if (stmt_seen) {
1924: yyval.p = new block(n->where,n,0);
1925: yyval.ps->base = DCL;
1926: }
1927: else {
1928: if (cd)
1929: cd->add_list(n);
1930: else
1931: cd = new nlist(n);
1932: yyval.p = 0;
1933: }
1934: } break;
1935: case 185:
1936: # line 1261 "gram.y"
1937: {
1938: Pname n = yypvt[-0].pn;
1939: lex_unget(RC);
1940: error(&n->where,"%n's definition is nested (did you forget a ``}''?)",n);
1941: if (cd)
1942: cd->add_list(n);
1943: else
1944: cd = new nlist(n);
1945: yyval.p = 0;
1946: } break;
1947: case 187:
1948: # line 1273 "gram.y"
1949: { yyval.p = new ifstmt(yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps,0); } break;
1950: case 188:
1951: # line 1275 "gram.y"
1952: { yyval.p = new ifstmt(yypvt[-4].l,yypvt[-3].pe,yypvt[-2].ps,yypvt[-0].ps); } break;
1953: case 189:
1954: # line 1277 "gram.y"
1955: { yyval.p = new estmt(WHILE,yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps); } break;
1956: case 190:
1957: # line 1278 "gram.y"
1958: { stmt_seen=1; } break;
1959: case 191:
1960: # line 1279 "gram.y"
1961: { yyval.p = new forstmt(yypvt[-8].l,yypvt[-5].ps,yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].ps); } break;
1962: case 192:
1963: # line 1281 "gram.y"
1964: { yyval.p = new estmt(SWITCH,yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps); } break;
1965: case 193:
1966: # line 1282 "gram.y"
1967: { yyval.p = yypvt[-1].pn; stmt_seen=1; } break;
1968: case 194:
1969: # line 1283 "gram.y"
1970: { Pname n = yypvt[-1].pn;
1971: yyval.p = new lstmt(LABEL,n->where,n,yypvt[-0].ps);
1972: } break;
1973: case 195:
1974: # line 1286 "gram.y"
1975: { stmt_seen=1; } break;
1976: case 196:
1977: # line 1287 "gram.y"
1978: { if (yypvt[-2].pe == dummy) error("empty case label");
1979: yyval.p = new estmt(CASE,yypvt[-4].l,yypvt[-2].pe,yypvt[-0].ps);
1980: } break;
1981: case 197:
1982: # line 1290 "gram.y"
1983: { stmt_seen=1; } break;
1984: case 198:
1985: # line 1291 "gram.y"
1986: { yyval.p = new stmt(DEFAULT,yypvt[-3].l,yypvt[-0].ps); } break;
1987: case 199:
1988: # line 1298 "gram.y"
1989: { Pexpr e = expr_unlist(yypvt[-0].el);
1990: while (e && e->e1==dummy) {
1991: register Pexpr ee2 = e->e2;
1992: if (ee2) error("EX inEL");
1993: delete e;
1994: e = ee2;
1995: }
1996: yyval.p = e;
1997: } break;
1998: case 200:
1999: # line 1309 "gram.y"
2000: { yyval.el = new elist(new expr(ELIST,yypvt[-0].pe,0)); } break;
2001: case 201:
2002: # line 1311 "gram.y"
2003: { yypvt[-2].el->add(new expr(ELIST,yypvt[-0].pe,0)); } break;
2004: case 203:
2005: # line 1316 "gram.y"
2006: {
2007: if ( in_arg_list )
2008: error( "syntax error: IrL not permitted in AL" );
2009: else
2010: init_seen = 1;
2011: Pexpr e;
2012: if (yypvt[-1].p)
2013: e = yypvt[-1].pe;
2014: else
2015: e = new expr(ELIST,dummy,0);
2016: yyval.p = new expr(ILIST,e,0);
2017: } break;
2018: case 204:
2019: # line 1331 "gram.y"
2020: { bbinop: yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
2021: case 205:
2022: # line 1332 "gram.y"
2023: { goto bbinop; } break;
2024: case 206:
2025: # line 1333 "gram.y"
2026: { goto bbinop; } break;
2027: case 207:
2028: # line 1334 "gram.y"
2029: { goto bbinop; } break;
2030: case 208:
2031: # line 1335 "gram.y"
2032: { goto bbinop; } break;
2033: case 209:
2034: # line 1336 "gram.y"
2035: { goto bbinop; } break;
2036: case 210:
2037: # line 1337 "gram.y"
2038: { goto bbinop; } break;
2039: case 211:
2040: # line 1338 "gram.y"
2041: { goto bbinop; } break;
2042: case 212:
2043: # line 1339 "gram.y"
2044: { goto bbinop; } break;
2045: case 213:
2046: # line 1340 "gram.y"
2047: { goto bbinop; } break;
2048: case 214:
2049: # line 1341 "gram.y"
2050: { goto bbinop; } break;
2051: case 215:
2052: # line 1342 "gram.y"
2053: { goto bbinop; } break;
2054: case 216:
2055: # line 1343 "gram.y"
2056: { goto bbinop; } break;
2057: case 217:
2058: # line 1344 "gram.y"
2059: { goto bbinop; } break;
2060: case 218:
2061: # line 1345 "gram.y"
2062: { goto bbinop; } break;
2063: case 219:
2064: # line 1347 "gram.y"
2065: { yyval.p = new qexpr(yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].pe); } break;
2066: case 220:
2067: # line 1349 "gram.y"
2068: { yyval.p = new expr(DELETE,yypvt[-0].pe,0); } break;
2069: case 221:
2070: # line 1351 "gram.y"
2071: { yyval.p = new expr(DELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
2072: case 222:
2073: # line 1353 "gram.y"
2074: { yyval.p = new expr(GDELETE,yypvt[-0].pe,0); } break;
2075: case 223:
2076: # line 1355 "gram.y"
2077: { yyval.p = new expr(GDELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
2078: case 225:
2079: # line 1360 "gram.y"
2080: { binop: yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
2081: case 226:
2082: # line 1361 "gram.y"
2083: { goto binop; } break;
2084: case 227:
2085: # line 1362 "gram.y"
2086: { goto binop; } break;
2087: case 228:
2088: # line 1363 "gram.y"
2089: { goto binop; } break;
2090: case 229:
2091: # line 1364 "gram.y"
2092: { goto binop; } break;
2093: case 230:
2094: # line 1365 "gram.y"
2095: { goto binop; } break;
2096: case 231:
2097: # line 1366 "gram.y"
2098: { goto binop; } break;
2099: case 232:
2100: # line 1367 "gram.y"
2101: { goto binop; } break;
2102: case 233:
2103: # line 1368 "gram.y"
2104: { goto binop; } break;
2105: case 234:
2106: # line 1369 "gram.y"
2107: { goto binop; } break;
2108: case 235:
2109: # line 1370 "gram.y"
2110: { goto binop; } break;
2111: case 236:
2112: # line 1371 "gram.y"
2113: { goto binop; } break;
2114: case 237:
2115: # line 1372 "gram.y"
2116: { goto binop; } break;
2117: case 238:
2118: # line 1373 "gram.y"
2119: { goto binop; } break;
2120: case 239:
2121: # line 1374 "gram.y"
2122: { goto binop; } break;
2123: case 240:
2124: # line 1376 "gram.y"
2125: { yyval.p = new qexpr(yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].pe); } break;
2126: case 241:
2127: # line 1378 "gram.y"
2128: { yyval.p = new expr(DELETE,yypvt[-0].pe,0); } break;
2129: case 242:
2130: # line 1380 "gram.y"
2131: { yyval.p = new expr(DELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
2132: case 243:
2133: # line 1382 "gram.y"
2134: { yyval.p = new expr(GDELETE,yypvt[-0].pe,0); } break;
2135: case 244:
2136: # line 1384 "gram.y"
2137: { yyval.p = new expr(GDELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
2138: case 245:
2139: # line 1385 "gram.y"
2140: {
2141: init_seen = 0;
2142: } break;
2143: case 246:
2144: # line 1389 "gram.y"
2145: { yyval.p = dummy; } break;
2146: case 247:
2147: # line 1392 "gram.y"
2148: { goto new1; } break;
2149: case 248:
2150: # line 1394 "gram.y"
2151: { new1:
2152: Ptype t = yypvt[-0].pn->tp;
2153: yyval.p = new texpr(NEW,t,0);
2154: } break;
2155: case 249:
2156: # line 1398 "gram.y"
2157: { goto new3; } break;
2158: case 250:
2159: # line 1400 "gram.y"
2160: { new3:
2161: Ptype t = yypvt[-0].pn->tp;
2162: yyval.p = new texpr(GNEW,t,0);
2163: } break;
2164: case 251:
2165: # line 1405 "gram.y"
2166: { yyval.p = new expr(yypvt[-0].t,yypvt[-1].pe,0); } break;
2167: case 252:
2168: # line 1407 "gram.y"
2169: { yyval.p = new texpr(CAST,yypvt[-1].pn->tp,yypvt[-0].pe); } break;
2170: case 253:
2171: # line 1409 "gram.y"
2172: { yyval.p = new expr(DEREF,yypvt[-0].pe,0); } break;
2173: case 254:
2174: # line 1411 "gram.y"
2175: { yyval.p = new expr(ADDROF,0,yypvt[-0].pe); } break;
2176: case 255:
2177: # line 1413 "gram.y"
2178: { yyval.p = new expr(UMINUS,0,yypvt[-0].pe); } break;
2179: case 256:
2180: # line 1415 "gram.y"
2181: { yyval.p = new expr(UPLUS,0,yypvt[-0].pe); } break;
2182: case 257:
2183: # line 1417 "gram.y"
2184: { yyval.p = new expr(NOT,0,yypvt[-0].pe); } break;
2185: case 258:
2186: # line 1419 "gram.y"
2187: { yyval.p = new expr(COMPL,0,yypvt[-0].pe); } break;
2188: case 259:
2189: # line 1421 "gram.y"
2190: { yyval.p = new expr(yypvt[-1].t,0,yypvt[-0].pe); } break;
2191: case 260:
2192: # line 1423 "gram.y"
2193: { yyval.p = new texpr(SIZEOF,0,yypvt[-0].pe); } break;
2194: case 261:
2195: # line 1425 "gram.y"
2196: { yyval.p = new texpr(SIZEOF,yypvt[-0].pn->tp,0); } break;
2197: case 262:
2198: # line 1427 "gram.y"
2199: { yyval.p = new expr(DEREF,yypvt[-3].pe,yypvt[-1].pe); } break;
2200: case 263:
2201: # line 1429 "gram.y"
2202: { yyval.p = new ref(REF,yypvt[-2].pe,yypvt[-0].pn); } break;
2203: case 264:
2204: # line 1431 "gram.y"
2205: { yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
2206: case 265:
2207: # line 1433 "gram.y"
2208: { yyval.p = new ref(REF,yypvt[-2].pe,Ncopy(yypvt[-0].pn)); } break;
2209: case 266:
2210: # line 1435 "gram.y"
2211: { yyval.p = new ref(DOT,yypvt[-2].pe,yypvt[-0].pn); } break;
2212: case 267:
2213: # line 1437 "gram.y"
2214: { yyval.p = new ref(DOT,yypvt[-2].pe,Ncopy(yypvt[-0].pn)); } break;
2215: case 269:
2216: # line 1440 "gram.y"
2217: {
2218: if ( init_seen )
2219: error( "syntax error:IrL illegal within ()");
2220: } break;
2221: case 270:
2222: # line 1446 "gram.y"
2223: { yyval.p = yypvt[-1].p; } break;
2224: case 271:
2225: # line 1448 "gram.y"
2226: { yyval.p = zero; } break;
2227: case 272:
2228: # line 1450 "gram.y"
2229: { yyval.p = new expr(ICON,0,0);
2230: yyval.pe->string = yypvt[-0].s;
2231: } break;
2232: case 273:
2233: # line 1454 "gram.y"
2234: { yyval.p = new expr(FCON,0,0);
2235: yyval.pe->string = yypvt[-0].s;
2236: } break;
2237: case 274:
2238: # line 1458 "gram.y"
2239: { yyval.p = new expr(STRING,0,0);
2240: yyval.pe->string = yypvt[-0].s;
2241: } break;
2242: case 275:
2243: # line 1462 "gram.y"
2244: { yyval.p = new expr(CCON,0,0);
2245: yyval.pe->string = yypvt[-0].s;
2246: } break;
2247: case 276:
2248: # line 1466 "gram.y"
2249: { yyval.p = new expr(THIS,0,0); } break;
2250: case 277:
2251: # line 1470 "gram.y"
2252: { yyval.p = new texpr(VALUE,tok_to_type(yypvt[-3].t),yypvt[-1].pe); } break;
2253: case 278:
2254: # line 1472 "gram.y"
2255: { yyval.p = new texpr(VALUE,yypvt[-3].pn->tp,yypvt[-1].pe); } break;
2256: case 279:
2257: # line 1473 "gram.y"
2258: { goto new2; } break;
2259: case 280:
2260: # line 1475 "gram.y"
2261: { new2:
2262: Ptype t = yypvt[-0].pn->tp;
2263: yyval.p=new texpr(NEW,t,0);
2264: yyval.pe->e2 = yypvt[-2].pe;
2265: } break;
2266: case 281:
2267: # line 1480 "gram.y"
2268: { goto new4; } break;
2269: case 282:
2270: # line 1482 "gram.y"
2271: { new4:
2272: Ptype t = yypvt[-0].pn->tp;
2273: yyval.p = new texpr(GNEW,t,0);
2274: yyval.pe->e2 = yypvt[-2].pe;
2275: } break;
2276: case 283:
2277: # line 1488 "gram.y"
2278: {
2279: Pexpr ee = yypvt[-1].pe;
2280: Pexpr e = yypvt[-3].pe;
2281: if (e->base==NEW || e->base==GNEW)
2282: e->e1 = ee;
2283: else
2284: yyval.p = new call(e,ee);
2285: } break;
2286: case 284:
2287: # line 1499 "gram.y"
2288: { yyval.pn = yypvt[-0].pn; } break;
2289: case 285:
2290: # line 1501 "gram.y"
2291: { yyval.pn = sta_name; } break;
2292: case 286:
2293: # line 1506 "gram.y"
2294: { yyval.p = yypvt[-0].pn; } break;
2295: case 287:
2296: # line 1508 "gram.y"
2297: { yyval.p = Ncopy(yypvt[-0].pn);
2298: yyval.pn->n_qualifier = yypvt[-1].pn;
2299: } break;
2300: case 288:
2301: # line 1512 "gram.y"
2302: { yyval.p = new name(oper_name(yypvt[-0].t));
2303: yyval.pn->n_oper = yypvt[-0].t;
2304: } break;
2305: case 289:
2306: # line 1516 "gram.y"
2307: { yyval.p = new name(oper_name(yypvt[-0].t));
2308: yyval.pn->n_oper = yypvt[-0].t;
2309: yyval.pn->n_qualifier = yypvt[-2].pn;
2310: } break;
2311: case 290:
2312: # line 1521 "gram.y"
2313: { yyval.p = yypvt[-0].p;
2314: sig_name(yyval.pn);
2315: } break;
2316: case 291:
2317: # line 1525 "gram.y"
2318: { yyval.p = yypvt[-0].p;
2319: sig_name(yyval.pn);
2320: yyval.pn->n_qualifier = yypvt[-2].pn;
2321: } break;
2322: case 292:
2323: # line 1530 "gram.y"
2324: {
2325: if (strcmp(yypvt[-2].pn->string,yypvt[-0].pn->string)) error("syntax error: inconsistent destructor notation");
2326: yyval.p = new name(oper_name(DTOR));
2327: yyval.pn->n_oper = DTOR;
2328: yyval.pn->n_qualifier = yypvt[-2].pn;
2329: } break;
2330: case 293:
2331: # line 1542 "gram.y"
2332: { yyval.p = Ncast(yypvt[-2].p,yypvt[-1].pn); } break;
2333: case 294:
2334: # line 1545 "gram.y"
2335: { check_cast(); } break;
2336: case 295:
2337: # line 1549 "gram.y"
2338: {
2339: TOK t = yypvt[-0].t;
2340:
2341: switch (t) {
2342: case FRIEND:
2343: case OVERLOAD:
2344: case REGISTER:
2345: case STATIC:
2346: case EXTERN:
2347: case AUTO:
2348: case VIRTUAL:
2349: error("%k in operatorT",t);
2350: t = INT;
2351:
2352: }
2353:
2354: yyval.p = new basetype(t,0);
2355:
2356: } break;
2357: case 296:
2358: # line 1568 "gram.y"
2359: { yyval.p = new basetype(TYPE,yypvt[-0].pn); } break;
2360: case 297:
2361: # line 1570 "gram.y"
2362: {
2363: if ( DECL_TYPE != -1 )
2364: yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t);
2365: DECL_TYPE = 0;
2366: } break;
2367: case 298:
2368: # line 1576 "gram.y"
2369: {
2370: if ( DECL_TYPE != -1 )
2371: yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn);
2372: DECL_TYPE = 0;
2373: } break;
2374: case 299:
2375: # line 1583 "gram.y"
2376: { yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break;
2377: case 300:
2378: # line 1586 "gram.y"
2379: { yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break;
2380: case 301:
2381: # line 1589 "gram.y"
2382: { yyval.p = Ndata(yypvt[-1].p,yypvt[-0].pn); } break;
2383: case 302:
2384: # line 1591 "gram.y"
2385: { yyval.p = Ndata(yypvt[-3].p,yypvt[-2].pn);
2386: yyval.pn->n_initializer = yypvt[-0].pe;
2387: } break;
2388: case 303:
2389: # line 1597 "gram.y"
2390: {
2391: check_decl();
2392: in_arg_list=1;
2393: if ( in_class_decl ) in_mem_fct = 1;
2394: } break;
2395: case 304:
2396: # line 1605 "gram.y"
2397: {
2398: yyval.p = new fct(0,name_unlist(yypvt[-2].nl),yypvt[-1].t);
2399: if ( NEXTTOK() != COLON ) in_arg_list=0;
2400: } break;
2401: case 305:
2402: # line 1610 "gram.y"
2403: {
2404: yyval.p = new fct(0,name_unlist(yypvt[-3].nl),yypvt[-2].t);
2405: in_arg_list=0;
2406: if (yypvt[-0].t != CONST)
2407: if ( la_look() != SM ) {
2408: error("syntax error: unexpected%k (did you forget a `;'?)",yypvt[-0].t);
2409: { YYSTYPE y; y.t = SM; la_backup(SM,y); }
2410: lex_unget(yypvt[-0].t);
2411: }
2412: else error("syntax error: unexpected%k",yypvt[-0].t);
2413: Pfct(yyval.pt)->f_const = 1;
2414: } break;
2415: case 306:
2416: # line 1625 "gram.y"
2417: {
2418: if (yypvt[-0].p)
2419: if (yypvt[-2].p)
2420: yypvt[-2].nl->add(yypvt[-0].pn);
2421: else {
2422: error("AD syntax");
2423: yyval.nl = new nlist(yypvt[-0].pn);
2424: }
2425: else
2426: error("AD syntax");
2427: } break;
2428: case 307:
2429: # line 1637 "gram.y"
2430: {
2431: if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn);
2432: } break;
2433: case 309:
2434: # line 1643 "gram.y"
2435: { yyval.p = 0; } break;
2436: case 310:
2437: # line 1647 "gram.y"
2438: { yyval.t = 1; } break;
2439: case 311:
2440: # line 1649 "gram.y"
2441: { yyval.t = ELLIPSIS; } break;
2442: case 312:
2443: # line 1651 "gram.y"
2444: { yyval.t = ELLIPSIS; } break;
2445: case 313:
2446: # line 1655 "gram.y"
2447: {
2448: yyval.p = new ptr(PTR,0);
2449: EXPECT_ID();
2450: } break;
2451: case 314:
2452: # line 1660 "gram.y"
2453: {
2454: yyval.p = new ptr(RPTR,0);
2455: EXPECT_ID();
2456: } break;
2457: case 315:
2458: # line 1665 "gram.y"
2459: { yyval.p = doptr(PTR,yypvt[-0].t); } break;
2460: case 316:
2461: # line 1667 "gram.y"
2462: {
2463: switch ( yypvt[-0].t ) {
2464: case CONST:
2465: yypvt[-1].pp->rdo = 1; break;
2466: case VOLATILE:
2467: error('w',"\"volatile\" not implemented (ignored)");
2468: break;
2469: default:
2470: error( "syntax error: *%k", yypvt[-0].t );
2471: }
2472: yyval.p = yypvt[-1].pp;
2473: } break;
2474: case 317:
2475: # line 1680 "gram.y"
2476: { yyval.p = doptr(RPTR,yypvt[-0].t); } break;
2477: case 318:
2478: # line 1682 "gram.y"
2479: {
2480: yyval.p = new ptr(PTR,0);
2481: yyval.pp->memof = Pclass(Pbase(yypvt[-0].pn->tp)->b_name->tp);
2482: EXPECT_ID();
2483: } break;
2484: case 319:
2485: # line 1688 "gram.y"
2486: { yyval.p = doptr(PTR,yypvt[-0].t);
2487: yyval.pp->memof = Pclass(Pbase(yypvt[-1].pn->tp)->b_name->tp);
2488: } break;
2489: case 320:
2490: # line 1693 "gram.y"
2491: { yyval.p = new vec(0,yypvt[-1].pe!=dummy?yypvt[-1].pe:0 ); } break;
2492: case 321:
2493: # line 1694 "gram.y"
2494: { yyval.p = new vec(0,0); } break;
2495: }
2496: goto yystack; /* stack new state and value */
2497: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.