Changeset 76 in dev for BasicCompiler32/Compile_CallProc.cpp
- Timestamp:
- Mar 21, 2007, 9:26:56 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/Compile_CallProc.cpp
r75 r76 32 32 33 33 34 int Opcode_CallProcPtr(char *variable,char *Parameter,ProcPointer *pProcPointer,LONG_PTR *plpIndex){ 35 extern HANDLE hHeap; 36 int i; 37 34 bool Opcode_CallProcPtr( const char *variable, const char *lpszParms,ProcPointer *pProcPointer){ 38 35 39 36 extern BOOL bDebugCompile; … … 49 46 //パラメータオブジェクトを生成 50 47 ParamImpl *pobj_parameter=0; 51 pobj_parameter=new ParamImpl( Parameter);48 pobj_parameter=new ParamImpl(lpszParms); 52 49 53 50 //エラーチェック 54 51 if( !pobj_parameter->ErrorCheck(variable,pProcPointer->Params() ) ){ 55 52 //パラメータにエラーがあるときは処理を終える 56 return pProcPointer->ReturnType().GetBasicType();53 return false; 57 54 } 58 55 … … 69 66 //////////////////////// 70 67 RELATIVE_VAR RelativeVar; 71 LONG_PTR lp; 72 GetVarOffsetReadOnly(variable,&i,&RelativeVar,&lp); 68 GetVarOffsetReadOnly(variable,&RelativeVar,Type()); 73 69 SetVarPtrToEax(&RelativeVar); 74 70 … … 89 85 delete pobj_parameter; 90 86 91 if(plpIndex) *plpIndex=pProcPointer->ReturnType().GetIndex(); 92 93 return pProcPointer->ReturnType().GetBasicType(); 87 return true; 94 88 } 95 89 96 void Opcode_CallProc(const char *Parameter,UserProc *pUserProc,DWORD dwFlags,char *ObjectName,int RefType){90 bool Opcode_CallProc(const char *Parameter,UserProc *pUserProc,DWORD dwFlags,const char *ObjectName,int RefType){ 97 91 int i2; 98 92 … … 100 94 if( lstrcmpi( pUserProc->GetName().c_str(), "Print" ) == 0 ){ 101 95 Opcode_Print(Parameter,0); 102 return ;96 return true; 103 97 } 104 98 if( lstrcmpi( pUserProc->GetName().c_str(), "Input" ) == 0 ){ 105 99 Opcode_Input(Parameter); 106 return ;100 return true; 107 101 } 108 102 if( lstrcmpi( pUserProc->GetName().c_str(), "Write" ) == 0 ){ 109 103 Opcode_Print(Parameter,1); 110 return ;104 return true; 111 105 } 112 106 } … … 115 109 116 110 bool isStatic = false; 117 CClass *pobj_c = NULL;111 const CClass *pobj_c = NULL; 118 112 CMethod *pMethod = NULL; 119 113 if( pUserProc->GetParentClassPtr() ){ … … 126 120 else{ 127 121 //"->"によってオブジェクトを指定する通常のメンバ関数呼び出し 128 int type = GetVarType(ObjectName,(LONG_PTR *)&pobj_c,0); 129 if(!(NATURAL_TYPE(type)==DEF_OBJECT)){ 122 Type varType; 123 GetVarType( ObjectName, varType, false ); 124 pobj_c = &varType.GetClass(); 125 if( NATURAL_TYPE( varType.GetBasicType() ) != DEF_OBJECT ){ 130 126 pobj_c=pobj_DBClass->check(ObjectName); 131 127 if( pobj_c ){ … … 160 156 if( !pMethod ){ 161 157 SetError(300,NULL,cp); 162 return ;158 return false; 163 159 } 164 160 … … 179 175 if(dwAccess==ACCESS_NON){ 180 176 SetError(109,pUserProc->GetName(),cp); 181 return ;177 return false; 182 178 } 183 179 } … … 186 182 dwAccess==ACCESS_NON){ 187 183 SetError(109,pUserProc->GetName(),cp); 188 return ;184 return false; 189 185 } 190 186 if(dwAccess==ACCESS_PROTECTED){ 191 187 SetError(110,pUserProc->GetName(),cp); 192 return ;188 return false; 193 189 } 194 190 } … … 198 194 if(dwAccess==ACCESS_NON){ 199 195 SetError(109,pUserProc->GetName(),cp); 200 return; 201 } 202 } 203 } 204 196 return false; 197 } 198 } 199 } 205 200 206 201 … … 220 215 221 216 222 223 217 //////////////////////// 224 218 // パラメータをセット … … 232 226 if( !pobj_parameter->ErrorCheck(pUserProc->GetName(),pUserProc->RealParams(),pUserProc->GetSecondParmNum() ) ){ 233 227 //パラメータにエラーがあるときは処理を終える 234 return ;228 return false; 235 229 } 236 230 … … 278 272 if( pMethod->isConst ){ 279 273 //Constアクセスが可能なメソッドの場合 280 if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return; 274 if( !GetVarOffsetReadOnly( ObjectName, &RelativeVar, Type() ) ){ 275 return false; 276 } 281 277 } 282 278 else{ 283 279 //Constアクセスが不可能なメソッドの場合 284 if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return; 280 if( !GetVarOffsetReadWrite( ObjectName, &RelativeVar, Type() ) ){ 281 return false; 282 } 285 283 } 286 284 … … 351 349 //パラメータオブジェクトを破棄 352 350 delete pobj_parameter; 351 352 return true; 353 353 } 354 354 355 int Opcode_CallDllProc(char *Parameter,DllProc *pDllProc,LONG_PTR *plpIndex){ 356 char *temporary; 357 358 temporary=(char *)HeapAlloc(hHeap,0,lstrlen(Parameter)+1); 355 bool Opcode_CallDllProc( const char *lpszParms, DllProc *pDllProc ){ 359 356 360 357 extern BOOL bDebugCompile; … … 371 368 //パラメータオブジェクトを生成 372 369 ParamImpl *pobj_parameter=0; 373 pobj_parameter=new ParamImpl( Parameter);370 pobj_parameter=new ParamImpl(lpszParms); 374 371 375 372 //エラーチェック 376 373 if( !pobj_parameter->ErrorCheck( pDllProc->GetName(), pDllProc->Params() ) ){ 377 374 //パラメータにエラーがあるときは処理を終える 378 return pDllProc->ReturnType().GetBasicType();375 return false; 379 376 } 380 377 … … 406 403 delete pobj_parameter; 407 404 408 if(plpIndex) *plpIndex=pDllProc->ReturnType().GetIndex(); 409 410 HeapDefaultFree(temporary); 411 412 return pDllProc->ReturnType().GetBasicType(); 405 return true; 413 406 }
Note:
See TracChangeset
for help on using the changeset viewer.