1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22 #include <precomp.h>
23 #include "pe_enval.hxx"
24
25
26 // NOT FULLY DEFINED SERVICES
27 #include <cosv/tpl/tpltools.hxx>
28 #include <ary/cpp/c_gate.hxx>
29 #include <ary/cpp/cp_ce.hxx>
30 #include "pe_expr.hxx"
31
32
33
34 namespace cpp {
35
36
PE_EnumValue(Cpp_PE * i_pParent)37 PE_EnumValue::PE_EnumValue( Cpp_PE * i_pParent )
38 : Cpp_PE(i_pParent),
39 pStati( new PeStatusArray<PE_EnumValue> )
40 // pSpExpression,
41 // pSpuInitExpression
42 {
43 Setup_StatusFunctions();
44
45 pSpExpression = new SP_Expression(*this);
46 pSpuInitExpression = new SPU_Expression(*pSpExpression, 0, &PE_EnumValue::SpReturn_InitExpression);
47 }
48
~PE_EnumValue()49 PE_EnumValue::~PE_EnumValue()
50 {
51 }
52
53 void
Call_Handler(const cpp::Token & i_rTok)54 PE_EnumValue::Call_Handler( const cpp::Token & i_rTok )
55 {
56 pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text());
57 }
58
59 void
Setup_StatusFunctions()60 PE_EnumValue::Setup_StatusFunctions()
61 {
62 typedef CallFunction<PE_EnumValue>::F_Tok F_Tok;
63
64 static F_Tok stateF_start[] = { &PE_EnumValue::On_start_Identifier };
65 static INT16 stateT_start[] = { Tid_Identifier };
66
67 static F_Tok stateF_afterName[] = { &PE_EnumValue::On_afterName_SwBracket_Right,
68 &PE_EnumValue::On_afterName_Comma,
69 &PE_EnumValue::On_afterName_Assign };
70 static INT16 stateT_afterName[] = { Tid_SwBracket_Right,
71 Tid_Comma,
72 Tid_Assign };
73
74 static F_Tok stateF_expectFinish[] = { &PE_EnumValue::On_expectFinish_SwBracket_Right,
75 &PE_EnumValue::On_expectFinish_Comma };
76 static INT16 stateT_expectFinish[] = { Tid_SwBracket_Right,
77 Tid_Comma };
78
79 SEMPARSE_CREATE_STATUS(PE_EnumValue, start, Hdl_SyntaxError);
80 SEMPARSE_CREATE_STATUS(PE_EnumValue, afterName, Hdl_SyntaxError);
81 SEMPARSE_CREATE_STATUS(PE_EnumValue, expectFinish, Hdl_SyntaxError);
82 }
83
84 void
InitData()85 PE_EnumValue::InitData()
86 {
87 pStati->SetCur(start);
88
89 sName.clear();
90 sInitExpression.clear();
91 }
92
93 void
TransferData()94 PE_EnumValue::TransferData()
95 {
96 pStati->SetCur(size_of_states);
97
98 ary::cpp::EnumValue &
99 rEnVal = Env().AryGate().Ces().Store_EnumValue(
100 Env().Context(), sName, sInitExpression );
101 Env().Event_Store_EnumValue(rEnVal);
102 }
103
104 void
Hdl_SyntaxError(const char * i_sText)105 PE_EnumValue::Hdl_SyntaxError( const char * i_sText)
106 {
107 StdHandlingOfSyntaxError(i_sText);
108 }
109
110 void
SpReturn_InitExpression()111 PE_EnumValue::SpReturn_InitExpression()
112 {
113 pStati->SetCur(expectFinish);
114
115 sInitExpression = pSpuInitExpression->Child().Result_Text();
116 }
117
118 void
On_start_Identifier(const char * i_sText)119 PE_EnumValue::On_start_Identifier(const char * i_sText)
120 {
121 SetTokenResult(done, stay);
122 pStati->SetCur(afterName);
123
124 sName = i_sText;
125 }
126
127 void
On_afterName_SwBracket_Right(const char *)128 PE_EnumValue::On_afterName_SwBracket_Right(const char *)
129 {
130 SetTokenResult(not_done, pop_success);
131 }
132
133 void
On_afterName_Comma(const char *)134 PE_EnumValue::On_afterName_Comma(const char * )
135 {
136 SetTokenResult(done, pop_success);
137 }
138
139 void
On_afterName_Assign(const char *)140 PE_EnumValue::On_afterName_Assign(const char * )
141 {
142 pSpuInitExpression->Push(done);
143 }
144
145 void
On_expectFinish_SwBracket_Right(const char *)146 PE_EnumValue::On_expectFinish_SwBracket_Right(const char * )
147 {
148 SetTokenResult(not_done, pop_success);
149 }
150
151 void
On_expectFinish_Comma(const char *)152 PE_EnumValue::On_expectFinish_Comma(const char * )
153 {
154 SetTokenResult(done, pop_success);
155 }
156
157
158 } // namespace cpp
159
160
161
162
163