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_x86/Compile_Func.cpp

    r666 r672  
    533533    }
    534534
    535     int typeSize = tempType.GetSize();
    536 
    537535    //mov eax,size
    538     compiler.codeGenerator.op_mov_RV( REG_EAX, typeSize );
     536    compiler.codeGenerator.op_mov_RV( REG_EAX, compiler.SizeOf( tempType ) );
    539537}
    540538void Opcode_Func_ClassSizeOf( const std::string &typeName )
     
    546544    }
    547545
    548     int typeSize = ( tempType.IsObject() ) ?
    549         tempType.GetClass().GetSize() : tempType.GetSize();
     546    if( !tempType.IsObject() )
     547    {
     548        compiler.errorMessenger.Output(1,typeName,cp);
     549        return;
     550    }
    550551
    551552    //mov eax,size
    552     compiler.codeGenerator.op_mov_RV( REG_EAX, typeSize );
     553    compiler.codeGenerator.op_mov_RV( REG_EAX, tempType.GetClass().GetSize() );
    553554}
    554555void Opcode_Func_VarPtr( const char *Parameter, Type &resultType, bool isCallOn ){
Note: See TracChangeset for help on using the changeset viewer.