V10/cmd/cfront/xptcfront/y.tab.c

Compare this file to the similar file:
Show the results in this format:


# line 24 "gram.y"
#include "cfront.h"
#include "size.h"
#include "template.h"
#include <string.h>
// include tqueue.h after YYSTYPE is defined ...


struct parstate {
	Ptype intypedef;
	int   defercheck;
	Pname intag;
} pstate[BLMAX];
static int px;
static void
SAVE_STATE()
{
	if ( px++ >= BLMAX ) error('i',"maximum scope depth exceeded");
	pstate[px].intypedef = in_typedef;
	in_typedef = 0;
	pstate[px].defercheck = defer_check;
	defer_check = 0;
	pstate[px].intag = in_tag;
	in_tag = 0;
}
static void
RESTORE_STATE()
{
	if ( --px < 0 ) error('i',"scope stack underflow");
	in_typedef = pstate[px].intypedef;
	defer_check = pstate[px].defercheck;
	in_tag = pstate[px].intag;
}

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

#ifdef DBG
#ifndef YYDEBUG
#define YYDEBUG 1
#endif
#endif

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], lcl_tn_vec[BLMAX], lcl_blk_vec[BLMAX];
extern void local_restore();
extern void local_name();

//nested class
static Plist nested_tn_vec[BLMAX], nested_type_vec[BLMAX];
extern void nested_restore();

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 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 242 "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
	Plist	pl;
	toknode* q;	// token queue
} YYSTYPE;

# line 262 "gram.y"
#include "tqueue.h"
extern YYSTYPE yylval, yyval;
extern int yyparse();

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

extern int 	must_be_id;	 // !0, TNAME => ID, i.e., int X
int	DECL_TYPE = 0; 	 // lalex() wants this set for global x(*fp)()
int	in_arg_list=0; 	 // !0 when parsing argument list
static int in_binit_list=0;
int	in_class_decl=0; // !0 when processing class definition
int	parsing_class_members=0; // !0 when parsing class def but not member function body
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 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 2246 "gram.y"


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;
        }
}

static void
end_al( Plist mtn, int rst )
// unhide type names hidden by arg names
// mtn == saved modified_tn
{
	if ( rst == 0 ) {
		// not really an arg list, or we are entering a function def
		// merge modified_tn and don't restore
		if ( modified_tn == 0 ) modified_tn = mtn;
		else {
			for ( Plist l = modified_tn; l->l; l = l->l ) ;
			l->l = mtn;
		}
	} else {
		restore();
		modified_tn = mtn;
	}
}
static void
arg_redec( Pname fn )
{
	if ( fn==0 || fn->tp->base != FCT )
		error('i',"bad inline rewrite!");
	Pname al = Pfct(fn->tp)->argtype;
	Pname n = 0;
	for ( ;  al;  al = al->n_list ) {
		DB( if(Ydebug>=1)error('d',"arg_redec:  %n  %d",al,al->lex_level); );
		// nested function args should have lex_level >= 1
		if ( al->lex_level==1 && (n=ktbl->look(al->string,0)) )
			n->hide();
		else if ( al->lex_level>1 && (n=ktbl->look(al->string,LOCAL)) )
			n->hide();
		DB( if(Ydebug>=1)error('d',"   %n",n); );
	}
}


short yyexca[] ={
-1, 1,
	0, -1,
	-2, 0,
-1, 26,
	40, 58,
	42, 58,
	46, 58,
	-2, 63,
-1, 54,
	71, 46,
	72, 46,
	-2, 45,
-1, 72,
	155, 360,
	-2, 295,
-1, 77,
	13, 355,
	97, 355,
	123, 355,
	155, 355,
	156, 355,
	160, 355,
	178, 355,
	179, 355,
	182, 355,
	-2, 295,
-1, 131,
	73, 109,
	-2, 103,
-1, 328,
	40, 59,
	42, 59,
	46, 59,
	-2, 65,
-1, 359,
	60, 20,
	71, 20,
	-2, 120,
-1, 360,
	60, 19,
	71, 19,
	-2, 119,
-1, 415,
	1, 210,
	3, 210,
	4, 210,
	7, 210,
	8, 210,
	9, 210,
	10, 210,
	13, 210,
	16, 210,
	19, 210,
	20, 210,
	23, 210,
	24, 210,
	28, 210,
	30, 210,
	33, 210,
	34, 210,
	39, 210,
	40, 210,
	46, 210,
	47, 210,
	50, 210,
	52, 210,
	54, 210,
	55, 210,
	72, 210,
	73, 210,
	80, 210,
	81, 210,
	82, 210,
	83, 210,
	84, 210,
	85, 210,
	86, 210,
	95, 210,
	97, 210,
	123, 210,
	156, 210,
	160, 210,
	178, 210,
	179, 210,
	182, 210,
	185, 210,
	209, 210,
	-2, 0,
	};
# define YYNPROD 375
# define YYLAST 3383
short yyact[]={

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

2038,-1000,-1000,-1000,-1000,  75,-1000,-1000,-1000,-1000,
-1000,-1000,-1000, 366,-1000,   9,2285, 697,-1000, 522,
-1000, 242,  33,2353, 730,-1000, 181,-1000,-1000,-1000,
 191, -53,1221,-1000,  -7, -10,-122, -23,-1000,-1000,
-1000, 910, 894,-1000,-1000, 181,-1000,  19, 187, 185,
-1000,-1000, -74,-123, 555,  62,-1000,-1000, 522,-1000,
-1000,-1000, 184, 643,-1000, 181, 964,1515,-1000, 849,
-1000, 347,1338,-1000, 964,-1000,-1000,2019,-1000, 849,
 267,-1000,-1000,-1000,-1000, 205, 270, 522,-1000, 939,
1404,-1000,1404,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
 343, 246,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000,-1000, 128,-1000,-1000,-1000,-1000,-1000, -24,-1000,
2117, 169, 181,-1000,-1000,-1000,  22,  44,-1000,-1000,
-1000,1404, 331,1286,1404, 849,-1000, 327,-1000,-1000,
1404,3193,1815, 461, 891, 715,1885,1885,1885,1885,
1885,1885,1885,1885,1885,-1000,-1000,1404,-1000,-1000,
-1000,-1000,-1000,-1000,-1000, 295,1221, 359, 360,-1000,
 120,3193,1515,  49,-1000,2285,-1000, 181, 298,-1000,
 330,  -8, 146,-1000,-1000,-1000, 759, 359, 705,3084,
1949, 329,-1000, 730,-1000,-1000, 267,-1000, 135,-1000,
-1000,3224,2301, 156,-1000,-1000,-1000,-1000,-1000,  -2,
-1000,-1000,-1000,-1000,-1000, 117, 114,-1000, 168,  33,
  43, 954,1404,  57,-1000, 129,  22, 135, 110, 144,
-1000, 255,   9,2206,-1000,-1000, 138,  16,1515,-1000,
 555, 964, 135, 964, 964, 964, 964, 964, 964, 964,
 964, 964, 964, 964, 964, 964, 964, 964, 964, 964,
 964, 891, 964, 386,1751, 715,-1000, 964, 919,1885,
 919,1515,-1000,-1000,1338, 453, 891, 891, 891, 891,
 453, 453, 453, 453,2092,3039,1973,-1000,1221, 811,
-1000,-1000,1515,1515,-1000,  36,  39,-1000,-1000,-1000,
1404, -26,-1000, 322,1350,-1000,1515,-1000, 493,-1000,
 695, 342,-1000, 321,-1000, -26, 936,-1000,-1000,1404,
-1000, 258,  -2,-1000,-1000,-115,-1000,-1000,-1000,-1000,
 105,-1000, 131,-1000,-1000, 253, 542,-1000,-1000, 135,
-1000,  22, 964,  35,-1000,-1000,-1000,1286,-1000, 181,
-1000,-1000, 345,-1000,  27,  66,  39,-1000,-1000,-1000,
3193,-1000,3193,  64,  64,-1000,1486,3269,2525, 231,
1058,-1000,1051,1051,1051,1829,1678,3193,3193,2994,
2949, 891, 964,-1000,-1000,1338,2904,-1000,-1000, 453,
-1000,-1000, 317, 314,-1000, 378,  32,  71,-1000,-1000,
-1000, 307, 303,-1000,-1000, -30, 626, 135,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,-1000, 345, 618, 358,
 358,-1000,-1000, 258, -59,-1000, 954,-1000, 572,-1000,
 572,-1000,-1000,3193,-1000,2182,-1000,-1000,-1000, 345,
-1000,-1000, 964,1885,2859, 272,-1000,-1000, 715,-1000,
-1000, 258, 285,-1000,-1000,-1000,-1000,  29, 130,-1000,
1515, 357,-1000, -26,1515,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,  58,-1000,-1000,2293,
 270,3288, 891,1885, 715,-1000,-1000, 849, 345, -15,
-1000, 626, 268,1515,-1000, 165,-1000,   9,   9, 270,
 891,-1000,-1000,-1000,-1000,-1000,-1000,-1000,1167,-1000,
-1000, 266,  39, 162, 161,-1000,-1000,-1000, 964,  56,
-1000,-1000,-1000, 299, 299, 350, 299, 159, 155,-1000,
 151,3129,-1000,-1000,  17,-1000, 349,1666, 402, 891,
-1000,-1000,1167,1581,-1000,  50,2814,  39,-1000, 964,
-1000,-1000,-1000,-1000,-1000, 964,-1000,1581,1581,1581,
1581,1581,1581,1581,1581,1581,1581,1581,1581,1581,
1581,1581,1581,1581,1581,-1000,-1000,  18, 891, 964,
1600,-1000,2769,-1000,-1000,-1000, 404,2724,-1000,-1000,
-1000,-1000,-1000,2679,-1000,3174,  51,  51,-1000,1134,
2376,1420,  65,1040,-1000, 770, 770, 770,1760,1243,
3174,3174,2634, 369, 249,2589, 891, 964,-1000,-1000,
-1000, 964,-1000,-1000,-1000,-1000,1581, 299,-1000,1885,
2544,-1000,2499,-1000,3243,-1000, 891,1885, 964, 891,
2451,-1000,-1000 };
short yypgo[]={

   0, 672,  65,  15,  22,   7,  24, 656,   6,  12,
 653,  17, 703,   8, 651,  35,  47,  29,  40,  18,
 648, 640, 108, 637, 629,  66, 626, 127,  36,  26,
 624,  33, 623,   1,   5, 621, 600,  14,   0,  34,
   2,  41, 599,  20,  16,  54,  46, 589,  38,  21,
  31, 567,  10, 553,  28,  27,   3, 126, 645, 401,
 709, 630, 549,  42, 544, 542, 541,   4, 537, 534,
  11,  32, 675,  39,  43, 528, 523, 519, 510, 503,
 502, 499,  64, 491, 490, 489, 488, 403,  45,  25,
 483, 472, 466, 465, 447, 442, 437, 436, 432, 429,
 426,  19, 414 };
