File:  [Research Unix] / researchv10no / cmd / cfront / ooptcfront / y.tab.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:35 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv10, HEAD
researchv10 Norman


# line 24 "gram.y"
#include "cfront.h"
#include "size.h"
#include "template.h"
#include <string.h>

#define copy_if_need_be(s)  ((templp->in_progress || templp->parameters_in_progress) ? strdup(s) : s) 

extern int ansi_opt;
#define YYMAXDEPTH 600

static init_seen = 0;
static cdi = 0;
static Pnlist cd = 0, cd_vec[BLMAX];
static char stmt_seen = 0, stmt_vec[BLMAX];

//local class
//static Plist tn_vec[BLMAX];
extern Plist local_blk; // put in cfront.h
static Plist tn_vec[BLMAX], lcl_tn_vec[BLMAX], lcl_blk_vec[BLMAX];
extern void local_restore();
extern void local_name();

static Pname err_name = 0;

// fcts put into norm2.c just to get them out of gram.y
void sig_name(Pname);	
Ptype tok_to_type(TOK);
void memptrdcl(Pname, Pname, Ptype, Pname);

static Pptr doptr(TOK p, TOK t)
{
	Pptr r = new ptr(p,0);
	switch (t) {
	case CONST:
		r->rdo = 1;
               // if (p == RPTR) error('w',"redundant `const' after &");
		break;
	case VOLATILE:
		error('w',"\"volatile\" not implemented (ignored)");
		break;
	default:
		error("syntax error: *%k",t);
	}
	return r;
}

static Pbcl dobase(TOK pr, Pname n, TOK v = 0)
{
	Pbcl b = new basecl(0,0);

	if (pr == PROTECTED) {
		pr = PUBLIC;
		error("protectedBC");
	}
	b->ppp = pr;	// save protection indicator

	if (n) {
		if (n->base != TNAME) {
			error("BN%n not aTN",n);
			return 0;
		}

		Pbase bt = Pbase(n->tp);
		while (bt->base == TYPE) bt = Pbase(bt->b_name->tp);

		if (bt->base != COBJ) {
			error("BN%n not aCN",n);
			return 0;
		}

		if (v) {
			if (v != VIRTUAL) error("syntax error:%k inBCD",v);
			b->base = VIRTUAL;
		}
		else
			b->base = NAME;

		b->bclass = Pclass(bt->b_name->tp);
	}

	return b;
}

#define lex_unget(x) back = x

#define Ndata(a,b)	b->normalize(Pbase(a),0,0)
#define Ncast(a,b)	b->normalize(Pbase(a),0,1)
#define Nfct(a,b,c)	b->normalize(Pbase(a),Pblock(c),0)
#define Ncopy(n)	(n->base==TNAME)?new name(n->string):n

#define Finit(p)	Pfct(p)->f_init
#define Fargdcl(p,q,r)	Pfct(p)->argdcl(q,r)
#define Freturns(p)	Pfct(p)->returns
#define Vtype(v)	Pvec(v)->typ
#define Ptyp(p)		Pptr(p)->typ

		/* avoid redefinitions */
#undef EOFTOK
#undef ASM
#undef BREAK
#undef CASE
#undef CONTINUE
#undef DEFAULT
#undef DELETE
#undef DO
#undef ELSE
#undef ENUM
#undef FOR
#undef FORTRAN
#undef FRIEND
#undef GOTO
#undef IF
#undef NEW
#undef OPERATOR
#undef RETURN
#undef SIZEOF
#undef SWITCH
#undef THIS
#undef WHILE
#undef LP
#undef RP
#undef LB
#undef RB
#undef REF
#undef DOT
#undef NOT
#undef COMPL
#undef MUL
#undef AND
#undef PLUS
#undef MINUS
#undef ER
#undef OR
#undef ANDAND
#undef OROR
#undef QUEST
#undef COLON
#undef ASSIGN
#undef CM
#undef SM
#undef LC
#undef RC
#undef ID
#undef STRING
#undef ICON
#undef FCON
#undef CCON
#undef ZERO
#undef ASOP
#undef RELOP
#undef EQUOP
#undef DIVOP
#undef SHIFTOP
#undef ICOP
#undef TYPE
#undef TNAME
#undef EMPTY
#undef NO_ID
#undef NO_EXPR
#undef FDEF
#undef ELLIPSIS
#undef AGGR
#undef MEM
#undef MEMPTR
#undef PR
#undef TSCOPE
#undef DECL_MARKER
#undef REFMUL
#undef LDOUBLE
#undef LINKAGE
#undef LOCAL
#undef TEMPLATE

#undef XVIRT
#undef XNLIST
#undef XILINE
#undef XIA
#undef STATEMENT
#undef EXPRESSION
#undef SM_PARAM
#undef TEMPLATE_TEST
#undef PTNAME
#undef NEW_INIT_KLUDGE

# line 209 "gram.y"
typedef union  {
	char*	s;
	TOK	t;
	int	i;
	loc	l;
	Pname	pn;
	Ptype	pt;
	Pexpr	pe;
	Pstmt	ps;
	Pbase	pb;
	Pnlist	nl;
	Pslist	sl;
	Pelist	el;
	Pbcl	pbc;
	Pptr	pp;
	PP	p;	// fudge: pointer to all class node objects
} YYSTYPE;

# line 227 "gram.y"
extern YYSTYPE yylval, yyval;
extern int yyparse();

// interface to lalex/tlex
extern TOK	la_look();
extern void	la_backup( TOK, YYSTYPE );
extern int	la_cast();
extern int	la_decl();
extern TOK	lalex();

extern int	declTag;	 // !1: inline, virtual mod permitted
Ptype 		in_typedef = 0;  // catch redefinition of TNAME
Pname		in_tag = 0;      // handle complex typedefs: int (*)()
extern int	defer_check;	 // redefinition typedef check delay

extern int 	must_be_id;	 // !0, TNAME => ID, i.e., int X
extern int 	must_be_expr;	 // in constructor base class/const member
				 // expression list.
int 		DECL_TYPE = 0; 	 // lalex() wants this set for global x(*fp)()
int 		in_arg_list=0; 	 // !0 when parsing argument list
int 		in_class_decl=0; // !0 when parsing class definition
int 		in_mem_fct=0;    // !0 when parsing member function definition

#define yylex lalex
#define NEXTTOK() ( (yychar==-1) ? (yychar=yylex(),yychar) : yychar )
#define EXPECT_ID() must_be_id = 1
#define NOT_EXPECT_ID() must_be_id = 0

Pname syn()
{
ll:
	switch (yyparse()) {
	case 0:		return 0;	// EOF
	case 1:		goto ll;	// no action needed
	default:	return yyval.pn;
	}
}

# define EOFTOK 0
# define ASM 1
# define AUTO 2
# define BREAK 3
# define CASE 4
# define CONTINUE 7
# define DEFAULT 8
# define DELETE 9
# define DO 10
# define ELSE 12
# define ENUM 13
# define FOR 16
# define FORTRAN 17
# define FRIEND 18
# define GOTO 19
# define IF 20
# define NEW 23
# define OPERATOR 24
# define RETURN 28
# define SIZEOF 30
# define SWITCH 33
# define THIS 34
# define WHILE 39
# define LP 40
# define RP 41
# define LB 42
# define RB 43
# define REF 44
# define DOT 45
# define NOT 46
# define COMPL 47
# define MUL 50
# define AND 52
# define PLUS 54
# define MINUS 55
# define LT 58
# define GT 60
# define ER 64
# define OR 65
# define ANDAND 66
# define OROR 67
# define QUEST 68
# define COLON 69
# define ASSIGN 70
# define CM 71
# define SM 72
# define LC 73
# define RC 74
# define ID 80
# define STRING 81
# define ICON 82
# define FCON 83
# define CCON 84
# define NAME 85
# define ZERO 86
# define ASOP 90
# define RELOP 91
# define EQUOP 92
# define DIVOP 93
# define SHIFTOP 94
# define ICOP 95
# define TYPE 97
# define TNAME 123
# define EMPTY 124
# define NO_ID 125
# define NO_EXPR 126
# define FDEF 127
# define ELLIPSIS 155
# define AGGR 156
# define MEM 160
# define MEMPTR 173
# define PR 175
# define TSCOPE 178
# define DECL_MARKER 179
# define REFMUL 180
# define LDOUBLE 181
# define LINKAGE 182
# define LOCAL 183
# define TEMPLATE 185
# define XVIRT 200
# define XNLIST 201
# define XILINE 202
# define XIA 203
# define STATEMENT 205
# define EXPRESSION 206
# define SM_PARAM 207
# define TEMPLATE_TEST 208
# define PTNAME 209
# define NEW_INIT_KLUDGE 210
# define XDELETED_NODE 211
# define DUMMY_LAST_NODE 212
# define PATHOF 348
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
extern int yychar;
extern short yyerrflag;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif
YYSTYPE yylval, yyval;
# define YYERRCODE 256

# line 1917 "gram.y"



static void
check_cast()
/*
	Lookahead to direct parsing of cast
	la_cast() returns 1 if lookahead sees an ambiguous old-style C cast.
*/
{
	switch( NEXTTOK() ) {
	case TYPE: case TNAME:
	    if ( la_look() == LP && la_cast() ) {
		must_be_id = 0;
		yychar = DECL_MARKER;
	    }
	}
}

static void
check_decl()
/*
	Lookahead to direct parsing of local/arg type declarations
	la_decl() returns 1 if lookahead sees a declaration.
*/
{

	switch( NEXTTOK() ) {
	case TYPE: case TNAME:
	    if ( la_look() == LP && la_decl() ) {
		must_be_id = 0;
		DECL_TYPE=yychar;
		yychar = DECL_MARKER;
	    }
	}
}

static void
check_tag()
/*
        Allow the case of inline/virtual/overload as 
        modifiers of return type of form struct/class/union x foo() 
        SM, COLON, LC ==> real class declaration, not return type
*/
{
	switch ( NEXTTOK() ) {
	case SM: case COLON: case LC:
    		declTag = 1;
    		break;
	default:
    		declTag = 0;
    		break;
        }
}

short yyexca[] ={
-1, 1,
	0, -1,
	-2, 0,
-1, 26,
	40, 48,
	42, 48,
	46, 48,
	-2, 53,
-1, 51,
	71, 38,
	72, 38,
	-2, 37,
-1, 67,
	155, 359,
	-2, 294,
-1, 72,
	13, 353,
	97, 353,
	123, 353,
	155, 353,
	156, 353,
	179, 353,
	182, 353,
	-2, 294,
-1, 126,
	73, 95,
	-2, 91,
-1, 277,
	13, 344,
	97, 344,
	123, 344,
	156, 344,
	179, 344,
	182, 344,
	-2, 294,
-1, 299,
	1, 194,
	3, 194,
	4, 194,
	7, 194,
	8, 194,
	9, 194,
	10, 194,
	13, 194,
	16, 194,
	19, 194,
	20, 194,
	23, 194,
	24, 194,
	28, 194,
	30, 194,
	33, 194,
	34, 194,
	39, 194,
	40, 194,
	46, 194,
	47, 194,
	50, 194,
	52, 194,
	54, 194,
	55, 194,
	72, 194,
	73, 194,
	80, 194,
	81, 194,
	82, 194,
	83, 194,
	84, 194,
	85, 194,
	86, 194,
	95, 194,
	97, 194,
	123, 194,
	156, 194,
	160, 194,
	178, 194,
	179, 194,
	182, 194,
	207, 194,
	209, 194,
	-2, 0,
-1, 324,
	40, 49,
	42, 49,
	46, 49,
	-2, 54,
-1, 353,
	60, 20,
	71, 20,
	-2, 106,
-1, 354,
	60, 19,
	71, 19,
	-2, 105,
-1, 385,
	13, 344,
	97, 344,
	123, 344,
	156, 344,
	179, 344,
	182, 344,
	-2, 294,
	};
