Ignore:
Timestamp:
Jun 29, 2008, 2:08:44 AM (16 years ago)
Author:
dai_9181
Message:

#171への対応。テンプレート展開後のクラスメソッドの実装で、SizeOf(T)が正常値を返さない不具合を修正(特にTが4バイト未満の型場合)。

File:
1 edited

Legend:

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

    r667 r672  
    377377    }
    378378}
    379 void Opcode_Func_SizeOf( const std::string &typeName ){
     379void Opcode_Func_SizeOf( const std::string &typeName )
     380{
    380381    Type tempType;
    381     if( !compiler.StringToType( typeName, tempType ) ){
     382    if( !compiler.StringToType( typeName, tempType ) )
     383    {
    382384        compiler.errorMessenger.Output(3,typeName,cp);
    383385        return;
    384386    }
    385387
    386     int typeSize = tempType.GetSize();
    387 
    388388    //mov rax,size
    389     compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,typeSize);
     389    compiler.codeGenerator.op_mov_RV( sizeof(_int64), REG_RAX, compiler.SizeOf( tempType ) );
    390390}
    391391void Opcode_Func_ClassSizeOf( const std::string &typeName )
    392392{
    393393    Type tempType;
    394     if( !compiler.StringToType( typeName, tempType ) ){
     394    if( !compiler.StringToType( typeName, tempType ) )
     395    {
    395396        compiler.errorMessenger.Output(3,typeName,cp);
    396397        return;
    397398    }
    398399
    399     int typeSize = ( tempType.IsObject() ) ?
    400         tempType.GetClass().GetSize() : tempType.GetSize();
     400    if( !tempType.IsObject() )
     401    {
     402        compiler.errorMessenger.Output(1,typeName,cp);
     403        return;
     404    }
    401405
    402406    //mov rax,size
    403     compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,typeSize);
     407    compiler.codeGenerator.op_mov_RV( sizeof(_int64), REG_RAX, tempType.GetClass().GetSize() );
    404408}
    405409void Opcode_Func_VarPtr( const char *Parameter, Type &resultType, bool isCallOn ){
Note: See TracChangeset for help on using the changeset viewer.