1*f04bd1c4SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*f04bd1c4SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*f04bd1c4SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*f04bd1c4SAndrew Rist * distributed with this work for additional information 6*f04bd1c4SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*f04bd1c4SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*f04bd1c4SAndrew Rist * "License"); you may not use this file except in compliance 9*f04bd1c4SAndrew Rist * with the License. You may obtain a copy of the License at 10*f04bd1c4SAndrew Rist * 11*f04bd1c4SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*f04bd1c4SAndrew Rist * 13*f04bd1c4SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*f04bd1c4SAndrew Rist * software distributed under the License is distributed on an 15*f04bd1c4SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*f04bd1c4SAndrew Rist * KIND, either express or implied. See the License for the 17*f04bd1c4SAndrew Rist * specific language governing permissions and limitations 18*f04bd1c4SAndrew Rist * under the License. 19*f04bd1c4SAndrew Rist * 20*f04bd1c4SAndrew Rist *************************************************************/ 21*f04bd1c4SAndrew Rist 22*f04bd1c4SAndrew Rist 23cdf0e10cSrcweir #ifndef _IDLC_IDLCTYPES_HXX_ 24cdf0e10cSrcweir #define _IDLC_IDLCTYPES_HXX_ 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include <stdio.h> 27cdf0e10cSrcweir 28cdf0e10cSrcweir #include <hash_map> 29cdf0e10cSrcweir #include <list> 30cdf0e10cSrcweir #include <vector> 31cdf0e10cSrcweir #include <string> 32cdf0e10cSrcweir #include <set> 33cdf0e10cSrcweir 34cdf0e10cSrcweir #include <sal/types.h> 35cdf0e10cSrcweir #include <rtl/ustring.hxx> 36cdf0e10cSrcweir 37cdf0e10cSrcweir struct EqualString 38cdf0e10cSrcweir { operator ()EqualString39cdf0e10cSrcweir sal_Bool operator()(const ::rtl::OString& str1, const ::rtl::OString& str2) const 40cdf0e10cSrcweir { 41cdf0e10cSrcweir return (str1 == str2); 42cdf0e10cSrcweir } 43cdf0e10cSrcweir }; 44cdf0e10cSrcweir 45cdf0e10cSrcweir struct HashString 46cdf0e10cSrcweir { operator ()HashString47cdf0e10cSrcweir sal_Int32 operator()(const ::rtl::OString& str) const 48cdf0e10cSrcweir { 49cdf0e10cSrcweir return str.hashCode(); 50cdf0e10cSrcweir } 51cdf0e10cSrcweir }; 52cdf0e10cSrcweir 53cdf0e10cSrcweir struct LessString 54cdf0e10cSrcweir { operator ()LessString55cdf0e10cSrcweir sal_Bool operator()(const ::rtl::OString& str1, const ::rtl::OString& str2) const 56cdf0e10cSrcweir { 57cdf0e10cSrcweir return (str1 < str2); 58cdf0e10cSrcweir } 59cdf0e10cSrcweir }; 60cdf0e10cSrcweir 61cdf0e10cSrcweir typedef ::std::list< ::rtl::OString > StringList; 62cdf0e10cSrcweir typedef ::std::vector< ::rtl::OString > StringVector; 63cdf0e10cSrcweir typedef ::std::set< ::rtl::OString, LessString > StringSet; 64cdf0e10cSrcweir 65cdf0e10cSrcweir class AstExpression; 66cdf0e10cSrcweir typedef ::std::list< AstExpression* > ExprList; 67cdf0e10cSrcweir 68cdf0e10cSrcweir class AstUnionLabel; 69cdf0e10cSrcweir typedef ::std::list< AstUnionLabel* > LabelList; 70cdf0e10cSrcweir 71cdf0e10cSrcweir class AstDeclaration; 72cdf0e10cSrcweir 73cdf0e10cSrcweir typedef ::std::hash_map< ::rtl::OString, AstDeclaration*, HashString, EqualString > DeclMap; 74cdf0e10cSrcweir typedef ::std::list< AstDeclaration* > DeclList; 75cdf0e10cSrcweir 76cdf0e10cSrcweir class AstScope; 77cdf0e10cSrcweir AstDeclaration* SAL_CALL scopeAsDecl(AstScope* pScope); 78cdf0e10cSrcweir AstScope* SAL_CALL declAsScope(AstDeclaration* pDecl); 79cdf0e10cSrcweir 80cdf0e10cSrcweir #ifdef _MSC_VER 81cdf0e10cSrcweir #pragma warning( disable : 4541 ) 82cdf0e10cSrcweir #endif 83cdf0e10cSrcweir 84cdf0e10cSrcweir // flags used for attributes, properties and services 85cdf0e10cSrcweir #define AF_INVALID 0x0000 86cdf0e10cSrcweir #define AF_READONLY 0x0001 87cdf0e10cSrcweir #define AF_OPTIONAL 0x0002 88cdf0e10cSrcweir #define AF_MAYBEVOID 0x0004 89cdf0e10cSrcweir #define AF_BOUND 0x0008 90cdf0e10cSrcweir #define AF_CONSTRAINED 0x0010 91cdf0e10cSrcweir #define AF_TRANSIENT 0x0020 92cdf0e10cSrcweir #define AF_MAYBEAMBIGUOUS 0x0040 93cdf0e10cSrcweir #define AF_MAYBEDEFAULT 0x0080 94cdf0e10cSrcweir #define AF_REMOVEABLE 0x0100 95cdf0e10cSrcweir #define AF_ATTRIBUTE 0x0200 96cdf0e10cSrcweir #define AF_PROPERTY 0x0400 97cdf0e10cSrcweir 98cdf0e10cSrcweir enum ParseState 99cdf0e10cSrcweir { 100cdf0e10cSrcweir PS_NoState, 101cdf0e10cSrcweir PS_TypeDeclSeen, // Seen complete typedef declaration 102cdf0e10cSrcweir PS_ConstantDeclSeen, // Seen complete const declaration 103cdf0e10cSrcweir PS_ExceptionDeclSeen, // Seen complete exception declaration 104cdf0e10cSrcweir PS_InterfaceDeclSeen, // Seen complete interface declaration 105cdf0e10cSrcweir PS_ServiceDeclSeen, // Seen complete service declaration 106cdf0e10cSrcweir PS_SingletonDeclSeen, // Seen complete singleton declaration 107cdf0e10cSrcweir PS_ModuleDeclSeen, // Seen complete module declaration 108cdf0e10cSrcweir PS_AttributeDeclSeen, // Seen complete attribute declaration 109cdf0e10cSrcweir PS_PropertyDeclSeen, // Seen complete property declaration 110cdf0e10cSrcweir PS_OperationDeclSeen, // Seen complete operation declaration 111cdf0e10cSrcweir PS_InterfaceInheritanceDeclSeen, // Seen complete interface inheritance decl 112cdf0e10cSrcweir PS_ConstantsDeclSeen, // Seen complete constants declaration 113cdf0e10cSrcweir 114cdf0e10cSrcweir PS_ServiceSeen, // Seen a SERVICE keyword 115cdf0e10cSrcweir PS_ServiceIDSeen, // Seen the service ID 116cdf0e10cSrcweir PS_ServiceSqSeen, // '{' seen for service 117cdf0e10cSrcweir PS_ServiceQsSeen, // '}' seen for service 118cdf0e10cSrcweir PS_ServiceBodySeen, // Seen complete service body 119cdf0e10cSrcweir PS_ServiceMemberSeen, // Seen a service member 120cdf0e10cSrcweir PS_ServiceIFHeadSeen, // Seen an interface member header 121cdf0e10cSrcweir PS_ServiceSHeadSeen, // Seen an service member header 122cdf0e10cSrcweir 123cdf0e10cSrcweir PS_SingletonSeen, // Seen a SINGLETON keyword 124cdf0e10cSrcweir PS_SingletonIDSeen, // Seen the singleton ID 125cdf0e10cSrcweir PS_SingletonSqSeen, // '{' seen for singleton 126cdf0e10cSrcweir PS_SingletonQsSeen, // '}' seen for singleton 127cdf0e10cSrcweir PS_SingletonBodySeen, // Seen complete singleton body 128cdf0e10cSrcweir PS_SingletonMemberSeen, // Seen a singleton member 129cdf0e10cSrcweir 130cdf0e10cSrcweir PS_ModuleSeen, // Seen a MODULE keyword 131cdf0e10cSrcweir PS_ModuleIDSeen, // Seen the module ID 132cdf0e10cSrcweir PS_ModuleSqSeen, // '{' seen for module 133cdf0e10cSrcweir PS_ModuleQsSeen, // '}' seen for module 134cdf0e10cSrcweir PS_ModuleBodySeen, // Seen complete module body 135cdf0e10cSrcweir 136cdf0e10cSrcweir PS_ConstantsSeen, // Seen a CONSTANTS keyword 137cdf0e10cSrcweir PS_ConstantsIDSeen, // Seen the constants ID 138cdf0e10cSrcweir PS_ConstantsSqSeen, // '{' seen for constants 139cdf0e10cSrcweir PS_ConstantsQsSeen, // '}' seen for constants 140cdf0e10cSrcweir PS_ConstantsBodySeen, // Seen complete constants body 141cdf0e10cSrcweir 142cdf0e10cSrcweir PS_InterfaceSeen, // Seen an INTERFACE keyword 143cdf0e10cSrcweir PS_InterfaceIDSeen, // Seen the interface ID 144cdf0e10cSrcweir PS_InterfaceHeadSeen, // Seen the interface head 145cdf0e10cSrcweir PS_InheritSpecSeen, // Seen a complete inheritance spec 146cdf0e10cSrcweir PS_ForwardDeclSeen, // Forward interface decl seen 147cdf0e10cSrcweir PS_InterfaceSqSeen, // '{' seen for interface 148cdf0e10cSrcweir PS_InterfaceQsSeen, // '}' seen for interface 149cdf0e10cSrcweir PS_InterfaceBodySeen, // Seen an interface body 150cdf0e10cSrcweir PS_InheritColonSeen, // Seen ':' in inheritance list 151cdf0e10cSrcweir 152cdf0e10cSrcweir PS_SNListCommaSeen, // Seen ',' in list of scoped names 153cdf0e10cSrcweir PS_ScopedNameSeen, // Seen a complete scoped name 154cdf0e10cSrcweir PS_SN_IDSeen, // Seen an identifier as part of a scoped name 155cdf0e10cSrcweir PS_ScopeDelimSeen, // Seen a scope delim as party of a scoped name 156cdf0e10cSrcweir 157cdf0e10cSrcweir PS_ConstSeen, // Seen a CONST keyword 158cdf0e10cSrcweir PS_ConstTypeSeen, // Parsed the type of a constant 159cdf0e10cSrcweir PS_ConstIDSeen, // Seen the constant ID 160cdf0e10cSrcweir PS_ConstAssignSeen, // Seen the '=' 161cdf0e10cSrcweir PS_ConstExprSeen, // Seen the constant value expression 162cdf0e10cSrcweir 163cdf0e10cSrcweir PS_TypedefSeen, // Seen a TYPEDEF keyword 164cdf0e10cSrcweir PS_TypeSpecSeen, // Seen a complete type specification 165cdf0e10cSrcweir PS_DeclaratorsSeen, // Seen a complete list of declarators 166cdf0e10cSrcweir 167cdf0e10cSrcweir PS_StructSeen, // Seen a STRUCT keyword 168cdf0e10cSrcweir PS_StructHeaderSeen, // Seen struct header 169cdf0e10cSrcweir PS_StructIDSeen, // Seen the struct ID 170cdf0e10cSrcweir PS_StructSqSeen, // '{' seen for struct 171cdf0e10cSrcweir PS_StructQsSeen, // '}' seen for struct 172cdf0e10cSrcweir PS_StructBodySeen, // Seen complete body of struct decl 173cdf0e10cSrcweir 174cdf0e10cSrcweir PS_MemberTypeSeen, // Seen type of struct or except member 175cdf0e10cSrcweir PS_MemberDeclsSeen, // Seen decls of struct or except members 176cdf0e10cSrcweir PS_MemberDeclsCompleted,// Completed one struct or except member to ';' 177cdf0e10cSrcweir 178cdf0e10cSrcweir PS_UnionSeen, // Seen a UNION keyword 179cdf0e10cSrcweir PS_UnionIDSeen, // Seen the union ID 180cdf0e10cSrcweir PS_SwitchSeen, // Seen the SWITCH keyword 181cdf0e10cSrcweir PS_SwitchOpenParSeen, // Seen the switch open par. 182cdf0e10cSrcweir PS_SwitchTypeSeen, // Seen the switch type spec 183cdf0e10cSrcweir PS_SwitchCloseParSeen, // Seen the switch close par. 184cdf0e10cSrcweir PS_UnionSqSeen, // '{' seen for union 185cdf0e10cSrcweir PS_UnionQsSeen, // '}' seen for union 186cdf0e10cSrcweir PS_DefaultSeen, // Seen DEFAULT keyword 187cdf0e10cSrcweir PS_UnionLabelSeen, // Seen label of union element 188cdf0e10cSrcweir PS_LabelColonSeen, // Seen ':' of union branch label 189cdf0e10cSrcweir PS_LabelExprSeen, // Seen expression of union branch label 190cdf0e10cSrcweir PS_UnionElemSeen, // Seen a union element 191cdf0e10cSrcweir PS_UnionElemCompleted, // Completed one union member up to ';' 192cdf0e10cSrcweir PS_CaseSeen, // Seen a CASE keyword 193cdf0e10cSrcweir PS_UnionElemTypeSeen, // Seen type spec for union element 194cdf0e10cSrcweir PS_UnionElemDeclSeen, // Seen declarator for union element 195cdf0e10cSrcweir PS_UnionBodySeen, // Seen completed union body 196cdf0e10cSrcweir 197cdf0e10cSrcweir PS_EnumSeen, // Seen an ENUM keyword 198cdf0e10cSrcweir PS_EnumIDSeen, // Seen the enum ID 199cdf0e10cSrcweir PS_EnumSqSeen, // Seen '{' for enum 200cdf0e10cSrcweir PS_EnumQsSeen, // Seen '}' for enum 201cdf0e10cSrcweir PS_EnumBodySeen, // Seen complete enum body 202cdf0e10cSrcweir PS_EnumCommaSeen, // Seen ',' in list of enumerators 203cdf0e10cSrcweir 204cdf0e10cSrcweir PS_SequenceSeen, // Seen a SEQUENCE keyword 205cdf0e10cSrcweir PS_SequenceSqSeen, // Seen '<' for sequence 206cdf0e10cSrcweir PS_SequenceQsSeen, // Seen '>' for sequence 207cdf0e10cSrcweir PS_SequenceTypeSeen, // Seen type decl for sequence 208cdf0e10cSrcweir 209cdf0e10cSrcweir PS_ArrayIDSeen, // Seen array ID 210cdf0e10cSrcweir PS_ArrayTypeSeen, // Seen array type 211cdf0e10cSrcweir PS_ArrayCompleted, // Seen completed array declaration 212cdf0e10cSrcweir PS_DimSqSeen, // Seen '[' for array dimension 213cdf0e10cSrcweir PS_DimQsSeen, // Seen ']' for array dimension 214cdf0e10cSrcweir PS_DimExprSeen, // Seen size expression for array dimension 215cdf0e10cSrcweir 216cdf0e10cSrcweir 217cdf0e10cSrcweir PS_FlagHeaderSeen, // Seen the attribute|property|interface member head 218cdf0e10cSrcweir PS_AttrSeen, // Seen ATTRIBUTE keyword 219cdf0e10cSrcweir PS_AttrTypeSeen, // Seen type decl for attribute 220cdf0e10cSrcweir PS_AttrCompleted, // Seen complete attribute declaration 221cdf0e10cSrcweir PS_ReadOnlySeen, // Seen READONLY keyword 222cdf0e10cSrcweir PS_OptionalSeen, // Seen OPTIONAL keyword 223cdf0e10cSrcweir PS_MayBeVoidSeen, // Seen MAYBEVOID yword 224cdf0e10cSrcweir PS_BoundSeen, // Seen BOUND keyword 225cdf0e10cSrcweir PS_ConstrainedSeen, // Seen CONSTRAINED keyword 226cdf0e10cSrcweir PS_TransientSeen, // Seen TRANSIENT keyword 227cdf0e10cSrcweir PS_MayBeAmbigiousSeen, // Seen MAYBEAMBIGIOUS keyword 228cdf0e10cSrcweir PS_MayBeDefaultSeen, // Seen MAYBEDEFAULT keyword 229cdf0e10cSrcweir PS_RemoveableSeen, // Seen REMOVEABLE keyword 230cdf0e10cSrcweir 231cdf0e10cSrcweir PS_PropertySeen, // Seen PROPERTY keyword 232cdf0e10cSrcweir PS_PropertyTypeSeen, // Seen type decl for property 233cdf0e10cSrcweir PS_PropertyCompleted, // Seen complete property declaration 234cdf0e10cSrcweir 235cdf0e10cSrcweir PS_ExceptSeen, // Seen EXCEPTION keyword 236cdf0e10cSrcweir PS_ExceptHeaderSeen, // Seen exception header keyword 237cdf0e10cSrcweir PS_ExceptIDSeen, // Seen exception identifier 238cdf0e10cSrcweir PS_ExceptSqSeen, // Seen '{' for exception 239cdf0e10cSrcweir PS_ExceptQsSeen, // Seen '}' for exception 240cdf0e10cSrcweir PS_ExceptBodySeen, // Seen complete exception body 241cdf0e10cSrcweir 242cdf0e10cSrcweir PS_OpHeadSeen, // Seen the operation head 243cdf0e10cSrcweir PS_OpTypeSeen, // Seen operation return type 244cdf0e10cSrcweir PS_OpIDSeen, // Seen operation ID 245cdf0e10cSrcweir PS_OpParsCompleted, // Completed operation param list 246cdf0e10cSrcweir PS_OpCompleted, // Completed operation statement 247cdf0e10cSrcweir PS_OpSqSeen, // Seen '(' for operation 248cdf0e10cSrcweir PS_OpQsSeen, // Seen ')' for operation 249cdf0e10cSrcweir PS_OpParCommaSeen, // Seen ',' in list of op params 250cdf0e10cSrcweir PS_OpParDirSeen, // Seen parameter direction 251cdf0e10cSrcweir PS_OpParTypeSeen, // Seen parameter type 252cdf0e10cSrcweir PS_OpParDeclSeen, // Seen parameter declaration 253cdf0e10cSrcweir PS_OpOnewaySeen, // Seen ONEWAY keyword 254cdf0e10cSrcweir 255cdf0e10cSrcweir PS_RaiseSeen, // Seen RAISES keyword 256cdf0e10cSrcweir PS_RaiseSqSeen, // Seen '(' for RAISES 257cdf0e10cSrcweir PS_RaiseQsSeen, // Seen ')' for RAISES 258cdf0e10cSrcweir 259cdf0e10cSrcweir PS_DeclsCommaSeen, // Seen ',' in declarators list 260cdf0e10cSrcweir PS_DeclsDeclSeen // Seen complete decl in decls list 261cdf0e10cSrcweir }; 262cdf0e10cSrcweir 263cdf0e10cSrcweir #endif // _IDLC_IDLCTYPES_HXX_ 264cdf0e10cSrcweir 265