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