Changeset 49 in dev for BasicCompiler32/Compile_Var.cpp


Ignore:
Timestamp:
Feb 10, 2007, 6:13:37 AM (17 years ago)
Author:
dai_9181
Message:

戻り値オブジェクトのメンバを直接的に参照できるようにした。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_Var.cpp

    r40 r49  
    362362    extern BOOL bCompilingGlobal;
    363363    int i,RefType;
     364    LONG_PTR lpIndex;
    364365    char variable[VN_SIZE],member[VN_SIZE],VarName[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
    365366
     
    370371    else lstrcpy(variable,NameBuffer);
    371372
     373
     374    if( FormatUseProcReturnObject( variable, VarName, array, RefType, member ) ){
     375        // 戻り値オブジェクトのメンバを直接参照しているとき
     376        //例: func().member
     377
     378        void *pInfo;
     379        int idProc=GetProc(VarName,&pInfo);
     380
     381        if(idProc){
     382            pRelativeVar->dwKind=VAR_DIRECTMEM;
     383
     384
     385            ////////////////
     386            // 呼び出し
     387            ////////////////
     388
     389            *pType=CallProc(idProc,pInfo,VarName,array,&lpIndex);
     390
     391            //戻り値をecxにコピー
     392            op_mov_RR( REG_ECX, REG_EAX );
     393
     394
     395            LONG_PTR lp2;
     396            if(!GetMemberOffset(
     397                isErrorEnabled,
     398                isWriteAccess,
     399                (CClass *)lpIndex,
     400                member,pType,pRelativeVar,&lp2,0)) return 0;
     401            if(plpIndex) *plpIndex=lp2;
     402
     403            return 1;
     404        }
     405    }
     406
     407
    372408    lstrcpy(VarName,variable);
    373409    GetVarFormatString(VarName,array,lpPtrOffset,member,&RefType);
    374410
    375     LONG_PTR lpIndex;
    376411    int *pSubScripts;
    377412    bool bConst;
Note: See TracChangeset for help on using the changeset viewer.