Ignore:
Timestamp:
Aug 9, 2007, 3:18:40 AM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev/BasicCompiler_Common/include
Files:
1 added
7 edited

Legend:

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

    r266 r270  
    3131typedef vector<InheritedInterface> Interfaces;
    3232
    33 class CClass: public Prototype
     33class CClass: public Prototype, public Jenga::Common::ObjectInHashmap<CClass>
    3434{
    3535public:
     
    148148    }
    149149
     150    virtual const std::string &GetKeyName() const
     151    {
     152        return GetName();
     153    }
     154    virtual bool IsDuplication( const CClass *pClass ) const
     155    {
     156        if( pClass->IsEqualSymbol( *this ) )
     157        {
     158            return true;
     159        }
     160        return false;
     161    }
     162
    150163    void Readed(){
    151164        isReady = true;
     
    355368};
    356369
    357 #define MAX_CLASS_HASH 65535
    358 class Classes
     370class Classes : public Jenga::Common::Hashmap<CClass>
    359371{
    360     CClass *pobj_ClassHash[MAX_CLASS_HASH];
    361     int GetHashCode(const char *name) const;
    362 
    363372    // XMLシリアライズ用
    364 private:
    365     friend class boost::serialization::access;
    366     BOOST_SERIALIZATION_SPLIT_MEMBER();
    367     template<class Archive> void load(Archive& ar, const unsigned int version)
    368     {
    369         trace_for_serialize( "serializing(load) - Classes" );
    370 
    371         std::vector<CClass *> vectorClasses;
    372         ar & BOOST_SERIALIZATION_NVP( vectorClasses );
    373 
    374         // 読み込み後の処理
    375         Clear();
    376         BOOST_FOREACH( CClass *pClass, vectorClasses )
    377         {
    378             Insert( pClass );
    379         }
    380         Iterator_Init();
    381     }
    382     template<class Archive> void save(Archive& ar, const unsigned int version) const
    383     {
    384         trace_for_serialize( "serializing(save) - Classes" );
    385 
    386         // 保存準備
    387         std::vector<CClass *> vectorClasses;
    388         vectorClasses.clear();
    389         Iterator_Reset();
    390         while( Iterator_HasNext() )
    391         {
    392             vectorClasses.push_back( dynamic_cast<CClass *>(Iterator_GetNext()) );
    393         }
    394 
    395         ar & BOOST_SERIALIZATION_NVP( vectorClasses );
    396     }
    397 
    398373public:
    399374    Classes()
     
    401376        , pStringClass( NULL )
    402377        , pObjectClass( NULL )
    403         , ppobj_IteClass( NULL )
    404         , iIteMaxNum( 0 )
    405         , iIteNextNum( 0 )
    406     {
    407         memset( pobj_ClassHash, 0, MAX_CLASS_HASH * sizeof(CClass *) );
     378    {
    408379    }
    409380    ~Classes()
    410381    {
    411         for(int i=0;i<MAX_CLASS_HASH;i++){
    412             if(pobj_ClassHash[i]) DestroyClass(pobj_ClassHash[i]);
    413         }
    414     }
    415     void DestroyClass(CClass *pobj_c)
    416     {
    417         if(pobj_c->pobj_NextClass){
    418             DestroyClass(pobj_c->pobj_NextClass);
    419         }
    420 
    421         delete pobj_c;
    422     }
    423     void Clear()
    424     {
    425         if(ppobj_IteClass)
    426         {
    427             free(ppobj_IteClass);
    428             ppobj_IteClass = NULL;
    429         }
    430         // TODO: ここはこれでいいのか…
    431         memset( pobj_ClassHash, 0, MAX_CLASS_HASH * sizeof(CClass *) );
    432382    }
    433383
     
    473423    CClass *GetStringClassPtr() const;
    474424    CClass *GetObjectClassPtr() const;
    475 
    476 
    477     /////////////////////
    478     // イテレータ
    479     /////////////////////
    480 private:
    481     mutable CClass **ppobj_IteClass;
    482     mutable int iIteMaxNum;
    483     mutable int iIteNextNum;
    484 public:
    485     void Iterator_Init() const;
    486     void Iterator_Reset() const;
    487     BOOL Iterator_HasNext() const;
    488     CClass *Iterator_GetNext() const;
    489     int Iterator_GetMaxCount() const;
    490425};
  • trunk/abdev/BasicCompiler_Common/include/Compiler.h

    r269 r270  
    66#include <DataTable.h>
    77#include <CodeGenerator.h>
     8#include <ObjectModule.h>
    89#include <Linker.h>
    910
     
    2829    {
    2930        delete pObjectModule;
     31        Clear();
    3032    }
     33    void Clear()
     34    {
     35        BOOST_FOREACH( ObjectModule *pStaticLibrary, staticLibraries )
     36        {
     37            delete pStaticLibrary;
     38        }
     39        staticLibraries.clear();
     40    }
     41
     42    void StaticLink( ObjectModules &staticLibraries );
    3143
    3244    NamespaceSupporter &GetNamespaceSupporter()
     
    4658    // 静的リンクするオブジェクトファイル
    4759    std::vector<std::string> staticLibraryFilePaths;
     60
     61    // 静的リンクするオブジェクトモジュール
     62    ObjectModules staticLibraries;
    4863
    4964    // オブジェクトモジュール
     
    98113
    99114
    100 
    101115    static bool StringToType( const std::string &typeName, Type &type );
    102116    static const std::string TypeToString( const Type &type );
  • trunk/abdev/BasicCompiler_Common/include/Hashmap.h

    r215 r270  
    5252    }
    5353
     54    // 内容を破棄せずにすべて抜き取る
     55    void PullOutAll()
     56    {
     57        memset( hashArray, 0, MAX_HASHMAP*sizeof(T*) );
     58    }
     59
    5460    bool Put( T* value )
    5561    {
     
    8187
    8288    T* GetHashArrayElement( const char *keyName )
     89    {
     90        return hashArray[GetHash(keyName)];
     91    }
     92    const T* GetHashArrayElement( const char *keyName ) const
    8393    {
    8494        return hashArray[GetHash(keyName)];
     
    222232        return pNextObject;
    223233    }
     234    const T *GetChainNext() const
     235    {
     236        return pNextObject;
     237    }
    224238    void SetChainNext( T *pNextObject )
    225239    {
  • trunk/abdev/BasicCompiler_Common/include/Linker.h

    r268 r270  
    11#pragma once
    2 
    3 class ObjectModule : public Jenga::Common::BoostSerializationSupport<ObjectModule>
    4 {
    5 public:
    6     // メタ情報
    7     Meta meta;
    8 
    9     // グローバル領域のネイティブコード
    10     NativeCode globalNativeCode;
    11 
    12     // データテーブル
    13     DataTable dataTable;
    14 
    15     // XMLシリアライズ用
    16 private:
    17     virtual const char *RootTagName() const
    18     {
    19         return "objectModule";
    20     }
    21     friend class boost::serialization::access;
    22     template<class Archive> void serialize(Archive& ar, const unsigned int version)
    23     {
    24         trace_for_serialize( "serializing - objectModule" );
    25 
    26         ar & BOOST_SERIALIZATION_NVP( meta );
    27         ar & BOOST_SERIALIZATION_NVP( globalNativeCode );
    28         ar & BOOST_SERIALIZATION_NVP( dataTable );
    29     }
    30 };
    312
    323class Linker
  • trunk/abdev/BasicCompiler_Common/include/Meta.h

    r256 r270  
    7070    {
    7171    }
     72
     73    // 静的リンク
     74    void StaticLink( Meta &meta );
    7275
    7376    const NamespaceScopesCollection &GetNamespaces() const
  • trunk/abdev/BasicCompiler_Common/include/Procedure.h

    r266 r270  
    5858
    5959public:
     60    bool isTargetObjectModule;
    6061    Procedure( const NamespaceScopes &namespaceScopes, const string &name, Kind kind, bool isCdecl )
    6162        : Symbol( namespaceScopes, name )
     
    6465        , isUsing( false )
    6566        , codePos( -1 )
     67        , isTargetObjectModule( true )
    6668    {
    6769    }
    6870    Procedure()
     71        : isTargetObjectModule( true )
    6972    {
    7073    }
  • trunk/abdev/BasicCompiler_Common/include/option.h

    r215 r270  
    3737
    3838    // XMLシリアライズに関するログを生成する
    39     #define USE_TRACE_FOR_SERIALIZE
     39    //#define USE_TRACE_FOR_SERIALIZE
    4040
    4141    // ソースコードステップに関するログを生成する
Note: See TracChangeset for help on using the changeset viewer.