# define YYNPROD 374
# define YYLAST 3034
short yyact[]={

 188, 506, 148, 547, 498, 485, 175,   9, 205,  16,
  48, 339,  68, 150,  64, 505,  10,  11, 301, 395,
 182, 356, 233, 161, 327, 227, 202, 203,  65,  89,
 315,  90,  73, 404, 185, 226, 122, 159, 186, 123,
  74,  24, 324,  60,  20, 310, 400,  49,  71,  88,
 397, 225,  34, 174,  35, 211, 303,  24,  67, 201,
  34, 462,  35, 145,  24,  24, 139,  78,  73, 302,
 192, 610, 123, 177, 129, 292, 190, 122,  85,  22,
 131, 354, 357, 190,  71, 322, 204, 130, 204, 514,
  50, 307,  67, 194, 214,  73, 135, 124, 293,  83,
  38, 121,  80,  36,  12, 120, 136,  83, 126, 304,
  34,  71,  35, 144,  30, 573, 228, 486, 457,  36,
 197, 129,  67, 414, 353,  67,  36,  36, 130, 311,
 134, 130, 217, 544,  16, 345, 204, 489, 436, 204,
 316, 218, 299, 219, 244, 204, 236, 206, 177, 264,
 132, 558,  61, 279, 280, 281, 282, 283, 284, 285,
 286, 287, 289, 275, 169,  33,  24, 296,  32, 249,
 290, 127, 288, 278, 134,  37, 298, 276, 170, 241,
 128,  33,  24,  37, 337, 242, 133,  76,  33,  33,
  28,  31,  17, 240, 564, 230, 280,  27, 239, 229,
 294,  45, 295, 345, 245, 222, 344,  57, 546,  51,
 313,  44, 255, 397,  56, 405,  81,  84,  24,  44,
 213, 141, 142,  34, 198,  35, 204, 128,  36, 326,
 220, 318, 306,  37, 168, 442, 304,  24, 427,  30,
 325,  30, 360, 426,  36, 352, 355, 362, 363, 364,
 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
 375, 376, 377, 378, 379, 347, 380, 336, 330,  44,
 381, 386, 359, 348,  32, 389, 349,  61, 291,  61,
  36, 340, 383, 325,  67, 343, 333, 290, 361, 332,
  33, 279, 278, 213, 428, 392, 384,  31, 393,  36,
 304, 350, 329, 406, 312,  30,  33, 204, 213, 387,
 346, 390, 351, 325,  43, 213, 580, 401, 402, 190,
 579, 554, 398, 407, 399, 552, 204,  38, 415,  69,
  77, 432,  42,  70, 243,  66, 334,  69, 224, 213,
 424,  70,  33,  61, 416, 411,  37, 435, 419, 420,
  86, 413, 423, 425,  75, 138, 137, 417, 318, 318,
 236,  33, 304,  44,  67, 140, 409,  30,  57, 439,
 243, 434,  87, 335, 438,  56,  41, 199, 143, 342,
 441,  57,  44, 445,  75, 440, 433,  76,  56, 323,
 208, 624,  34, 213,  35,  66,  57,  69, 429, 431,
  69,  70, 488,  56,  70,  61, 446, 274, 450, 270,
  43, 271, 273,  66, 548,  69, 452, 453, 481,  70,
 213, 213, 459, 455, 454, 458,  23,  57,  42, 460,
 449, 213, 415, 415,  56,  38, 464,  69, 424,  83,
 467,  70, 448, 421, 478,  63, 476, 479, 416, 416,
 465, 466, 461, 471, 439, 472, 463, 341, 410,  44,
  25, 213, 269, 482, 321, 450, 450, 304, 308, 231,
 440, 207,  30, 278,  66, 422,  69, 483,  24, 181,
  70,  57, 575, 493, 430, 340, 180, 468,  56, 469,
 522, 550,  38, 408, 504, 494,  16, 497, 296, 213,
 213, 523, 524, 545, 297, 278,  46, 139, 623, 495,
  61, 268, 549, 496, 551,  37, 578,  24,  67,  40,
  66, 200,  69, 576, 616,  38,  70,  69, 590, 553,
 268,  70, 274,  67, 270, 588, 271, 273, 484,  69,
  36, 586,  29,  70, 212, 179, 526, 272, 582, 584,
  34,  44,  35, 583, 589, 585, 574, 587, 522, 522,
 522, 522, 522, 522, 522, 522, 522, 522, 522, 522,
 522, 522, 522, 522, 522, 522, 172,  19, 611,  36,
 609, 612, 522, 522, 614,  30, 504, 269,  16, 403,
 176, 491, 618,  55, 619, 490, 621, 209, 267, 558,
  82,  19,  33, 556, 557, 451,  69, 437, 232, 119,
  70,  47, 268,   8, 626,   7, 338, 317,  72, 629,
  69, 223, 628,  61,  70, 522, 630, 632, 633, 558,
 477, 235, 328, 556, 557, 473, 637, 636,  41, 212,
 309,  33, 564, 562, 639, 591, 592, 593, 594, 595,
 596, 597, 598, 599, 600, 601, 602, 603, 604, 605,
 606, 607, 608, 358, 470,  38, 183,  57, 187, 492,
 615, 117, 564,  37,  56,  34, 160,  35,  32, 184,
 149, 170, 499, 487, 456,  52, 216, 158, 558, 125,
  41, 167, 556, 557, 210,  39, 567, 173, 566,  18,
   1,  31,  19, 155, 156, 316, 300,   2,   0,  44,
  30,  38, 631,   0,   0,  41,   0, 396,  19,   0,
   0,  34,  54,  35,   0,   0,   0,   0,   0, 565,
 563, 564, 562,   0,  77,   0,   0,   0, 165, 163,
 164, 166,  30, 162, 317, 317, 178, 119,  61,   0,
   0, 316, 157, 305,  55, 328,  30, 519,   0, 515,
 512,  41,   0, 516, 513, 520, 518, 314,  83,  41,
   0,   0, 509,  19,  25, 517, 507,  79,   0, 149,
 170,  40, 314,   0, 502, 358, 158, 249, 173, 510,
 167, 247, 248,   0,  61, 508, 173,   0,  37,  25,
 180, 305, 155, 156,  58,   0, 151,   0, 152,   0,
 154, 153,   0, 314,  43,   0,   0, 266,  41,   0,
   0,   0, 249, 396, 396, 180, 247, 248, 500, 299,
 255, 253,  42,  40,  44,  42, 511, 165, 163, 164,
 166,  30, 162,   0,  37,  25,   0,   0, 388,   0,
 391, 157,   0, 503,   0,   0,  29,   0, 234, 179,
   0,   0,   0,  44,   0, 255,  44, 314, 146, 119,
   0, 180,  41,   0,   0,  32,   0,   0,   0,  26,
  44,  29, 149, 170, 179,   0,   0,   0,  41, 158,
   0,  38,   0, 167, 418,   0,   0,   0,  31, 173,
   0,  34,  25,  35,  40, 155, 156, 237, 238, 151,
   0, 152,  40, 154, 153, 385, 521,   0, 305, 305,
  62,   0,   0,   0,   0,   0,  41,  29, 180,   0,
 179,  59, 189,   0,  42,  29,  30,   0, 179, 168,
 165, 163, 164, 166,  30, 162,   0,   0,   0,   0,
   0,   0,   0, 277, 157,   0, 191,   0,   0,   0,
 412,  40,   0, 501,   0,  44,   0,   0,   0,   0,
   0,   0,  25,   0,  61, 146,   0,   0,   0,  41,
   0,   0,  26, 305,  29,   0,   0, 179,   0, 149,
 170,   0,   0,   0,   0,   0, 158,   0, 180,   0,
 167,   0,   0,   0,   0, 305, 173, 305,   0, 305,
  25,  43, 155, 156,  19,  40, 151,   0, 152, 147,
 154, 153,   0,   0,  37,   0,   0,   0,   0,  42,
   0,  40,   0,   0,   0,   0, 180,  42,  29,   0,
   0, 179,   0,   0,   0,   0, 168, 165, 163, 164,
 166,  30, 162,  55,  29,   0,   0, 179,   0,   0,
  44, 157,   0, 191,   0, 146,   0,   0,  44,  40,
   0,   0,   0, 558,   0, 559,   0, 556, 557, 149,
 170, 567,   0, 566,   0,   0, 158, 561, 560,  26,
 167,   0,  29,  41,   0, 179, 173,   0,   0,   0,
   0,   0, 155, 156,   0,   0, 151,   0, 152,   0,
 154, 153,   0,   0, 565, 563, 564, 562,   0,   0,
 397,   0,  40,   0,   0,   0, 147,   0,   0, 189,
  34,   0,  35,   0,   0, 146, 168, 165, 163, 164,
 166,  30, 162,   0,  42,  29,   0,   0, 179, 149,
 170, 157,   0, 171,  41,   0, 158,   0,   0,   0,
 167,   0,   0,   0,   0,  30, 173, 195,   0,   0,
   0,   0, 155, 156,   0,  44, 193,  54, 152,  61,
 154, 153,   0,   0,   0,   0,   0,   0,   0,   0,
   0,  34,   0,  35,   0,   0,   0,   0,   0, 189,
   0,   0,   0,  61, 146,   0, 168, 165, 163, 164,
 166,  30, 162,   0,   0,   0, 147,   0, 149, 170,
   0, 157,   0,   0,   0, 158,  30,   0,   0, 167,
   0,   0,   0,   0,  42, 173,  40,   0,  54,   0,
   0, 155, 156,   0,   0, 151,   0, 152,   0, 154,
 153,   0,   0,  37,   0,   0,   0,   0,   0,  58,
   0,   0,   0,   0,  61,  44,   0,   0,   0,   0,
 520,   0,   0,   0,   0, 168, 165, 163, 164, 166,
  30, 162,   0,   0, 149, 170, 147,   0,   0,  44,
 157, 158, 171,   0,   0, 167,   0,  40,   0, 196,
   0, 173,   0,   0,  42,   0,   0, 155, 156,   0,
   0, 151,   0, 152,  37, 154, 153,   0,  61, 249,
  58, 250,   0, 247, 248,   0,   0, 257,   0, 258,
   0,   0,   0, 252, 251,  44,   0,   0,   0,   0,
   0, 168, 165, 163, 164, 166,  30, 162,   0,   0,
  44,   0,   0,   0,   0, 147, 157,   0, 171,   0,
 256, 254, 255, 253,   0,   0,  41,   0, 149, 170,
   0,   0, 558,  42, 559, 158, 556, 557,   0, 167,
 567,   0, 566,   0,  61, 173, 561, 613,   0,   0,
   0, 155, 156,   0,   0, 151,   0, 152,   0, 154,
 153,   0,   0,  34,  44,  35,   0,   0,   0,   0,
   0,   0,   0, 565, 563, 564, 562,   0,   0,   0,
   0, 521,   0,   0,   0, 168, 165, 163, 164, 166,
  30, 162,   0, 357, 149, 170,   0,   0,  30,  42,
 157, 158, 171,   0,   0, 167,   0,   0,   0,   0,
  54, 173,   0, 577,   0,   0,   0, 155, 156,   0,
   0, 151,   0, 152,   0, 154, 153,   0,  61, 558,
  44, 559,   0, 556, 557,   0,  61, 567,   0, 566,
   0,   0,   0, 561, 560, 568, 569, 572,   0,   0,
   0, 168, 165, 163, 164, 166,  30, 162,   0,   0,
   0,   0,   0,   0,   0, 266, 157,   0, 171,  40,
 565, 563, 564, 562,   0,   0,   0,   0, 149, 170,
   0,   0,   0,  42,   0, 158,  37,   0,   0, 167,
   0,   0,  58,   0,  61, 173,   0, 382,   0,   0,
   0, 155, 156,   0,   0, 151,   0, 152,   0, 154,
 153,   0,   0,   0,  44, 249,   0, 250,   0, 247,
 248,   0,  44, 257,   0, 258,   0,   0,   0, 252,
   0, 266,   0,   0,   0, 168, 165, 163, 164, 166,
  30, 162,   0,   0, 149, 170,   0,   0,   0,  42,
 157, 158, 171,   0,   0, 167, 256, 254, 255, 253,
   0, 173,   0, 265,   0,   0,   0, 155, 156,   0,
 638, 151,   0, 152,   0, 154, 153,   0,  61, 249,
  44, 250,   0, 247, 248,   0,   0, 257,   0, 258,
   0,   0,   0, 252, 251, 259, 260, 263,   0, 246,
 262, 168, 165, 163, 164, 166,  30, 162,   0,   0,
   0,   0,   0,   0,   0, 266, 157,   0, 171, 261,
 256, 254, 255, 253,   0,   0,   0,   0, 149, 170,
   0,   0, 249,  42, 250, 158, 247, 248,   0, 167,
 257,   0, 258,   0,  61, 173, 252, 251, 259, 260,
 263, 155, 156,   0,   0, 151,   0, 152,   0, 154,
 153,   0,   0,   0,  44,   0,   0,   0,   0,   0,
   0,   0,   0, 256, 254, 255, 253,   0,   0,   0,
 146, 266,   0,   0,   0, 168, 165, 163, 164, 166,
  30, 162,   0,   0, 149, 170,   0,  41,   0,  42,
 157, 158, 171,   0,   0, 167,   0,   0,  32,   0,
   0, 173,   0,   0,   0,   0,   0, 155, 156,   0,
   0, 151,   0, 152,  38, 154, 153,   0,  61,   0,
  44,  31,   0, 558,  34, 559,  35, 556, 557,   0,
   0, 567,   0, 566, 189,   0,   0, 561, 560, 568,
   0, 168, 165, 163, 164, 166,  30, 162,   4,  13,
   0, 149, 170,   0,  21, 266, 157,   0, 158,  30,
   0,  41, 167,   0, 565, 563, 564, 562, 173,   0,
   0,  25,  32,  42, 155, 156,   0,   0, 151,   0,
 152,   0, 154, 153,   0,   0,   0,   0,  38,   0,
   0,   0,   0,   0,   0,  31,   0,  26,  34,   0,
  35,   0,   0,   0,  44,   0,   0,   0, 320, 165,
 163, 164, 166,  30, 162,   0,   0,   0,   0,   0,
   3, 147,   6, 157,   0, 171,   0,   0,  21,   0,
  40,   0,   0,  30,  43,  41,   0,   0,   0,  42,
   0,   0,   0,   0,   0,  25,  32,  37,   0,   0,
   0,  61,  42,  29,   0,   0, 179,   0,   0,   0,
   0,   0,  38,   0,  41,   0,   0,   0,   0,  31,
  44,  26,  34,   0,  35,  32,   0,   0,   0, 474,
 475,   0,   0,  44,   0,   0,   0,   0, 266,   0,
   0,  38,   0,   0,   0,   0, 215,   0,  31,   0,
   0,  34,  21,  35,  40,  41,  42,  30,  43,   0,
   0,   0,   0,   0,   0,   0,  32,   0,   0,  25,
  62,  37,   0,  53,   0,   0,  42,  29,   0,   0,
   5,  59,  38,  14,   0,   0,  30,  44,  32,  31,
   0,   0,  34,   0,  35,  26,   0,   0,  54,   0,
   0,   0,   0,   0,  38,   0,  15,  44,   0,   0,
  32,  31,   0,   0,  34, 558,  35,   0,   0, 556,
 557,   0,  21, 567,  61, 566,  38,  30,  40,   0,
   0,   0,  43,  31,   0,   0,  34,   0,  35,  54,
   0,   0,   0,   0,  21,  37,   0, 221,   0,  30,
  42,  29,   0,   0, 179,   0, 565,  40, 564, 562,
   0,  43,   0,   0,   0,  61,  21,   0,   0,   0,
   0,  30,   0,   0,  37,   0,   0,   0,   0,  42,
  58,  44,   0,  83,   0,   0,   0,  61,   0, 249,
   0, 250,   0, 247, 248,   0,   0, 257,  40, 258,
   0,   0,  43, 252, 251, 259,   0,   0,   0,  61,
  44,   0,   0,   0,   0,  37,   0,   0,   0,   0,
  42,  58,   0,   0,  43, 113,   0,   0,   0,   0,
 256, 254, 255, 253,   0,   0,   0,  37,   0, 112,
   0,   0,  42,   0,   0,   0,  43,   0,   0,   0,
   0,  44,   0,   0,   0,   0, 105,   0, 106,  37,
 114,   0, 107, 108,  42,   0,  93,   0,  94,   0,
  91,  92,   0,  44, 101,   0, 102,   0,   0,   0,
  96,  95, 103, 104,   0,   0, 111, 115,   0,   0,
   0,   0,   0,   0, 558,  44, 559,   0, 556, 557,
   0,  30, 567,   0, 566,   0, 110, 100,  98,  99,
  97, 109,   0, 118, 542,   0, 532, 538,   0,   0,
 533, 539,   0, 531,   0,   0,   0,   0,   0, 529,
   0,   0, 534, 527,   0, 565, 563, 564, 562,  61,
 249, 535,   0,   0, 247, 248, 528,   0, 257,   0,
 258,   0, 530,   0,   0,   0,   0, 249,   0, 250,
   0, 247, 248,   0,   0, 257,   0, 258,   0,   0,
   0, 252, 251, 259, 260, 263,   0, 246, 262, 635,
   0, 256, 543, 255, 253, 525,   0, 537,   0,   0,
   0,   0,   0, 536,   0,   0, 116, 261, 256, 254,
 255, 253, 634,   0,   0,   0,   0,   0,   0, 249,
 540, 250,   0, 247, 248,   0,   0, 257,   0, 258,
   0,   0,   0, 252, 251, 259, 260, 263,   0, 246,
 262,   0,   0,   0,   0,   0, 541, 249,   0, 250,
   0, 247, 248,   0,   0, 257,   0, 258,   0, 261,
 256, 254, 255, 253, 558,   0, 559,   0, 556, 557,
   0,   0, 567,   0, 566,   0,   0,   0, 561, 560,
 568, 569, 572,   0, 555, 571, 627,   0, 256, 254,
 255, 253,   0, 249,   0,   0,   0, 247, 248,   0,
   0, 257, 625, 258, 570, 565, 563, 564, 562, 249,
   0, 250,   0, 247, 248,   0,   0, 257,   0, 258,
   0,   0,   0, 252, 251, 259, 260, 263,   0, 246,
 262,   0,   0,   0, 256, 254, 255, 253,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0, 261,
 256, 254, 255, 253, 558,   0, 559,   0, 556, 557,
   0,   0, 567,   0, 566,   0,   0,   0, 561, 560,
 568, 569, 572, 622, 555, 571,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0, 570, 565, 563, 564, 562, 249,
   0, 250,   0, 247, 248,   0,   0, 257,   0, 258,
   0,   0,   0, 252, 251, 259, 260, 263, 620, 246,
 262,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0, 617,   0,   0,   0, 261,
 256, 254, 255, 253, 249,   0, 250,   0, 247, 248,
   0,   0, 257,   0, 258,   0,   0,   0, 252, 251,
 259, 260, 263,   0, 246, 262,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0, 261, 256, 254, 255, 253, 249,
   0, 250,   0, 247, 248,   0,   0, 257,   0, 258,
   0,   0,   0, 252, 251, 259, 260, 263,   0, 246,
 262, 581,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0, 480,   0, 261,
 256, 254, 255, 253, 249,   0, 250,   0, 247, 248,
   0,   0, 257,   0, 258,   0,   0,   0, 252, 251,
 259, 260, 263,   0, 246, 262,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0, 447,   0, 261, 256, 254, 255, 253, 249,
   0, 250,   0, 247, 248,   0,   0, 257,   0, 258,
   0,   0,   0, 252, 251, 259, 260, 263,   0, 246,
 262,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0, 444,   0, 261,
 256, 254, 255, 253, 249,   0, 250,   0, 247, 248,
   0,   0, 257,   0, 258,   0,   0,   0, 252, 251,
 259, 260, 263,   0, 246, 262,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0, 261, 256, 254, 255, 253, 249,
   0, 250,   0, 247, 248,   0,   0, 257,   0, 258,
   0,   0,   0, 252, 251, 259, 260, 263, 443, 246,
 262,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0, 394,   0,   0,   0, 261,
 256, 254, 255, 253, 249,   0, 250,   0, 247, 248,
   0,   0, 257,   0, 258,   0,   0,   0, 252, 251,
 259, 260, 263,   0, 246, 262,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0, 319,   0, 261, 256, 254, 255, 253, 249,
   0, 250,   0, 247, 248,   0,   0, 257,   0, 258,
   0,   0,   0, 252, 251, 259, 260, 263,   0, 246,
 262,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0, 261,
 256, 254, 255, 253, 558,   0, 559,   0, 556, 557,
   0,   0, 567,   0, 566,   0,   0,   0, 561, 560,
 568, 569, 572,   0, 555, 571,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0, 570, 565, 563, 564, 562, 558,
   0, 559,   0, 556, 557,   0,   0, 567,   0, 566,
   0,   0,   0, 561, 560, 568, 569, 572, 249, 555,
 250,   0, 247, 248,   0,   0, 257,   0, 258,   0,
   0,   0, 252, 251, 259, 260, 263,   0, 246, 570,
 565, 563, 564, 562,   0,   0,   0,   0,   0, 249,
   0, 250,   0, 247, 248,   0,   0, 257, 261, 256,
 254, 255, 253, 252, 251, 259, 260, 263,   0, 246,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0, 261,
 256, 254, 255, 253 };
