1*78bc99aaSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*78bc99aaSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*78bc99aaSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*78bc99aaSAndrew Rist * distributed with this work for additional information
6*78bc99aaSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*78bc99aaSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*78bc99aaSAndrew Rist * "License"); you may not use this file except in compliance
9*78bc99aaSAndrew Rist * with the License. You may obtain a copy of the License at
10*78bc99aaSAndrew Rist *
11*78bc99aaSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*78bc99aaSAndrew Rist *
13*78bc99aaSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*78bc99aaSAndrew Rist * software distributed under the License is distributed on an
15*78bc99aaSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*78bc99aaSAndrew Rist * KIND, either express or implied. See the License for the
17*78bc99aaSAndrew Rist * specific language governing permissions and limitations
18*78bc99aaSAndrew Rist * under the License.
19*78bc99aaSAndrew Rist *
20*78bc99aaSAndrew Rist *************************************************************/
21cdf0e10cSrcweir
22cdf0e10cSrcweir #include <precomp.h>
23cdf0e10cSrcweir #include "pe_param.hxx"
24cdf0e10cSrcweir
25cdf0e10cSrcweir
26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES
27cdf0e10cSrcweir #include <cosv/tpl/tpltools.hxx>
28cdf0e10cSrcweir #include <ary/cpp/c_gate.hxx>
29cdf0e10cSrcweir #include <ary/cpp/cp_type.hxx>
30cdf0e10cSrcweir #include "pe_type.hxx"
31cdf0e10cSrcweir #include "pe_vari.hxx"
32cdf0e10cSrcweir
33cdf0e10cSrcweir
34cdf0e10cSrcweir namespace cpp {
35cdf0e10cSrcweir
36cdf0e10cSrcweir
37cdf0e10cSrcweir
38cdf0e10cSrcweir //*********************** PE_Parameter ***********************//
39cdf0e10cSrcweir
40cdf0e10cSrcweir
PE_Parameter(Cpp_PE * i_pParent)41cdf0e10cSrcweir PE_Parameter::PE_Parameter( Cpp_PE * i_pParent )
42cdf0e10cSrcweir : Cpp_PE(i_pParent),
43cdf0e10cSrcweir pStati( new PeStatusArray<PE_Parameter> )
44cdf0e10cSrcweir // pSpType,
45cdf0e10cSrcweir // pSpuType,
46cdf0e10cSrcweir // pSpVariable,
47cdf0e10cSrcweir // pSpuVariable,
48cdf0e10cSrcweir // aResultParamInfo
49cdf0e10cSrcweir {
50cdf0e10cSrcweir Setup_StatusFunctions();
51cdf0e10cSrcweir
52cdf0e10cSrcweir pSpType = new SP_Type(*this);
53cdf0e10cSrcweir pSpuType = new SPU_Type(*pSpType, &PE_Parameter::SpInit_Type, &PE_Parameter::SpReturn_Type);
54cdf0e10cSrcweir pSpVariable = new SP_Variable(*this);
55cdf0e10cSrcweir pSpuVariable = new SPU_Variable(*pSpVariable, &PE_Parameter::SpInit_Variable, &PE_Parameter::SpReturn_Variable);
56cdf0e10cSrcweir }
57cdf0e10cSrcweir
~PE_Parameter()58cdf0e10cSrcweir PE_Parameter::~PE_Parameter()
59cdf0e10cSrcweir {
60cdf0e10cSrcweir }
61cdf0e10cSrcweir
62cdf0e10cSrcweir void
Call_Handler(const cpp::Token & i_rTok)63cdf0e10cSrcweir PE_Parameter::Call_Handler( const cpp::Token & i_rTok )
64cdf0e10cSrcweir {
65cdf0e10cSrcweir pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
66cdf0e10cSrcweir }
67cdf0e10cSrcweir
68cdf0e10cSrcweir void
Setup_StatusFunctions()69cdf0e10cSrcweir PE_Parameter::Setup_StatusFunctions()
70cdf0e10cSrcweir {
71cdf0e10cSrcweir typedef CallFunction<PE_Parameter>::F_Tok F_Tok;
72cdf0e10cSrcweir static F_Tok stateF_start[] = { &PE_Parameter::On_start_Type,
73cdf0e10cSrcweir &PE_Parameter::On_start_Type,
74cdf0e10cSrcweir &PE_Parameter::On_start_Type,
75cdf0e10cSrcweir &PE_Parameter::On_start_Type,
76cdf0e10cSrcweir &PE_Parameter::On_start_Type,
77cdf0e10cSrcweir
78cdf0e10cSrcweir &PE_Parameter::On_start_Type,
79cdf0e10cSrcweir &PE_Parameter::On_start_Type,
80cdf0e10cSrcweir &PE_Parameter::On_start_Bracket_Right,
81cdf0e10cSrcweir &PE_Parameter::On_start_Type,
82cdf0e10cSrcweir &PE_Parameter::On_start_Ellipse,
83cdf0e10cSrcweir
84cdf0e10cSrcweir &PE_Parameter::On_start_Type,
85cdf0e10cSrcweir &PE_Parameter::On_start_Type,
86cdf0e10cSrcweir &PE_Parameter::On_start_Type };
87cdf0e10cSrcweir static INT16 stateT_start[] = { Tid_Identifier,
88cdf0e10cSrcweir Tid_class,
89cdf0e10cSrcweir Tid_struct,
90cdf0e10cSrcweir Tid_union,
91cdf0e10cSrcweir Tid_enum,
92cdf0e10cSrcweir
93cdf0e10cSrcweir Tid_const,
94cdf0e10cSrcweir Tid_volatile,
95cdf0e10cSrcweir Tid_Bracket_Right,
96cdf0e10cSrcweir Tid_DoubleColon,
97cdf0e10cSrcweir Tid_Ellipse,
98cdf0e10cSrcweir
99cdf0e10cSrcweir Tid_typename,
100cdf0e10cSrcweir Tid_BuiltInType,
101cdf0e10cSrcweir Tid_TypeSpecializer };
102cdf0e10cSrcweir
103cdf0e10cSrcweir static F_Tok stateF_expectName[] = { &PE_Parameter::On_expectName_Identifier,
104cdf0e10cSrcweir &PE_Parameter::On_expectName_ArrayBracket_Left,
105cdf0e10cSrcweir &PE_Parameter::On_expectName_Bracket_Right,
106cdf0e10cSrcweir &PE_Parameter::On_expectName_Comma,
107cdf0e10cSrcweir &PE_Parameter::On_afterName_Assign };
108cdf0e10cSrcweir static INT16 stateT_expectName[] = { Tid_Identifier,
109cdf0e10cSrcweir Tid_ArrayBracket_Left,
110cdf0e10cSrcweir Tid_Bracket_Right,
111cdf0e10cSrcweir Tid_Comma,
112cdf0e10cSrcweir Tid_Assign };
113cdf0e10cSrcweir static F_Tok stateF_afterName[] = { &PE_Parameter::On_afterName_ArrayBracket_Left,
114cdf0e10cSrcweir &PE_Parameter::On_afterName_Bracket_Right,
115cdf0e10cSrcweir &PE_Parameter::On_afterName_Comma,
116cdf0e10cSrcweir &PE_Parameter::On_afterName_Assign };
117cdf0e10cSrcweir static INT16 stateT_afterName[] = { Tid_ArrayBracket_Left,
118cdf0e10cSrcweir Tid_Bracket_Right,
119cdf0e10cSrcweir Tid_Comma,
120cdf0e10cSrcweir Tid_Assign };
121cdf0e10cSrcweir static F_Tok stateF_finished[] = { &PE_Parameter::On_finished_Comma,
122cdf0e10cSrcweir &PE_Parameter::On_finished_Bracket_Right };
123cdf0e10cSrcweir static INT16 stateT_finished[] = { Tid_Bracket_Right,
124cdf0e10cSrcweir Tid_Comma };
125cdf0e10cSrcweir
126cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Parameter, start, Hdl_SyntaxError);
127cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Parameter, expectName, Hdl_SyntaxError);
128cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Parameter, afterName, Hdl_SyntaxError);
129cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Parameter, finished, Hdl_SyntaxError);
130cdf0e10cSrcweir }
131cdf0e10cSrcweir
132cdf0e10cSrcweir
133cdf0e10cSrcweir void
InitData()134cdf0e10cSrcweir PE_Parameter::InitData()
135cdf0e10cSrcweir {
136cdf0e10cSrcweir pStati->SetCur(start);
137cdf0e10cSrcweir aResultParamInfo.Empty();
138cdf0e10cSrcweir }
139cdf0e10cSrcweir
140cdf0e10cSrcweir void
TransferData()141cdf0e10cSrcweir PE_Parameter::TransferData()
142cdf0e10cSrcweir {
143cdf0e10cSrcweir pStati->SetCur(size_of_states);
144cdf0e10cSrcweir }
145cdf0e10cSrcweir
146cdf0e10cSrcweir void
Hdl_SyntaxError(const char * i_sText)147cdf0e10cSrcweir PE_Parameter::Hdl_SyntaxError( const char * i_sText)
148cdf0e10cSrcweir {
149cdf0e10cSrcweir StdHandlingOfSyntaxError(i_sText);
150cdf0e10cSrcweir }
151cdf0e10cSrcweir
152cdf0e10cSrcweir void
SpInit_Type()153cdf0e10cSrcweir PE_Parameter::SpInit_Type()
154cdf0e10cSrcweir {
155cdf0e10cSrcweir // Does nothing.
156cdf0e10cSrcweir }
157cdf0e10cSrcweir
158cdf0e10cSrcweir void
SpInit_Variable()159cdf0e10cSrcweir PE_Parameter::SpInit_Variable()
160cdf0e10cSrcweir {
161cdf0e10cSrcweir // Does nothing.
162cdf0e10cSrcweir }
163cdf0e10cSrcweir
164cdf0e10cSrcweir void
SpReturn_Type()165cdf0e10cSrcweir PE_Parameter::SpReturn_Type()
166cdf0e10cSrcweir {
167cdf0e10cSrcweir aResultParamInfo.nType = pSpuType->Child().Result_Type().Id();
168cdf0e10cSrcweir pStati->SetCur(expectName);
169cdf0e10cSrcweir }
170cdf0e10cSrcweir
171cdf0e10cSrcweir void
SpReturn_Variable()172cdf0e10cSrcweir PE_Parameter::SpReturn_Variable()
173cdf0e10cSrcweir {
174cdf0e10cSrcweir if (pSpuVariable->Child().Result_Pattern() > 0)
175cdf0e10cSrcweir {
176cdf0e10cSrcweir aResultParamInfo.sSizeExpression = pSpuVariable->Child().Result_SizeExpression();
177cdf0e10cSrcweir aResultParamInfo.sInitExpression = pSpuVariable->Child().Result_InitExpression();
178cdf0e10cSrcweir }
179cdf0e10cSrcweir }
180cdf0e10cSrcweir
181cdf0e10cSrcweir void
On_start_Type(const char *)182cdf0e10cSrcweir PE_Parameter::On_start_Type(const char *)
183cdf0e10cSrcweir {
184cdf0e10cSrcweir pSpuType->Push(not_done);
185cdf0e10cSrcweir }
186cdf0e10cSrcweir
187cdf0e10cSrcweir void
On_start_Bracket_Right(const char *)188cdf0e10cSrcweir PE_Parameter::On_start_Bracket_Right(const char *)
189cdf0e10cSrcweir {
190cdf0e10cSrcweir SetTokenResult(not_done, pop_success);
191cdf0e10cSrcweir }
192cdf0e10cSrcweir
193cdf0e10cSrcweir void
On_start_Ellipse(const char *)194cdf0e10cSrcweir PE_Parameter::On_start_Ellipse(const char *)
195cdf0e10cSrcweir {
196cdf0e10cSrcweir SetTokenResult(done, pop_success);
197cdf0e10cSrcweir
198cdf0e10cSrcweir aResultParamInfo.nType = Env().AryGate().Types().Tid_Ellipse();
199cdf0e10cSrcweir }
200cdf0e10cSrcweir
201cdf0e10cSrcweir void
On_expectName_Identifier(const char * i_sText)202cdf0e10cSrcweir PE_Parameter::On_expectName_Identifier(const char * i_sText)
203cdf0e10cSrcweir {
204cdf0e10cSrcweir SetTokenResult(done, stay);
205cdf0e10cSrcweir pStati->SetCur(afterName);
206cdf0e10cSrcweir
207cdf0e10cSrcweir aResultParamInfo.sName = i_sText;
208cdf0e10cSrcweir }
209cdf0e10cSrcweir
210cdf0e10cSrcweir void
On_expectName_ArrayBracket_Left(const char * i_sText)211cdf0e10cSrcweir PE_Parameter::On_expectName_ArrayBracket_Left(const char * i_sText)
212cdf0e10cSrcweir {
213cdf0e10cSrcweir On_afterName_ArrayBracket_Left(i_sText);
214cdf0e10cSrcweir }
215cdf0e10cSrcweir
216cdf0e10cSrcweir void
On_expectName_Bracket_Right(const char * i_sText)217cdf0e10cSrcweir PE_Parameter::On_expectName_Bracket_Right(const char * i_sText)
218cdf0e10cSrcweir {
219cdf0e10cSrcweir On_afterName_Bracket_Right(i_sText);
220cdf0e10cSrcweir }
221cdf0e10cSrcweir
222cdf0e10cSrcweir void
On_expectName_Comma(const char * i_sText)223cdf0e10cSrcweir PE_Parameter::On_expectName_Comma(const char * i_sText)
224cdf0e10cSrcweir {
225cdf0e10cSrcweir On_afterName_Comma(i_sText);
226cdf0e10cSrcweir }
227cdf0e10cSrcweir
228cdf0e10cSrcweir void
On_afterName_ArrayBracket_Left(const char *)229cdf0e10cSrcweir PE_Parameter::On_afterName_ArrayBracket_Left(const char *)
230cdf0e10cSrcweir {
231cdf0e10cSrcweir pSpuVariable->Push(not_done);
232cdf0e10cSrcweir }
233cdf0e10cSrcweir
234cdf0e10cSrcweir void
On_afterName_Bracket_Right(const char *)235cdf0e10cSrcweir PE_Parameter::On_afterName_Bracket_Right(const char *)
236cdf0e10cSrcweir {
237cdf0e10cSrcweir SetTokenResult(not_done, pop_success);
238cdf0e10cSrcweir }
239cdf0e10cSrcweir
240cdf0e10cSrcweir void
On_afterName_Comma(const char *)241cdf0e10cSrcweir PE_Parameter::On_afterName_Comma(const char *)
242cdf0e10cSrcweir {
243cdf0e10cSrcweir SetTokenResult(not_done, pop_success);
244cdf0e10cSrcweir }
245cdf0e10cSrcweir
246cdf0e10cSrcweir void
On_afterName_Assign(const char *)247cdf0e10cSrcweir PE_Parameter::On_afterName_Assign(const char *)
248cdf0e10cSrcweir {
249cdf0e10cSrcweir pSpuVariable->Push(not_done);
250cdf0e10cSrcweir }
251cdf0e10cSrcweir
252cdf0e10cSrcweir void
On_finished_Bracket_Right(const char *)253cdf0e10cSrcweir PE_Parameter::On_finished_Bracket_Right(const char *)
254cdf0e10cSrcweir {
255cdf0e10cSrcweir SetTokenResult(not_done, pop_success);
256cdf0e10cSrcweir }
257cdf0e10cSrcweir
258cdf0e10cSrcweir void
On_finished_Comma(const char *)259cdf0e10cSrcweir PE_Parameter::On_finished_Comma(const char *)
260cdf0e10cSrcweir {
261cdf0e10cSrcweir SetTokenResult(not_done, pop_success);
262cdf0e10cSrcweir }
263cdf0e10cSrcweir
264cdf0e10cSrcweir
265cdf0e10cSrcweir } // namespace cpp
266cdf0e10cSrcweir
267cdf0e10cSrcweir
268cdf0e10cSrcweir
269cdf0e10cSrcweir
270cdf0e10cSrcweir
271cdf0e10cSrcweir
272cdf0e10cSrcweir
273cdf0e10cSrcweir
274cdf0e10cSrcweir
275