Changeset 280 in dev for trunk/abdev/BasicCompiler_Common


Ignore:
Timestamp:
Aug 14, 2007, 8:37:08 AM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev/BasicCompiler_Common
Files:
17 edited

Legend:

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

    r279 r280  
    4444}
    4545
    46 void CFileBreakPoint::update(char *nativeCodeBuffer){
     46void CFileBreakPoint::update(char *nativeCodeBuffer)
     47{
    4748    int FileNum;
    48     for(FileNum=0;FileNum<compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileCounts();FileNum++){
    49         if(lstrcmpi(compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFilePathFromFileNumber(FileNum).c_str(),lpszFileName)==0) break;
    50     }
    51     if( FileNum == compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileCounts() )
     49    const IncludedFilesRelation *pIncludedFilesRelation = NULL;
     50    BOOST_FOREACH( const BasicSource &source, compiler.GetObjectModule().GetSources() )
     51    {
     52        pIncludedFilesRelation = &source.GetIncludedFilesRelation();
     53
     54        for(FileNum=0;FileNum<pIncludedFilesRelation->GetFileCounts();FileNum++)
     55        {
     56            if(lstrcmpi(pIncludedFilesRelation->GetFilePathFromFileNumber(FileNum).c_str(),lpszFileName)==0) break;
     57        }
     58        if( FileNum == pIncludedFilesRelation->GetFileCounts() )
     59        {
     60            pIncludedFilesRelation = NULL;
     61        }
     62        else
     63        {
     64            break;
     65        }
     66    }
     67
     68    if( !pIncludedFilesRelation )
     69    {
     70        Jenga::Throw( "CFileBreakPoint::update内で不正な処理" );
     71        return;
     72    }
     73
     74    int i;
     75    for(i=0;;i++){
     76        if( pIncludedFilesRelation->GetFileNumber( i ) == FileNum
     77            || pIncludedFilesRelation->GetFileNumber( i ) == -1 )
     78        {
     79            break;
     80        }
     81    }
     82    if( pIncludedFilesRelation->GetFileNumber( i ) == -1 )
    5283    {
    5384        return;
    5485    }
    5586
    56     int i;
    57     for(i=0;;i++){
    58         if( compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == FileNum
    59             || compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == -1 )
    60         {
    61             break;
    62         }
    63     }
    64     if( compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == -1 )
    65     {
    66         return;
    67     }
    68 
    6987    int FileBaseLine;
    7088    FileBaseLine=i;
     
    7290    int i2,nCount=0;
    7391    for(i2=0;;i2++){
    74         if( compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( FileBaseLine+i2 ) == -1 )
     92        if( pIncludedFilesRelation->GetFileNumber( FileBaseLine+i2 ) == -1 )
    7593        {
    7694            //ソースコードの終端行
  • trunk/abdev/BasicCompiler_Common/CDebugThreadInfo.cpp

    r206 r280  
    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));
    3940
    4041    //lplpObp
     
    107108        HeapDefaultFree(lplpSpBase);
    108109        HeapDefaultFree(lpdwCp);
     110        HeapDefaultFree(lpdwSourceIndex);
    109111    }
    110112
  • trunk/abdev/BasicCompiler_Common/Debug.cpp

    r279 r280  
    5656
    5757    int FileNum;
    58     for(FileNum=0;FileNum<compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileCounts();FileNum++){
    59         if(lstrcmpi(compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFilePathFromFileNumber(FileNum).c_str(),szFilePath)==0) break;
    60     }
    61     if( FileNum == compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileCounts() )
     58    const IncludedFilesRelation *pIncludedFilesRelation = NULL;
     59    BOOST_FOREACH( const BasicSource &source, compiler.GetObjectModule().GetSources() )
     60    {
     61        pIncludedFilesRelation = &source.GetIncludedFilesRelation();
     62
     63        for(FileNum=0;FileNum<pIncludedFilesRelation->GetFileCounts();FileNum++)
     64        {
     65            if(lstrcmpi(pIncludedFilesRelation->GetFilePathFromFileNumber(FileNum).c_str(),szFilePath)==0) break;
     66        }
     67        if( FileNum == pIncludedFilesRelation->GetFileCounts() )
     68        {
     69            pIncludedFilesRelation = NULL;
     70        }
     71        else
     72        {
     73            break;
     74        }
     75    }
     76
     77    if( !pIncludedFilesRelation )
    6278    {
    6379        return;
     
    6581
    6682    for(i=0;;i++){
    67         if( compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == FileNum
    68             || compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == -1 )
     83        if( pIncludedFilesRelation->GetFileNumber( i ) == FileNum
     84            || pIncludedFilesRelation->GetFileNumber( i ) == -1 )
    6985        {
    7086            break;
    7187        }
    7288    }
    73     if( compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == -1 )
     89    if( pIncludedFilesRelation->GetFileNumber( i ) == -1 )
    7490    {
    7591        return;
     
    8298    for(i2=0;;i++,i2++)
    8399    {
    84         if( FileNum < compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) )
     100        if( FileNum < pIncludedFilesRelation->GetFileNumber( i ) )
    85101        {
    86             while( FileNum != compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) )
     102            while( FileNum != pIncludedFilesRelation->GetFileNumber( i ) )
    87103            {
    88104                i++;
  • trunk/abdev/BasicCompiler_Common/DebugMiddleFile.cpp

    r279 r280  
    116116
    117117        *(long *)(buffer+i2) = sourceLine.GetNativeCodePos();
     118        i2+=sizeof(long);
     119
     120        *(long *)(buffer+i2) = sourceLine.GetSourceIndex();
    118121        i2+=sizeof(long);
    119122
     
    206209        i2+=sizeof(long);
    207210
     211        int sourceIndex = *(long *)(buffer+i2);
     212        i2+=sizeof(long);
     213
    208214        int sourceCodePos = *(long *)(buffer+i2);
    209215        i2+=sizeof(long);
     
    212218        i2+=sizeof(long);
    213219
    214         _oldSourceLines.push_back( SourceLine( lineNum, nativeCodePos, sourceCodePos, sourceLineType ) );
     220        _oldSourceLines.push_back(
     221            SourceLine(
     222                lineNum,
     223                nativeCodePos,
     224                sourceIndex,
     225                sourceCodePos,
     226                sourceLineType
     227            )
     228        );
    215229    }
    216230
  • trunk/abdev/BasicCompiler_Common/Enum.cpp

    r279 r280  
    115115    iEnumParentNum=0;
    116116
    117     const char *source = compiler.GetObjectModule().source.GetBuffer();
     117    const char *source = compiler.GetObjectModule().GetCurrentSource().GetBuffer();
    118118
    119119    // 名前空間管理
  • trunk/abdev/BasicCompiler_Common/MakeExe.cpp

    r279 r280  
    2424
    2525    //最後尾に貼り付け
    26     compiler.GetObjectModule().source.Addition( temp );
     26    compiler.GetObjectModule().GetCurrentSource().Addition( temp );
    2727
    2828    HeapDefaultFree(temp);
     
    5757    //プログラムをファイルから読み込む
    5858    extern char SourceFileName[MAX_PATH];
    59     if( !compiler.GetObjectModule().source.ReadFile( SourceFileName ) ){
     59    compiler.GetObjectModule().SetCurrentSourceIndex( compiler.GetObjectModule().GetSources().size() );
     60    compiler.GetObjectModule().GetSources().push_back( BasicSource() );
     61    if( !compiler.GetObjectModule().GetCurrentSource().ReadFile( SourceFileName ) ){
    6062        SetError(201,SourceFileName,-1);
    6163        goto EndCompile;
  • trunk/abdev/BasicCompiler_Common/VarList.cpp

    r279 r280  
    576576        }
    577577        if(i2==oldSourceLines.size()-1) pobj_dti->lpdwCp[i3]=-1;
    578         else pobj_dti->lpdwCp[i3]=oldSourceLines[i2].GetSourceCodePos();
     578        else
     579        {
     580            pobj_dti->lpdwCp[i3]=oldSourceLines[i2].GetSourceCodePos();
     581            pobj_dti->lpdwSourceIndex[i3]=oldSourceLines[i2].GetSourceIndex();
     582        }
    579583    }
    580584    for(i3=0;i3<(int)pobj_dti->iProcLevel+1;i3++){
     
    585589                pobj_dti->lplpSpBase[i2]=pobj_dti->lplpSpBase[i2+1];
    586590                pobj_dti->lpdwCp[i2]=pobj_dti->lpdwCp[i2+1];
     591                pobj_dti->lpdwSourceIndex[i2]=pobj_dti->lpdwSourceIndex[i2+1];
    587592            }
    588593            i3--;
     
    592597
    593598    std::string dummyStr;
    594     if(!compiler.GetObjectModule().source.GetLineInfo( pobj_dti->lpdwCp[pobj_dti->iProcLevel], i2, dummyStr )){
     599    if(!compiler.GetObjectModule().GetSource( pobj_dti->lpdwSourceIndex[pobj_dti->iProcLevel] ).GetLineInfo( pobj_dti->lpdwCp[pobj_dti->iProcLevel], i2, dummyStr )){
    595600        extern HWND hMainDlg;
    596601        //"デバッグ情報の取得に失敗"
     
    674679
    675680                std::string dummyStr;
    676                 compiler.GetObjectModule().source.GetLineInfo( pobj_dti->lpdwCp[pobj_dti->iProcLevel-i2], i3, dummyStr );
     681                compiler.GetObjectModule().GetSource( pobj_dti->lpdwSourceIndex[pobj_dti->iProcLevel] ).GetLineInfo( pobj_dti->lpdwCp[pobj_dti->iProcLevel-i2], i3, dummyStr );
    677682                ShowErrorLine(i3,dummyStr.c_str());
    678683
  • trunk/abdev/BasicCompiler_Common/debug.h

    r4 r280  
    44    //ソースコードポインタ
    55    DWORD *lpdwCp;
     6    DWORD *lpdwSourceIndex;
    67
    78    //ネイティブコードポインタ
  • trunk/abdev/BasicCompiler_Common/error.cpp

    r279 r280  
    330330    else{
    331331        std::string dummyStr;
    332         compiler.GetObjectModule().source.GetLineInfo( pos, pErrorInfo[ErrorNum].line, dummyStr );
     332        compiler.GetObjectModule().GetCurrentSource().GetLineInfo( pos, pErrorInfo[ErrorNum].line, dummyStr );
    333333
    334334        pErrorInfo[ErrorNum].FileName=(char *)HeapAlloc(hHeap,0,lstrlen(dummyStr.c_str())+1);
  • trunk/abdev/BasicCompiler_Common/include/Meta.h

    r273 r280  
    7575
    7676    // 静的リンク
    77     void StaticLink( Meta &meta, long dataSectionBaseOffset );
     77    void StaticLink( Meta &meta, long dataSectionBaseOffset, int sourceIndexBase );
    7878
    7979    const NamespaceScopesCollection &GetNamespaces() const
  • trunk/abdev/BasicCompiler_Common/include/NativeCode.h

    r279 r280  
    130130    int lineNum;
    131131    long nativeCodePos;
     132    int sourceIndex;
    132133    long sourceCodePos;
    133134    DWORD codeType;
     
    142143        ar & BOOST_SERIALIZATION_NVP( lineNum );
    143144        ar & BOOST_SERIALIZATION_NVP( nativeCodePos );
     145        ar & BOOST_SERIALIZATION_NVP( sourceIndex );
    144146        ar & BOOST_SERIALIZATION_NVP( sourceCodePos );
    145147        ar & BOOST_SERIALIZATION_NVP( codeType );
     
    147149
    148150public:
    149     SourceLine( int lineNum, int nativeCodePos, int sourceCodePos, DWORD codeType )
     151    SourceLine( int lineNum, int nativeCodePos, int sourceIndex, int sourceCodePos, DWORD codeType )
    150152        : lineNum( lineNum )
    151153        , nativeCodePos( nativeCodePos )
     154        , sourceIndex( sourceIndex )
    152155        , sourceCodePos( sourceCodePos )
    153156        , codeType( codeType )
     
    165168    {
    166169        return nativeCodePos;
     170    }
     171    int GetSourceIndex() const
     172    {
     173        return sourceIndex;
     174    }
     175    void SetSourceIndex( int sourceIndex )
     176    {
     177        this->sourceIndex = sourceIndex;
    167178    }
    168179    long GetSourceCodePos() const
     
    366377
    367378    void ResetDataSectionBaseOffset( long dataSectionBaseOffset );
     379    void ResetSourceIndexes( long sourceIndexBase );
    368380};
  • trunk/abdev/BasicCompiler_Common/include/ObjectModule.h

    r279 r280  
    1313    DataTable dataTable;
    1414
     15private:
    1516    // ソースコード
    16     BasicSource source;
     17    int currentSourceIndex;
     18    BasicSources sources;
    1719
    1820    // XMLシリアライズ用
     
    3032        ar & BOOST_SERIALIZATION_NVP( globalNativeCode );
    3133        ar & BOOST_SERIALIZATION_NVP( dataTable );
    32         ar & BOOST_SERIALIZATION_NVP( source );
     34        ar & BOOST_SERIALIZATION_NVP( currentSourceIndex );
     35        ar & BOOST_SERIALIZATION_NVP( sources );
    3336    }
    3437
    3538public:
    3639    void StaticLink( ObjectModule &objectModule );
     40
     41    int GetCurrentSourceIndex() const
     42    {
     43        return currentSourceIndex;
     44    }
     45    const BasicSource &GetCurrentSource() const
     46    {
     47        return sources[currentSourceIndex];
     48    }
     49    BasicSource &GetCurrentSource()
     50    {
     51        return sources[currentSourceIndex];
     52    }
     53    void SetCurrentSourceIndex( int currentSourceIndex )
     54    {
     55        this->currentSourceIndex = currentSourceIndex;
     56    }
     57    const BasicSource &GetSource( int sourceIndex ) const
     58    {
     59        return sources[sourceIndex];
     60    }
     61    BasicSources &GetSources()
     62    {
     63        return sources;
     64    }
    3765
    3866    bool Read( const std::string &filePath );
  • trunk/abdev/BasicCompiler_Common/include/Source.h

    r279 r280  
    1111
    1212#include <BoostSerializationSupport.h>
    13 
    14 using namespace std;
    15 
    16 struct INCLUDEFILEINFO{
    17     char **ppFileNames;
    18     int FilesNum;
    19     int LineOfFile[MAX_LEN];
    20 };
    2113
    2214class IncludedFilesRelation
     
    8779        buffer = (char *)calloc( 1, 1 );
    8880        length = 0;
     81    }
     82    Text( const Text &text )
     83        : length( text.length )
     84    {
     85        buffer = (char *)malloc( length + 1 );
     86        memcpy( buffer, text.buffer, length );
     87        buffer[length] = 0;
    8988    }
    9089    ~Text(){
     
    195194public:
    196195    BasicSource(){}
     196    BasicSource( const BasicSource &basicSource )
     197        : Text( basicSource )
     198        , includedFilesRelation( basicSource.includedFilesRelation )
     199    {
     200    }
    197201    ~BasicSource(){}
    198202
     
    222226    void Addition( const char *buffer );
    223227
    224     bool GetLineInfo( int sourceCodePos, int &line, std::string &fileName );
     228    bool GetLineInfo( int sourceCodePos, int &line, std::string &fileName ) const;
    225229
    226230    void operator = ( const BasicSource &source ){
     
    238242    }
    239243};
     244typedef std::vector<BasicSource> BasicSources;
  • trunk/abdev/BasicCompiler_Common/src/Meta.cpp

    r275 r280  
    3636}
    3737
    38 void Meta::StaticLink( Meta &meta, long dataSectionBaseOffset )
     38void Meta::StaticLink( Meta &meta, long dataSectionBaseOffset, int sourceIndexBase )
    3939{
    4040    // 名前空間
     
    5555
    5656        pUserProc->GetNativeCode().ResetDataSectionBaseOffset( dataSectionBaseOffset );
     57        pUserProc->GetNativeCode().ResetSourceIndexes( sourceIndexBase );
    5758
    5859        this->userProcs.Put( pUserProc );
  • trunk/abdev/BasicCompiler_Common/src/NativeCode.cpp

    r276 r280  
    11#include "stdafx.h"
    22
    3 #include <NativeCode.h>
    4 #include <Procedure.h>
     3#include <Compiler.h>
    54
    65#define BREAK_EIP(checkEip)  (obp+0x00401000>=checkEip)
     
    3231                sourceLine.GetLineNum(),
    3332                baseOffset + sourceLine.GetNativeCodePos(),
     33                sourceLine.GetSourceIndex(),
    3434                sourceLine.GetSourceCodePos(),
    3535                sourceLine.GetCodeType()
     
    8686        sourceLineType |= CODETYPE_SYSTEMPROC;
    8787    }
    88     sourceLines.push_back( SourceLine( (long)sourceLines.size(), size, cp, sourceLineType ) );
     88    sourceLines.push_back(
     89        SourceLine(
     90            (long)sourceLines.size(),
     91            size,
     92            compiler.GetObjectModule().GetCurrentSourceIndex(),
     93            cp,
     94            sourceLineType
     95        )
     96    );
    8997}
    9098
     
    102110    }
    103111}
     112void NativeCode::ResetSourceIndexes( long sourceIndexBase )
     113{
     114    BOOST_FOREACH( SourceLine &sourceLine, sourceLines )
     115    {
     116        sourceLine.SetSourceIndex( sourceLine.GetSourceIndex() + sourceIndexBase );
     117    }
     118}
  • trunk/abdev/BasicCompiler_Common/src/ObjectModule.cpp

    r279 r280  
    1414void ObjectModule::StaticLink( ObjectModule &objectModule )
    1515{
     16    long dataSectionBaseOffset = dataTable.GetSize();
     17    int sourceIndexBase = sources.size();
     18
    1619    // メタ情報を結合
    17     meta.StaticLink( objectModule.meta, dataTable.GetSize() );
     20    meta.StaticLink( objectModule.meta, dataSectionBaseOffset, sourceIndexBase );
    1821
    1922    // ネイティブコードを結合
     23    objectModule.globalNativeCode.ResetDataSectionBaseOffset( dataSectionBaseOffset );
     24    objectModule.globalNativeCode.ResetSourceIndexes( sourceIndexBase );
    2025    globalNativeCode.Put( objectModule.globalNativeCode );
    21     globalNativeCode.ResetDataSectionBaseOffset( dataTable.GetSize() );
    2226
    2327    // データテーブルを結合
    2428    dataTable.Add( objectModule.dataTable );
     29
     30    // ソースコードを結合
     31    BOOST_FOREACH( const BasicSource &source, objectModule.sources )
     32    {
     33        this->sources.push_back( source );
     34    }
    2535}
    2636
  • trunk/abdev/BasicCompiler_Common/src/Source.cpp

    r279 r280  
    921921}
    922922
    923 bool BasicSource::GetLineInfo( int sourceCodePos, int &line, std::string &filePath )
     923bool BasicSource::GetLineInfo( int sourceCodePos, int &line, std::string &filePath ) const
    924924{
    925925    int i2,i3,i4,i5;
    926926
    927     char *buffer = GetBuffer();
     927    const char *buffer = GetBuffer();
    928928    int i = sourceCodePos;
    929929
Note: See TracChangeset for help on using the changeset viewer.