short yyr1[]={

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

   0,  -2,   1,   2,   3,  62,   5,   6,   7,  21,
  22,  23,  24,   0,   9,   0,   0,  45,  69,   0,
 178, 134,   0,   0,   0,  61,  -2,  66,  67,  68,
   0,   0,   0, 164, 364, 365,   0, 370, 355, 167,
 124,   0,   0, 334, 335,   0,   4,   0,   0,   0,
  19,  20,   0,   0,  -2,   0,  55,  70,  71,  72,
  73,  74, 134,   0,  52,  58, 295, 295,  27,  36,
 170, 355,  -2, 185, 295, 374, 172,  -2, 184, 360,
   0,  64, 165, 166, 180, 134, 182, 183, 367,   0,
 295,  56, 295, 135, 136, 137, 138, 139, 140, 141,
 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
   0,   0, 154, 155, 156, 157, 158, 159, 160, 161,
 162, 163, 202, 346, 347, 366, 368, 336, 369, 372,
   0,  -2, 120, 105, 117, 119, 100,  83,  79,  80,
 120, 295,   0,  88, 295,  36,  50,   0,  54,  47,
 295,  49,   0, 335, 294,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0, 317, 318, 295, 320, 321,
 322, 323, 324, 325, 337,   0,   0,   0,   0, 345,
   0, 247, 295,  39,  44,   0,  62,  63,   0, 168,
   0, 361, 244, 358, 245, 359, 189,  61,   0,   0,
   0,   0, 168,   0, 179, 134,   0, 186,   0,  76,
  77,  78, 194,   0, 152, 153, 348, 349, 350, 202,
 371, 101, 123, 125, 126, 130, 129, 131,   0,   0,
   0,   0, 295,   0,  84,  98, 100,   0,   0,   0,
  87,   0,   0,   0,  89,  90,   0,  39, 295,  53,
  46, 295,   0, 295, 295, 295, 295, 295, 295, 295,
 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
 295, 290, 295, 335,   0,   0, 300, 295,   0,   0,
   0, 295, 296, 297, 295, 301, 302, 303, 304, 305,
 306, 307, 308, 309, 310,   0, 197, 338,   0,   0,
 339, 341, 295, 295,  26,   0,   0,  32,  33,  37,
 295, 171, 173,   0, 360, 362, 295,  71, 352, 187,
 189, 189, 373, 337, 175, 176,   0, 181,  -2, 295,
  57, 351, 194,  60, 203,   0, 106, 127, 128, 132,
 180, 118, 108, 110, 112,   0,   0, 121, 122,   0,
  81, 100, 295,   0, 333,  25,  10,   0,  91,  -2,
  -2,  92,  93,  94,   0,   0,   0,  29,  30,  51,
  48,  59, 272, 273, 274, 275, 276, 277, 278, 279,
 280, 281, 282, 283, 284, 285, 286, 287, 288,   0,
   0, 292, 295, 298, 299, 295,   0, 312, 314, 313,
 315, 316,   0,   0, 319,   0, 197, 197, 340, 342,
 343,   0,   0, 248,  31,  -2,   0,   0, 169, 168,
 357, 363, 246, 191, 192, 353, 188, 190,   0,   0,
   0,  75, 196, 195, 102, 133,   0, 113,   0, 114,
   0, 104,  85,  99,  82,   0,  86,  96,  97,  95,
   8,  28, 295,   0,   0,   0, 311, 332,   0, 199,
 344, 198,   0, 326, 327, 204, 212,   0,  38,  40,
 295,   0,  65, 356, 295, 193, 174, 177, 107,  34,
 111, 115, 116,  11,  12,  13,  66,  15,  17,   0,
  45, 289, 291,   0,   0, 328, 329,   0,   0, 208,
 213,   0,   0, 295, 354,  39,  14,   0,   0,  45,
 293, 330, 331, 200, 201, 205, 206, 211,   0,  41,
  42,   0,   0,   0,   0, 207, 221, 224, 295,  61,
 227, 228, 229,   0,   0,   0,   0, 337, 167, 240,
   0, 214, 215, 216,   0, 218,   0,   0, 335, 271,
  43,  35,   0,   0, 223,   0,   0,   0, 208, 295,
 208, 233, 208, 236, 238, 295, 242,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0, 217, 208,   0, 267, 295,
   0,  16,   0, 222, 225, 226, 230,   0, 232, 208,
 235, 208, 208,   0, 208, 249, 250, 251, 252, 253,
 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
 264, 265,   0,   0,   0,   0, 269, 295,  18, 208,
 209, 295, 237, 239, 208, 243,   0,   0, 220,   0,
   0, 231,   0, 241, 266, 219, 268,   0, 295, 270,
   0, 208, 234 };
# 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 476 "gram.y"
{	return 2; } break;
case 2:
# line 477 "gram.y"
{	return 1; } break;
case 3:
# line 478 "gram.y"
{	return 0; } break;
case 4:
# line 480 "gram.y"
{
				set_linkage(yypvt[-1].s);
				bl_level--;
				return 1;
			} break;
case 5:
# line 486 "gram.y"
{
				set_linkage(0);
				bl_level++;
				return 1;
			} break;
case 6:
# line 491 "gram.y"
{  return 1; } break;
case 7:
# line 492 "gram.y"
{  return 1 ;} break;
case 8:
# line 497 "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 506 "gram.y"
{ templp->start() ; } break;
case 10:
# line 508 "gram.y"
{templp->enter_parameters() ; } break;
case 11:
# line 510 "gram.y"
{templp->end(yypvt[-0].pn);
                  templp->in_progress = false ;
                  goto mod;} break;