short yypact[]={

1798,-1000,-1000,-1000,-1000, 128,-1000,-1000,-1000,-1000,
-1000,-1000,-1000, 466,-1000, -33,1901, 373,-1000, 578,
-1000, 339, 654,1986,1964,-1000, 292,-1000,-1000,-1000,
 314, -74,2116,-1000,   8,   4,-101,   0,-1000,-1000,
  48,   7,-1000,-1000, 292,-1000,  25, 298, 297,-1000,
-1000, 295, 150,-1000,-1000, 578,-1000,-1000,-1000, 309,
-1000, 292,1195,-1000, 677,-1000, 438, 859,-1000,1195,
-1000,-1000,1126,-1000, 363, 144,-1000, 332,-1000,-1000,
-142, 355, 578,-1000, 480, 966,-1000, 966,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000, 430, 347,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,-1000, 500,-1000,-1000,
-1000,-1000,-1000,  -3,-1000,1872, 269, 292,-1000,-1000,
-1000,  36, 126,-1000,-1000, 966, 428, 702, 966, 677,
1056, 851,-1000,1195, 966,2908,1561, 589, 367, 913,
1645,1645,1645,1645,1645,1645,1645,1645,1645,-1000,
-1000, 966,-1000,-1000,-1000,-1000,-1000,-1000,-1000,  51,
2116, 458, 464,-1000,  69,-1000,  29,1901,-1000,-1000,
 292,  -6, 427, -26, 233,-1000,-1000,-1000,2908,1056,
 625, 458,2799,1778, 423, -12,1964,-1000,-1000,-1000,
-1000, 169,-1000,-1000,2939,1141, 242,-1000,-1000,-1000,
-1000,-1000, 342,-134,-1000,-1000,-1000,-1000, 217, 214,
-1000, 267, 250, 111, 282, 966, 132,-1000, 240,  36,
 169, 204, 241,-1000,   1, -33,1353,-1000,-1000, 212,
  69,-1000,-1000, 295,2908, 169,1195,1195,1195,1195,
1195,1195,1195,1195,1195,1195,1195,1195,1195,1195,
1195,1195,1195,1195, 367,1195, 488,1495, 875,-1000,
1195, 154,1645, 154,1056,-1000,-1000,1711, 363, 492,
 367, 367, 367, 367, 492, 492, 492, 492, 657,2754,
1080,-1000,2116, -77,-1000,-1000,1056,1056,-1000, -41,
 232,-1000,1056, 453,-1000,-1000, 966,-1000,-1000, 417,
 805,-1000,1056,  49,-1000, 287,-1000, 671,  60,-1000,
 402,-1000,-1000, 434,-1000, 966,-1000, 358, 342,-1000,
-1000,-1000,-1000,-1000,-1000, 171, 166,-1000, 223,-1000,
-1000, 387, 156, 169,-1000,  36,1195,  64,-1000,-1000,
-1000, 702,-1000, 292,-1000,-1000, 485,-1000,   2, 163,
-1000,-1000,2908, 119, 119,-1000,2333,1505,2287, 772,
2190,-1000, 737, 737, 737,1269,2039,2908,2908,2709,
2664, 367,1195,-1000,-1000,1711,2619,-1000,-1000, 492,
-1000,-1000, 401, 389,-1000, 564,  10, 173,-1000,-1000,
-1000, 383, 382,-1000,-1000,  44,  29, 381,1056, 169,
 -36,-1000,-1000,-1000,-1000,-1000,-1000,1056,-1000, 485,
 395, 452, 452,-1000,-1000, 358,-1000,-1000, 282,-1000,
 220,-1000, 220,-1000,-1000,2908,-1000,1724,-1000,-1000,
-1000, 485,-1000,1195,1645,2574, 377,-1000,-1000, 748,
-1000,-1000, 358, 497,-1000,-1000,  43,-1000,-1000,-1000,
 361,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,  65,-1000,-1000,1942, 355,1622, 367,
1645, 748,-1000,-1000, 485,-1000,-1000, 756,-1000,-1000,
 -33, -33, 355, 367,-1000,-1000,-1000,-1000,-1000,2213,
-1000,  61,1195, 127,-1000,-1000,-1000, 374, 374, 451,
 374, 256,-1000, 252,2844,-1000,-1000,  35,-1000, 442,
1411, 507, 367, 251, 247,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,2529,  69,-1000,1195,-1000,
-1000,-1000,-1000,1195,-1000,1261,1261,1261,1261,1261,
1261,1261,1261,1261,1261,1261,1261,1261,1261,1261,
1261,1261,1261,-1000,-1000, -10, 367,1195,1345, 756,
1261,-1000,-1000, 512,2484,-1000,-1000,-1000,-1000,2439,
-1000,2889, 101, 101,-1000, 638,1322,2144, 579,1965,
-1000, 549, 549, 549,1023,1723,2889,2889,2394, 469,
 350,2349, 367,1195,-1000,2304,-1000,-1000,1195,-1000,
-1000,-1000,1261, 374,-1000,1645,2259,-1000,-1000,2207,
-1000,1419,-1000, 367,1645,1195, 367,1569,-1000,-1000 };
short yypgo[]={

   0, 707, 104,  17,  15,  14,  53, 706,  18,   6,
 700,  12, 426,   8, 699, 190,  35,  25, 108,  56,
 695, 197, 689, 686,  43, 685,  44, 192,  38, 684,
   5, 683,   1,   4, 682, 679,  20,   0,  89,   2,
  37, 676,  19,  13,  55,  31, 671,  30,  21,  34,
 668,  28, 666,  24,  27,   3, 164, 576, 102,  79,
 664,  29, 640, 631,  10, 621, 616,  11,  26,  59,
 615, 613, 611, 608, 607, 595, 591, 590,  51,  42,
  22,  40, 589, 556, 546, 541, 535, 529, 528,  23 };
