1*78bc99aaSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*78bc99aaSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*78bc99aaSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*78bc99aaSAndrew Rist * distributed with this work for additional information 6*78bc99aaSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*78bc99aaSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*78bc99aaSAndrew Rist * "License"); you may not use this file except in compliance 9*78bc99aaSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*78bc99aaSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*78bc99aaSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*78bc99aaSAndrew Rist * software distributed under the License is distributed on an 15*78bc99aaSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*78bc99aaSAndrew Rist * KIND, either express or implied. See the License for the 17*78bc99aaSAndrew Rist * specific language governing permissions and limitations 18*78bc99aaSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*78bc99aaSAndrew Rist *************************************************************/ 21cdf0e10cSrcweir 22cdf0e10cSrcweir #include <precomp.h> 23cdf0e10cSrcweir #include "pe_class.hxx" 24cdf0e10cSrcweir 25cdf0e10cSrcweir 26cdf0e10cSrcweir // NOT FULLY DECLARED SERVICES 27cdf0e10cSrcweir #include <cosv/tpl/tpltools.hxx> 28cdf0e10cSrcweir #include <ary/cpp/c_gate.hxx> 29cdf0e10cSrcweir #include <ary/cpp/c_class.hxx> 30cdf0e10cSrcweir #include <ary/cpp/c_namesp.hxx> 31cdf0e10cSrcweir #include <ary/cpp/cp_ce.hxx> 32cdf0e10cSrcweir #include <all_toks.hxx> 33cdf0e10cSrcweir #include "pe_base.hxx" 34cdf0e10cSrcweir #include "pe_defs.hxx" 35cdf0e10cSrcweir #include "pe_enum.hxx" 36cdf0e10cSrcweir #include "pe_tydef.hxx" 37cdf0e10cSrcweir #include "pe_vafu.hxx" 38cdf0e10cSrcweir #include "pe_ignor.hxx" 39cdf0e10cSrcweir 40cdf0e10cSrcweir 41cdf0e10cSrcweir namespace cpp { 42cdf0e10cSrcweir 43cdf0e10cSrcweir // using ary::Cid; 44cdf0e10cSrcweir 45cdf0e10cSrcweir PE_Class::PE_Class(Cpp_PE * i_pParent ) 46cdf0e10cSrcweir : Cpp_PE(i_pParent), 47cdf0e10cSrcweir pStati( new PeStatusArray<PE_Class> ), 48cdf0e10cSrcweir // pSpBase, 49cdf0e10cSrcweir // pSpTypedef, 50cdf0e10cSrcweir // pSpVarFunc, 51cdf0e10cSrcweir // pSpIgnore, 52cdf0e10cSrcweir // pSpuBase, 53cdf0e10cSrcweir // pSpuTypedef, 54cdf0e10cSrcweir // pSpuVarFunc, 55cdf0e10cSrcweir // pSpuUsing, 56cdf0e10cSrcweir // pSpuIgnoreFailure, 57cdf0e10cSrcweir // sLocalName, 58cdf0e10cSrcweir eClassKey(ary::cpp::CK_class), 59cdf0e10cSrcweir pCurObject(0), 60cdf0e10cSrcweir // aBases, 61cdf0e10cSrcweir eResult_KindOf(is_declaration) 62cdf0e10cSrcweir { 63cdf0e10cSrcweir Setup_StatusFunctions(); 64cdf0e10cSrcweir 65cdf0e10cSrcweir pSpBase = new SP_Base(*this); 66cdf0e10cSrcweir pSpTypedef = new SP_Typedef(*this); 67cdf0e10cSrcweir pSpVarFunc = new SP_VarFunc(*this); 68cdf0e10cSrcweir pSpIgnore = new SP_Ignore(*this); 69cdf0e10cSrcweir pSpDefs = new SP_Defines(*this); 70cdf0e10cSrcweir 71cdf0e10cSrcweir pSpuBase = new SPU_Base(*pSpBase, 0, &PE_Class::SpReturn_Base); 72cdf0e10cSrcweir pSpuTypedef = new SPU_Typedef(*pSpTypedef, 0, 0); 73cdf0e10cSrcweir pSpuVarFunc = new SPU_VarFunc(*pSpVarFunc, 0, 0); 74cdf0e10cSrcweir 75cdf0e10cSrcweir pSpuTemplate= new SPU_Ignore(*pSpIgnore, 0, 0); 76cdf0e10cSrcweir pSpuUsing = new SPU_Ignore(*pSpIgnore, 0, 0); 77cdf0e10cSrcweir pSpuIgnoreFailure 78cdf0e10cSrcweir = new SPU_Ignore(*pSpIgnore, 0, 0); 79cdf0e10cSrcweir pSpuDefs = new SPU_Defines(*pSpDefs, 0, 0); 80cdf0e10cSrcweir } 81cdf0e10cSrcweir 82cdf0e10cSrcweir 83cdf0e10cSrcweir PE_Class::~PE_Class() 84cdf0e10cSrcweir { 85cdf0e10cSrcweir } 86cdf0e10cSrcweir 87cdf0e10cSrcweir void 88cdf0e10cSrcweir PE_Class::Call_Handler( const cpp::Token & i_rTok ) 89cdf0e10cSrcweir { 90cdf0e10cSrcweir pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text()); 91cdf0e10cSrcweir } 92cdf0e10cSrcweir 93cdf0e10cSrcweir Cpp_PE * 94cdf0e10cSrcweir PE_Class::Handle_ChildFailure() 95cdf0e10cSrcweir { 96cdf0e10cSrcweir SetCurSPU(pSpuIgnoreFailure.Ptr()); 97cdf0e10cSrcweir return &pSpuIgnoreFailure->Child(); 98cdf0e10cSrcweir } 99cdf0e10cSrcweir 100cdf0e10cSrcweir void 101cdf0e10cSrcweir PE_Class::Setup_StatusFunctions() 102cdf0e10cSrcweir { 103cdf0e10cSrcweir typedef CallFunction<PE_Class>::F_Tok F_Tok; 104cdf0e10cSrcweir 105cdf0e10cSrcweir static F_Tok stateF_start[] = { &PE_Class::On_start_class, 106cdf0e10cSrcweir &PE_Class::On_start_struct, 107cdf0e10cSrcweir &PE_Class::On_start_union }; 108cdf0e10cSrcweir static INT16 stateT_start[] = { Tid_class, 109cdf0e10cSrcweir Tid_struct, 110cdf0e10cSrcweir Tid_union }; 111cdf0e10cSrcweir 112cdf0e10cSrcweir static F_Tok stateF_expectName[] = { &PE_Class::On_expectName_Identifier, 113cdf0e10cSrcweir &PE_Class::On_expectName_SwBracket_Left, 114cdf0e10cSrcweir &PE_Class::On_expectName_Colon 115cdf0e10cSrcweir }; 116cdf0e10cSrcweir static INT16 stateT_expectName[] = { Tid_Identifier, 117cdf0e10cSrcweir Tid_SwBracket_Left, 118cdf0e10cSrcweir Tid_Colon 119cdf0e10cSrcweir }; 120cdf0e10cSrcweir 121cdf0e10cSrcweir static F_Tok stateF_gotName[] = { &PE_Class::On_gotName_SwBracket_Left, 122cdf0e10cSrcweir &PE_Class::On_gotName_Semicolon, 123cdf0e10cSrcweir &PE_Class::On_gotName_Colon }; 124cdf0e10cSrcweir static INT16 stateT_gotName[] = { Tid_SwBracket_Left, 125cdf0e10cSrcweir Tid_Semicolon, 126cdf0e10cSrcweir Tid_Colon }; 127cdf0e10cSrcweir 128cdf0e10cSrcweir static F_Tok stateF_bodyStd[] = { &PE_Class::On_bodyStd_VarFunc, 129cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 130cdf0e10cSrcweir &PE_Class::On_bodyStd_ClassKey, 131cdf0e10cSrcweir &PE_Class::On_bodyStd_ClassKey, 132cdf0e10cSrcweir &PE_Class::On_bodyStd_ClassKey, 133cdf0e10cSrcweir 134cdf0e10cSrcweir &PE_Class::On_bodyStd_enum, 135cdf0e10cSrcweir &PE_Class::On_bodyStd_typedef, 136cdf0e10cSrcweir &PE_Class::On_bodyStd_public, 137cdf0e10cSrcweir &PE_Class::On_bodyStd_protected, 138cdf0e10cSrcweir &PE_Class::On_bodyStd_private, 139cdf0e10cSrcweir 140cdf0e10cSrcweir &PE_Class::On_bodyStd_template, 141cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 142cdf0e10cSrcweir &PE_Class::On_bodyStd_friend, 143cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 144cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 145cdf0e10cSrcweir 146cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 147cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 148cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 149cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 150cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 151cdf0e10cSrcweir 152cdf0e10cSrcweir &PE_Class::On_bodyStd_using, 153cdf0e10cSrcweir &PE_Class::On_bodyStd_SwBracket_Right, 154cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 155cdf0e10cSrcweir &PE_Class::On_bodyStd_DefineName, 156cdf0e10cSrcweir &PE_Class::On_bodyStd_MacroName, 157cdf0e10cSrcweir 158cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 159cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, 160cdf0e10cSrcweir &PE_Class::On_bodyStd_VarFunc, }; 161cdf0e10cSrcweir 162cdf0e10cSrcweir static INT16 stateT_bodyStd[] = { Tid_Identifier, 163cdf0e10cSrcweir Tid_operator, 164cdf0e10cSrcweir Tid_class, 165cdf0e10cSrcweir Tid_struct, 166cdf0e10cSrcweir Tid_union, 167cdf0e10cSrcweir 168cdf0e10cSrcweir Tid_enum, 169cdf0e10cSrcweir Tid_typedef, 170cdf0e10cSrcweir Tid_public, 171cdf0e10cSrcweir Tid_protected, 172cdf0e10cSrcweir Tid_private, 173cdf0e10cSrcweir 174cdf0e10cSrcweir Tid_template, 175cdf0e10cSrcweir Tid_virtual, 176cdf0e10cSrcweir Tid_friend, 177cdf0e10cSrcweir Tid_Tilde, 178cdf0e10cSrcweir Tid_const, 179cdf0e10cSrcweir 180cdf0e10cSrcweir Tid_volatile, 181cdf0e10cSrcweir Tid_static, 182cdf0e10cSrcweir Tid_mutable, 183cdf0e10cSrcweir Tid_inline, 184cdf0e10cSrcweir Tid_explicit, 185cdf0e10cSrcweir 186cdf0e10cSrcweir Tid_using, 187cdf0e10cSrcweir Tid_SwBracket_Right, 188cdf0e10cSrcweir Tid_DoubleColon, 189cdf0e10cSrcweir Tid_typename, 190cdf0e10cSrcweir Tid_DefineName, 191cdf0e10cSrcweir 192cdf0e10cSrcweir Tid_MacroName, 193cdf0e10cSrcweir Tid_BuiltInType, 194cdf0e10cSrcweir Tid_TypeSpecializer }; 195cdf0e10cSrcweir 196cdf0e10cSrcweir static F_Tok stateF_inProtection[] = { &PE_Class::On_inProtection_Colon }; 197cdf0e10cSrcweir static INT16 stateT_inProtection[] = { Tid_Colon }; 198cdf0e10cSrcweir 199cdf0e10cSrcweir static F_Tok stateF_afterDecl[] = { &PE_Class::On_afterDecl_Semicolon }; 200cdf0e10cSrcweir static INT16 stateT_afterDecl[] = { Tid_Semicolon }; 201cdf0e10cSrcweir 202cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Class, start, Hdl_SyntaxError); 203cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Class, expectName, Hdl_SyntaxError); 204cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Class, gotName, On_gotName_Return2Type); 205cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Class, bodyStd, Hdl_SyntaxError); 206cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Class, inProtection, Hdl_SyntaxError); 207cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Class, afterDecl, On_afterDecl_Return2Type); 208cdf0e10cSrcweir 209cdf0e10cSrcweir #if 0 210cdf0e10cSrcweir static F_Tok stateF_inFriend[] = { On_inFriend_class, 211cdf0e10cSrcweir On_inFriend_struct, 212cdf0e10cSrcweir On_inFriend_union }; 213cdf0e10cSrcweir // Default: On_inFriend_Function 214cdf0e10cSrcweir static INT16 stateT_inFriend[] = { Tid_class, 215cdf0e10cSrcweir Tid_struct, 216cdf0e10cSrcweir Tid_union }; 217cdf0e10cSrcweir #endif // 0 218cdf0e10cSrcweir } 219cdf0e10cSrcweir 220cdf0e10cSrcweir void 221cdf0e10cSrcweir PE_Class::InitData() 222cdf0e10cSrcweir { 223cdf0e10cSrcweir pStati->SetCur(start); 224cdf0e10cSrcweir sLocalName.clear(); 225cdf0e10cSrcweir eClassKey = ary::cpp::CK_class; 226cdf0e10cSrcweir pCurObject = 0; 227cdf0e10cSrcweir csv::erase_container(aBases); 228cdf0e10cSrcweir eResult_KindOf = is_declaration; 229cdf0e10cSrcweir } 230cdf0e10cSrcweir 231cdf0e10cSrcweir void 232cdf0e10cSrcweir PE_Class::TransferData() 233cdf0e10cSrcweir { 234cdf0e10cSrcweir pStati->SetCur(size_of_states); 235cdf0e10cSrcweir } 236cdf0e10cSrcweir 237cdf0e10cSrcweir void 238cdf0e10cSrcweir PE_Class::Hdl_SyntaxError( const char * i_sText) 239cdf0e10cSrcweir { 240cdf0e10cSrcweir if ( *i_sText == ';' ) 241cdf0e10cSrcweir { 242cdf0e10cSrcweir Cerr() << Env().CurFileName() << ", line " 243cdf0e10cSrcweir << Env().LineCount() 244cdf0e10cSrcweir << ": Sourcecode warning: ';' as a toplevel declaration is deprecated." 245cdf0e10cSrcweir << Endl(); 246cdf0e10cSrcweir SetTokenResult(done,stay); 247cdf0e10cSrcweir return; 248cdf0e10cSrcweir } 249cdf0e10cSrcweir 250cdf0e10cSrcweir StdHandlingOfSyntaxError(i_sText); 251cdf0e10cSrcweir } 252cdf0e10cSrcweir 253cdf0e10cSrcweir void 254cdf0e10cSrcweir PE_Class::Init_CurObject() 255cdf0e10cSrcweir { 256cdf0e10cSrcweir // KORR_FUTURE 257cdf0e10cSrcweir // This will have to be done before parsing base classes, because of 258cdf0e10cSrcweir // possible inline documentation for base classes. 259cdf0e10cSrcweir pCurObject = & Env().AryGate().Ces().Store_Class( Env().Context(), sLocalName, eClassKey ); 260cdf0e10cSrcweir 261cdf0e10cSrcweir for ( PE_Base::BaseList::const_iterator it = aBases.begin(); 262cdf0e10cSrcweir it != aBases.end(); 263cdf0e10cSrcweir ++it ) 264cdf0e10cSrcweir { 265cdf0e10cSrcweir pCurObject->Add_BaseClass( *it ); 266cdf0e10cSrcweir } // end for 267cdf0e10cSrcweir 268cdf0e10cSrcweir Dyn< StringVector > 269cdf0e10cSrcweir pTplParams( Env().Get_CurTemplateParameters() ); 270cdf0e10cSrcweir if ( pTplParams ) 271cdf0e10cSrcweir { 272cdf0e10cSrcweir for ( StringVector::const_iterator it = pTplParams->begin(); 273cdf0e10cSrcweir it != pTplParams->end(); 274cdf0e10cSrcweir ++it ) 275cdf0e10cSrcweir { 276cdf0e10cSrcweir pCurObject->Add_TemplateParameterType( *it, ary::cpp::Type_id(0) ); 277cdf0e10cSrcweir } // end for 278cdf0e10cSrcweir } 279cdf0e10cSrcweir } 280cdf0e10cSrcweir 281cdf0e10cSrcweir void 282cdf0e10cSrcweir PE_Class::SpReturn_Base() 283cdf0e10cSrcweir { 284cdf0e10cSrcweir aBases = pSpuBase->Child().Result_BaseIds(); 285cdf0e10cSrcweir pStati->SetCur(gotName); 286cdf0e10cSrcweir } 287cdf0e10cSrcweir 288cdf0e10cSrcweir void 289cdf0e10cSrcweir PE_Class::On_start_class( const char * ) 290cdf0e10cSrcweir { 291cdf0e10cSrcweir SetTokenResult(done, stay); 292cdf0e10cSrcweir pStati->SetCur(expectName); 293cdf0e10cSrcweir eClassKey = ary::cpp::CK_class; 294cdf0e10cSrcweir } 295cdf0e10cSrcweir 296cdf0e10cSrcweir void 297cdf0e10cSrcweir PE_Class::On_start_struct( const char * ) 298cdf0e10cSrcweir { 299cdf0e10cSrcweir SetTokenResult(done, stay); 300cdf0e10cSrcweir pStati->SetCur(expectName); 301cdf0e10cSrcweir eClassKey = ary::cpp::CK_struct; 302cdf0e10cSrcweir } 303cdf0e10cSrcweir 304cdf0e10cSrcweir void 305cdf0e10cSrcweir PE_Class::On_start_union( const char * ) 306cdf0e10cSrcweir { 307cdf0e10cSrcweir SetTokenResult(done, stay); 308cdf0e10cSrcweir pStati->SetCur(expectName); 309cdf0e10cSrcweir eClassKey = ary::cpp::CK_union; 310cdf0e10cSrcweir } 311cdf0e10cSrcweir 312cdf0e10cSrcweir void 313cdf0e10cSrcweir PE_Class::On_expectName_Identifier( const char * i_sText ) 314cdf0e10cSrcweir { 315cdf0e10cSrcweir SetTokenResult(done, stay); 316cdf0e10cSrcweir pStati->SetCur(gotName); 317cdf0e10cSrcweir sLocalName = i_sText; 318cdf0e10cSrcweir } 319cdf0e10cSrcweir 320cdf0e10cSrcweir void 321cdf0e10cSrcweir PE_Class::On_expectName_SwBracket_Left( const char * ) 322cdf0e10cSrcweir { 323cdf0e10cSrcweir SetTokenResult(done, stay); 324cdf0e10cSrcweir pStati->SetCur(bodyStd); 325cdf0e10cSrcweir 326cdf0e10cSrcweir sLocalName = ""; 327cdf0e10cSrcweir Init_CurObject(); 328cdf0e10cSrcweir sLocalName = pCurObject->LocalName(); 329cdf0e10cSrcweir 330cdf0e10cSrcweir Env().OpenClass(*pCurObject); 331cdf0e10cSrcweir } 332cdf0e10cSrcweir 333cdf0e10cSrcweir void 334cdf0e10cSrcweir PE_Class::On_expectName_Colon( const char * ) 335cdf0e10cSrcweir { 336cdf0e10cSrcweir pStati->SetCur(gotName); 337cdf0e10cSrcweir sLocalName = ""; 338cdf0e10cSrcweir 339cdf0e10cSrcweir pSpuBase->Push(done); 340cdf0e10cSrcweir } 341cdf0e10cSrcweir 342cdf0e10cSrcweir void 343cdf0e10cSrcweir PE_Class::On_gotName_SwBracket_Left( const char * ) 344cdf0e10cSrcweir { 345cdf0e10cSrcweir SetTokenResult(done, stay); 346cdf0e10cSrcweir pStati->SetCur(bodyStd); 347cdf0e10cSrcweir 348cdf0e10cSrcweir Init_CurObject(); 349cdf0e10cSrcweir if ( sLocalName.empty() ) 350cdf0e10cSrcweir sLocalName = pCurObject->LocalName(); 351cdf0e10cSrcweir 352cdf0e10cSrcweir Env().OpenClass(*pCurObject); 353cdf0e10cSrcweir } 354cdf0e10cSrcweir 355cdf0e10cSrcweir void 356cdf0e10cSrcweir PE_Class::On_gotName_Semicolon( const char * ) 357cdf0e10cSrcweir { 358cdf0e10cSrcweir SetTokenResult(not_done, pop_success); 359cdf0e10cSrcweir 360cdf0e10cSrcweir eResult_KindOf = is_predeclaration; 361cdf0e10cSrcweir } 362cdf0e10cSrcweir 363cdf0e10cSrcweir void 364cdf0e10cSrcweir PE_Class::On_gotName_Colon( const char * ) 365cdf0e10cSrcweir { 366cdf0e10cSrcweir pSpuBase->Push(done); 367cdf0e10cSrcweir } 368cdf0e10cSrcweir 369cdf0e10cSrcweir void 370cdf0e10cSrcweir PE_Class::On_gotName_Return2Type( const char * ) 371cdf0e10cSrcweir { 372cdf0e10cSrcweir SetTokenResult(not_done, pop_success); 373cdf0e10cSrcweir 374cdf0e10cSrcweir eResult_KindOf = is_qualified_typename; 375cdf0e10cSrcweir } 376cdf0e10cSrcweir 377cdf0e10cSrcweir void 378cdf0e10cSrcweir PE_Class::On_bodyStd_VarFunc( const char * ) 379cdf0e10cSrcweir { 380cdf0e10cSrcweir pSpuVarFunc->Push(not_done); 381cdf0e10cSrcweir } 382cdf0e10cSrcweir 383cdf0e10cSrcweir void 384cdf0e10cSrcweir PE_Class::On_bodyStd_ClassKey( const char * ) 385cdf0e10cSrcweir { 386cdf0e10cSrcweir pSpuVarFunc->Push(not_done); // This is correct, 387cdf0e10cSrcweir // classes are parsed via PE_Type. 388cdf0e10cSrcweir } 389cdf0e10cSrcweir 390cdf0e10cSrcweir void 391cdf0e10cSrcweir PE_Class::On_bodyStd_enum( const char * ) 392cdf0e10cSrcweir { 393cdf0e10cSrcweir pSpuVarFunc->Push(not_done); // This is correct, 394cdf0e10cSrcweir // enums are parsed via PE_Type. 395cdf0e10cSrcweir } 396cdf0e10cSrcweir 397cdf0e10cSrcweir void 398cdf0e10cSrcweir PE_Class::On_bodyStd_typedef( const char * ) 399cdf0e10cSrcweir { 400cdf0e10cSrcweir pSpuTypedef->Push(not_done); 401cdf0e10cSrcweir } 402cdf0e10cSrcweir 403cdf0e10cSrcweir void 404cdf0e10cSrcweir PE_Class::On_bodyStd_public( const char * ) 405cdf0e10cSrcweir { 406cdf0e10cSrcweir SetTokenResult(done, stay); 407cdf0e10cSrcweir pStati->SetCur(inProtection); 408cdf0e10cSrcweir 409cdf0e10cSrcweir Env().SetCurProtection(ary::cpp::PROTECT_public); 410cdf0e10cSrcweir } 411cdf0e10cSrcweir 412cdf0e10cSrcweir void 413cdf0e10cSrcweir PE_Class::On_bodyStd_protected( const char * ) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir SetTokenResult(done, stay); 416cdf0e10cSrcweir pStati->SetCur(inProtection); 417cdf0e10cSrcweir 418cdf0e10cSrcweir Env().SetCurProtection(ary::cpp::PROTECT_protected); 419cdf0e10cSrcweir } 420cdf0e10cSrcweir 421cdf0e10cSrcweir void 422cdf0e10cSrcweir PE_Class::On_bodyStd_private( const char * ) 423cdf0e10cSrcweir { 424cdf0e10cSrcweir SetTokenResult(done, stay); 425cdf0e10cSrcweir pStati->SetCur(inProtection); 426cdf0e10cSrcweir 427cdf0e10cSrcweir Env().SetCurProtection(ary::cpp::PROTECT_private); 428cdf0e10cSrcweir } 429cdf0e10cSrcweir 430cdf0e10cSrcweir void 431cdf0e10cSrcweir PE_Class::On_bodyStd_template( const char * ) 432cdf0e10cSrcweir { 433cdf0e10cSrcweir pSpuTemplate->Push(done); 434cdf0e10cSrcweir } 435cdf0e10cSrcweir 436cdf0e10cSrcweir void 437cdf0e10cSrcweir PE_Class::On_bodyStd_friend( const char * ) 438cdf0e10cSrcweir { 439cdf0e10cSrcweir // KORR_FUTURE 440cdf0e10cSrcweir pSpuUsing->Push(done); 441cdf0e10cSrcweir } 442cdf0e10cSrcweir 443cdf0e10cSrcweir void 444cdf0e10cSrcweir PE_Class::On_bodyStd_using( const char * ) 445cdf0e10cSrcweir { 446cdf0e10cSrcweir pSpuUsing->Push(done); 447cdf0e10cSrcweir } 448cdf0e10cSrcweir 449cdf0e10cSrcweir void 450cdf0e10cSrcweir PE_Class::On_bodyStd_SwBracket_Right( const char * ) 451cdf0e10cSrcweir { 452cdf0e10cSrcweir SetTokenResult(done, stay); 453cdf0e10cSrcweir pStati->SetCur(afterDecl); 454cdf0e10cSrcweir 455cdf0e10cSrcweir Env().CloseClass(); 456cdf0e10cSrcweir } 457cdf0e10cSrcweir 458cdf0e10cSrcweir void 459cdf0e10cSrcweir PE_Class::On_bodyStd_DefineName(const char * ) 460cdf0e10cSrcweir { 461cdf0e10cSrcweir pSpuDefs->Push(not_done); 462cdf0e10cSrcweir } 463cdf0e10cSrcweir 464cdf0e10cSrcweir void 465cdf0e10cSrcweir PE_Class::On_bodyStd_MacroName(const char * ) 466cdf0e10cSrcweir { 467cdf0e10cSrcweir pSpuDefs->Push(not_done); 468cdf0e10cSrcweir } 469cdf0e10cSrcweir 470cdf0e10cSrcweir 471cdf0e10cSrcweir void 472cdf0e10cSrcweir PE_Class::On_inProtection_Colon( const char * ) 473cdf0e10cSrcweir { 474cdf0e10cSrcweir SetTokenResult(done, stay); 475cdf0e10cSrcweir pStati->SetCur(bodyStd); 476cdf0e10cSrcweir } 477cdf0e10cSrcweir 478cdf0e10cSrcweir void 479cdf0e10cSrcweir PE_Class::On_afterDecl_Semicolon( const char * ) 480cdf0e10cSrcweir { 481cdf0e10cSrcweir SetTokenResult(not_done, pop_success); 482cdf0e10cSrcweir eResult_KindOf = is_declaration; 483cdf0e10cSrcweir } 484cdf0e10cSrcweir 485cdf0e10cSrcweir void 486cdf0e10cSrcweir PE_Class::On_afterDecl_Return2Type( const char * ) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir SetTokenResult(not_done, pop_success); 489cdf0e10cSrcweir eResult_KindOf = is_implicit_declaration; 490cdf0e10cSrcweir } 491cdf0e10cSrcweir 492cdf0e10cSrcweir 493cdf0e10cSrcweir } // namespace cpp 494cdf0e10cSrcweir 495cdf0e10cSrcweir 496cdf0e10cSrcweir 497cdf0e10cSrcweir 498