case 12:
# line 516 "gram.y"
{ goto mod; } break;
case 13:
# line 518 "gram.y"
{ goto mod; } break;
case 14:
# line 520 "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 527 "gram.y"
{templp->curr_tree_template = yypvt[-0].t ; } break;
case 16:
# line 529 "gram.y"
{yypvt[-2].pn->n_initializer = yypvt[-0].pe ; /* actually a stmt */
                    yyval.pn = yypvt[-2].pn; } break;
case 17:
# line 532 "gram.y"
{templp->curr_tree_template = yypvt[-0].t ; } break;
case 18:
# line 534 "gram.y"
{yypvt[-3].pn->n_initializer = yypvt[-1].pe ; /* actually a stmt */
                    yyval.pn = yypvt[-3].pn ; } break;
case 20:
# line 540 "gram.y"
{ yyval.pn = Ncopy(yypvt[-0].pn) ;} break;
case 21:
# line 544 "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;
				curr_scope = 0;
				if (yypvt[-0].pn==0) yyval.i = 1; 
			     }
			} break;
case 22:
# line 558 "gram.y"
{	goto mod; } break;
case 23:
# line 560 "gram.y"
{	goto mod; } break;
case 24:
# line 562 "gram.y"
{ mod:	if (modified_tn) {
					restore();
					modified_tn = 0;
				}
				local_blk = 0;
				curr_scope = 0;
				if (local_tn) {
					local_restore();
					local_tn = 0;
				}
				
				if (nested_tn) { // x::f(){}
					nested_restore();
					nested_tn = 0;
					nested_type = 0;
				}
			} break;
case 25:
# line 580 "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 588 "gram.y"
{
				err_name = yypvt[-3].pn;
				if(err_name) err_name->n_initializer = yypvt[-1].pe;
				goto fix;
			} break;
case 27:
# line 594 "gram.y"
{
				Ptype t;
				err_name = yypvt[-1].pn;
			fix:
				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);
				}
			} break;
case 28:
# line 620 "gram.y"
{	Pname n = Nfct(yypvt[-5].p,yypvt[-4].pn,yypvt[-0].p);
				Fargdcl(n->tp,name_unlist(yypvt[-3].nl),n);
				Finit(n->tp) = yypvt[-1].pn;
				yyval.p = n;
				NOT_EXPECT_ID();
                        //???POP_SCOPE(); // undef arg names
			} break;
case 29:
# line 628 "gram.y"
{
				Pname n = Nfct(yypvt[-4].p,yypvt[-3].pn,dummy);
				Fargdcl(n->tp,name_unlist(yypvt[-2].nl),n);
				yypvt[-0].q->retval.pn = n;
				yyval.p = n;
				NOT_EXPECT_ID();
			} break;
case 30:
# line 636 "gram.y"
{
				error(&yypvt[-3].pn->where,"syntax error -- did you forget a ';'?");
				Pname n = Nfct(yypvt[-4].p,yypvt[-3].pn,0);
				yyval.p = n;
				NOT_EXPECT_ID();
                   	//???POP_SCOPE(); // undef arg names
			} break;
case 31:
# line 646 "gram.y"
{	Pname n = Nfct(defa_type,yypvt[-4].pn,yypvt[-0].p);
				Fargdcl(n->tp,name_unlist(yypvt[-3].nl),n);
				if ( yypvt[-1].pn && yypvt[-1].pn->n_list && 
     					ccl && ccl->csu == UNION )  
						error( "multiple initializers in unionK %s::%n", yypvt[-4].pn->string, yypvt[-4].pn );
				Finit(n->tp) = yypvt[-1].pn;
				yyval.p = n;
				NOT_EXPECT_ID();
                        //???POP_SCOPE(); // undef arg names 
			} break;
case 32:
# line 657 "gram.y"
{
				Pname n = Nfct(defa_type,yypvt[-3].pn,dummy);
				Fargdcl(n->tp,name_unlist(yypvt[-2].nl),n);
				yypvt[-0].q->retval.pn = n;
				yyval.p = n;
				NOT_EXPECT_ID();
			} break;
case 33:
# line 665 "gram.y"
{
				error(&yypvt[-3].pn->where,"badD of%n -- did you forget a ';'?",yypvt[-3].pn);
				Pname n = Nfct(defa_type,yypvt[-3].pn,0);
				yyval.p = n;
				NOT_EXPECT_ID();
                         //???POP_SCOPE(); // undef arg names
			} break;
case 34:
# line 675 "gram.y"
{//PUSH_ARG_SCOPE
                        	arg_redec(yypvt[-0].pn);
                   	} break;
case 35:
# line 679 "gram.y"
{
				Finit(yypvt[-3].pn->tp) = yypvt[-1].pn;
				Pfct(yypvt[-3].pn->tp)->body = Pblock(yypvt[-0].p);
				yyval.pn = yypvt[-3].pn;
				NOT_EXPECT_ID();
                        //???POP_SCOPE(); // undef arg names
			} break;
case 36:
# line 690 "gram.y"
{
			// if parsing implicit inline def, save body
			//   of function for parsing after class def
			switch ( NEXTTOK() ) {
			case LC: case COLON:
				if ( in_class_decl ) {
					// mem or friend inline def
					// save text of mem_init & ftn
					la_backup(yychar,yylval);
					// yylval used as dummy...
					la_backup(FDEF, yylval);
					if ( yylval.q = save_text() )
						yychar = EMPTY;
					else { // syntax error
						// just parse in place
						yylex(); // FDEF
						yychar = yylex();
					}
				} // if in_class_decl
				break;
			default:
				la_backup(yychar,yylval);
				yychar = NO_ID; // 'graceful' recovery
				break;
			}
		   } break;
case 37:
# line 718 "gram.y"
{ ++in_binit_list; } break;
case 38:
# line 719 "gram.y"
{	
				yyval.p = yypvt[-0].p; 
				in_arg_list = 0;
				--in_binit_list;
			} break;
case 39:
# line 725 "gram.y"
{	yyval.p = 0; } break;
case 40:
# line 729 "gram.y"
{ yyval.p = yypvt[-0].p; } break;
case 41:
# line 731 "gram.y"
{ yyval.pn = yypvt[-0].pn;  yyval.pn->n_list = yypvt[-2].pn; } break;
case 42:
# line 735 "gram.y"
{
				yyval.pn = new name;
				yyval.pn->n_initializer = yypvt[-1].pe;
			} break;
case 43:
# line 740 "gram.y"
{
				Pname n = Ncopy(yypvt[-3].pn);
				n->base = yypvt[-3].pn->base;
				n->tp = yypvt[-3].pn->tp;
				n->n_initializer = yypvt[-1].pe;
				yyval.pn = n;
			} break;
case 44:
# line 764 "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 45:
# line 774 "gram.y"
{
                                yyval.p = 0; 
			} break;
case 47:
# line 781 "gram.y"
{
                                if ( in_typedef ) {
                                        error("Tdef field");
                                        in_typedef = 0;
                                }
                        //      ENTER_NAME(yypvt[-1].pn);
                        } break;
case 48:
# line 789 "gram.y"
{	yyval.p = yypvt[-3].pn;
				yyval.pn->tp = new basetype(FIELD,yypvt[-0].pn);
		 	} break;
case 49:
# line 793 "gram.y"
{	yyval.p = new name;
				yyval.pn->tp = new basetype(FIELD,yypvt[-0].pn);
                                if ( in_typedef ) {
                                        error("Tdef field");
                                        in_typedef = 0;
                                }
			} break;
case 50:
# line 801 "gram.y"
{
                        //      ENTER_NAME(yypvt[-1].pn);
                        } break;
case 51:
# line 805 "gram.y"
{       Pexpr e = yypvt[-0].pe;
                                if (e == dummy) error("emptyIr");
                                yypvt[-3].pn->n_initializer = e;
                                init_seen = 0;
                        } break;
case 52:
# line 813 "gram.y"
{	
				if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); 
				if ( NEXTTOK() == CM && la_look() == TNAME ) 
					EXPECT_ID();
			} break;
