Changeset 667 in dev


Ignore:
Timestamp:
Jun 26, 2008, 11:10:05 PM (16 years ago)
Author:
dai_9181
Message:

[666]を64bit版にマージ

Location:
trunk/ab5.0/abdev/compiler_x64
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/compiler_x64/Compile_Func.cpp

    r584 r667  
    1212    if( lstrcmpi( FuncName, "AddressOf" ) == 0 )        return FUNC_ADDRESSOF;
    1313    if( lstrcmpi( FuncName, "SizeOf" ) == 0 )           return FUNC_SIZEOF;
     14    if( lstrcmpi( FuncName, "__ClassSizeOf" ) == 0 )            return FUNC_CLASS_SIZEOF;
    1415    if( lstrcmpi( FuncName, "VarPtr" ) == 0 )           return FUNC_VARPTR;
    1516    if( lstrcmpi( FuncName, "ObjPtr" ) == 0 )           return FUNC_OBJPTR;
     
    383384    }
    384385
     386    int typeSize = tempType.GetSize();
     387
     388    //mov rax,size
     389    compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,typeSize);
     390}
     391void Opcode_Func_ClassSizeOf( const std::string &typeName )
     392{
     393    Type tempType;
     394    if( !compiler.StringToType( typeName, tempType ) ){
     395        compiler.errorMessenger.Output(3,typeName,cp);
     396        return;
     397    }
     398
    385399    int typeSize = ( tempType.IsObject() ) ?
    386400        tempType.GetClass().GetSize() : tempType.GetSize();
     
    573587            resultType.SetBasicType( DEF_LONG );
    574588            break;
     589        case FUNC_CLASS_SIZEOF:
     590            if( isCallOn ) Opcode_Func_ClassSizeOf(Parameter);
     591            resultType.SetBasicType( DEF_LONG );
     592            break;
    575593        case FUNC_VARPTR:
    576594            Opcode_Func_VarPtr( Parameter, resultType, isCallOn );
  • trunk/ab5.0/abdev/compiler_x64/FunctionValue.h

    r432 r667  
    2424#define FUNC_SYSTEM_GET_DEFAULT_CONSTRUCTOR     0x0629
    2525#define FUNC_SYSTEM_GET_DESTRUCTOR              0x062A
     26#define FUNC_CLASS_SIZEOF   0x062B
    2627
    2728//ポインタ
Note: See TracChangeset for help on using the changeset viewer.