# line 30 "gram.y" #include "cfront.h" #include "size.h" #include "template.h" #include #ifdef SVR42 #include #endif // include tqueue.h after YYSTYPE is defined ... int in_friend = 0; int must_be_friend = 0; int dont_instantiate = 0; static int explicit_template_definition = 0; Pname righttname=0; static struct parstate { Ptype intypedef; int infriend; int defercheck; Pname intag; int cid; } pstate[BLMAX]; static int px; extern int classid; static void SAVE_STATE() { //error('d',"save_state: in_typedef%t in_tag%n defer_check %d",in_typedef,in_tag,defer_check); if ( px >= BLMAX ) error('i',"parsing state stack overflow -- current table %s",Ctbl->whereami()); pstate[px].intypedef = in_typedef; pstate[px].infriend = in_friend; in_typedef = 0; in_friend = 0; pstate[px].defercheck = defer_check; defer_check = 0; pstate[px].intag = in_tag; in_tag = 0; pstate[px].cid = classid; classid = 0; ++px; } static void RESTORE_STATE() { //error('d',"restore_state: in_typedef%t in_tag%n defer_check %d",in_typedef,in_tag,defer_check); if ( --px < 0 ) error('i',"parsing state stack underflow -- current table %s",Ctbl->whereami()); in_typedef = pstate[px].intypedef; in_friend = pstate[px].infriend; defer_check = pstate[px].defercheck; in_tag = pstate[px].intag; classid = pstate[px].cid; //error('d'," -> in_typedef%t in_tag%n defer_check %d",in_typedef,in_tag,defer_check); } //SYM parsing symbol table management inline void PUSH_ARG_SCOPE() { DB(if(Kdebug>=1)error('d',"push arg table; %ctbl %s",'C',Ctbl->whereami());); Ctbl = new ktable( 0, Ctbl, 0 ); Ctbl->k_id = ARG; } inline void PUSH_CLASS_SCOPE( Pname n ) { DB(if(Kdebug>=1)error('d',"pushC table%n; %ctbl %s",n,'C',Ctbl->whereami());); // table allocated in name::tname() to avoid problems with forward // refs to class templates Pclass cl = n->tp->classtype(); cl->k_tbl->k_next = Ctbl; Ctbl = cl->k_tbl; Ctbl->expand(CTBLSIZE); } inline void PUSH_BLOCK_SCOPE() { DB(if(Kdebug>=1)error('d',"push block tbl; %ctbl %s in %s",'C',Ctbl->whereami(),Ctbl->k_next->whereami());); if ( Ctbl->k_id == ARG ) Ctbl->expand(TBLSIZE); else { Ctbl = new ktable(TBLSIZE, Ctbl, Ctbl->k_name ); } Ctbl->k_id = BLOCK; if ( Ctbl->k_next == Gtbl || Ctbl->k_next->k_id == BLOCK || Ctbl->k_next->k_id == CLASS ) Ctbl->k_t->next = Ctbl->k_next->k_t; } inline void PUSH_TEMPLATE_SCOPE() { DB(if(Kdebug>=1)error('d',"push template tbl; %ctbl %s",'C',Ctbl->whereami());); Ctbl = new ktable( 0, Ctbl, 0 ); Ctbl->k_id = TEMPLATE; } inline void POP_SCOPE( int deallocate = 0 ) { DB(if(Kdebug>=1)error('d',"pop tbl %s",Ctbl->whereami());); if ( Ctbl == Gtbl ) error('i', "bad parsing table"); Pktab b = Ctbl; Ctbl = Ctbl->k_next; if ( b->k_id == ARG || deallocate ) delete b; } /*SYM -- replaces set_scope()/curr_scope for switching between scopes * in member defs * Temporarily reset scope in member defs: * int X::f( T t = a ) { ... } * int X::s[10] = ... , i = 3; * |----scope of X----| * ??? What about exprs "p->operator T()", etc ??? */ // Although local member defs are illegal outside a local class, scopes // are stacked for error recovery / extensibility. struct pcontext { Pktab ktbl; int saved_template; }; static pcontext scopestack[BLMAX]; static int scopex = 0; Pname SET_SCOPE( Pname n ) { Pktab ntb; if ( n == 0 ) ntb = 0; else if ( n == sta_name ) ntb = Gtbl; else if ( n->n_template_arg == template_type_formal ) { DB(if(Kdebug>=1)error('d',"set scope%n -- template formal -- currently in %s next %s",n,Ctbl->whereami(),Ctbl->k_next->whereami());); return n; } else if ( n->tp ) { Ptype t = n->tp->skiptypedefs(); if ( t->base==COBJ ) ntb = t->classtype()->k_tbl; else ntb = 0; } else ntb = 0; DB(if(Kdebug>=1)error('d',"set scope%n ntb %s next %s, currently in %s",n,ntb->whereami(),ntb?ntb->k_next->whereami():"",Ctbl->whereami());); if (ntb == 0) return 0;//error('i',"scope set to null table(n==%n)!",n); if ( scopex >= BLMAX ) error('i',"set scope %s: parsing scope stack overflow -- current table %s",ntb->whereami(),Ctbl->whereami()); Pktab tt = Ctbl; if ( Ctbl->k_id == TEMPLATE ) { // parsing template member function // template<...> PT<...>::f() {} // be sure template params are in scope when parsing f // -- extract template scope from current scope and put it // in new scope Ctbl = Ctbl->k_next; tt->k_next = ntb->k_next; ntb->k_next = tt; scopestack[scopex].saved_template = 1; } else if ( Ctbl->k_id == ARG && Ctbl->k_next->k_id == TEMPLATE ) { // parsing static data member template with declarator ()'s. // template<...> T (PT<...>::d) = v; // interpose PT's table between ARG table and its parent Ctbl = Ctbl->k_next->k_next; tt->k_next->k_next = ntb->k_next; ntb->k_next = tt->k_next; tt->k_next = ntb; scopestack[scopex].saved_template = 1; ntb = tt; } scopestack[scopex++].ktbl = Ctbl; Ctbl = ntb; return n; } void UNSET_SCOPE() { // restore surrounding template scope, if appropriate Pktab tt = 0; if ( --scopex < 0 ) error('i',"parsing scope stack underflow -- current scope %s",Ctbl->whereami()); if ( scopestack[scopex].saved_template ) { scopestack[scopex].saved_template = 0; if ( Ctbl->k_next==0 || Ctbl->k_next->k_id != TEMPLATE ) error('i',"set scope failed restoring template table -- current table %s",Ctbl->whereami()); tt = Ctbl->k_next; Ctbl->k_next = tt->k_next; } DB(if(Kdebug>=1)error('d',"unset scope %s -> %s tt %s",Ctbl->whereami(),scopestack[scopex].ktbl->whereami(),tt?tt->whereami():"");); Ctbl = scopestack[scopex].ktbl; if ( tt ) { tt->k_next = Ctbl; Ctbl = tt; } } inline Pktab GET_XSCOPE() { if ( scopex-1 < 0 ) error('i',"parsing scope stack underflow -- current table %s",Ctbl->whereami()); return scopestack[scopex-1].ktbl; } inline void SET_XSCOPE( Pktab tb ) { if ( scopex-1 < 0 ) error('i',"parsing scope stack underflow -- current table %s",Ctbl->whereami()); scopestack[scopex-1].ktbl = tb; } // macros #define copy_if_need_be(s) ((templp->in_progress || templp->parameters_in_progress) ? strdup(s) : s) #define YYMAXDEPTH 600 #if 0 #define YYCLEAN {free(yys); free(yyv);} #else #define YYCLEAN #endif #ifdef DBG #ifndef YYDEBUG #define YYDEBUG 1 #endif #endif static int init_seen = 0; static int cdi = 0; static Pnlist cd = 0, cd_vec[BLMAX]; static char stmt_seen = 0, stmt_vec[BLMAX]; static Pnlist scd[BLMAX]; // keep track of cd list outside of switch static int scdp = -1; static Pname memptr_pn; static TOK memptr_tok; static Pname err_name = 0; // support for template friend declarations within a class static Pcons templ_friends; // 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 bit decl_with_init(Pnlist cd) /* do the declarations have an initializer or a class object with a constructor */ { for (Pname n=cd->head;n;n=n->n_list) { if (n->n_initializer) return 1; Pname cln=n->tp->is_cl_obj(); if (cln && Pclass(cln->tp)->c_ctor) return 1; } return 0; } static char* get_classname(char* s) { // error('d',"get_classname(%s)",s); char* r = new char[strlen(s)+1]; sprintf(r,s); s = r; char* s1 = s; while (*s) { for ( ; s[0] && (s[0] != '_' || s[1] && s[1] != '_'); s++) s1++;; if (*s) { if (strncmp(s,"___pt__",7)==0) { *s1 = 0; return r; } if (strncmp(s,"__pt__",6)==0) { // parameterized class *s1 = '\0'; return r; } } return r; } return r; } static Pptr doptr(TOK p, TOK t) { Pptr r = new ptr(p,0); switch (t) { case CONST: r->b_const = 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) { // error('d',"dobase(%k %n %k)", pr,n,v); Pbcl b = new basecl(0,0); b->ppp = pr; // save protection indicator if (n) { if (n->base != TNAME) { Pname nn = k_find_name(n->string,Ctbl,HIDDEN); if ( nn == 0 ) { error("BN%n not aTN",n); return 0; } else n = nn; } Pbase bt = Pbase(n->tp); while (bt->base == TYPE) bt = Pbase(bt->b_name->tp); if (bt->base != COBJ) { // template class D : public B {}; if (templp->in_progress == true && bt->base == ANY) error('s',"formalTZ%n used asBC ofY",n); else 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 inline Pname Ncopy(Pname n) { Pname nn; if (n->base!=TNAME) { nn = n; } else { nn = new name(n->string); nn->n_template_arg = n->n_template_arg; } return nn; } #define Finit(p) Pfct(p)->f_init #define Fargdcl(p,q,r) Pfct(p)->argdcl(q,r) #define Freturns(p) Pfct(p)->returns #define Fbody(p) Pfct(p)->body /*SYM*/ #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 CATCH #undef THROW #undef TRY #undef TNAME #undef EMPTY #undef NO_ID #undef NO_EXPR #undef FDEF #undef ELLIPSIS #undef AGGR #undef MEM #undef MEMPTR #undef PR #undef MEMQ #undef TSCOPE #undef DECL_MARKER #undef REFMUL #undef LDOUBLE #undef LINKAGE #undef TEMPLATE #undef XVIRT #undef XNLIST #undef XILINE #undef XIA #undef SM_PARAM #undef PTNAME #undef NEW_INIT_KLUDGE # line 479 "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 499 "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; int in_new = 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 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, 1: in (), 2: in <> 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 Ptempl_inst pti = 0; // explicit template class: class X {}; #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 CATCH 98 # define THROW 99 # define TRY 100 # 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 MEMQ 176 # define TSCOPE 178 # define DECL_MARKER 179 # define REFMUL 180 # define LDOUBLE 181 # define LINKAGE 182 # define TEMPLATE 185 # define XVIRT 200 # define XNLIST 201 # define XILINE 202 # define XIA 203 # define SM_PARAM 207 # 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 3021 "gram.y" static Pname enumcheck( Pname n ) { Ptype tx = n->tp; if ( tx->base == TYPE ) { Pname bn = Pbase(tx)->b_name; tx = bn->tp; if ( tx->base != EOBJ || strcmp(bn->string,n->string) ) error("%n ofT%t redeclared as enum.",n,tx); n = bn; } else if ( tx->base != EOBJ ) error("%n ofT%t redeclared as enum",n,tx); // error('d',"enumtag: ccl %t tag: %n", ccl, n); return n; } 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 hoist_al() /*SYM hoist names in arg table to next outer scope and pop scope * called upon discovering that an arg list isn't really being parsed * -- i.e., 'arg_lp decl RP ...' -- arg_lp pushed an arg table */ { if ( Ctbl->k_id != ARG ) { // saw something like '( X::y )' while probably reduced // as 'arg_lp decl RP' and pushed scope of X // no names should have been entered; discard table Pktab otbl = Ctbl; Ctbl = GET_XSCOPE(); if ( Ctbl->k_id != ARG ) error('i',"hoist_al: noA table"); POP_SCOPE(); SET_XSCOPE(Ctbl); Ctbl = otbl; return; } if ( !in_typedef && !in_friend ) Ctbl->hoist(); POP_SCOPE(); } static void arg_redec( Pname fn ) /* parsing restored member inline at end of class * redeclare args before entering function */ { if ( fn==0 || fn->tp->base != FCT ) error('i',"bad inline rewrite! --%n %t",fn,fn?fn->tp:0); if ( Ctbl->k_id != ARG ) error('i',"arg_redec(%n ) -- noA table",fn); //SYM -- reenter in arg table //SYM -- probably more efficient to keep arg table around... 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); ); n = new name(al->string); insert_name(n,Ctbl); DB( if(Ydebug>=1)error('d'," %n",n); ); } } static Pname dummy_dtor( TOK q, TOK d ) { if ( q != d ) { error("syntax error: inconsistent destructor notation"); q = d; } Pname dt = new name("type destructor"); dt->base = DTOR; dt->tp = new fct(void_type,0,1); dt->n_dcl_printed = 1; // suppress any code generation switch ( d ) { default: error("syntax error: illegal destructor notation"); dt->tp2 = any_type; break; case CHAR: dt->tp2 = dt->tpdef = char_type; break; case SHORT: dt->tp2 = dt->tpdef = short_type; break; case SIGNED: case INT: dt->tp2 = dt->tpdef = int_type; break; case UNSIGNED: dt->tp2 = dt->tpdef = uint_type; break; case LONG: dt->tp2 = dt->tpdef = long_type; break; case VLONG: dt->tp2 = dt->tpdef = vlong_type; break; case FLOAT: dt->tp2 = dt->tpdef = float_type; break; case DOUBLE: dt->tp2 = dt->tpdef = double_type; break; case VOID: dt->tp2 = dt->tpdef = void_type; break; } return dt; } static Pname dummy_dtor() { Pname dt = new name("type destructor"); dt->base = DTOR; dt->tp = new fct(void_type,0,1); dt->n_dcl_printed = 1; // suppress any code generation dt->tp2 = 0; dt->tpdef = 0; return dt; } static bit check_if_base( Pclass c1, Pclass c2 ) { if ( same_class(c1,c2) ) return 1; for (Pbcl b = c1->baselist; b; b=b->next) { if ( same_class(b->bclass,c2) ) return 1; if (check_if_base(b->bclass,c2)) return 1; } return 0; } short yyexca[] ={ -1, 1, 0, -1, -2, 0, -1, 48, 71, 45, 72, 45, -2, 44, -1, 65, 155, 398, -2, 319, -1, 70, 13, 393, 97, 393, 123, 393, 155, 393, 156, 393, 160, 393, 178, 393, 179, 393, 182, 393, -2, 319, -1, 127, 73, 116, -2, 110, -1, 344, 70, 105, -2, 104, -1, 436, 73, 116, -2, 111, -1, 444, 60, 17, 71, 17, -2, 128, -1, 445, 60, 16, 71, 16, -2, 127, -1, 480, 1, 223, 3, 223, 4, 223, 7, 223, 8, 223, 9, 223, 10, 223, 13, 223, 16, 223, 19, 223, 20, 223, 23, 223, 24, 223, 28, 223, 30, 223, 33, 223, 34, 223, 39, 223, 40, 223, 46, 223, 47, 223, 50, 223, 52, 223, 54, 223, 55, 223, 72, 223, 73, 223, 80, 223, 81, 223, 82, 223, 83, 223, 84, 223, 85, 223, 86, 223, 95, 223, 97, 223, 99, 223, 100, 223, 123, 223, 156, 223, 160, 223, 178, 223, 179, 223, 182, 223, 185, 223, 209, 223, -2, 0, }; # define YYNPROD 413 # define YYLAST 3598 short yyact[]={ 163, 24, 596, 407, 479, 523, 343, 152, 10, 11, 335, 181, 8, 229, 446, 58, 300, 165, 401, 9, 396, 187, 58, 58, 307, 161, 349, 342, 208, 385, 318, 520, 120, 322, 609, 217, 557, 207, 190, 18, 120, 136, 624, 261, 40, 123, 124, 191, 89, 124, 274, 123, 66, 463, 90, 31, 336, 697, 491, 303, 74, 88, 83, 185, 57, 180, 194, 83, 464, 678, 71, 36, 36, 185, 219, 162, 20, 615, 30, 7, 288, 32, 32, 33, 33, 293, 194, 665, 194, 125, 20, 609, 200, 122, 246, 607, 608, 20, 20, 44, 59, 121, 288, 50, 44, 71, 353, 354, 177, 175, 17, 56, 447, 203, 298, 299, 29, 43, 120, 409, 139, 410, 43, 81, 52, 212, 595, 24, 51, 556, 71, 77, 80, 71, 615, 225, 226, 252, 223, 194, 625, 119, 185, 304, 58, 63, 224, 555, 42, 32, 26, 33, 185, 42, 41, 344, 83, 438, 173, 273, 498, 173, 547, 69, 624, 54, 194, 438, 286, 275, 437, 149, 184, 480, 120, 196, 235, 406, 83, 530, 36, 44, 184, 58, 458, 25, 333, 39, 287, 233, 32, 44, 33, 44, 120, 196, 78, 196, 69, 43, 53, 296, 228, 58, 35, 35, 222, 238, 240, 43, 55, 43, 120, 521, 172, 44, 45, 172, 315, 20, 447, 624, 291, 69, 261, 632, 69, 216, 292, 173, 42, 120, 194, 43, 81, 554, 17, 78, 185, 430, 42, 42, 42, 325, 347, 317, 330, 403, 196, 551, 31, 184, 387, 80, 326, 143, 144, 32, 20, 33, 466, 184, 173, 329, 42, 295, 346, 185, 332, 341, 389, 389, 35, 30, 379, 196, 194, 120, 20, 552, 548, 431, 305, 119, 381, 172, 497, 355, 604, 120, 441, 120, 52, 394, 339, 383, 390, 395, 602, 29, 392, 442, 388, 306, 185, 601, 75, 86, 42, 408, 120, 338, 80, 35, 230, 404, 405, 380, 172, 262, 194, 306, 272, 331, 277, 278, 279, 280, 281, 282, 283, 284, 285, 54, 419, 420, 140, 41, 120, 120, 340, 196, 412, 31, 54, 386, 393, 184, 424, 42, 67, 120, 120, 414, 68, 205, 450, 427, 428, 62, 415, 468, 54, 73, 214, 44, 30, 320, 53, 512, 278, 279, 436, 440, 44, 426, 184, 131, 321, 53, 35, 391, 194, 43, 73, 196, 306, 145, 120, 337, 701, 681, 43, 591, 432, 434, 36, 53, 67, 204, 306, 246, 68, 454, 173, 244, 245, 560, 141, 64, 456, 67, 459, 184, 42, 68, 42, 465, 472, 467, 41, 475, 476, 42, 509, 478, 417, 54, 483, 196, 518, 67, 120, 477, 120, 68, 120, 377, 470, 142, 83, 54, 492, 185, 252, 496, 127, 340, 340, 471, 495, 173, 469, 416, 473, 505, 178, 44, 277, 120, 172, 306, 53, 503, 504, 120, 173, 422, 425, 500, 421, 185, 415, 415, 458, 43, 53, 44, 515, 411, 426, 426, 120, 120, 581, 314, 301, 134, 517, 387, 493, 196, 494, 474, 67, 43, 234, 236, 68, 501, 24, 213, 54, 460, 186, 597, 42, 172, 535, 536, 185, 533, 689, 120, 627, 599, 146, 540, 185, 534, 550, 516, 172, 36, 197, 471, 42, 517, 473, 473, 482, 261, 528, 553, 36, 703, 67, 53, 525, 388, 68, 340, 210, 340, 210, 340, 549, 294, 21, 120, 457, 293, 184, 120, 559, 46, 501, 501, 563, 194, 541, 680, 266, 571, 131, 416, 416, 486, 487, 488, 569, 545, 561, 425, 425, 20, 598, 669, 570, 484, 184, 542, 36, 538, 67, 605, 403, 36, 68, 67, 643, 340, 502, 68, 630, 210, 32, 603, 33, 641, 634, 640, 44, 639, 600, 525, 28, 41, 266, 17, 64, 70, 67, 67, 72, 22, 68, 68, 384, 184, 43, 271, 289, 268, 507, 269, 270, 184, 638, 22, 65, 593, 36, 489, 67, 592, 22, 22, 68, 64, 60, 67, 61, 78, 44, 68, 128, 137, 626, 502, 502, 42, 519, 265, 36, 485, 67, 429, 340, 15, 68, 328, 43, 65, 544, 439, 218, 266, 196, 64, 423, 67, 345, 232, 48, 68, 267, 211, 14, 239, 539, 76, 79, 691, 242, 537, 481, 529, 210, 185, 297, 65, 695, 42, 65, 352, 499, 120, 348, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 35, 376, 700, 237, 84, 34, 382, 635, 36, 637, 47, 589, 526, 334, 687, 443, 398, 490, 32, 34, 33, 182, 22, 309, 193, 302, 34, 34, 677, 644, 532, 193, 319, 209, 415, 36, 42, 664, 131, 22, 628, 324, 188, 631, 192, 32, 130, 33, 218, 671, 672, 673, 674, 445, 676, 514, 32, 210, 33, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 22, 184, 684, 41, 117, 667, 241, 14, 686, 306, 132, 310, 164, 29, 78, 189, 565, 131, 41, 564, 22, 558, 182, 546, 49, 215, 221, 37, 397, 323, 126, 38, 276, 133, 16, 704, 1, 461, 453, 522, 44, 2, 402, 0, 34, 241, 290, 524, 0, 416, 54, 41, 82, 34, 589, 44, 0, 692, 43, 65, 41, 309, 309, 35, 0, 316, 0, 0, 698, 0, 34, 0, 0, 43, 129, 324, 324, 0, 339, 31, 0, 0, 0, 29, 0, 53, 82, 339, 44, 42, 35, 0, 29, 231, 0, 36, 0, 44, 137, 42, 131, 35, 30, 448, 42, 32, 43, 33, 510, 34, 0, 506, 0, 0, 513, 43, 135, 511, 351, 418, 34, 41, 85, 87, 59, 0, 42, 310, 310, 34, 41, 0, 527, 0, 65, 56, 138, 42, 34, 0, 29, 323, 323, 41, 0, 327, 42, 276, 82, 397, 0, 131, 0, 0, 402, 402, 290, 531, 44, 0, 444, 0, 543, 0, 82, 0, 0, 44, 462, 449, 0, 0, 0, 435, 0, 0, 43, 0, 41, 0, 44, 0, 151, 173, 193, 43, 0, 0, 0, 160, 0, 82, 131, 171, 41, 0, 0, 137, 43, 176, 448, 448, 562, 34, 0, 157, 158, 42, 36, 399, 0, 0, 0, 82, 0, 44, 42, 34, 32, 0, 33, 0, 82, 0, 64, 206, 67, 594, 35, 42, 68, 44, 0, 43, 0, 41, 34, 327, 0, 172, 169, 167, 168, 170, 29, 166, 0, 0, 308, 43, 327, 327, 0, 0, 159, 0, 174, 636, 0, 0, 0, 0, 290, 642, 42, 0, 449, 449, 137, 0, 0, 0, 44, 0, 137, 0, 130, 0, 34, 0, 42, 0, 41, 131, 0, 0, 0, 0, 0, 666, 43, 0, 137, 0, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 0, 0, 0, 0, 22, 0, 264, 0, 42, 137, 351, 327, 0, 41, 0, 683, 327, 327, 685, 0, 0, 0, 339, 0, 43, 0, 0, 29, 35, 151, 173, 0, 0, 0, 0, 0, 160, 0, 276, 433, 171, 699, 0, 0, 0, 0, 176, 0, 668, 137, 44, 0, 157, 158, 690, 42, 153, 0, 154, 0, 156, 155, 327, 327, 42, 41, 0, 14, 43, 129, 0, 0, 0, 0, 0, 0, 0, 276, 0, 609, 0, 0, 0, 607, 608, 290, 172, 169, 167, 168, 170, 29, 166, 0, 0, 0, 0, 0, 0, 42, 0, 159, 44, 174, 82, 0, 0, 0, 0, 586, 0, 582, 578, 34, 0, 583, 579, 587, 585, 0, 43, 40, 615, 613, 574, 0, 14, 584, 572, 41, 0, 151, 173, 0, 0, 309, 567, 0, 160, 0, 0, 575, 171, 0, 0, 0, 0, 573, 176, 0, 0, 42, 0, 0, 157, 158, 0, 0, 153, 0, 154, 0, 156, 155, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 480, 246, 688, 43, 40, 244, 245, 576, 169, 167, 168, 170, 29, 166, 0, 0, 113, 0, 0, 0, 310, 0, 159, 0, 568, 0, 590, 580, 624, 0, 112, 403, 0, 0, 42, 0, 0, 339, 0, 0, 0, 32, 29, 33, 252, 250, 0, 105, 0, 106, 577, 114, 0, 107, 108, 0, 36, 93, 0, 94, 0, 91, 92, 0, 0, 101, 32, 102, 33, 0, 0, 96, 95, 103, 104, 696, 29, 111, 115, 0, 41, 0, 0, 39, 0, 0, 0, 588, 51, 0, 0, 0, 29, 0, 0, 0, 308, 110, 100, 98, 99, 97, 109, 0, 118, 43, 27, 147, 0, 183, 0, 40, 0, 78, 41, 609, 0, 44, 0, 607, 608, 151, 173, 618, 0, 617, 0, 0, 160, 34, 41, 261, 171, 0, 0, 43, 42, 0, 176, 41, 0, 0, 0, 0, 157, 158, 0, 39, 153, 0, 154, 44, 156, 155, 0, 0, 616, 614, 615, 613, 0, 0, 0, 0, 35, 0, 42, 44, 0, 43, 55, 179, 0, 0, 0, 0, 44, 0, 172, 169, 167, 168, 170, 29, 166, 43, 0, 116, 0, 35, 0, 0, 0, 159, 43, 195, 0, 150, 147, 0, 42, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 173, 0, 0, 42, 0, 0, 160, 0, 41, 0, 171, 0, 42, 0, 0, 0, 176, 0, 0, 0, 0, 31, 157, 158, 0, 0, 153, 31, 154, 0, 156, 155, 624, 0, 0, 0, 0, 36, 0, 0, 0, 39, 0, 36, 30, 148, 0, 32, 0, 33, 30, 0, 0, 32, 0, 33, 172, 169, 167, 168, 170, 29, 166, 43, 27, 0, 0, 183, 0, 0, 0, 159, 0, 195, 0, 150, 147, 19, 0, 0, 0, 0, 29, 19, 0, 0, 0, 0, 29, 0, 151, 173, 0, 0, 42, 0, 0, 160, 609, 41, 78, 171, 607, 608, 0, 0, 618, 176, 617, 0, 0, 0, 0, 157, 158, 0, 0, 153, 0, 154, 41, 156, 155, 40, 0, 0, 41, 0, 0, 0, 0, 0, 39, 0, 0, 0, 148, 0, 0, 616, 179, 615, 613, 0, 0, 0, 147, 172, 169, 167, 168, 170, 29, 166, 43, 27, 0, 44, 183, 0, 151, 173, 159, 44, 174, 0, 150, 160, 0, 0, 35, 171, 0, 0, 0, 43, 35, 176, 0, 0, 0, 43, 0, 157, 158, 42, 0, 153, 0, 154, 41, 156, 155, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 23, 0, 0, 587, 0, 42, 0, 0, 0, 0, 172, 169, 167, 168, 170, 29, 166, 151, 173, 0, 148, 624, 0, 0, 160, 159, 41, 174, 171, 150, 0, 0, 0, 0, 176, 0, 0, 0, 43, 0, 157, 158, 0, 0, 153, 0, 154, 0, 156, 155, 40, 0, 0, 41, 0, 0, 246, 0, 413, 39, 244, 245, 0, 44, 254, 0, 255, 0, 0, 42, 0, 0, 0, 0, 172, 169, 167, 168, 170, 29, 166, 43, 27, 0, 0, 183, 0, 151, 173, 159, 148, 174, 0, 590, 160, 0, 0, 253, 171, 252, 250, 0, 0, 0, 176, 0, 629, 0, 43, 0, 157, 158, 42, 0, 153, 0, 154, 41, 156, 155, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 42, 0, 0, 0, 0, 172, 169, 167, 168, 170, 29, 166, 151, 173, 0, 588, 0, 0, 40, 160, 159, 41, 174, 171, 0, 0, 0, 0, 0, 176, 0, 378, 0, 43, 0, 157, 158, 0, 0, 153, 0, 154, 0, 156, 155, 176, 0, 261, 41, 0, 0, 0, 0, 0, 39, 0, 0, 0, 44, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 172, 169, 167, 168, 170, 29, 166, 43, 27, 0, 0, 183, 0, 151, 173, 159, 264, 174, 40, 0, 160, 29, 0, 0, 171, 0, 0, 0, 0, 0, 176, 0, 263, 23, 43, 0, 157, 158, 42, 0, 153, 0, 154, 41, 156, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 147, 0, 42, 0, 0, 0, 0, 172, 169, 167, 168, 170, 29, 166, 151, 173, 0, 264, 0, 0, 0, 160, 159, 0, 174, 171, 0, 29, 0, 39, 0, 176, 201, 44, 0, 43, 0, 157, 158, 23, 0, 198, 0, 199, 0, 156, 155, 0, 0, 0, 41, 43, 27, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 179, 41, 42, 0, 0, 0, 0, 172, 169, 167, 168, 170, 29, 166, 0, 0, 0, 0, 42, 0, 151, 173, 159, 264, 0, 0, 150, 160, 0, 0, 0, 171, 0, 0, 350, 0, 0, 176, 44, 0, 0, 43, 0, 157, 158, 0, 0, 153, 0, 154, 0, 156, 155, 0, 0, 0, 43, 27, 0, 0, 183, 609, 0, 610, 0, 607, 608, 0, 0, 618, 0, 617, 42, 0, 0, 612, 611, 172, 169, 167, 168, 170, 29, 166, 151, 173, 0, 42, 0, 0, 0, 160, 159, 0, 174, 171, 0, 0, 0, 0, 202, 176, 616, 614, 615, 613, 0, 157, 158, 0, 0, 153, 0, 154, 0, 156, 155, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 313, 169, 167, 168, 170, 29, 166, 0, 0, 4, 12, 0, 0, 151, 173, 159, 264, 174, 0, 0, 160, 0, 40, 0, 171, 0, 0, 0, 0, 0, 176, 0, 0, 31, 43, 0, 157, 158, 0, 0, 153, 0, 154, 41, 156, 155, 0, 0, 0, 36, 624, 0, 0, 0, 0, 0, 30, 0, 0, 32, 0, 33, 0, 0, 0, 42, 0, 0, 40, 0, 312, 169, 167, 168, 170, 29, 166, 0, 0, 31, 264, 3, 40, 6, 0, 159, 0, 174, 0, 19, 0, 0, 0, 31, 29, 36, 0, 0, 43, 0, 0, 0, 30, 0, 0, 32, 23, 33, 0, 36, 0, 0, 0, 41, 40, 0, 30, 0, 0, 32, 0, 33, 0, 0, 0, 40, 0, 0, 0, 42, 0, 0, 41, 0, 0, 19, 0, 0, 0, 0, 29, 36, 0, 220, 0, 0, 0, 0, 0, 19, 264, 32, 23, 33, 29, 0, 0, 0, 0, 0, 0, 0, 32, 0, 33, 39, 23, 0, 43, 44, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 308, 35, 40, 0, 0, 29, 43, 27, 0, 0, 5, 41, 0, 13, 0, 0, 29, 51, 42, 0, 0, 0, 0, 40, 0, 0, 0, 0, 51, 36, 39, 0, 0, 0, 44, 0, 0, 42, 0, 32, 0, 33, 0, 41, 39, 0, 0, 35, 44, 0, 36, 0, 43, 27, 41, 0, 183, 0, 0, 0, 32, 35, 33, 227, 0, 0, 43, 27, 0, 447, 183, 0, 0, 13, 29, 0, 39, 0, 0, 0, 44, 0, 0, 42, 0, 0, 51, 39, 0, 0, 0, 44, 0, 35, 0, 29, 0, 42, 43, 55, 0, 0, 0, 0, 35, 0, 0, 51, 0, 43, 55, 0, 41, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 42, 0, 0, 0, 41, 609, 0, 610, 0, 607, 608, 42, 0, 618, 0, 617, 39, 0, 0, 612, 44, 0, 0, 0, 0, 253, 251, 252, 250, 0, 0, 0, 0, 35, 0, 0, 0, 39, 43, 55, 0, 44, 0, 0, 0, 0, 616, 614, 615, 613, 0, 0, 0, 702, 35, 0, 0, 0, 0, 43, 55, 0, 246, 0, 247, 0, 244, 245, 0, 42, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 253, 251, 252, 250, 246, 0, 247, 0, 244, 245, 0, 261, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 694, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 258, 253, 251, 252, 250, 0, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 261, 258, 253, 251, 252, 250, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 258, 253, 251, 252, 250, 0, 609, 0, 610, 0, 607, 608, 0, 0, 618, 0, 617, 0, 0, 0, 612, 611, 619, 620, 623, 679, 606, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 621, 616, 614, 615, 613, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 675, 243, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 261, 258, 253, 251, 252, 250, 0, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 258, 253, 251, 252, 250, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 258, 253, 251, 252, 250, 508, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 455, 0, 258, 253, 251, 252, 250, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 452, 258, 253, 251, 252, 250, 0, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 0, 0, 0, 0, 0, 0, 609, 0, 610, 0, 607, 608, 0, 0, 618, 0, 617, 261, 258, 253, 251, 252, 250, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 451, 243, 259, 0, 0, 616, 614, 615, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 261, 258, 253, 251, 252, 250, 0, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 0, 0, 0, 0, 0, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 311, 261, 258, 253, 251, 252, 250, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 259, 624, 253, 251, 252, 250, 0, 246, 0, 0, 0, 244, 245, 0, 0, 254, 0, 255, 261, 258, 253, 251, 252, 250, 0, 609, 0, 610, 0, 607, 608, 0, 0, 618, 0, 617, 0, 0, 0, 612, 611, 619, 620, 623, 0, 606, 622, 0, 253, 251, 252, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 621, 616, 614, 615, 613, 609, 0, 610, 0, 607, 608, 0, 0, 618, 0, 617, 0, 0, 0, 612, 611, 619, 620, 623, 0, 606, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 621, 616, 614, 615, 613, 0, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 243, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 258, 253, 251, 252, 250, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 0, 0, 0, 0, 249, 248, 256, 257, 260, 609, 243, 610, 0, 607, 608, 0, 0, 618, 0, 617, 0, 0, 0, 612, 611, 619, 620, 623, 0, 624, 258, 253, 251, 252, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 614, 615, 613, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 257, 260, 0, 609, 261, 610, 0, 607, 608, 0, 0, 618, 0, 617, 0, 0, 0, 612, 611, 619, 0, 0, 0, 0, 253, 251, 252, 250, 246, 0, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 0, 616, 614, 615, 613, 246, 261, 247, 0, 244, 245, 0, 0, 254, 0, 255, 0, 0, 0, 249, 248, 256, 0, 0, 0, 624, 253, 251, 252, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 251, 252, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261 }; short yypact[]={ 2196,-1000,-1000,-1000,-1000, 143,-1000,-1000,-1000,-1000, -1000,-1000, 515,-1000, 31, 570,-1000, 571,-1000, 339, 226,1507,1501,-1000, -56,-1000,-1000,-1000, 249, 249, -62,1298, 4, -4,-127, -8,-1000,-1000,-1000,1000, 734,-1000, 249,-1000,-1000,-1000, 39, 278, 369, 184, -1000,-1000, 571,-1000,-1000,-1000, 318,-1000, -61,1641, 1571,-1000,1748,-1000, 463,1389,-1000,1641,-1000,-1000, 1973,-1000,1748, 319,-1000, 310, 599, 571,-1000, 981, 571,-1000,-1000,-1000,-133,1480,-1000,1480,-1000,-1000, -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, -1000,-1000,-1000,-1000,-1000, 460, 321,-1000,-1000,-1000, -1000,-1000,-1000,-1000,-1000,-1000,-1000, 725,-1000,-1000, -61,-1000,-1000,-1000, -23,-1000,2256, 245, 249,-1000, -1000,-1000,-1000, 116,-1000,-1000, 317,-1000,1480, 456, -1000,1748,-1000, 852,-1000,-1000,3243,1909, 644, 581, 2043,1855,2043,2043,2043,2043,2043,2043,2043,2043, 2043,-1000, 134, 33,-1000,1480,-1000,-1000,-1000,-1000, -1000,-1000,-1000,1298, 511, 507,-1000, 193,3243,1571, -10,-1000, 31,-1000,-1000, -56,-1000, 445, -12, 211, -1000,-1000,-1000,2288, 55, 511, 507,3106,2177,2107, 444,-1000,1501,-1000,-1000, 319,-1000, 307,-1000,-1000, 3288,2378, 307,-1000,-1000,-1000,-1000,-1000, 99,-1000, -1000,-1000,-1000,-1000, 191, 174,-1000, 254, 226, 113, 214,1480, 75,-1000,-1000, 307, 172,1924, -18,1571, -1000, 369,1641,1641,1641,1641,1641,1641,1641,1641, 1641,1641,1641,1641,1641,1641,1641,1641,1641,1641, 1641,1641, 581,1641, 539,1839,1855,-1000,1641, 442, 205,1571, 581,-1000,-1000,1389,2299, 581, 581, 581, 581, 581, 581, 581, 581, 581, 956,-1000, 909,3061, 1282,-1000,-1000,1571,1571,-1000, 103, 240,-1000,-1000, 22,-1000, 438,1614,-1000,1571,-1000, 356,-1000,1307, 965,-1000, 429, 426,-1000, 22, 629,-1000,-1000,1480, -1000,-1000, 547, 687, 714,-1000,-1000,-124,-1000,-1000, -1000,-1000, 167,-1000, 210,-1000,-1000,1052, 795,-1000, -1000, 307, 96,-1000,-1000, 75,-1000,-1000, 230,-1000, 692,2357, 240,-1000,-1000,-1000,3243,3243, 44, 44, -137,3134,3397,3088, 351,1717,-137,1242,1242,1242, 2431,3417,3243,3243,3015,-1000,2970, 581,1641,-1000, -1000,1389,2924,-1000, 427,-1000, 380, 868,-107, 21, -1000, 137,-1000, 238, 411, 397, 308, 99,-1000,-1000, -1000, 452, 546, 207, 392, 384,-1000, 100,-1000,-1000, 490,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 547, 614, 483, 483, 483,-1000,-1000,-1000, 592, 547, -69, -1000, 214,-1000,1248,-1000,1248, 245,-1000, 75, 216, 86,-1000,1924,-1000, 249,-1000, 547,-1000, 140, 32, 100,1641,2043,2879, 383,-1000,-1000,-1000, 817,-1000, -1000,-1000,-1000, 322, 677,-1000,-1000,-1000,-1000,-1000, 1855,-1000, 308,-1000,-1000, 308, 389,-1000,-1000,-1000, -43, 804, 297, 22,1571,-1000,-1000,-1000,-1000,-1000, -1000,-1000,-1000,-1000,-1000, 106,-1000,1641,-1000,2242, -1000,-1000,-1000, 547, 542,-1000,3352, 581,2043,1855, -1000,-1000, 484,-1000,-1000,-1000,-1000,1748, 547,-1000, -1000, 88, 209,-1000,1571, 480, 208,-1000,-1000, 240, -1000,3243,-1000,-1000,-1000,-1000,-1000, 163,-1000, 581, -1000,-1000,-1000,-1000,-1000,-1000, -38,-1000, 804, 366, 1571,-1000, 297, 100,-1000,-1000,-1000,-1000,1218,-1000, -1000, 352,-1000,-1000,-1000,-1000,-1000,1641, 45,-1000, -1000,-1000, 465, 465, 475,-1000, 236, 229,-1000, 219, 100,3152,-1000,-1000, 60,-1000, 474,1775, 585, 581, 2043,-1000,-1000, 153,2827, 100,-1000,1641,-1000,-1000, 465,-1000,-1000,1641,-1000,-1000,1705,1705,1705,1705, 1705,1705,1705,1705,1705,1705,1705,1705,1705,1705, 1705,1705,1705,1705,1705,-1000,-1000, 6, 581,1641, 1116, 581,-1000,-1000,-1000, 565,2782,-1000,-1000,-1000, -1000,-1000,2736,-1000, -29,3197, -16, -16,-138,1356, 2452,2998, 41,1552,-138,1139,1139,1139,2057,3372, 3197,3197,2691,-1000, 522, 350,2645, 581,1641,-1000, -1000,1641,-1000,-1000,-1000,-1000,-1000,-1000, 472,1705, 465,-1000,2043,2600,-1000,2554,-1000, 100,1748, -98, 3307,-1000, 581,2043,1641,-1000,2288, 349, 581,2509, 494,-1000,-1000,-1000,-1000 }; short yypgo[]={ 0, 838, 9, 8, 19, 359, 3, 836, 5, 11, 833, 52, 548, 677, 831, 150, 27, 6, 446, 56, 830, 828, 185, 827, 823, 64, 821, 39, 659, 47, 820, 129, 818, 4, 816, 813, 812, 21, 456, 484, 171, 25, 809, 18, 7, 35, 54, 801, 24, 14, 38, 763, 145, 761, 20, 50, 752, 33, 751, 2, 824, 0, 29, 75, 606, 109, 723, 749, 748, 747, 48, 744, 736, 734, 733, 13, 732, 10, 16, 614, 731, 28, 37, 79, 729, 722, 698, 696, 65, 695, 690, 687, 686, 684, 679, 890, 30, 673, 672, 26, 665, 661, 657, 652, 648, 635, 631, 628, 604, 601, 599, 597, 590, 17, 579 }; short yyr1[]={ 0, 10, 10, 10, 10, 10, 10, 84, 85, 87, 83, 67, 67, 67, 67, 67, 73, 73, 1, 1, 1, 1, 1, 2, 2, 89, 4, 4, 4, 90, 3, 3, 3, 91, 72, 88, 92, 6, 6, 7, 7, 8, 8, 5, 5, 25, 93, 25, 25, 94, 25, 26, 26, 9, 9, 95, 96, 65, 65, 65, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 58, 82, 82, 57, 57, 57, 57, 57, 56, 81, 81, 20, 20, 20, 97, 15, 98, 15, 15, 16, 16, 86, 86, 86, 99, 99, 49, 49, 49, 49, 49, 17, 100, 17, 17, 101, 22, 22, 22, 22, 102, 102, 75, 75, 76, 76, 77, 77, 77, 77, 77, 21, 21, 21, 18, 18, 19, 19, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 27, 27, 27, 27, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 63, 61, 61, 64, 64, 78, 78, 78, 80, 80, 28, 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, 59, 103, 33, 33, 33, 35, 35, 35, 35, 104, 35, 35, 106, 105, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 107, 34, 108, 34, 109, 34, 110, 34, 111, 34, 112, 34, 34, 68, 68, 69, 74, 74, 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, 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, 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, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 62, 62, 62, 62, 62, 62, 62, 62, 42, 42, 42, 42, 42, 42, 42, 66, 60, 60, 60, 41, 41, 41, 44, 113, 47, 47, 47, 47, 46, 55, 51, 114, 51, 79, 52, 53, 53, 50, 50, 71, 71, 71, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11 }; short yyr2[]={ 0, 1, 1, 1, 2, 1, 1, 0, 0, 0, 8, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 5, 4, 2, 0, 7, 5, 5, 0, 6, 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, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 5, 0, 6, 2, 1, 3, 3, 1, 0, 2, 2, 1, 2, 2, 2, 3, 1, 0, 4, 0, 0, 5, 2, 5, 2, 0, 2, 2, 0, 1, 3, 1, 2, 2, 3, 3, 2, 4, 7, 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, 1, 2, 2, 1, 0, 2, 5, 1, 3, 2, 4, 2, 4, 6, 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, 0, 4, 0, 4, 0, 4, 0, 5, 0, 4, 3, 0, 2, 3, 4, 3, 1, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 2, 5, 3, 6, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 2, 5, 3, 6, 1, 2, 0, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 3, 4, 4, 3, 4, 4, 3, 4, 4, 3, 4, 4, 1, 2, 3, 3, 1, 3, 1, 1, 1, 1, 1, 1, 2, 3, 4, 2, 4, 3, 3, 3, 4, 4, 5, 5, 6, 6, 4, 4, 1, 1, 2, 1, 2, 2, 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, -83, -9, -4, -3, -2, 1, 185, -13, -28, -14, -65, -27, 80, -63, -12, -79, 97, -61, -22, -15, 179, -64, 85, 47, 24, 50, 52, -66, 173, 40, -60, -21, 156, 13, 123, 209, 178, 160, 73, 40, -84, -28, -26, 72, 97, -65, -22, -15, 179, 80, -25, -61, 69, 70, 72, -5, -52, 40, -79, -11, 42, 46, -52, 40, -11, -79, 45, -27, 80, -28, -65, 97, -28, -65, 179, -60, 123, -66, -95, 58, -95, 123, -70, -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, -65, -61, 97, 97, 178, 173, 97, -23, -18, -64, 179, 73, 80, 73, -20, -18, 179, -61, -64, -95, 81, 58, -5, 70, 71, 72, 69, -38, 9, 160, -40, 99, 23, -44, 50, 52, 55, 54, 46, 47, 95, 30, -41, -63, -61, -42,-113, 86, 82, 83, 81, 84, 34, 80, 24, 97, -65, 40, -29, -38, 73, -88, -9, -13, 182, -65, -61, 41, -37, -53, -36, -50, -29, -51, -13, -61, 97, -65, -38, 50, 52, -37, 41, 173, -27, 80, 45, 41, -82, -81, -56, -38, -13, -82, 41, 43, 97, -65, -45, -12, 97, 74, -24, -83, -9, -4, -3, -2, 175, -63, -75, 69, -95, -97, 73, 179, -82, 41, -85, -88, -94, -25, -28, -93, 70, 54, 55, 50, 52, 65, 64, 94, 92, 93, 91, 58, 60, 66, 67, 90, 71, 68, 180, -40, 42, 160, 9, 23, 95, 42, 44, 45, 40, -40, -44, -55,-113, -13, -40, -40, -40, -40, -40, -40, -40, -40, -40, -44, -41, 47, -38, -13, -70, -46, 40, 40, 72, -37, -90, 124, 125, -78, 41, -71, 71, 155, 71, -65, -48, 80, -12, -79, 43, 80, 80, 41, -78, -28, -27, -96, -58, 60, 71, -57, -79, -12, -96, -45, -66,-101, 72, 72, 69, -27, 73, -76, -77, -19, 175, 97, 80, -65, -82, -16, -17, 80, -98, -96, 72, -86, -99, 156, -13, -89, 124, 125, -29, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -40, 42, -44, -55,-113, -38, -41, 176, -62, -63, 47, 97, -61, -41, 176, -62, -63, -37, -37, -54, -12, -18, 97, 41, -43, -12, 40, -37, -37, 74, -6, 69, 97, 99, 41, -50, 155, -29, -11, -52, 70, -64, -48, -48, 41, 41, 41, -81, -52, -11, -57, -57,-102, 72, 71, -19, 97, -19, 175, -96, 74, 71,-100, -16, 60, 71, -73, -64, 80, -49, 80, -12, -79, -6, 69, 43, -38, -37, 43, -41, 123, 47, -41, 123, -18, 97, 160, 47, -41, 123, -41, 123, 41, 41, -11, -54, -11, 41, -43, -43, 41, 41, -33, 73, -92, 40, -78,-114, 41, -52, -52, -52, 41, -72, 127, -77, -19, -19, -75, -17, 70, 74, -87, -99, -11, -52, -49, -49, -33, -38, -40, 43, 41, -18, 97, 47, -18, 97, -44, -55,-113, 41,-103, 74, 256, -7, -8, 40, -19, -80, -18, -29, -91, 73, -38, -67, -9, -4, -3, -2, -22, 41, -40, -44, -55, 97, -18, -52, -11, -30, 74, 71, -37, 40, 41, 71, -6, 72, 185, -31, 74, -32, -8, 41, -37, -18, -33, -34, -35, 72, 28, 97, -9, -4, -33, 20, 39, 16, 33, 80, 123, 4, 8, 100, -39, 3, 7, 19, 10, 1, 9, 160, -40, 99, 41,-105,-106, -38, 81, -59, 40, -59, 40, -108, 69, 69,-111, 69, -33, 70, 54, 55, 50, 52, 65, 64, 94, 92, 93, 91, 60, 58, 66, 67, 90, 71, 68, 180, 80,-104, 40, -40, 42, 9, -40, 72, 72, -33, -31, -38, -31,-107, -59, -109,-110, -38,-112, -68, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -31, 81, -38, -40, 42, 12, 41, -31, -31, -31, -31, 69, -31, -69, 98, 69, 39, 41, 43, -38, -31, -38, -31, -74, -79, 40, -39, -59, -40, 43, 72, -33, -13, 155, -40, -38, -48, 41, 41, 41, -31 }; short yydef[]={ 0, -2, 1, 2, 3, 61, 5, 6, 18, 19, 20, 21, 0, 7, 0, 44, 67, 62, 191, 142, 0, 0, 0, 60, 172, 64, 65, 66, 57, 0, 0, 0, 402, 403, 0, 408, 393, 173, 132, 0, 0, 176, 0, 376, 377, 4, 0, 0, -2, 0, 54, 68, 69, 70, 71, 72, 142, 51, 172, 319, 319, 24, 35, 182, 393, -2, 198, 319, 412, 184, -2, 197, 398, 0, 193, 142, 195, 196, 405, 0, 0, 63, 174, 175, 0, 319, 55, 319, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 0, 0, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 215, 384, 385, 0, 404, 406, 378, 407, 410, 0, -2, 128, 112, 124, 127, 87, 91, 84, 85, 0, 128, 319, 0, 8, 35, 49, 0, 53, 46, 48, 0, 377, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 172, 352, 319, 354, 355, 356, 357, 358, 359, 379, 0, 0, 0, 383, 0, 267, 319, 29, 43, 0, 61, 62, 0, 177, 0, 399, 264, 396, 265, 397, 202, 172, 60, 62, 0, 0, 0, 0, 177, 0, 192, 142, 0, 199, 0, 75, 82, 83, 76, 0, 160, 161, 386, 387, 388, 215, 409, 108, 131, 133, 134, 138, 137, 139, 0, 0, 0, 0, 319, 107, 89, 86, 0, 0, 96, 25, 319, 52, 45, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 313, 319, 377, 0, 0, 324, 319, 0, 0, 319, 318, 320, 321, 319, 207, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 349, 0, 0, 210, 380, 381, 319, 319, 23, 0, 38, 31, 32, 183, 185, 0, 398, 400, 319, 69, 390, 200, 202, 202, 411, 379, 379, 188, 189, 0, 194, 58, 319, 56, 73, 81, 76, 76, 59, 216, 0, 113, 135, 136, 140, 193, 125, 115, 117, 119, 0, 0, 129, 130, 0, 0, 92, -2, 107, 375, 22, 0, 95, 0, 0, 38, 27, 28, 50, 47, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 0, 312, 0, 315, 319, 322, 323, 319, 0, 336, 0, 339, 0, 0, 0, 172, 342, 0, 345, 0, 0, 0, 389, 207, 350, 351, 353, 0, 210, 210, 0, 0, 268, 0, 36, 178, 0, 177, 395, 401, 266, 204, 205, 391, 201, 203, 0, 0, 0, 0, 74, 79, 80, 0, 78, 109, 141, 0, 120, 0, 121, 0, -2, 88, 107, 0, 0, 9, 0, 97, -2, -2, 98, 99, 0, 0, 0, 319, 0, 0, 0, 335, 337, 338, 0, 340, 341, 360, 363, 0, 0, 343, 344, 346, 347, 374, 0, 209, 208, 212, 382, 211, 0, 368, 369, 30, -2, 0, 0, 394, 319, 206, 186, 187, 190, 77, 114, 33, 118, 122, 123, 0, 93, 319, 90, 0, 94, 101, 102, 100, 0, 26, 311, 314, 0, 0, 361, 365, 0, 366, 367, 370, 371, 0, 0, 217, 225, 0, 37, 39, 319, 0, 0, 180, 392, 38, 126, 106, 10, 11, 12, 13, 14, 64, 103, 316, 372, 373, 362, 364, 213, 214, 221, 226, 0, 0, 319, 179, 0, 0, 15, 218, 219, 224, 0, 40, 41, 0, 181, 34, 220, 234, 237, 319, 60, 240, 241, 242, 0, 0, 0, 248, 379, 176, 254, 0, 0, 227, 228, 229, 0, 231, 0, 0, 377, 292, 0, 42, 236, 0, 0, 0, 221, 319, 221, 246, 0, 250, 252, 319, 256, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 221, 0, 288, 319, 0, 293, 235, 238, 239, 243, 0, 245, 221, 221, 221, 221, 0, 221, 258, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 0, 287, 0, 0, 0, 290, 319, 221, 222, 319, 249, 251, 253, 221, 257, 260, 0, 0, 0, 233, 0, 0, 244, 0, 255, 0, 0, 393, 286, 232, 289, 0, 319, 261, 202, 0, 291, 0, 0, 263, 221, 262, 247 }; #define YYFLAG -1000 #define YYERROR goto yyerrlab #define YYACCEPT return(0) #define YYABORT return(1) #define yydebug 0 /* parser for yacc output */ 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 */ char *yytoknames[1]; /* for debugging */ char *yystates[1]; /* for debugging */ int yyparse(void) { short yys[YYMAXDEPTH], *yyps, *yyxi; int yyj, yym, yystate, yyn; YYSTYPE *yypvt, *yypv; yystate = 0; yychar = -1; yynerrs = 0; yyerrflag = 0; yyps = &yys[-1]; yypv = &yyv[-1]; yystack: /* put a state and value onto the stack */ 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]); 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(); 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); } 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(); if(yydebug >= 2) if(yychar < 0) printf("lex EOF\n"); else printf("lex %s\n", yytoknames[yychar]); if(yychar < 0) yychar = 0; } /* look through exception table */ for(yyxi = yyexca; *yyxi != -1 || yyxi[1] != yystate; yyxi += 2) ; while(*(yyxi+=2) >= 0) if(*yyxi == yychar) break; if((yyn = yyxi[1]) < 0) return 0; /* accept */ } if(yyn == 0) { /* error ... attempt to resume parsing */ switch(yyerrflag) { case 0: /* brand new error */ yyerror("syntax error"); if(yydebug) { printf("%s", yystates[yystate]); if(yytoknames[yychar]) printf("saw %s\n", yytoknames[yychar]); else if(yychar >= ' ' && yychar < 0177) printf("saw `%c'\n", yychar); else if(yychar == 0) printf("saw EOF\n"); else printf("saw char 0%o\n", yychar); } ++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; } /* the current yyps has no shift onn "error", pop stack */ if(yydebug) printf("error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] ); --yyps; --yypv; } /* there is no state on the stack with an error shift ... abort */ return 1; case 3: /* no shift yet; clobber input char */ if(yydebug) { printf("error recovery discards "); if(yytoknames[yychar]) printf("%s\n", yytoknames[yychar]); else if(yychar >= ' ' && yychar < 0177) printf("`%c'\n", yychar); else if(yychar == 0) printf("EOF\n"); else printf("char 0%o\n", yychar); } if(yychar == 0) return 1; /* don't discard EOF, quit */ yychar = -1; goto yynewstate; /* try again in the same state */ } } /* reduction by production yyn */ if(yydebug) { char *s; printf("reduce %d in:\n\t", yyn); for(s = yystates[yystate]; *s; s++) { printf("%c", *s); if(*s == '\n' && *(s+1)) printf("\t"); } } 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 718 "gram.y" { YYCLEAN;return 2; } break; case 2: # line 719 "gram.y" { YYCLEAN;return 1; } break; case 3: # line 720 "gram.y" { YYCLEAN;return 0; } break; case 4: # line 722 "gram.y" { set_linkage(yypvt[-1].s); bl_level--; YYCLEAN;return 1; } break; case 5: # line 728 "gram.y" { set_linkage(0); bl_level++; YYCLEAN;return 1; } break; case 6: # line 733 "gram.y" { YYCLEAN;return 1; } break; case 7: # line 737 "gram.y" { PUSH_TEMPLATE_SCOPE();//SYM // error('d',"template seen: in_class_decl %d", in_class_decl); if (in_class_decl) { must_be_friend = 1; if (templp->in_progress == true) // inside template templp->save_templ = new templ_state; } else must_be_friend = 0; templp->start() ; templp->formals_in_progress = true; } break; case 8: # line 749 "gram.y" { in_arg_list = 2; } break; case 9: # line 750 "gram.y" { templp->enter_parameters(); templp->formals_in_progress = false; in_arg_list = 0; } break; case 10: # line 756 "gram.y" { templp->end(yypvt[-0].pn); POP_SCOPE(); //SYM if (in_class_decl && templp->save_templ) { delete templp->save_templ; templp->save_templ = 0; } else { templp->in_progress = false; bound_expr_tbl->reinit(); } //SYM -- goto mod removed } break; case 12: # line 772 "gram.y" { goto mod; } break; case 13: # line 773 "gram.y" { goto mod; } break; case 15: # line 776 "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 17: # line 787 "gram.y" { yyval.pn = Ncopy(yypvt[-0].pn) ;} break; case 18: # line 791 "gram.y" { //SYM -- tn stuff removed if (yypvt[-0].pn==0) yyval.i = 1; } break; case 19: # line 795 "gram.y" { goto mod; } break; case 20: # line 797 "gram.y" { mod: //SYM -- tn stuff removed Pname n = yypvt[-0].pn; if ( n && n->n_qualifier ) {//SYM if ( n->n_qualifier->n_template_arg != template_type_formal ) UNSET_SCOPE(); if ( n->n_qualifier == sta_name ) n->n_qualifier = 0; } } break; case 22: # line 808 "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 23: # line 816 "gram.y" { err_name = yypvt[-3].pn; if(err_name) err_name->n_initializer = yypvt[-1].pe; goto fix; } break; case 24: # line 822 "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); } if ( err_name && err_name->n_qualifier ) { if ( err_name->n_qualifier->n_template_arg != template_type_formal ) UNSET_SCOPE(); if ( err_name->n_qualifier == sta_name ) err_name->n_qualifier = 0; } } break; case 25: # line 854 "gram.y" { if ( yychar == LC ) --bl_level; Pname n = Nfct(yypvt[-3].p,yypvt[-2].pn,dummy); Fargdcl(n->tp,name_unlist(yypvt[-1].nl),n); arg_redec( yypvt[-2].pn ); yyval.pn = n; if ( yychar == LC ) ++bl_level; Ctbl->k_name = n; } break; case 26: # line 863 "gram.y" { Pname n = yypvt[-2].pn;//SYM if ( !in_typedef ) { Fbody(n->tp) = Pblock(yypvt[-0].p);//SYM Finit(n->tp) = yypvt[-1].pn; } yyval.p = n; NOT_EXPECT_ID(); } break; case 27: # line 872 "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 28: # line 880 "gram.y" { if (!templp->in_progress) 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(); } break; case 29: # line 890 "gram.y" { if ( yychar == LC ) --bl_level; Pname n = Nfct(defa_type,yypvt[-2].pn,dummy); Fargdcl(n->tp,name_unlist(yypvt[-1].nl),n); arg_redec( yypvt[-2].pn ); yyval.pn = n; if ( yychar == LC ) ++bl_level; Ctbl->k_name = n; } break; case 30: # line 899 "gram.y" { Pname n = yypvt[-2].pn;//SYM Fbody(n->tp) = Pblock(yypvt[-0].p);//SYM if ( yypvt[-1].pn && yypvt[-1].pn->n_list && ccl && ccl->csu == UNION ) error( "multiple initializers in unionK %s::%n", yypvt[-5].pn->string, yypvt[-5].pn ); Finit(n->tp) = yypvt[-1].pn; yyval.p = n; NOT_EXPECT_ID(); } break; case 31: # line 909 "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 32: # line 917 "gram.y" { if (explicit_template_definition == 0 ) error(&yypvt[-3].pn->where,"badD of%n -- did you forget a ';'?",yypvt[-3].pn); else { Pname n = pti->get_tname(); if (yypvt[-3].pn->n_oper == DTOR) error('s',"explicitYZL for destructor of specializedYC%n -- please drop the parameter list",n); else error('i',"specialializedYC%n: declaration problem: %s",n,yypvt[-3].pn->string); error('i', "cannot recover from previous error" ); } Pname n = Nfct(defa_type,yypvt[-3].pn,0); yyval.p = n; NOT_EXPECT_ID(); } break; case 33: # line 935 "gram.y" { PUSH_ARG_SCOPE();//SYM arg_redec(yypvt[-0].pn); Ctbl->k_name = yypvt[-0].pn; } break; case 34: # line 940 "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(); } break; case 35: # line 950 "gram.y" { // if parsing implicit inline def, save body // of function for parsing after class def if ( Ctbl->k_id != ARG ) error('i',"expectingA table in check_inline!"); 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; POP_SCOPE();//SYM } else { // syntax error // just parse in place yylex(); // FDEF yylex(); yychar = NO_ID; hoist_al();//SYM } } // if in_class_decl //SYM -- else non-nested ftn def //SYM -- arg table will become block table break; default: la_backup(yychar,yylval); yychar = NO_ID; // 'graceful' recovery hoist_al();//SYM break; } } break; case 36: # line 986 "gram.y" { ++in_binit_list; } break; case 37: # line 987 "gram.y" { yyval.p = yypvt[-0].p; in_arg_list = 0; --in_binit_list; } break; case 38: # line 993 "gram.y" { yyval.p = 0; } break; case 39: # line 997 "gram.y" { yyval.p = yypvt[-0].p; } break; case 40: # line 999 "gram.y" { yyval.pn = yypvt[-0].pn; yyval.pn->n_list = yypvt[-2].pn; } break; case 41: # line 1003 "gram.y" { yyval.pn = new name; yyval.pn->n_initializer = yypvt[-1].pe; } break; case 42: # line 1008 "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 43: # line 1023 "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 44: # line 1033 "gram.y" { PUSH_ARG_SCOPE();//SYM yyval.p = 0; } break; case 46: # line 1041 "gram.y" { if ( in_typedef ) { error("Tdef field"); in_typedef = 0; } // ENTER_NAME(yypvt[-1].pn); } break; case 47: # line 1049 "gram.y" { yyval.p = yypvt[-3].pn; yyval.pn->tp = new basetype(FIELD,yypvt[-0].pn); } break; case 48: # line 1053 "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 49: # line 1061 "gram.y" { // ENTER_NAME(yypvt[-1].pn); } break; case 50: # line 1065 "gram.y" { Pexpr e = yypvt[-0].pe; if (e == dummy) error("emptyIr"); yypvt[-3].pn->n_initializer = e; init_seen = 0; } break; case 51: # line 1073 "gram.y" { Pname n = yypvt[-0].pn; if (n) { yyval.nl = new nlist(n); if ( n->n_qualifier ) {//SYM if ( n->n_qualifier->n_template_arg != template_type_formal ) UNSET_SCOPE(); if ( n->n_qualifier == sta_name ) n->n_qualifier = 0; } } if ( NEXTTOK() == CM && la_look() == TNAME ) EXPECT_ID(); } break; case 52: # line 1087 "gram.y" { Pname n = yypvt[-0].pn; if (yypvt[-2].p) if (n) yypvt[-2].nl->add(n); else error("DL syntax"); else { if (n) yyval.nl = new nlist(n); error("DL syntax"); } if ( n ) { if ( n->n_qualifier ) {//SYM if ( n->n_qualifier->n_template_arg != template_type_formal ) UNSET_SCOPE(); if ( n->n_qualifier == sta_name ) n->n_qualifier = 0; } } if ( NEXTTOK() == CM && la_look() == TNAME ) EXPECT_ID(); } break; case 53: # line 1111 "gram.y" { extern int co_hack; co_hack = 1; /*$$ = Ndata($1,name_unlist($2));*/ Pname n = Ndata(yypvt[-2].p,name_unlist(yypvt[-1].nl)); //error('d',"data_dcl:type decl_list sm: %n%t in_typedef%t in_tag%n",n,n->tp,in_typedef,in_tag); //SYM redef check removed in_typedef = 0; in_friend = 0; in_tag = 0; co_hack = 0; DECL_TYPE = 0; yyval.p = n; } break; case 54: # line 1126 "gram.y" { yyval.p = yypvt[-1].pb->aggr(); in_typedef = 0; in_friend = 0; in_tag = 0; DECL_TYPE = 0; } break; case 55: # line 1138 "gram.y" { templp->parameters_in_progress++; in_arg_list = 2; check_decl(); } break; case 56: # line 1144 "gram.y" { templp->parameters_in_progress--; if (!templp->parameters_in_progress) in_arg_list = 0; } break; case 57: # line 1150 "gram.y" { yyval.pn = templp->check_tname(yypvt[-0].pn) ; } break; case 58: # line 1152 "gram.y" { int sm = NEXTTOK()==SM; if (in_friend) in_friend += sm; bit flag=0; if (dtpt_opt && in_typedef && !templp->parameters_in_progress && curloc.file == first_file) flag=1; yyval.pn = parametrized_typename(yypvt[-3].pn, (expr_unlist(yypvt[-1].el)),in_friend) ; if (flag) righttname=yyval.pn; } break; case 59: # line 1166 "gram.y" { extern Pbase any_type; error("%n was not aZizedT.", yyval.pn) ; yyval.pn= yypvt[-3].pn->tdef() ; yyval.pn->tp = any_type ; } break; case 60: # line 1175 "gram.y" { yyval.p = new basetype(yypvt[-0].t,0); if ( yypvt[-0].t == TYPEDEF ) { in_typedef = yyval.pt; // error('d',"typedef: ccl %t ", ccl, yypvt[-0].pn); } else if ( yypvt[-0].t == FRIEND ) { in_friend = 1; must_be_friend = 0; } if (DECL_TYPE == -1) DECL_TYPE = 0; } break; case 61: # line 1188 "gram.y" { yyval.p = new basetype(EXTERN,0); yyval.pb->b_linkage = yypvt[-0].s; if (DECL_TYPE == -1) DECL_TYPE = 0; } break; case 62: # line 1193 "gram.y" { yyval.p = new basetype(TYPE,yypvt[-0].pn); if (DECL_TYPE == -1) DECL_TYPE = 0; } break; case 63: # line 1198 "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 66: # line 1206 "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 68: # line 1223 "gram.y" { if ( DECL_TYPE != -1 ) { switch (yypvt[-1].pb->base) { case COBJ: case EOBJ: Pbase bt; 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 69: # line 1238 "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 70: # line 1245 "gram.y" { yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break; case 71: # line 1246 "gram.y" { yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break; case 72: # line 1248 "gram.y" { if (DECL_TYPE == TYPE) { switch (yypvt[-1].pb->base) { case COBJ: case EOBJ: { Pbase bt; 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',"T 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 73: # line 1272 "gram.y" {in_arg_list = 2; check_decl();} break; case 74: # line 1275 "gram.y" {yypvt[-2].el->add(new expr(ELIST,yypvt[-0].pe,NULL)) ; } break; case 75: # line 1277 "gram.y" { in_arg_list=0; yyval.el = new elist(new expr(ELIST,yypvt[-0].pe,NULL)); } break; case 76: # line 1281 "gram.y" { yyval.p = new name; } break; case 77: # line 1285 "gram.y" { yyval.p = yypvt[-1].p; in_arg_list = 0; hoist_al(); } break; case 78: # line 1291 "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 79: # line 1298 "gram.y" { Freturns(yypvt[-0].p) = yypvt[-1].pn->tp; yypvt[-1].pn->tp = (Ptype)yypvt[-0].p; } break; case 80: # line 1303 "gram.y" { Vtype(yypvt[-0].p) = yypvt[-1].pn->tp; yypvt[-1].pn->tp = (Ptype)yypvt[-0].p; } break; case 81: # line 1309 "gram.y" { yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break; case 82: # line 1312 "gram.y" { yypvt[-0].pn->n_template_arg = template_actual_arg_dummy; yyval.pe = yypvt[-0].pn; /* keep yacc happy */ } break; case 83: # line 1317 "gram.y" { if (yypvt[-0].pe == dummy) error("emptyYZL"); yyval.pe = yypvt[-0].pe; } break; case 84: # line 1325 "gram.y" { yyval.p = enumcheck( yypvt[-0].pn); } break; case 85: # line 1327 "gram.y" { if ( DECL_TYPE != TNAME ) { error("syntax error -- enum%k",yypvt[-0].t); yyval.p = 0; } else yyval.p = enumcheck( yypvt[-0].pn); } break; case 86: # line 1335 "gram.y" { if ( DECL_TYPE != TNAME ) { error("enum declaration syntax"); yyval.p = 0; } else yyval.pn = enumcheck(yypvt[-0].pn); if (in_typedef && in_typedef->base == 0) in_typedef->defined = TNAME_SEEN; //xxx qualifier currently ignored... } break; case 87: # line 1347 "gram.y" { ++in_class_decl; } break; case 88: # line 1348 "gram.y" { --in_class_decl; yyval.p = end_enum(0,yypvt[-1].nl); } break; case 89: # line 1349 "gram.y" { ++in_class_decl; } break; case 90: # line 1350 "gram.y" { --in_class_decl; yyval.p = end_enum(yypvt[-4].pn,yypvt[-1].nl); } break; case 91: # line 1351 "gram.y" { yyval.pb = (Pbase)yypvt[-0].pn->tp; } break; case 92: # line 1355 "gram.y" { if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); } break; case 93: # line 1357 "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 96: # line 1368 "gram.y" { yyval.pn = NULL; error("emptyYZL"); } break; case 97: # line 1377 "gram.y" { templp->collect(yypvt[-1].t, yypvt[-0].pn) ; } break; case 98: # line 1379 "gram.y" {templp->collect(Ndata(yypvt[-1].p,yypvt[-0].pn)); } break; case 99: # line 1386 "gram.y" { yyval.p = yypvt[-0].pn; } break; case 100: # line 1388 "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 101: # line 1393 "gram.y" { Vtype(yypvt[-0].p) = yypvt[-1].pn->tp; yypvt[-1].pn->tp = (Ptype)yypvt[-0].p; } break; case 102: # line 1397 "gram.y" { Freturns(yypvt[-0].p) = yypvt[-1].pn->tp; yypvt[-1].pn->tp = (Ptype)yypvt[-0].p; } break; case 103: # line 1401 "gram.y" { yyval.p = yypvt[-1].p; in_arg_list = 0; hoist_al(); } break; case 104: # line 1410 "gram.y" { if ( yypvt[-0].pn->n_oper != TNAME ) insert_name(yypvt[-0].pn,Ctbl); yyval.p = yypvt[-0].pn; yyval.pn->tp = moe_type; } break; case 105: # line 1417 "gram.y" { if ( yypvt[-0].pn->n_oper != TNAME ) insert_name(yypvt[-0].pn,Ctbl); } break; case 106: # line 1422 "gram.y" { yyval.p = yypvt[-3].pn; yyval.pn->tp = moe_type; yyval.pn->n_initializer = yypvt[-0].pe; } break; case 107: # line 1427 "gram.y" { yyval.p = 0; } break; case 108: # line 1431 "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 109: # line 1447 "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); // error('d',"ccl: %t templ_friends: %d", ccl, templ_friends); ccl->templ_friends = templ_friends; templ_friends = 0; if ( --in_class_decl ) // nested class // continue to parse enclosing class parsing_class_members = 1; //SYM -- tn stuff removed POP_SCOPE();//SYM if ( Ctbl->k_id == TEMPLATE ) { // remove intermediate template table // from scope of class ccl->k_tbl->k_next = Ctbl->k_next; } if (pti) { pti->explicit_inst(); Pname nnn = yyval.pt->bname(); // error('d',"ccl: %s nnn: %s", ccl->string, nnn->string); nnn->string = ccl->string; explicit_template_definition = 0; pti = 0; } end_cl(); declTag = 1; } break; case 110: # line 1481 "gram.y" { aggrcheck: yyval.pb = (Pbase)yypvt[-0].pn->tp; if ( yyval.p == 0 ) { if (templp->parameters_in_progress) error("TX for%n -- did you misdeclare aY?",yypvt[-0].pn); else error("TX for %n",yypvt[-0].pn); error('i', "cannot recover from previous error" ); } 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 111: # line 1502 "gram.y" { /* don't place the template on the instantiation list if it is * a friend declaration or a foward declaration of a specialization * friend class x and struct x; */ dont_instantiate = NEXTTOK()==SM; Pexpr e=0; if (dont_instantiate && in_friend == 0) { // *** this code could be used for forward declaration Ptempl t = templp->is_template(yypvt[-3].pn); // must have seen a definition of template class if (t == 0) { error("explicitC instance of a nonYC%n",yypvt[-3].pn); error('i', "cannot recover from previous error" ); } // make sure the explicit arguments are ok e = expr_unlist(yypvt[-1].el); t->check_actual_args(e); // watch out for redefinition -- if exists, // use forward declaration or create instance pti = t->get_match(e,0,false); if ( pti ) { if (pti->get_class()->class_base == INSTANTIATED) error("ZC%n multiply instantiated",yypvt[-3].pn); } else pti = new templ_inst(e,t,yypvt[-4].t); pti->inst_formals = t->get_formals(); error('s',"forwardD of a specialized version ofY%n",yypvt[-3].pn); error('C',"\tclass %n",pti->get_tname()); error('c'," -- did you mean a general forward declaration of theY?\n"); error('C',"\tif so, use: template class %n;\n",yypvt[-3].pn); } if (!e) { e = expr_unlist(yypvt[-1].el); } Pname p = parametrized_typename(yypvt[-3].pn, e, in_friend); dont_instantiate = 0; yyval.pb = (Pbase)p->tp; check_tag(); } break; case 112: # line 1549 "gram.y" { goto aggrcheck; } break; case 115: # line 1559 "gram.y" { yyval.pbc = yypvt[-0].pbc; } break; case 116: # line 1560 "gram.y" { yyval.pbc = 0; } break; case 118: # line 1565 "gram.y" { if (yypvt[-0].pbc) { yyval.pbc = yypvt[-0].pbc; yyval.pbc->next = yypvt[-2].pbc; } } break; case 119: # line 1568 "gram.y" { yyval.pbc = dobase(0,yypvt[-0].pn); } break; case 120: # line 1569 "gram.y" { yyval.pbc = dobase(yypvt[-1].t,yypvt[-0].pn); } break; case 121: # line 1570 "gram.y" { yyval.pbc = dobase(0,yypvt[-0].pn,yypvt[-1].t); } break; case 122: # line 1571 "gram.y" { yyval.pbc = dobase(yypvt[-2].t,yypvt[-0].pn,yypvt[-1].t); } break; case 123: # line 1572 "gram.y" { yyval.pbc = dobase(yypvt[-1].t,yypvt[-0].pn,yypvt[-2].t); } break; case 124: # line 1576 "gram.y" { Pname n = start_cl(yypvt[-1].t,0,0); PUSH_CLASS_SCOPE(n);//SYM ccl->k_tbl = Ctbl;//SYM yyval.p = Pbase(n->tp); parsing_class_members = 1; //SYM -- tn stuff removed in_class_decl++; SAVE_STATE(); } break; case 125: # line 1588 "gram.y" { Pname n = start_cl(yypvt[-3].t,yypvt[-2].pn,yypvt[-1].pbc); PUSH_CLASS_SCOPE(n);//SYM ccl->k_tbl = Ctbl;//SYM yyval.p = Pbase(n->tp); parsing_class_members = 1; //SYM -- tn stuff removed in_class_decl++; SAVE_STATE(); } break; case 126: # line 1599 "gram.y" { // LC increments bl_level by 1 if ( bl_level > 1 ) error('s', "specializedY%n not at global scope",yypvt[-5].pn); explicit_template_definition = 1; Ptempl t = templp->is_template(yypvt[-5].pn); // must have seen a definition of template class if (t == 0 || !t->defined) { error("YC%n must be defined prior to an explicitC instance",yypvt[-5].pn); error('i', "cannot recover from previous error" ); } // make sure the explicit arguments are ok Pexpr e = expr_unlist(yypvt[-3].el); t->check_actual_args(e); // watch out for redefinition -- if exists, // use forward declaration or create instance pti = t->get_match(e,0,false); if ( pti ) { if (pti->get_class()->class_base == INSTANTIATED) error("ZC%n multiply instantiated",yypvt[-5].pn); } else pti = new templ_inst(e,t,yypvt[-6].t); Pname n = start_cl(yypvt[-6].t,pti->get_tname(),yypvt[-1].pbc); Pbase(n->tp)->b_name->n_redefined = 1; PUSH_CLASS_SCOPE(n);//SYM ccl->k_tbl = Ctbl;//SYM yyval.p = Pbase(n->tp); parsing_class_members = 1; in_class_decl++; SAVE_STATE(); } break; case 127: # line 1636 "gram.y" { yyval.p = yypvt[-0].pn; } break; case 128: # line 1637 "gram.y" { yyval.p=yypvt[-0].p; } break; case 129: # line 1640 "gram.y" { yyval.p = yypvt[-0].pn; } break; case 130: # line 1641 "gram.y" { yyval.p=yypvt[-0].p; } break; case 131: # line 1645 "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); } in_friend = 0; } break; case 132: # line 1654 "gram.y" { yyval.p = 0; } break; case 133: # line 1656 "gram.y" { // error('d', "ZizedTD must be atG, notC scope" ); if (must_be_friend) { error("non-friend ZizedTD must be atG, notC scope" ); error('i', "cannot recover from previous error" ); } templ_friends = new cons(templp->parsed_template,templ_friends); templp->parsed_template = 0; } break; case 135: # line 1669 "gram.y" { fct_friend1: if (in_friend && yypvt[-1].pn && yypvt[-1].pn->n_qualifier && yypvt[-1].pn->n_qualifier->n_template_arg != template_type_formal) UNSET_SCOPE(); } break; case 136: # line 1678 "gram.y" { goto fct_friend1; } break; case 137: # line 1682 "gram.y" { fct_friend2: if (in_friend && yypvt[-0].pn && yypvt[-0].pn->n_qualifier && yypvt[-0].pn->n_qualifier->n_template_arg != template_type_formal) UNSET_SCOPE(); } break; case 138: # line 1691 "gram.y" { goto fct_friend2; } break; case 140: # line 1696 "gram.y" { yyval.p = new name; yyval.pn->base = yypvt[-1].t; } break; case 141: # line 1700 "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; if ( yypvt[-2].pn && yypvt[-2].pn->n_template_arg != template_type_formal ) UNSET_SCOPE();//SYM } break; case 142: # line 1730 "gram.y" { yyval.p = yypvt[-0].pn; } break; case 143: # line 1732 "gram.y" { yyval.p = Ncopy(yypvt[-0].pn); yyval.pn->n_oper = DTOR; } break; case 144: # line 1736 "gram.y" { yyval.p = new name(oper_name(yypvt[-0].t)); yyval.pn->n_oper = yypvt[-0].t; } break; case 145: # line 1740 "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 160: # line 1764 "gram.y" { yyval.t = CALL; } break; case 161: # line 1765 "gram.y" { yyval.t = DEREF; } break; case 167: # line 1771 "gram.y" { yyval.t = NEW; --in_new; } break; case 168: # line 1772 "gram.y" { yyval.t = DELETE; } break; case 169: # line 1773 "gram.y" { yyval.t = REF; } break; case 170: # line 1774 "gram.y" { yyval.t = CM; } break; case 171: # line 1775 "gram.y" { yyval.t = REFMUL; if (yypvt[-0].t == DOT) error(".* cannot be overloaded"); } break; case 172: # line 1780 "gram.y" { yyval.pn = SET_SCOPE(yypvt[-0].pn); } break; case 173: # line 1784 "gram.y" { if ( yypvt[-0].pn != sta_name ) { Pname n = yypvt[-0].pn; char *str = 0, *str2 = 0, *s = n->string; if (n->n_template_arg != template_type_formal) { n = n->tp->is_cl_obj(); if ( n ) str = s = get_classname(n->string); } if ( n && NEXTTOK() == TNAME && strcmp(s,str2=get_classname(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; } if ( str ) delete [] str; if ( str2 ) delete [] str2; } yyval.pn = yypvt[-0].pn; } break; case 174: # line 1805 "gram.y" {//SYM yyval.pn = yypvt[-0].pn; if ( yypvt[-0].pn == sta_name ) { error("scope qualifier syntax"); } else { // error('d',"tn_list: tn_list tscope: pn2: %s", yypvt[-0].pn->string); Pname cn = yypvt[-0].pn; char *str = 0, *str2 = 0, *s = cn->string; if (cn->n_template_arg != template_type_formal){ cn = yypvt[-0].pn->tp->is_cl_obj(); if (cn) str = s = get_classname(cn->string); } if ( cn && NEXTTOK() == TNAME && strcmp(s,str2=get_classname(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; } if ( str ) delete [] str; if ( str2 ) delete [] str2; if ( yypvt[-1].pn != sta_name && yypvt[-1].pn->n_template_arg != template_type_formal){ Pname cx = yypvt[-1].pn->tp->is_cl_obj(); if ( cx ) // cx::cn:: if ( check_if_base(Pclass(cx->tp),Pclass(cn->tp)) ) error("%n ::%n :: --%n not aM of%n",cx,cn,cn,cx); } } } break; case 175: # line 1839 "gram.y" { yyval.pn = yypvt[-0].pn; if (in_typedef && in_typedef->base == 0) in_typedef->defined = TNAME_SEEN; //xxx qualifier currently ignored... // yyval.pn = Ncopy( yypvt[-0].pn ); // yyval.pn->n_oper = TNAME; // yyval.pn->n_qualifier = yypvt[-1].pn; } break; case 176: # line 1849 "gram.y" { yyval.pn = yypvt[-0].pn; if (in_typedef && in_typedef->base == 0) in_typedef->defined = TNAME_SEEN; // yyval.pn = Ncopy( yypvt[-0].pn ); // yyval.pn->n_oper = TNAME; } break; case 177: # line 1859 "gram.y" { yyval.i = 0; } break; case 178: # line 1861 "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 179: # line 1884 "gram.y" { yyval.i = yypvt[-4].i; } break; case 180: # line 1887 "gram.y" { yyval.pl = 0; } break; case 181: # line 1889 "gram.y" { yyval.pl = 0; } break; case 182: # line 1893 "gram.y" { Freturns(yypvt[-0].p) = yypvt[-1].pn->tp; yypvt[-1].pn->tp = yypvt[-0].pt; } break; case 183: # line 1897 "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 184: # line 1902 "gram.y" { Pname n = yypvt[-1].pn; yyval.p = Ncopy(n); //??? what if tname is qualified ??? //SYM -- change -- do not if ctor def... if ( !in_typedef && (ccl==0 || 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 185: # line 1918 "gram.y" { yypvt[-3].pn->tp = new fct(yypvt[-3].pn->tp,yypvt[-1].pn,1); in_arg_list = 0; //SYM end_al(yypvt[-2].pl,0); POP_SCOPE();//SYM //RESTORE_STATE(); } break; case 186: # line 1926 "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; //SYM -- insert in table if not done elsewhere... if ( yypvt[-2].pn->n_oper != TNAME && !in_typedef ) { insert_name(yypvt[-2].pn,Ctbl); } yyval.p = yypvt[-2].pn; if (DECL_TYPE == -1) DECL_TYPE = 0; } break; case 187: # line 1939 "gram.y" { Pptr p = new ptr( RPTR, 0 ); Ptyp(p) = new basetype(TYPE,yypvt[-5].pn); Freturns( yypvt[-0].p ) = Ptype(p); yypvt[-2].pn->tp = yypvt[-0].pt; //SYM -- insert in table if not done elsewhere... if ( yypvt[-2].pn->n_oper != TNAME && !in_typedef ) { insert_name(yypvt[-2].pn,Ctbl); } yyval.p = yypvt[-2].pn; if (DECL_TYPE == -1) DECL_TYPE = 0; } break; case 188: # line 1952 "gram.y" { Pname n = yypvt[-3].pn; yyval.p = Ncopy(yypvt[-3].pn); //??? what about qualified tname? //SYM -- change -- do not if ctor def... //XXXXX defer until name::normalize()? if ( !in_typedef && (ccl==0 || strcmp(n->string,ccl->string)) ) n->hide(); yyval.pn->n_oper = TNAME; yyval.pn->tp = new fct(0,yypvt[-1].pn,1); } break; case 189: # line 1964 "gram.y" { /* function with no argument */ Pname n = yypvt[-3].pn; yyval.p = Ncopy(yypvt[-3].pn); //SYM -- change -- do not if ctor def... if ( !in_typedef && (ccl==0 || strcmp(n->string,ccl->string)) ) n->hide(); yyval.pn->n_oper = TNAME; yyval.pn->tp = new fct(0,0,1); Pfct(yyval.pn->tp)->f_const = (yypvt[-0].i & 1); } break; case 190: # line 1976 "gram.y" { memptrdcl(yypvt[-3].pn,yypvt[-5].pn,yypvt[-0].pt,yypvt[-2].pn); yyval.p = yypvt[-2].p; } break; case 191: # line 1980 "gram.y" {//SYM -- insert in table if appropriate... //SYM n_oper == TNAME => tname already hidden //SYM other !=0 values of n_oper => op or dtor //SYM -- enter non-oper names as well as TNAMEs //SYM in parsing table to handle "1.5 namespace" //SYM in all scopes, since dcl does not build //SYM the complete table until after functions //SYM / classdefs are parsed. //SYM friends are processed in norm.c //SYM to handle 'friend x;' etc if ( yypvt[-0].pn->n_oper == 0 && !in_typedef && !in_friend ) { //SYM do not hide ctor name... if ( ccl==0 || parsing_class_members==0 || strcmp(ccl->string,yypvt[-0].pn->string)) { Pname n = new name; *n = *yypvt[-0].pn; insert_name(n,Ctbl); } } } break; case 192: # line 2001 "gram.y" { yyval.p = Ncopy(yypvt[-0].pn); //yyval.pn->n_qualifier = yypvt[-2].pn; error("`.' used for qualification; please use `::'"); } break; case 193: # line 2006 "gram.y" { yyval.p = yypvt[-0].p; //SYM if ( yypvt[-1].pn != sta_name ) { //SYM set_scope(yypvt[-1].pn); if ( yypvt[-1].pn == sta_name && yyval.pn->n_oper==DTOR ) error("bad syntax for destructor ::%n",yyval.pn); yyval.pn->n_qualifier = yypvt[-1].pn; //SYM } } break; case 194: # line 2016 "gram.y" { yyval.p = Ncopy(yypvt[-0].pn); //yyval.pn->n_qualifier = yypvt[-3].pn;//SYM yypvt[-2].pn; error("`.' used for qualification; please use `::'"); error("non-type qualifier%n",yypvt[-2].pn); //if ( yypvt[-3].pn != sta_name ) { //SYM set_scope(yypvt[-3].pn); // yypvt[-2].pn->n_qualifier = yypvt[-3].pn; //} } break; case 195: # line 2026 "gram.y" { Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp; yypvt[-0].pn->tp = yypvt[-1].pt; yyval.p = yypvt[-0].p; } break; case 196: # line 2031 "gram.y" { yyval.p = Ncopy(yypvt[-0].pn); //??? what about qualified tnames? yyval.pn->n_oper = TNAME; // cannot evaluate at this point: defer until data_dcl if ( !in_typedef ) yypvt[-0].pn->hide();//SYM else in_tag = yypvt[-0].pn;//SYM??? yyval.pn->tp = yypvt[-1].pt; } break; case 197: # line 2040 "gram.y" { yyval.p = Ncopy(yypvt[-1].pn); //??? what about qualified tnames? yyval.pn->n_oper = TNAME; if ( !in_typedef ) yypvt[-1].pn->hide();//SYM else in_tag = yypvt[-1].pn;//SYM??? yyval.pn->tp = yypvt[-0].pt; } break; case 198: # line 2048 "gram.y" { Vtype(yypvt[-0].p) = yypvt[-1].pn->tp; yypvt[-1].pn->tp = yypvt[-0].pt; } break; case 199: # line 2065 "gram.y" { yyval.p = yypvt[-1].p; in_arg_list = 0; hoist_al();//SYM end_al(yypvt[-2].pl,0); //RESTORE_STATE(); } break; case 200: # line 2074 "gram.y" {//SYM -- insert in table if not done elsewhere... if ( yypvt[-0].pn->n_oper != TNAME ) { Pname n = new name; *n = *yypvt[-0].pn; insert_name(n,Ctbl); } yyval.p = yypvt[-0].pn; } break; case 201: # line 2082 "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 202: # line 2088 "gram.y" { yyval.p = new name; NOT_EXPECT_ID(); } break; case 203: # line 2093 "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 2098 "gram.y" { Vtype(yypvt[-0].p) = yypvt[-1].pn->tp; yypvt[-1].pn->tp = (Ptype)yypvt[-0].p; } break; case 205: # line 2102 "gram.y" { Freturns(yypvt[-0].p) = yypvt[-1].pn->tp; yypvt[-1].pn->tp = (Ptype)yypvt[-0].p; } break; case 206: # line 2118 "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; hoist_al();//SYM end_al(yypvt[-2].pl,0); //RESTORE_STATE(); } break; case 207: # line 2128 "gram.y" { yyval.p = new name; } break; case 208: # line 2130 "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 209: # line 2136 "gram.y" { Vtype(yypvt[-0].p) = yypvt[-1].pn->tp; yypvt[-1].pn->tp = (Ptype)yypvt[-0].p; } break; case 210: # line 2141 "gram.y" { yyval.p = new name; } break; case 211: # line 2143 "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 212: # line 2149 "gram.y" { Vtype(yypvt[-0].p) = yypvt[-1].pn->tp; yypvt[-1].pn->tp = (Ptype)yypvt[-0].p; } break; case 213: # line 2153 "gram.y" { Freturns(yypvt[-0].p) = yypvt[-2].pn->tp; yypvt[-2].pn->tp = yypvt[-0].pt; yyval.p = yypvt[-2].p; } break; case 214: # line 2158 "gram.y" { Vtype(yypvt[-0].p) = yypvt[-2].pn->tp; yypvt[-2].pn->tp = yypvt[-0].pt; yyval.p = yypvt[-2].p; } break; case 215: # line 2165 "gram.y" { yyval.p = new name; } break; case 216: # line 2167 "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 217: # line 2177 "gram.y" { yyval.p = 0; } break; case 218: # line 2181 "gram.y" { error( "ZizedTD must be atG, not local scope" ); error('i', "cannot recover from previous error" ); } break; case 219: # line 2186 "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 220: # line 2197 "gram.y" { yyval.p = yypvt[-0].p; if (yypvt[-0].p) stmt_seen = 1; } break; case 221: # line 2204 "gram.y" { yyval.p = 0; check_decl(); } break; case 222: # line 2211 "gram.y" { yyval.p = yypvt[-1].p; /* if ($$ == dummy) error("empty condition");*/ stmt_seen = 1; } break; case 223: # line 2218 "gram.y" { PUSH_BLOCK_SCOPE();//SYM cd_vec[cdi] = cd; stmt_vec[cdi] = stmt_seen; ++cdi; cd = 0; stmt_seen = 0; //SYM -- tn stuff removed } break; case 224: # line 2227 "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); //SYM -- tn stuff removed cd = cd_vec[--cdi]; stmt_seen = stmt_vec[cdi]; if (cdi < 0) error('i',"block level(%d)",cdi); NOT_EXPECT_ID(); yyval.ps->k_tbl = Ctbl;//SYM POP_SCOPE();//SYM } break; case 225: # line 2239 "gram.y" { yyval.p = new block(yypvt[-1].l,0,0,yypvt[-0].l); NOT_EXPECT_ID(); if ( Ctbl->k_id == ARG ) POP_SCOPE();//SYM } break; case 226: # line 2243 "gram.y" { yyval.p = new block(yypvt[-2].l,0,0,yypvt[-0].l); NOT_EXPECT_ID(); if ( Ctbl->k_id == ARG ) POP_SCOPE();//SYM } break; case 227: # line 2249 "gram.y" { yyval.p = new estmt(SM,curloc,yypvt[-0].pe,0); } break; case 228: # line 2251 "gram.y" { yyval.p = new stmt(BREAK,yypvt[-0].l,0); } break; case 229: # line 2253 "gram.y" { yyval.p = new stmt(CONTINUE,yypvt[-0].l,0); } break; case 230: # line 2255 "gram.y" { yyval.p = new lstmt(GOTO,yypvt[-1].l,yypvt[-0].pn,0); } break; case 231: # line 2256 "gram.y" { stmt_seen=1; } break; case 232: # line 2257 "gram.y" { yyval.p = new estmt(DO,yypvt[-4].l,yypvt[-0].pe,yypvt[-2].ps); } break; case 233: # line 2259 "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 234: # line 2274 "gram.y" { if ( NEXTTOK() != SM ) { error("`;' missing afterS"); la_backup(yychar,yylval); yychar = SM; } } break; case 237: # line 2285 "gram.y" { yyval.p = new estmt(SM,curloc,dummy,0); } break; case 238: # line 2287 "gram.y" { yyval.p = new estmt(RETURN,yypvt[-2].l,yypvt[-1].pe,0); } break; case 239: # line 2289 "gram.y" { error("local linkage specification"); yyval.p = yypvt[-0].pn; } break; case 240: # line 2294 "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; yyval.ps->k_tbl = Ctbl;//SYM } else { if (cd) cd->add_list(n); else cd = new nlist(n); yyval.p = 0; } } // if n else if (stmt_seen) { yyval.p = new block(curloc,0,0); yyval.ps->base = FDCL; } } break; case 241: # line 2316 "gram.y" { Pname n = yypvt[-0].pn; if (!templp->in_progress) 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 243: # line 2328 "gram.y" { yyval.p = new ifstmt(yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps,0); } break; case 244: # line 2330 "gram.y" { yyval.p = new ifstmt(yypvt[-4].l,yypvt[-3].pe,yypvt[-2].ps,yypvt[-0].ps); } break; case 245: # line 2332 "gram.y" { yyval.p = new estmt(WHILE,yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps); } break; case 246: # line 2333 "gram.y" { stmt_seen=1; } break; case 247: # line 2334 "gram.y" { yyval.p = new forstmt(yypvt[-8].l,yypvt[-5].ps,yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].ps); } break; case 248: # line 2335 "gram.y" { scd[++scdp] = cd;} break; case 249: # line 2336 "gram.y" { --scdp; yyval.p = new estmt(SWITCH,yypvt[-3].l,yypvt[-1].pe,yypvt[-0].ps); } break; case 250: # line 2340 "gram.y" { yyval.p = yypvt[-1].pn; stmt_seen=1; } break; case 251: # line 2341 "gram.y" { Pname n = yypvt[-1].pn; yyval.p = new lstmt(LABEL,n->where,n,yypvt[-0].ps); } break; case 252: # line 2344 "gram.y" { yyval.p = new name(yypvt[-1].pn->string); stmt_seen=1; } break; case 253: # line 2345 "gram.y" { Pname n = yypvt[-1].pn; yyval.p = new lstmt(LABEL,n->where,n,yypvt[-0].ps); } break; case 254: # line 2348 "gram.y" { stmt_seen=1; } break; case 255: # line 2349 "gram.y" { if (scdp>=0 && scd[scdp]!=cd && cd && decl_with_init(cd)) error("jump past initializer (did you forget a '{ }'?)"); 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 256: # line 2354 "gram.y" { stmt_seen=1; } break; case 257: # line 2355 "gram.y" { if (scdp>=0 && scd[scdp]!=cd && cd && yypvt[-1].pe && decl_with_init(cd)) error("jump past initializer (did you forget a '{ }'?)"); yyval.p = new stmt(DEFAULT,yypvt[-3].l,yypvt[-0].ps); } break; case 258: # line 2360 "gram.y" { yyval.p = new handler( yypvt[-1].ps, stmt_unlist(yypvt[-0].sl) ); } break; case 259: # line 2365 "gram.y" { yyval.sl = 0; } break; case 260: # line 2367 "gram.y" { if (yypvt[-0].ps) if (yypvt[-1].sl) yypvt[-1].sl->add(yypvt[-0].ps); else { yyval.sl = new slist(yypvt[-0].ps); stmt_seen = 1; } } break; case 261: # line 2379 "gram.y" { if ( yypvt[-1].pn ) { yypvt[-1].pn->n_list = yypvt[-0].ps->d; yypvt[-0].ps->d = yypvt[-1].pn; } yyval.ps = yypvt[-0].ps; } break; case 262: # line 2390 "gram.y" { in_arg_list = 0; yyval.pn = Ndata(yypvt[-2].p,yypvt[-1].pn); if ( yyval.pn->string == 0 ) yyval.pn = 0; else yyval.pn->base = CATCH; } break; case 263: # line 2398 "gram.y" { yyval.pn = 0; } break; case 264: # line 2405 "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 265: # line 2417 "gram.y" { yyval.el = new elist(new expr(ELIST,yypvt[-0].pe,0)); } break; case 266: # line 2419 "gram.y" { yypvt[-2].el->add(new expr(ELIST,yypvt[-0].pe,0)); } break; case 268: # line 2424 "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 269: # line 2441 "gram.y" { bbinop: yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break; case 270: # line 2442 "gram.y" { goto bbinop; } break; case 271: # line 2443 "gram.y" { goto bbinop; } break; case 272: # line 2444 "gram.y" { goto bbinop; } break; case 273: # line 2445 "gram.y" { goto bbinop; } break; case 274: # line 2446 "gram.y" { goto bbinop; } break; case 275: # line 2447 "gram.y" { goto bbinop; } break; case 276: # line 2448 "gram.y" { goto bbinop; } break; case 277: # line 2449 "gram.y" { goto bbinop; } break; case 278: # line 2450 "gram.y" { goto bbinop; } break; case 279: # line 2451 "gram.y" { goto bbinop; } break; case 280: # line 2452 "gram.y" { goto bbinop; } break; case 281: # line 2453 "gram.y" { goto bbinop; } break; case 282: # line 2454 "gram.y" { goto bbinop; } break; case 283: # line 2455 "gram.y" { goto bbinop; } break; case 284: # line 2456 "gram.y" { goto bbinop; } break; case 285: # line 2457 "gram.y" { goto bbinop; } break; case 286: # line 2459 "gram.y" { yyval.p = new qexpr(yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].pe); } break; case 287: # line 2461 "gram.y" { yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break; case 288: # line 2463 "gram.y" { yyval.p = new expr(DELETE,yypvt[-0].pe,0); } break; case 289: # line 2465 "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 290: # line 2473 "gram.y" { yyval.p = new expr(GDELETE,yypvt[-0].pe,0); } break; case 291: # line 2475 "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 293: # line 2484 "gram.y" { yyval.p = dummy; } break; case 294: # line 2488 "gram.y" { binop: yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break; case 295: # line 2489 "gram.y" { goto binop; } break; case 296: # line 2490 "gram.y" { goto binop; } break; case 297: # line 2491 "gram.y" { goto binop; } break; case 298: # line 2492 "gram.y" { goto binop; } break; case 299: # line 2493 "gram.y" { goto binop; } break; case 300: # line 2494 "gram.y" { goto binop; } break; case 301: # line 2495 "gram.y" { goto binop; } break; case 302: # line 2496 "gram.y" { goto binop; } break; case 303: # line 2497 "gram.y" { goto binop; } break; case 304: # line 2498 "gram.y" { goto binop; } break; case 305: # line 2499 "gram.y" { goto binop; } break; case 306: # line 2500 "gram.y" { goto binop; } break; case 307: # line 2501 "gram.y" { goto binop; } break; case 308: # line 2502 "gram.y" { goto binop; } break; case 309: # line 2503 "gram.y" { goto binop; } break; case 310: # line 2504 "gram.y" { goto binop; } break; case 311: # line 2506 "gram.y" { yyval.p = new qexpr(yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].pe); } break; case 312: # line 2508 "gram.y" { yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break; case 313: # line 2510 "gram.y" { yyval.p = new expr(DELETE,yypvt[-0].pe,0); } break; case 314: # line 2512 "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 315: # line 2520 "gram.y" { yyval.p = new expr(GDELETE,yypvt[-0].pe,0); } break; case 316: # line 2522 "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 317: # line 2529 "gram.y" { init_seen = 0; } break; case 318: # line 2533 "gram.y" { yyval.p = dummy; } break; case 319: # line 2535 "gram.y" { yyval.p = dummy; } break; case 320: # line 2538 "gram.y" { goto new1; } break; case 321: # line 2540 "gram.y" { new1: Ptype t = yypvt[-0].pn->tp; yyval.p = new texpr(NEW,t,0); --in_new; } break; case 322: # line 2545 "gram.y" { goto new3; } break; case 323: # line 2547 "gram.y" { new3: Ptype t = yypvt[-0].pn->tp; yyval.p = new texpr(GNEW,t,0); --in_new; } break; case 324: # line 2553 "gram.y" { yyval.p = new expr(yypvt[-0].t,yypvt[-1].pe,0); } break; case 325: # line 2555 "gram.y" { yyval.p = new texpr(CAST,yypvt[-1].pn->tp,yypvt[-0].pe); } break; case 326: # line 2559 "gram.y" { yyval.p = new expr(DEREF,yypvt[-0].pe,0); } break; case 327: # line 2561 "gram.y" { yyval.p = new expr(ADDROF,0,yypvt[-0].pe); } break; case 328: # line 2563 "gram.y" { yyval.p = new expr(UMINUS,0,yypvt[-0].pe); } break; case 329: # line 2565 "gram.y" { yyval.p = new expr(UPLUS,0,yypvt[-0].pe); } break; case 330: # line 2567 "gram.y" { yyval.p = new expr(NOT,0,yypvt[-0].pe); } break; case 331: # line 2569 "gram.y" { yyval.p = new expr(COMPL,0,yypvt[-0].pe); } break; case 332: # line 2571 "gram.y" { yyval.p = new expr(yypvt[-1].t,0,yypvt[-0].pe); } break; case 333: # line 2573 "gram.y" { yyval.p = new texpr(SIZEOF,0,yypvt[-0].pe); --in_sizeof; } break; case 334: # line 2578 "gram.y" { yyval.p = new texpr(SIZEOF,yypvt[-0].pn->tp,0); --in_sizeof; } break; case 335: # line 2583 "gram.y" { yyval.p = new expr(DEREF,yypvt[-3].pe,yypvt[-1].pe); } break; case 336: # line 2585 "gram.y" { yyval.p = new ref(REF,yypvt[-2].pe,yypvt[-0].pn); } break; case 337: # line 2587 "gram.y" { yypvt[-0].pn->n_qualifier = yypvt[-1].pn; yyval.p = new ref(REF,yypvt[-3].pe,yypvt[-0].pn); } break; case 338: # line 2592 "gram.y" { yypvt[-0].pn = new name(yypvt[-0].pn->string); yypvt[-0].pn->n_qualifier = yypvt[-1].pn; yyval.p = new ref(REF,yypvt[-3].pe,yypvt[-0].pn); } break; case 339: # line 2597 "gram.y" { yyval.p = new ref(REF,yypvt[-2].pe,yypvt[-0].pn); } break; case 340: # line 2599 "gram.y" { // kluge to handle parameterized qualifiers, since // they are not included in MEMQ yypvt[-0].pn->n_qualifier = yypvt[-1].pn; yyval.p = new ref(REF,yypvt[-3].pe,yypvt[-0].pn); if ( yypvt[-1].pn && yypvt[-1].pn->n_template_arg != template_type_formal ) UNSET_SCOPE(); } break; case 341: # line 2607 "gram.y" { // kluge to handle parameterized qualifiers, since // they are not included in MEMQ yypvt[-0].pn = new name(yypvt[-0].pn->string); yypvt[-0].pn->n_qualifier = yypvt[-1].pn; yyval.p = new ref(REF,yypvt[-3].pe,yypvt[-0].pn); if ( yypvt[-1].pn && yypvt[-1].pn->n_template_arg != template_type_formal ) UNSET_SCOPE(); } break; case 342: # line 2616 "gram.y" { yyval.p = new ref(DOT,yypvt[-2].pe,yypvt[-0].pn); } break; case 343: # line 2618 "gram.y" { yypvt[-0].pn->n_qualifier = yypvt[-1].pn; yyval.p = new ref(DOT,yypvt[-3].pe,yypvt[-0].pn); } break; case 344: # line 2623 "gram.y" { yypvt[-0].pn = new name(yypvt[-0].pn->string); yypvt[-0].pn->n_qualifier = yypvt[-1].pn; yyval.p = new ref(DOT,yypvt[-3].pe,yypvt[-0].pn); } break; case 345: # line 2628 "gram.y" { yyval.p = new ref(DOT,yypvt[-2].pe,yypvt[-0].pn); } break; case 346: # line 2630 "gram.y" { // kluge to handle parameterized qualifiers, since // they are not included in MEMQ yypvt[-0].pn->n_qualifier = yypvt[-1].pn; yyval.p = new ref(DOT,yypvt[-3].pe,yypvt[-0].pn); if ( yypvt[-1].pn && yypvt[-1].pn->n_template_arg != template_type_formal ) UNSET_SCOPE(); } break; case 347: # line 2638 "gram.y" { // kluge to handle parameterized qualifiers, since // they are not included in MEMQ yypvt[-0].pn = new name(yypvt[-0].pn->string); yypvt[-0].pn->n_qualifier = yypvt[-1].pn; yyval.p = new ref(DOT,yypvt[-3].pe,yypvt[-0].pn); if ( yypvt[-1].pn && yypvt[-1].pn->n_template_arg != template_type_formal ) UNSET_SCOPE(); } break; case 349: # line 2648 "gram.y" { // set scope to parse 'C::operator N' where N is in C // still does not handle 'p->operator N' // (requires either fancier structures or // on-the-fly type checking) yyval.p = Ncopy(yypvt[-0].pn); yyval.pn->n_qualifier = yypvt[-1].pn; if ( yypvt[-1].pn && yypvt[-1].pn->n_template_arg != template_type_formal ) UNSET_SCOPE(); } break; case 350: # line 2658 "gram.y" { yyval.p = dummy_dtor(); yyval.pn->n_qualifier = yypvt[-2].pn; yyval.pn->n_dtag = yypvt[-0].pn; } break; case 351: # line 2664 "gram.y" { yyval.p = dummy_dtor( yypvt[-0].t, yypvt[-0].t ); yyval.pn->n_qualifier = yypvt[-2].pn; } break; case 352: # line 2669 "gram.y" { if ( init_seen ) error( "syntax error:IrL illegal within ()"); } break; case 353: # line 2675 "gram.y" { if ( yypvt[-1].p == dummy ) error("syntax error: nullE"); yyval.p = yypvt[-1].p; } break; case 354: # line 2681 "gram.y" { yyval.p = zero; } break; case 355: # line 2683 "gram.y" { yyval.p = new expr(ICON,0,0); yyval.pe->string = copy_if_need_be(yypvt[-0].s); } break; case 356: # line 2687 "gram.y" { yyval.p = new expr(FCON,0,0); yyval.pe->string = copy_if_need_be(yypvt[-0].s); } break; case 357: # line 2691 "gram.y" { yyval.p = new expr(STRING,0,0); yyval.pe->string = copy_if_need_be(yypvt[-0].s); } break; case 358: # line 2695 "gram.y" { yyval.p = new expr(CCON,0,0); yyval.pe->string = copy_if_need_be(yypvt[-0].s); } break; case 359: # line 2699 "gram.y" { yyval.p = new expr(THIS,0,0); } break; case 360: # line 2703 "gram.y" { yyval.p = dummy_dtor(); yyval.pn->n_dtag = yypvt[-0].pn; // checked later } break; case 361: # line 2708 "gram.y" { yyval.p = dummy_dtor(); yyval.pn->n_qualifier = yypvt[-2].pn; // checked later yyval.pn->n_dtag = yypvt[-0].pn; // checked later } break; case 362: # line 2714 "gram.y" { yyval.p = dummy_dtor(yypvt[-3].t,yypvt[-0].t); } break; case 363: # line 2716 "gram.y" { yyval.p = dummy_dtor(yypvt[-0].t,yypvt[-0].t); } break; case 364: # line 2718 "gram.y" { yyval.p = dummy_dtor( yypvt[-3].t, yypvt[-3].t ); yyval.pn->n_dtag = yypvt[-0].pn; } break; case 365: # line 2723 "gram.y" { yyval.p = dummy_dtor( yypvt[-0].t, yypvt[-0].t ); yyval.pn->n_qualifier = yypvt[-2].pn; } break; case 366: # line 2728 "gram.y" { // kluge to parse parameterized qualifiers after ./-> yyval.p = dummy_dtor(); yyval.pn->n_qualifier = yypvt[-2].pn; yyval.pn->n_dtag = yypvt[-0].pn; } break; case 367: # line 2734 "gram.y" { // kluge to parse parameterized qualifiers after ./-> yyval.p = dummy_dtor( yypvt[-0].t, yypvt[-0].t ); yyval.pn->n_qualifier = yypvt[-2].pn; } break; case 368: # line 2741 "gram.y" { yyval.p = new texpr(VALUE,tok_to_type(yypvt[-3].t),yypvt[-1].pe); } break; case 369: # line 2746 "gram.y" { yyval.p = new texpr(VALUE,yypvt[-3].pn->tp,yypvt[-1].pe); if (yypvt[-3].pn->is_template_arg() && yypvt[-3].pn->tp->base == ANY) { yyval.pe->tp2 = new basetype(TYPE,yypvt[-3].pn); } } break; case 370: # line 2752 "gram.y" { goto new2; } break; case 371: # line 2754 "gram.y" { new2: Ptype t = yypvt[-0].pn->tp; yyval.p=new texpr(NEW,t,0); yyval.pe->e2 = yypvt[-2].pe; --in_new; } break; case 372: # line 2760 "gram.y" { goto new4; } break; case 373: # line 2762 "gram.y" { new4: Ptype t = yypvt[-0].pn->tp; yyval.p = new texpr(GNEW,t,0); yyval.pe->e2 = yypvt[-2].pe; --in_new; } break; case 374: # line 2769 "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 375: # line 2781 "gram.y" { yyval.pn = parametrized_typename(yypvt[-3].pn,(expr_unlist(yypvt[-1].el))); } break; case 376: # line 2786 "gram.y" { yyval.pn = yypvt[-0].pn; } break; case 377: # line 2787 "gram.y" { yyval.pn = sta_name; } break; case 378: # line 2788 "gram.y" { yyval.pn = yypvt[-1].pn; } break; case 379: # line 2793 "gram.y" { if ( in_arg_list && !in_binit_list ) { Pktab tb = Ctbl; for (; tb && tb->k_id==ARG; tb=tb->k_next) { if ( tb->look(yypvt[-0].pn->string,0) ) { error("illegalR toA%n in defaultA",yypvt[-0].pn); yypvt[-0].pe = dummy; break; } } } yyval.p = yypvt[-0].pn; } break; case 380: # line 2807 "gram.y" { yyval.p = new name(oper_name(yypvt[-0].t)); yyval.pn->n_oper = yypvt[-0].t; } break; case 381: # line 2811 "gram.y" { yyval.p = yypvt[-0].p; sig_name(yyval.pn); } break; case 382: # line 2820 "gram.y" { yyval.p = Ncast(yypvt[-2].p,yypvt[-1].pn); } break; case 383: # line 2825 "gram.y" { check_cast(); } break; case 384: # line 2829 "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 385: # line 2848 "gram.y" { yyval.p = new basetype(TYPE,yypvt[-0].pn); } break; case 386: # line 2850 "gram.y" { if ( DECL_TYPE != -1 ) { switch (yypvt[-1].pb->base) { case COBJ: case EOBJ: { Pbase bt; 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 387: # line 2867 "gram.y" { if ( DECL_TYPE != -1 ) yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn); DECL_TYPE = 0; } break; case 388: # line 2874 "gram.y" { yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break; case 389: # line 2877 "gram.y" { yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break; case 390: # line 2880 "gram.y" { // ENTER_NAME(yypvt[-0].pn); yyval.p = Ndata(yypvt[-1].p,yypvt[-0].pn); } break; case 391: # line 2885 "gram.y" { // ENTER_NAME(yypvt[-1].pn); } break; case 392: # line 2889 "gram.y" { yyval.p = Ndata(yypvt[-4].p,yypvt[-3].pn); yyval.pn->n_initializer = yypvt[-0].pe; } break; case 393: # line 2896 "gram.y" { PUSH_ARG_SCOPE();//SYM //SAVE_STATE(); in_arg_list=1; check_decl(); yyval.pl = 0; //SYM -- tn stuff removed } break; case 394: # line 2906 "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); //SYM -- removed kluge POP_SCOPE();//SYM //RESTORE_STATE(); } break; case 395: # line 2918 "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 396: # line 2930 "gram.y" { if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); } break; case 398: # line 2936 "gram.y" { yyval.p = 0; } break; case 399: # line 2940 "gram.y" { yyval.t = 1; } break; case 400: # line 2942 "gram.y" { yyval.t = ELLIPSIS; } break; case 401: # line 2944 "gram.y" { yyval.t = ELLIPSIS; } break; case 402: # line 2948 "gram.y" { yyval.p = new ptr(PTR,0); EXPECT_ID(); } break; case 403: # line 2953 "gram.y" { yyval.p = new ptr(RPTR,0); EXPECT_ID(); } break; case 404: # line 2958 "gram.y" { yyval.p = doptr(PTR,yypvt[-0].t); } break; case 405: # line 2960 "gram.y" { switch ( yypvt[-0].t ) { case CONST: yypvt[-1].pp->b_const = 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 406: # line 2973 "gram.y" { yyval.p = doptr(RPTR,yypvt[-0].t); } break; case 407: # line 2975 "gram.y" { memptr_pn = yypvt[-1].pn; memptr_tok = 0; goto memptr1; } break; case 408: # line 2981 "gram.y" { memptr_pn = yypvt[-0].pn; memptr_tok = 0; memptr1: if (memptr_tok) yyval.p = doptr(PTR,memptr_tok); else yyval.p = new ptr(PTR,0); Pname n = memptr_pn; if (n->is_template_arg()==0) { if(n->tp->skiptypedefs()->base != COBJ) { yyval.pp->memof = 0; error("P toM of nonCT"); } else yyval.pp->memof = n->tp->skiptypedefs()->classtype(); } else { yyval.pp->memof = 0; yyval.pp->ptname = n; } EXPECT_ID(); } break; case 409: # line 3004 "gram.y" { memptr_pn = yypvt[-2].pn; memptr_tok = yypvt[-0].t; goto memptr1; } break; case 410: # line 3010 "gram.y" { memptr_pn = yypvt[-1].pn; memptr_tok = yypvt[-0].t; goto memptr1; } break; case 411: # line 3017 "gram.y" { yyval.p = new vec(0,yypvt[-1].pe!=dummy?yypvt[-1].pe:0 ); } break; case 412: # line 3018 "gram.y" { yyval.p = new vec(0,0); } break; } goto yystack; /* stack new state and value */ }