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