Ignore:
Timestamp:
Aug 16, 2007, 7:55:02 PM (17 years ago)
Author:
dai_9181
Message:

Binaryクラスを追加

Location:
trunk/abdev/BasicCompiler_Common/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/src/Linker.cpp

    r282 r287  
    126126    }
    127127
    128     nativeCode.Put( masterObjectModule.globalNativeCode );
     128    nativeCode.PutEx( masterObjectModule.globalNativeCode );
    129129
    130130    masterObjectModule.meta.GetUserProcs().Iterator_Reset();
     
    137137            pUserProc->SetBeginOpAddress( nativeCode.GetSize() );
    138138
    139             nativeCode.Put( pUserProc->GetNativeCode() );
     139            nativeCode.PutEx( pUserProc->GetNativeCode() );
    140140
    141141            pUserProc->SetEndOpAddress( nativeCode.GetSize() );
  • trunk/abdev/BasicCompiler_Common/src/Meta.cpp

    r283 r287  
    9090        }
    9191
     92        bool isResetOffsetAddress = true;
     93        if( pVar->HasInitData() )
     94        {
     95            // 初期バッファがあるときはデータテーブルオフセットを適用する
     96            pVar->SetOffsetAddress( pVar->GetOffsetAddress() + dataSectionBaseOffset );
     97
     98            isResetOffsetAddress = false;
     99        }
     100
    92101        pVar->isTargetObjectModule = false;
    93         this->globalVars.Add( pVar );
     102        this->globalVars.Add( pVar, isResetOffsetAddress );
    94103    }
    95104    meta.globalVars.PullOutAll();
  • trunk/abdev/BasicCompiler_Common/src/NativeCode.cpp

    r282 r287  
    55#define BREAK_EIP(checkEip)  (obp+0x00401000>=checkEip)
    66
    7 void NativeCode::Put( const NativeCode &nativeCode )
     7void NativeCode::PutEx( const NativeCode &nativeCode )
    88{
    9     long baseOffset = size;
     9    long baseOffset = GetSize();
    1010
    1111    // コードバッファを追加
    12     Put( nativeCode.codeBuffer, nativeCode.size );
     12    Put( nativeCode.GetBuffer(), nativeCode.GetSize() );
    1313
    1414    // スケジュールを追加
     
    4343    pUserProc->Using();
    4444
    45     Schedule schedule( pUserProc, size );
     45    Schedule schedule( pUserProc, GetSize() );
    4646    if( isCall == false )
    4747    {
     
    5050    schedules.push_back( schedule );
    5151
    52     *((long *)(codeBuffer+size))=0;
    53     size += sizeof(long);
     52    Put( (long)0 );
    5453}
    5554
     
    5857    pDllProc->Using();
    5958
    60     schedules.push_back( Schedule( pDllProc, size ) );
     59    schedules.push_back( Schedule( pDllProc, GetSize() ) );
    6160
    62     *((long *)(codeBuffer+size))=0;
    63     size += sizeof(long);
     61    Put( (long)0 );
    6462}
    6563
    6664void NativeCode::PutVtblSchedule( const CClass *pClass )
    6765{
    68     schedules.push_back( Schedule( pClass, size ) );
     66    schedules.push_back( Schedule( pClass, GetSize() ) );
    6967
    70     *((long *)(codeBuffer+size))=0;
    71     size += sizeof(long);
     68    Put( (long)0 );
    7269}
    7370
     
    7673    if( sourceLines.size() )
    7774    {
    78         if( sourceLines.back().GetNativeCodePos() == size )
     75        if( sourceLines.back().GetNativeCodePos() == GetSize() )
    7976        {
    8077            sourceLines.back().SetSourceCodePos( cp );
     
    9794        SourceLine(
    9895            (long)sourceLines.size(),
    99             size,
     96            GetSize(),
    10097            compiler.GetObjectModule().GetCurrentSourceIndex(),
    10198            cp,
  • trunk/abdev/BasicCompiler_Common/src/ObjectModule.cpp

    r282 r287  
    2323    objectModule.globalNativeCode.ResetDataSectionBaseOffset( dataSectionBaseOffset );
    2424    objectModule.globalNativeCode.ResetSourceIndexes( sourceIndexBase );
    25     globalNativeCode.Put( objectModule.globalNativeCode );
     25    globalNativeCode.PutEx( objectModule.globalNativeCode );
    2626
    2727    // データテーブルを結合
  • trunk/abdev/BasicCompiler_Common/src/Source.cpp

    r285 r287  
    815815
    816816    // basic.sbpをインクルード
    817     const char *headCode = "#include <basic.sbp>\n";
    818     //const char *headCode = "\n";
     817    //const char *headCode = "#include <basic.sbp>\n";
     818    const char *headCode = "\n";
    819819    Realloc( length + lstrlen(headCode) );
    820820    Text::SlideString( buffer, lstrlen(headCode) );
  • trunk/abdev/BasicCompiler_Common/src/Variable.cpp

    r275 r287  
    7474}
    7575
    76 void Variables::Add( Variable *pVar )
     76void Variables::Add( Variable *pVar, bool isResetOffsetAddress )
    7777{
    7878    int alignment = 0;
     
    9090        }
    9191
    92         pVar->SetOffsetAddress( allInitSize );
     92        if( isResetOffsetAddress )
     93        {
     94            pVar->SetOffsetAddress( allInitSize );
     95        }
    9396        allInitSize += pVar->GetMemorySize();
    9497    }
     
    102105        }
    103106
     107        if( !isResetOffsetAddress )
     108        {
     109            Jenga::Throw( "[Variables::Add] 初期バッファがない変数に対してisResetOffsetAddressをfalseにできない" );
     110        }
     111
    104112        pVar->SetOffsetAddress( allSize | 0x80000000 );
    105113        allSize += pVar->GetMemorySize();
Note: See TracChangeset for help on using the changeset viewer.