short yyr1[]={

   0,  10,  10,  10,  10,  10,  10,  10,  71,  72,
  74,  70,  60,  60,  60,  75,  60,  76,  60,  64,
  64,   1,   1,   1,   1,   1,   2,   4,   3,  77,
   6,   6,   7,   7,   8,   8,   5,   5,  24,  24,
  24,  24,  25,  25,   9,   9,  78,  79,  57,  57,
  57,  14,  14,  14,  14,  14,  14,  14,  13,  13,
  13,  13,  13,  13,  69,  69,  68,  68,  15,  15,
  15,  15,  16,  16,  73,  73,  73,  63,  63,  80,
  80,  80,  48,  48,  48,  48,  17,  17,  17,  21,
  21,  21,  21,  21,  65,  65,  66,  66,  67,  67,
  67,  67,  67,  20,  20,  18,  18,  19,  19,  22,
  22,  23,  23,  23,  23,  23,  23,  23,  23,  23,
  26,  26,  26,  26,  61,  61,  61,  61,  61,  61,
  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,
  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,
  59,  59,  59,  27,  27,  27,  27,  27,  27,  27,
  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,
  27,  27,  47,  47,  47,  47,  47,  47,  47,  53,
  53,  53,  42,  42,  42,  42,  42,  44,  44,  29,
  29,  30,  31,  55,  82,  32,  32,  32,  34,  34,
  34,  34,  83,  34,  34,  84,  84,  84,  84,  84,
  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,
  84,  84,  33,  33,  33,  33,  33,  33,  33,  33,
  33,  33,  33,  33,  85,  33,  33,  86,  33,  87,
  33,  88,  33,  36,  35,  35,  28,  28,  38,  38,
  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,
  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,
  38,  37,  37,  37,  37,  37,  37,  37,  37,  37,
  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,
  37,  37,  37,  37,  37,  39,  39,  39,  39,  39,
  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
  39,  39,  39,  39,  39,  41,  41,  41,  41,  41,
  41,  41,  58,  56,  56,  56,  40,  40,  40,  40,
  40,  40,  40,  43,  89,  46,  46,  46,  46,  45,
  54,  50,  50,  81,  51,  51,  52,  52,  49,  49,
  62,  62,  62,  12,  12,  12,  12,  12,  12,  12,
  12,  12,  11,  11 };
short yyr2[]={

   0,   1,   1,   1,   2,   1,   1,   1,   6,   0,
   0,   7,   1,   1,   2,   0,   5,   0,   6,   1,
   1,   1,   1,   1,   1,   5,   2,   5,   4,   1,
   2,   0,   1,   3,   3,   4,   2,   0,   1,   3,
   2,   3,   1,   3,   3,   2,   1,   1,   1,   4,
   4,   1,   1,   1,   4,   1,   1,   1,   1,   2,
   2,   2,   2,   2,   3,   1,   1,   1,   4,   5,
   2,   2,   1,   3,   3,   1,   0,   1,   1,   2,
   2,   2,   1,   2,   2,   2,   1,   3,   0,   3,
   4,   2,   5,   2,   2,   0,   1,   3,   1,   2,
   2,   3,   3,   2,   4,   1,   1,   1,   1,   2,
   0,   1,   2,   2,   1,   1,   1,   2,   3,   3,
   1,   2,   2,   2,   1,   1,   1,   1,   1,   1,
   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,
   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
   1,   2,   3,   2,   3,   4,   2,   4,   6,   4,
   3,   4,   6,   1,   3,   2,   2,   2,   2,   2,
   2,   3,   1,   2,   0,   2,   2,   2,   3,   0,
   2,   2,   0,   2,   2,   4,   4,   0,   2,   0,
   2,   2,   0,   3,   0,   4,   2,   3,   1,   1,
   1,   2,   0,   5,   4,   1,   1,   1,   1,   1,
   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
   1,   1,   2,   2,   1,   2,   3,   3,   1,   1,
   1,   3,   5,   3,   0,   9,   3,   0,   4,   0,
   5,   0,   4,   1,   1,   3,   1,   3,   3,   3,
   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,
   3,   3,   3,   3,   3,   5,   2,   5,   3,   6,
   1,   3,   3,   3,   3,   3,   3,   3,   3,   3,
   3,   3,   3,   3,   3,   3,   3,   3,   5,   2,
   5,   3,   6,   1,   0,   2,   2,   3,   3,   2,
   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
   4,   3,   3,   3,   3,   3,   1,   1,   3,   1,
   1,   1,   1,   1,   1,   4,   4,   5,   5,   6,
   6,   4,   4,   1,   1,   2,   1,   2,   2,   3,
   2,   3,   3,   4,   1,   1,   1,   2,   2,   2,
   2,   2,   4,   1,   4,   5,   3,   1,   1,   0,
   0,   1,   2,   1,   1,   2,   2,   2,   2,   1,
   3,   2,   3,   1 };
short yychk[]={

-1000, -10,  -1,  72,   0, 182,  74, -70, -71,  -9,
  -4,  -3,  -2,   1, 185, 208, -13, -27, -14, -57,
 -26,  80, -59, -12, -81,  97, 123, -21, -15, 179,
  85,  47,  24, -56,  50,  52, -58, 173,  40, -20,
 156,  13, 178, 160, 209,  73,  40, -72, -64,  80,
 123, -27, -25,  72,  97, -57, -21, -15, 179,  80,
 -24, 123,  69,  72,  -5, -51,  40, -81, -11,  42,
  46, -51,  40, -11, -81,  45, -56,  80, -26, 123,
 -58, -27, -57,  97, -27, -78,  58,  58, 123, -61,
 -45,  54,  55,  50,  52,  65,  64,  94,  92,  93,
  91,  58,  60,  66,  67,  40,  42,  46,  47,  95,
  90,  70,  23,   9,  44,  71, 180, -46,  97, -57,
  97,  97, 178, 173,  97, -22, -18, 123, 179,  73,
  80,  73, -18, 179, 123, -78,  81,  58,  58,  -5,
  70,  71,  72,  69, -78, -37,   9, 160, -39,  23,
 -43,  50,  52,  55,  54,  46,  47,  95,  30, -40,
 -41, -89,  86,  82,  83,  81,  84,  34,  80, -56,
  24,  97, -57,  40,  -6,  -9, -77, -13,  69, 182,
 123,  41, -36, -52, -35, -49, -28, -50, -37,  73,
 -13,  97, -37,  50, -36,  41, 173, -26,  80,  45,
  41, -69, -68, -54, -37, -13, -69,  41,  43,  97,
 -57, -44, -12, -58,  97,  74, -23,  -9,  -4,  -3,
  -2, 175, -59, -65,  69, -78, -16, -17,  80,  73,
 -69,  41, -73, -80, 156, -63, -13, 205, 206, -69,
  -6, -28, -24, -27, -37, -69,  70,  54,  55,  50,
  52,  65,  64,  94,  92,  93,  91,  58,  60,  66,
  67,  90,  71,  68, -39,  42, 160,   9,  23,  95,
  42,  44, 180,  45,  40, -43, -54,  40, -89, -39,
 -39, -39, -39, -39, -39, -39, -39, -39, -43, -37,
 -13, -18,  24,  47, -61, -45,  40,  40, -32,  73,
  -7,  -8,  40, -19,  80, -57, -78,  97,  41, -62,
  71, 155,  71, -36, -57, -47,  80, -12, -81,  43,
  80,  41,  97, -27, -79,  71,  60, -53, -12,  60,
 -44,  97,  72,  72,  69, 123, -26,  73, -66, -67,
 -19, 175,  97, -69,  74,  71,  70, -16, -79,  72,
  60,  71, -64, 123,  80, -64, -48,  80, -12,  60,
 -32, -79, -37, -37, -37, -37, -37, -37, -37, -37,
 -37, -37, -37, -37, -37, -37, -37, -37, -37, -37,
 -37, -39,  42, -43, -54,  40, -37, -40, -57, -39,
 -40, -57, -36, -36,  41, -42, -12,  40, -61, -45,
 123, -36, -36, -82,  74, 256,  71, -36,  40, -69,
  41, -49, 155, -28,  74, -11, -51,  70, -57, -47,
 -47,  41,  41, -68, -11, -53,  72,  72,  71, -19,
  97, -19, 175, -79, -17, -37,  74, -74, -80, -11,
 -51, -48,  72,  69,  43, -37, -36,  43,  41,  41,
 -11,  41, -42, -42,  41,  41, -29,  74,  -8,  41,
 -36, -79,  97, -28,  41, -51, -51, -67, -19, -19,
 -60,  -4,  -3, -21, 205, 206, -13, -27, -37, -39,
  43,  41, -43, -54,  41, -30,  74, -31,  41,  72,
 -75, -76, -27, -39, -43, -54, -51, -11, -33, -34,
  72, 207,  28,  97,  -9,  -4, -32,  20,  39,  16,
  33,  80,   4,   8, -38,   3,   7,  19,  10,   1,
   9, 160, -39, -64, -64,  72, -84,  20,  33,  16,
  39,  10,   3,   7,  19,  28,  80,  74,   4,   8,
  97, 123,   1,  69,  72, -37,  81, -55,  40, -55,
  40, -55,  69, -87,  69,  70,  54,  55,  50,  52,
  65,  64,  94,  92,  93,  91,  60,  58,  66,  67,
  90,  71,  68,  80, -83,  40, -39,  42,   9,  69,
  69,  72, -32, -30, -37, -30, -85, -30, -86, -37,
 -88, -38, -38, -38, -38, -38, -38, -38, -38, -38,
 -38, -38, -38, -38, -38, -38, -38, -38, -38, -30,
  81, -37, -39,  42, -33, -38,  12,  41, -30, -30,
  69, -30,  69,  39,  41,  43, -37,  72, -30, -37,
 -30, -38, -55, -39,  43,  72, -39, -37,  41, -30 };
short yydef[]={

   0,  -2,   1,   2,   3,  52,   5,   6,   7,  21,
  22,  23,  24,   0,   9,   0,   0,  37,  58,   0,
 163, 120,   0,   0,   0,  51,  -2,  55,  56,  57,
   0,   0,   0, 150, 363, 364,   0, 369, 353, 110,
   0,   0, 333, 334,   0,   4,   0,   0,   0,  19,
  20,  -2,   0,  45,  59,  60,  61,  62,  63, 120,
  42,  48, 294,  26,  31, 153, 353,  -2, 170, 294,
 373, 156,  -2, 169, 359,   0, 151, 120, 165, 166,
   0, 167, 168, 366,   0, 294,  46, 294, 121, 122,
 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
 133, 134, 135, 136, 137,   0,   0, 140, 141, 142,
 143, 144, 145, 146, 147, 148, 149, 187, 345, 346,
 365, 367, 335, 368, 371,   0,  -2, 106,  93, 103,
 105,  88,  70,  71, 106, 294,   0,  76, 294,  31,
 294,   0,  44, 294, 294,  40,   0, 334, 293,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0, 316,
 317, 294, 319, 320, 321, 322, 323, 324, 336,   0,
   0,   0,   0, 344,   0,  36,   0,   0,  29,  52,
  53, 154,   0, 360, 243, 357, 244, 358, 246, 294,
 174,  51,   0,   0,   0, 160,   0, 164, 120, 152,
 171,   0,  65,  66,  67, 179,   0, 138, 139, 347,
 348, 349, 187,   0, 370,  89, 109, 111, 115, 114,
 116,   0,   0,   0,   0, 294,   0,  72,  86,  88,
   0,   0,   0,  75,   0,   0,   0,  77,  78,   0,
   0,  41,  43,  38,  39,   0, 294, 294, 294, 294,
 294, 294, 294, 294, 294, 294, 294, 294, 294, 294,
 294, 294, 294, 294, 289, 294, 334,   0,   0, 299,
 294,   0,   0,   0, 294, 295, 296,  -2,   0, 300,
 301, 302, 303, 304, 305, 306, 307, 308, 309,   0,
 182, 337,   0,   0, 338, 340, 294, 294,  28,  -2,
  30,  32, 294,   0, 107, 108, 294, 155, 157,   0,
 359, 361, 294,   0,  60, 351, 172, 174, 174, 372,
 336, 159, 161,   0,  -2, 294,  47, 350, 179,  50,
 188,  90, 112, 113, 117, 166, 165, 104,  94,  96,
  98,   0,   0,   0,  68,  88, 294,   0, 332,  25,
  10,   0,  79,  -2,  -2,  80,  81,  82,   0,   0,
  27,  49, 271, 272, 273, 274, 275, 276, 277, 278,
 279, 280, 281, 282, 283, 284, 285, 286, 287,   0,
   0, 291, 294, 297, 298,  -2,   0, 311, 313, 312,
 314, 315,   0,   0, 318,   0, 182, 182, 339, 341,
 342,   0,   0, 189, 196,   0,   0,   0, 294,   0,
 354, 356, 362, 245, 247, 176, 177, 294, 173, 175,
   0,   0,   0,  64, 181, 180, 118, 119,   0,  99,
   0, 100,   0,  92,  73,  87,  69,   0,  74,  84,
  85,  83,   8, 294,   0,   0,   0, 310, 331,   0,
 184, 343, 183,   0, 325, 326, 192, 197,  33,  34,
   0,  54, 355, 352, 178, 158, 162,  97, 101, 102,
  11,  12,  13,  55,  15,  17,   0,  37, 288, 290,
   0,   0, 327, 328,   0, 190, 195,   0,  35,  14,
   0,   0,  37, 292, 329, 330, 185, 186, 191,   0,
 224,   0, 294,  51, 228, 229, 230,   0,   0,   0,
   0, 336, 239,   0, 198, 199, 200,   0, 202,   0,
   0, 334, 270,   0,   0, 222, 223, 205, 206, 207,
 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
 218, 219, 220, 221, 225,   0,   0, 192, 294, 192,
 234, 192, 237, 294, 241,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0, 201, 192,   0, 266, 294,   0,   0,
   0, 226, 227, 231,   0, 233, 192, 236, 192,   0,
 192, 248, 249, 250, 251, 252, 253, 254, 255, 256,
 257, 258, 259, 260, 261, 262, 263, 264,   0,   0,
   0,   0, 268, 294,  16,   0, 192, 193, 294, 238,
 192, 242,   0,   0, 204,   0,   0,  18, 232,   0,
 240, 265, 203, 267,   0, 294, 269,   0, 192, 235 };
# ifdef YYDEBUG
# include "y.debug"
# endif

