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

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

Location:
trunk/ab5.0/abdev/ab_common/include/Lexical
Files:
1 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Class.h

    r632 r637  
    1818
    1919public:
    20     ClassPrototype( const NamespaceScopes &namespaceScopes, const std::string &name )
    21         : Prototype( namespaceScopes, name )
     20    ClassPrototype( const Symbol &symbol )
     21        : Prototype( symbol )
    2222        , DynamicMethodsPrototype()
    2323    {
     
    9292
    9393        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( ClassPrototype );
     94
     95        if( ActiveBasic::Common::Environment::IsRemoveExternal() )
     96        {
     97            if( this->IsExternal() )
     98            {
     99                this->NeedResolve();
     100                return;
     101            }
     102        }
     103
    94104        ar & BOOST_SERIALIZATION_NVP( classType );
    95105        ar & BOOST_SERIALIZATION_NVP( importedNamespaces );
     
    112122public:
    113123
    114     CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const std::string &name );
    115     CClass( const NamespaceScopes &namespaceScopes,
     124    CClass( const Symbol &symbol, const NamespaceScopesCollection &importedNamespaces );
     125    CClass( const Symbol &symbol,
    116126        const NamespaceScopesCollection &importedNamespaces,
    117         const std::string &name, ClassType classType,
     127        ClassType classType,
    118128        const GenericTypes &formalGenericTypes,
    119129        const Types &superClassActualTypeParameters,
     
    455465    std::string GetStaticDefiningStringAsMemberOffsets() const;
    456466    void GetReferenceOffsetsInitializeBuffer( std::string &referenceOffsetsBuffer, int &numOfReference, int baseOffset = 0 ) const;
     467
     468    virtual bool Resolve();
    457469};
    458470
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Const.h

    r603 r637  
    22
    33//定数
    4 class CConst : public Symbol, public Jenga::Common::ObjectInHashmap<CConst>
     4class CConst
     5    : public RelationalObjectModuleItem
     6    , public Jenga::Common::ObjectInHashmap<CConst>
    57{
    68    Type type;
     
    1416        trace_for_serialize( "serializing - CConst" );
    1517
    16         ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Symbol );
     18        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( RelationalObjectModuleItem );
     19
     20        if( ActiveBasic::Common::Environment::IsRemoveExternal() )
     21        {
     22            if( this->IsExternal() )
     23            {
     24                this->NeedResolve();
     25                return;
     26            }
     27        }
     28
    1729        ar & BOOST_SERIALIZATION_NVP( type );
    1830        ar & BOOST_SERIALIZATION_NVP( i64data );
     
    2032
    2133public:
    22     CConst( const NamespaceScopes &namespaceScopes, const std::string &name, const Type &newType, _int64 i64data)
    23         : Symbol( namespaceScopes, name )
     34    CConst( const Symbol &symbol, const Type &newType, _int64 i64data)
     35        : RelationalObjectModuleItem( symbol )
    2436        , type( newType )
    2537        , i64data( i64data )
    2638    {
    2739    }
    28     CConst( const NamespaceScopes &namespaceScopes, const std::string &name, int value)
    29         : Symbol( namespaceScopes, name )
     40    CConst( const Symbol &symbol, int value)
     41        : RelationalObjectModuleItem( symbol )
    3042        , type( Type(DEF_LONG) )
    3143        , i64data( value )
     
    5365    }
    5466    double GetDoubleData();
     67
     68    virtual bool Resolve();
    5569};
    5670class Consts : public Jenga::Common::Hashmap<CConst>
     
    6983public:
    7084
    71     void Add( const NamespaceScopes &namespaceScopes, const std::string &name, _int64 i64data, const Type &type );
    72     void Add( const NamespaceScopes &namespaceScopes, const std::string &name, int value);
     85    void Add( const Symbol &symbol, _int64 i64data, const Type &type );
     86    void Add( const Symbol &symbol, int value);
    7387
    7488private:
     
    8397
    8498//定数マクロ
    85 class ConstMacro : public Symbol, public Jenga::Common::ObjectInHashmap<ConstMacro>
     99class ConstMacro
     100    : public RelationalObjectModuleItem
     101    , public Jenga::Common::ObjectInHashmap<ConstMacro>
    86102{
    87103    std::vector<std::string> parameters;
     
    95111        trace_for_serialize( "serializing - ConstMacro" );
    96112
    97         ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Symbol );
     113        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( RelationalObjectModuleItem );
     114
     115        if( ActiveBasic::Common::Environment::IsRemoveExternal() )
     116        {
     117            if( this->IsExternal() )
     118            {
     119                this->NeedResolve();
     120                return;
     121            }
     122        }
     123
    98124        ar & BOOST_SERIALIZATION_NVP( parameters );
    99125        ar & BOOST_SERIALIZATION_NVP( expression );
     
    101127
    102128public:
    103     ConstMacro( const NamespaceScopes &namespaceScopes, const std::string &name, const std::vector<std::string> &parameters, const std::string &expression )
    104         : Symbol( namespaceScopes, name )
     129    ConstMacro( const Symbol &symbol, const std::vector<std::string> &parameters, const std::string &expression )
     130        : RelationalObjectModuleItem( symbol )
    105131        , parameters( parameters )
    106132        , expression( expression )
     
    127153        return expression;
    128154    }
     155
     156    virtual bool Resolve();
    129157};
    130 class ConstMacros : public Jenga::Common::Hashmap<ConstMacro>
     158class ConstMacros
     159    : public Jenga::Common::Hashmap<ConstMacro>
    131160{
    132161    // XMLシリアライズ用
     
    142171
    143172public:
    144     bool Add( const NamespaceScopes &namespaceScopes, const std::string &name, const char *parameterStr );
     173    bool Add( const Symbol &symbol, const char *parameterStr );
    145174    ConstMacro *Find( const Symbol &name );
    146175};
  • trunk/ab5.0/abdev/ab_common/include/Lexical/DataTable.h

    r603 r637  
    149149
    150150    void ResetDataSectionBaseOffset( long dataSectionBaseOffset );
     151
     152    void Resolve();
    151153};
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Delegate.h

    r603 r637  
    2222
    2323        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure );
     24
     25        if( ActiveBasic::Common::Environment::IsRemoveExternal() )
     26        {
     27            if( this->IsExternal() )
     28            {
     29                this->NeedResolve();
     30                return;
     31            }
     32        }
     33
    2434        ar & BOOST_SERIALIZATION_NVP( importedNamespaces );
    2535        ar & BOOST_SERIALIZATION_NVP( dynamicParams );
     
    2737
    2838public:
    29     Delegate( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const std::string &name, Procedure::Kind procKind, const char *paramStr, const std::string &returnTypeName, int sourceIndex )
    30         : Procedure( namespaceScopes, name, procKind, false )
     39    Delegate( const Symbol &symbol, const NamespaceScopesCollection &importedNamespaces, Procedure::Kind procKind, const char *paramStr, const std::string &returnTypeName, int sourceIndex )
     40        : Procedure( symbol, procKind, false )
    3141        , importedNamespaces( importedNamespaces )
    3242        , paramStr( paramStr )
     
    8191    */
    8292    bool IsSimilar( const Delegate &dgt ) const;
     93
     94    virtual bool Resolve();
    8395};
    8496typedef Jenga::Common::Hashmap<Delegate> Delegates;
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Meta.h

    r636 r637  
    157157
    158158    const CClass *FindClassSupportedTypeDef( const Symbol &symbol );
     159
     160    void Resolve();
    159161};
  • trunk/ab5.0/abdev/ab_common/include/Lexical/NativeCode.h

    r636 r637  
    123123class SourceLine
    124124{
    125     int lineNum;
    126125    long nativeCodePos;
    127     int relationalObjectModuleIndex;
    128     long sourceCodePos;
    129126    DWORD codeType;
     127    SourceCodePosition sourceCodePosition;
    130128
    131129    // XMLシリアライズ用
     
    136134        trace_for_serialize( "serializing - SourceLine" );
    137135
    138         ar & BOOST_SERIALIZATION_NVP( lineNum );
    139136        ar & BOOST_SERIALIZATION_NVP( nativeCodePos );
    140         ar & BOOST_SERIALIZATION_NVP( relationalObjectModuleIndex );
    141         ar & BOOST_SERIALIZATION_NVP( sourceCodePos );
    142137        ar & BOOST_SERIALIZATION_NVP( codeType );
    143     }
    144 
    145 public:
    146     SourceLine( int lineNum, int nativeCodePos, int relationalObjectModuleIndex, int sourceCodePos, DWORD codeType )
    147         : lineNum( lineNum )
    148         , nativeCodePos( nativeCodePos )
    149         , relationalObjectModuleIndex( relationalObjectModuleIndex )
    150         , sourceCodePos( sourceCodePos )
     138        ar & BOOST_SERIALIZATION_NVP( sourceCodePosition );
     139    }
     140
     141public:
     142    SourceLine( int nativeCodePos, DWORD codeType, const SourceCodePosition &sourceCodePosition )
     143        : nativeCodePos( nativeCodePos )
    151144        , codeType( codeType )
     145        , sourceCodePosition( sourceCodePosition )
    152146    {
    153147    }
     
    156150    }
    157151
    158     int GetLineNum() const
    159     {
    160         return lineNum;
    161     }
    162152    long GetNativeCodePos() const
    163153    {
    164154        return nativeCodePos;
    165155    }
    166     int GetRelationalObjectModuleIndex() const
    167     {
    168         return relationalObjectModuleIndex;
    169     }
    170     void SetRelationalObjectModuleIndex( int relationalObjectModuleIndex )
    171     {
    172         this->relationalObjectModuleIndex = relationalObjectModuleIndex;
    173     }
    174     long GetSourceCodePos() const
    175     {
    176         return sourceCodePos;
    177     }
    178     void SetSourceCodePos( int sourceCodePos )
    179     {
    180         this->sourceCodePos = sourceCodePos;
    181     }
    182156    DWORD GetCodeType() const
    183157    {
    184158        return codeType;
     159    }
     160    const SourceCodePosition &GetSourceCodePosition() const
     161    {
     162        return sourceCodePosition;
     163    }
     164    SourceCodePosition &GetSourceCodePosition()
     165    {
     166        return sourceCodePosition;
     167    }
     168    void SetSourceCodePosition( const SourceCodePosition &sourceCodePosition )
     169    {
     170        this->sourceCodePosition = sourceCodePosition;
    185171    }
    186172    bool IsInSystemProc() const
     
    256242        return sourceLines;
    257243    }
    258     void NextSourceLine( int currentSourceIndex, int nowLine );
     244    void NextSourceLine( const SourceCodePosition &sourceCodePosition );
    259245
    260246    void ResetDataSectionBaseOffset( long dataSectionBaseOffset );
    261     void ResetSourceIndexes( const std::vector<int> &relationTable );
     247    void ResetRelationalObjectModuleIndex( const std::vector<int> &relationTable );
     248
     249    void Resolve();
    262250};
  • trunk/ab5.0/abdev/ab_common/include/Lexical/ObjectModule.h

    r636 r637  
    4343
    4444public:
    45     void StaticLink( ObjectModule &objectModule );
    4645
    4746    const std::string &GetName() const
     
    6261    }
    6362
     63    // 静的リンクを行う
     64    void StaticLink( ObjectModule &objectModule, bool isSll );
     65
     66    // 依存関係の解決を行う
     67    void Resolve();
     68
    6469    // 下記の関連になるようなテーブルを取得する
    6570    // 要素 = 古いインデックス、値 = 新しいインデックス
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Procedure.h

    r632 r637  
    11#pragma once
    22
    3 class Procedure : public Symbol
     3class Procedure
     4    : public RelationalObjectModuleItem
    45{
    56public:
     
    3536        trace_for_serialize( "serializing - Procedure" );
    3637
    37         ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Symbol );
     38        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( RelationalObjectModuleItem );
    3839        ar & BOOST_SERIALIZATION_NVP( kind );
    3940        ar & BOOST_SERIALIZATION_NVP( isCdecl );
     
    4546
    4647public:
    47     Procedure( const NamespaceScopes &namespaceScopes, const std::string &name, Kind kind, bool isCdecl )
    48         : Symbol( namespaceScopes, name )
     48    Procedure( const Symbol &symbol, Kind kind, bool isCdecl )
     49        : RelationalObjectModuleItem( symbol )
    4950        , kind( kind )
    5051        , isCdecl( isCdecl )
     
    9192        this->sourceCodePosition = sourceCodePosition;
    9293    }
     94    virtual void ResetRelationalObjectModuleIndex( const std::vector<int> &relationTable );
    9395
    9496    const Parameters &Params() const
     
    156158
    157159        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure );
     160
     161        if( ActiveBasic::Common::Environment::IsRemoveExternal() )
     162        {
     163            if( this->IsExternal() )
     164            {
     165                this->NeedResolve();
     166                return;
     167            }
     168        }
     169
    158170        ar & BOOST_SERIALIZATION_NVP( _paramStr );
    159171        ar & BOOST_SERIALIZATION_NVP( importedNamespaces );
     
    178190public:
    179191
    180     UserProc( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const std::string &name, Kind kind, bool isMacro, bool isCdecl, bool isExport );
     192    UserProc( const Symbol &symbol, const NamespaceScopesCollection &importedNamespaces, Kind kind, bool isMacro, bool isCdecl, bool isExport );
    181193    UserProc( const UserProc &userProc, const CClass *pParentClass );
    182194    UserProc();
     
    206218    }
    207219
     220    virtual void ResetRelationalObjectModuleIndex( const std::vector<int> &relationTable );
     221
    208222    /*!
    209223    @brief  オーバーライド用に関数同士が等しいかどうかをチェックする
     
    360374    const CMethod &GetMethod() const;
    361375
     376    virtual bool Resolve();
    362377
    363378    static const UserProc *pGlobalProc;
     
    389404};
    390405
    391 class DllProc : public Procedure, public Jenga::Common::ObjectInHashmap<DllProc>
     406class DllProc
     407    : public Procedure
     408    , public Jenga::Common::ObjectInHashmap<DllProc>
    392409{
    393410    std::string dllFileName;
     
    403420
    404421        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure );
     422
     423        if( ActiveBasic::Common::Environment::IsRemoveExternal() )
     424        {
     425            if( this->IsExternal() )
     426            {
     427                this->NeedResolve();
     428                return;
     429            }
     430        }
     431
    405432        ar & BOOST_SERIALIZATION_NVP( dllFileName );
    406433        ar & BOOST_SERIALIZATION_NVP( alias );
     
    409436
    410437public:
    411     DllProc( const NamespaceScopes &namespaceScopes, const std::string &name, Kind kind, bool isCdecl, const std::string &dllFileName, const std::string &alias )
    412         : Procedure( namespaceScopes, name, kind, isCdecl )
     438    DllProc( const Symbol &symbol, Kind kind, bool isCdecl, const std::string &dllFileName, const std::string &alias )
     439        : Procedure( symbol, kind, isCdecl )
    413440        , dllFileName( dllFileName )
    414441        , alias( alias )
     
    454481        return lookupAddress;
    455482    }
     483
     484    virtual bool Resolve();
    456485};
    457486class DllProcs : public Jenga::Common::Hashmap<DllProc>
     
    469498};
    470499
    471 class ProcPointer : public Procedure
     500class ProcPointer
     501    : public Procedure
    472502{
    473503    // XMLシリアライズ用
     
    483513public:
    484514    ProcPointer( Kind kind )
    485         : Procedure( NamespaceScopes(), std::string(), kind, false )
     515        : Procedure( Symbol( NamespaceScopes(), std::string() ), kind, false )
    486516    {
    487517    }
     
    489519    {
    490520    }
    491     ~ProcPointer(){}
     521    ~ProcPointer()
     522    {
     523    }
     524
     525    virtual bool Resolve();
    492526};
    493527
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Prototype.h

    r540 r637  
    44
    55
    6 class Prototype : public Symbol
     6class Prototype
     7    : public RelationalObjectModuleItem
    78{
    89public:
     
    2324    template<class Archive> void serialize(Archive& ar, const unsigned int version)
    2425    {
    25         ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Symbol );
     26        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( RelationalObjectModuleItem );
    2627        ar & BOOST_SERIALIZATION_NVP( isUsing );
    2728    }
     
    3031public:
    3132
    32     Prototype( const NamespaceScopes &namespaceScopes, const std::string &name )
    33         : Symbol( namespaceScopes, name )
     33    Prototype( const Symbol &symbol )
     34        : RelationalObjectModuleItem( symbol )
    3435        , isUsing( false )
    3536    {
    3637    }
    3738    Prototype()
    38         : Symbol()
    3939    {
    4040    }
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Source.h

    r636 r637  
    265265class SourceCodePosition
    266266{
    267     std::string objectModuleName;
     267    int relationalObjectModuleIndex;
    268268    int pos;
    269269
     
    273273    template<class Archive> void serialize(Archive& ar, const unsigned int version)
    274274    {
    275         trace_for_serialize( "serializing - IncludedFilesRelation" );
    276 
    277         ar & BOOST_SERIALIZATION_NVP( objectModuleName );
     275        ar & BOOST_SERIALIZATION_NVP( relationalObjectModuleIndex );
    278276        ar & BOOST_SERIALIZATION_NVP( pos );
    279277    }
    280278
    281279public:
    282     SourceCodePosition( const std::string &objectModuleName, int pos )
    283         : objectModuleName( objectModuleName )
     280    SourceCodePosition( int relationalObjectModuleIndex, int pos )
     281        : relationalObjectModuleIndex( relationalObjectModuleIndex )
    284282        , pos( pos )
    285283    {
    286284    }
    287285    SourceCodePosition()
    288         : pos( -1 )
    289     {
    290     }
    291 
    292     const std::string &GetObjectModuleName() const
    293     {
    294         return objectModuleName;
     286        : relationalObjectModuleIndex( -1 )
     287        , pos( -1 )
     288    {
     289    }
     290
     291    int GetRelationalObjectModuleIndex() const;
     292    void SetRelationalObjectModuleIndex( int relationalObjectModuleIndex )
     293    {
     294        this->relationalObjectModuleIndex = relationalObjectModuleIndex;
    295295    }
    296296    int GetPos() const
     
    298298        return pos;
    299299    }
    300 };
     300    void SetPos( int pos )
     301    {
     302        this->pos = pos;
     303    }
     304
     305    bool IsNothing() const;
     306};
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Symbol.h

    r603 r637  
    3838
    3939public:
    40     bool isTargetObjectModule;
    4140    Symbol( const NamespaceScopes &namespaceScopes, const std::string &name )
    4241        : namespaceScopes( namespaceScopes )
    4342        , name( name )
    44         , isTargetObjectModule( true )
    4543    {
    4644    }
     
    4846        : namespaceScopes( symbol.namespaceScopes )
    4947        , name( symbol.name )
    50         , isTargetObjectModule( true )
    5148    {
    5249    }
    5350    Symbol()
    54         : isTargetObjectModule( true )
    5551    {
    5652    }
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Type.h

    r632 r637  
    318318
    319319public:
    320     bool isTargetObjectModule;
    321320    BlittableType( const Type &basicType, CClass *pClass )
    322321        : basicType( basicType )
    323322        , pClass( pClass )
    324         , isTargetObjectModule( true )
    325323    {
    326324    }
    327325    BlittableType()
    328         : isTargetObjectModule( true )
    329326    {
    330327    }
  • trunk/ab5.0/abdev/ab_common/include/Lexical/TypeDef.h

    r632 r637  
    33class TypeDefCollection;
    44
    5 class TypeDef : public Symbol
     5class TypeDef
     6    : public RelationalObjectModuleItem
    67{
    78    friend TypeDefCollection;
     
    1718        trace_for_serialize( "serializing - TypeDef" );
    1819
    19         ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Symbol );
     20        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( RelationalObjectModuleItem );
     21
     22        if( ActiveBasic::Common::Environment::IsRemoveExternal() )
     23        {
     24            if( this->IsExternal() )
     25            {
     26                this->NeedResolve();
     27                return;
     28            }
     29        }
     30
    2031        ar & BOOST_SERIALIZATION_NVP( baseName );
    2132        ar & BOOST_SERIALIZATION_NVP( baseType );
     
    2334
    2435public:
    25     TypeDef( const NamespaceScopes &namespaceScopes, const std::string &name, const std::string &baseName, const Type &baseType );
     36    TypeDef( const Symbol &symbol, const std::string &baseName, const Type &baseType );
    2637    TypeDef()
    2738    {
     
    3950        return baseType;
    4051    }
     52
     53    virtual bool Resolve();
    4154};
    4255
     
    5871    ~TypeDefCollection();
    5972
    60     void Add( const NamespaceScopes &namespaceScopes, const std::string &name, const std::string &baseName, int nowLine );
     73    void Add( const Symbol &symbol, const std::string &baseName, int nowLine );
    6174    const TypeDef *Find( const Symbol &symbol ) const;
    6275};
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Variable.h

    r603 r637  
    11#pragma once
    22
    3 class Variable : public Symbol
     3class Variable
     4    : public RelationalObjectModuleItem
    45{
    56    Type type;
     
    3637        trace_for_serialize( "serializing - Variable" );
    3738
    38         ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Symbol );
     39        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( RelationalObjectModuleItem );
     40
     41        if( ActiveBasic::Common::Environment::IsRemoveExternal() )
     42        {
     43            if( this->IsExternal() )
     44            {
     45                this->NeedResolve();
     46                return;
     47            }
     48        }
     49
    3950        ar & BOOST_SERIALIZATION_NVP( type );
    4051        ar & BOOST_SERIALIZATION_NVP( isConst );
     
    5364public:
    5465    Variable( const Symbol &symbol, const Type &type, bool isConst, bool isRef, const std::string &paramStrForConstructor, bool hasInitData );
    55     Variable( const NamespaceScopes &namespaceScopes, const std::string &name, const Type &type, bool isConst, bool isRef, const std::string &paramStrForConstructor, bool hasInitData );
    5666    Variable( const Variable &var );
    5767    Variable();
     
    165175    }
    166176
     177    virtual bool Resolve();
     178
    167179
    168180    bool isLiving;
Note: See TracChangeset for help on using the changeset viewer.