1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #include <precomp.h> 29*cdf0e10cSrcweir #include "pe_param.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES 33*cdf0e10cSrcweir #include <cosv/tpl/tpltools.hxx> 34*cdf0e10cSrcweir #include <ary/cpp/c_gate.hxx> 35*cdf0e10cSrcweir #include <ary/cpp/cp_type.hxx> 36*cdf0e10cSrcweir #include "pe_type.hxx" 37*cdf0e10cSrcweir #include "pe_vari.hxx" 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir 40*cdf0e10cSrcweir namespace cpp { 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir //*********************** PE_Parameter ***********************// 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir PE_Parameter::PE_Parameter( Cpp_PE * i_pParent ) 48*cdf0e10cSrcweir : Cpp_PE(i_pParent), 49*cdf0e10cSrcweir pStati( new PeStatusArray<PE_Parameter> ) 50*cdf0e10cSrcweir // pSpType, 51*cdf0e10cSrcweir // pSpuType, 52*cdf0e10cSrcweir // pSpVariable, 53*cdf0e10cSrcweir // pSpuVariable, 54*cdf0e10cSrcweir // aResultParamInfo 55*cdf0e10cSrcweir { 56*cdf0e10cSrcweir Setup_StatusFunctions(); 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir pSpType = new SP_Type(*this); 59*cdf0e10cSrcweir pSpuType = new SPU_Type(*pSpType, &PE_Parameter::SpInit_Type, &PE_Parameter::SpReturn_Type); 60*cdf0e10cSrcweir pSpVariable = new SP_Variable(*this); 61*cdf0e10cSrcweir pSpuVariable = new SPU_Variable(*pSpVariable, &PE_Parameter::SpInit_Variable, &PE_Parameter::SpReturn_Variable); 62*cdf0e10cSrcweir } 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir PE_Parameter::~PE_Parameter() 65*cdf0e10cSrcweir { 66*cdf0e10cSrcweir } 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir void 69*cdf0e10cSrcweir PE_Parameter::Call_Handler( const cpp::Token & i_rTok ) 70*cdf0e10cSrcweir { 71*cdf0e10cSrcweir pStati->Cur().Call_Handler(i_rTok.TypeId(), i_rTok.Text()); 72*cdf0e10cSrcweir } 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir void 75*cdf0e10cSrcweir PE_Parameter::Setup_StatusFunctions() 76*cdf0e10cSrcweir { 77*cdf0e10cSrcweir typedef CallFunction<PE_Parameter>::F_Tok F_Tok; 78*cdf0e10cSrcweir static F_Tok stateF_start[] = { &PE_Parameter::On_start_Type, 79*cdf0e10cSrcweir &PE_Parameter::On_start_Type, 80*cdf0e10cSrcweir &PE_Parameter::On_start_Type, 81*cdf0e10cSrcweir &PE_Parameter::On_start_Type, 82*cdf0e10cSrcweir &PE_Parameter::On_start_Type, 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir &PE_Parameter::On_start_Type, 85*cdf0e10cSrcweir &PE_Parameter::On_start_Type, 86*cdf0e10cSrcweir &PE_Parameter::On_start_Bracket_Right, 87*cdf0e10cSrcweir &PE_Parameter::On_start_Type, 88*cdf0e10cSrcweir &PE_Parameter::On_start_Ellipse, 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir &PE_Parameter::On_start_Type, 91*cdf0e10cSrcweir &PE_Parameter::On_start_Type, 92*cdf0e10cSrcweir &PE_Parameter::On_start_Type }; 93*cdf0e10cSrcweir static INT16 stateT_start[] = { Tid_Identifier, 94*cdf0e10cSrcweir Tid_class, 95*cdf0e10cSrcweir Tid_struct, 96*cdf0e10cSrcweir Tid_union, 97*cdf0e10cSrcweir Tid_enum, 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir Tid_const, 100*cdf0e10cSrcweir Tid_volatile, 101*cdf0e10cSrcweir Tid_Bracket_Right, 102*cdf0e10cSrcweir Tid_DoubleColon, 103*cdf0e10cSrcweir Tid_Ellipse, 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir Tid_typename, 106*cdf0e10cSrcweir Tid_BuiltInType, 107*cdf0e10cSrcweir Tid_TypeSpecializer }; 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir static F_Tok stateF_expectName[] = { &PE_Parameter::On_expectName_Identifier, 110*cdf0e10cSrcweir &PE_Parameter::On_expectName_ArrayBracket_Left, 111*cdf0e10cSrcweir &PE_Parameter::On_expectName_Bracket_Right, 112*cdf0e10cSrcweir &PE_Parameter::On_expectName_Comma, 113*cdf0e10cSrcweir &PE_Parameter::On_afterName_Assign }; 114*cdf0e10cSrcweir static INT16 stateT_expectName[] = { Tid_Identifier, 115*cdf0e10cSrcweir Tid_ArrayBracket_Left, 116*cdf0e10cSrcweir Tid_Bracket_Right, 117*cdf0e10cSrcweir Tid_Comma, 118*cdf0e10cSrcweir Tid_Assign }; 119*cdf0e10cSrcweir static F_Tok stateF_afterName[] = { &PE_Parameter::On_afterName_ArrayBracket_Left, 120*cdf0e10cSrcweir &PE_Parameter::On_afterName_Bracket_Right, 121*cdf0e10cSrcweir &PE_Parameter::On_afterName_Comma, 122*cdf0e10cSrcweir &PE_Parameter::On_afterName_Assign }; 123*cdf0e10cSrcweir static INT16 stateT_afterName[] = { Tid_ArrayBracket_Left, 124*cdf0e10cSrcweir Tid_Bracket_Right, 125*cdf0e10cSrcweir Tid_Comma, 126*cdf0e10cSrcweir Tid_Assign }; 127*cdf0e10cSrcweir static F_Tok stateF_finished[] = { &PE_Parameter::On_finished_Comma, 128*cdf0e10cSrcweir &PE_Parameter::On_finished_Bracket_Right }; 129*cdf0e10cSrcweir static INT16 stateT_finished[] = { Tid_Bracket_Right, 130*cdf0e10cSrcweir Tid_Comma }; 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Parameter, start, Hdl_SyntaxError); 133*cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Parameter, expectName, Hdl_SyntaxError); 134*cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Parameter, afterName, Hdl_SyntaxError); 135*cdf0e10cSrcweir SEMPARSE_CREATE_STATUS(PE_Parameter, finished, Hdl_SyntaxError); 136*cdf0e10cSrcweir } 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir 139*cdf0e10cSrcweir void 140*cdf0e10cSrcweir PE_Parameter::InitData() 141*cdf0e10cSrcweir { 142*cdf0e10cSrcweir pStati->SetCur(start); 143*cdf0e10cSrcweir aResultParamInfo.Empty(); 144*cdf0e10cSrcweir } 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir void 147*cdf0e10cSrcweir PE_Parameter::TransferData() 148*cdf0e10cSrcweir { 149*cdf0e10cSrcweir pStati->SetCur(size_of_states); 150*cdf0e10cSrcweir } 151*cdf0e10cSrcweir 152*cdf0e10cSrcweir void 153*cdf0e10cSrcweir PE_Parameter::Hdl_SyntaxError( const char * i_sText) 154*cdf0e10cSrcweir { 155*cdf0e10cSrcweir StdHandlingOfSyntaxError(i_sText); 156*cdf0e10cSrcweir } 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir void 159*cdf0e10cSrcweir PE_Parameter::SpInit_Type() 160*cdf0e10cSrcweir { 161*cdf0e10cSrcweir // Does nothing. 162*cdf0e10cSrcweir } 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir void 165*cdf0e10cSrcweir PE_Parameter::SpInit_Variable() 166*cdf0e10cSrcweir { 167*cdf0e10cSrcweir // Does nothing. 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir void 171*cdf0e10cSrcweir PE_Parameter::SpReturn_Type() 172*cdf0e10cSrcweir { 173*cdf0e10cSrcweir aResultParamInfo.nType = pSpuType->Child().Result_Type().Id(); 174*cdf0e10cSrcweir pStati->SetCur(expectName); 175*cdf0e10cSrcweir } 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir void 178*cdf0e10cSrcweir PE_Parameter::SpReturn_Variable() 179*cdf0e10cSrcweir { 180*cdf0e10cSrcweir if (pSpuVariable->Child().Result_Pattern() > 0) 181*cdf0e10cSrcweir { 182*cdf0e10cSrcweir aResultParamInfo.sSizeExpression = pSpuVariable->Child().Result_SizeExpression(); 183*cdf0e10cSrcweir aResultParamInfo.sInitExpression = pSpuVariable->Child().Result_InitExpression(); 184*cdf0e10cSrcweir } 185*cdf0e10cSrcweir } 186*cdf0e10cSrcweir 187*cdf0e10cSrcweir void 188*cdf0e10cSrcweir PE_Parameter::On_start_Type(const char *) 189*cdf0e10cSrcweir { 190*cdf0e10cSrcweir pSpuType->Push(not_done); 191*cdf0e10cSrcweir } 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir void 194*cdf0e10cSrcweir PE_Parameter::On_start_Bracket_Right(const char *) 195*cdf0e10cSrcweir { 196*cdf0e10cSrcweir SetTokenResult(not_done, pop_success); 197*cdf0e10cSrcweir } 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir void 200*cdf0e10cSrcweir PE_Parameter::On_start_Ellipse(const char *) 201*cdf0e10cSrcweir { 202*cdf0e10cSrcweir SetTokenResult(done, pop_success); 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir aResultParamInfo.nType = Env().AryGate().Types().Tid_Ellipse(); 205*cdf0e10cSrcweir } 206*cdf0e10cSrcweir 207*cdf0e10cSrcweir void 208*cdf0e10cSrcweir PE_Parameter::On_expectName_Identifier(const char * i_sText) 209*cdf0e10cSrcweir { 210*cdf0e10cSrcweir SetTokenResult(done, stay); 211*cdf0e10cSrcweir pStati->SetCur(afterName); 212*cdf0e10cSrcweir 213*cdf0e10cSrcweir aResultParamInfo.sName = i_sText; 214*cdf0e10cSrcweir } 215*cdf0e10cSrcweir 216*cdf0e10cSrcweir void 217*cdf0e10cSrcweir PE_Parameter::On_expectName_ArrayBracket_Left(const char * i_sText) 218*cdf0e10cSrcweir { 219*cdf0e10cSrcweir On_afterName_ArrayBracket_Left(i_sText); 220*cdf0e10cSrcweir } 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir void 223*cdf0e10cSrcweir PE_Parameter::On_expectName_Bracket_Right(const char * i_sText) 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir On_afterName_Bracket_Right(i_sText); 226*cdf0e10cSrcweir } 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir void 229*cdf0e10cSrcweir PE_Parameter::On_expectName_Comma(const char * i_sText) 230*cdf0e10cSrcweir { 231*cdf0e10cSrcweir On_afterName_Comma(i_sText); 232*cdf0e10cSrcweir } 233*cdf0e10cSrcweir 234*cdf0e10cSrcweir void 235*cdf0e10cSrcweir PE_Parameter::On_afterName_ArrayBracket_Left(const char *) 236*cdf0e10cSrcweir { 237*cdf0e10cSrcweir pSpuVariable->Push(not_done); 238*cdf0e10cSrcweir } 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir void 241*cdf0e10cSrcweir PE_Parameter::On_afterName_Bracket_Right(const char *) 242*cdf0e10cSrcweir { 243*cdf0e10cSrcweir SetTokenResult(not_done, pop_success); 244*cdf0e10cSrcweir } 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir void 247*cdf0e10cSrcweir PE_Parameter::On_afterName_Comma(const char *) 248*cdf0e10cSrcweir { 249*cdf0e10cSrcweir SetTokenResult(not_done, pop_success); 250*cdf0e10cSrcweir } 251*cdf0e10cSrcweir 252*cdf0e10cSrcweir void 253*cdf0e10cSrcweir PE_Parameter::On_afterName_Assign(const char *) 254*cdf0e10cSrcweir { 255*cdf0e10cSrcweir pSpuVariable->Push(not_done); 256*cdf0e10cSrcweir } 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir void 259*cdf0e10cSrcweir PE_Parameter::On_finished_Bracket_Right(const char *) 260*cdf0e10cSrcweir { 261*cdf0e10cSrcweir SetTokenResult(not_done, pop_success); 262*cdf0e10cSrcweir } 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir void 265*cdf0e10cSrcweir PE_Parameter::On_finished_Comma(const char *) 266*cdf0e10cSrcweir { 267*cdf0e10cSrcweir SetTokenResult(not_done, pop_success); 268*cdf0e10cSrcweir } 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir 271*cdf0e10cSrcweir } // namespace cpp 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir 274*cdf0e10cSrcweir 275*cdf0e10cSrcweir 276*cdf0e10cSrcweir 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir 280*cdf0e10cSrcweir 281