# define YYFLAG -1000
# define YYERROR goto yyerrlab
# define YYACCEPT return(0)
# define YYABORT return(1)

/*	parser for yacc output	*/

#ifdef YYDEBUG
int yydebug = 0; /* 1 for debugging */
#endif
YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
int yychar = -1; /* current input token number */
int yynerrs = 0;  /* number of errors */
short yyerrflag = 0;  /* error recovery flag */

yyparse()
{	short yys[YYMAXDEPTH];
	int yyj, yym;
	register YYSTYPE *yypvt;
	register int yystate, yyn;
	register short *yyps;
	register YYSTYPE *yypv;
	register short *yyxi;

	yystate = 0;
	yychar = -1;
	yynerrs = 0;
	yyerrflag = 0;
	yyps= &yys[-1];
	yypv= &yyv[-1];

yystack:    /* put a state and value onto the stack */
#ifdef YYDEBUG
	if(yydebug >= 3)
		if(yychar < 0 || yytoknames[yychar] == 0)
			printf("char %d in %s", yychar, yystates[yystate]);
		else
			printf("%s in %s", yytoknames[yychar], yystates[yystate]);
#endif
	if( ++yyps >= &yys[YYMAXDEPTH] ) { 
		yyerror( "yacc stack overflow" ); 
		return(1); 
	}
	*yyps = yystate;
	++yypv;
	*yypv = yyval;
yynewstate:
	yyn = yypact[yystate];
	if(yyn <= YYFLAG) goto yydefault; /* simple state */
	if(yychar<0) {
		yychar = yylex();
#ifdef YYDEBUG
		if(yydebug >= 2) {
			if(yychar <= 0)
				printf("lex EOF\n");
			else if(yytoknames[yychar])
				printf("lex %s\n", yytoknames[yychar]);
			else
				printf("lex (%c)\n", yychar);
		}
#endif
		if(yychar < 0)
			yychar = 0;
	}
	if((yyn += yychar) < 0 || yyn >= YYLAST)
		goto yydefault;
	if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
		yychar = -1;
		yyval = yylval;
		yystate = yyn;
		if( yyerrflag > 0 ) --yyerrflag;
		goto yystack;
	}
yydefault:
	/* default state action */
	if( (yyn=yydef[yystate]) == -2 ) {
		if(yychar < 0) {
			yychar = yylex();
#ifdef YYDEBUG
			if(yydebug >= 2)
				if(yychar < 0)
					printf("lex EOF\n");
				else
					printf("lex %s\n", yytoknames[yychar]);
#endif
			if(yychar < 0)
				yychar = 0;
		}
		/* look through exception table */
		for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate);
			yyxi += 2 ) ; /* VOID */
		while( *(yyxi+=2) >= 0 ){
			if( *yyxi == yychar ) break;
		}
		if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
	}
	if( yyn == 0 ){ /* error */
		/* error ... attempt to resume parsing */
		switch( yyerrflag ){
		case 0:   /* brand new error */
#ifdef YYDEBUG
			yyerror("syntax error\n%s", yystates[yystate]);
			if(yytoknames[yychar])
				yyerror("saw %s\n", yytoknames[yychar]);
			else if(yychar >= ' ' && yychar < '\177')
				yyerror("saw `%c'\n", yychar);
			else if(yychar == 0)
				yyerror("saw EOF\n");
			else
				yyerror("saw char 0%o\n", yychar);
#else
			yyerror( "syntax error" );
#endif
yyerrlab:
			++yynerrs;
		case 1:
		case 2: /* incompletely recovered error ... try again */
			yyerrflag = 3;
			/* find a state where "error" is a legal shift action */
			while ( yyps >= yys ) {
				yyn = yypact[*yyps] + YYERRCODE;
				if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
					yystate = yyact[yyn];  /* simulate a shift of "error" */
					goto yystack;
				}
				yyn = yypact[*yyps];
				/* the current yyps has no shift onn "error", pop stack */
#ifdef YYDEBUG
				if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
#endif
				--yyps;
				--yypv;
			}
			/* there is no state on the stack with an error shift ... abort */
yyabort:
			return(1);
		case 3:  /* no shift yet; clobber input char */
#ifdef YYDEBUG
			if( yydebug ) {
				printf("error recovery discards ");
				if(yytoknames[yychar])
					printf("%s\n", yytoknames[yychar]);
				else if(yychar >= ' ' && yychar < '\177')
					printf("`%c'\n", yychar);
				else if(yychar == 0)
					printf("EOF\n");
				else
					printf("char 0%o\n", yychar);
			}
#endif
			if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
			yychar = -1;
			goto yynewstate;   /* try again in the same state */
		}
	}
	/* reduction by production yyn */
#ifdef YYDEBUG
	if(yydebug) {	char *s;
		printf("reduce %d in:\n\t", yyn);
		for(s = yystates[yystate]; *s; s++) {
			putchar(*s);
			if(*s == '\n' && *(s+1))
				putchar('\t');
		}
	}
#endif
	yyps -= yyr2[yyn];
	yypvt = yypv;
	yypv -= yyr2[yyn];
	yyval = yypv[1];
	yym=yyn;
	/* consult goto table to find next state */
	yyn = yyr1[yyn];
	yyj = yypgo[yyn] + *yyps + 1;
	if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
	switch(yym){
		
case 1:
# line 440 "gram.y"
{	return 2; } break;
case 2:
# line 441 "gram.y"
{	return 1; } break;
case 3:
# line 442 "gram.y"
{	return 0; } break;
case 4:
# line 444 "gram.y"
{
				set_linkage(yypvt[-1].s);
				bl_level--;
				return 1;
			} break;
case 5:
# line 450 "gram.y"
{
				set_linkage(0);
				bl_level++;
				return 1;
			} break;
case 6:
# line 455 "gram.y"
{  return 1; } break;
case 7:
# line 456 "gram.y"
{  return 1 ;} break;
case 8:
# line 461 "gram.y"
{ Ptreet t = tree_template::get(yypvt[-4].pn->string) ;
                    Pexpr  e = 0 ;
	            if (t)
		      e = t->expand(expr_unlist(yypvt[-2].el)) ;
	            else error ("%s wasn't an expression template",
		                	yypvt[-4].pn->string)  ;
	           } break;
case 9:
# line 471 "gram.y"
{ templp->start() ; } break;
case 10:
# line 473 "gram.y"
{templp->enter_parameters() ; } break;
case 11:
# line 475 "gram.y"
{templp->end(yypvt[-0].pn);
                  templp->in_progress = false ;
                  goto mod;} break;
case 12:
# line 483 "gram.y"
{ goto mod; } break;
case 13:
# line 485 "gram.y"
{ goto mod; } break;
case 14:
# line 487 "gram.y"
{ Pname pn = yypvt[-1].pb->aggr();
                    /* basetype:aggr() does not return the name for a forward */
		    /* declaration, so extract it directly */
                    yyval.p = (pn ? pn : yypvt[-1].pb->b_name) ;
                    DECL_TYPE = 0;  } break;
case 15:
# line 494 "gram.y"
{templp->curr_tree_template = yypvt[-0].t ; } break;
case 16:
# line 496 "gram.y"
{yypvt[-2].pn->n_initializer = yypvt[-0].pe ; /* actually a stmt */
                    yyval.pn = yypvt[-2].pn; } break;
case 17:
# line 499 "gram.y"
{templp->curr_tree_template = yypvt[-0].t ; } break;
case 18:
# line 501 "gram.y"
{yypvt[-3].pn->n_initializer = yypvt[-1].pe ; /* actually a stmt */
                    yyval.pn = yypvt[-3].pn ; } break;
case 20:
# line 506 "gram.y"
{ yyval.pn = Ncopy(yypvt[-0].pn) ;} break;
case 21:
# line 511 "gram.y"
{	
			/* if function declartion with arguments
			 * need to make sure modified_tn is traversed */
			if ( yypvt[-0].pn != 0 
				&& yypvt[-0].pn->tp->base == FCT 
				&& Pfct(yypvt[-0].pn->tp)->nargs !=0 ) 
					goto mod;
			else {
				modified_tn = 0;
				if (yypvt[-0].pn==0) yyval.i = 1; 
			     }
			} break;
case 22:
# line 524 "gram.y"
{	goto mod; } break;
case 23:
# line 526 "gram.y"
{	goto mod; } break;
case 24:
# line 528 "gram.y"
{ mod:	if (modified_tn) {
					restore();
					modified_tn = 0;
				}
				local_blk = 0;
				if (local_tn) {
					extern void local_restore();
					local_restore();
					local_tn = 0;
				}
			} break;
case 25:
# line 540 "gram.y"
{	Pname n = new name(make_name('A'));
				n->tp = new basetype(ASM,0);
				Pbase(n->tp)->b_name = Pname(yypvt[-2].s);
				yyval.p = n;
			} break;
case 26:
# line 556 "gram.y"
{	
				Ptype t;
		/*	fix: */
				if (err_name == 0) err_name = yypvt[-1].pn;
				if (err_name == 0) {
					error("syntax error:TX");
					yyval.p = Ndata(defa_type,err_name);
				}
				else if ((t=err_name->tp) == 0) {
					error("TX for%n",err_name);
					yyval.p = Ndata(defa_type,err_name);
				}
				else if (t->base==FCT) {
					if (Pfct(t)->returns==0)
						yyval.p = Nfct(defa_type,err_name,0);
					else
						yyval.p = Ndata(0,err_name);
				}
				else {
					error("syntax error:TX for%k%n",t->base,err_name);
					yyval.p = Ndata(defa_type,err_name);
				}
				err_name = 0;
			} break;
case 27:
# line 584 "gram.y"
{	Pname n = Nfct(yypvt[-4].p,yypvt[-3].pn,yypvt[-0].p);
				Fargdcl(n->tp,name_unlist(yypvt[-2].nl),n);
				Finit(n->tp) = yypvt[-1].pn;
				yyval.p = n;
				NOT_EXPECT_ID();
				in_mem_fct = 0;
			} break;
case 28:
# line 594 "gram.y"
{	Pname n = Nfct(defa_type,yypvt[-3].pn,yypvt[-0].p);
				Fargdcl(n->tp,name_unlist(yypvt[-2].nl),n);
				Finit(n->tp) = yypvt[-1].pn;
				yyval.p = n;
				NOT_EXPECT_ID();
				in_mem_fct = 0;
			} break;
case 29:
# line 606 "gram.y"
{ must_be_expr = 1; } break;
case 30:
# line 609 "gram.y"
{	
				yyval.p = yypvt[-0].p; 
				must_be_expr = 0;
			} break;
case 31:
# line 614 "gram.y"
{	yyval.p = 0; } break;
case 32:
# line 618 "gram.y"
{	yyval.p = yypvt[-0].p; } break;
case 33:
# line 620 "gram.y"
{	yyval.pn = yypvt[-0].pn;  yyval.pn->n_list = yypvt[-2].pn; } break;
case 34:
# line 624 "gram.y"
{
				yyval.pn = new name;
				yyval.pn->n_initializer = yypvt[-1].pe;
			} break;
case 35:
# line 629 "gram.y"
{
				Pname n = Ncopy(yypvt[-3].pn);
				n->base = yypvt[-3].pn->base;
				n->n_initializer = yypvt[-1].pe;
				yyval.pn = n;
			} break;
case 36:
# line 652 "gram.y"
{	if (yypvt[-0].pn == 0)
					error("badAD");
				else if (yypvt[-0].pn->tp->base == FCT)
					error("FD inAL (%n)",yypvt[-0].pn);
				else if (yypvt[-1].p)
                                        yypvt[-1].nl->add_list(yypvt[-0].pn);
				else
					yyval.nl = new nlist(yypvt[-0].pn);
			} break;
case 37:
# line 662 "gram.y"
{
                                yyval.p = 0; 
/* error( 'd', "arg_dcl_list: in_class_decl: %d", in_class_decl );
 */
                                if ( in_class_decl ) in_mem_fct = 1;
			} break;
case 39:
# line 672 "gram.y"
{	yyval.p = yypvt[-2].pn;
				yyval.pn->tp = new basetype(FIELD,yypvt[-0].pn);
		 	} break;
case 40:
# line 676 "gram.y"
{	yyval.p = new name;
				yyval.pn->tp = new basetype(FIELD,yypvt[-0].pn);
			} break;
case 41:
# line 680 "gram.y"
{	Pexpr e = yypvt[-0].pe;
				if (e == dummy) error("emptyIr");
				yypvt[-2].pn->n_initializer = e;
				init_seen = 0;
			} break;
case 42:
# line 690 "gram.y"
{	
				if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); 
				if ( NEXTTOK() == CM && 
					la_look() == TNAME ) 
					EXPECT_ID();
			} break;
case 43:
# line 697 "gram.y"
{	if (yypvt[-2].p)
					if (yypvt[-0].p)
						yypvt[-2].nl->add(yypvt[-0].pn);
					else
						error("DL syntax");
				else {
					if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn);
					error("DL syntax");
				}
			} break;
case 44:
# line 711 "gram.y"
{ 
				extern int co_hack;
				co_hack = 1;
				/*$$ = Ndata($1,name_unlist($<nl>2));*/
				Pname n = Ndata(yypvt[-2].p,name_unlist(yypvt[-1].nl)); 
				if ( in_typedef && in_tag ) { 
					if ( n->tp->check( in_tag->tp, 0 ))
    						error("%nredefined: previous: %t now: %t", in_tag, in_tag->tp, n->tp );
				}
				in_typedef = 0;
				in_tag = 0;
				co_hack = 0;
				DECL_TYPE = 0; 
				yyval.p = n;
			} break;
