blob: d06cb15ba671f8744c5baeaccc188b0952137be1 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _IDLC_IDLCTYPES_HXX_
#define _IDLC_IDLCTYPES_HXX_
#include <stdio.h>
#include <hash_map>
#include <list>
#include <vector>
#include <string>
#include <set>
#include <sal/types.h>
#include <rtl/ustring.hxx>
struct EqualString
{
sal_Bool operator()(const ::rtl::OString& str1, const ::rtl::OString& str2) const
{
return (str1 == str2);
}
};
struct HashString
{
sal_Int32 operator()(const ::rtl::OString& str) const
{
return str.hashCode();
}
};
struct LessString
{
sal_Bool operator()(const ::rtl::OString& str1, const ::rtl::OString& str2) const
{
return (str1 < str2);
}
};
typedef ::std::list< ::rtl::OString > StringList;
typedef ::std::vector< ::rtl::OString > StringVector;
typedef ::std::set< ::rtl::OString, LessString > StringSet;
class AstExpression;
typedef ::std::list< AstExpression* > ExprList;
class AstUnionLabel;
typedef ::std::list< AstUnionLabel* > LabelList;
class AstDeclaration;
typedef ::std::hash_map< ::rtl::OString, AstDeclaration*, HashString, EqualString > DeclMap;
typedef ::std::list< AstDeclaration* > DeclList;
class AstScope;
AstDeclaration* SAL_CALL scopeAsDecl(AstScope* pScope);
AstScope* SAL_CALL declAsScope(AstDeclaration* pDecl);
#ifdef _MSC_VER
#pragma warning( disable : 4541 )
#endif
// flags used for attributes, properties and services
#define AF_INVALID 0x0000
#define AF_READONLY 0x0001
#define AF_OPTIONAL 0x0002
#define AF_MAYBEVOID 0x0004
#define AF_BOUND 0x0008
#define AF_CONSTRAINED 0x0010
#define AF_TRANSIENT 0x0020
#define AF_MAYBEAMBIGUOUS 0x0040
#define AF_MAYBEDEFAULT 0x0080
#define AF_REMOVEABLE 0x0100
#define AF_ATTRIBUTE 0x0200
#define AF_PROPERTY 0x0400
enum ParseState
{
PS_NoState,
PS_TypeDeclSeen, // Seen complete typedef declaration
PS_ConstantDeclSeen, // Seen complete const declaration
PS_ExceptionDeclSeen, // Seen complete exception declaration
PS_InterfaceDeclSeen, // Seen complete interface declaration
PS_ServiceDeclSeen, // Seen complete service declaration
PS_SingletonDeclSeen, // Seen complete singleton declaration
PS_ModuleDeclSeen, // Seen complete module declaration
PS_AttributeDeclSeen, // Seen complete attribute declaration
PS_PropertyDeclSeen, // Seen complete property declaration
PS_OperationDeclSeen, // Seen complete operation declaration
PS_InterfaceInheritanceDeclSeen, // Seen complete interface inheritance decl
PS_ConstantsDeclSeen, // Seen complete constants declaration
PS_ServiceSeen, // Seen a SERVICE keyword
PS_ServiceIDSeen, // Seen the service ID
PS_ServiceSqSeen, // '{' seen for service
PS_ServiceQsSeen, // '}' seen for service
PS_ServiceBodySeen, // Seen complete service body
PS_ServiceMemberSeen, // Seen a service member
PS_ServiceIFHeadSeen, // Seen an interface member header
PS_ServiceSHeadSeen, // Seen an service member header
PS_SingletonSeen, // Seen a SINGLETON keyword
PS_SingletonIDSeen, // Seen the singleton ID
PS_SingletonSqSeen, // '{' seen for singleton
PS_SingletonQsSeen, // '}' seen for singleton
PS_SingletonBodySeen, // Seen complete singleton body
PS_SingletonMemberSeen, // Seen a singleton member
PS_ModuleSeen, // Seen a MODULE keyword
PS_ModuleIDSeen, // Seen the module ID
PS_ModuleSqSeen, // '{' seen for module
PS_ModuleQsSeen, // '}' seen for module
PS_ModuleBodySeen, // Seen complete module body
PS_ConstantsSeen, // Seen a CONSTANTS keyword
PS_ConstantsIDSeen, // Seen the constants ID
PS_ConstantsSqSeen, // '{' seen for constants
PS_ConstantsQsSeen, // '}' seen for constants
PS_ConstantsBodySeen, // Seen complete constants body
PS_InterfaceSeen, // Seen an INTERFACE keyword
PS_InterfaceIDSeen, // Seen the interface ID
PS_InterfaceHeadSeen, // Seen the interface head
PS_InheritSpecSeen, // Seen a complete inheritance spec
PS_ForwardDeclSeen, // Forward interface decl seen
PS_InterfaceSqSeen, // '{' seen for interface
PS_InterfaceQsSeen, // '}' seen for interface
PS_InterfaceBodySeen, // Seen an interface body
PS_InheritColonSeen, // Seen ':' in inheritance list
PS_SNListCommaSeen, // Seen ',' in list of scoped names
PS_ScopedNameSeen, // Seen a complete scoped name
PS_SN_IDSeen, // Seen an identifier as part of a scoped name
PS_ScopeDelimSeen, // Seen a scope delim as party of a scoped name
PS_ConstSeen, // Seen a CONST keyword
PS_ConstTypeSeen, // Parsed the type of a constant
PS_ConstIDSeen, // Seen the constant ID
PS_ConstAssignSeen, // Seen the '='
PS_ConstExprSeen, // Seen the constant value expression
PS_TypedefSeen, // Seen a TYPEDEF keyword
PS_TypeSpecSeen, // Seen a complete type specification
PS_DeclaratorsSeen, // Seen a complete list of declarators
PS_StructSeen, // Seen a STRUCT keyword
PS_StructHeaderSeen, // Seen struct header
PS_StructIDSeen, // Seen the struct ID
PS_StructSqSeen, // '{' seen for struct
PS_StructQsSeen, // '}' seen for struct
PS_StructBodySeen, // Seen complete body of struct decl
PS_MemberTypeSeen, // Seen type of struct or except member
PS_MemberDeclsSeen, // Seen decls of struct or except members
PS_MemberDeclsCompleted,// Completed one struct or except member to ';'
PS_UnionSeen, // Seen a UNION keyword
PS_UnionIDSeen, // Seen the union ID
PS_SwitchSeen, // Seen the SWITCH keyword
PS_SwitchOpenParSeen, // Seen the switch open par.
PS_SwitchTypeSeen, // Seen the switch type spec
PS_SwitchCloseParSeen, // Seen the switch close par.
PS_UnionSqSeen, // '{' seen for union
PS_UnionQsSeen, // '}' seen for union
PS_DefaultSeen, // Seen DEFAULT keyword
PS_UnionLabelSeen, // Seen label of union element
PS_LabelColonSeen, // Seen ':' of union branch label
PS_LabelExprSeen, // Seen expression of union branch label
PS_UnionElemSeen, // Seen a union element
PS_UnionElemCompleted, // Completed one union member up to ';'
PS_CaseSeen, // Seen a CASE keyword
PS_UnionElemTypeSeen, // Seen type spec for union element
PS_UnionElemDeclSeen, // Seen declarator for union element
PS_UnionBodySeen, // Seen completed union body
PS_EnumSeen, // Seen an ENUM keyword
PS_EnumIDSeen, // Seen the enum ID
PS_EnumSqSeen, // Seen '{' for enum
PS_EnumQsSeen, // Seen '}' for enum
PS_EnumBodySeen, // Seen complete enum body
PS_EnumCommaSeen, // Seen ',' in list of enumerators
PS_SequenceSeen, // Seen a SEQUENCE keyword
PS_SequenceSqSeen, // Seen '<' for sequence
PS_SequenceQsSeen, // Seen '>' for sequence
PS_SequenceTypeSeen, // Seen type decl for sequence
PS_ArrayIDSeen, // Seen array ID
PS_ArrayTypeSeen, // Seen array type
PS_ArrayCompleted, // Seen completed array declaration
PS_DimSqSeen, // Seen '[' for array dimension
PS_DimQsSeen, // Seen ']' for array dimension
PS_DimExprSeen, // Seen size expression for array dimension
PS_FlagHeaderSeen, // Seen the attribute|property|interface member head
PS_AttrSeen, // Seen ATTRIBUTE keyword
PS_AttrTypeSeen, // Seen type decl for attribute
PS_AttrCompleted, // Seen complete attribute declaration
PS_ReadOnlySeen, // Seen READONLY keyword
PS_OptionalSeen, // Seen OPTIONAL keyword
PS_MayBeVoidSeen, // Seen MAYBEVOID yword
PS_BoundSeen, // Seen BOUND keyword
PS_ConstrainedSeen, // Seen CONSTRAINED keyword
PS_TransientSeen, // Seen TRANSIENT keyword
PS_MayBeAmbigiousSeen, // Seen MAYBEAMBIGIOUS keyword
PS_MayBeDefaultSeen, // Seen MAYBEDEFAULT keyword
PS_RemoveableSeen, // Seen REMOVEABLE keyword
PS_PropertySeen, // Seen PROPERTY keyword
PS_PropertyTypeSeen, // Seen type decl for property
PS_PropertyCompleted, // Seen complete property declaration
PS_ExceptSeen, // Seen EXCEPTION keyword
PS_ExceptHeaderSeen, // Seen exception header keyword
PS_ExceptIDSeen, // Seen exception identifier
PS_ExceptSqSeen, // Seen '{' for exception
PS_ExceptQsSeen, // Seen '}' for exception
PS_ExceptBodySeen, // Seen complete exception body
PS_OpHeadSeen, // Seen the operation head
PS_OpTypeSeen, // Seen operation return type
PS_OpIDSeen, // Seen operation ID
PS_OpParsCompleted, // Completed operation param list
PS_OpCompleted, // Completed operation statement
PS_OpSqSeen, // Seen '(' for operation
PS_OpQsSeen, // Seen ')' for operation
PS_OpParCommaSeen, // Seen ',' in list of op params
PS_OpParDirSeen, // Seen parameter direction
PS_OpParTypeSeen, // Seen parameter type
PS_OpParDeclSeen, // Seen parameter declaration
PS_OpOnewaySeen, // Seen ONEWAY keyword
PS_RaiseSeen, // Seen RAISES keyword
PS_RaiseSqSeen, // Seen '(' for RAISES
PS_RaiseQsSeen, // Seen ')' for RAISES
PS_DeclsCommaSeen, // Seen ',' in declarators list
PS_DeclsDeclSeen // Seen complete decl in decls list
};
#endif // _IDLC_IDLCTYPES_HXX_