Changeset 282 in dev for trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
- Timestamp:
- Aug 14, 2007, 11:57:32 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r278 r282 499 499 //仮想関数テーブルを初期化 500 500 if( compiler.pCompilingClass->IsExistVirtualFunctions() 501 && !compiler.pCompilingClass->IsAbstract() ){ 502 //関数テーブルに値をセット 503 int offset = (int)compiler.pCompilingClass->GetVtblGlobalOffset(); 504 505 //mov eax,offset 506 compiler.codeGenerator.op_mov_RV( REG_EAX, offset, Schedule::DataTable ); 507 508 //Thisポインタをecxにコピー 509 SetThisPtrToReg(REG_ECX); 510 511 //mov dword ptr[ecx],eax 512 compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_ECX, 0, MOD_BASE ); 501 && !compiler.pCompilingClass->IsAbstract() ) 502 { 503 // mov eax,vtblAddress 504 compiler.codeGenerator.op_mov_RV_vtbl( REG_EAX, compiler.pCompilingClass ); 505 506 /* TODO: 消す 507 //関数テーブルに値をセット 508 int offset = (int)compiler.pCompilingClass->GetVtblGlobalOffset(); 509 510 //mov eax,offset 511 compiler.codeGenerator.op_mov_RV( REG_EAX, offset, Schedule::DataTable ); 512 */ 513 514 //Thisポインタをecxにコピー 515 SetThisPtrToReg(REG_ECX); 516 517 //mov dword ptr[ecx],eax 518 compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_ECX, 0, MOD_BASE ); 519 520 521 // 仮想関数になるメソッドに使用チェックをつける 522 BOOST_FOREACH( const CMethod *pMethod, compiler.pCompilingClass->GetMethods() ) 523 { 524 if( pMethod->IsVirtual() ) 525 { 526 pMethod->GetUserProc().Using(); 527 } 528 } 513 529 } 514 530 }
Note:
See TracChangeset
for help on using the changeset viewer.