case 45:
# line 729 "gram.y"
{ 
				yyval.p = yypvt[-1].pb->aggr(); 
				DECL_TYPE = 0; 
			
			} break;
case 46:
# line 738 "gram.y"
{ templp->parameters_in_progress++; } break;
case 47:
# line 739 "gram.y"
{ templp->parameters_in_progress--; } break;
case 48:
# line 741 "gram.y"
{ yyval.pn = templp->check_tname(yypvt[-0].pn) ; } break;
case 49:
# line 743 "gram.y"
{ 
		    yyval.pn =parametrized_typename(yypvt[-3].pn,
						  (expr_unlist(yypvt[-1].el))) ; } break;
case 50:
# line 747 "gram.y"
{ extern Pbase any_type;
		    error("%n was not a parametrized type.", yyval.pn) ;
                    yyval.pn= yypvt[-3].pn->tdef() ;
                    yyval.pn->tp = any_type ; } break;
case 51:
# line 755 "gram.y"
{ 
				yyval.p = new basetype(yypvt[-0].t,0); 
				if ( yypvt[-0].t == TYPEDEF ) in_typedef = yyval.pt;
				if (DECL_TYPE == -1) DECL_TYPE = 0;
			} break;
case 52:
# line 761 "gram.y"
{	yyval.p = new basetype(EXTERN,0);
				yyval.pb->b_linkage = yypvt[-0].s;
				if (DECL_TYPE == -1) DECL_TYPE = 0;
			} break;
case 53:
# line 766 "gram.y"
{       templp->check_tname(yypvt[-0].pn) ;
				yyval.p = new basetype(TYPE,yypvt[-0].pn); 
				if (DECL_TYPE == -1) DECL_TYPE = 0;
			} break;
case 54:
# line 771 "gram.y"
{ yyval.pb = parametrized_basetype(yypvt[-3].pn,
 						   (expr_unlist(yypvt[-1].el))) ; } break;
case 57:
# line 776 "gram.y"
{ 
				if (DECL_TYPE == TNAME)
					yyval.p = new basetype(TYPE,yypvt[-0].pn); 
				else
					yyval.p = new basetype(yypvt[-0].t,0); 
				DECL_TYPE = -1;
			} break;
case 59:
# line 789 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) 
					yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t); 
				DECL_TYPE = 0;
			} break;
case 60:
# line 795 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) 
			 		yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn);
				DECL_TYPE = 0;
			} break;
case 61:
# line 800 "gram.y"
{ yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break;
case 62:
# line 801 "gram.y"
{ yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break;
case 63:
# line 803 "gram.y"
{ 
				if (DECL_TYPE == TYPE)
					yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t);  
				else
					yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn); 
				DECL_TYPE = -1;
			} break;
case 64:
# line 814 "gram.y"
{yypvt[-2].el->add(new expr(ELIST,yypvt[-0].pe,NULL)) ; } break;
case 65:
# line 815 "gram.y"
{ yyval.el =
				     new elist(new expr(ELIST,yypvt[-0].pe,NULL)); } break;
case 66:
# line 819 "gram.y"
{yypvt[-0].pn->n_template_arg = name::template_actual_arg_dummy ;
		   yyval.pe = yypvt[-0].pn; /* keep yacc happy */ } break;
case 67:
# line 822 "gram.y"
{ yyval.pe = yypvt[-0].pe ; } break;
case 68:
# line 828 "gram.y"
{ yyval.p = end_enum(0,yypvt[-1].pn); } break;
case 69:
# line 829 "gram.y"
{ yyval.p = end_enum(yypvt[-3].pn,yypvt[-1].pn); } break;
case 70:
# line 830 "gram.y"
{ yyval.pb = (Pbase)yypvt[-0].pn->tp;} break;
case 71:
# line 831 "gram.y"
{ yyval.pb = (Pbase)yypvt[-0].pn->tp;} break;
case 72:
# line 835 "gram.y"
{	if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); } break;
case 73:
# line 837 "gram.y"
{	if( yypvt[-0].p)
					if (yypvt[-2].p)
						yypvt[-2].nl->add(yypvt[-0].pn);
					else
						yyval.nl = new nlist(yypvt[-0].pn);
			} break;
case 76:
# line 847 "gram.y"
{ yyval.pn = NULL ;} break;
case 79:
# line 855 "gram.y"
{ templp->collect(yypvt[-1].t, yypvt[-0].pn) ; } break;
case 80:
# line 857 "gram.y"
{ templp->collect(yypvt[-1].t, yypvt[-0].pn) ; } break;
case 81:
# line 859 "gram.y"
{templp->collect(Ndata(yypvt[-1].p,yypvt[-0].pn)); } break;
case 82:
# line 865 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 83:
# line 867 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
				yyval.p = yypvt[-0].p;
			} break;
case 84:
# line 872 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 85:
# line 876 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 86:
# line 883 "gram.y"
{	yyval.p = yypvt[-0].pn; yyval.pn->tp = moe_type; } break;
case 87:
# line 885 "gram.y"
{	yyval.p = yypvt[-2].pn;
				yyval.pn->tp = moe_type;
				yyval.pn->n_initializer = yypvt[-0].pe;
			} break;
case 88:
# line 890 "gram.y"
{	yyval.p = 0; } break;
case 89:
# line 894 "gram.y"
{	
				ccl->mem_list = name_unlist(yypvt[-1].nl);
				end_cl();
				--in_class_decl;
				declTag = 1;
			} break;
case 90:
# line 901 "gram.y"
{	
				ccl->mem_list = name_unlist(yypvt[-2].nl);
				end_cl();
				--in_class_decl;
				error("`;' or declaratorX afterCD");
				lex_unget(yypvt[-0].t);
				/* lex_unget($4); but only one unget, sorry */
				declTag = 1;
			} break;
case 91:
# line 911 "gram.y"
{ 
				yyval.pb = (Pbase)yypvt[-0].pn->tp; 
				check_tag();
			} break;
case 92:
# line 916 "gram.y"
{ 
		    Pname p = parametrized_typename(yypvt[-3].pn,
						  (expr_unlist(yypvt[-1].el))) ;
                    yyval.pb = (Pbase)p->tp; 
                    check_tag(); } break;
case 93:
# line 923 "gram.y"
{
				 yyval.pb = (Pbase)yypvt[-0].pn->tp; 
				check_tag();
			
			} break;
case 94:
# line 930 "gram.y"
{ yyval.pbc = yypvt[-0].pbc; } break;
case 95:
# line 931 "gram.y"
{ yyval.pbc = 0; } break;
case 97:
# line 936 "gram.y"
{	if (yypvt[-0].pbc) { yyval.pbc = yypvt[-0].pbc; yyval.pbc->next = yypvt[-2].pbc; } } break;
case 98:
# line 939 "gram.y"
{ yyval.pbc = dobase(0,yypvt[-0].pn); } break;
case 99:
# line 940 "gram.y"
{ yyval.pbc = dobase(yypvt[-1].t,yypvt[-0].pn); } break;
case 100:
# line 941 "gram.y"
{ yyval.pbc = dobase(0,yypvt[-0].pn,yypvt[-1].t); } break;
case 101:
# line 942 "gram.y"
{ yyval.pbc = dobase(yypvt[-2].t,yypvt[-0].pn,yypvt[-1].t); } break;
case 102:
# line 943 "gram.y"
{ yyval.pbc = dobase(yypvt[-1].t,yypvt[-0].pn,yypvt[-2].t); } break;
case 103:
# line 947 "gram.y"
{	
				yyval.p = start_cl(yypvt[-1].t,0,0); 
				++in_class_decl;
			} break;
case 104:
# line 953 "gram.y"
{	
				yyval.p = start_cl(yypvt[-3].t,yypvt[-2].pn,yypvt[-1].pbc);
				++in_class_decl;
			} break;
case 105:
# line 959 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 107:
# line 965 "gram.y"
{  yyval.p = yypvt[-0].pn ; } break;
case 109:
# line 969 "gram.y"
{ extern void restore_fn_modified_tn(Pname) ;
				if (yypvt[-0].p) {
					if (yypvt[-1].p)
						yypvt[-1].nl->add_list(yypvt[-0].pn);
					else
						yyval.nl = new nlist(yypvt[-0].pn);
				        restore_fn_modified_tn(yypvt[-0].pn) ;
				}

			} break;
case 110:
# line 980 "gram.y"
{	extern void note_fn_modified_tn() ;
 				note_fn_modified_tn() ;
 				yyval.p = 0; } break;
case 117:
# line 992 "gram.y"
{	yyval.p = new name;
				yyval.pn->base = yypvt[-1].t;
			} break;
case 118:
# line 996 "gram.y"
{	Pname n = Ncopy(yypvt[-1].pn);
				n->n_qualifier = yypvt[-2].pn;
				n->base = PR;
				yyval.p = n;
			} break;
case 119:
# line 1002 "gram.y"
{	Pname n = Ncopy(yypvt[-1].pn);
				if (n->n_oper == TYPE) {
					error('s',"visibilityD for conversion operator");
					n->tp = Ptype(n->n_initializer);
					n->n_initializer = 0;
					n->n_oper = 0;
					sig_name(n);
				}
				n->n_qualifier = yypvt[-2].pn;
				n->base = PR;
				yyval.p = n;
			} break;
case 120:
# line 1031 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 121:
# line 1033 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_oper = DTOR;
			} break;
case 122:
# line 1037 "gram.y"
{	yyval.p = new name(oper_name(yypvt[-0].t));
				yyval.pn->n_oper = yypvt[-0].t;
			} break;
case 123:
# line 1041 "gram.y"
{	Pname n = yypvt[-0].pn;
				n->string = "_type";
				n->n_oper = TYPE;
				n->n_initializer = Pexpr(n->tp);
				n->tp = 0;
				yyval.p = n;
			} break;
case 138:
# line 1064 "gram.y"
{	yyval.t = CALL; } break;
case 139:
# line 1065 "gram.y"
{	yyval.t = DEREF; } break;
case 145:
# line 1071 "gram.y"
{	yyval.t = NEW; } break;
case 146:
# line 1072 "gram.y"
{	yyval.t = DELETE; } break;
case 147:
# line 1073 "gram.y"
{	yyval.t = REF; } break;
case 148:
# line 1074 "gram.y"
{	yyval.t = CM; } break;
case 149:
# line 1075 "gram.y"
{	yyval.t = REFMUL;
					if (yypvt[-0].t == DOT) error(".* cannot be overloaded");
				} break;
case 150:
# line 1080 "gram.y"
{ yyval.pn = yypvt[-0].pn; } break;
case 151:
# line 1081 "gram.y"
{	error("CNs do not nest"); } break;
case 152:
# line 1082 "gram.y"
{	error("CNs do not nest"); } break;
case 153:
# line 1086 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = yypvt[-0].pt;
			} break;
case 154:
# line 1090 "gram.y"
{	yypvt[-2].pn->tp = new fct(yypvt[-2].pn->tp,0,1);
 			} break;
case 155:
# line 1094 "gram.y"
{	yypvt[-3].pn->tp = new fct(yypvt[-3].pn->tp,0,1);
 				Pfct(yypvt[-3].pn->tp)->f_const = 1;
 			} break;
case 156:
# line 1098 "gram.y"
{	Pname n = yypvt[-1].pn;
				yyval.p = Ncopy(n);
				if (ccl && strcmp(n->string,ccl->string)) n->hide();
				yyval.pn->n_oper = TNAME;
				Freturns(yypvt[-0].p) = yyval.pn->tp;
				yyval.pn->tp = yypvt[-0].pt;
			} break;
case 157:
# line 1110 "gram.y"
{	
				yypvt[-3].pn->tp = new fct(yypvt[-3].pn->tp,yypvt[-1].pn,1); 
 				in_arg_list = 0;
			} break;
case 158:
# line 1115 "gram.y"
{ 
				Pptr p = new ptr( PTR, 0 );
				Ptyp(p) = yypvt[-2].pn->tp;
				Freturns( yypvt[-0].p ) = Ptype(p);
				yypvt[-2].pn->tp = yypvt[-0].pt;
				yyval.p = yypvt[-2].pn;
				if (DECL_TYPE == -1) DECL_TYPE = 0;
			} break;
case 159:
# line 1124 "gram.y"
{	yyval.p = Ncopy(yypvt[-3].pn);
				yyval.pn->n_oper = TNAME;
				yyval.pn->tp = new fct(0,yypvt[-1].pn,1);
			} break;
case 160:
# line 1129 "gram.y"
{	yyval.p = Ncopy(yypvt[-2].pn);
 				yyval.pn->n_oper = TNAME;
				yyval.pn->tp = new fct(0,0,1);
			} break;
case 161:
# line 1135 "gram.y"
{	yyval.p = Ncopy(yypvt[-3].pn);
 				yyval.pn->n_oper = TNAME;
 				yyval.pn->tp = new fct(0,0,1);
 				Pfct(yypvt[-3].pn->tp)->f_const = 1;
			} break;
case 162:
# line 1141 "gram.y"
{	memptrdcl(yypvt[-3].pn,yypvt[-5].pn,yypvt[-0].pt,yypvt[-2].pn);
				yyval.p = yypvt[-2].p;
			} break;
case 164:
# line 1146 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_qualifier = yypvt[-2].pn;
				error(ansi_opt?0:'w',"anachronism `.' used for qualification; please use `::'");
			} break;
