Changeset 77 in dev for BasicCompiler_Common
- Timestamp:
- Mar 22, 2007, 2:41:19 AM (18 years ago)
- Location:
- BasicCompiler_Common
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
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.