case 53:
# line 819 "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");
				}
				if ( NEXTTOK() == CM && la_look() == TNAME ) 
					EXPECT_ID();
			} break;
case 54:
# line 834 "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 55:
# line 850 "gram.y"
{
				yyval.p = yypvt[-1].pb->aggr(); 
				in_typedef = 0;
				in_tag = 0;
				DECL_TYPE = 0; 
			} break;
case 56:
# line 861 "gram.y"
{ templp->parameters_in_progress++; } break;
case 57:
# line 862 "gram.y"
{ templp->parameters_in_progress--; } break;
case 58:
# line 864 "gram.y"
{ yyval.pn = templp->check_tname(yypvt[-0].pn) ; } break;
case 59:
# line 866 "gram.y"
{ 
		    yyval.pn = parametrized_typename(yypvt[-3].pn,
						  (expr_unlist(yypvt[-1].el))) ; 
		  } break;
case 60:
# line 871 "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 61:
# line 879 "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 62:
# line 885 "gram.y"
{	yyval.p = new basetype(EXTERN,0);
				yyval.pb->b_linkage = yypvt[-0].s;
				if (DECL_TYPE == -1) DECL_TYPE = 0;
			} break;
case 63:
# line 890 "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 64:
# line 896 "gram.y"
{ // modified tn_list TNAME
				yyval.p = new basetype(TYPE,yypvt[-0].pn);
				//xxx qualifier currently ignored...
				if (DECL_TYPE == -1) DECL_TYPE = 0;
			} break;
case 65:
# line 902 "gram.y"
{
				yyval.pb = parametrized_basetype(yypvt[-3].pn,(expr_unlist(yypvt[-1].el)));
			} break;
case 68:
# line 908 "gram.y"
{ 
				if (DECL_TYPE == TNAME)
					yyval.p = new basetype(TYPE,yypvt[-0].pn); 
		//	else if (DECL_TYPE == TSCOPE)
		//	yyval.p = 0;
				else
				if (DECL_TYPE == 0 &&
					yypvt[-0].p->base == TNAME)
						yyval.p = new basetype(TYPE,yypvt[-0].pn); 
				else
					yyval.p = new basetype(yypvt[-0].t,0); 
				DECL_TYPE = -1;
			} break;
case 70:
# line 925 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) {
					switch (yypvt[-1].pb->base) { Pbase bt;
					case COBJ: case EOBJ:
						bt = new basetype(0,0);
						*bt = *yypvt[-1].pb;
						DEL(yypvt[-1].pb);
						yypvt[-1].pb = bt;
					}
					yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t); 
				}
				DECL_TYPE = 0;
			} break;
case 71:
# line 939 "gram.y"
{
//error('d',"decl_type: %d  $1: %t  $2: %n",DECL_TYPE,yypvt[-1].pb,yypvt[-0].pn);
				if ( DECL_TYPE != -1 ) 
			 		yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn);
			/*XXX*/	else if(yypvt[-1].pb==0) yyval.p=new basetype(TYPE,yypvt[-0].pn);
				DECL_TYPE = 0;
			} break;
case 72:
# line 946 "gram.y"
{ yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break;
case 73:
# line 947 "gram.y"
{ yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break;
case 74:
# line 949 "gram.y"
{ 
				if (DECL_TYPE == TYPE) {
					switch (yypvt[-1].pb->base) { Pbase bt;
					case COBJ: case EOBJ:
						bt = new basetype(0,0);
						*bt = *yypvt[-1].pb;
						DEL(yypvt[-1].pb);
						yypvt[-1].pb = bt;
					}
					yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t);  
				}
			/*XXX*/	else if (DECL_TYPE == TSCOPE) {
			/*XXX*/		error('i',"type decl_marker(tscope)");
			/*XXX*/	//	yyval.p = yypvt[-1].p;//ignore(?)
			/*XXX*/	}
				else
					yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn); 
				DECL_TYPE = -1;
			} break;
case 75:
# line 971 "gram.y"
{yypvt[-2].el->add(new expr(ELIST,yypvt[-0].pe,NULL)) ; } break;
case 76:
# line 972 "gram.y"
{ yyval.el =
				     new elist(new expr(ELIST,yypvt[-0].pe,NULL)); } break;
case 77:
# line 976 "gram.y"
{yypvt[-0].pn->n_template_arg = template_actual_arg_dummy ;
		   yyval.pe = yypvt[-0].pn; /* keep yacc happy */ } break;
case 78:
# line 979 "gram.y"
{ yyval.pe = yypvt[-0].pe ; } break;
case 79:
# line 984 "gram.y"
{ enumcheck:
			Ptype tx = yypvt[-0].pn->tp;
			yyval.p = yypvt[-0].p;
			if ( tx->base == TYPE ) {
				yyval.p = Pbase(tx)->b_name;
				tx = yyval.pn->tp;
				if ( tx->base != EOBJ
				||   strcmp(yyval.pn->string,yypvt[-0].pn->string)
				)
					error("%n of type%t redeclared as enum.",yypvt[-0].pn,tx);
			} else if ( tx->base != EOBJ )
				error("%n of type%t redeclared as enum",yypvt[-0].pn,tx);
		} break;
case 80:
# line 997 "gram.y"
{ goto enumcheck; } break;
case 81:
# line 1000 "gram.y"
{ yyval.p = end_enum(0,yypvt[-1].nl); } break;
case 82:
# line 1001 "gram.y"
{ yyval.p = end_enum(yypvt[-3].pn,yypvt[-1].nl); } break;
case 83:
# line 1002 "gram.y"
{ yyval.pb = (Pbase)yypvt[-0].pn->tp; } break;
case 84:
# line 1006 "gram.y"
{	if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); } break;
case 85:
# line 1008 "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 88:
# line 1018 "gram.y"
{ yyval.pn = NULL ;} break;
case 91:
# line 1026 "gram.y"
{ templp->collect(yypvt[-1].t, yypvt[-0].pn) ; } break;
case 92:
# line 1028 "gram.y"
{ templp->collect(yypvt[-1].t, yypvt[-0].pn) ; } break;
case 93:
# line 1030 "gram.y"
{templp->collect(Ndata(yypvt[-1].p,yypvt[-0].pn)); } break;
case 94:
# line 1036 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 95:
# line 1038 "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 96:
# line 1043 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 97:
# line 1047 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 98:
# line 1053 "gram.y"
{	yyval.p = yypvt[-0].pn; yyval.pn->tp = moe_type; } break;
case 99:
# line 1055 "gram.y"
{	yyval.p = yypvt[-2].pn;
				yyval.pn->tp = moe_type;
				yyval.pn->n_initializer = yypvt[-0].pe;
			} break;
case 100:
# line 1060 "gram.y"
{	yyval.p = 0; } break;
case 101:
# line 1064 "gram.y"
{	parsing_class_members = 0;
				RESTORE_STATE();
				switch ( NEXTTOK() ) {
				case TYPE: case AGGR: case ENUM: case EOFTOK:
					error("`;' or declaratorX afterCD");
					la_backup(yychar,yylval);
					yychar = SM;
					break;
				}
				la_backup(yychar,yylval);
				yychar = -1;
				restore_text();
				++bl_level; // scope weirdness!
				++in_mem_fct;
			} break;
case 102:
# line 1080 "gram.y"
{
				--in_mem_fct;
				--bl_level; // scope weirdness!
				if ( yychar == ID ) {
					// (yuk!) adjust lex level
					--yylval.pn->lex_level;
				}
				ccl->mem_list = name_unlist(yypvt[-3].nl);
				if ( --in_class_decl )  // nested class
					// continue to parse enclosing class
					parsing_class_members = 1;
				ccl->nest_list = nested_type;
				if ( nested_tn ) nested_restore();
				nested_type = nested_type_vec[in_class_decl];
				nested_tn = nested_tn_vec[in_class_decl];
				end_cl();
				declTag = 1;
                        //POP_SCOPE();
			} break;