case 165:
# line 1151 "gram.y"
{	yyval.p = yypvt[-0].p;
				if ( yypvt[-1].pn != sta_name ) {
    					set_scope(yypvt[-1].pn); 
    					yyval.pn->n_qualifier = yypvt[-1].pn;
				}
			} break;
case 166:
# line 1158 "gram.y"
{	
				if ( yypvt[-1].pn == sta_name ) 
     					error( ":: applied to CN%n", yypvt[-0].pn );
				yyval.p = Ncopy(yypvt[-0].pn);
				set_scope(yypvt[-1].pn);
				yyval.pn->n_oper = TNAME;
				yyval.pn->n_qualifier = yypvt[-1].pn;
			} break;
case 167:
# line 1167 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = yypvt[-1].pt;
				yyval.p = yypvt[-0].p;
			} break;
case 168:
# line 1172 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_oper = TNAME;
				// cannot evaluate at this point: defer until data_dcl
				if ( in_typedef ) {
					defer_check = 1;
					in_tag = yypvt[-0].pn;
				}
				yypvt[-0].pn->hide();
				defer_check = 0;
				yyval.pn->tp = yypvt[-1].pt;
			} break;
case 169:
# line 1184 "gram.y"
{	yyval.p = Ncopy(yypvt[-1].pn);
				yyval.pn->n_oper = TNAME;
				if ( in_typedef ) {
     					defer_check = 1;
     					in_tag = yypvt[-0].pn;
				}
				yypvt[-1].pn->hide();
				defer_check = 0;
				yyval.pn->tp = yypvt[-0].pt;
			} break;
case 170:
# line 1195 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = yypvt[-0].pt;
			} break;
case 171:
# line 1212 "gram.y"
{ 
				yyval.p = yypvt[-1].p; 
				in_arg_list = 0;
			} break;
case 172:
# line 1219 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 173:
# line 1221 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_oper = TNAME;
				yypvt[-0].pn->hide();
				yyval.pn->tp = yypvt[-1].pt;
			} break;
case 174:
# line 1227 "gram.y"
{	
				yyval.p = new name; 
				NOT_EXPECT_ID();
			} break;
case 175:
# line 1232 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
				yyval.p = yypvt[-0].p;
			} break;
case 176:
# line 1237 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 177:
# line 1241 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 178:
# line 1257 "gram.y"
{ 
// error('d', "arg_lp arg_decl rp in_arg_list: %d", in_arg_list );
				yyval.p = yypvt[-1].p; 
				in_arg_list = 0;
			} break;
case 179:
# line 1265 "gram.y"
{	yyval.p = new name; } break;
case 180:
# line 1267 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
				yyval.p = yypvt[-0].p;
                                NOT_EXPECT_ID();
			} break;
case 181:
# line 1273 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 182:
# line 1278 "gram.y"
{ yyval.p = new name; } break;
case 183:
# line 1280 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
				yyval.p = yypvt[-0].p;
				NOT_EXPECT_ID();
			} break;
case 184:
# line 1286 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 185:
# line 1290 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-2].pn->tp;
				yypvt[-2].pn->tp = yypvt[-0].pt;
				yyval.p = yypvt[-2].p;
			} break;
case 186:
# line 1295 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-2].pn->tp;
				yypvt[-2].pn->tp = yypvt[-0].pt;
				yyval.p = yypvt[-2].p;
			} break;
case 187:
# line 1302 "gram.y"
{	yyval.p = new name; } break;
case 188:
# line 1304 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
				yyval.p = yypvt[-0].p;
			} break;
case 189:
# line 1314 "gram.y"
{
				yyval.p = 0; 
			} break;
case 190:
# line 1318 "gram.y"
{	
				if (yypvt[-0].p)
					if (yypvt[-1].p)
						yypvt[-1].sl->add(yypvt[-0].ps);
					else {
						yyval.sl =  new slist(yypvt[-0].ps);
						stmt_seen = 1;
					}
			} break;
case 191:
# line 1329 "gram.y"
{
				yyval.p = yypvt[-0].p;
				if (yypvt[-0].p)	stmt_seen = 1;
			} break;
case 192:
# line 1336 "gram.y"
{
				yyval.p = 0;
				check_decl();
			} break;
case 193:
# line 1343 "gram.y"
{	yyval.p = yypvt[-1].p;
			/*	if ($<pe>$ == dummy) error("empty condition");*/
				stmt_seen = 1;
			} break;
case 194:
# line 1350 "gram.y"
{	cd_vec[cdi] = cd;
				stmt_vec[cdi] = stmt_seen;
				tn_vec[cdi] = modified_tn;
				lcl_blk_vec[cdi++] = local_blk;
				lcl_tn_vec[cdi] = local_tn;
				local_blk = 0;
				local_tn = 0;
				cd = 0;
				stmt_seen = 0;
				modified_tn = 0;
			} break;
case 195:
# line 1362 "gram.y"
{	Pname n = name_unlist(cd);
				Pstmt ss = stmt_unlist(yypvt[-1].sl);
				yyval.p = new block(yypvt[-3].l,n,ss);
				if ( local_tn ) local_restore();
				if ( local_blk ) local_name();
				if (modified_tn) restore();
				cd = cd_vec[--cdi];
				stmt_seen = stmt_vec[cdi];
				modified_tn = tn_vec[cdi];
				local_tn = lcl_tn_vec[cdi];
				local_blk = lcl_blk_vec[cdi];
				if (cdi < 0) error('i',"block level(%d)",cdi);
				NOT_EXPECT_ID();
			} break;
case 196:
# line 1377 "gram.y"
{	yyval.p = new block(yypvt[-1].l,0,0); NOT_EXPECT_ID();} break;
case 197:
# line 1379 "gram.y"
{	yyval.p = new block(yypvt[-2].l,0,0); NOT_EXPECT_ID();} break;
case 198:
# line 1383 "gram.y"
{	yyval.p = new estmt(SM,curloc,yypvt[-0].pe,0);	} break;
case 199:
# line 1385 "gram.y"
{	yyval.p = new stmt(BREAK,yypvt[-0].l,0); } break;
case 200:
# line 1387 "gram.y"
{	yyval.p = new stmt(CONTINUE,yypvt[-0].l,0); } break;
case 201:
# line 1389 "gram.y"
{	yyval.p = new lstmt(GOTO,yypvt[-1].l,yypvt[-0].pn,0); } break;
case 202:
# line 1390 "gram.y"
{ stmt_seen=1; } break;
case 203:
# line 1391 "gram.y"
{	yyval.p = new estmt(DO,yypvt[-4].l,yypvt[-0].pe,yypvt[-2].ps); } break;
case 204:
# line 1393 "gram.y"
{	
				if (stmt_seen)
					yyval.p = new estmt(ASM,curloc,(Pexpr)yypvt[-1].s,0);
				else {
					Pname n = new name(make_name('A'));
					n->tp = new basetype(ASM,(Pname)yypvt[-1].s);
					if (cd)
						cd->add_list(n);
					else
						cd = new nlist(n);
					yyval.p = 0;
				}
			} break;
case 223:
# line 1429 "gram.y"
{ error("`;' missing afterS"); } break;
case 224:
# line 1431 "gram.y"
{	yyval.p = new estmt(SM,curloc,dummy,0); } break;
case 225:
# line 1433 "gram.y"
{/* $1 is the formal parameter name */
			 yyval.p = new estmt(SM_PARAM,curloc,yypvt[-1].pe,0);	} break;
case 226:
# line 1436 "gram.y"
{	yyval.p = new estmt(RETURN,yypvt[-2].l,yypvt[-1].pe,0); } break;
case 227:
# line 1438 "gram.y"
{
				error("local linkage specification");
				yyval.p = yypvt[-0].pn;
			} break;
case 228:
# line 1443 "gram.y"
{	Pname n = yypvt[-0].pn;
				if (n)
					if (stmt_seen) {
						yyval.p = new block(n->where,n,0);
						yyval.ps->base = DCL;
					}
					else {
						if (cd)
							cd->add_list(n);
						else
							cd = new nlist(n);
						yyval.p = 0;
					}
			} break;
case 229:
# line 1458 "gram.y"
{
				Pname n = yypvt[-0].pn;
				lex_unget(RC);
				error(&n->where,"%n's definition is nested (did you forget a ``}''?)",n);
				if (cd)
					cd->add_list(n);
				else
					cd = new nlist(n);
				yyval.p = 0;
			} break;
case 231:
# line 1470 "gram.y"
{	yyval.p = new ifstmt(yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps,0); } break;
case 232:
# line 1472 "gram.y"
{	yyval.p = new ifstmt(yypvt[-4].l,yypvt[-3].pe,yypvt[-2].ps,yypvt[-0].ps); } break;
case 233:
# line 1474 "gram.y"
{	yyval.p = new estmt(WHILE,yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps); } break;
case 234:
# line 1475 "gram.y"
{ stmt_seen=1; } break;
case 235:
# line 1476 "gram.y"
{	yyval.p = new forstmt(yypvt[-8].l,yypvt[-5].ps,yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].ps); } break;
case 236:
# line 1478 "gram.y"
{	yyval.p = new estmt(SWITCH,yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps); } break;
case 237:
# line 1479 "gram.y"
{  yyval.pn = yypvt[-1].pn; stmt_seen=1; } break;
case 238:
# line 1480 "gram.y"
{	Pname n = yypvt[-1].pn;
				yyval.p = new lstmt(LABEL,n->where,n,yypvt[-0].ps);
			} break;
case 239:
# line 1483 "gram.y"
{ stmt_seen=1; } break;
case 240:
# line 1484 "gram.y"
{	if (yypvt[-2].pe == dummy) error("empty case label");
				yyval.p = new estmt(CASE,yypvt[-4].l,yypvt[-2].pe,yypvt[-0].ps);
			} break;
case 241:
# line 1487 "gram.y"
{ stmt_seen=1; } break;
case 242:
# line 1488 "gram.y"
{	yyval.p = new stmt(DEFAULT,yypvt[-3].l,yypvt[-0].ps); } break;
case 243:
# line 1493 "gram.y"
{	Pexpr e = expr_unlist(yypvt[-0].el);
				while (e && e->e1==dummy) {
					register Pexpr ee2 = e->e2;
					if (ee2) error("EX inEL");
					delete e;
					e = ee2;
				}
				yyval.p = e;
			} break;
case 244:
# line 1504 "gram.y"
{	yyval.el = new elist(new expr(ELIST,yypvt[-0].pe,0)); } break;
case 245:
# line 1506 "gram.y"
{	yypvt[-2].el->add(new expr(ELIST,yypvt[-0].pe,0)); } break;
case 247:
# line 1511 "gram.y"
{
  			  	if ( in_arg_list ) 
       			  		error( "syntax error: IrL not permitted in AL" );
  			  	else 
					init_seen = 1;
				Pexpr e;
				if (yypvt[-1].p)
					e = yypvt[-1].pe;
				else
					e = new expr(ELIST,dummy,0);
				yyval.p = new expr(ILIST,e,0);
			} break;
