2002-03-08 13:45:36 +00:00
|
|
|
|
/*************************************************************************
|
|
|
|
|
*
|
2005-09-07 17:26:49 +00:00
|
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2002-03-08 13:45:36 +00:00
|
|
|
|
*
|
2005-09-07 17:26:49 +00:00
|
|
|
|
* $RCSfile: pe_funct.hxx,v $
|
2002-03-08 13:45:36 +00:00
|
|
|
|
*
|
2007-11-02 16:01:26 +00:00
|
|
|
|
* $Revision: 1.3 $
|
2002-03-08 13:45:36 +00:00
|
|
|
|
*
|
2007-11-02 16:01:26 +00:00
|
|
|
|
* last change: $Author: hr $ $Date: 2007-11-02 16:55:42 $
|
2002-03-08 13:45:36 +00:00
|
|
|
|
*
|
2005-09-07 17:26:49 +00:00
|
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2002-03-08 13:45:36 +00:00
|
|
|
|
*
|
|
|
|
|
*
|
2005-09-07 17:26:49 +00:00
|
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
|
* =============================================
|
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2002-03-08 13:45:36 +00:00
|
|
|
|
*
|
2005-09-07 17:26:49 +00:00
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2002-03-08 13:45:36 +00:00
|
|
|
|
*
|
2005-09-07 17:26:49 +00:00
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
* Lesser General Public License for more details.
|
2002-03-08 13:45:36 +00:00
|
|
|
|
*
|
2005-09-07 17:26:49 +00:00
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
|
* MA 02111-1307 USA
|
2002-03-08 13:45:36 +00:00
|
|
|
|
*
|
|
|
|
|
************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef ADC_CPP_PE_FUNCT_HXX
|
|
|
|
|
#define ADC_CPP_PE_FUNCT_HXX
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// USED SERVICES
|
|
|
|
|
// BASE CLASSES
|
|
|
|
|
#include "cpp_pe.hxx"
|
|
|
|
|
// COMPONENTS
|
|
|
|
|
#include <semantic/callf.hxx>
|
|
|
|
|
#include <semantic/sub_peu.hxx>
|
2007-11-02 16:01:26 +00:00
|
|
|
|
#include <ary/cpp/c_types4cpp.hxx>
|
2002-03-08 13:45:36 +00:00
|
|
|
|
#include <ary/cpp/c_vfflag.hxx>
|
|
|
|
|
// PARAMETERS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace ary
|
|
|
|
|
{
|
|
|
|
|
namespace cpp
|
|
|
|
|
{
|
|
|
|
|
class Function;
|
|
|
|
|
struct S_VariableInfo;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace cpp
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
class PE_Type;
|
|
|
|
|
class PE_Parameter;
|
|
|
|
|
|
|
|
|
|
class PE_Function : public Cpp_PE
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum E_State
|
|
|
|
|
{
|
|
|
|
|
afterStdOperator, // if initializes as operator
|
|
|
|
|
afterStdOperatorLeftBracket,
|
|
|
|
|
// if initializes as operator with ( or [
|
|
|
|
|
afterCastOperator, // if initializes as operator
|
|
|
|
|
afterName, // undecided
|
|
|
|
|
expectParameterSeparator, //
|
|
|
|
|
afterParameters, // before const, volatile throw or = 0.
|
|
|
|
|
afterThrow, // expect (
|
|
|
|
|
expectExceptionSeparator, //
|
|
|
|
|
afterExceptions, // = 0 oder ; oder ,
|
|
|
|
|
expectZero, // after '='
|
|
|
|
|
inImplementation, // after {
|
|
|
|
|
size_of_states
|
|
|
|
|
};
|
|
|
|
|
typedef ary::cpp::E_Protection E_Protection;
|
|
|
|
|
typedef ary::cpp::E_Virtuality E_Virtuality;
|
|
|
|
|
typedef ary::cpp::E_ConVol E_ConVol;
|
|
|
|
|
|
|
|
|
|
PE_Function(
|
|
|
|
|
Cpp_PE * i_pParent );
|
|
|
|
|
~PE_Function();
|
|
|
|
|
|
|
|
|
|
void Init_Std(
|
2007-11-02 16:01:26 +00:00
|
|
|
|
const String & i_sName,
|
|
|
|
|
ary::cpp::Type_id i_nReturnType,
|
2002-03-08 13:45:36 +00:00
|
|
|
|
bool i_bVirtual,
|
|
|
|
|
ary::cpp::FunctionFlags
|
|
|
|
|
i_aFlags );
|
|
|
|
|
void Init_Ctor(
|
2007-11-02 16:01:26 +00:00
|
|
|
|
const String & i_sName,
|
2002-03-08 13:45:36 +00:00
|
|
|
|
ary::cpp::FunctionFlags
|
|
|
|
|
i_aFlags );
|
|
|
|
|
void Init_Dtor(
|
2007-11-02 16:01:26 +00:00
|
|
|
|
const String & i_sName,
|
2002-03-08 13:45:36 +00:00
|
|
|
|
bool i_bVirtual,
|
|
|
|
|
ary::cpp::FunctionFlags
|
|
|
|
|
i_aFlags );
|
|
|
|
|
void Init_CastOperator(
|
|
|
|
|
bool i_bVirtual,
|
|
|
|
|
ary::cpp::FunctionFlags
|
|
|
|
|
i_aFlags );
|
|
|
|
|
void Init_NormalOperator(
|
2007-11-02 16:01:26 +00:00
|
|
|
|
ary::cpp::Type_id i_nReturnType,
|
2002-03-08 13:45:36 +00:00
|
|
|
|
bool i_bVirtual,
|
|
|
|
|
ary::cpp::FunctionFlags
|
|
|
|
|
i_aFlags );
|
|
|
|
|
|
2007-11-02 16:01:26 +00:00
|
|
|
|
ary::cpp::Ce_id Result_Id() const;
|
2002-03-08 13:45:36 +00:00
|
|
|
|
bool Result_WithImplementation() const;
|
|
|
|
|
|
|
|
|
|
virtual void Call_Handler(
|
|
|
|
|
const cpp::Token & i_rTok );
|
|
|
|
|
private:
|
|
|
|
|
typedef SubPe< PE_Function, PE_Type > SP_Type;
|
|
|
|
|
typedef SubPeUse< PE_Function, PE_Type > SPU_Type;
|
|
|
|
|
typedef SubPe< PE_Function, PE_Parameter> SP_Parameter;
|
|
|
|
|
typedef SubPeUse<PE_Function, PE_Parameter> SPU_Parameter;
|
|
|
|
|
|
|
|
|
|
typedef std::vector<ary::cpp::S_Parameter> ParameterList;
|
2007-11-02 16:01:26 +00:00
|
|
|
|
typedef std::vector<ary::cpp::Type_id> ExceptionTypeList;
|
2002-03-08 13:45:36 +00:00
|
|
|
|
|
|
|
|
|
void Setup_StatusFunctions();
|
|
|
|
|
virtual void InitData();
|
|
|
|
|
virtual void TransferData();
|
|
|
|
|
void Hdl_SyntaxError(const char * i_sText);
|
|
|
|
|
|
|
|
|
|
void SpInit_CastOperatorType();
|
|
|
|
|
|
|
|
|
|
void SpReturn_Parameter();
|
|
|
|
|
void SpReturn_Exception();
|
|
|
|
|
void SpReturn_CastOperatorType();
|
|
|
|
|
|
|
|
|
|
void On_afterOperator_Std_Operator(const char * i_sText); // Operator+() etc.
|
|
|
|
|
void On_afterOperator_Std_LeftBracket(const char * i_sText); // operator [] or ()
|
|
|
|
|
void On_afterStdOperatorLeftBracket_RightBracket(const char * i_sText);
|
|
|
|
|
void On_afterOperator_Cast_Type(const char * i_sText); // Type
|
|
|
|
|
|
|
|
|
|
void On_afterName_Bracket_Left(const char * i_sText);
|
|
|
|
|
|
|
|
|
|
void On_expectParameterSeparator_BracketRight(const char * i_sText);
|
|
|
|
|
void On_expectParameterSeparator_Comma(const char * i_sText);
|
|
|
|
|
|
|
|
|
|
void On_afterParameters_const(const char * i_sText);
|
|
|
|
|
void On_afterParameters_volatile(const char * i_sText);
|
|
|
|
|
void On_afterParameters_throw(const char * i_sText);
|
|
|
|
|
void On_afterParameters_SwBracket_Left(const char * i_sText);
|
|
|
|
|
void On_afterParameters_Semicolon(const char * i_sText);
|
|
|
|
|
void On_afterParameters_Comma(const char * i_sText);
|
|
|
|
|
void On_afterParameters_Colon(const char * i_sText);
|
|
|
|
|
void On_afterParameters_Assign(const char * i_sText);
|
|
|
|
|
|
|
|
|
|
void On_afterThrow_Bracket_Left(const char * i_sText);
|
|
|
|
|
|
|
|
|
|
void On_expectExceptionSeparator_BracketRight(const char * i_sText);
|
|
|
|
|
void On_expectExceptionSeparator_Comma(const char * i_sText);
|
|
|
|
|
|
|
|
|
|
void On_afterExceptions_SwBracket_Left(const char * i_sText);
|
|
|
|
|
void On_afterExceptions_Semicolon(const char * i_sText);
|
|
|
|
|
void On_afterExceptions_Comma(const char * i_sText);
|
|
|
|
|
void On_afterExceptions_Colon(const char * i_sText);
|
|
|
|
|
void On_afterExceptions_Assign(const char * i_sText);
|
|
|
|
|
|
|
|
|
|
void On_expectZero_Constant(const char * i_sText);
|
|
|
|
|
|
|
|
|
|
void On_inImplementation_SwBracket_Left(const char * i_sText);
|
|
|
|
|
void On_inImplementation_SwBracket_Right(const char * i_sText);
|
|
|
|
|
void On_inImplementation_Default(const char * i_sText);
|
|
|
|
|
|
|
|
|
|
void PerformFinishingPunctuation();
|
|
|
|
|
void EnterImplementation(
|
|
|
|
|
intt i_nBracketCountStart ); /// 1 normally, 0 in initialisation section of c'tors.
|
|
|
|
|
|
|
|
|
|
// DATA
|
|
|
|
|
Dyn< PeStatusArray<PE_Function> >
|
|
|
|
|
pStati;
|
|
|
|
|
|
|
|
|
|
Dyn< SP_Parameter > pSpParameter;
|
|
|
|
|
Dyn< SPU_Parameter> pSpuParameter;
|
|
|
|
|
Dyn< SP_Type > pSpType;
|
|
|
|
|
Dyn< SPU_Type > pSpuException;
|
|
|
|
|
Dyn< SPU_Type > pSpuCastOperatorType; // in "operator int()" or "operator ThatClass *()"
|
|
|
|
|
|
2007-11-02 16:01:26 +00:00
|
|
|
|
ary::cpp::Ce_id nResult;
|
2002-03-08 13:45:36 +00:00
|
|
|
|
bool bResult_WithImplementation; // Necessary for the parent ParseEnvironment
|
|
|
|
|
// to know, there is no semicolon or comma following.
|
|
|
|
|
// Pre results
|
|
|
|
|
StreamStr aName;
|
|
|
|
|
E_Virtuality eVirtuality;
|
|
|
|
|
E_ConVol eConVol;
|
|
|
|
|
ary::cpp::FunctionFlags
|
|
|
|
|
aFlags;
|
2007-11-02 16:01:26 +00:00
|
|
|
|
ary::cpp::Type_id nReturnType;
|
2002-03-08 13:45:36 +00:00
|
|
|
|
ParameterList aParameters;
|
|
|
|
|
ExceptionTypeList aExceptions;
|
|
|
|
|
bool bThrow; // Indicates, if there is a throw - important, if there are 0 exceptions listed.
|
|
|
|
|
intt nBracketCounterInImplementation;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-11-02 16:01:26 +00:00
|
|
|
|
// IMPLEMENTATION
|
2002-03-08 13:45:36 +00:00
|
|
|
|
inline bool
|
|
|
|
|
PE_Function::Result_WithImplementation() const
|
|
|
|
|
{ return bResult_WithImplementation; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-11-02 16:01:26 +00:00
|
|
|
|
} // namespace cpp
|
|
|
|
|
#endif
|
|
|
|
|
|
2002-03-08 13:45:36 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* // Overview of Stati
|
|
|
|
|
|
|
|
|
|
Undecided
|
|
|
|
|
---------
|
|
|
|
|
|
|
|
|
|
start // vor und w<>hrend storage class specifiern
|
|
|
|
|
|
|
|
|
|
->Typ
|
|
|
|
|
|
|
|
|
|
expectName // Typ ist da
|
|
|
|
|
|
|
|
|
|
afterName
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Variable
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
start // vor und w<>hrend storage class specifiern
|
|
|
|
|
|
|
|
|
|
->Typ
|
|
|
|
|
|
|
|
|
|
expectName // Typ ist da -> im Falle von '(': notyetimplemented
|
|
|
|
|
afterName
|
|
|
|
|
|
|
|
|
|
expectSize // after [
|
|
|
|
|
expectFinish
|
|
|
|
|
// vor ; oder ,
|
|
|
|
|
expectNextVarName // anders als bei expectName kann hier auch * oder & kommen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Function
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
start // vor und w<>hrend storage class specifiern
|
|
|
|
|
|
|
|
|
|
->Typ
|
|
|
|
|
|
|
|
|
|
expectName // Typ ist da
|
|
|
|
|
expectBracket // Nach Name
|
|
|
|
|
expectParameter // nach ( oder ,
|
|
|
|
|
-> Parameter
|
|
|
|
|
after Parameters // before const, volatile throw or = 0.
|
|
|
|
|
after throw // expect (
|
|
|
|
|
expectException // after (
|
|
|
|
|
after exceptions // = 0 oder ; oder ,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
expectNextVarName // anders als bei expectName kann hier auch * oder & kommen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/
|