case 103:
# line 1100 "gram.y"
{ aggrcheck:
				yyval.pb = (Pbase)yypvt[-0].pn->tp; 
				if ( yyval.p->base == TYPE ) {
					Pname nx = yyval.pb->b_name;
					yyval.pb = (Pbase)nx->tp;
					if ( yyval.p->base != COBJ
					||   strcmp(nx->string,yypvt[-0].pn->string)
					)
						error("%n of type%t redeclared as%k.",yypvt[-0].pn,yyval.pb,yypvt[-1].t);
				} else if ( yyval.p->base != COBJ )
					error("%n of type%t redeclared as%k",yypvt[-0].pn,yyval.pb,yypvt[-1].t);
				check_tag();
			} break;
case 104:
# line 1114 "gram.y"
{ 
		    Pname p = parametrized_typename(yypvt[-3].pn, (expr_unlist(yypvt[-1].el))) ;
                    yyval.pb = (Pbase)p->tp; 
                    check_tag(); 
		  } break;
case 105:
# line 1120 "gram.y"
{
				goto aggrcheck;
			} break;
case 108:
# line 1130 "gram.y"
{ yyval.pbc = yypvt[-0].pbc; } break;
case 109:
# line 1131 "gram.y"
{ yyval.pbc = 0; } break;
case 111:
# line 1136 "gram.y"
{	if (yypvt[-0].pbc) { yyval.pbc = yypvt[-0].pbc; yyval.pbc->next = yypvt[-2].pbc; } } break;
case 112:
# line 1139 "gram.y"
{ yyval.pbc = dobase(0,yypvt[-0].pn); } break;
case 113:
# line 1140 "gram.y"
{ yyval.pbc = dobase(yypvt[-1].t,yypvt[-0].pn); } break;
case 114:
# line 1141 "gram.y"
{ yyval.pbc = dobase(0,yypvt[-0].pn,yypvt[-1].t); } break;
case 115:
# line 1142 "gram.y"
{ yyval.pbc = dobase(yypvt[-2].t,yypvt[-0].pn,yypvt[-1].t); } break;
case 116:
# line 1143 "gram.y"
{ yyval.pbc = dobase(yypvt[-1].t,yypvt[-0].pn,yypvt[-2].t); } break;
case 117:
# line 1147 "gram.y"
{//PUSH_CLASS_SCOPE(0);
				parsing_class_members = 1;
				yyval.p = start_cl(yypvt[-1].t,0,0); 
				nested_tn_vec[in_class_decl] = nested_tn;
				nested_type_vec[in_class_decl++] = nested_type;
				nested_tn = nested_type = 0;
				SAVE_STATE();
			} break;
case 118:
# line 1157 "gram.y"
{ //PUSH_CLASS_SCOPE(yypvt[-2].pn->string);
				parsing_class_members = 1;
				yyval.p = start_cl(yypvt[-3].t,yypvt[-2].pn,yypvt[-1].pbc);
				nested_tn_vec[in_class_decl] = nested_tn;
				nested_type_vec[in_class_decl++] = nested_type;
				nested_tn = nested_type = 0;
				SAVE_STATE();
			} break;
case 119:
# line 1167 "gram.y"
{ yyval.p = yypvt[-0].pn; } break;
case 120:
# line 1168 "gram.y"
{ yyval.p=yypvt[-0].p; } break;
case 121:
# line 1171 "gram.y"
{ yyval.p = yypvt[-0].pn; } break;
case 122:
# line 1172 "gram.y"
{ yyval.p=yypvt[-0].p; } break;
case 123:
# line 1176 "gram.y"
{
				if (yypvt[-0].p) {
					if (yypvt[-1].p)
						yypvt[-1].nl->add_list(yypvt[-0].pn);
					else
						yyval.nl = new nlist(yypvt[-0].pn);
				}
			} break;
case 124:
# line 1184 "gram.y"
{ yyval.p = 0; } break;
case 125:
# line 1186 "gram.y"
{
				error( "ZizedTD must be atG, notC scope" );
				error('i', "cannot recover from previous error" );
			} break;
case 132:
# line 1199 "gram.y"
{	yyval.p = new name;
				yyval.pn->base = yypvt[-1].t;
			} break;
case 133:
# line 1209 "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->tp = Ptype(n->cond);
					n->cond = 0;
					// 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 134:
# line 1238 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 135:
# line 1240 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_oper = DTOR;
			} break;
case 136:
# line 1244 "gram.y"
{	yyval.p = new name(oper_name(yypvt[-0].t));
				yyval.pn->n_oper = yypvt[-0].t;
			} break;
case 137:
# line 1248 "gram.y"
{	Pname n = yypvt[-0].pn;
				n->string = "_type";
				n->n_oper = TYPE;
				n->cond = Pexpr(n->tp);
				// n->n_initializer = Pexpr(n->tp);
				n->tp = 0;
				yyval.p = n;
			} break;
case 152:
# line 1272 "gram.y"
{	yyval.t = CALL; } break;
case 153:
# line 1273 "gram.y"
{	yyval.t = DEREF; } break;
case 159:
# line 1279 "gram.y"
{	yyval.t = NEW; } break;
case 160:
# line 1280 "gram.y"
{	yyval.t = DELETE; } break;
case 161:
# line 1281 "gram.y"
{	yyval.t = REF; } break;
case 162:
# line 1282 "gram.y"
{	yyval.t = CM; } break;
case 163:
# line 1283 "gram.y"
{	yyval.t = REFMUL;
					if (yypvt[-0].t == DOT) error(".* cannot be overloaded");
				} break;
case 164:
# line 1289 "gram.y"
{   if ( yypvt[-0].pn != sta_name ) {
// error('d',"tn_list: tscope: pn1: %s", yypvt[-0].pn->string);
				Ptype t = yypvt[-0].pn->tp;
				while ( t->base == TYPE )
					t = Pbase(t)->b_name->tp;
				Pname n = Pbase(t)->b_name;
				if (NEXTTOK() == TNAME
				&& strcmp(n->string,yylval.pn->string)==0){
					// ctor -- change to ID to avoid
					//    parsing as type spec
					yychar = ID;
					yylval.pn = Ncopy(yylval.pn);
					yylval.pn->n_oper = TNAME;
				}
			    }
			    yyval.pn = yypvt[-0].pn;
			} break;
case 165:
# line 1307 "gram.y"
{ error('s', "CNs do not nest, use typedef x::y y_in_x"); } break;
case 166:
# line 1312 "gram.y"
{	yyval.pn = yypvt[-0].pn;
				//xxx qualifier currently ignored...
				// yyval.pn = Ncopy( yypvt[-0].pn );
				// yyval.pn->n_oper = TNAME;
				// yyval.pn->n_qualifier = yypvt[-1].pn;
			} break;
case 167:
# line 1319 "gram.y"
{	yyval.pn = yypvt[-0].pn;
			//	yyval.pn = Ncopy( yypvt[-0].pn );
			//	yyval.pn->n_oper = TNAME;
			} break;
case 168:
# line 1326 "gram.y"
{ yyval.i = 0; } break;
case 169:
# line 1328 "gram.y"
{ /* const/volatile function */
				switch ( yypvt[-0].t ) {
				case VOLATILE:
					error('s',"volatile functions");
					break;
				case CONST:
					yyval.i = (yypvt[-1].i | 1);
					break;
				default:
					if ( NEXTTOK() != SM
					&&   yychar != COLON
					&&   yychar != LC ) {
						la_backup(yychar,yylval);
						yylval.t = yypvt[-0].t;
						la_backup(TYPE,yylval);
						yylval.t = SM;
						yychar = SM;
						error("syntax error: unexpected%k (did you forget a `;'?)",yypvt[-0].t);
					} else error("FD syntax: unexpected%k",yypvt[-0].t);
					break;
				}
 			} break;
case 170:
# line 1353 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = yypvt[-0].pt;
			} break;
case 171:
# line 1357 "gram.y"
{ /* function with no argument */
 				yypvt[-3].pn->tp = new fct(yypvt[-3].pn->tp,0,1);
 				Pfct(yypvt[-3].pn->tp)->f_const = (yypvt[-0].i & 1);
 			} break;
