Changeset 28 in dev for BasicCompiler64/Compile_ProcOp.cpp


Ignore:
Timestamp:
Jan 8, 2007, 6:34:44 AM (17 years ago)
Author:
dai_9181
Message:

・【32ビットコンパイラ】戻り値に実態オブジェクトを持つインデクサを呼び出すと強制終了してしまうバグを修正。
・仮想関数のオーバーロードが正常に動作しないバグを修正。
・純仮想関数(抽象メソッド)が仮想関数でオーバーロードされていると、クラスのインスタンスが生成できてしまうバグを修正。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/Compile_ProcOp.cpp

    r27 r28  
    600600            //仮想関数テーブルを初期化
    601601            if(pobj_CompilingClass->vtbl_num&&
    602                 pobj_CompilingClass->IsHoldAbstractFunction()==0){
    603                 //関数テーブルに値をセット
    604                 offset=(int)pobj_CompilingClass->GetVtblGlobalOffset();
    605 
    606                 //mov rax,offset
    607                 op_mov_RV(sizeof(_int64),REG_RAX,offset);
    608                 obp-=sizeof(long);
    609                 pobj_DataTableSchedule->add();
    610                 obp+=sizeof(long);
    611 
    612                 //Thisポインタをrcxにコピー
    613                 SetThisPtrToReg(REG_RCX);
    614 
    615                 //mov qword ptr[rcx],rax
    616                 op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
     602                pobj_CompilingClass->IsAbstract()==false){
     603                    //関数テーブルに値をセット
     604                    offset=(int)pobj_CompilingClass->GetVtblGlobalOffset();
     605
     606                    //mov rax,offset
     607                    op_mov_RV(sizeof(_int64),REG_RAX,offset);
     608                    obp-=sizeof(long);
     609                    pobj_DataTableSchedule->add();
     610                    obp+=sizeof(long);
     611
     612                    //Thisポインタをrcxにコピー
     613                    SetThisPtrToReg(REG_RCX);
     614
     615                    //mov qword ptr[rcx],rax
     616                    op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
    617617            }
    618618        }
Note: See TracChangeset for help on using the changeset viewer.