Ignore:
Timestamp:
Aug 7, 2007, 4:14:06 AM (17 years ago)
Author:
dai_9181
Message:

BasicSourceのシリアライズがうまくいっていない

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/MakePeHdr.cpp

    r263 r266  
    105105    extern HANDLE hHeap;
    106106    extern BOOL bDebugCompile;
    107     extern BOOL bDll;
    108107    extern DWORD ImageBase;
    109108    extern int obp_AllocSize;
     
    123122
    124123    //エクスポート セクションを利用するかどうか
    125     if(bDll) bUse_ExportSection=1;
     124    if( compiler.IsDll() ) bUse_ExportSection=1;
    126125    else bUse_ExportSection=0;
    127126
     
    129128    //////////////////
    130129    // データテーブル
    131     compiler.objectModule.dataTable.Clear();
     130    compiler.GetObjectModule().dataTable.Clear();
    132131    if(bDebugCompile){
    133         compiler.objectModule.dataTable.Add( (long)0x00000002 );
     132        compiler.GetObjectModule().dataTable.Add( (long)0x00000002 );
    134133    }
    135134
     
    155154
    156155    //関数ポインタ情報を初期化
    157     compiler.objectModule.meta.GetProcPointers().clear();
     156    compiler.GetObjectModule().meta.GetProcPointers().clear();
    158157
    159158    // 名前空間情報を取得
    160159    NamespaceSupporter::CollectNamespaces(
    161         Smoothie::Lexical::source.GetBuffer(),
    162         compiler.objectModule.meta.GetNamespaces()
     160        compiler.GetObjectModule().source.GetBuffer(),
     161        compiler.GetObjectModule().meta.GetNamespaces()
    163162    );
    164163
     
    166165    //   CollectProcedures関数の中で参照されるオブジェクト名を事前に取得する。
    167166    //     ※オブジェクトの内容までは取得しない
    168     compiler.objectModule.meta.GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source );
     167    compiler.GetObjectModule().meta.GetClasses().CollectClassesForNameOnly( compiler.GetObjectModule().source );
    169168
    170169    //TypeDef情報を初期化
    171     compiler.objectModule.meta.GetTypeDefs().Init();
     170    compiler.GetObjectModule().meta.GetTypeDefs().Init();
    172171
    173172    //定数情報を取得
     
    177176    compiler.pCompilingClass = NULL;
    178177    CollectProcedures(
    179         Smoothie::Lexical::source,
    180         compiler.objectModule.meta.GetUserProcs(),
    181         compiler.objectModule.meta.GetDllProcs()
     178        compiler.GetObjectModule().source,
     179        compiler.GetObjectModule().meta.GetUserProcs(),
     180        compiler.GetObjectModule().meta.GetDllProcs()
    182181    );
    183182
    184183    // クラス情報を取得(※注 - CollectProceduresの後に呼び出す)
    185     compiler.objectModule.meta.GetClasses().GetAllClassInfo();
     184    compiler.GetObjectModule().meta.GetClasses().GetAllClassInfo();
    186185
    187186    // サブルーチン(ユーザー定義、DLL関数)のイテレータの準備
    188     compiler.objectModule.meta.GetUserProcs().Iterator_Init();
    189     compiler.objectModule.meta.GetDllProcs().Iterator_Init();
     187    compiler.GetObjectModule().meta.GetUserProcs().Iterator_Init();
     188    compiler.GetObjectModule().meta.GetDllProcs().Iterator_Init();
    190189
    191190/*
    192     if( !compiler.objectModule.meta.WriteXml( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
     191    if( !compiler.GetObjectModule().meta.WriteXml( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
    193192    {
    194193        MessageBox(0,"XML書き込みに失敗","test",0);
     
    200199    }
    201200
    202     if( !compiler.objectModule.meta.WriteBinaly( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
     201    if( !compiler.GetObjectModule().meta.WriteBinaly( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
    203202    {
    204203        MessageBox(0,"バイナリ書き込みに失敗","test",0);
     
    209208        MessageBox(0,"バイナリ読み込みに失敗","test",0);
    210209    }
    211     if( !compiler.objectModule.meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
     210    if( !compiler.GetObjectModule().meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
    212211    {
    213212        MessageBox(0,"バイナリ書き込みに失敗","test",0);
     
    218217        MessageBox(0,"バイナリ読み込みに失敗","test",0);
    219218    }
    220     compiler.objectModule.meta = (*pTempMeta);*/
     219    compiler.GetObjectModule().meta = (*pTempMeta);*/
    221220
    222221
     
    353352    UserProc::CompileStartForGlobalArea();
    354353
    355     if(!bDll){
     354    if( !compiler.IsDll() ){
    356355        // 名前空間が初期化されているかをチェック
    357356        if( compiler.GetNamespaceSupporter().GetLivingNamespaceScopes().size() ){
     
    379378
    380379        // コード生成対象を選択
    381         compiler.codeGenerator.Select( compiler.objectModule.globalNativeCode );
     380        compiler.codeGenerator.Select( compiler.GetObjectModule().globalNativeCode );
    382381
    383382        trace_for_sourcecodestep( "★★★ グローバル領域のコンパイルを開始" );
     
    402401
    403402        //クラスに属する静的メンバを定義
    404         compiler.objectModule.meta.GetClasses().InitStaticMember();
     403        compiler.GetObjectModule().meta.GetClasses().InitStaticMember();
    405404
    406405        //グローバル実行領域をコンパイル開始
     
    506505
    507506    vector<ObjectModule *> masterObjectModules;
    508     masterObjectModules.push_back( &compiler.objectModule );
     507    masterObjectModules.push_back( &compiler.GetObjectModule() );
    509508    compiler.linker.Link( masterObjectModules );
    510509
     
    520519    // 使用するDLL関数のチェック
    521520    ////////////////////////////////
    522     compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
    523     while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
     521    compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset();
     522    while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() )
    524523    {
    525         const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
     524        const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext();
    526525
    527526        if( !pDllProc->IsUsing() ){
     
    594593            //辞書順にサーチ
    595594            temporary[0]=0;
    596             compiler.objectModule.meta.GetUserProcs().Iterator_Reset();
    597             while( compiler.objectModule.meta.GetUserProcs().Iterator_HasNext() )
     595            compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
     596            while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    598597            {
    599                 pUserProc = compiler.objectModule.meta.GetUserProcs().Iterator_GetNext();
     598                pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
    600599                if(pUserProc->IsExport()){
    601600                    if(temporary[0]=='\0'){
     
    698697    int ImportDllNum=0;
    699698
    700     compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
    701     while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
     699    compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset();
     700    while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() )
    702701    {
    703         const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
     702        const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext();
    704703
    705704        if( !pDllProc->IsUsing() ){
     
    737736        pImportDescriptor[i].Name=i*0x10;   //※すぐ下で再計算
    738737
    739         compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
    740         while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
     738        compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset();
     739        while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() )
    741740        {
    742             const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
     741            const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext();
    743742
    744743            if( !pDllProc->IsUsing() ){
     
    775774    pHintTable=(char *)HeapAlloc(hHeap,0,HintAllocSize);
    776775    for(i=0,i5=0;i<ImportDllNum;i++){
    777         compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
    778         while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
     776        compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset();
     777        while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() )
    779778        {
    780             DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
     779            DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext();
    781780
    782781            if( !pDllProc->IsUsing() ){
     
    815814
    816815
    817     if(bDll){
     816    if( compiler.IsDll() ){
    818817        //DLLの場合はリロケーション情報を仮生成
    819818        //※正式な生成は各セクションのメモリ上のサイズが決定してから再度行う。
     
    826825    //(デバッグ情報で利用される)
    827826    extern int AllInitGlobalVarSize;
    828     BOOST_FOREACH( Variable *pVar, compiler.objectModule.meta.GetGlobalVars() ){
     827    BOOST_FOREACH( Variable *pVar, compiler.GetObjectModule().meta.GetGlobalVars() ){
    829828        if(pVar->GetOffsetAddress()&0x80000000){
    830829            pVar->SetOffsetAddress(
     
    839838    // デバッグセクションを生成
    840839    ////////////////////////////////////
    841 
    842     //機械語コードとBasicコードの関係を整理
    843     extern SourceLines oldSourceLines;
    844     int MinObp,MaxObp;
    845     SourceLines tempSourceLines;
    846     MaxObp=0;
    847     while(1){
    848         for(i3=0,MinObp=0x0FFFFFFF;i3<oldSourceLines.size();i3++){
    849             if(oldSourceLines[i3].GetNativeCodePos()<MinObp&&MaxObp<oldSourceLines[i3].GetNativeCodePos()){
    850                 MinObp=oldSourceLines[i3].GetNativeCodePos();
    851                 i4=i3;
    852             }
    853         }
    854         if(MinObp==0x0FFFFFFF) break;
    855         tempSourceLines.push_back( oldSourceLines[i4] );
    856         MaxObp=tempSourceLines.back().GetNativeCodePos();
    857     }
    858     oldSourceLines = tempSourceLines;
    859840
    860841    //デバッグセクションを生成
     
    903884
    904885    //データセクションのファイル上のサイズ
    905     if(compiler.objectModule.dataTable.GetSize()%FILE_ALIGNMENT) FileSize_DataSection=compiler.objectModule.dataTable.GetSize()+(FILE_ALIGNMENT-compiler.objectModule.dataTable.GetSize()%FILE_ALIGNMENT);
    906     else FileSize_DataSection=compiler.objectModule.dataTable.GetSize();
     886    if(compiler.GetObjectModule().dataTable.GetSize()%FILE_ALIGNMENT) FileSize_DataSection=compiler.GetObjectModule().dataTable.GetSize()+(FILE_ALIGNMENT-compiler.GetObjectModule().dataTable.GetSize()%FILE_ALIGNMENT);
     887    else FileSize_DataSection=compiler.GetObjectModule().dataTable.GetSize();
    907888    if(FileSize_DataSection) bUse_DataSection=1;
    908889    else bUse_DataSection=0;
     
    10651046            LookupSize;         //ルックアップテーブル
    10661047
    1067         compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
    1068         while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
     1048        compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset();
     1049        while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() )
    10691050        {
    1070             const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
     1051            const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext();
    10711052
    10721053            if( !pDllProc->IsUsing() ){
     
    10861067    ////////////////////////////////////////
    10871068    //仮想関数データテーブルスケジュール
    1088     compiler.objectModule.meta.GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);
     1069    compiler.GetObjectModule().meta.GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);
    10891070
    10901071
     
    11301111
    11311112
    1132     if(bDll){
     1113    if( compiler.IsDll() ){
    11331114        //DLLの場合はリロケーション情報を生成
    11341115        pobj_Reloc->ResetRelocBuffer();
     
    12691250    ImagePeHdr.FileHeader.NumberOfSymbols=      0x00000000;
    12701251    ImagePeHdr.FileHeader.SizeOfOptionalHeader= IMAGE_SIZEOF_NT_OPTIONAL64_HEADER;
    1271     if(bDll){
     1252    if( compiler.IsDll() ){
    12721253        ImagePeHdr.FileHeader.Characteristics=  IMAGE_FILE_EXECUTABLE_IMAGE|
    12731254                                                IMAGE_FILE_DLL|
     
    12861267    ImagePeHdr.OptionalHeader.SizeOfInitializedData=FileSize_DataSection;   //データサイズ(.dataのセッションサイズ)
    12871268    ImagePeHdr.OptionalHeader.SizeOfUninitializedData=0;                    //未初期化データのサイズ(なし)
    1288     if(bDll){
     1269    if( compiler.IsDll() ){
    12891270        if(DllMain_EntryPoint==-1)
    12901271            ImagePeHdr.OptionalHeader.AddressOfEntryPoint=0;
     
    16361617    if(bUse_DataSection){
    16371618        //データ テーブル
    1638         WriteFile(hFile,compiler.objectModule.dataTable.GetPtr(),compiler.objectModule.dataTable.GetSize(),(DWORD *)&i2,NULL);
     1619        WriteFile(hFile,compiler.GetObjectModule().dataTable.GetPtr(),compiler.GetObjectModule().dataTable.GetSize(),(DWORD *)&i2,NULL);
    16391620        i+=i2;
    16401621    }
     
    17481729
    17491730    //クラスに関するメモリを解放
    1750     compiler.objectModule.meta.GetClasses().Clear();
     1731    compiler.GetObjectModule().meta.GetClasses().Clear();
    17511732}
Note: See TracChangeset for help on using the changeset viewer.