Ignore:
Timestamp:
Aug 23, 2007, 6:17:00 PM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev/BasicCompiler_Common/include
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/include/Class.h

    r293 r299  
    5656    const CClass *pSuperClass;
    5757
     58    // 継承クラスの型パラメータ(実パラメータ)
     59    Types superClassActualTypeParameters;
     60
    5861    // Blittable型情報
    5962    Type blittableType;
     
    9396        ar & BOOST_SERIALIZATION_NVP( formalGenericTypes );
    9497        ar & boost::serialization::make_nvp( "pSuperClass", const_cast<CClass *&>(pSuperClass) );
     98        ar & BOOST_SERIALIZATION_NVP( superClassActualTypeParameters );
    9599        ar & BOOST_SERIALIZATION_NVP( blittableType );
    96100        //ar & BOOST_SERIALIZATION_NVP( interfaces );
     
    185189        this->formalGenericTypes.push_back( genericType );
    186190    }
     191    int GetFormalGenericTypeParameterIndex( const std::string &name ) const
     192    {
     193        int i = 0;
     194        BOOST_FOREACH( const GenericType &genericType, formalGenericTypes )
     195        {
     196            if( genericType.GetName() == name )
     197            {
     198                return i;
     199            }
     200            i++;
     201        }
     202        return -1;
     203    }
    187204    bool IsExistFormalGenericTypeParameter( const std::string &name ) const
    188205    {
     
    210227        this->pSuperClass = pSuperClass;
    211228    }
     229    const Types &GetSuperClassActualTypeParameters() const
     230    {
     231        return superClassActualTypeParameters;
     232    }
     233    void SetSuperClassActualTypeParameters( const Types &actualTypeParameters )
     234    {
     235        this->superClassActualTypeParameters = actualTypeParameters;
     236    }
    212237
    213238    // Blittable型
     
    270295    //継承させる
    271296    bool Inherits( const char *inheritNames, int nowLine );
    272     bool InheritsClass( const CClass &inheritsClass, int nowLine );
     297    bool InheritsClass( const CClass &inheritsClass, const Types &actualTypeParameters, int nowLine );
    273298    bool InheritsInterface( const CClass &inheritsClass, int nowLine );
    274299
  • trunk/abdev/BasicCompiler_Common/include/Compiler.h

    r294 r299  
    123123
    124124
    125     static bool StringToType( const std::string &typeName, Type &type );
    126     static const std::string TypeToString( const Type &type );
     125    bool StringToType( const std::string &typeName, Type &type );
     126    const std::string TypeToString( const Type &type );
    127127
    128128    // コンパイル中のクラス
  • trunk/abdev/BasicCompiler_Common/include/Member.h

    r266 r299  
    5353    }
    5454
    55     Type GetType() const
     55    const Type &GetType() const
    5656    {
    5757        return type;
     58    }
     59    void ResetType( const Type &type )
     60    {
     61        this->type = type;
    5862    }
    5963
  • trunk/abdev/BasicCompiler_Common/include/Type.h

    r293 r299  
    2626        const CClass *pClass;
    2727    };
     28
     29    // ジェネリクス クラス インスタンス型の場合に使う
    2830    GenericTypes actualGenericTypes;
     31
     32    // 型パラメータで使う
     33    std::string formalTypeName; // 型パラメータの名前
     34    int formalTypeIndex;        // 型パラメータの引数番号
    2935
    3036    // XMLシリアライズ用
     
    4450        {
    4551            ar & BOOST_SERIALIZATION_NVP( index );
     52        }
     53
     54        if( IsTypeParameter() )
     55        {
     56            ar & BOOST_SERIALIZATION_NVP( formalTypeName );
     57            ar & BOOST_SERIALIZATION_NVP( formalTypeIndex );
    4658        }
    4759    }
     
    7183        , index( type.index )
    7284        , actualGenericTypes( type.actualGenericTypes )
     85        , formalTypeName( type.formalTypeName )
     86        , formalTypeIndex( type.formalTypeIndex )
    7387    {
    7488    }
     
    8195        index = type.index;
    8296        actualGenericTypes = type.actualGenericTypes;
     97        formalTypeName = type.formalTypeName;
     98        formalTypeIndex = type.formalTypeIndex;
    8399    }
    84100
     
    176192    bool HasMember() const;
    177193
     194    // 型パラメータの名前を取得
     195    const std::string &GetFormalTypeName() const
     196    {
     197        if( !IsTypeParameter() )
     198        {
     199            Jenga::Throw( "型パラメータでない型に対してGetFormalTypeNameメソッドが呼ばれた" );
     200        }
     201        return formalTypeName;
     202    }
     203    void SetFormalTypeName( const std::string &formalTypeName )
     204    {
     205        if( !IsTypeParameter() )
     206        {
     207            Jenga::Throw( "型パラメータでない型に対してSetFormalTypeNameメソッドが呼ばれた" );
     208        }
     209        this->formalTypeName = formalTypeName;
     210    }
     211    int GetFormalTypeIndex() const
     212    {
     213        if( !IsTypeParameter() )
     214        {
     215            Jenga::Throw( "型パラメータでない型に対してGetFormalTypeIndexメソッドが呼ばれた" );
     216        }
     217        return formalTypeIndex;
     218    }
     219    void SetFormalTypeIndex( int formalTypeIndex )
     220    {
     221        if( !IsTypeParameter() )
     222        {
     223            Jenga::Throw( "型パラメータでない型に対してSetFormalTypeIndexメソッドが呼ばれた" );
     224        }
     225        this->formalTypeIndex = formalTypeIndex;
     226    }
     227
    178228    // 未完成
    179229    const Type &GetDummyActualGenericType() const;
     
    189239    static int GetBasicTypeFromSimpleName( const char *variable );
    190240};
     241typedef std::vector<Type> Types;
     242
     243void ResolveFormalGenericTypeParameter( Type &typeParameter, const Type &classType, const UserProc *pUserProc = NULL );
    191244
    192245class GenericType
Note: See TracChangeset for help on using the changeset viewer.