Ignore:
Timestamp:
Jun 14, 2008, 12:16:27 PM (16 years ago)
Author:
dai_9181
Message:

静的リンクリンカの依存関係解決モジュールを製作中

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/ab_common/src/Lexical/Type.cpp

    r639 r640  
    129129bool Type::Equals( const Type &type ) const
    130130{
    131     if( basicType == type.basicType ){
    132         if( NATURAL_TYPE( basicType ) == DEF_OBJECT
    133             || NATURAL_TYPE( basicType ) == DEF_STRUCT ){
    134 
    135                 if( index == type.index ){
     131    if( basicType == type.basicType )
     132    {
     133        if( NATURAL_TYPE( basicType ) == DEF_OBJECT || NATURAL_TYPE( basicType ) == DEF_STRUCT )
     134        {
     135            // ポインタが等しいかどうかを見てみる
     136            if( this->pClass == type.pClass )
     137            {
     138                return true;
     139            }
     140            else if( this->pClass->IsNeedResolve() || type.pClass->IsNeedResolve() )
     141            {
     142                // 依存関係解決前の状態であれば、パスが等しいかどうかを見てみる
     143                if( this->pClass->IsDuplication( type.pClass ) )
     144                {
    136145                    return true;
    137146                }
    138 
    139         }
    140         else{
     147            }
     148        }
     149        else
     150        {
    141151            return true;
    142152        }
     
    556566}
    557567
    558 bool Type::Resolve( const ObjectModule &resolver )
     568bool Type::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
    559569{
    560570    if( this->HasMember() )
     
    562572        if( this->pClass->IsNeedResolve() )
    563573        {
    564             this->pClass = resolver.meta.GetClasses().FindLike( this->pClass );
     574            const CClass *pTempClass = resolver.meta.GetClasses().FindLike( this->pClass );
     575            if( pTempClass )
     576            {
     577                this->pClass = pTempClass;
     578            }
     579            else
     580            {
     581                resolveErrors.Add( ResolveError( this->pClass->GetRelationalObjectModuleIndex(), this->pClass->GetFullName() ) );
     582            }
    565583        }
    566584
    567585        BOOST_FOREACH( GenericType &actualGenericType, actualGenericTypes )
    568586        {
    569             actualGenericType.GetType().Resolve( resolver );
     587            actualGenericType.GetType().Resolve( resolver, resolveErrors );
    570588        }
    571589    }
     
    655673    return pClass->GetNamespaceScopes().ToString() + "." + pClass->GetName() + "._Create";
    656674}
     675
     676bool BlittableType::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
     677{
     678    basicType.Resolve( resolver, resolveErrors );
     679
     680    if( this->pClass->IsNeedResolve() )
     681    {
     682        const CClass *pTempClass = resolver.meta.GetClasses().FindLike( this->pClass );
     683        if( pTempClass )
     684        {
     685            this->pClass = pTempClass;
     686        }
     687        else
     688        {
     689            resolveErrors.Add( ResolveError( this->pClass->GetRelationalObjectModuleIndex(), this->pClass->GetFullName() ) );
     690        }
     691    }
     692
     693    return true;
     694}
Note: See TracChangeset for help on using the changeset viewer.