case 172:
# line 1362 "gram.y"
{	Pname n = yypvt[-1].pn;
				yyval.p = Ncopy(n);
                                //??? what if tname is qualified ???
				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 173:
# line 1375 "gram.y"
{	
				yypvt[-3].pn->tp = new fct(yypvt[-3].pn->tp,yypvt[-1].pn,1); 
 				in_arg_list = 0;
 				end_al(yypvt[-2].pl,0);
				RESTORE_STATE();
                        //POP_SCOPE(); // similar to end_al()
			} break;
case 174:
# line 1383 "gram.y"
{
				Pptr p = new ptr( PTR, 0 );
				Ptyp(p) = new basetype(TYPE,yypvt[-5].pn);
				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 175:
# line 1392 "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 176:
# line 1397 "gram.y"
{ /* function with no argument */
				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 = (yypvt[-0].i & 1);
			} break;
case 177:
# line 1404 "gram.y"
{	memptrdcl(yypvt[-3].pn,yypvt[-5].pn,yypvt[-0].pt,yypvt[-2].pn);
				yyval.p = yypvt[-2].p;
			} break;
case 179:
# line 1409 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_qualifier = yypvt[-2].pn;
				error(strict_opt?0:'w',"`.' used for qualification; please use `::' (anachronism)");
			} break;
case 180:
# line 1414 "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 181:
# line 1421 "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 `::'");
				if ( yypvt[-3].pn != sta_name ) {
    					set_scope(yypvt[-3].pn); 
    					yypvt[-2].pn->n_qualifier = yypvt[-3].pn;
				}
			} break;
case 182:
# line 1439 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = yypvt[-1].pt;
				yyval.p = yypvt[-0].p;
			} break;
case 183:
# line 1444 "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 184:
# line 1456 "gram.y"
{	yyval.p = Ncopy(yypvt[-1].pn);
				yyval.pn->n_oper = TNAME;
				if ( in_typedef ) {
					defer_check = 1;
					in_tag = yypvt[-1].pn;
				}
				yypvt[-1].pn->hide();
				defer_check = 0;
				yyval.pn->tp = yypvt[-0].pt;
			} break;
case 185:
# line 1467 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = yypvt[-0].pt;
			} break;
case 186:
# line 1484 "gram.y"
{ 
				yyval.p = yypvt[-1].p; 
				in_arg_list = 0;
				end_al(yypvt[-2].pl,0);
				RESTORE_STATE();
                        //POP_SCOPE(); // similar to end_al()
			} break;
case 187:
# line 1494 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 188:
# line 1496 "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 189:
# line 1502 "gram.y"
{	
				yyval.p = new name; 
				NOT_EXPECT_ID();
			} break;
case 190:
# line 1507 "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 191:
# line 1512 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 192:
# line 1516 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 193:
# line 1532 "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;
				end_al(yypvt[-2].pl,0);
				RESTORE_STATE();
                        //POP_SCOPE(); // similar to end_al()
			} break;
case 194:
# line 1543 "gram.y"
{	yyval.p = new name; } break;
case 195:
# line 1545 "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 196:
# line 1551 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 197:
# line 1556 "gram.y"
{ yyval.p = new name; } break;
case 198:
# line 1558 "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 199:
# line 1564 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 200:
# line 1568 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-2].pn->tp;
				yypvt[-2].pn->tp = yypvt[-0].pt;
				yyval.p = yypvt[-2].p;
			} break;
case 201:
# line 1573 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-2].pn->tp;
				yypvt[-2].pn->tp = yypvt[-0].pt;
				yyval.p = yypvt[-2].p;
			} break;
case 202:
# line 1580 "gram.y"
{	yyval.p = new name; } break;
case 203:
# line 1582 "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 204:
# line 1592 "gram.y"
{
				yyval.p = 0; 
			} break;
case 205:
# line 1596 "gram.y"
{
				error( "ZizedTD must be atG, not local scope" );
				error('i', "cannot recover from previous error" );
			} break;
case 206:
# line 1601 "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 207:
# line 1612 "gram.y"
{
				yyval.p = yypvt[-0].p;
				if (yypvt[-0].p)	stmt_seen = 1;
			} break;
case 208:
# line 1619 "gram.y"
{
				yyval.p = 0;
				check_decl();
			} break;
case 209:
# line 1626 "gram.y"
{	yyval.p = yypvt[-1].p;
			/*	if ($<pe>$ == dummy) error("empty condition");*/
				stmt_seen = 1;
			} break;
case 210:
# line 1633 "gram.y"
{//PUSH_BLOCK_SCOPE	
				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 211:
# line 1646 "gram.y"
{	Pname n = name_unlist(cd);
				Pstmt ss = stmt_unlist(yypvt[-1].sl);
				yyval.p = new block(yypvt[-3].l,n,ss,yypvt[-0].l);
				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();
                        //POP_SCOPE(); // similar to end_al()
			} break;
case 212:
# line 1662 "gram.y"
{	yyval.p = new block(yypvt[-1].l,0,0,yypvt[-0].l); NOT_EXPECT_ID();} break;
case 213:
# line 1664 "gram.y"
{	yyval.p = new block(yypvt[-2].l,0,0,yypvt[-0].l); NOT_EXPECT_ID();} break;
case 214:
# line 1668 "gram.y"
{	yyval.p = new estmt(SM,curloc,yypvt[-0].pe,0);	} break;
case 215:
# line 1670 "gram.y"
{	yyval.p = new stmt(BREAK,yypvt[-0].l,0); } break;
case 216:
# line 1672 "gram.y"
{	yyval.p = new stmt(CONTINUE,yypvt[-0].l,0); } break;
case 217:
# line 1674 "gram.y"
{	yyval.p = new lstmt(GOTO,yypvt[-1].l,yypvt[-0].pn,0); } break;
case 218:
# line 1675 "gram.y"
{ stmt_seen=1; } break;
case 219:
# line 1676 "gram.y"
{	yyval.p = new estmt(DO,yypvt[-4].l,yypvt[-0].pe,yypvt[-2].ps); } break;
case 220:
# line 1678 "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 221:
# line 1693 "gram.y"
{
			if ( NEXTTOK() != SM ) {
				error("`;' missing afterS");
				la_backup(yychar,yylval);
				yychar = SM;
			}
		  } break;
case 224:
# line 1704 "gram.y"
{	yyval.p = new estmt(SM,yypvt[-0].l,dummy,0); } break;
case 225:
# line 1706 "gram.y"
{	yyval.p = new estmt(RETURN,yypvt[-2].l,yypvt[-1].pe,0); } break;
case 226:
# line 1708 "gram.y"
{
				error("local linkage specification");
				yyval.p = yypvt[-0].pn;
			} break;
case 227:
# line 1713 "gram.y"
{	Pname n = yypvt[-0].pn;
				if (n) {
//error('d',"adding local dcl of%n%t ll %d in_typedef%t",n,n->tp,n->lex_level,in_typedef);
					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;
					}
				} // if n
			} break;
case 228:
# line 1730 "gram.y"
{
				Pname n = yypvt[-0].pn;
				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 230:
# line 1741 "gram.y"
{	yyval.p = new ifstmt(yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps,0); } break;
case 231:
# line 1743 "gram.y"
{	yyval.p = new ifstmt(yypvt[-4].l,yypvt[-3].pe,yypvt[-2].ps,yypvt[-0].ps); } break;
case 232:
# line 1745 "gram.y"
{	yyval.p = new estmt(WHILE,yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps); } break;
case 233:
# line 1746 "gram.y"
{ stmt_seen=1; } break;
case 234:
# line 1747 "gram.y"
{	yyval.p = new forstmt(yypvt[-8].l,yypvt[-5].ps,yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].ps); } break;
case 235:
# line 1749 "gram.y"
{	yyval.p = new estmt(SWITCH,yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps); } break;
case 236:
# line 1750 "gram.y"
{ yyval.p = yypvt[-1].pn; stmt_seen=1; } break;
case 237:
# line 1751 "gram.y"
{	Pname n = yypvt[-1].pn;
				yyval.p = new lstmt(LABEL,n->where,n,yypvt[-0].ps);
			} break;
case 238:
# line 1754 "gram.y"
{ yyval.p = new name(yypvt[-1].pn->string); stmt_seen=1; } break;
case 239:
# line 1755 "gram.y"
{	Pname n = yypvt[-1].pn;
				yyval.p = new lstmt(LABEL,n->where,n,yypvt[-0].ps);
			} break;
