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

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

Location:
trunk/ab5.0/abdev/BasicCompiler_Common
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/BasicCompiler_Common/calculation.cpp

    r598 r672  
    492492                            return false;
    493493                        }
    494                         i64nums[pnum] = tempType.GetSize();
     494                        i64nums[pnum] = compiler.SizeOf( tempType );
    495495                        StrPtr[pnum]=0;
    496496                    }
  • trunk/ab5.0/abdev/BasicCompiler_Common/include/Compiler.h

    r636 r672  
    190190    bool StringToType( const std::string &typeName, Type &type );
    191191    const std::string TypeToString( const Type &type );
     192
     193    // ジェネリック型の型パラメータ解決をサポートした上でSizeOf関数の戻り値を取得する
     194    int SizeOf( const Type &type );
    192195
    193196    void ClearCompilingUserProcAndClass();
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp

    r641 r672  
    351351}
    352352
     353int Compiler::SizeOf( const Type &type )
     354{
     355    Type tempType( type );
     356    if( this->IsCompilingClass() )
     357    {
     358        if( this->pCompilingClass->IsExpanded() && tempType.IsTypeParameter() )
     359        {
     360            // 現在コンパイル中のクラスがテンプレート展開済みのクラスで、
     361            // 尚且つターゲットとなる型が型パラメータだったとき
     362
     363            // テンプレート展開情報を用いて型解決を行う
     364            this->pCompilingClass->ResolveExpandedClassActualTypeParameter( tempType );
     365        }
     366    }
     367    return tempType.GetSize();
     368}
     369
    353370void Compiler::ClearCompilingUserProcAndClass()
    354371{
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp

    r668 r672  
    14401440        _class.GetClassType(),
    14411441        _class.GetFormalGenericTypes(),
    1442         actualTypes,
     1442        _class.GetSuperClassActualTypeParameters(),
    14431443        _class.GetConstructorMemberSubIndex(),
    14441444        _class.GetDestructorMemberSubIndex(),
    14451445        0,
    1446         _class.GetFixedAlignment()
     1446        _class.GetFixedAlignment(),
     1447        actualTypes
    14471448    );
    14481449
Note: See TracChangeset for help on using the changeset viewer.