Changeset 28 in dev for BasicCompiler32/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
  • BasicCompiler32/Compile_ProcOp.cpp

    r27 r28  
    554554            //仮想関数テーブルを初期化
    555555            if(pobj_CompilingClass->vtbl_num&&
    556                 pobj_CompilingClass->IsHoldAbstractFunction()==0){
    557                 //関数テーブルに値をセット
    558                 offset=pobj_CompilingClass->GetVtblGlobalOffset();
    559 
    560                 //mov eax,offset
    561                 OpBuffer[obp++]=(char)0xB8;
    562                 *((long *)(OpBuffer+obp))=offset;
    563                 pobj_DataTableSchedule->add();
    564                 obp+=sizeof(long);
    565 
    566                 //Thisポインタをecxにコピー
    567                 SetThisPtrToReg(REG_ECX);
    568 
    569                 //mov dword ptr[ecx],eax
    570                 OpBuffer[obp++]=(char)0x89;
    571                 OpBuffer[obp++]=(char)0x01;
     556                pobj_CompilingClass->IsAbstract()==false){
     557                    //関数テーブルに値をセット
     558                    offset=pobj_CompilingClass->GetVtblGlobalOffset();
     559
     560                    //mov eax,offset
     561                    OpBuffer[obp++]=(char)0xB8;
     562                    *((long *)(OpBuffer+obp))=offset;
     563                    pobj_DataTableSchedule->add();
     564                    obp+=sizeof(long);
     565
     566                    //Thisポインタをecxにコピー
     567                    SetThisPtrToReg(REG_ECX);
     568
     569                    //mov dword ptr[ecx],eax
     570                    OpBuffer[obp++]=(char)0x89;
     571                    OpBuffer[obp++]=(char)0x01;
    572572            }
    573573        }
Note: See TracChangeset for help on using the changeset viewer.