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

libファイルを跨ったテンプレート展開に対応。

Location:
trunk/ab5.0/abdev/BasicCompiler_Common
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/BasicCompiler_Common/BreakPoint.cpp

    r603 r636  
    4242    const IncludedFilesRelation *pIncludedFilesRelation = NULL;
    4343    const BasicSource *pNowSource = NULL;
    44     BOOST_FOREACH( const BasicSource &source, compiler.GetObjectModule().GetSources() )
     44    BOOST_FOREACH( const ObjectModule *pObjectModule, compiler.staticLibraries )
    4545    {
    46         pIncludedFilesRelation = &source.GetIncludedFilesRelation();
     46        const BasicSource *pSource = &pObjectModule->GetSource();
     47
     48        pIncludedFilesRelation = &pSource->GetIncludedFilesRelation();
    4749
    4850        for(FileNum=0;FileNum<pIncludedFilesRelation->GetFileCounts();FileNum++)
     
    5052            if(lstrcmpi(pIncludedFilesRelation->GetFilePathFromFileNumber(FileNum).c_str(),lpszFileName)==0)
    5153            {
    52                 pNowSource = &source;
     54                pNowSource = pSource;
    5355                break;
    5456            }
  • trunk/ab5.0/abdev/BasicCompiler_Common/CDebugThreadInfo.cpp

    r280 r636  
    3737    lplpSpBase=(ULONG_PTR *)HeapAlloc(hHeap,0,(iProcLevel+1)*sizeof(ULONG_PTR));
    3838    lpdwCp=(DWORD *)HeapAlloc(hHeap,0,(iProcLevel+1)*sizeof(DWORD));
    39     lpdwSourceIndex=(DWORD *)HeapAlloc(hHeap,0,(iProcLevel+1)*sizeof(DWORD));
     39    this->relationalObjectModuleIndexes.resize( iProcLevel + 1 );
    4040
    4141    //lplpObp
     
    108108        HeapDefaultFree(lplpSpBase);
    109109        HeapDefaultFree(lpdwCp);
    110         HeapDefaultFree(lpdwSourceIndex);
     110        relationalObjectModuleIndexes.clear();
    111111    }
    112112
  • trunk/ab5.0/abdev/BasicCompiler_Common/Compile.cpp

    r632 r636  
    1818//デバッグ用行番号情報
    1919SourceLines oldSourceLines;
     20
     21// オブジェクトモジュールリストに類似したソースコードリスト
     22BasicSources sourcesLinkRelationalObjectModule;
    2023
    2124
     
    744747            }
    745748
    746             compiler.codeGenerator.NextSourceLine( compiler.GetObjectModule().GetCurrentSourceIndex() );
     749            compiler.codeGenerator.NextSourceLine( compiler.GetCurrentRelationalObjectModuleIndexForSource() );
    747750
    748751            if(Command[0]==1){
  • trunk/ab5.0/abdev/BasicCompiler_Common/Debug.cpp

    r605 r636  
    5858    const IncludedFilesRelation *pIncludedFilesRelation = NULL;
    5959    const BasicSource *pNowSource = NULL;
    60     BOOST_FOREACH( const BasicSource &source, compiler.GetObjectModule().GetSources() )
     60    BOOST_FOREACH( const ObjectModule *pObjectModule, compiler.staticLibraries )
    6161    {
    62         pIncludedFilesRelation = &source.GetIncludedFilesRelation();
     62        const BasicSource *pSource = &pObjectModule->GetSource();
     63
     64        pIncludedFilesRelation = &pSource->GetIncludedFilesRelation();
    6365
    6466        for(FileNum=0;FileNum<pIncludedFilesRelation->GetFileCounts();FileNum++)
     
    6668            if(lstrcmpi(pIncludedFilesRelation->GetFilePathFromFileNumber(FileNum).c_str(),szFilePath)==0)
    6769            {
    68                 pNowSource = &source;
     70                pNowSource = pSource;
    6971                break;
    7072            }
  • trunk/ab5.0/abdev/BasicCompiler_Common/DebugMiddleFile.cpp

    r603 r636  
    9999    }
    100100
     101    // オブジェクトモジュールリストに類似したソースコードリスト
     102    {
     103        // オブジェクトモジュールリストに類似したソースコードリストを作成
     104        BasicSources sources;
     105        BOOST_FOREACH( const ObjectModule *pObjectModule, compiler.staticLibraries )
     106        {
     107            sources.push_back( pObjectModule->GetSource() );
     108        }
     109
     110        // テキストデータにシリアライズ
     111        std::string textString;
     112        sources.WriteBinaryString( textString );
     113
     114        // サイズ
     115        *(long *)(buffer+i2) = (long)textString.size();
     116        i2+=sizeof(long);
     117
     118        //バッファが足りない場合は再確保
     119        if(BufferSize<i2+(int)textString.size()+32768){
     120            while( BufferSize<i2+(int)textString.size()+32768 )
     121            {
     122                BufferSize+=32768;
     123            }
     124
     125            buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
     126        }
     127
     128        // バッファ
     129        memcpy( buffer+i2, textString.c_str(), textString.size() );
     130        i2 += (int)textString.size();
     131    }
     132
    101133
    102134    ////////////////////////
     
    115147        i2+=sizeof(long);
    116148
    117         *(long *)(buffer+i2) = sourceLine.GetSourceIndex();
     149        *(long *)(buffer+i2) = sourceLine.GetRelationalObjectModuleIndex();
    118150        i2+=sizeof(long);
    119151
     
    192224        this->objectModule.ReadString( textString );
    193225
    194         compiler.SelectObjectModule( this->objectModule );
    195     }
    196 
     226        compiler.SelectObjectModule( &this->objectModule );
     227    }
     228
     229    // オブジェクトモジュールリストに類似したソースコードリスト
     230    {
     231        // サイズ
     232        int size = *(long *)(buffer+i2);
     233        i2 += sizeof(long);
     234
     235        // バッファ
     236        const std::string textString( (const char *)(buffer + i2), size );
     237        i2 += size;
     238
     239        // テキストデータからシリアライズ
     240        this->_sourcesLinkRelationalObjectModule.ReadBinaryString( textString );
     241    }
    197242
    198243    //コードと行番号の関係
     
    246291    //ソースコード
    247292    extern char *basbuf;
    248     basbuf = const_cast<char *>(compiler.GetObjectModule().GetSource(0).GetBuffer());
     293    basbuf = const_cast<char *>(compiler.GetObjectModule().GetSource().GetBuffer());
    249294
    250295
     
    252297    // ブレークポイントを適用
    253298    /////////////////////////////
     299
     300    // オブジェクトモジュールリストに類似したソースコードリスト
     301    extern BasicSources sourcesLinkRelationalObjectModule;
     302    sourcesLinkRelationalObjectModule = this->_sourcesLinkRelationalObjectModule;
    254303
    255304    //コードと行番号の関係
     
    364413
    365414    // オブジェクトモジュール
    366     compiler.SelectObjectModule( this->objectModule );
     415    compiler.SelectObjectModule( &this->objectModule );
    367416
    368417    //コードと行番号の関係
  • trunk/ab5.0/abdev/BasicCompiler_Common/DebugSection.h

    r603 r636  
    2424    // オブジェクトモジュール
    2525    ObjectModule objectModule;
     26
     27    // オブジェクトモジュールリストに類似したソースコードリスト
     28    BasicSources _sourcesLinkRelationalObjectModule;
    2629
    2730    //コードと行番号の関係
  • trunk/ab5.0/abdev/BasicCompiler_Common/MakeExe.cpp

    r622 r636  
    3434
    3535    //最後尾に貼り付け
    36     compiler.GetObjectModule().GetCurrentSource().Addition( temp );
     36    compiler.GetObjectModule().GetSource().Addition( temp );
    3737
    3838    HeapDefaultFree(temp);
     
    6464    TypeOfSubSystem=IMAGE_SUBSYSTEM_WINDOWS_GUI;
    6565
     66    // オブジェクトモジュール名をセットする
     67    compiler.GetObjectModule().SetName( program.GetOutputFileName() );
     68
    6669    //プログラムをファイルから読み込む
    67     compiler.GetObjectModule().SetCurrentSourceIndex( (int)compiler.GetObjectModule().GetSources().size() );
    68     compiler.GetObjectModule().GetSources().push_back( BasicSource() );
    69     bool result = compiler.GetObjectModule().GetCurrentSource().ReadFile(
     70    bool result = compiler.GetObjectModule().GetSource().ReadFile(
    7071        program.GetSourceFilePath(),
    7172        compiler.IsDebug(),
     
    8081        goto EndCompile;
    8182    }
    82     if( !compiler.GetObjectModule().GetCurrentSource().cannotIncludePath.empty() )
     83    if( !compiler.GetCurrentSource().cannotIncludePath.empty() )
    8384    {
    8485        compiler.errorMessenger.Output(
    8586            35,
    86             compiler.GetObjectModule().GetCurrentSource().cannotIncludePath,
    87             compiler.GetObjectModule().GetCurrentSource().cannotIncludeSourcePos
     87            compiler.GetCurrentSource().cannotIncludePath,
     88            compiler.GetCurrentSource().cannotIncludeSourcePos
    8889        );
    8990        goto EndCompile;
     
    145146
    146147    ChangeCommandToCode(basbuf);
    147     compiler.GetObjectModule().GetSources()[0]._ResetLength();
     148    compiler.GetObjectModule().GetSource()._ResetLength();
    148149
    149150    if( compiler.errorMessenger.HasError() || bStopCompile )
  • trunk/ab5.0/abdev/BasicCompiler_Common/VarList.cpp

    r587 r636  
    621621        {
    622622            pobj_dti->lpdwCp[i3]=oldSourceLines[i2].GetSourceCodePos();
    623             pobj_dti->lpdwSourceIndex[i3]=oldSourceLines[i2].GetSourceIndex();
     623            pobj_dti->relationalObjectModuleIndexes[i3]=oldSourceLines[i2].GetRelationalObjectModuleIndex();
    624624        }
    625625    }
     
    631631                pobj_dti->lplpSpBase[i2]=pobj_dti->lplpSpBase[i2+1];
    632632                pobj_dti->lpdwCp[i2]=pobj_dti->lpdwCp[i2+1];
    633                 pobj_dti->lpdwSourceIndex[i2]=pobj_dti->lpdwSourceIndex[i2+1];
     633                pobj_dti->relationalObjectModuleIndexes[i2]=pobj_dti->relationalObjectModuleIndexes[i2+1];
    634634            }
    635635            i3--;
     
    639639
    640640    std::string dummyStr;
    641     if(!compiler.GetObjectModule().GetSource( pobj_dti->lpdwSourceIndex[pobj_dti->iProcLevel] ).GetLineInfo( pobj_dti->lpdwCp[pobj_dti->iProcLevel], i2, dummyStr )){
     641    extern BasicSources sourcesLinkRelationalObjectModule;
     642    if(!sourcesLinkRelationalObjectModule[pobj_dti->relationalObjectModuleIndexes[pobj_dti->iProcLevel]].GetLineInfo( pobj_dti->lpdwCp[pobj_dti->iProcLevel], i2, dummyStr )){
    642643        extern HWND hMainDlg;
    643644        //"デバッグ情報の取得に失敗"
     
    721722
    722723                std::string dummyStr;
    723                 compiler.GetObjectModule().GetSource( pobj_dti->lpdwSourceIndex[pobj_dti->iProcLevel] ).GetLineInfo( pobj_dti->lpdwCp[pobj_dti->iProcLevel-i2], i3, dummyStr );
     724                extern BasicSources sourcesLinkRelationalObjectModule;
     725                sourcesLinkRelationalObjectModule[pobj_dti->relationalObjectModuleIndexes[pobj_dti->iProcLevel]].GetLineInfo( pobj_dti->lpdwCp[pobj_dti->iProcLevel-i2], i3, dummyStr );
    724726                ShowErrorLine(i3,dummyStr.c_str());
    725727
  • trunk/ab5.0/abdev/BasicCompiler_Common/debug.h

    r280 r636  
    44    //ソースコードポインタ
    55    DWORD *lpdwCp;
    6     DWORD *lpdwSourceIndex;
     6    std::vector<int> relationalObjectModuleIndexes;
    77
    88    //ネイティブコードポインタ
  • trunk/ab5.0/abdev/BasicCompiler_Common/include/Compiler.h

    r632 r636  
    2525    const CClass *pCompilingClass;
    2626
    27     // オブジェクトモジュール
    28     ObjectModule *pObjectModule;
    29     ObjectModule *pNowObjectModule;
     27    // 現在参照したいソースコードのオブジェクト モジュール インデックス
     28    int currentRelationalObjectModuleIndexForSource;
     29
     30
    3031
    3132public:
    3233
    33     Compiler()
    34         : isBuildSuccessful( false )
    35         , pObjectModule( new ObjectModule )
    36         , targetModuleType( ActiveBasic::Common::TargetModuleType::Exe )
    37         , isDebug( false )
    38         , isUnicode( false )
    39         , isCore( false )
    40     {
    41         SelectObjectModule( *pObjectModule );
    42         Symbol::RegistNamespaceSupporter( &namespaceSupporter );
    43     }
    44     ~Compiler()
    45     {
    46         delete pObjectModule;
    47         Clear();
    48     }
    49     void Clear()
    50     {
    51         BOOST_FOREACH( ObjectModule *pStaticLibrary, staticLibraries )
    52         {
    53             delete pStaticLibrary;
    54         }
    55         staticLibraries.clear();
    56     }
    57 
     34    Compiler();
     35    ~Compiler();
     36
     37    // 静的リンクの準備を行う(オブジェクトモジュール同士の名前リストの結合など、前処理を行う)
     38    void PreStaticLink( const ObjectModules &staticLibraries );
     39
     40    // 静的リンクを行う
    5841    void StaticLink( ObjectModules &staticLibraries );
    5942
     
    10386    ObjectModules staticLibraries;
    10487
     88    ObjectModule *pSelectedObjectModule;
     89
    10590    // オブジェクトモジュール
    10691    ObjectModule &GetObjectModule()
    10792    {
    108         return *pNowObjectModule;
    109     }
    110     void SelectObjectModule( ObjectModule &objectModule )
    111     {
    112         pNowObjectModule = &objectModule;
    113 
    114         namespaceSupporter.RegistAllNamespaceScopesCollection( &GetObjectModule().meta.GetNamespaces() );
     93        return *pSelectedObjectModule;
     94    }
     95
     96    void SelectObjectModule( ObjectModule *pObjectModule )
     97    {
     98        this->pSelectedObjectModule = pObjectModule;
     99    }
     100
     101    // 現在参照すべきソースコード
     102    const BasicSource &GetCurrentSource()
     103    {
     104        return staticLibraries[currentRelationalObjectModuleIndexForSource]->GetSource();
     105    }
     106
     107    // 現在参照すべきソースコードを格納するオブジェクトモジュールのインデックス
     108    int GetCurrentRelationalObjectModuleIndexForSource() const
     109    {
     110        return currentRelationalObjectModuleIndexForSource;
     111    }
     112    void SetCurrentRelationalObjectModuleIndexForSource( int currentRelationalObjectModuleIndexForSource )
     113    {
     114        this->currentRelationalObjectModuleIndexForSource = currentRelationalObjectModuleIndexForSource;
    115115    }
    116116
  • trunk/ab5.0/abdev/BasicCompiler_Common/include/Program.h

    r522 r636  
    4242    {
    4343        return outputFilePath;
     44    }
     45    const std::string GetOutputFileName() const
     46    {
     47        Jenga::Common::Path path( outputFilePath );
     48        return path.GetFileName() + path.GetExt();
    4449    }
    4550    void SetOutputFilePath( const std::string &outputFilePath )
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/BoostSerializationSupport.cpp

    r603 r636  
    496496#include <logger.h>
    497497#include <Configuration.h>
     498#include <abdev/ab_common/include/Lexical/Source.h>
    498499
    499500template class Jenga::Common::BoostSerializationSupport<LoggerSetting>;
    500501template class Jenga::Common::BoostSerializationSupport<Configuration>;
     502template class Jenga::Common::BoostSerializationSupport<BasicSources>;
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp

    r632 r636  
    55Compiler compiler;
    66
     7Compiler::Compiler()
     8    : isBuildSuccessful( false )
     9    , targetModuleType( ActiveBasic::Common::TargetModuleType::Exe )
     10    , isDebug( false )
     11    , isUnicode( false )
     12    , isCore( false )
     13    , currentRelationalObjectModuleIndexForSource( 0 )
     14{
     15    // 生成先のオブジェクトモジュールを登録
     16    ObjectModule *pObjectModule = new ObjectModule();
     17    staticLibraries.push_back( pObjectModule );
     18    SelectObjectModule( pObjectModule );
     19
     20    namespaceSupporter.RegistAllNamespaceScopesCollection( &GetObjectModule().meta.GetNamespaces() );
     21
     22    Symbol::RegistNamespaceSupporter( &namespaceSupporter );
     23}
     24Compiler::~Compiler()
     25{
     26    BOOST_FOREACH( ObjectModule *pStaticLibrary, staticLibraries )
     27    {
     28        delete pStaticLibrary;
     29    }
     30    staticLibraries.clear();
     31}
     32
     33void Compiler::PreStaticLink( const ObjectModules &staticLibraries )
     34{
     35    BOOST_FOREACH( const ObjectModule *pStaticLibrary, staticLibraries )
     36    {
     37        // 関連オブジェクトモジュールの名前リスト
     38        this->GetObjectModule().relationalObjectModuleNames.push_back( pStaticLibrary->GetName() );
     39    }
     40}
    741void Compiler::StaticLink( ObjectModules &staticLibraries )
    842{
    943    BOOST_FOREACH( ObjectModule *pStaticLibrary, staticLibraries )
    1044    {
     45        if( &this->GetObjectModule() == pStaticLibrary )
     46        {
     47            // 自分自身の場合はリンクしない
     48            continue;
     49        }
     50
    1151        // メタ情報
    12         pNowObjectModule->StaticLink( *pStaticLibrary );
     52        this->GetObjectModule().StaticLink( *pStaticLibrary );
    1353    }
    1454}
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/Messenger.cpp

    r628 r636  
    4242    if( sourceIndex != -1 )
    4343    {
    44         compiler.GetObjectModule().GetCurrentSource().GetLineInfo( sourceIndex, sourceLineNum, sourceFilePath );
     44        compiler.GetCurrentSource().GetLineInfo( sourceIndex, sourceLineNum, sourceFilePath );
    4545    }
    4646
Note: See TracChangeset for help on using the changeset viewer.