case 240:
# line 1758 "gram.y"
{ stmt_seen=1; } break;
case 241:
# line 1759 "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 242:
# line 1762 "gram.y"
{ stmt_seen=1; } break;
case 243:
# line 1763 "gram.y"
{	yyval.p = new stmt(DEFAULT,yypvt[-3].l,yypvt[-0].ps); } break;
case 244:
# line 1770 "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 245:
# line 1782 "gram.y"
{	yyval.el = new elist(new expr(ELIST,yypvt[-0].pe,0)); } break;
case 246:
# line 1784 "gram.y"
{	yypvt[-2].el->add(new expr(ELIST,yypvt[-0].pe,0)); } break;
case 248:
# line 1789 "gram.y"
{
  			  	if ( in_arg_list ) 
       			  		error( "syntax error: IrL not permitted in AL" );
				else if ( in_binit_list )
					error( "syntax error: IrL not permitted inMIr" );
  			  	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 249:
# line 1806 "gram.y"
{	bbinop:	yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
case 250:
# line 1807 "gram.y"
{	goto bbinop; } break;
case 251:
# line 1808 "gram.y"
{	goto bbinop; } break;
case 252:
# line 1809 "gram.y"
{	goto bbinop; } break;
case 253:
# line 1810 "gram.y"
{	goto bbinop; } break;
case 254:
# line 1811 "gram.y"
{	goto bbinop; } break;
case 255:
# line 1812 "gram.y"
{	goto bbinop; } break;
case 256:
# line 1813 "gram.y"
{ 	goto bbinop; } break;
case 257:
# line 1814 "gram.y"
{	goto bbinop; } break;
case 258:
# line 1815 "gram.y"
{	goto bbinop; } break;
case 259:
# line 1816 "gram.y"
{	goto bbinop; } break;
case 260:
# line 1817 "gram.y"
{	goto bbinop; } break;
case 261:
# line 1818 "gram.y"
{	goto bbinop; } break;
case 262:
# line 1819 "gram.y"
{	goto bbinop; } break;
case 263:
# line 1820 "gram.y"
{	goto bbinop; } break;
case 264:
# line 1821 "gram.y"
{	goto bbinop; } break;
case 265:
# line 1822 "gram.y"
{	goto bbinop; } break;
case 266:
# line 1824 "gram.y"
{	yyval.p = new qexpr(yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].pe); } break;
case 267:
# line 1826 "gram.y"
{ yyval.p = new expr(DELETE,yypvt[-0].pe,0); } break;
case 268:
# line 1828 "gram.y"
{
				if(yypvt[-2].pe != dummy) {
					if ( warning_opt || strict_opt )
						error(strict_opt?0:'w',"v in `delete[v]' is redundant; use `delete[] instead (anachronism)");
				}
				yyval.p = new expr(DELETE,yypvt[-0].pe,yypvt[-2].pe);
			} break;
case 269:
# line 1836 "gram.y"
{	yyval.p = new expr(GDELETE,yypvt[-0].pe,0); } break;
case 270:
# line 1838 "gram.y"
{
				if(yypvt[-2].pe != dummy) { 
					if ( warning_opt || strict_opt )
						error(strict_opt?0:'w',"v in `::delete[v]' is redundant; use `::delete[] instead (anachronism)");
				}
				yyval.p = new expr(DELETE,yypvt[-0].pe,yypvt[-2].pe);
			} break;
case 272:
# line 1849 "gram.y"
{	binop:	yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
case 273:
# line 1850 "gram.y"
{	goto binop; } break;
case 274:
# line 1851 "gram.y"
{	goto binop; } break;
case 275:
# line 1852 "gram.y"
{	goto binop; } break;
case 276:
# line 1853 "gram.y"
{	goto binop; } break;
case 277:
# line 1854 "gram.y"
{	goto binop; } break;
case 278:
# line 1855 "gram.y"
{	goto binop; } break;
case 279:
# line 1856 "gram.y"
{ 	goto binop; } break;
case 280:
# line 1857 "gram.y"
{	goto binop; } break;
case 281:
# line 1858 "gram.y"
{	goto binop; } break;
case 282:
# line 1859 "gram.y"
{	goto binop; } break;
case 283:
# line 1860 "gram.y"
{	goto binop; } break;
case 284:
# line 1861 "gram.y"
{	goto binop; } break;
case 285:
# line 1862 "gram.y"
{	goto binop; } break;
case 286:
# line 1863 "gram.y"
{	goto binop; } break;
case 287:
# line 1864 "gram.y"
{	goto binop; } break;
case 288:
# line 1865 "gram.y"
{	goto binop; } break;
case 289:
# line 1867 "gram.y"
{	yyval.p = new qexpr(yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].pe); } break;
case 290:
# line 1869 "gram.y"
{	yyval.p = new expr(DELETE,yypvt[-0].pe,0); } break;
case 291:
# line 1871 "gram.y"
{
				if(yypvt[-2].pe != dummy) {
					if ( warning_opt || strict_opt )
						error(strict_opt?0:'w',"v in `delete[v]' is redundant; use `delete[] instead (anachronism)");
				}
				yyval.p = new expr(DELETE,yypvt[-0].pe,yypvt[-2].pe);
			} break;
case 292:
# line 1879 "gram.y"
{	yyval.p = new expr(GDELETE,yypvt[-0].pe,0); } break;
case 293:
# line 1881 "gram.y"
{
				if(yypvt[-2].pe != dummy) {
					if ( warning_opt || strict_opt )
						error(strict_opt?0:'w',"v in `::delete[v]' is redundant; use `::delete[] instead (anachronism)");
				}
				yyval.p = new expr(DELETE,yypvt[-0].pe,yypvt[-2].pe);
			} break;
case 294:
# line 1888 "gram.y"
{ 
			init_seen = 0; 
			} break;
case 295:
# line 1892 "gram.y"
{	yyval.p = dummy; } break;
case 296:
# line 1895 "gram.y"
{ goto new1; } break;
case 297:
# line 1897 "gram.y"
{	new1:
				Ptype t = yypvt[-0].pn->tp;
				yyval.p = new texpr(NEW,t,0);
			} break;
case 298:
# line 1901 "gram.y"
{ goto new3; } break;
case 299:
# line 1903 "gram.y"
{	new3:
				Ptype t = yypvt[-0].pn->tp;
 				yyval.p = new texpr(GNEW,t,0);
 			} break;
case 300:
# line 1908 "gram.y"
{	yyval.p = new expr(yypvt[-0].t,yypvt[-1].pe,0); } break;
case 301:
# line 1910 "gram.y"
{	yyval.p = new texpr(CAST,yypvt[-1].pn->tp,yypvt[-0].pe); } break;
case 302:
# line 1912 "gram.y"
{	yyval.p = new expr(DEREF,yypvt[-0].pe,0); } break;
case 303:
# line 1914 "gram.y"
{	yyval.p = new expr(ADDROF,0,yypvt[-0].pe); } break;
case 304:
# line 1916 "gram.y"
{	yyval.p = new expr(UMINUS,0,yypvt[-0].pe); } break;
case 305:
# line 1918 "gram.y"
{	yyval.p = new expr(UPLUS,0,yypvt[-0].pe); } break;
case 306:
# line 1920 "gram.y"
{	yyval.p = new expr(NOT,0,yypvt[-0].pe); } break;
case 307:
# line 1922 "gram.y"
{	yyval.p = new expr(COMPL,0,yypvt[-0].pe); } break;
case 308:
# line 1924 "gram.y"
{	yyval.p = new expr(yypvt[-1].t,0,yypvt[-0].pe); } break;
case 309:
# line 1926 "gram.y"
{	
				yyval.p = new texpr(SIZEOF,0,yypvt[-0].pe); 
				in_sizeof = 0;
			} break;
case 310:
# line 1931 "gram.y"
{	
				yyval.p = new texpr(SIZEOF,yypvt[-0].pn->tp,0); 
				in_sizeof = 0;
			} break;
case 311:
# line 1936 "gram.y"
{	yyval.p = new expr(DEREF,yypvt[-3].pe,yypvt[-1].pe); } break;
case 312:
# line 1938 "gram.y"
{	yyval.p = new ref(REF,yypvt[-2].pe,yypvt[-0].pn); } break;
case 313:
# line 1940 "gram.y"
{	yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
case 314:
# line 1942 "gram.y"
{	yyval.p = new ref(REF,yypvt[-2].pe,Ncopy(yypvt[-0].pn)); } break;
case 315:
# line 1944 "gram.y"
{	yyval.p = new ref(DOT,yypvt[-2].pe,yypvt[-0].pn); } break;
case 316:
# line 1946 "gram.y"
{	yyval.p = new ref(DOT,yypvt[-2].pe,Ncopy(yypvt[-0].pn)); } break;
case 318:
# line 1949 "gram.y"
{
			if ( init_seen )
     				error( "syntax error:IrL illegal within ()");
			} break;
case 319:
# line 1955 "gram.y"
{
				if ( yypvt[-1].p == dummy )
					error("syntax error: nullE");
				yyval.p = yypvt[-1].p;
			} break;
case 320:
# line 1961 "gram.y"
{	yyval.p = zero; } break;
case 321:
# line 1963 "gram.y"
{	yyval.p = new expr(ICON,0,0);
				yyval.pe->string = copy_if_need_be(yypvt[-0].s);
			} break;
case 322:
# line 1967 "gram.y"
{	yyval.p = new expr(FCON,0,0);
				yyval.pe->string = copy_if_need_be(yypvt[-0].s);
			} break;
case 323:
# line 1971 "gram.y"
{	yyval.p = new expr(STRING,0,0);
				yyval.pe->string = copy_if_need_be(yypvt[-0].s);
			} break;
case 324:
# line 1975 "gram.y"
{	yyval.p = new expr(CCON,0,0);
				yyval.pe->string = copy_if_need_be(yypvt[-0].s);
			} break;
case 325:
# line 1979 "gram.y"
{	yyval.p = new expr(THIS,0,0); } break;
case 326:
# line 1983 "gram.y"
{ 	yyval.p = new texpr(VALUE,tok_to_type(yypvt[-3].t),yypvt[-1].pe); } break;
case 327:
# line 1988 "gram.y"
{	yyval.p = new texpr(VALUE,yypvt[-3].pn->tp,yypvt[-1].pe); } break;
case 328:
# line 1989 "gram.y"
{ goto new2; } break;
case 329:
# line 1991 "gram.y"
{	new2:
				Ptype t = yypvt[-0].pn->tp;
				yyval.p=new texpr(NEW,t,0);
				yyval.pe->e2 = yypvt[-2].pe;
			} break;
case 330:
# line 1996 "gram.y"
{ goto new4; } break;
case 331:
# line 1998 "gram.y"
{	new4:
				Ptype t = yypvt[-0].pn->tp;
				yyval.p = new texpr(GNEW,t,0);
				yyval.pe->e2 = yypvt[-2].pe;
			} break;
case 332:
# line 2004 "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 333:
# line 2016 "gram.y"
{
		    yyval.pn =parametrized_typename(yypvt[-3].pn,(expr_unlist(yypvt[-1].el))); 
	 	 } break;
case 334:
# line 2022 "gram.y"
{       
				yyval.pn = yypvt[-0].pn; 
				curr_scope = yypvt[-0].pn;
			} break;
case 335:
# line 2026 "gram.y"
{ yyval.pn = sta_name; } break;
case 336:
# line 2027 "gram.y"
{ yyval.pn = yypvt[-1].pn; } break;
case 337:
# line 2032 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 338:
# line 2034 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_qualifier = yypvt[-1].pn;
			} break;
case 339:
# line 2038 "gram.y"
{	yyval.p = new name(oper_name(yypvt[-0].t));
				yyval.pn->n_oper = yypvt[-0].t;
			} break;
case 340:
# line 2042 "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 341:
# line 2047 "gram.y"
{	yyval.p = yypvt[-0].p;
				sig_name(yyval.pn);
			} break;
case 342:
# line 2051 "gram.y"
{	yyval.p = yypvt[-0].p;
				sig_name(yyval.pn);
				yyval.pn->n_qualifier = yypvt[-2].pn;
			} break;
case 343:
# line 2056 "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 344:
# line 2068 "gram.y"
{ yyval.p = Ncast(yypvt[-2].p,yypvt[-1].pn); } break;
case 345:
# line 2071 "gram.y"
{ check_cast(); } break;
case 346:
# line 2075 "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 347:
# line 2094 "gram.y"
{ yyval.p = new basetype(TYPE,yypvt[-0].pn); } break;
case 348:
# line 2096 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) {
					switch (yypvt[-1].pb->base) { Pbase bt;
					case COBJ: case EOBJ:
						bt = new basetype(0,0);
						*bt = *yypvt[-1].pb;
						DEL(yypvt[-1].pb);
						yypvt[-1].pb = bt;
					}
					yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t); 
				}
				DECL_TYPE = 0;
			} break;
