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