Ignore:
Timestamp:
Mar 6, 2008, 11:28:05 PM (16 years ago)
Author:
dai_9181
Message:

[415]を64bit版にマージ。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/Compile_CallProc.cpp

    r370 r416  
    128128                //"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
    129129                Type varType;
    130                 GetVarType( ObjectName, varType, false );
    131                 if( NATURAL_TYPE( varType.GetBasicType() ) == DEF_OBJECT )
     130                if( GetTermType( ObjectName, varType ) )
    132131                {
    133                     pobj_c = &varType.GetClass();
    134                     leftType = varType;
     132                    if( varType.IsObject() )
     133                    {
     134                        pobj_c = &varType.GetClass();
     135                        leftType = varType;
     136                    }
    135137                }
    136                 else
     138
     139                if( !pobj_c )
    137140                {
    138141                    pobj_c=compiler.GetObjectModule().meta.GetClasses().Find(ObjectName);
     
    319322            if(lstrcmpi(ObjectName,"Super")==0) goto InClassMember;
    320323            else{
    321                 RELATIVE_VAR RelativeVar;
    322                 if( pMethod->IsConst() ){
    323                     //Constアクセスが可能なメソッドの場合
    324                     if( !GetVarOffsetReadOnly( ObjectName, &RelativeVar, Type() ) ){
    325                         return false;
    326                     }
     324                bool isLiteral;
     325                if( !TermOpe( ObjectName, Type(), Type(), isLiteral, NULL, NULL, false, !pMethod->IsConst() ) )
     326                {
     327                    return false;
    327328                }
    328                 else{
    329                     //Constアクセスが不可能なメソッドの場合
    330                     if( !GetVarOffsetReadWrite( ObjectName, &RelativeVar, Type() ) ){
    331                         return false;
    332                     }
    333                 }
    334 
    335                 SetVarPtrToReg(REG_RCX,&RelativeVar);
    336 
    337                 // 参照を実体ポインタにする
    338                 //mov rcx,qword ptr[rcx]
    339                 compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RCX,REG_RCX,0,MOD_BASE);
     329
     330                // 実態ポインタをraxにコピー
     331                compiler.codeGenerator.op_mov_RR( REG_RCX, REG_RAX );
    340332            }
    341333        }
Note: See TracChangeset for help on using the changeset viewer.