Ignore:
Timestamp:
Jun 11, 2008, 10:10:26 PM (16 years ago)
Author:
dai_9181
Message:

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

File:
1 edited

Legend:

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

    r636 r637  
    5050    {
    5151        UserProc *pUserProc = meta.GetUserProcs().Iterator_GetNext();
    52         pUserProc->isTargetObjectModule = false;
     52        if( pUserProc->IsExternal() )
     53        {
     54            // 外部参照の場合は取り込まない
     55            continue;
     56        }
     57
     58        pUserProc->ResetRelationalObjectModuleIndex( relationTable );
    5359
    5460        pUserProc->GetNativeCode().ResetDataSectionBaseOffset( dataSectionBaseOffset );
    55         pUserProc->GetNativeCode().ResetSourceIndexes( relationTable );
    5661
    5762        this->userProcs.Put( pUserProc );
     
    6469    {
    6570        DllProc *pDllProc = meta.GetDllProcs().Iterator_GetNext();
    66         pDllProc->isTargetObjectModule = false;
     71        if( pDllProc->IsExternal() )
     72        {
     73            // 外部参照の場合は取り込まない
     74            continue;
     75        }
     76
     77        pDllProc->ResetRelationalObjectModuleIndex( relationTable );
    6778        this->dllProcs.Put( pDllProc );
    6879    }
     
    7485    {
    7586        CClass *pClass = meta.GetClasses().Iterator_GetNext();
    76         pClass->isTargetObjectModule = false;
     87        if( pClass->IsExternal() )
     88        {
     89            // 外部参照の場合は取り込まない
     90            continue;
     91        }
     92
     93        pClass->ResetRelationalObjectModuleIndex( relationTable );
    7794        pClass->Readed();
    7895        this->GetClasses().Put( pClass );
     
    84101    BOOST_FOREACH( Variable *pVar, meta.globalVars )
    85102    {
     103        if( pVar->IsExternal() )
     104        {
     105            // 外部参照の場合は取り込まない
     106            continue;
     107        }
     108
    86109        // 基底スコープレベルのグローバル変数の生存値をオンにする
    87110        if( pVar->GetScopeLevel() == 0 )
     
    99122        }
    100123
    101         pVar->isTargetObjectModule = false;
     124        pVar->ResetRelationalObjectModuleIndex( relationTable );
    102125        this->globalVars.Add( pVar, isResetOffsetAddress );
    103126    }
     
    113136    {
    114137        CConst *pConst = meta.GetGlobalConsts().Iterator_GetNext();
    115         pConst->isTargetObjectModule = false;
     138        if( pConst->IsExternal() )
     139        {
     140            // 外部参照の場合は取り込まない
     141            continue;
     142        }
     143
     144        pConst->ResetRelationalObjectModuleIndex( relationTable );
    116145        this->GetGlobalConsts().Put( pConst );
    117146    }
     
    123152    {
    124153        ConstMacro *pConstMacro = meta.GetGlobalConstMacros().Iterator_GetNext();
    125         pConstMacro->isTargetObjectModule = false;
     154        if( pConstMacro->IsExternal() )
     155        {
     156            // 外部参照の場合は取り込まない
     157            continue;
     158        }
     159
     160        pConstMacro->ResetRelationalObjectModuleIndex( relationTable );
    126161        this->GetGlobalConstMacros().Put( pConstMacro );
    127162    }
     
    131166    BOOST_FOREACH( BlittableType &blittableType, meta.blittableTypes )
    132167    {
    133         blittableType.isTargetObjectModule = false;
     168        // TODO: coreモジュール以外でもBlittable型用のクラスモジュールを定義できるようにすべき
    134169        this->blittableTypes.push_back( blittableType );
    135170    }
     
    139174    BOOST_FOREACH( TypeDef &typeDef, meta.typeDefs )
    140175    {
    141         typeDef.isTargetObjectModule = false;
     176        if( typeDef.IsExternal() )
     177        {
     178            // 外部参照の場合は取り込まない
     179            continue;
     180        }
     181
     182        typeDef.ResetRelationalObjectModuleIndex( relationTable );
    142183        this->typeDefs.push_back( typeDef );
    143184    }
     
    147188    BOOST_FOREACH( ProcPointer *pProcPointer, meta.procPointers )
    148189    {
    149         pProcPointer->isTargetObjectModule = false;
     190        if( pProcPointer->IsExternal() )
     191        {
     192            // 外部参照の場合は取り込まない
     193            continue;
     194        }
     195
     196        pProcPointer->ResetRelationalObjectModuleIndex( relationTable );
    150197        this->procPointers.push_back( pProcPointer );
    151198    }
     
    157204    {
    158205        Delegate *pDelegate = meta.GetDelegates().Iterator_GetNext();
    159         pDelegate->isTargetObjectModule = false;
     206        if( pDelegate->IsExternal() )
     207        {
     208            // 外部参照の場合は取り込まない
     209            continue;
     210        }
     211
     212        pDelegate->ResetRelationalObjectModuleIndex( relationTable );
    160213        this->GetDelegates().Put( pDelegate );
    161214    }
     
    199252    return NULL;
    200253}
     254
     255void Meta::Resolve()
     256{
     257    // 関数・メソッド
     258    this->GetUserProcs().Iterator_Init();
     259    this->GetUserProcs().Iterator_Reset();
     260    while( this->GetUserProcs().Iterator_HasNext() )
     261    {
     262        UserProc *pUserProc = this->GetUserProcs().Iterator_GetNext();
     263        pUserProc->Resolve();
     264    }
     265
     266    // DLL関数
     267    this->GetDllProcs().Iterator_Init();
     268    this->GetDllProcs().Iterator_Reset();
     269    while( this->GetDllProcs().Iterator_HasNext() )
     270    {
     271        DllProc *pDllProc = this->GetDllProcs().Iterator_GetNext();
     272        pDllProc->Resolve();
     273    }
     274
     275    // クラス
     276    this->GetClasses().Iterator_Init();
     277    this->GetClasses().Iterator_Reset();
     278    while( this->GetClasses().Iterator_HasNext() )
     279    {
     280        CClass *pClass = this->GetClasses().Iterator_GetNext();
     281        pClass->Resolve();
     282    }
     283
     284    // グローバル変数
     285    BOOST_FOREACH( Variable *pVar, globalVars )
     286    {
     287        pVar->Resolve();
     288    }
     289
     290    // グローバル定数
     291    this->GetGlobalConsts().Iterator_Init();
     292    this->GetGlobalConsts().Iterator_Reset();
     293    while( this->GetGlobalConsts().Iterator_HasNext() )
     294    {
     295        CConst *pConst = this->GetGlobalConsts().Iterator_GetNext();
     296        pConst->Resolve();
     297    }
     298
     299    // グローバル定数マクロ
     300    this->GetGlobalConstMacros().Iterator_Init();
     301    this->GetGlobalConstMacros().Iterator_Reset();
     302    while( this->GetGlobalConstMacros().Iterator_HasNext() )
     303    {
     304        ConstMacro *pConstMacro = this->GetGlobalConstMacros().Iterator_GetNext();
     305        pConstMacro->Resolve();
     306    }
     307
     308    // TypeDef
     309    BOOST_FOREACH( TypeDef &typeDef, typeDefs )
     310    {
     311        typeDef.Resolve();
     312    }
     313
     314    // 関数ポインタ
     315    BOOST_FOREACH( ProcPointer *pProcPointer, procPointers )
     316    {
     317        pProcPointer->Resolve();
     318    }
     319
     320    // デリゲート
     321    this->GetDelegates().Iterator_Init();
     322    this->GetDelegates().Iterator_Reset();
     323    while( this->GetDelegates().Iterator_HasNext() )
     324    {
     325        Delegate *pDelegate = this->GetDelegates().Iterator_GetNext();
     326        pDelegate->Resolve();
     327    }
     328}
Note: See TracChangeset for help on using the changeset viewer.