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_funct.hxx" 24cdf0e10cSrcweir 25cdf0e10cSrcweir 26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES 27cdf0e10cSrcweir #include <cosv/tpl/tpltools.hxx> 28cdf0e10cSrcweir #include <ary/cpp/c_gate.hxx> 29cdf0e10cSrcweir #include <ary/cpp/c_funct.hxx> 30cdf0e10cSrcweir #include <ary/cpp/c_type.hxx> 31cdf0e10cSrcweir #include <ary/cpp/cp_ce.hxx> 32cdf0e10cSrcweir #include <ary/cpp/cp_type.hxx> 33cdf0e10cSrcweir #include <ary/cpp/inpcontx.hxx> 34cdf0e10cSrcweir #include "pe_type.hxx" 35cdf0e10cSrcweir #include "pe_param.hxx" 36cdf0e10cSrcweir 37cdf0e10cSrcweir 38cdf0e10cSrcweir 39cdf0e10cSrcweir 40cdf0e10cSrcweir namespace cpp 41cdf0e10cSrcweir { 42cdf0e10cSrcweir 43cdf0e10cSrcweir 44cdf0e10cSrcweir inline void 45cdf0e10cSrcweir PE_Function::PerformFinishingPunctuation() 46cdf0e10cSrcweir { 47cdf0e10cSrcweir SetTokenResult(not_done,pop_success); 48cdf0e10cSrcweir } 49cdf0e10cSrcweir 50cdf0e10cSrcweir 51cdf0e10cSrcweir PE_Function::PE_Function( Cpp_PE * i_pParent ) 52cdf0e10cSrcweir : Cpp_PE(i_pParent), 53cdf0e10cSrcweir pStati( new PeStatusArray<PE_Function> ), 54cdf0e10cSrcweir // pSpParameter, 55cdf0e10cSrcweir // pSpuParameter, 56cdf0e10cSrcweir // pSpType, 57cdf0e10cSrcweir // pSpuException, 58cdf0e10cSrcweir // pSpuCastOperatorType, 59cdf0e10cSrcweir nResult(0), 60cdf0e10cSrcweir bResult_WithImplementation(false), 61cdf0e10cSrcweir aName(60), 62cdf0e10cSrcweir eVirtuality(ary::cpp::VIRTUAL_none), 63cdf0e10cSrcweir eConVol(ary::cpp::CONVOL_none), 64cdf0e10cSrcweir // aFlags, 65cdf0e10cSrcweir nReturnType(0), 66cdf0e10cSrcweir // aParameters 67cdf0e10cSrcweir // aExceptions, 68cdf0e10cSrcweir bThrow(false), 69cdf0e10cSrcweir nBracketCounterInImplementation(0) 70cdf0e10cSrcweir { 71cdf0e10cSrcweir Setup_StatusFunctions(); 72cdf0e10cSrcweir 73cdf0e10cSrcweir pSpParameter = new SP_Parameter(*this); 74cdf0e10cSrcweir pSpType = new SP_Type(*this); 75cdf0e10cSrcweir 76cdf0e10cSrcweir pSpuParameter = new SPU_Parameter(*pSpParameter, 0, &PE_Function::SpReturn_Parameter); 77cdf0e10cSrcweir pSpuException = new SPU_Type(*pSpType, 0, &PE_Function::SpReturn_Exception); 78cdf0e10cSrcweir pSpuCastOperatorType = new SPU_Type(*pSpType, &PE_Function::SpInit_CastOperatorType, &PE_Function::SpReturn_CastOperatorType); 79cdf0e10cSrcweir } 80cdf0e10cSrcweir 81cdf0e10cSrcweir PE_Function::~PE_Function() 82cdf0e10cSrcweir { 83cdf0e10cSrcweir 84cdf0e10cSrcweir } 85cdf0e10cSrcweir 86cdf0e10cSrcweir void 87cdf0e10cSrcweir PE_Function::Init_Std( const String & i_sName, 88cdf0e10cSrcweir ary::cpp::Type_id i_nReturnType, 89cdf0e10cSrcweir bool i_bVirtual, 90cdf0e10cSrcweir ary::cpp::FunctionFlags i_aFlags ) 91cdf0e10cSrcweir { 92cdf0e10cSrcweir aName << i_sName; 93cdf0e10cSrcweir eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none; 94cdf0e10cSrcweir aFlags = i_aFlags; 95cdf0e10cSrcweir nReturnType = i_nReturnType; 96cdf0e10cSrcweir pStati->SetCur(afterName); 97cdf0e10cSrcweir } 98cdf0e10cSrcweir 99cdf0e10cSrcweir void 100cdf0e10cSrcweir PE_Function::Init_Ctor( const String & i_sName, 101cdf0e10cSrcweir ary::cpp::FunctionFlags i_aFlags ) 102cdf0e10cSrcweir { 103cdf0e10cSrcweir aName << i_sName; 104cdf0e10cSrcweir eVirtuality = ary::cpp::VIRTUAL_none; 105cdf0e10cSrcweir aFlags = i_aFlags; 106cdf0e10cSrcweir nReturnType = 0; 107cdf0e10cSrcweir pStati->SetCur(afterName); 108cdf0e10cSrcweir } 109cdf0e10cSrcweir 110cdf0e10cSrcweir void 111cdf0e10cSrcweir PE_Function::Init_Dtor( const String & i_sName, 112cdf0e10cSrcweir bool i_bVirtual, 113cdf0e10cSrcweir ary::cpp::FunctionFlags i_aFlags ) 114cdf0e10cSrcweir { 115cdf0e10cSrcweir aName << "~" << i_sName; 116cdf0e10cSrcweir eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none; 117cdf0e10cSrcweir aFlags = i_aFlags; 118cdf0e10cSrcweir nReturnType = 0; 119cdf0e10cSrcweir pStati->SetCur(afterName); 120cdf0e10cSrcweir } 121cdf0e10cSrcweir 122cdf0e10cSrcweir void 123cdf0e10cSrcweir PE_Function::Init_CastOperator( bool i_bVirtual, 124cdf0e10cSrcweir ary::cpp::FunctionFlags i_aFlags ) 125cdf0e10cSrcweir { 126cdf0e10cSrcweir aName << "operator "; 127cdf0e10cSrcweir eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none; 128cdf0e10cSrcweir aFlags = i_aFlags; 129cdf0e10cSrcweir nReturnType = 0; 130cdf0e10cSrcweir pStati->SetCur(afterCastOperator); 131cdf0e10cSrcweir } 132cdf0e10cSrcweir 133cdf0e10cSrcweir void 134cdf0e10cSrcweir PE_Function::Init_NormalOperator( ary::cpp::Type_id i_nReturnType, 135cdf0e10cSrcweir bool i_bVirtual, 136cdf0e10cSrcweir ary::cpp::FunctionFlags i_aFlags ) 137cdf0e10cSrcweir { 138cdf0e10cSrcweir aName << "operator"; 139cdf0e10cSrcweir eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none; 140cdf0e10cSrcweir aFlags = i_aFlags; 141cdf0e10cSrcweir nReturnType = i_nReturnType; 142cdf0e10cSrcweir pStati->SetCur(afterStdOperator); 143cdf0e10cSrcweir } 144cdf0e10cSrcweir 145cdf0e10cSrcweir ary::cpp::Ce_id 146cdf0e10cSrcweir PE_Function::Result_Id() const 147cdf0e10cSrcweir { 148cdf0e10cSrcweir return nResult; 149cdf0e10cSrcweir } 150cdf0e10cSrcweir 151cdf0e10cSrcweir void 152cdf0e10cSrcweir PE_Function::Call_Handler( const cpp::Token & i_rTok ) 153cdf0e10cSrcweir { 154cdf0e10cSrcweir pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text()); 155cdf0e10cSrcweir } 156cdf0e10cSrcweir 157cdf0e10cSrcweir void 158cdf0e10cSrcweir PE_Function::Setup_StatusFunctions() 159cdf0e10cSrcweir { 160cdf0e10cSrcweir typedef CallFunction<PE_Function>::F_Tok F_Tok; 161cdf0e10cSrcweir 162cdf0e10cSrcweir static F_Tok stateF_afterStdOperator[] = 163cdf0e10cSrcweir { &PE_Function::On_afterOperator_Std_Operator, 164cdf0e10cSrcweir &PE_Function::On_afterOperator_Std_LeftBracket, 165cdf0e10cSrcweir &PE_Function::On_afterOperator_Std_LeftBracket, 166cdf0e10cSrcweir &PE_Function::On_afterOperator_Std_Operator, 167cdf0e10cSrcweir &PE_Function::On_afterOperator_Std_Operator, 168cdf0e10cSrcweir &PE_Function::On_afterOperator_Std_Operator, 169cdf0e10cSrcweir &PE_Function::On_afterOperator_Std_Operator, 170cdf0e10cSrcweir &PE_Function::On_afterOperator_Std_Operator, 171cdf0e10cSrcweir &PE_Function::On_afterOperator_Std_Operator }; 172cdf0e10cSrcweir static INT16 stateT_afterStdOperator[] = 173cdf0e10cSrcweir { Tid_Operator, 174cdf0e10cSrcweir Tid_ArrayBracket_Left, 175cdf0e10cSrcweir Tid_Bracket_Left, 176cdf0e10cSrcweir Tid_Comma, 177cdf0e10cSrcweir Tid_Assign, 178cdf0e10cSrcweir Tid_Less, 179cdf0e10cSrcweir Tid_Greater, 180cdf0e10cSrcweir Tid_Asterix, 181cdf0e10cSrcweir Tid_AmpersAnd }; 182cdf0e10cSrcweir 183cdf0e10cSrcweir static F_Tok stateF_afterStdOperatorLeftBracket[] = 184cdf0e10cSrcweir { &PE_Function::On_afterStdOperatorLeftBracket_RightBracket, 185cdf0e10cSrcweir &PE_Function::On_afterStdOperatorLeftBracket_RightBracket }; 186cdf0e10cSrcweir static INT16 stateT_afterStdOperatorLeftBracket[] = 187cdf0e10cSrcweir { Tid_ArrayBracket_Right, 188cdf0e10cSrcweir Tid_Bracket_Right }; 189cdf0e10cSrcweir 190cdf0e10cSrcweir static F_Tok stateF_afterCastOperator[] = 191cdf0e10cSrcweir { &PE_Function::On_afterOperator_Cast_Type, 192cdf0e10cSrcweir &PE_Function::On_afterOperator_Cast_Type, 193cdf0e10cSrcweir &PE_Function::On_afterOperator_Cast_Type, 194cdf0e10cSrcweir &PE_Function::On_afterOperator_Cast_Type, 195cdf0e10cSrcweir &PE_Function::On_afterOperator_Cast_Type, 196cdf0e10cSrcweir &PE_Function::On_afterOperator_Cast_Type, 197cdf0e10cSrcweir &PE_Function::On_afterOperator_Cast_Type, 198cdf0e10cSrcweir &PE_Function::On_afterOperator_Cast_Type, 199cdf0e10cSrcweir &PE_Function::On_afterOperator_Cast_Type, 200cdf0e10cSrcweir &PE_Function::On_afterOperator_Cast_Type, 201cdf0e10cSrcweir &PE_Function::On_afterOperator_Cast_Type }; 202cdf0e10cSrcweir static INT16 stateT_afterCastOperator[] = 203cdf0e10cSrcweir { Tid_Identifier, 204cdf0e10cSrcweir Tid_class, 205cdf0e10cSrcweir Tid_struct, 206cdf0e10cSrcweir Tid_union, 207cdf0e10cSrcweir Tid_enum, 208cdf0e10cSrcweir Tid_const, 209cdf0e10cSrcweir Tid_volatile, 210cdf0e10cSrcweir Tid_DoubleColon, 211cdf0e10cSrcweir Tid_typename, 212cdf0e10cSrcweir Tid_BuiltInType, 213cdf0e10cSrcweir Tid_TypeSpecializer }; 214cdf0e10cSrcweir 215cdf0e10cSrcweir static F_Tok stateF_afterName[] = { &PE_Function::On_afterName_Bracket_Left }; 216cdf0e10cSrcweir static INT16 stateT_afterName[] = { Tid_Bracket_Left }; 217cdf0e10cSrcweir 218cdf0e10cSrcweir static F_Tok stateF_expectParameterSeparator[] = 219cdf0e10cSrcweir { &PE_Function::On_expectParameterSeparator_BracketRight, 220cdf0e10cSrcweir &PE_Function::On_expectParameterSeparator_Comma }; 221cdf0e10cSrcweir static INT16 stateT_expectParameterSeparator[] = 222cdf0e10cSrcweir { Tid_Bracket_Right, 223cdf0e10cSrcweir Tid_Comma }; 224cdf0e10cSrcweir 225cdf0e10cSrcweir static F_Tok stateF_afterParameters[] = { &PE_Function::On_afterParameters_const, 226cdf0e10cSrcweir &PE_Function::On_afterParameters_volatile, 227cdf0e10cSrcweir &PE_Function::On_afterParameters_throw, 228cdf0e10cSrcweir &PE_Function::On_afterParameters_SwBracket_Left, 229cdf0e10cSrcweir &PE_Function::On_afterParameters_Semicolon, 230cdf0e10cSrcweir &PE_Function::On_afterParameters_Comma, 231cdf0e10cSrcweir &PE_Function::On_afterParameters_Colon, 232cdf0e10cSrcweir &PE_Function::On_afterParameters_Assign }; 233cdf0e10cSrcweir static INT16 stateT_afterParameters[] = { Tid_const, 234cdf0e10cSrcweir Tid_volatile, 235cdf0e10cSrcweir Tid_throw, 236cdf0e10cSrcweir Tid_SwBracket_Left, 237cdf0e10cSrcweir Tid_Semicolon, 238cdf0e10cSrcweir Tid_Comma, 239cdf0e10cSrcweir Tid_Colon, 240cdf0e10cSrcweir Tid_Assign }; 241cdf0e10cSrcweir 242cdf0e10cSrcweir static F_Tok stateF_afterThrow[] = { &PE_Function::On_afterThrow_Bracket_Left }; 243cdf0e10cSrcweir static INT16 stateT_afterThrow[] = { Tid_Bracket_Left }; 244cdf0e10cSrcweir 245cdf0e10cSrcweir static F_Tok stateF_expectExceptionSeparator[] = 246cdf0e10cSrcweir { &PE_Function::On_expectExceptionSeparator_BracketRight, 247cdf0e10cSrcweir &PE_Function::On_expectExceptionSeparator_Comma }; 248cdf0e10cSrcweir static INT16 stateT_expectExceptionSeparator[] = 249cdf0e10cSrcweir { Tid_Bracket_Right, 250cdf0e10cSrcweir Tid_Comma }; 251cdf0e10cSrcweir 252cdf0e10cSrcweir static F_Tok stateF_afterExceptions[] = { &PE_Function::On_afterExceptions_SwBracket_Left, 253cdf0e10cSrcweir &PE_Function::On_afterExceptions_Semicolon, 254cdf0e10cSrcweir &PE_Function::On_afterExceptions_Comma, 255cdf0e10cSrcweir &PE_Function::On_afterExceptions_Colon, 256cdf0e10cSrcweir &PE_Function::On_afterExceptions_Assign }; 257cdf0e10cSrcweir static INT16 stateT_afterExceptions[] = { Tid_SwBracket_Left, 258cdf0e10cSrcweir Tid_Semicolon, 259cdf0e10cSrcweir Tid_Comma, 260cdf0e10cSrcweir Tid_Colon, 261cdf0e10cSrcweir Tid_Assign }; 262cdf0e10cSrcweir 263cdf0e10cSrcweir static F_Tok stateF_expectZero[] = { &PE_Function::On_expectZero_Constant }; 264cdf0e10cSrcweir static INT16 stateT_expectZero[] = { Tid_Constant }; 265cdf0e10cSrcweir 266cdf0e10cSrcweir static F_Tok stateF_inImplementation[] = 267cdf0e10cSrcweir { &PE_Function::On_inImplementation_SwBracket_Left, 268cdf0e10cSrcweir &PE_Function::On_inImplementation_SwBracket_Right }; 269cdf0e10cSrcweir static INT16 stateT_inImplementation[] = 270cdf0e10cSrcweir { Tid_SwBracket_Left, 271cdf0e10cSrcweir Tid_SwBracket_Right }; 272cdf0e10cSrcweir 273cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, afterStdOperator, Hdl_SyntaxError); 274cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, afterStdOperatorLeftBracket, Hdl_SyntaxError); 275cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, afterCastOperator, Hdl_SyntaxError); 276cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, afterName, Hdl_SyntaxError); 277cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, expectParameterSeparator, Hdl_SyntaxError); 278cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, afterParameters, Hdl_SyntaxError); 279cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, afterThrow, Hdl_SyntaxError); 280cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, expectExceptionSeparator, Hdl_SyntaxError); 281cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, afterExceptions, Hdl_SyntaxError); 282cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, expectZero, Hdl_SyntaxError); 283cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Function, inImplementation, On_inImplementation_Default ); 284cdf0e10cSrcweir } 285cdf0e10cSrcweir 286cdf0e10cSrcweir void 287cdf0e10cSrcweir PE_Function::InitData() 288cdf0e10cSrcweir { 289cdf0e10cSrcweir pStati->SetCur( afterName ), 290cdf0e10cSrcweir nResult = 0; 291cdf0e10cSrcweir bResult_WithImplementation = false; 292cdf0e10cSrcweir aName.seekp(0); 293cdf0e10cSrcweir eVirtuality = ary::cpp::VIRTUAL_none; 294cdf0e10cSrcweir eConVol = ary::cpp::CONVOL_none; 295cdf0e10cSrcweir aFlags.Reset(); 296cdf0e10cSrcweir nReturnType = 0; 297cdf0e10cSrcweir csv::erase_container(aParameters); 298cdf0e10cSrcweir csv::erase_container(aExceptions); 299cdf0e10cSrcweir bThrow = false; 300cdf0e10cSrcweir } 301cdf0e10cSrcweir 302cdf0e10cSrcweir void 303cdf0e10cSrcweir PE_Function::TransferData() 304cdf0e10cSrcweir { 305cdf0e10cSrcweir String sName( aName.c_str() ); 306cdf0e10cSrcweir ary::cpp::Function * 307cdf0e10cSrcweir pFunction = Env().AryGate().Ces().Store_Operation( 308cdf0e10cSrcweir Env().Context(), 309cdf0e10cSrcweir sName, 310cdf0e10cSrcweir nReturnType, 311cdf0e10cSrcweir aParameters, 312cdf0e10cSrcweir eVirtuality, 313cdf0e10cSrcweir eConVol, 314cdf0e10cSrcweir aFlags, 315cdf0e10cSrcweir bThrow, 316cdf0e10cSrcweir aExceptions ); 317cdf0e10cSrcweir if (pFunction != 0) 318cdf0e10cSrcweir { 319cdf0e10cSrcweir // KORR_FUTURE: How to handle differing documentation? 320cdf0e10cSrcweir 321cdf0e10cSrcweir Dyn< StringVector > 322cdf0e10cSrcweir pTplParams ( Env().Get_CurTemplateParameters() ); 323cdf0e10cSrcweir if ( pTplParams ) 324cdf0e10cSrcweir { 325cdf0e10cSrcweir for ( StringVector::const_iterator it = pTplParams->begin(); 326cdf0e10cSrcweir it != pTplParams->end(); 327cdf0e10cSrcweir ++it ) 328cdf0e10cSrcweir { 329cdf0e10cSrcweir pFunction->Add_TemplateParameterType( *it, ary::cpp::Type_id(0) ); 330cdf0e10cSrcweir } // end for 331cdf0e10cSrcweir } 332cdf0e10cSrcweir 333cdf0e10cSrcweir Env().Event_Store_Function(*pFunction); 334cdf0e10cSrcweir } 335cdf0e10cSrcweir 336cdf0e10cSrcweir pStati->SetCur(size_of_states); 337cdf0e10cSrcweir } 338cdf0e10cSrcweir 339cdf0e10cSrcweir void 340cdf0e10cSrcweir PE_Function::Hdl_SyntaxError(const char * i_sText) 341cdf0e10cSrcweir { 342cdf0e10cSrcweir StdHandlingOfSyntaxError(i_sText); 343cdf0e10cSrcweir } 344cdf0e10cSrcweir 345cdf0e10cSrcweir void 346cdf0e10cSrcweir PE_Function::SpInit_CastOperatorType() 347cdf0e10cSrcweir { 348cdf0e10cSrcweir pSpuCastOperatorType->Child().Init_AsCastOperatorType(); 349cdf0e10cSrcweir } 350cdf0e10cSrcweir 351cdf0e10cSrcweir void 352cdf0e10cSrcweir PE_Function::SpReturn_Parameter() 353cdf0e10cSrcweir { 354cdf0e10cSrcweir pStati->SetCur(expectParameterSeparator); 355cdf0e10cSrcweir 356cdf0e10cSrcweir ary::cpp::Type_id nParamType = pSpuParameter->Child().Result_FrontType(); 357cdf0e10cSrcweir if ( nParamType.IsValid() ) // Check, if there was a parameter, or only the closing ')'. 358cdf0e10cSrcweir { 359cdf0e10cSrcweir aParameters.push_back( pSpuParameter->Child().Result_ParamInfo() ); 360cdf0e10cSrcweir } 361cdf0e10cSrcweir } 362cdf0e10cSrcweir 363cdf0e10cSrcweir void 364cdf0e10cSrcweir PE_Function::SpReturn_Exception() 365cdf0e10cSrcweir { 366cdf0e10cSrcweir pStati->SetCur(expectExceptionSeparator); 367cdf0e10cSrcweir 368cdf0e10cSrcweir ary::cpp::Type_id 369cdf0e10cSrcweir nException = pSpuException->Child().Result_Type().TypeId(); 370cdf0e10cSrcweir if ( nException.IsValid() AND pSpuException->Child().Result_KindOf() == PE_Type::is_type ) 371cdf0e10cSrcweir { 372cdf0e10cSrcweir aExceptions.push_back( nException ); 373cdf0e10cSrcweir } 374cdf0e10cSrcweir } 375cdf0e10cSrcweir 376cdf0e10cSrcweir void 377cdf0e10cSrcweir PE_Function::SpReturn_CastOperatorType() 378cdf0e10cSrcweir { 379cdf0e10cSrcweir pStati->SetCur(afterName); 380cdf0e10cSrcweir 381cdf0e10cSrcweir Env().AryGate().Types().Get_TypeText( 382cdf0e10cSrcweir aName, pSpuCastOperatorType->Child().Result_Type().TypeId() ); 383cdf0e10cSrcweir } 384cdf0e10cSrcweir 385cdf0e10cSrcweir void 386cdf0e10cSrcweir PE_Function::On_afterOperator_Std_Operator(const char * i_sText) 387cdf0e10cSrcweir { 388cdf0e10cSrcweir SetTokenResult(done,stay); 389cdf0e10cSrcweir pStati->SetCur(afterName); 390cdf0e10cSrcweir 391cdf0e10cSrcweir if ( 'a' <= *i_sText AND *i_sText <= 'z' ) 392cdf0e10cSrcweir aName << ' '; 393cdf0e10cSrcweir aName << i_sText; 394cdf0e10cSrcweir } 395cdf0e10cSrcweir 396cdf0e10cSrcweir void 397cdf0e10cSrcweir PE_Function::On_afterOperator_Std_LeftBracket(const char * i_sText) 398cdf0e10cSrcweir { 399cdf0e10cSrcweir SetTokenResult(done,stay); 400cdf0e10cSrcweir pStati->SetCur(afterStdOperatorLeftBracket); 401cdf0e10cSrcweir 402cdf0e10cSrcweir aName << i_sText; 403cdf0e10cSrcweir } 404cdf0e10cSrcweir 405cdf0e10cSrcweir void 406cdf0e10cSrcweir PE_Function::On_afterStdOperatorLeftBracket_RightBracket(const char * i_sText) 407cdf0e10cSrcweir { 408cdf0e10cSrcweir SetTokenResult(done,stay); 409cdf0e10cSrcweir pStati->SetCur(afterName); 410cdf0e10cSrcweir 411cdf0e10cSrcweir aName << i_sText; 412cdf0e10cSrcweir } 413cdf0e10cSrcweir 414cdf0e10cSrcweir void 415cdf0e10cSrcweir PE_Function::On_afterOperator_Cast_Type(const char *) 416cdf0e10cSrcweir { 417cdf0e10cSrcweir pSpuCastOperatorType->Push(not_done); 418cdf0e10cSrcweir } 419cdf0e10cSrcweir 420cdf0e10cSrcweir void 421cdf0e10cSrcweir PE_Function::On_afterName_Bracket_Left(const char *) 422cdf0e10cSrcweir { 423cdf0e10cSrcweir pSpuParameter->Push(done); 424cdf0e10cSrcweir } 425cdf0e10cSrcweir 426cdf0e10cSrcweir void 427cdf0e10cSrcweir PE_Function::On_expectParameterSeparator_BracketRight(const char *) 428cdf0e10cSrcweir { 429cdf0e10cSrcweir SetTokenResult(done,stay); 430cdf0e10cSrcweir pStati->SetCur(afterParameters); 431cdf0e10cSrcweir } 432cdf0e10cSrcweir 433cdf0e10cSrcweir void 434cdf0e10cSrcweir PE_Function::On_expectParameterSeparator_Comma(const char *) 435cdf0e10cSrcweir { 436cdf0e10cSrcweir pSpuParameter->Push(done); 437cdf0e10cSrcweir } 438cdf0e10cSrcweir 439cdf0e10cSrcweir void 440cdf0e10cSrcweir PE_Function::On_afterParameters_const(const char *) 441cdf0e10cSrcweir { 442cdf0e10cSrcweir SetTokenResult(done,stay); 443cdf0e10cSrcweir eConVol = static_cast<E_ConVol>( 444cdf0e10cSrcweir static_cast<int>(eConVol) | static_cast<int>(ary::cpp::CONVOL_const) ); 445cdf0e10cSrcweir } 446cdf0e10cSrcweir 447cdf0e10cSrcweir void 448cdf0e10cSrcweir PE_Function::On_afterParameters_volatile(const char *) 449cdf0e10cSrcweir { 450cdf0e10cSrcweir SetTokenResult(done,stay); 451cdf0e10cSrcweir eConVol = static_cast<E_ConVol>( 452cdf0e10cSrcweir static_cast<int>(eConVol) | static_cast<int>(ary::cpp::CONVOL_volatile) ); 453cdf0e10cSrcweir } 454cdf0e10cSrcweir 455cdf0e10cSrcweir void 456cdf0e10cSrcweir PE_Function::On_afterParameters_throw(const char *) 457cdf0e10cSrcweir { 458cdf0e10cSrcweir SetTokenResult(done,stay); 459cdf0e10cSrcweir pStati->SetCur(afterThrow); 460cdf0e10cSrcweir bThrow = true; 461cdf0e10cSrcweir } 462cdf0e10cSrcweir 463cdf0e10cSrcweir void 464cdf0e10cSrcweir PE_Function::On_afterParameters_SwBracket_Left(const char *) 465cdf0e10cSrcweir { 466cdf0e10cSrcweir EnterImplementation(1); 467cdf0e10cSrcweir } 468cdf0e10cSrcweir 469cdf0e10cSrcweir void 470cdf0e10cSrcweir PE_Function::On_afterParameters_Semicolon(const char *) 471cdf0e10cSrcweir { 472cdf0e10cSrcweir PerformFinishingPunctuation(); 473cdf0e10cSrcweir } 474cdf0e10cSrcweir 475cdf0e10cSrcweir void 476cdf0e10cSrcweir PE_Function::On_afterParameters_Comma(const char *) 477cdf0e10cSrcweir { 478cdf0e10cSrcweir PerformFinishingPunctuation(); 479cdf0e10cSrcweir } 480cdf0e10cSrcweir 481cdf0e10cSrcweir void 482cdf0e10cSrcweir PE_Function::On_afterParameters_Colon(const char *) 483cdf0e10cSrcweir { 484cdf0e10cSrcweir EnterImplementation(0); 485cdf0e10cSrcweir } 486cdf0e10cSrcweir 487cdf0e10cSrcweir void 488cdf0e10cSrcweir PE_Function::On_afterParameters_Assign(const char *) 489cdf0e10cSrcweir { 490cdf0e10cSrcweir SetTokenResult(done,stay); 491cdf0e10cSrcweir pStati->SetCur(expectZero); 492cdf0e10cSrcweir } 493cdf0e10cSrcweir 494cdf0e10cSrcweir void 495cdf0e10cSrcweir PE_Function::On_afterThrow_Bracket_Left(const char *) 496cdf0e10cSrcweir { 497cdf0e10cSrcweir pSpuException->Push(done); 498cdf0e10cSrcweir } 499cdf0e10cSrcweir 500cdf0e10cSrcweir void 501cdf0e10cSrcweir PE_Function::On_expectExceptionSeparator_BracketRight(const char *) 502cdf0e10cSrcweir { 503cdf0e10cSrcweir SetTokenResult(done,stay); 504cdf0e10cSrcweir pStati->SetCur(afterExceptions); 505cdf0e10cSrcweir } 506cdf0e10cSrcweir 507cdf0e10cSrcweir void 508cdf0e10cSrcweir PE_Function::On_expectExceptionSeparator_Comma(const char *) 509cdf0e10cSrcweir { 510cdf0e10cSrcweir pSpuException->Push(done); 511cdf0e10cSrcweir } 512cdf0e10cSrcweir 513cdf0e10cSrcweir void 514cdf0e10cSrcweir PE_Function::On_afterExceptions_SwBracket_Left(const char *) 515cdf0e10cSrcweir { 516cdf0e10cSrcweir EnterImplementation(1); 517cdf0e10cSrcweir } 518cdf0e10cSrcweir 519cdf0e10cSrcweir void 520cdf0e10cSrcweir PE_Function::On_afterExceptions_Semicolon(const char *) 521cdf0e10cSrcweir { 522cdf0e10cSrcweir PerformFinishingPunctuation(); 523cdf0e10cSrcweir } 524cdf0e10cSrcweir 525cdf0e10cSrcweir void 526cdf0e10cSrcweir PE_Function::On_afterExceptions_Comma(const char *) 527cdf0e10cSrcweir { 528cdf0e10cSrcweir PerformFinishingPunctuation(); 529cdf0e10cSrcweir } 530cdf0e10cSrcweir 531cdf0e10cSrcweir void 532cdf0e10cSrcweir PE_Function::On_afterExceptions_Colon(const char *) 533cdf0e10cSrcweir { 534cdf0e10cSrcweir EnterImplementation(0); 535cdf0e10cSrcweir } 536cdf0e10cSrcweir 537cdf0e10cSrcweir void 538cdf0e10cSrcweir PE_Function::On_afterExceptions_Assign(const char *) 539cdf0e10cSrcweir { 540cdf0e10cSrcweir SetTokenResult(done,stay); 541cdf0e10cSrcweir pStati->SetCur(expectZero); 542cdf0e10cSrcweir } 543cdf0e10cSrcweir 544cdf0e10cSrcweir void 545cdf0e10cSrcweir PE_Function::On_expectZero_Constant(const char * i_sText) 546cdf0e10cSrcweir { 547cdf0e10cSrcweir if ( strcmp(i_sText,"0") != 0 ) 548cdf0e10cSrcweir Hdl_SyntaxError(i_sText); 549cdf0e10cSrcweir 550cdf0e10cSrcweir SetTokenResult(done,stay); 551cdf0e10cSrcweir pStati->SetCur(afterExceptions); 552cdf0e10cSrcweir 553cdf0e10cSrcweir eVirtuality = ary::cpp::VIRTUAL_abstract; 554cdf0e10cSrcweir } 555cdf0e10cSrcweir 556cdf0e10cSrcweir void 557cdf0e10cSrcweir PE_Function::On_inImplementation_SwBracket_Left(const char *) 558cdf0e10cSrcweir { 559cdf0e10cSrcweir SetTokenResult(done,stay); 560cdf0e10cSrcweir nBracketCounterInImplementation++; 561cdf0e10cSrcweir } 562cdf0e10cSrcweir 563cdf0e10cSrcweir void 564cdf0e10cSrcweir PE_Function::On_inImplementation_SwBracket_Right(const char *) 565cdf0e10cSrcweir { 566cdf0e10cSrcweir nBracketCounterInImplementation--; 567cdf0e10cSrcweir if (nBracketCounterInImplementation == 0) 568cdf0e10cSrcweir { 569cdf0e10cSrcweir SetTokenResult(done,pop_success); 570cdf0e10cSrcweir } 571cdf0e10cSrcweir else 572cdf0e10cSrcweir { 573cdf0e10cSrcweir SetTokenResult(done,stay); 574cdf0e10cSrcweir } 575cdf0e10cSrcweir } 576cdf0e10cSrcweir 577cdf0e10cSrcweir void 578cdf0e10cSrcweir PE_Function::On_inImplementation_Default(const char *) 579cdf0e10cSrcweir { 580cdf0e10cSrcweir SetTokenResult(done,stay); 581cdf0e10cSrcweir } 582cdf0e10cSrcweir 583cdf0e10cSrcweir void 584cdf0e10cSrcweir PE_Function::EnterImplementation( intt i_nBracketCountStart ) 585cdf0e10cSrcweir { 586cdf0e10cSrcweir SetTokenResult(done,stay); 587cdf0e10cSrcweir pStati->SetCur(inImplementation); 588cdf0e10cSrcweir 589cdf0e10cSrcweir bResult_WithImplementation = true; 590cdf0e10cSrcweir nBracketCounterInImplementation = i_nBracketCountStart; 591cdf0e10cSrcweir if ( Env().Context().CurClass() != 0 ) 592cdf0e10cSrcweir { 593cdf0e10cSrcweir aFlags.SetInline(); 594cdf0e10cSrcweir } 595cdf0e10cSrcweir } 596cdf0e10cSrcweir 597cdf0e10cSrcweir 598cdf0e10cSrcweir 599cdf0e10cSrcweir } // namespace cpp 600cdf0e10cSrcweir 601cdf0e10cSrcweir 602cdf0e10cSrcweir 603cdf0e10cSrcweir 604cdf0e10cSrcweir 605