Ignore:
Timestamp:
Mar 8, 2007, 2:49:34 AM (17 years ago)
Author:
dai_9181
Message:

すべてのオブジェクトを参照型に切り替えた。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/Compile_CallProc.cpp

    r63 r64  
    1212
    1313    //mov rdx,rax
    14     op_mov64_ToReg_FromReg(REG_RDX,REG_RAX);
     14    op_mov_RR(REG_RDX,REG_RAX);
    1515
    1616    //mov rcx,rsp
    17     op_mov64_ToReg_FromReg(REG_RCX,REG_RSP);
     17    op_mov_RR(REG_RCX,REG_RSP);
    1818
    1919    //call _DebugSys_SaveContext
     
    9696}
    9797
    98 void Opcode_CallProc(char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType){
     98void Opcode_CallProc(const char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType){
    9999    int i2;
    100100
     
    207207
    208208    ///////////////////////////////////////////////////////////////
    209     // _System_LocalThis、_System_ReturnObjectのダミーをセット
     209    // _System_LocalThisのダミーをセット
    210210    ///////////////////////////////////////////////////////////////
    211211
     
    216216    }
    217217
    218     if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false ){
    219         //_System_ReturnObject(第一または第二パラメータのダミーを作成)
    220         sprintf(temporary+lstrlen(temporary),"%c%c0,",1,ESC_BYVAL);
    221     }
    222 
    223218    if(Parameter[0]=='\0'&&temporary[0])
    224219        temporary[lstrlen(temporary)-1]=0;
    225220    else lstrcat(temporary,Parameter);
     221
     222
     223    //パラメータセット前のspオフセットを取得(Newの場合はここにThisポインタが格納されている)
     224    int this_sp_offset = pobj_sf->GetNowSp();
    226225
    227226
     
    254253    pobj_parameter->SetParameter(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum);
    255254
    256 
    257     if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false){
     255    if(psi->ReturnType==DEF_STRUCT && psi->isReturnRef == false){
    258256        //////////////////////////////////////////////////////
    259         // 戻り値にオブジェクト インスタンスを持つ場合
    260         // ※ByRef _System_ReturnObject パラメータをセット
     257        // 戻り値に構造体インスタンスを持つ場合
     258        // ※ByRef _System_ReturnValue パラメータをセット
    261259        //////////////////////////////////////////////////////
    262260
     
    316314                SetVarPtrToReg(REG_RCX,&RelativeVar);
    317315
    318                 //参照タイプが "->" の場合
    319                 if(RefType==DEF_PTR_OBJECT){
    320                     //mov rcx,qword ptr[rcx]
    321                     op_mov_RM(sizeof(_int64),REG_RCX,REG_RCX,0,MOD_BASE);
    322                 }
     316                // 参照を実体ポインタにする
     317                //mov rcx,qword ptr[rcx]
     318                op_mov_RM(sizeof(_int64),REG_RCX,REG_RCX,0,MOD_BASE);
    323319            }
    324320        }
     
    329325
    330326                //mov rcx,qword ptr[rsp+offset]     ※スタックフレームを利用
    331                 pobj_sf->ref(REG_RCX);
     327                pobj_sf->ref_offset_data(REG_RCX, this_sp_offset);
    332328            }
    333329            else{
Note: See TracChangeset for help on using the changeset viewer.