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