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 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 49 PE_EnumValue::~PE_EnumValue() 50 { 51 } 52 53 void 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 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 85 PE_EnumValue::InitData() 86 { 87 pStati->SetCur(start); 88 89 sName.clear(); 90 sInitExpression.clear(); 91 } 92 93 void 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 105 PE_EnumValue::Hdl_SyntaxError( const char * i_sText) 106 { 107 StdHandlingOfSyntaxError(i_sText); 108 } 109 110 void 111 PE_EnumValue::SpReturn_InitExpression() 112 { 113 pStati->SetCur(expectFinish); 114 115 sInitExpression = pSpuInitExpression->Child().Result_Text(); 116 } 117 118 void 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 128 PE_EnumValue::On_afterName_SwBracket_Right(const char *) 129 { 130 SetTokenResult(not_done, pop_success); 131 } 132 133 void 134 PE_EnumValue::On_afterName_Comma(const char * ) 135 { 136 SetTokenResult(done, pop_success); 137 } 138 139 void 140 PE_EnumValue::On_afterName_Assign(const char * ) 141 { 142 pSpuInitExpression->Push(done); 143 } 144 145 void 146 PE_EnumValue::On_expectFinish_SwBracket_Right(const char * ) 147 { 148 SetTokenResult(not_done, pop_success); 149 } 150 151 void 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