Changeset 77 in dev
- Timestamp:
- Mar 22, 2007, 2:41:19 AM (18 years ago)
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/Compile_CallProc.cpp
r76 r77 47 47 ParamImpl *pobj_parameter=0; 48 48 pobj_parameter=new ParamImpl(lpszParms); 49 50 // デフォルト引数を適用 51 pobj_parameter->ApplyDefaultParameters( pProcPointer->Params() ); 49 52 50 53 //エラーチェック … … 223 226 pobj_parameter=new ParamImpl(temporary); 224 227 228 // デフォルト引数を適用 229 pobj_parameter->ApplyDefaultParameters( pUserProc->RealParams() ); 230 225 231 //エラーチェック 226 232 if( !pobj_parameter->ErrorCheck(pUserProc->GetName(),pUserProc->RealParams(),pUserProc->GetSecondParmNum() ) ){ … … 370 376 pobj_parameter=new ParamImpl(lpszParms); 371 377 378 // デフォルト引数を適用 379 pobj_parameter->ApplyDefaultParameters( pDllProc->Params() ); 380 372 381 //エラーチェック 373 382 if( !pobj_parameter->ErrorCheck( pDllProc->GetName(), pDllProc->Params() ) ){ -
BasicCompiler32/Opcode.h
r76 r77 224 224 UserProc *OverloadSolution( const char *name, std::vector<UserProc *> &subs ); 225 225 226 void ApplyDefaultParameters( const Parameters ¶ms ); 226 227 bool ErrorCheck( const string &procName, const Parameters ¶ms, int SecondParmNum = -1 ); 227 228 void MacroParameterSupport( const Parameters ¶ms ); -
BasicCompiler64/Compile_CallProc.cpp
r75 r77 47 47 ParamImpl *pobj_parameter=0; 48 48 pobj_parameter=new ParamImpl(lpszParms); 49 50 // デフォルト引数を適用 51 pobj_parameter->ApplyDefaultParameters( pProcPointer->Params() ); 49 52 50 53 //エラーチェック … … 231 234 pobj_parameter=new ParamImpl(temporary); 232 235 236 // デフォルト引数を適用 237 pobj_parameter->ApplyDefaultParameters( pUserProc->RealParams() ); 238 233 239 //エラーチェック 234 240 if( !pobj_parameter->ErrorCheck(pUserProc->GetName(),pUserProc->RealParams(),pUserProc->GetSecondParmNum() ) ){ … … 407 413 pobj_parameter=new ParamImpl(lpszParms); 408 414 415 // デフォルト引数を適用 416 pobj_parameter->ApplyDefaultParameters( pDllProc->Params() ); 417 409 418 //エラーチェック 410 419 if( !pobj_parameter->ErrorCheck( pDllProc->GetName(), pDllProc->Params() ) ){ -
BasicCompiler64/Opcode.h
r76 r77 357 357 UserProc *OverloadSolution( const char *name, std::vector<UserProc *> &subs ); 358 358 359 void ApplyDefaultParameters( const Parameters ¶ms ); 359 360 bool ErrorCheck( const string &procName, const Parameters ¶ms, int SecondParmNum = -1 ); 360 361 void MacroParameterSupport( const Parameters ¶ms ); -
BasicCompiler_Common/ParamImpl.cpp
r75 r77 93 93 //パラメータの個数が不一致の場合 94 94 int max = (int)targetParms.size(); 95 if(max!=ParmsNum){ 95 96 if( ParmsNum > max ){ 97 // 実引数が駆り引数より多いとき 98 // ※無条件で不一致 96 99 return false; 97 100 } … … 100 103 for(int i=0;i<max;i++){ 101 104 Parameter ¶m = *targetParms[i]; 105 106 if( i >= ParmsNum ){ 107 // 引数が多いとき 108 if( param.GetInitValue().size() > 0 ){ 109 // 初期値が指定されているパラメータを考慮 110 return true; 111 } 112 else{ 113 return false; 114 } 115 } 102 116 103 117 if(Parms[i]){ … … 125 139 } 126 140 else if(level==OVERLOAD_LEVEL3){ 127 if(argType.GetBasicType()==DEF_OBJECT||param.GetBasicType()==DEF_OBJECT) return 0;141 if(argType.GetBasicType()==DEF_OBJECT||param.GetBasicType()==DEF_OBJECT) return false; 128 142 } 129 143 } … … 222 236 223 237 return pUserProc; 238 } 239 240 void ParamImpl::ApplyDefaultParameters( const Parameters ¶ms ){ 241 if( ParmsNum == (int)params.size() ){ 242 // デフォルト引数の適用が不必要なとき 243 return; 244 } 245 246 while( ParmsNum < (int)params.size() ){ 247 Parameter ¶m = *params[ParmsNum]; 248 249 Parms[ParmsNum]=(char *)HeapAlloc(hHeap,0,param.GetInitValue().size() + 1 ); 250 lstrcpy(Parms[ParmsNum],param.GetInitValue().c_str() ); 251 ParmsNum++; 252 } 224 253 } 225 254 -
BasicCompiler_Common/Parameter.h
r75 r77 14 14 int subScripts[MAX_ARRAYDIM]; 15 15 16 const string initValue; 17 16 18 public: 17 Parameter( const string &varName, const Type &type, bool isRef = false ):19 Parameter( const string &varName, const Type &type, bool isRef = false, const string initValue = "" ): 18 20 Type( type ), 19 21 varName( varName ), 20 22 isRef( isRef ), 21 isArray( false ) 23 isArray( false ), 24 initValue( initValue ) 22 25 { 23 26 subScripts[0] = -1; … … 27 30 varName( param.varName ), 28 31 isRef( param.isRef ), 29 isArray( false ) 32 isArray( false ), 33 initValue( param.initValue ) 30 34 { 31 35 subScripts[0] = -1; … … 55 59 int *GetSubScriptsPtr(){ 56 60 return subScripts; 61 } 62 63 const string &GetInitValue() const 64 { 65 return initValue; 57 66 } 58 67 -
BasicCompiler_Common/Procedure.cpp
r75 r77 85 85 } 86 86 87 //型88 87 Type type( DEF_NON ); 89 if(sourceOfParams[i]==1&&sourceOfParams[i+1]==ESC_AS){ 88 char initValue[8192] = ""; 89 if( sourceOfParams[i] == '=' ){ 90 i++; 91 i = GetOneParameter( sourceOfParams, i, initValue ); 92 93 //エラー用 94 cp = nowLine; 95 96 NumOpe_GetType( initValue, Type::String(), type ); 97 } 98 else if(sourceOfParams[i]==1&&sourceOfParams[i+1]==ESC_AS){ 90 99 i+=2; 91 100 … … 154 163 } 155 164 156 Parameter *pParam = new Parameter( name, type, isRef );165 Parameter *pParam = new Parameter( name, type, isRef, initValue ); 157 166 if( isArray ){ 158 167 pParam->SetArray( subScripts ); -
BasicCompiler_Common/StrOperation.cpp
r49 r77 175 175 return 0; 176 176 } 177 int GetOneParameter(c har *Parameter,int pos,char *retAns){177 int GetOneParameter(const char *Parameter,int pos,char *retAns){ 178 178 int i,i2,i3,IsStr; 179 179 for(i=pos,i2=0,IsStr=0;;i++,i2++){ … … 196 196 break; 197 197 } 198 199 if(IsCommandDelimitation(Parameter[i])&&IsStr==0 200 || Parameter[i] == ')' && IsStr == 0 ){ 201 retAns[i2]=0; 202 break; 203 } 204 198 205 retAns[i2]=Parameter[i]; 199 if(IsCommandDelimitation(Parameter[i])&&IsStr==0){200 retAns[i2]=0;201 break;202 }203 206 } 204 207 return i; -
BasicCompiler_Common/Type.cpp
r76 r77 486 486 return (string)"(null)"; 487 487 } 488 489 Type Type::String(){ 490 extern CClass *pobj_StringClass; 491 if( pobj_StringClass == NULL ){ 492 SetError(); 493 } 494 return Type( DEF_OBJECT, *pobj_StringClass ); 495 } -
BasicCompiler_Common/Type.h
r75 r77 122 122 index = type.index; 123 123 } 124 125 static Type String(); 124 126 }; -
BasicCompiler_Common/common.h
r76 r77 387 387 _int8 IsCommandDelimitation(char c); 388 388 BOOL IsBlank(char c); 389 int GetOneParameter(c har *Parameter,int pos,char *retAns);389 int GetOneParameter(const char *Parameter,int pos,char *retAns); 390 390 int JumpOneParameter(char *Parameter,int i); 391 391 int GetStringInQuotation(char *buffer,char *ReadBuffer);
Note:
See TracChangeset
for help on using the changeset viewer.