Changeset 350 in dev for trunk/abdev/BasicCompiler32/Compile_CallProc.cpp
- Timestamp:
- Oct 14, 2007, 9:41:03 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_CallProc.cpp
r349 r350 156 156 ///////////////////////////////// 157 157 pMethod = NULL; 158 if( ! isStatic ) pMethod = pobj_c->GetDynamicMethodO fInterfaceMethod( pUserProc );158 if( ! isStatic ) pMethod = pobj_c->GetDynamicMethodOrInterfaceMethod( pUserProc ); 159 159 if( ! pMethod ){ 160 160 //動的メソッドが取得できなかったときは静的メソッドを当たる … … 280 280 ////////////////////////////////////////////////////// 281 281 // メンバ関数の場合 282 // ※_System_LocalThis パラメータを セット282 // ※_System_LocalThis パラメータをecxにセット 283 283 ////////////////////////////////////////////////////// 284 284 … … 319 319 } 320 320 } 321 322 //push ecx 323 compiler.codeGenerator.op_push(REG_ECX); 324 } 325 326 if( pUserProc->IsVirtual() && !isFixedClass ){ 327 //仮想関数(オブジェクトメソッド)呼び出し 328 //pObj->func_table->func1 329 // ->func2 330 // ->func3 331 321 } 322 323 if( pUserProc->IsVirtual() && !isFixedClass ) 324 { 332 325 int vtblIndex; 333 326 if( pobj_c->IsInterface() ) … … 347 340 348 341 // インターフェイスの場合は更に__thisを取得する 349 //mov rcx,qword ptr[rcx+offset_this]342 //mov ecx,qword ptr[ecx+offset_this] 350 343 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_ECX, REG_ECX, offset_this, MOD_BASE_DISP8 ); 351 344 … … 376 369 // vtblのポインタを取得 377 370 //mov edx,dword ptr[edx+vtblMasterListIndex] 378 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EDX, REG_EDX, vtblMasterListIndex, MOD_BASE_DISP32 ); 379 } 371 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EDX, REG_EDX, vtblMasterListIndex*PTR_SIZE, MOD_BASE_DISP32 ); 372 } 373 374 //push ecx 375 compiler.codeGenerator.op_push(REG_ECX); 380 376 381 377 //call dword ptr[edx+func_index] … … 399 395 //通常呼び出し 400 396 397 if( pUserProc->GetParentClassPtr() && isStatic == false ) 398 { 399 //push ecx 400 compiler.codeGenerator.op_push(REG_ECX); 401 } 402 401 403 //call ProcAddr 402 404 compiler.codeGenerator.op_call(pUserProc);
Note:
See TracChangeset
for help on using the changeset viewer.