Ignore:
Timestamp:
Sep 28, 2007, 12:05:10 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/NumOpe.cpp

    r331 r334  
    147147    const int useReg = REG_EAX;
    148148
     149
     150    ////////////////////////////////
     151    // インデクサ(getアクセサ)
     152    ////////////////////////////////
     153    char VarName[VN_SIZE],ArrayElements[VN_SIZE];
     154    GetArrayElement(member,VarName,ArrayElements);
     155    if(ArrayElements[0]){
     156        Type classType;
     157        GetMemberType( leftType, VarName, classType, 0, false );
     158        if( classType.IsObject() )
     159        {
     160            //オブジェクトポインタをecxにコピー
     161            compiler.codeGenerator.op_mov_RR( REG_ECX, useReg );
     162
     163            RELATIVE_VAR relativeVar;
     164            relativeVar.dwKind=VAR_DIRECTMEM;
     165
     166            if( !_member_offset(
     167                true,   //エラー表示あり
     168                false,  //読み込み専用
     169                leftType,
     170                VarName,&relativeVar,classType,0)){
     171                    return false;
     172            }
     173
     174            // オブジェクトメンバのポインタをeaxにコピー
     175            if( !VarToReg( relativeVar, baseType, resultType ) ){
     176                SetError(11,termFull,cp);
     177            }
     178
     179
     180            //オブジェクトポインタをスタックに入れておく
     181            //push eax
     182            compiler.codeGenerator.op_push( REG_EAX );
     183
     184            char objectFullName[VN_SIZE], dummyArrayElements[VN_SIZE];
     185            GetArrayElement(termFull,objectFullName,dummyArrayElements);
     186
     187            CallIndexerGetterProc(/*UseReg,*/classType,objectFullName, ArrayElements,resultType, PROCFLAG_NEW );
     188
     189            compiler.codeGenerator.op_pop();
     190
     191            return true;
     192        }
     193    }
     194
     195
     196    ///////////////////////////////////////////////////////////////////
     197    // メンバを検索
     198    ///////////////////////////////////////////////////////////////////
    149199    if( GetMemberType( leftType, member, resultType, 0, false ) ){
    150200        // メンバが見つかったとき
Note: See TracChangeset for help on using the changeset viewer.