Ignore:
Timestamp:
Sep 8, 2007, 8:43:18 PM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp

    r316 r317  
    510510            //仮想関数テーブルを初期化
    511511            if( compiler.pCompilingClass->IsExistVirtualFunctions()
    512                 && !compiler.pCompilingClass->IsAbstract() ){
    513                     //関数テーブルに値をセット
    514                     int offset = (int)compiler.pCompilingClass->GetVtblGlobalOffset();
    515 
    516                     //mov rax,offset
    517                     compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,offset, Schedule::DataTable );
    518 
    519                     //Thisポインタをrcxにコピー
    520                     SetThisPtrToReg(REG_RCX);
    521 
    522                     //mov qword ptr[rcx],rax
    523                     compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
     512                && !compiler.pCompilingClass->IsAbstract() )
     513            {
     514                // mov rax,vtblAddress
     515                compiler.codeGenerator.op_mov_RV_vtbl( REG_RAX, compiler.pCompilingClass );
     516
     517                //Thisポインタをrcxにコピー
     518                SetThisPtrToReg(REG_RCX);
     519
     520                //mov qword ptr[rcx],rax
     521                compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
     522
     523
     524                // 仮想関数になるメソッドに使用チェックをつける
     525                BOOST_FOREACH( const CMethod *pMethod, compiler.pCompilingClass->GetMethods() )
     526                {
     527                    if( pMethod->IsVirtual() )
     528                    {
     529                        pMethod->GetUserProc().Using();
     530                    }
     531                }
    524532            }
    525533        }
Note: See TracChangeset for help on using the changeset viewer.