Changeset 282 in dev for trunk/abdev/BasicCompiler32
- Timestamp:
- Aug 14, 2007, 11:57:32 PM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler32
- Files:
-
- 3 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 } -
trunk/abdev/BasicCompiler32/MakePeHdr.cpp
r281 r282 509 509 510 510 511 ///////////////////////////////////////////////////////////////// 512 // vtblの構築 513 ///////////////////////////////////////////////////////////////// 514 515 compiler.GetObjectModule().meta.GetClasses().GenerateVTables(); 516 517 511 518 512 519 //////////////////////////////// 513 520 // ここで一旦ログを取る 514 521 //////////////////////////////// 522 515 523 Diagnose(); 516 524 … … 1065 1073 compiler.linker.ResolveUserProcSchedules( MemPos_CodeSection ); 1066 1074 compiler.linker.ResolveGlobalVarSchedules( MemPos_RWSection ); 1075 compiler.linker.ResolveVtblSchedule( MemPos_DataSection ); 1067 1076 1068 1077 -
trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp
r253 r282 1311 1311 pNativeCode->PutUserProcSchedule( pUserProc, false ); 1312 1312 } 1313 void CodeGenerator::op_mov_RV_vtbl( int reg, const CClass *pClass ) 1314 { 1315 // mov reg,vtblAddress 1316 1317 //オペコード、レジスタ 1318 pNativeCode->Put( (char)(0xB8|REGISTER_OPERAND(reg)) ); 1319 1320 //DISP32 1321 pNativeCode->PutVtblSchedule( pClass ); 1322 }
Note:
See TracChangeset
for help on using the changeset viewer.