Changeset 51 in dev for BasicCompiler64/OperatorProc.cpp


Ignore:
Timestamp:
Feb 10, 2007, 8:30:19 PM (17 years ago)
Author:
dai_9181
Message:

ppobj_Member及びppobj_StaticMemberを廃止し、vectorに統一した(methods及びstaticMethods)。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/OperatorProc.cpp

    r50 r51  
    1010    ////////////////////////////////////////////////
    1111
    12     if(pobj_c->DestructorMemberSubIndex!=-1){
     12    CMethod *method = pobj_c->GetDestructorMethod();
     13    if( method ){
    1314        //mov rcx,reg
    1415        op_mov_RR(REG_RCX,reg);
    1516
    1617        //call DestructorProcAddr
    17         op_call(pobj_c->ppobj_Method[pobj_c->DestructorMemberSubIndex]->psi);
     18        op_call( method->psi );
    1819    }
    1920
     
    294295
    295296        if(bCalcUseHeap){
    296             /*
    297             //未解放のインスタンスが存在する場合
    298             //※専用のローカル変数を用意し、メモリリークを回避
    299             char temporary[VN_SIZE],temp2[VN_SIZE];
    300 
    301 
    302             ////////////////////////////////
    303             // 一時オブジェクト変数を用意
    304             ////////////////////////////////
    305             char szTempVarName[255];
    306             GetTypeName(CalcType,lpCalcIndex,temp2);
    307             sprintf(szTempVarName,"_System_strDummy%d",obp);
    308             wsprintf(temporary,"%s%c%c%s",szTempVarName,1,ESC_AS,temp2);
    309             InsertDimStatement_ToProcHead(temporary);
    310 
    311             RELATIVE_VAR VarRelativeVar;
    312             int VarType;
    313             LONG_PTR lpVarIndex;
    314             if(!GetVarOffsetReadOnly(
    315                 szTempVarName,
    316                 &VarType,
    317                 &VarRelativeVar,
    318                 &lpVarIndex)) return;
    319 
    320 
    321             CClass *pobj_c;
    322             pobj_c=(CClass *)lpCalcIndex;
    323             if(pobj_c->DestructorMemberSubIndex!=-1){
    324 
    325                 //////////////////////////////////////////////////////
    326                 /////    レジスタ資源のバックアップ
    327                 {   BACKUP_REGISTER_RESOURCE
    328                 //////////////////////////////////////////////////////
    329 
    330                     //ループの場合、古い一時オブジェクトのデストラクタを呼ぶ
    331 
    332                     //rcxに変数アドレスをコピー
    333                     SetVarPtrToReg(REG_RCX,&VarRelativeVar);
    334 
    335                     //call destructor
    336                     OpBuffer[obp++]=(char)0xE8;
    337                     pobj_SubAddrSchedule->add(pobj_c->ppobj_Method[pobj_c->DestructorMemberSubIndex]->psi,1);
    338                     obp+=sizeof(long);
    339 
    340                 /////////////////////////////////////////////
    341                 //////   レジスタ資源を復元
    342                     RESTORE_REGISTER_RESOURCE
    343                 }////////////////////////////////////////////
    344             }
    345 
    346             //mov r15,reg
    347             op_mov_RR(REG_R15,reg);
    348 
    349 
    350             int object_size;
    351             object_size=GetSizeOfClass((CClass *)lpVarIndex);
    352 
    353             //mov rcx,object_size
    354             op_mov_RV(sizeof(_int64),REG_RCX,object_size);
    355 
    356             //rdiに変数アドレスをコピー
    357             SetVarPtrToReg(REG_RDI,&VarRelativeVar);
    358 
    359             //mov rsi,reg
    360             op_mov_RR(REG_RSI,reg);
    361 
    362             //mov r14,rdi
    363             op_mov_RR(REG_R14,REG_RDI);
    364             pobj_BlockReg->lock(REG_R14);
    365 
    366             //rep movs byte ptr[rdi],byte ptr[rsi]
    367             op_rep_movs(sizeof(BYTE));
    368 
    369             //////////////////////////////////////////////////////
    370             /////    レジスタ資源のバックアップ
    371             {   BACKUP_REGISTER_RESOURCE
    372             //////////////////////////////////////////////////////
    373 
    374                 //mov rcx,r15
    375                 op_mov_RR(REG_RCX,REG_R15);
    376 
    377                 //call free
    378                 extern SUBINFO *pSub_free;
    379                 OpBuffer[obp++]=(char)0xE8;
    380                 pobj_SubAddrSchedule->add(pSub_free,1);
    381                 obp+=sizeof(long);
    382 
    383             /////////////////////////////////////////////
    384             //////   レジスタ資源を復元
    385                 RESTORE_REGISTER_RESOURCE
    386             }////////////////////////////////////////////
    387 
    388 
    389             //mov reg,r14
    390             op_mov_RR(reg,REG_R14);
    391 
    392             pobj_BlockReg->unlock(REG_R14);
    393             */
    394 
    395297            //未解放のインスタンスが存在する旨を示す警告
    396298            SetError(-105,NULL,cp);
    397 
    398299        }
    399300
Note: See TracChangeset for help on using the changeset viewer.