xref: /trunk/main/idlc/inc/idlc/idlctypes.hxx (revision f04bd1c4)
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