1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski #include <precomp.h>
23*b1cdbd2cSJim Jagielski #include "pe_funct.hxx"
24*b1cdbd2cSJim Jagielski
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski // NOT FULLY DEFINED SERVICES
27*b1cdbd2cSJim Jagielski #include <cosv/tpl/tpltools.hxx>
28*b1cdbd2cSJim Jagielski #include <ary/cpp/c_gate.hxx>
29*b1cdbd2cSJim Jagielski #include <ary/cpp/c_funct.hxx>
30*b1cdbd2cSJim Jagielski #include <ary/cpp/c_type.hxx>
31*b1cdbd2cSJim Jagielski #include <ary/cpp/cp_ce.hxx>
32*b1cdbd2cSJim Jagielski #include <ary/cpp/cp_type.hxx>
33*b1cdbd2cSJim Jagielski #include <ary/cpp/inpcontx.hxx>
34*b1cdbd2cSJim Jagielski #include "pe_type.hxx"
35*b1cdbd2cSJim Jagielski #include "pe_param.hxx"
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski
39*b1cdbd2cSJim Jagielski
40*b1cdbd2cSJim Jagielski namespace cpp
41*b1cdbd2cSJim Jagielski {
42*b1cdbd2cSJim Jagielski
43*b1cdbd2cSJim Jagielski
44*b1cdbd2cSJim Jagielski inline void
PerformFinishingPunctuation()45*b1cdbd2cSJim Jagielski PE_Function::PerformFinishingPunctuation()
46*b1cdbd2cSJim Jagielski {
47*b1cdbd2cSJim Jagielski SetTokenResult(not_done,pop_success);
48*b1cdbd2cSJim Jagielski }
49*b1cdbd2cSJim Jagielski
50*b1cdbd2cSJim Jagielski
PE_Function(Cpp_PE * i_pParent)51*b1cdbd2cSJim Jagielski PE_Function::PE_Function( Cpp_PE * i_pParent )
52*b1cdbd2cSJim Jagielski : Cpp_PE(i_pParent),
53*b1cdbd2cSJim Jagielski pStati( new PeStatusArray<PE_Function> ),
54*b1cdbd2cSJim Jagielski // pSpParameter,
55*b1cdbd2cSJim Jagielski // pSpuParameter,
56*b1cdbd2cSJim Jagielski // pSpType,
57*b1cdbd2cSJim Jagielski // pSpuException,
58*b1cdbd2cSJim Jagielski // pSpuCastOperatorType,
59*b1cdbd2cSJim Jagielski nResult(0),
60*b1cdbd2cSJim Jagielski bResult_WithImplementation(false),
61*b1cdbd2cSJim Jagielski aName(60),
62*b1cdbd2cSJim Jagielski eVirtuality(ary::cpp::VIRTUAL_none),
63*b1cdbd2cSJim Jagielski eConVol(ary::cpp::CONVOL_none),
64*b1cdbd2cSJim Jagielski // aFlags,
65*b1cdbd2cSJim Jagielski nReturnType(0),
66*b1cdbd2cSJim Jagielski // aParameters
67*b1cdbd2cSJim Jagielski // aExceptions,
68*b1cdbd2cSJim Jagielski bThrow(false),
69*b1cdbd2cSJim Jagielski nBracketCounterInImplementation(0)
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski Setup_StatusFunctions();
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim Jagielski pSpParameter = new SP_Parameter(*this);
74*b1cdbd2cSJim Jagielski pSpType = new SP_Type(*this);
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski pSpuParameter = new SPU_Parameter(*pSpParameter, 0, &PE_Function::SpReturn_Parameter);
77*b1cdbd2cSJim Jagielski pSpuException = new SPU_Type(*pSpType, 0, &PE_Function::SpReturn_Exception);
78*b1cdbd2cSJim Jagielski pSpuCastOperatorType = new SPU_Type(*pSpType, &PE_Function::SpInit_CastOperatorType, &PE_Function::SpReturn_CastOperatorType);
79*b1cdbd2cSJim Jagielski }
80*b1cdbd2cSJim Jagielski
~PE_Function()81*b1cdbd2cSJim Jagielski PE_Function::~PE_Function()
82*b1cdbd2cSJim Jagielski {
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski }
85*b1cdbd2cSJim Jagielski
86*b1cdbd2cSJim Jagielski void
Init_Std(const String & i_sName,ary::cpp::Type_id i_nReturnType,bool i_bVirtual,ary::cpp::FunctionFlags i_aFlags)87*b1cdbd2cSJim Jagielski PE_Function::Init_Std( const String & i_sName,
88*b1cdbd2cSJim Jagielski ary::cpp::Type_id i_nReturnType,
89*b1cdbd2cSJim Jagielski bool i_bVirtual,
90*b1cdbd2cSJim Jagielski ary::cpp::FunctionFlags i_aFlags )
91*b1cdbd2cSJim Jagielski {
92*b1cdbd2cSJim Jagielski aName << i_sName;
93*b1cdbd2cSJim Jagielski eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none;
94*b1cdbd2cSJim Jagielski aFlags = i_aFlags;
95*b1cdbd2cSJim Jagielski nReturnType = i_nReturnType;
96*b1cdbd2cSJim Jagielski pStati->SetCur(afterName);
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski void
Init_Ctor(const String & i_sName,ary::cpp::FunctionFlags i_aFlags)100*b1cdbd2cSJim Jagielski PE_Function::Init_Ctor( const String & i_sName,
101*b1cdbd2cSJim Jagielski ary::cpp::FunctionFlags i_aFlags )
102*b1cdbd2cSJim Jagielski {
103*b1cdbd2cSJim Jagielski aName << i_sName;
104*b1cdbd2cSJim Jagielski eVirtuality = ary::cpp::VIRTUAL_none;
105*b1cdbd2cSJim Jagielski aFlags = i_aFlags;
106*b1cdbd2cSJim Jagielski nReturnType = 0;
107*b1cdbd2cSJim Jagielski pStati->SetCur(afterName);
108*b1cdbd2cSJim Jagielski }
109*b1cdbd2cSJim Jagielski
110*b1cdbd2cSJim Jagielski void
Init_Dtor(const String & i_sName,bool i_bVirtual,ary::cpp::FunctionFlags i_aFlags)111*b1cdbd2cSJim Jagielski PE_Function::Init_Dtor( const String & i_sName,
112*b1cdbd2cSJim Jagielski bool i_bVirtual,
113*b1cdbd2cSJim Jagielski ary::cpp::FunctionFlags i_aFlags )
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski aName << "~" << i_sName;
116*b1cdbd2cSJim Jagielski eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none;
117*b1cdbd2cSJim Jagielski aFlags = i_aFlags;
118*b1cdbd2cSJim Jagielski nReturnType = 0;
119*b1cdbd2cSJim Jagielski pStati->SetCur(afterName);
120*b1cdbd2cSJim Jagielski }
121*b1cdbd2cSJim Jagielski
122*b1cdbd2cSJim Jagielski void
Init_CastOperator(bool i_bVirtual,ary::cpp::FunctionFlags i_aFlags)123*b1cdbd2cSJim Jagielski PE_Function::Init_CastOperator( bool i_bVirtual,
124*b1cdbd2cSJim Jagielski ary::cpp::FunctionFlags i_aFlags )
125*b1cdbd2cSJim Jagielski {
126*b1cdbd2cSJim Jagielski aName << "operator ";
127*b1cdbd2cSJim Jagielski eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none;
128*b1cdbd2cSJim Jagielski aFlags = i_aFlags;
129*b1cdbd2cSJim Jagielski nReturnType = 0;
130*b1cdbd2cSJim Jagielski pStati->SetCur(afterCastOperator);
131*b1cdbd2cSJim Jagielski }
132*b1cdbd2cSJim Jagielski
133*b1cdbd2cSJim Jagielski void
Init_NormalOperator(ary::cpp::Type_id i_nReturnType,bool i_bVirtual,ary::cpp::FunctionFlags i_aFlags)134*b1cdbd2cSJim Jagielski PE_Function::Init_NormalOperator( ary::cpp::Type_id i_nReturnType,
135*b1cdbd2cSJim Jagielski bool i_bVirtual,
136*b1cdbd2cSJim Jagielski ary::cpp::FunctionFlags i_aFlags )
137*b1cdbd2cSJim Jagielski {
138*b1cdbd2cSJim Jagielski aName << "operator";
139*b1cdbd2cSJim Jagielski eVirtuality = i_bVirtual ? ary::cpp::VIRTUAL_virtual : ary::cpp::VIRTUAL_none;
140*b1cdbd2cSJim Jagielski aFlags = i_aFlags;
141*b1cdbd2cSJim Jagielski nReturnType = i_nReturnType;
142*b1cdbd2cSJim Jagielski pStati->SetCur(afterStdOperator);
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski
145*b1cdbd2cSJim Jagielski ary::cpp::Ce_id
Result_Id() const146*b1cdbd2cSJim Jagielski PE_Function::Result_Id() const
147*b1cdbd2cSJim Jagielski {
148*b1cdbd2cSJim Jagielski return nResult;
149*b1cdbd2cSJim Jagielski }
150*b1cdbd2cSJim Jagielski
151*b1cdbd2cSJim Jagielski void
Call_Handler(const cpp::Token & i_rTok)152*b1cdbd2cSJim Jagielski PE_Function::Call_Handler( const cpp::Token & i_rTok )
153*b1cdbd2cSJim Jagielski {
154*b1cdbd2cSJim Jagielski pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
155*b1cdbd2cSJim Jagielski }
156*b1cdbd2cSJim Jagielski
157*b1cdbd2cSJim Jagielski void
Setup_StatusFunctions()158*b1cdbd2cSJim Jagielski PE_Function::Setup_StatusFunctions()
159*b1cdbd2cSJim Jagielski {
160*b1cdbd2cSJim Jagielski typedef CallFunction<PE_Function>::F_Tok F_Tok;
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski static F_Tok stateF_afterStdOperator[] =
163*b1cdbd2cSJim Jagielski { &PE_Function::On_afterOperator_Std_Operator,
164*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Std_LeftBracket,
165*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Std_LeftBracket,
166*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Std_Operator,
167*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Std_Operator,
168*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Std_Operator,
169*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Std_Operator,
170*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Std_Operator,
171*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Std_Operator };
172*b1cdbd2cSJim Jagielski static INT16 stateT_afterStdOperator[] =
173*b1cdbd2cSJim Jagielski { Tid_Operator,
174*b1cdbd2cSJim Jagielski Tid_ArrayBracket_Left,
175*b1cdbd2cSJim Jagielski Tid_Bracket_Left,
176*b1cdbd2cSJim Jagielski Tid_Comma,
177*b1cdbd2cSJim Jagielski Tid_Assign,
178*b1cdbd2cSJim Jagielski Tid_Less,
179*b1cdbd2cSJim Jagielski Tid_Greater,
180*b1cdbd2cSJim Jagielski Tid_Asterix,
181*b1cdbd2cSJim Jagielski Tid_AmpersAnd };
182*b1cdbd2cSJim Jagielski
183*b1cdbd2cSJim Jagielski static F_Tok stateF_afterStdOperatorLeftBracket[] =
184*b1cdbd2cSJim Jagielski { &PE_Function::On_afterStdOperatorLeftBracket_RightBracket,
185*b1cdbd2cSJim Jagielski &PE_Function::On_afterStdOperatorLeftBracket_RightBracket };
186*b1cdbd2cSJim Jagielski static INT16 stateT_afterStdOperatorLeftBracket[] =
187*b1cdbd2cSJim Jagielski { Tid_ArrayBracket_Right,
188*b1cdbd2cSJim Jagielski Tid_Bracket_Right };
189*b1cdbd2cSJim Jagielski
190*b1cdbd2cSJim Jagielski static F_Tok stateF_afterCastOperator[] =
191*b1cdbd2cSJim Jagielski { &PE_Function::On_afterOperator_Cast_Type,
192*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Cast_Type,
193*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Cast_Type,
194*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Cast_Type,
195*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Cast_Type,
196*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Cast_Type,
197*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Cast_Type,
198*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Cast_Type,
199*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Cast_Type,
200*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Cast_Type,
201*b1cdbd2cSJim Jagielski &PE_Function::On_afterOperator_Cast_Type };
202*b1cdbd2cSJim Jagielski static INT16 stateT_afterCastOperator[] =
203*b1cdbd2cSJim Jagielski { Tid_Identifier,
204*b1cdbd2cSJim Jagielski Tid_class,
205*b1cdbd2cSJim Jagielski Tid_struct,
206*b1cdbd2cSJim Jagielski Tid_union,
207*b1cdbd2cSJim Jagielski Tid_enum,
208*b1cdbd2cSJim Jagielski Tid_const,
209*b1cdbd2cSJim Jagielski Tid_volatile,
210*b1cdbd2cSJim Jagielski Tid_DoubleColon,
211*b1cdbd2cSJim Jagielski Tid_typename,
212*b1cdbd2cSJim Jagielski Tid_BuiltInType,
213*b1cdbd2cSJim Jagielski Tid_TypeSpecializer };
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski static F_Tok stateF_afterName[] = { &PE_Function::On_afterName_Bracket_Left };
216*b1cdbd2cSJim Jagielski static INT16 stateT_afterName[] = { Tid_Bracket_Left };
217*b1cdbd2cSJim Jagielski
218*b1cdbd2cSJim Jagielski static F_Tok stateF_expectParameterSeparator[] =
219*b1cdbd2cSJim Jagielski { &PE_Function::On_expectParameterSeparator_BracketRight,
220*b1cdbd2cSJim Jagielski &PE_Function::On_expectParameterSeparator_Comma };
221*b1cdbd2cSJim Jagielski static INT16 stateT_expectParameterSeparator[] =
222*b1cdbd2cSJim Jagielski { Tid_Bracket_Right,
223*b1cdbd2cSJim Jagielski Tid_Comma };
224*b1cdbd2cSJim Jagielski
225*b1cdbd2cSJim Jagielski static F_Tok stateF_afterParameters[] = { &PE_Function::On_afterParameters_const,
226*b1cdbd2cSJim Jagielski &PE_Function::On_afterParameters_volatile,
227*b1cdbd2cSJim Jagielski &PE_Function::On_afterParameters_throw,
228*b1cdbd2cSJim Jagielski &PE_Function::On_afterParameters_SwBracket_Left,
229*b1cdbd2cSJim Jagielski &PE_Function::On_afterParameters_Semicolon,
230*b1cdbd2cSJim Jagielski &PE_Function::On_afterParameters_Comma,
231*b1cdbd2cSJim Jagielski &PE_Function::On_afterParameters_Colon,
232*b1cdbd2cSJim Jagielski &PE_Function::On_afterParameters_Assign };
233*b1cdbd2cSJim Jagielski static INT16 stateT_afterParameters[] = { Tid_const,
234*b1cdbd2cSJim Jagielski Tid_volatile,
235*b1cdbd2cSJim Jagielski Tid_throw,
236*b1cdbd2cSJim Jagielski Tid_SwBracket_Left,
237*b1cdbd2cSJim Jagielski Tid_Semicolon,
238*b1cdbd2cSJim Jagielski Tid_Comma,
239*b1cdbd2cSJim Jagielski Tid_Colon,
240*b1cdbd2cSJim Jagielski Tid_Assign };
241*b1cdbd2cSJim Jagielski
242*b1cdbd2cSJim Jagielski static F_Tok stateF_afterThrow[] = { &PE_Function::On_afterThrow_Bracket_Left };
243*b1cdbd2cSJim Jagielski static INT16 stateT_afterThrow[] = { Tid_Bracket_Left };
244*b1cdbd2cSJim Jagielski
245*b1cdbd2cSJim Jagielski static F_Tok stateF_expectExceptionSeparator[] =
246*b1cdbd2cSJim Jagielski { &PE_Function::On_expectExceptionSeparator_BracketRight,
247*b1cdbd2cSJim Jagielski &PE_Function::On_expectExceptionSeparator_Comma };
248*b1cdbd2cSJim Jagielski static INT16 stateT_expectExceptionSeparator[] =
249*b1cdbd2cSJim Jagielski { Tid_Bracket_Right,
250*b1cdbd2cSJim Jagielski Tid_Comma };
251*b1cdbd2cSJim Jagielski
252*b1cdbd2cSJim Jagielski static F_Tok stateF_afterExceptions[] = { &PE_Function::On_afterExceptions_SwBracket_Left,
253*b1cdbd2cSJim Jagielski &PE_Function::On_afterExceptions_Semicolon,
254*b1cdbd2cSJim Jagielski &PE_Function::On_afterExceptions_Comma,
255*b1cdbd2cSJim Jagielski &PE_Function::On_afterExceptions_Colon,
256*b1cdbd2cSJim Jagielski &PE_Function::On_afterExceptions_Assign };
257*b1cdbd2cSJim Jagielski static INT16 stateT_afterExceptions[] = { Tid_SwBracket_Left,
258*b1cdbd2cSJim Jagielski Tid_Semicolon,
259*b1cdbd2cSJim Jagielski Tid_Comma,
260*b1cdbd2cSJim Jagielski Tid_Colon,
261*b1cdbd2cSJim Jagielski Tid_Assign };
262*b1cdbd2cSJim Jagielski
263*b1cdbd2cSJim Jagielski static F_Tok stateF_expectZero[] = { &PE_Function::On_expectZero_Constant };
264*b1cdbd2cSJim Jagielski static INT16 stateT_expectZero[] = { Tid_Constant };
265*b1cdbd2cSJim Jagielski
266*b1cdbd2cSJim Jagielski static F_Tok stateF_inImplementation[] =
267*b1cdbd2cSJim Jagielski { &PE_Function::On_inImplementation_SwBracket_Left,
268*b1cdbd2cSJim Jagielski &PE_Function::On_inImplementation_SwBracket_Right };
269*b1cdbd2cSJim Jagielski static INT16 stateT_inImplementation[] =
270*b1cdbd2cSJim Jagielski { Tid_SwBracket_Left,
271*b1cdbd2cSJim Jagielski Tid_SwBracket_Right };
272*b1cdbd2cSJim Jagielski
273*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, afterStdOperator, Hdl_SyntaxError);
274*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, afterStdOperatorLeftBracket, Hdl_SyntaxError);
275*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, afterCastOperator, Hdl_SyntaxError);
276*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, afterName, Hdl_SyntaxError);
277*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, expectParameterSeparator, Hdl_SyntaxError);
278*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, afterParameters, Hdl_SyntaxError);
279*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, afterThrow, Hdl_SyntaxError);
280*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, expectExceptionSeparator, Hdl_SyntaxError);
281*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, afterExceptions, Hdl_SyntaxError);
282*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, expectZero, Hdl_SyntaxError);
283*b1cdbd2cSJim Jagielski SEMPARSE_CREATE_STATUS(PE_Function, inImplementation, On_inImplementation_Default );
284*b1cdbd2cSJim Jagielski }
285*b1cdbd2cSJim Jagielski
286*b1cdbd2cSJim Jagielski void
InitData()287*b1cdbd2cSJim Jagielski PE_Function::InitData()
288*b1cdbd2cSJim Jagielski {
289*b1cdbd2cSJim Jagielski pStati->SetCur( afterName ),
290*b1cdbd2cSJim Jagielski nResult = 0;
291*b1cdbd2cSJim Jagielski bResult_WithImplementation = false;
292*b1cdbd2cSJim Jagielski aName.seekp(0);
293*b1cdbd2cSJim Jagielski eVirtuality = ary::cpp::VIRTUAL_none;
294*b1cdbd2cSJim Jagielski eConVol = ary::cpp::CONVOL_none;
295*b1cdbd2cSJim Jagielski aFlags.Reset();
296*b1cdbd2cSJim Jagielski nReturnType = 0;
297*b1cdbd2cSJim Jagielski csv::erase_container(aParameters);
298*b1cdbd2cSJim Jagielski csv::erase_container(aExceptions);
299*b1cdbd2cSJim Jagielski bThrow = false;
300*b1cdbd2cSJim Jagielski }
301*b1cdbd2cSJim Jagielski
302*b1cdbd2cSJim Jagielski void
TransferData()303*b1cdbd2cSJim Jagielski PE_Function::TransferData()
304*b1cdbd2cSJim Jagielski {
305*b1cdbd2cSJim Jagielski String sName( aName.c_str() );
306*b1cdbd2cSJim Jagielski ary::cpp::Function *
307*b1cdbd2cSJim Jagielski pFunction = Env().AryGate().Ces().Store_Operation(
308*b1cdbd2cSJim Jagielski Env().Context(),
309*b1cdbd2cSJim Jagielski sName,
310*b1cdbd2cSJim Jagielski nReturnType,
311*b1cdbd2cSJim Jagielski aParameters,
312*b1cdbd2cSJim Jagielski eVirtuality,
313*b1cdbd2cSJim Jagielski eConVol,
314*b1cdbd2cSJim Jagielski aFlags,
315*b1cdbd2cSJim Jagielski bThrow,
316*b1cdbd2cSJim Jagielski aExceptions );
317*b1cdbd2cSJim Jagielski if (pFunction != 0)
318*b1cdbd2cSJim Jagielski {
319*b1cdbd2cSJim Jagielski // KORR_FUTURE: How to handle differing documentation?
320*b1cdbd2cSJim Jagielski
321*b1cdbd2cSJim Jagielski Dyn< StringVector >
322*b1cdbd2cSJim Jagielski pTplParams ( Env().Get_CurTemplateParameters() );
323*b1cdbd2cSJim Jagielski if ( pTplParams )
324*b1cdbd2cSJim Jagielski {
325*b1cdbd2cSJim Jagielski for ( StringVector::const_iterator it = pTplParams->begin();
326*b1cdbd2cSJim Jagielski it != pTplParams->end();
327*b1cdbd2cSJim Jagielski ++it )
328*b1cdbd2cSJim Jagielski {
329*b1cdbd2cSJim Jagielski pFunction->Add_TemplateParameterType( *it, ary::cpp::Type_id(0) );
330*b1cdbd2cSJim Jagielski } // end for
331*b1cdbd2cSJim Jagielski }
332*b1cdbd2cSJim Jagielski
333*b1cdbd2cSJim Jagielski Env().Event_Store_Function(*pFunction);
334*b1cdbd2cSJim Jagielski }
335*b1cdbd2cSJim Jagielski
336*b1cdbd2cSJim Jagielski pStati->SetCur(size_of_states);
337*b1cdbd2cSJim Jagielski }
338*b1cdbd2cSJim Jagielski
339*b1cdbd2cSJim Jagielski void
Hdl_SyntaxError(const char * i_sText)340*b1cdbd2cSJim Jagielski PE_Function::Hdl_SyntaxError(const char * i_sText)
341*b1cdbd2cSJim Jagielski {
342*b1cdbd2cSJim Jagielski StdHandlingOfSyntaxError(i_sText);
343*b1cdbd2cSJim Jagielski }
344*b1cdbd2cSJim Jagielski
345*b1cdbd2cSJim Jagielski void
SpInit_CastOperatorType()346*b1cdbd2cSJim Jagielski PE_Function::SpInit_CastOperatorType()
347*b1cdbd2cSJim Jagielski {
348*b1cdbd2cSJim Jagielski pSpuCastOperatorType->Child().Init_AsCastOperatorType();
349*b1cdbd2cSJim Jagielski }
350*b1cdbd2cSJim Jagielski
351*b1cdbd2cSJim Jagielski void
SpReturn_Parameter()352*b1cdbd2cSJim Jagielski PE_Function::SpReturn_Parameter()
353*b1cdbd2cSJim Jagielski {
354*b1cdbd2cSJim Jagielski pStati->SetCur(expectParameterSeparator);
355*b1cdbd2cSJim Jagielski
356*b1cdbd2cSJim Jagielski ary::cpp::Type_id nParamType = pSpuParameter->Child().Result_FrontType();
357*b1cdbd2cSJim Jagielski if ( nParamType.IsValid() ) // Check, if there was a parameter, or only the closing ')'.
358*b1cdbd2cSJim Jagielski {
359*b1cdbd2cSJim Jagielski aParameters.push_back( pSpuParameter->Child().Result_ParamInfo() );
360*b1cdbd2cSJim Jagielski }
361*b1cdbd2cSJim Jagielski }
362*b1cdbd2cSJim Jagielski
363*b1cdbd2cSJim Jagielski void
SpReturn_Exception()364*b1cdbd2cSJim Jagielski PE_Function::SpReturn_Exception()
365*b1cdbd2cSJim Jagielski {
366*b1cdbd2cSJim Jagielski pStati->SetCur(expectExceptionSeparator);
367*b1cdbd2cSJim Jagielski
368*b1cdbd2cSJim Jagielski ary::cpp::Type_id
369*b1cdbd2cSJim Jagielski nException = pSpuException->Child().Result_Type().TypeId();
370*b1cdbd2cSJim Jagielski if ( nException.IsValid() AND pSpuException->Child().Result_KindOf() == PE_Type::is_type )
371*b1cdbd2cSJim Jagielski {
372*b1cdbd2cSJim Jagielski aExceptions.push_back( nException );
373*b1cdbd2cSJim Jagielski }
374*b1cdbd2cSJim Jagielski }
375*b1cdbd2cSJim Jagielski
376*b1cdbd2cSJim Jagielski void
SpReturn_CastOperatorType()377*b1cdbd2cSJim Jagielski PE_Function::SpReturn_CastOperatorType()
378*b1cdbd2cSJim Jagielski {
379*b1cdbd2cSJim Jagielski pStati->SetCur(afterName);
380*b1cdbd2cSJim Jagielski
381*b1cdbd2cSJim Jagielski Env().AryGate().Types().Get_TypeText(
382*b1cdbd2cSJim Jagielski aName, pSpuCastOperatorType->Child().Result_Type().TypeId() );
383*b1cdbd2cSJim Jagielski }
384*b1cdbd2cSJim Jagielski
385*b1cdbd2cSJim Jagielski void
On_afterOperator_Std_Operator(const char * i_sText)386*b1cdbd2cSJim Jagielski PE_Function::On_afterOperator_Std_Operator(const char * i_sText)
387*b1cdbd2cSJim Jagielski {
388*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
389*b1cdbd2cSJim Jagielski pStati->SetCur(afterName);
390*b1cdbd2cSJim Jagielski
391*b1cdbd2cSJim Jagielski if ( 'a' <= *i_sText AND *i_sText <= 'z' )
392*b1cdbd2cSJim Jagielski aName << ' ';
393*b1cdbd2cSJim Jagielski aName << i_sText;
394*b1cdbd2cSJim Jagielski }
395*b1cdbd2cSJim Jagielski
396*b1cdbd2cSJim Jagielski void
On_afterOperator_Std_LeftBracket(const char * i_sText)397*b1cdbd2cSJim Jagielski PE_Function::On_afterOperator_Std_LeftBracket(const char * i_sText)
398*b1cdbd2cSJim Jagielski {
399*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
400*b1cdbd2cSJim Jagielski pStati->SetCur(afterStdOperatorLeftBracket);
401*b1cdbd2cSJim Jagielski
402*b1cdbd2cSJim Jagielski aName << i_sText;
403*b1cdbd2cSJim Jagielski }
404*b1cdbd2cSJim Jagielski
405*b1cdbd2cSJim Jagielski void
On_afterStdOperatorLeftBracket_RightBracket(const char * i_sText)406*b1cdbd2cSJim Jagielski PE_Function::On_afterStdOperatorLeftBracket_RightBracket(const char * i_sText)
407*b1cdbd2cSJim Jagielski {
408*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
409*b1cdbd2cSJim Jagielski pStati->SetCur(afterName);
410*b1cdbd2cSJim Jagielski
411*b1cdbd2cSJim Jagielski aName << i_sText;
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski
414*b1cdbd2cSJim Jagielski void
On_afterOperator_Cast_Type(const char *)415*b1cdbd2cSJim Jagielski PE_Function::On_afterOperator_Cast_Type(const char *)
416*b1cdbd2cSJim Jagielski {
417*b1cdbd2cSJim Jagielski pSpuCastOperatorType->Push(not_done);
418*b1cdbd2cSJim Jagielski }
419*b1cdbd2cSJim Jagielski
420*b1cdbd2cSJim Jagielski void
On_afterName_Bracket_Left(const char *)421*b1cdbd2cSJim Jagielski PE_Function::On_afterName_Bracket_Left(const char *)
422*b1cdbd2cSJim Jagielski {
423*b1cdbd2cSJim Jagielski pSpuParameter->Push(done);
424*b1cdbd2cSJim Jagielski }
425*b1cdbd2cSJim Jagielski
426*b1cdbd2cSJim Jagielski void
On_expectParameterSeparator_BracketRight(const char *)427*b1cdbd2cSJim Jagielski PE_Function::On_expectParameterSeparator_BracketRight(const char *)
428*b1cdbd2cSJim Jagielski {
429*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
430*b1cdbd2cSJim Jagielski pStati->SetCur(afterParameters);
431*b1cdbd2cSJim Jagielski }
432*b1cdbd2cSJim Jagielski
433*b1cdbd2cSJim Jagielski void
On_expectParameterSeparator_Comma(const char *)434*b1cdbd2cSJim Jagielski PE_Function::On_expectParameterSeparator_Comma(const char *)
435*b1cdbd2cSJim Jagielski {
436*b1cdbd2cSJim Jagielski pSpuParameter->Push(done);
437*b1cdbd2cSJim Jagielski }
438*b1cdbd2cSJim Jagielski
439*b1cdbd2cSJim Jagielski void
On_afterParameters_const(const char *)440*b1cdbd2cSJim Jagielski PE_Function::On_afterParameters_const(const char *)
441*b1cdbd2cSJim Jagielski {
442*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
443*b1cdbd2cSJim Jagielski eConVol = static_cast<E_ConVol>(
444*b1cdbd2cSJim Jagielski static_cast<int>(eConVol) | static_cast<int>(ary::cpp::CONVOL_const) );
445*b1cdbd2cSJim Jagielski }
446*b1cdbd2cSJim Jagielski
447*b1cdbd2cSJim Jagielski void
On_afterParameters_volatile(const char *)448*b1cdbd2cSJim Jagielski PE_Function::On_afterParameters_volatile(const char *)
449*b1cdbd2cSJim Jagielski {
450*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
451*b1cdbd2cSJim Jagielski eConVol = static_cast<E_ConVol>(
452*b1cdbd2cSJim Jagielski static_cast<int>(eConVol) | static_cast<int>(ary::cpp::CONVOL_volatile) );
453*b1cdbd2cSJim Jagielski }
454*b1cdbd2cSJim Jagielski
455*b1cdbd2cSJim Jagielski void
On_afterParameters_throw(const char *)456*b1cdbd2cSJim Jagielski PE_Function::On_afterParameters_throw(const char *)
457*b1cdbd2cSJim Jagielski {
458*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
459*b1cdbd2cSJim Jagielski pStati->SetCur(afterThrow);
460*b1cdbd2cSJim Jagielski bThrow = true;
461*b1cdbd2cSJim Jagielski }
462*b1cdbd2cSJim Jagielski
463*b1cdbd2cSJim Jagielski void
On_afterParameters_SwBracket_Left(const char *)464*b1cdbd2cSJim Jagielski PE_Function::On_afterParameters_SwBracket_Left(const char *)
465*b1cdbd2cSJim Jagielski {
466*b1cdbd2cSJim Jagielski EnterImplementation(1);
467*b1cdbd2cSJim Jagielski }
468*b1cdbd2cSJim Jagielski
469*b1cdbd2cSJim Jagielski void
On_afterParameters_Semicolon(const char *)470*b1cdbd2cSJim Jagielski PE_Function::On_afterParameters_Semicolon(const char *)
471*b1cdbd2cSJim Jagielski {
472*b1cdbd2cSJim Jagielski PerformFinishingPunctuation();
473*b1cdbd2cSJim Jagielski }
474*b1cdbd2cSJim Jagielski
475*b1cdbd2cSJim Jagielski void
On_afterParameters_Comma(const char *)476*b1cdbd2cSJim Jagielski PE_Function::On_afterParameters_Comma(const char *)
477*b1cdbd2cSJim Jagielski {
478*b1cdbd2cSJim Jagielski PerformFinishingPunctuation();
479*b1cdbd2cSJim Jagielski }
480*b1cdbd2cSJim Jagielski
481*b1cdbd2cSJim Jagielski void
On_afterParameters_Colon(const char *)482*b1cdbd2cSJim Jagielski PE_Function::On_afterParameters_Colon(const char *)
483*b1cdbd2cSJim Jagielski {
484*b1cdbd2cSJim Jagielski EnterImplementation(0);
485*b1cdbd2cSJim Jagielski }
486*b1cdbd2cSJim Jagielski
487*b1cdbd2cSJim Jagielski void
On_afterParameters_Assign(const char *)488*b1cdbd2cSJim Jagielski PE_Function::On_afterParameters_Assign(const char *)
489*b1cdbd2cSJim Jagielski {
490*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
491*b1cdbd2cSJim Jagielski pStati->SetCur(expectZero);
492*b1cdbd2cSJim Jagielski }
493*b1cdbd2cSJim Jagielski
494*b1cdbd2cSJim Jagielski void
On_afterThrow_Bracket_Left(const char *)495*b1cdbd2cSJim Jagielski PE_Function::On_afterThrow_Bracket_Left(const char *)
496*b1cdbd2cSJim Jagielski {
497*b1cdbd2cSJim Jagielski pSpuException->Push(done);
498*b1cdbd2cSJim Jagielski }
499*b1cdbd2cSJim Jagielski
500*b1cdbd2cSJim Jagielski void
On_expectExceptionSeparator_BracketRight(const char *)501*b1cdbd2cSJim Jagielski PE_Function::On_expectExceptionSeparator_BracketRight(const char *)
502*b1cdbd2cSJim Jagielski {
503*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
504*b1cdbd2cSJim Jagielski pStati->SetCur(afterExceptions);
505*b1cdbd2cSJim Jagielski }
506*b1cdbd2cSJim Jagielski
507*b1cdbd2cSJim Jagielski void
On_expectExceptionSeparator_Comma(const char *)508*b1cdbd2cSJim Jagielski PE_Function::On_expectExceptionSeparator_Comma(const char *)
509*b1cdbd2cSJim Jagielski {
510*b1cdbd2cSJim Jagielski pSpuException->Push(done);
511*b1cdbd2cSJim Jagielski }
512*b1cdbd2cSJim Jagielski
513*b1cdbd2cSJim Jagielski void
On_afterExceptions_SwBracket_Left(const char *)514*b1cdbd2cSJim Jagielski PE_Function::On_afterExceptions_SwBracket_Left(const char *)
515*b1cdbd2cSJim Jagielski {
516*b1cdbd2cSJim Jagielski EnterImplementation(1);
517*b1cdbd2cSJim Jagielski }
518*b1cdbd2cSJim Jagielski
519*b1cdbd2cSJim Jagielski void
On_afterExceptions_Semicolon(const char *)520*b1cdbd2cSJim Jagielski PE_Function::On_afterExceptions_Semicolon(const char *)
521*b1cdbd2cSJim Jagielski {
522*b1cdbd2cSJim Jagielski PerformFinishingPunctuation();
523*b1cdbd2cSJim Jagielski }
524*b1cdbd2cSJim Jagielski
525*b1cdbd2cSJim Jagielski void
On_afterExceptions_Comma(const char *)526*b1cdbd2cSJim Jagielski PE_Function::On_afterExceptions_Comma(const char *)
527*b1cdbd2cSJim Jagielski {
528*b1cdbd2cSJim Jagielski PerformFinishingPunctuation();
529*b1cdbd2cSJim Jagielski }
530*b1cdbd2cSJim Jagielski
531*b1cdbd2cSJim Jagielski void
On_afterExceptions_Colon(const char *)532*b1cdbd2cSJim Jagielski PE_Function::On_afterExceptions_Colon(const char *)
533*b1cdbd2cSJim Jagielski {
534*b1cdbd2cSJim Jagielski EnterImplementation(0);
535*b1cdbd2cSJim Jagielski }
536*b1cdbd2cSJim Jagielski
537*b1cdbd2cSJim Jagielski void
On_afterExceptions_Assign(const char *)538*b1cdbd2cSJim Jagielski PE_Function::On_afterExceptions_Assign(const char *)
539*b1cdbd2cSJim Jagielski {
540*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
541*b1cdbd2cSJim Jagielski pStati->SetCur(expectZero);
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski
544*b1cdbd2cSJim Jagielski void
On_expectZero_Constant(const char * i_sText)545*b1cdbd2cSJim Jagielski PE_Function::On_expectZero_Constant(const char * i_sText)
546*b1cdbd2cSJim Jagielski {
547*b1cdbd2cSJim Jagielski if ( strcmp(i_sText,"0") != 0 )
548*b1cdbd2cSJim Jagielski Hdl_SyntaxError(i_sText);
549*b1cdbd2cSJim Jagielski
550*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
551*b1cdbd2cSJim Jagielski pStati->SetCur(afterExceptions);
552*b1cdbd2cSJim Jagielski
553*b1cdbd2cSJim Jagielski eVirtuality = ary::cpp::VIRTUAL_abstract;
554*b1cdbd2cSJim Jagielski }
555*b1cdbd2cSJim Jagielski
556*b1cdbd2cSJim Jagielski void
On_inImplementation_SwBracket_Left(const char *)557*b1cdbd2cSJim Jagielski PE_Function::On_inImplementation_SwBracket_Left(const char *)
558*b1cdbd2cSJim Jagielski {
559*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
560*b1cdbd2cSJim Jagielski nBracketCounterInImplementation++;
561*b1cdbd2cSJim Jagielski }
562*b1cdbd2cSJim Jagielski
563*b1cdbd2cSJim Jagielski void
On_inImplementation_SwBracket_Right(const char *)564*b1cdbd2cSJim Jagielski PE_Function::On_inImplementation_SwBracket_Right(const char *)
565*b1cdbd2cSJim Jagielski {
566*b1cdbd2cSJim Jagielski nBracketCounterInImplementation--;
567*b1cdbd2cSJim Jagielski if (nBracketCounterInImplementation == 0)
568*b1cdbd2cSJim Jagielski {
569*b1cdbd2cSJim Jagielski SetTokenResult(done,pop_success);
570*b1cdbd2cSJim Jagielski }
571*b1cdbd2cSJim Jagielski else
572*b1cdbd2cSJim Jagielski {
573*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
574*b1cdbd2cSJim Jagielski }
575*b1cdbd2cSJim Jagielski }
576*b1cdbd2cSJim Jagielski
577*b1cdbd2cSJim Jagielski void
On_inImplementation_Default(const char *)578*b1cdbd2cSJim Jagielski PE_Function::On_inImplementation_Default(const char *)
579*b1cdbd2cSJim Jagielski {
580*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
581*b1cdbd2cSJim Jagielski }
582*b1cdbd2cSJim Jagielski
583*b1cdbd2cSJim Jagielski void
EnterImplementation(intt i_nBracketCountStart)584*b1cdbd2cSJim Jagielski PE_Function::EnterImplementation( intt i_nBracketCountStart )
585*b1cdbd2cSJim Jagielski {
586*b1cdbd2cSJim Jagielski SetTokenResult(done,stay);
587*b1cdbd2cSJim Jagielski pStati->SetCur(inImplementation);
588*b1cdbd2cSJim Jagielski
589*b1cdbd2cSJim Jagielski bResult_WithImplementation = true;
590*b1cdbd2cSJim Jagielski nBracketCounterInImplementation = i_nBracketCountStart;
591*b1cdbd2cSJim Jagielski if ( Env().Context().CurClass() != 0 )
592*b1cdbd2cSJim Jagielski {
593*b1cdbd2cSJim Jagielski aFlags.SetInline();
594*b1cdbd2cSJim Jagielski }
595*b1cdbd2cSJim Jagielski }
596*b1cdbd2cSJim Jagielski
597*b1cdbd2cSJim Jagielski
598*b1cdbd2cSJim Jagielski
599*b1cdbd2cSJim Jagielski } // namespace cpp
600*b1cdbd2cSJim Jagielski
601*b1cdbd2cSJim Jagielski
602*b1cdbd2cSJim Jagielski
603*b1cdbd2cSJim Jagielski
604*b1cdbd2cSJim Jagielski
605