178bc99aaSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
378bc99aaSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
478bc99aaSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
578bc99aaSAndrew Rist  * distributed with this work for additional information
678bc99aaSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
778bc99aaSAndrew Rist  * to you under the Apache License, Version 2.0 (the
878bc99aaSAndrew Rist  * "License"); you may not use this file except in compliance
978bc99aaSAndrew Rist  * with the License.  You may obtain a copy of the License at
1078bc99aaSAndrew Rist  *
1178bc99aaSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1278bc99aaSAndrew Rist  *
1378bc99aaSAndrew Rist  * Unless required by applicable law or agreed to in writing,
1478bc99aaSAndrew Rist  * software distributed under the License is distributed on an
1578bc99aaSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1678bc99aaSAndrew Rist  * KIND, either express or implied.  See the License for the
1778bc99aaSAndrew Rist  * specific language governing permissions and limitations
1878bc99aaSAndrew Rist  * under the License.
1978bc99aaSAndrew Rist  *
2078bc99aaSAndrew Rist  *************************************************************/
21cdf0e10cSrcweir 
22cdf0e10cSrcweir #include <precomp.h>
23cdf0e10cSrcweir #include <s2_luidl/pe_iface.hxx>
24cdf0e10cSrcweir 
25cdf0e10cSrcweir 
26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES
27cdf0e10cSrcweir #include <ary/idl/i_interface.hxx>
28cdf0e10cSrcweir #include <ary/idl/i_gate.hxx>
29cdf0e10cSrcweir #include <ary/idl/ip_ce.hxx>
30cdf0e10cSrcweir #include <ary/doc/d_oldidldocu.hxx>
31cdf0e10cSrcweir #include <s2_luidl/pe_func2.hxx>
32cdf0e10cSrcweir #include <s2_luidl/pe_attri.hxx>
33cdf0e10cSrcweir #include <s2_luidl/pe_type2.hxx>
34cdf0e10cSrcweir #include <s2_luidl/tk_keyw.hxx>
35cdf0e10cSrcweir #include <s2_luidl/tk_ident.hxx>
36cdf0e10cSrcweir #include <s2_luidl/tk_punct.hxx>
37cdf0e10cSrcweir #include <adc_cl.hxx>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir 
40cdf0e10cSrcweir 
41cdf0e10cSrcweir namespace csi
42cdf0e10cSrcweir {
43cdf0e10cSrcweir namespace uidl
44cdf0e10cSrcweir {
45cdf0e10cSrcweir 
46cdf0e10cSrcweir #ifdef DF
47cdf0e10cSrcweir #undef DF
48cdf0e10cSrcweir #endif
49cdf0e10cSrcweir #define DF 	&PE_Interface::On_Default
50cdf0e10cSrcweir 
51cdf0e10cSrcweir PE_Interface::F_TOK
52cdf0e10cSrcweir PE_Interface::aDispatcher[PE_Interface::e_STATES_MAX][PE_Interface::tt_MAX] =
53cdf0e10cSrcweir 		{ 	{ DF, DF, DF, DF, DF },  // e_none
54cdf0e10cSrcweir 			{ &PE_Interface::On_need_uik_MetaType,
55cdf0e10cSrcweir 				 DF, DF, DF, DF },  // need_uik
56cdf0e10cSrcweir 			{ DF, &PE_Interface::On_uik_Identifier,
57cdf0e10cSrcweir 					 &PE_Interface::On_uik_Punctuation,
58cdf0e10cSrcweir 						 DF, DF },  // uik
59cdf0e10cSrcweir 			{ &PE_Interface::On_need_ident_MetaType,
60cdf0e10cSrcweir 				 DF, DF, DF, DF },  // need_ident
61cdf0e10cSrcweir 			{ DF, &PE_Interface::On_ident_Identifier,
62cdf0e10cSrcweir 					 &PE_Interface::On_ident_Punctuation,
63cdf0e10cSrcweir 						 DF, DF },  // ident
64cdf0e10cSrcweir 			{ &PE_Interface::On_need_interface_MetaType,
65cdf0e10cSrcweir 				 DF, DF, DF, DF },  // need_interface
66cdf0e10cSrcweir 			{ DF, &PE_Interface::On_need_name_Identifer,
67cdf0e10cSrcweir 					DF, DF, DF },  // need_name
68cdf0e10cSrcweir 			{ DF, DF, &PE_Interface::On_wait_for_base_Punctuation,
69cdf0e10cSrcweir 						DF, DF },  // wait_for_base
70cdf0e10cSrcweir 			{ DF, DF, DF, DF, DF },  // in_base
71cdf0e10cSrcweir 			{ DF, DF, &PE_Interface::On_need_curlbr_open_Punctuation,
72cdf0e10cSrcweir 						  DF, DF },  // need_curlbr_open
73cdf0e10cSrcweir 			{ &PE_Interface::On_std_Metatype,
74cdf0e10cSrcweir 			      &PE_Interface::On_std_GotoFunction,
75cdf0e10cSrcweir 					  &PE_Interface::On_std_Punctuation,
76cdf0e10cSrcweir 						  &PE_Interface::On_std_GotoFunction,
77cdf0e10cSrcweir 							  &PE_Interface::On_std_Stereotype },  // e_std
78cdf0e10cSrcweir 			{ DF, DF, DF, DF, DF },  // in_function
79cdf0e10cSrcweir 			{ DF, DF, DF, DF, DF },  // in_attribute
80cdf0e10cSrcweir 			{ DF, DF, &PE_Interface::On_need_finish_Punctuation,
81cdf0e10cSrcweir 						  DF, DF },  // need_finish
82cdf0e10cSrcweir 			{ DF, DF, DF, DF, DF }   // in_base_interface
83cdf0e10cSrcweir 		};
84cdf0e10cSrcweir 
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 
87cdf0e10cSrcweir inline void
CallHandler(const char * i_sTokenText,E_TokenType i_eTokenType)88cdf0e10cSrcweir PE_Interface::CallHandler( const char *		i_sTokenText,
89cdf0e10cSrcweir 						   E_TokenType		i_eTokenType )
90cdf0e10cSrcweir 	{ (this->*aDispatcher[eState][i_eTokenType])(i_sTokenText); }
91cdf0e10cSrcweir 
92cdf0e10cSrcweir 
93cdf0e10cSrcweir 
PE_Interface()94cdf0e10cSrcweir PE_Interface::PE_Interface()
95cdf0e10cSrcweir 	:	eState(e_none),
96cdf0e10cSrcweir 		sData_Name(),
97cdf0e10cSrcweir 		bIsPreDeclaration(false),
98cdf0e10cSrcweir         pCurInterface(0),
99cdf0e10cSrcweir 		nCurInterface(0),
100cdf0e10cSrcweir 		pPE_Function(0),
101cdf0e10cSrcweir 		pPE_Attribute(0),
102cdf0e10cSrcweir 		pPE_Type(0),
103cdf0e10cSrcweir 		nCurParsed_Base(0),
104cdf0e10cSrcweir 		bOptionalMember(false)
105cdf0e10cSrcweir {
106cdf0e10cSrcweir 	pPE_Function 	= new PE_Function(nCurInterface);
107cdf0e10cSrcweir 	pPE_Type 		= new PE_Type(nCurParsed_Base);
108cdf0e10cSrcweir 	pPE_Attribute   = new PE_Attribute(nCurInterface);
109cdf0e10cSrcweir }
110cdf0e10cSrcweir 
111cdf0e10cSrcweir void
EstablishContacts(UnoIDL_PE * io_pParentPE,ary::Repository & io_rRepository,TokenProcessing_Result & o_rResult)112cdf0e10cSrcweir PE_Interface::EstablishContacts( UnoIDL_PE *				io_pParentPE,
113cdf0e10cSrcweir 								 ary::Repository &		io_rRepository,
114cdf0e10cSrcweir 								 TokenProcessing_Result & 	o_rResult )
115cdf0e10cSrcweir {
116cdf0e10cSrcweir 	UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
117cdf0e10cSrcweir 	pPE_Function->EstablishContacts(this,io_rRepository,o_rResult);
118cdf0e10cSrcweir 	pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
119cdf0e10cSrcweir 	pPE_Attribute->EstablishContacts(this,io_rRepository,o_rResult);
120cdf0e10cSrcweir }
121cdf0e10cSrcweir 
~PE_Interface()122cdf0e10cSrcweir PE_Interface::~PE_Interface()
123cdf0e10cSrcweir {
124cdf0e10cSrcweir }
125cdf0e10cSrcweir 
126cdf0e10cSrcweir void
ProcessToken(const Token & i_rToken)127cdf0e10cSrcweir PE_Interface::ProcessToken( const Token & i_rToken )
128cdf0e10cSrcweir {
129cdf0e10cSrcweir 	i_rToken.Trigger(*this);
130cdf0e10cSrcweir }
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 
133cdf0e10cSrcweir void
Process_MetaType(const TokMetaType & i_rToken)134cdf0e10cSrcweir PE_Interface::Process_MetaType( const TokMetaType &	i_rToken )
135cdf0e10cSrcweir {
136cdf0e10cSrcweir 	CallHandler( i_rToken.Text(), tt_metatype );
137cdf0e10cSrcweir }
138cdf0e10cSrcweir 
139cdf0e10cSrcweir void
Process_Identifier(const TokIdentifier & i_rToken)140cdf0e10cSrcweir PE_Interface::Process_Identifier( const TokIdentifier & i_rToken )
141cdf0e10cSrcweir {
142cdf0e10cSrcweir 	CallHandler( i_rToken.Text(), tt_identifier );
143cdf0e10cSrcweir }
144cdf0e10cSrcweir 
145cdf0e10cSrcweir void
Process_Punctuation(const TokPunctuation & i_rToken)146cdf0e10cSrcweir PE_Interface::Process_Punctuation( const TokPunctuation & i_rToken )
147cdf0e10cSrcweir {
148cdf0e10cSrcweir 	CallHandler( i_rToken.Text(), tt_punctuation );
149cdf0e10cSrcweir }
150cdf0e10cSrcweir 
151cdf0e10cSrcweir void
Process_NameSeparator()152cdf0e10cSrcweir PE_Interface::Process_NameSeparator()
153cdf0e10cSrcweir {
154cdf0e10cSrcweir 	CallHandler( "", tt_startoftype );
155cdf0e10cSrcweir }
156cdf0e10cSrcweir 
157cdf0e10cSrcweir void
Process_BuiltInType(const TokBuiltInType & i_rToken)158cdf0e10cSrcweir PE_Interface::Process_BuiltInType( const TokBuiltInType & i_rToken )
159cdf0e10cSrcweir {
160cdf0e10cSrcweir 	CallHandler( i_rToken.Text(), tt_startoftype );
161cdf0e10cSrcweir }
162cdf0e10cSrcweir 
163cdf0e10cSrcweir void
Process_TypeModifier(const TokTypeModifier & i_rToken)164cdf0e10cSrcweir PE_Interface::Process_TypeModifier( const TokTypeModifier & i_rToken )
165cdf0e10cSrcweir {
166cdf0e10cSrcweir 	CallHandler( i_rToken.Text(), tt_startoftype );
167cdf0e10cSrcweir }
168cdf0e10cSrcweir 
169cdf0e10cSrcweir void
Process_Stereotype(const TokStereotype & i_rToken)170cdf0e10cSrcweir PE_Interface::Process_Stereotype( const TokStereotype & i_rToken )
171cdf0e10cSrcweir {
172cdf0e10cSrcweir 	CallHandler( i_rToken.Text(), tt_stereotype );
173cdf0e10cSrcweir }
174cdf0e10cSrcweir 
175cdf0e10cSrcweir void
Process_Default()176cdf0e10cSrcweir PE_Interface::Process_Default()
177cdf0e10cSrcweir {
178cdf0e10cSrcweir 	SetResult(done, stay);
179cdf0e10cSrcweir }
180cdf0e10cSrcweir 
181cdf0e10cSrcweir 
182cdf0e10cSrcweir void
On_need_uik_MetaType(const char *)183cdf0e10cSrcweir PE_Interface::On_need_uik_MetaType(const char *)
184cdf0e10cSrcweir {
185cdf0e10cSrcweir     // Deprecated, data will be ignored
186cdf0e10cSrcweir 	SetResult(done, stay);
187cdf0e10cSrcweir 	eState = uik;
188cdf0e10cSrcweir }
189cdf0e10cSrcweir 
190cdf0e10cSrcweir void
On_uik_Identifier(const char *)191cdf0e10cSrcweir PE_Interface::On_uik_Identifier(const char *)
192cdf0e10cSrcweir {
193cdf0e10cSrcweir     // Deprecated, data will be ignored
194cdf0e10cSrcweir 	SetResult(done, stay);
195cdf0e10cSrcweir }
196cdf0e10cSrcweir 
197cdf0e10cSrcweir void
On_uik_Punctuation(const char * i_sText)198cdf0e10cSrcweir PE_Interface::On_uik_Punctuation(const char * i_sText)
199cdf0e10cSrcweir {
200cdf0e10cSrcweir     // Deprecated, data will be ignored
201cdf0e10cSrcweir 	SetResult(done, stay);
202cdf0e10cSrcweir 	if (strcmp(",",i_sText) == 0)
203cdf0e10cSrcweir 	{
204cdf0e10cSrcweir 		eState = need_ident;
205cdf0e10cSrcweir 	}
206cdf0e10cSrcweir }
207cdf0e10cSrcweir 
208cdf0e10cSrcweir void
On_need_ident_MetaType(const char *)209cdf0e10cSrcweir PE_Interface::On_need_ident_MetaType(const char *)
210cdf0e10cSrcweir {
211cdf0e10cSrcweir 	SetResult(done, stay);
212cdf0e10cSrcweir 	eState = ident;
213cdf0e10cSrcweir }
214cdf0e10cSrcweir 
215cdf0e10cSrcweir void
On_ident_Identifier(const char *)216cdf0e10cSrcweir PE_Interface::On_ident_Identifier(const char *)
217cdf0e10cSrcweir {
218cdf0e10cSrcweir 	SetResult(done, stay);
219cdf0e10cSrcweir }
220cdf0e10cSrcweir 
221cdf0e10cSrcweir void
On_ident_Punctuation(const char * i_sText)222cdf0e10cSrcweir PE_Interface::On_ident_Punctuation(const char * i_sText)
223cdf0e10cSrcweir {
224cdf0e10cSrcweir 	SetResult(done, stay);
225cdf0e10cSrcweir 	if (strcmp(")",i_sText) == 0)
226cdf0e10cSrcweir 	{
227cdf0e10cSrcweir 		eState = need_interface;
228cdf0e10cSrcweir 	}
229cdf0e10cSrcweir }
230cdf0e10cSrcweir 
231cdf0e10cSrcweir void
On_need_interface_MetaType(const char *)232cdf0e10cSrcweir PE_Interface::On_need_interface_MetaType(const char *)
233cdf0e10cSrcweir {
234cdf0e10cSrcweir 	SetResult(done, stay);
235cdf0e10cSrcweir 	eState = need_name;
236cdf0e10cSrcweir }
237cdf0e10cSrcweir 
238cdf0e10cSrcweir void
On_need_name_Identifer(const char * i_sText)239cdf0e10cSrcweir PE_Interface::On_need_name_Identifer(const char * i_sText)
240cdf0e10cSrcweir {
241cdf0e10cSrcweir 	SetResult(done, stay);
242cdf0e10cSrcweir 	sData_Name = i_sText;
243cdf0e10cSrcweir 	eState = wait_for_base;
244cdf0e10cSrcweir }
245cdf0e10cSrcweir 
246cdf0e10cSrcweir void
On_wait_for_base_Punctuation(const char * i_sText)247cdf0e10cSrcweir PE_Interface::On_wait_for_base_Punctuation(const char * i_sText)
248cdf0e10cSrcweir {
249cdf0e10cSrcweir 	if (i_sText[0] != ';')
250cdf0e10cSrcweir 	{
251cdf0e10cSrcweir 		switch (i_sText[0])
252cdf0e10cSrcweir 		{
253cdf0e10cSrcweir 			case ':':
254cdf0e10cSrcweir 				SetResult(done, push_sure, pPE_Type.Ptr());
255cdf0e10cSrcweir 				eState = in_base;
256cdf0e10cSrcweir 				break;
257cdf0e10cSrcweir 			case '{':
258cdf0e10cSrcweir                 store_Interface();
259cdf0e10cSrcweir 
260cdf0e10cSrcweir 				SetResult(done,stay);
261cdf0e10cSrcweir 				eState = e_std;
262cdf0e10cSrcweir 				break;
263cdf0e10cSrcweir 			default:
264cdf0e10cSrcweir 				SetResult(not_done, pop_failure);
265cdf0e10cSrcweir                 eState = e_none;
266cdf0e10cSrcweir 		}	// end switch
267cdf0e10cSrcweir 	}
268cdf0e10cSrcweir 	else
269cdf0e10cSrcweir 	{
270cdf0e10cSrcweir 		bIsPreDeclaration = true;
271cdf0e10cSrcweir 		SetResult(done, pop_success);
272cdf0e10cSrcweir 		eState = e_none;
273cdf0e10cSrcweir 	}
274cdf0e10cSrcweir }
275cdf0e10cSrcweir 
276cdf0e10cSrcweir void
On_need_curlbr_open_Punctuation(const char * i_sText)277cdf0e10cSrcweir PE_Interface::On_need_curlbr_open_Punctuation(const char * i_sText)
278cdf0e10cSrcweir {
279cdf0e10cSrcweir 	if (i_sText[0] == '{')
280cdf0e10cSrcweir 	{
281cdf0e10cSrcweir         store_Interface();
282cdf0e10cSrcweir 
283cdf0e10cSrcweir 		SetResult(done, stay);
284cdf0e10cSrcweir 		eState = e_std;
285cdf0e10cSrcweir 	}
286cdf0e10cSrcweir 	else {
287cdf0e10cSrcweir     	csv_assert(false);
288cdf0e10cSrcweir     }
289cdf0e10cSrcweir }
290cdf0e10cSrcweir 
291cdf0e10cSrcweir 
292cdf0e10cSrcweir void
On_std_Metatype(const char * i_sText)293cdf0e10cSrcweir PE_Interface::On_std_Metatype(const char * i_sText)
294cdf0e10cSrcweir {
295cdf0e10cSrcweir     if (strcmp(i_sText,"attribute") ==  0)
296cdf0e10cSrcweir     	On_std_GotoAttribute(i_sText);
297cdf0e10cSrcweir     else if (strcmp(i_sText,"interface") ==  0)
298cdf0e10cSrcweir         On_std_GotoBaseInterface(i_sText);
299cdf0e10cSrcweir     else
300cdf0e10cSrcweir         On_std_GotoFunction(i_sText);
301cdf0e10cSrcweir }
302cdf0e10cSrcweir 
303cdf0e10cSrcweir void
On_std_Punctuation(const char * i_sText)304cdf0e10cSrcweir PE_Interface::On_std_Punctuation(const char * i_sText)
305cdf0e10cSrcweir {
306cdf0e10cSrcweir 	switch (i_sText[0])
307cdf0e10cSrcweir 	{
308cdf0e10cSrcweir 		case '}':
309cdf0e10cSrcweir 			SetResult(done, stay);
310cdf0e10cSrcweir 			eState = need_finish;
311cdf0e10cSrcweir 			break;
312cdf0e10cSrcweir 		case ';':   // Appears after base interface declarations.
313cdf0e10cSrcweir 			SetResult(done, stay);
314cdf0e10cSrcweir 			break;
315cdf0e10cSrcweir 		default:
316cdf0e10cSrcweir 			SetResult(not_done, pop_failure);
317cdf0e10cSrcweir 			eState = e_none;
318cdf0e10cSrcweir 	}	// end switch
319cdf0e10cSrcweir }
320cdf0e10cSrcweir 
321cdf0e10cSrcweir void
On_std_Stereotype(const char * i_sText)322cdf0e10cSrcweir PE_Interface::On_std_Stereotype(const char * i_sText)
323cdf0e10cSrcweir {
324cdf0e10cSrcweir     if (strcmp(i_sText,"oneway") ==  0)
325cdf0e10cSrcweir     	On_std_GotoFunction(i_sText);
326cdf0e10cSrcweir     else if (    strcmp(i_sText,"readonly") ==  0
327cdf0e10cSrcweir               OR strcmp(i_sText,"bound") ==  0 )
328cdf0e10cSrcweir         On_std_GotoAttribute(i_sText);
329cdf0e10cSrcweir     else if (strcmp(i_sText,"optional") ==  0)
330cdf0e10cSrcweir     {
331cdf0e10cSrcweir         bOptionalMember = true;
332cdf0e10cSrcweir         SetResult(done, stay);
333cdf0e10cSrcweir     }
334cdf0e10cSrcweir     else
335cdf0e10cSrcweir     	SetResult(not_done, pop_failure);
336cdf0e10cSrcweir }
337cdf0e10cSrcweir 
338cdf0e10cSrcweir void
On_std_GotoFunction(const char *)339cdf0e10cSrcweir PE_Interface::On_std_GotoFunction(const char * )
340cdf0e10cSrcweir {
341cdf0e10cSrcweir 	SetResult(not_done, push_sure, pPE_Function.Ptr());
342cdf0e10cSrcweir 	eState = in_function;
343cdf0e10cSrcweir }
344cdf0e10cSrcweir 
345cdf0e10cSrcweir void
On_std_GotoAttribute(const char *)346cdf0e10cSrcweir PE_Interface::On_std_GotoAttribute(const char * )
347cdf0e10cSrcweir {
348cdf0e10cSrcweir     	SetResult(not_done, push_sure, pPE_Attribute.Ptr());
349cdf0e10cSrcweir 	    eState = in_attribute;
350cdf0e10cSrcweir }
351cdf0e10cSrcweir 
352cdf0e10cSrcweir void
On_std_GotoBaseInterface(const char *)353cdf0e10cSrcweir PE_Interface::On_std_GotoBaseInterface(const char * )
354cdf0e10cSrcweir {
355cdf0e10cSrcweir    	SetResult(done, push_sure, pPE_Type.Ptr());
356cdf0e10cSrcweir     eState = in_base_interface;
357cdf0e10cSrcweir }
358cdf0e10cSrcweir 
359cdf0e10cSrcweir void
On_need_finish_Punctuation(const char * i_sText)360cdf0e10cSrcweir PE_Interface::On_need_finish_Punctuation(const char * i_sText)
361cdf0e10cSrcweir {
362cdf0e10cSrcweir 	switch (i_sText[0])
363cdf0e10cSrcweir 	{
364cdf0e10cSrcweir 		case ';':
365cdf0e10cSrcweir 			SetResult(done, pop_success);
366cdf0e10cSrcweir 			eState = e_none;
367cdf0e10cSrcweir 			break;
368cdf0e10cSrcweir 		default:
369cdf0e10cSrcweir 			SetResult(not_done, pop_failure);
370cdf0e10cSrcweir 			eState = e_none;
371cdf0e10cSrcweir 	}	// end switch
372cdf0e10cSrcweir }
373cdf0e10cSrcweir 
374cdf0e10cSrcweir void
On_Default(const char *)375cdf0e10cSrcweir PE_Interface::On_Default(const char *)
376cdf0e10cSrcweir {
377cdf0e10cSrcweir 	SetResult(not_done, pop_failure);
378cdf0e10cSrcweir }
379cdf0e10cSrcweir 
380cdf0e10cSrcweir void
InitData()381cdf0e10cSrcweir PE_Interface::InitData()
382cdf0e10cSrcweir {
383cdf0e10cSrcweir 	eState = need_interface;
384cdf0e10cSrcweir 
385cdf0e10cSrcweir 	sData_Name.clear();
386cdf0e10cSrcweir 	bIsPreDeclaration = false;
387cdf0e10cSrcweir 	pCurInterface = 0;
388cdf0e10cSrcweir 	nCurInterface = 0;
389cdf0e10cSrcweir 	nCurParsed_Base = 0;
390cdf0e10cSrcweir 	bOptionalMember = false;
391cdf0e10cSrcweir }
392cdf0e10cSrcweir 
393cdf0e10cSrcweir void
TransferData()394cdf0e10cSrcweir PE_Interface::TransferData()
395cdf0e10cSrcweir {
396cdf0e10cSrcweir 	if (NOT bIsPreDeclaration)
397cdf0e10cSrcweir 	{
398*a0d53b35SJürgen Schmidt 		csv_assert(!sData_Name.empty());
399cdf0e10cSrcweir 		csv_assert(nCurInterface.IsValid());
400cdf0e10cSrcweir 	}
401cdf0e10cSrcweir 	else
402cdf0e10cSrcweir     {
403cdf0e10cSrcweir      	sData_Name.clear();
404cdf0e10cSrcweir      	pCurInterface = 0;
405cdf0e10cSrcweir         nCurInterface = 0;
406cdf0e10cSrcweir     }
407cdf0e10cSrcweir 
408cdf0e10cSrcweir 	eState = e_none;
409cdf0e10cSrcweir }
410cdf0e10cSrcweir 
411cdf0e10cSrcweir void
ReceiveData()412cdf0e10cSrcweir PE_Interface::ReceiveData()
413cdf0e10cSrcweir {
414cdf0e10cSrcweir 	switch (eState)
415cdf0e10cSrcweir     {
416cdf0e10cSrcweir 		case in_base:
417cdf0e10cSrcweir 				eState = need_curlbr_open;
418cdf0e10cSrcweir 				break;
419cdf0e10cSrcweir 		case in_function:
420cdf0e10cSrcweir 				eState = e_std;
421cdf0e10cSrcweir 				break;
422cdf0e10cSrcweir 		case in_attribute:
423cdf0e10cSrcweir 				eState = e_std;
424cdf0e10cSrcweir 				break;
425cdf0e10cSrcweir 		case in_base_interface:
426cdf0e10cSrcweir 				if (bOptionalMember)
427cdf0e10cSrcweir 				{
428cdf0e10cSrcweir 					pPE_Type->SetOptional();
429cdf0e10cSrcweir 					bOptionalMember = false;
430cdf0e10cSrcweir 				}
431cdf0e10cSrcweir 				pCurInterface->Add_Base(
432cdf0e10cSrcweir 						            nCurParsed_Base,
433cdf0e10cSrcweir                                     pPE_Type->ReleaseDocu());
434cdf0e10cSrcweir 				nCurParsed_Base = 0;
435cdf0e10cSrcweir 				eState = e_std;
436cdf0e10cSrcweir 				break;
437cdf0e10cSrcweir 		default:
438cdf0e10cSrcweir 			csv_assert(false);
439cdf0e10cSrcweir 	}
440cdf0e10cSrcweir }
441cdf0e10cSrcweir 
442cdf0e10cSrcweir UnoIDL_PE &
MyPE()443cdf0e10cSrcweir PE_Interface::MyPE()
444cdf0e10cSrcweir {
445cdf0e10cSrcweir  	return *this;
446cdf0e10cSrcweir }
447cdf0e10cSrcweir 
448cdf0e10cSrcweir void
store_Interface()449cdf0e10cSrcweir PE_Interface::store_Interface()
450cdf0e10cSrcweir {
451cdf0e10cSrcweir     pCurInterface = & Gate().Ces().Store_Interface(
452cdf0e10cSrcweir                                         CurNamespace().CeId(),
453cdf0e10cSrcweir                                         sData_Name,
454cdf0e10cSrcweir                                         nCurParsed_Base );
455cdf0e10cSrcweir     nCurInterface = pCurInterface->CeId();
456cdf0e10cSrcweir 	PassDocuAt(*pCurInterface);
457cdf0e10cSrcweir }
458cdf0e10cSrcweir 
459cdf0e10cSrcweir 
460cdf0e10cSrcweir }   // namespace uidl
461cdf0e10cSrcweir }   // namespace csi
462