case 349:
# line 2110 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) 
			 		yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn);
				DECL_TYPE = 0;
			} break;
case 350:
# line 2117 "gram.y"
{ yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break;
case 351:
# line 2120 "gram.y"
{ yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break;
case 352:
# line 2123 "gram.y"
{	
                         //      ENTER_NAME(yypvt[-0].pn);
				yyval.p = Ndata(yypvt[-1].p,yypvt[-0].pn); 
			} break;
case 353:
# line 2128 "gram.y"
{
                        //      ENTER_NAME(yypvt[-1].pn);
                        } break;
case 354:
# line 2132 "gram.y"
{       yyval.p = Ndata(yypvt[-4].p,yypvt[-3].pn);
                                yyval.pn->n_initializer = yypvt[-0].pe;
                        } break;
case 355:
# line 2138 "gram.y"
{//PUSH_ARG_SCOPE 
				SAVE_STATE();
				check_decl(); 
				in_arg_list=1; 
				yyval.pl = modified_tn;
				modified_tn = 0;
			} break;
case 356:
# line 2148 "gram.y"
{
			yyval.p = new fct(0,name_unlist(yypvt[-3].nl),yypvt[-2].t); 
			if ( NEXTTOK() != COLON ) in_arg_list=0;
			//in_arg_list=0;
			Pfct(yyval.pt)->f_const = (yypvt[-0].i & 1);
			if ( parsing_class_members
			||   (NEXTTOK()!=LC && yychar!=COLON)) {
				end_al(yypvt[-4].pl,1);
                        //POP_SCOPE(); // similar to end_al()
			} else
				end_al(yypvt[-4].pl,0);
			RESTORE_STATE();
		    } break;
case 357:
# line 2164 "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 358:
# line 2176 "gram.y"
{
				if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); 
			} break;
case 360:
# line 2182 "gram.y"
{	yyval.p = 0; } break;
case 361:
# line 2186 "gram.y"
{	yyval.t = 1; } break;
case 362:
# line 2188 "gram.y"
{	yyval.t = ELLIPSIS; } break;
case 363:
# line 2190 "gram.y"
{	yyval.t = ELLIPSIS; } break;
case 364:
# line 2194 "gram.y"
{
			yyval.p = new ptr(PTR,0); 
			EXPECT_ID();
			} break;
case 365:
# line 2199 "gram.y"
{
			yyval.p = new ptr(RPTR,0); 
			EXPECT_ID();
			} break;
case 366:
# line 2204 "gram.y"
{	yyval.p = doptr(PTR,yypvt[-0].t); } break;
case 367:
# line 2206 "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 368:
# line 2219 "gram.y"
{	yyval.p = doptr(RPTR,yypvt[-0].t); } break;
case 369:
# line 2221 "gram.y"
{	goto memptr1;  } break;
case 370:
# line 2223 "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 371:
# line 2230 "gram.y"
{	
				yypvt[-1].t = yypvt[-0].t;
				goto memptr2;  
			} break;
case 372:
# line 2235 "gram.y"
{	
				memptr2:
				yyval.p = doptr(PTR,yypvt[-0].t);
				yyval.pp->memof = Pclass(Pbase(yypvt[-1].pn->tp)->b_name->tp);
			} break;
case 373:
# line 2242 "gram.y"
{ yyval.p = new vec(0,yypvt[-1].pe!=dummy?yypvt[-1].pe:0 ); } break;
case 374:
# line 2243 "gram.y"
{ yyval.p = new vec(0,0); } break;
	}
	goto yystack;  /* stack new state and value */
}