case 248:
# line 1526 "gram.y"
{	bbinop:	yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
case 249:
# line 1527 "gram.y"
{	goto bbinop; } break;
case 250:
# line 1528 "gram.y"
{	goto bbinop; } break;
case 251:
# line 1529 "gram.y"
{	goto bbinop; } break;
case 252:
# line 1530 "gram.y"
{	goto bbinop; } break;
case 253:
# line 1531 "gram.y"
{	goto bbinop; } break;
case 254:
# line 1532 "gram.y"
{	goto bbinop; } break;
case 255:
# line 1533 "gram.y"
{ 	goto bbinop; } break;
case 256:
# line 1534 "gram.y"
{	goto bbinop; } break;
case 257:
# line 1535 "gram.y"
{	goto bbinop; } break;
case 258:
# line 1536 "gram.y"
{	goto bbinop; } break;
case 259:
# line 1537 "gram.y"
{	goto bbinop; } break;
case 260:
# line 1538 "gram.y"
{	goto bbinop; } break;
case 261:
# line 1539 "gram.y"
{	goto bbinop; } break;
case 262:
# line 1540 "gram.y"
{	goto bbinop; } break;
case 263:
# line 1541 "gram.y"
{	goto bbinop; } break;
case 264:
# line 1542 "gram.y"
{	goto bbinop; } break;
case 265:
# line 1544 "gram.y"
{	yyval.p = new qexpr(yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].pe); } break;
case 266:
# line 1546 "gram.y"
{	yyval.p = new expr(DELETE,yypvt[-0].pe,0); } break;
case 267:
# line 1548 "gram.y"
{	yyval.p = new expr(DELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
case 268:
# line 1550 "gram.y"
{	yyval.p = new expr(GDELETE,yypvt[-0].pe,0); } break;
case 269:
# line 1552 "gram.y"
{	yyval.p = new expr(GDELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
case 271:
# line 1557 "gram.y"
{	binop:	yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
case 272:
# line 1558 "gram.y"
{	goto binop; } break;
case 273:
# line 1559 "gram.y"
{	goto binop; } break;
case 274:
# line 1560 "gram.y"
{	goto binop; } break;
case 275:
# line 1561 "gram.y"
{	goto binop; } break;
case 276:
# line 1562 "gram.y"
{	goto binop; } break;
case 277:
# line 1563 "gram.y"
{	goto binop; } break;
case 278:
# line 1564 "gram.y"
{ 	goto binop; } break;
case 279:
# line 1565 "gram.y"
{	goto binop; } break;
case 280:
# line 1566 "gram.y"
{	goto binop; } break;
case 281:
# line 1567 "gram.y"
{	goto binop; } break;
case 282:
# line 1568 "gram.y"
{	goto binop; } break;
case 283:
# line 1569 "gram.y"
{	goto binop; } break;
case 284:
# line 1570 "gram.y"
{	goto binop; } break;
case 285:
# line 1571 "gram.y"
{	goto binop; } break;
case 286:
# line 1572 "gram.y"
{	goto binop; } break;
case 287:
# line 1573 "gram.y"
{	goto binop; } break;
case 288:
# line 1575 "gram.y"
{	yyval.p = new qexpr(yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].pe); } break;
case 289:
# line 1577 "gram.y"
{	yyval.p = new expr(DELETE,yypvt[-0].pe,0); } break;
case 290:
# line 1579 "gram.y"
{	yyval.p = new expr(DELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
case 291:
# line 1581 "gram.y"
{	yyval.p = new expr(GDELETE,yypvt[-0].pe,0); } break;
case 292:
# line 1583 "gram.y"
{	yyval.p = new expr(GDELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
case 293:
# line 1584 "gram.y"
{ 
			init_seen = 0; 
			} break;
case 294:
# line 1588 "gram.y"
{	yyval.p = dummy; } break;
case 295:
# line 1591 "gram.y"
{ goto new1; } break;
case 296:
# line 1593 "gram.y"
{	new1:
				Ptype t = yypvt[-0].pn->tp;
				yyval.p = new texpr(NEW,t,0);
			} break;
case 297:
# line 1597 "gram.y"
{ goto new3; } break;
case 298:
# line 1599 "gram.y"
{	new3:
				Ptype t = yypvt[-0].pn->tp;
 				yyval.p = new texpr(GNEW,t,0);
 			} break;
case 299:
# line 1604 "gram.y"
{	yyval.p = new expr(yypvt[-0].t,yypvt[-1].pe,0); } break;
case 300:
# line 1606 "gram.y"
{	yyval.p = new texpr(CAST,yypvt[-1].pn->tp,yypvt[-0].pe); } break;
case 301:
# line 1608 "gram.y"
{	yyval.p = new expr(DEREF,yypvt[-0].pe,0); } break;
case 302:
# line 1610 "gram.y"
{	yyval.p = new expr(ADDROF,0,yypvt[-0].pe); } break;
case 303:
# line 1612 "gram.y"
{	yyval.p = new expr(UMINUS,0,yypvt[-0].pe); } break;
case 304:
# line 1614 "gram.y"
{	yyval.p = new expr(UPLUS,0,yypvt[-0].pe); } break;
case 305:
# line 1616 "gram.y"
{	yyval.p = new expr(NOT,0,yypvt[-0].pe); } break;
case 306:
# line 1618 "gram.y"
{	yyval.p = new expr(COMPL,0,yypvt[-0].pe); } break;
case 307:
# line 1620 "gram.y"
{	yyval.p = new expr(yypvt[-1].t,0,yypvt[-0].pe); } break;
case 308:
# line 1622 "gram.y"
{	yyval.p = new texpr(SIZEOF,0,yypvt[-0].pe); } break;
case 309:
# line 1624 "gram.y"
{	yyval.p = new texpr(SIZEOF,yypvt[-0].pn->tp,0); } break;
case 310:
# line 1626 "gram.y"
{	
 			yyval.p = new expr(DEREF,yypvt[-3].pe,yypvt[-1].pe);
			} break;
case 311:
# line 1630 "gram.y"
{	yyval.p = new ref(REF,yypvt[-2].pe,yypvt[-0].pn); } break;
case 312:
# line 1632 "gram.y"
{	yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
case 313:
# line 1634 "gram.y"
{	yyval.p = new ref(REF,yypvt[-2].pe,Ncopy(yypvt[-0].pn)); } break;
case 314:
# line 1636 "gram.y"
{	yyval.p = new ref(DOT,yypvt[-2].pe,yypvt[-0].pn); } break;
case 315:
# line 1638 "gram.y"
{	yyval.p = new ref(DOT,yypvt[-2].pe,Ncopy(yypvt[-0].pn)); } break;
case 317:
# line 1641 "gram.y"
{
			if ( init_seen )
     				error( "syntax error:IrL illegal within ()");
			} break;
case 318:
# line 1647 "gram.y"
{	yyval.p = yypvt[-1].p; } break;
case 319:
# line 1649 "gram.y"
{	yyval.p = zero; } break;
case 320:
# line 1651 "gram.y"
{	yyval.p = new expr(ICON,0,0);
				yyval.pe->string = copy_if_need_be(yypvt[-0].s);
			} break;
case 321:
# line 1655 "gram.y"
{	yyval.p = new expr(FCON,0,0);
				yyval.pe->string = copy_if_need_be(yypvt[-0].s);
			} break;
case 322:
# line 1659 "gram.y"
{	yyval.p = new expr(STRING,0,0);
				yyval.pe->string = copy_if_need_be(yypvt[-0].s);
			} break;
case 323:
# line 1663 "gram.y"
{	yyval.p = new expr(CCON,0,0);
				yyval.pe->string = copy_if_need_be(yypvt[-0].s);
			} break;
case 324:
# line 1667 "gram.y"
{	yyval.p = new expr(THIS,0,0); } break;
case 325:
# line 1671 "gram.y"
{ 	yyval.p = new texpr(VALUE,tok_to_type(yypvt[-3].t),yypvt[-1].pe); } break;
case 326:
# line 1673 "gram.y"
{	yyval.p = new texpr(VALUE,yypvt[-3].pn->tp,yypvt[-1].pe); } break;
case 327:
# line 1674 "gram.y"
{ goto new2; } break;
case 328:
# line 1676 "gram.y"
{	new2:
				Ptype t = yypvt[-0].pn->tp;
				yyval.p=new texpr(NEW,t,0);
				yyval.pe->e2 = yypvt[-2].pe;
			} break;
case 329:
# line 1681 "gram.y"
{ goto new4; } break;
case 330:
# line 1683 "gram.y"
{	new4:
				Ptype t = yypvt[-0].pn->tp;
				yyval.p = new texpr(GNEW,t,0);
				yyval.pe->e2 = yypvt[-2].pe;
			} break;
case 331:
# line 1689 "gram.y"
{	
				Pexpr ee = yypvt[-1].pe;
				Pexpr e = yypvt[-3].pe;
				if (e->base==NEW || e->base==GNEW)
					e->e1 = ee;
				else
					yyval.p = new call(e,ee);
			} break;
case 332:
# line 1701 "gram.y"
{
		    yyval.pn =parametrized_typename(yypvt[-3].pn,
						  (expr_unlist(yypvt[-1].el))) ; } break;
case 333:
# line 1709 "gram.y"
{       yyval.pn = yypvt[-0].pn; } break;
case 334:
# line 1711 "gram.y"
{       yyval.pn = sta_name; } break;
case 335:
# line 1713 "gram.y"
{yyval.pn = yypvt[-1].pn ; } break;
case 336:
# line 1716 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 337:
# line 1718 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_qualifier = yypvt[-1].pn;
			} break;
case 338:
# line 1722 "gram.y"
{	yyval.p = new name(oper_name(yypvt[-0].t));
				yyval.pn->n_oper = yypvt[-0].t;
			} break;
case 339:
# line 1726 "gram.y"
{	yyval.p = new name(oper_name(yypvt[-0].t));
				yyval.pn->n_oper = yypvt[-0].t;
				yyval.pn->n_qualifier = yypvt[-2].pn;
			} break;
case 340:
# line 1731 "gram.y"
{	yyval.p = yypvt[-0].p;
				sig_name(yyval.pn);
			} break;
case 341:
# line 1735 "gram.y"
{	yyval.p = yypvt[-0].p;
				sig_name(yyval.pn);
				yyval.pn->n_qualifier = yypvt[-2].pn;
			} break;
case 342:
# line 1740 "gram.y"
{	
				if (strcmp(yypvt[-2].pn->string,yypvt[-0].pn->string)) error("syntax error: inconsistent destructor notation");
				yyval.p = new name(oper_name(DTOR));
				yyval.pn->n_oper = DTOR;
				yyval.pn->n_qualifier = yypvt[-2].pn;
			} break;
case 343:
# line 1752 "gram.y"
{ yyval.p = Ncast(yypvt[-2].p,yypvt[-1].pn); } break;
case 344:
# line 1755 "gram.y"
{ check_cast(); } break;
case 345:
# line 1759 "gram.y"
{
				TOK t = yypvt[-0].t;

				switch (t) {
				case FRIEND:
				case OVERLOAD:
				case REGISTER:
				case STATIC:
				case EXTERN:
				case AUTO:
				case VIRTUAL:
					error("%k in operatorT",t);
					t = INT;
					
				}

				yyval.p = new basetype(t,0);

			} break;
case 346:
# line 1778 "gram.y"
{ yyval.p = new basetype(TYPE,yypvt[-0].pn); } break;
case 347:
# line 1780 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) 
					yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t); 
				DECL_TYPE = 0;
			} break;
case 348:
# line 1786 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) 
			 		yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn);
				DECL_TYPE = 0;
			} break;
case 349:
# line 1793 "gram.y"
{ yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break;
case 350:
# line 1796 "gram.y"
{ yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break;
case 351:
# line 1799 "gram.y"
{	yyval.p = Ndata(yypvt[-1].p,yypvt[-0].pn); } break;
case 352:
# line 1801 "gram.y"
{	yyval.p = Ndata(yypvt[-3].p,yypvt[-2].pn);
				yyval.pn->n_initializer = yypvt[-0].pe;
			} break;
case 353:
# line 1807 "gram.y"
{ 
				check_decl(); 
				in_arg_list=1; 
				if ( in_class_decl ) in_mem_fct = 1; 
			} break;
case 354:
# line 1815 "gram.y"
{ 
			yyval.p = new fct(0,name_unlist(yypvt[-2].nl),yypvt[-1].t); 
			in_arg_list=0;
		    } break;
case 355:
# line 1820 "gram.y"
{ 
			yyval.p = new fct(0,name_unlist(yypvt[-3].nl),yypvt[-2].t); 
			in_arg_list=0;
			if (yypvt[-0].t != CONST)
			if ( la_look() != SM ) {
				error("syntax error: unexpected%k (did you forget a `;'?)",yypvt[-0].t);
                        	{ YYSTYPE y; y.t = SM; la_backup(SM,y); }
                        	lex_unget(yypvt[-0].t);
 			}
				else error("syntax error: unexpected%k",yypvt[-0].t);
			Pfct(yyval.pt)->f_const = 1;
		    } break;
case 356:
# line 1835 "gram.y"
{
				if (yypvt[-0].p)
					if (yypvt[-2].p)
						yypvt[-2].nl->add(yypvt[-0].pn);
					else {
						error("AD syntax");
						yyval.nl = new nlist(yypvt[-0].pn); 
					}
				else
					error("AD syntax");
			} break;
case 357:
# line 1847 "gram.y"
{
				if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); 
			} break;
case 359:
# line 1853 "gram.y"
{	yyval.p = 0; } break;
case 360:
# line 1857 "gram.y"
{	yyval.t = 1; } break;
case 361:
# line 1859 "gram.y"
{	yyval.t = ELLIPSIS; } break;
case 362:
# line 1861 "gram.y"
{	yyval.t = ELLIPSIS; } break;
case 363:
# line 1865 "gram.y"
{
			yyval.p = new ptr(PTR,0); 
			EXPECT_ID();
			} break;
case 364:
# line 1870 "gram.y"
{
			yyval.p = new ptr(RPTR,0); 
			EXPECT_ID();
			} break;
case 365:
# line 1875 "gram.y"
{	yyval.p = doptr(PTR,yypvt[-0].t); } break;
case 366:
# line 1877 "gram.y"
{	
				switch ( yypvt[-0].t ) {
				case CONST:
                                     yypvt[-1].pp->rdo = 1; break;
				case VOLATILE:
				     error('w',"\"volatile\" not implemented (ignored)");
				     break;
				default:
				    error( "syntax error: *%k", yypvt[-0].t );
				}
				yyval.p = yypvt[-1].pp; 
			} break;
case 367:
# line 1890 "gram.y"
{	yyval.p = doptr(RPTR,yypvt[-0].t); } break;
case 368:
# line 1892 "gram.y"
{ goto memptr1 ;
                   } break;
case 369:
# line 1896 "gram.y"
{
                        memptr1:
			yyval.p = new ptr(PTR,0);
			yyval.pp->memof = Pclass(Pbase(yypvt[-0].pn->tp)->b_name->tp);
			EXPECT_ID();
			} break;
case 370:
# line 1903 "gram.y"
{
	            yypvt[-1].t = yypvt[-0].t ;
                    goto memptr2 ;
                   } break;
case 371:
# line 1908 "gram.y"
{	memptr2:
				yyval.p = doptr(PTR,yypvt[-0].t);
				yyval.pp->memof = Pclass(Pbase(yypvt[-1].pn->tp)->b_name->tp);
			} break;
case 372:
# line 1914 "gram.y"
{ yyval.p = new vec(0,yypvt[-1].pe!=dummy?yypvt[-1].pe:0 ); } break;
case 373:
# line 1915 "gram.y"
{ yyval.p = new vec(0,0); } break;
	}
	goto yystack;  /* stack new state and value */
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.