1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef ADC_CPP_CTX2ARY_HXX 25*b1cdbd2cSJim Jagielski #define ADC_CPP_CTX2ARY_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski // USED SERVICES 30*b1cdbd2cSJim Jagielski // BASE CLASSES 31*b1cdbd2cSJim Jagielski #include <ary/cpp/inpcontx.hxx> 32*b1cdbd2cSJim Jagielski #include <doc_deal.hxx> 33*b1cdbd2cSJim Jagielski #include "pev.hxx" 34*b1cdbd2cSJim Jagielski #include "fevnthdl.hxx" 35*b1cdbd2cSJim Jagielski // COMPONENTS 36*b1cdbd2cSJim Jagielski // PARAMETERS 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski namespace ary 39*b1cdbd2cSJim Jagielski { 40*b1cdbd2cSJim Jagielski namespace loc 41*b1cdbd2cSJim Jagielski { 42*b1cdbd2cSJim Jagielski class File; 43*b1cdbd2cSJim Jagielski } 44*b1cdbd2cSJim Jagielski } 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski namespace cpp 49*b1cdbd2cSJim Jagielski { 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski /** @descr 53*b1cdbd2cSJim Jagielski This class provides information about the context of an 54*b1cdbd2cSJim Jagielski CodeEntity, which is going to be stored in the repository. 55*b1cdbd2cSJim Jagielski The information is used mainly by class ary::cpp::Gate. 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski Also it provides information for the parser about actual 58*b1cdbd2cSJim Jagielski state of several public variables. 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski @todo 61*b1cdbd2cSJim Jagielski Include events, which allow correct storing of inline 62*b1cdbd2cSJim Jagielski documentation after enum values, parameters, 63*b1cdbd2cSJim Jagielski base classes. 64*b1cdbd2cSJim Jagielski */ 65*b1cdbd2cSJim Jagielski class ContextForAry : public ary::cpp::InputContext, 66*b1cdbd2cSJim Jagielski public cpp::PeEnvironment, 67*b1cdbd2cSJim Jagielski public cpp::FileScope_EventHandler, 68*b1cdbd2cSJim Jagielski public DocuDealer 69*b1cdbd2cSJim Jagielski { 70*b1cdbd2cSJim Jagielski public: 71*b1cdbd2cSJim Jagielski // LIFECYCLE 72*b1cdbd2cSJim Jagielski ContextForAry( 73*b1cdbd2cSJim Jagielski ary::cpp::Gate & io_rAryGate ); 74*b1cdbd2cSJim Jagielski virtual ~ContextForAry(); 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski // OPERATIONS ResetResult()77*b1cdbd2cSJim Jagielski void ResetResult() { aTokenResult.Reset(); } 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski // INQUIRY 80*b1cdbd2cSJim Jagielski const TokenProcessing_Result & CurResult() const81*b1cdbd2cSJim Jagielski CurResult() const { return aTokenResult; } 82*b1cdbd2cSJim Jagielski // ACCESS 83*b1cdbd2cSJim Jagielski TokenProcessing_Result & CurResult()84*b1cdbd2cSJim Jagielski CurResult() { return aTokenResult; } 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski private: 87*b1cdbd2cSJim Jagielski // Interface ary::cpp::InputContext: 88*b1cdbd2cSJim Jagielski virtual ary::loc::File & 89*b1cdbd2cSJim Jagielski inq_CurFile() const; 90*b1cdbd2cSJim Jagielski virtual ary::cpp::Namespace & 91*b1cdbd2cSJim Jagielski inq_CurNamespace() const; 92*b1cdbd2cSJim Jagielski virtual ary::cpp::Class * 93*b1cdbd2cSJim Jagielski inq_CurClass() const; 94*b1cdbd2cSJim Jagielski virtual ary::cpp::Enum * 95*b1cdbd2cSJim Jagielski inq_CurEnum() const; 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski virtual Owner & inq_CurOwner() const; 98*b1cdbd2cSJim Jagielski virtual ary::cpp::E_Protection 99*b1cdbd2cSJim Jagielski inq_CurProtection() const; 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski // Interface PeEnvironment 102*b1cdbd2cSJim Jagielski virtual void do_SetTokenResult( 103*b1cdbd2cSJim Jagielski E_TokenDone i_eDone, 104*b1cdbd2cSJim Jagielski E_EnvStackAction i_eWhat2DoWithEnvStack, 105*b1cdbd2cSJim Jagielski ParseEnvironment * i_pParseEnv2Push ); 106*b1cdbd2cSJim Jagielski virtual void do_OpenNamespace( 107*b1cdbd2cSJim Jagielski ary::cpp::Namespace & 108*b1cdbd2cSJim Jagielski io_rOpenedNamespace ); 109*b1cdbd2cSJim Jagielski virtual void do_OpenExternC( 110*b1cdbd2cSJim Jagielski bool i_bOnlyForOneDeclaration ); 111*b1cdbd2cSJim Jagielski virtual void do_OpenClass( 112*b1cdbd2cSJim Jagielski ary::cpp::Class & io_rOpenedClass ); 113*b1cdbd2cSJim Jagielski virtual void do_OpenEnum( 114*b1cdbd2cSJim Jagielski ary::cpp::Enum & io_rOpenedEnum ); 115*b1cdbd2cSJim Jagielski virtual void do_CloseBlock(); 116*b1cdbd2cSJim Jagielski virtual void do_CloseClass(); 117*b1cdbd2cSJim Jagielski virtual void do_CloseEnum(); 118*b1cdbd2cSJim Jagielski virtual void do_SetCurProtection( 119*b1cdbd2cSJim Jagielski ary::cpp::E_Protection 120*b1cdbd2cSJim Jagielski i_eProtection ); 121*b1cdbd2cSJim Jagielski virtual void do_OpenTemplate( 122*b1cdbd2cSJim Jagielski const StringVector & 123*b1cdbd2cSJim Jagielski i_rParameters ); 124*b1cdbd2cSJim Jagielski virtual DYN StringVector * 125*b1cdbd2cSJim Jagielski do_Get_CurTemplateParameters(); 126*b1cdbd2cSJim Jagielski virtual void do_Close_OpenTemplate(); 127*b1cdbd2cSJim Jagielski virtual void do_Event_Class_FinishedBase( 128*b1cdbd2cSJim Jagielski const String & i_sBaseName ); 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski virtual void do_Event_Store_Typedef( 131*b1cdbd2cSJim Jagielski ary::cpp::Typedef & io_rTypedef ); 132*b1cdbd2cSJim Jagielski virtual void do_Event_Store_EnumValue( 133*b1cdbd2cSJim Jagielski ary::cpp::EnumValue & 134*b1cdbd2cSJim Jagielski io_rEnumValue ); 135*b1cdbd2cSJim Jagielski virtual void do_Event_Store_CppDefinition( 136*b1cdbd2cSJim Jagielski ary::cpp::DefineEntity & 137*b1cdbd2cSJim Jagielski io_rDefinition ); 138*b1cdbd2cSJim Jagielski virtual void do_Event_EnterFunction_ParameterList(); 139*b1cdbd2cSJim Jagielski virtual void do_Event_Function_FinishedParameter( 140*b1cdbd2cSJim Jagielski const String & i_sParameterName ); 141*b1cdbd2cSJim Jagielski virtual void do_Event_LeaveFunction_ParameterList(); 142*b1cdbd2cSJim Jagielski virtual void do_Event_EnterFunction_Implementation(); 143*b1cdbd2cSJim Jagielski virtual void do_Event_LeaveFunction_Implementation(); 144*b1cdbd2cSJim Jagielski virtual void do_Event_Store_Function( 145*b1cdbd2cSJim Jagielski ary::cpp::Function & 146*b1cdbd2cSJim Jagielski io_rFunction ); 147*b1cdbd2cSJim Jagielski virtual void do_Event_Store_Variable( 148*b1cdbd2cSJim Jagielski ary::cpp::Variable & 149*b1cdbd2cSJim Jagielski io_rVariable ); 150*b1cdbd2cSJim Jagielski virtual void do_TakeDocu( 151*b1cdbd2cSJim Jagielski DYN ary::doc::OldCppDocu & 152*b1cdbd2cSJim Jagielski let_drInfo ); 153*b1cdbd2cSJim Jagielski virtual void do_StartWaitingFor_Recovery(); 154*b1cdbd2cSJim Jagielski virtual ary::cpp::Gate & 155*b1cdbd2cSJim Jagielski inq_AryGate() const; 156*b1cdbd2cSJim Jagielski virtual const ary::cpp::InputContext & 157*b1cdbd2cSJim Jagielski inq_Context() const; 158*b1cdbd2cSJim Jagielski virtual String inq_CurFileName() const; 159*b1cdbd2cSJim Jagielski virtual uintt inq_LineCount() const; 160*b1cdbd2cSJim Jagielski virtual bool inq_IsWaitingFor_Recovery() const; 161*b1cdbd2cSJim Jagielski virtual bool inq_IsExternC() const; 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski // Interface FileScope_EventHandler 164*b1cdbd2cSJim Jagielski virtual void do_SetCurFile( 165*b1cdbd2cSJim Jagielski ary::loc::File & io_rCurFile ); 166*b1cdbd2cSJim Jagielski virtual void do_Event_IncrLineCount(); 167*b1cdbd2cSJim Jagielski virtual void do_Event_SwBracketOpen(); 168*b1cdbd2cSJim Jagielski virtual void do_Event_SwBracketClose(); 169*b1cdbd2cSJim Jagielski virtual void do_Event_Semicolon(); 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski // Local types 172*b1cdbd2cSJim Jagielski struct S_FileScopeInfo; 173*b1cdbd2cSJim Jagielski struct S_OwnerStack; 174*b1cdbd2cSJim Jagielski struct S_DocuDistributor; 175*b1cdbd2cSJim Jagielski struct S_RecoveryGuard; 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski // DATA 178*b1cdbd2cSJim Jagielski ary::cpp::Gate * pGate; 179*b1cdbd2cSJim Jagielski TokenProcessing_Result 180*b1cdbd2cSJim Jagielski aTokenResult; 181*b1cdbd2cSJim Jagielski Dyn<S_FileScopeInfo> 182*b1cdbd2cSJim Jagielski pFileScopeInfo; 183*b1cdbd2cSJim Jagielski Dyn<S_OwnerStack> pOwnerStack; 184*b1cdbd2cSJim Jagielski Dyn<S_DocuDistributor> 185*b1cdbd2cSJim Jagielski pDocuDistributor; 186*b1cdbd2cSJim Jagielski Dyn<S_RecoveryGuard> 187*b1cdbd2cSJim Jagielski pRecoveryGuard; 188*b1cdbd2cSJim Jagielski }; 189*b1cdbd2cSJim Jagielski 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski } // namespace cpp 194*b1cdbd2cSJim Jagielski #endif 195