Ignore:
Timestamp:
Aug 1, 2007, 11:19:01 PM (17 years ago)
Author:
dai_9181
Message:

MetaImplを廃止し、Metaにした。
ObjectModuleクラス、Linkerクラスを用意。

File:
1 edited

Legend:

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

    r253 r256  
    146146    //////////////////
    147147    // データテーブル
    148     compiler.GetDataTable().Init();
     148    compiler.objectModule.dataTable.Clear();
    149149    if(bDebugCompile){
    150         compiler.GetDataTable().Add( (long)0x00000002 );
     150        compiler.objectModule.dataTable.Add( (long)0x00000002 );
    151151    }
    152152
     
    172172
    173173    //関数ポインタ情報を初期化
    174     compiler.GetMeta().GetProcPointers().clear();
     174    compiler.objectModule.meta.GetProcPointers().clear();
    175175
    176176    // 名前空間情報を取得
    177177    NamespaceSupporter::CollectNamespaces(
    178178        Smoothie::Lexical::source.GetBuffer(),
    179         compiler.GetMeta().GetNamespaces()
     179        compiler.objectModule.meta.GetNamespaces()
    180180    );
    181181
     
    183183    //   CollectProcedures関数の中で参照されるオブジェクト名を事前に取得する。
    184184    //     ※オブジェクトの内容までは取得しない
    185     compiler.GetMeta().GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source );
     185    compiler.objectModule.meta.GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source );
    186186
    187187    //TypeDef情報を初期化
    188     compiler.GetMeta().GetTypeDefs().Init();
     188    compiler.objectModule.meta.GetTypeDefs().Init();
    189189
    190190    //定数情報を取得
     
    195195    CollectProcedures(
    196196        Smoothie::Lexical::source,
    197         compiler.GetMeta().GetUserProcs(),
    198         compiler.GetMeta().GetDllProcs()
     197        compiler.objectModule.meta.GetUserProcs(),
     198        compiler.objectModule.meta.GetDllProcs()
    199199    );
    200200
    201201    // クラス情報を取得(※注 - CollectProceduresの後に呼び出す)
    202     compiler.GetMeta().GetClasses().GetAllClassInfo();
     202    compiler.objectModule.meta.GetClasses().GetAllClassInfo();
    203203
    204204    // サブルーチン(ユーザー定義、DLL関数)のイテレータの準備
    205     compiler.GetMeta().GetUserProcs().Iterator_Init();
    206     compiler.GetMeta().GetDllProcs().Iterator_Init();
     205    compiler.objectModule.meta.GetUserProcs().Iterator_Init();
     206    compiler.objectModule.meta.GetDllProcs().Iterator_Init();
    207207
    208208/*
    209     if( !compiler.GetMeta().WriteXml( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
     209    if( !compiler.objectModule.WriteXml( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
    210210    {
    211211        MessageBox(0,"XML書き込みに失敗","test",0);
    212212    }
    213     MetaImpl *pTempMeta = new MetaImpl();
    214     if( !pTempMeta->ReadXml( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
     213    ObjectModule *pTempObjectModule = new ObjectModule();
     214    if( !pTempObjectModule->ReadXml( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
    215215    {
    216216        MessageBox(0,"XML読み込みに失敗","test",0);
    217217    }
    218218
    219     if( !compiler.GetMeta().WriteBinaly( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
     219    if( !compiler.objectModule.meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
    220220    {
    221221        MessageBox(0,"バイナリ書き込みに失敗","test",0);
    222222    }
    223     MetaImpl *pTempMeta = new MetaImpl();
    224     if( !pTempMeta->ReadBinaly( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
     223    Meta *pTempMeta = new Meta();
     224    if( !pTempMeta->ReadBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
    225225    {
    226226        MessageBox(0,"バイナリ読み込みに失敗","test",0);
    227227    }
    228     if( !compiler.GetMeta().WriteText( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
     228    if( !compiler.objectModule.meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
    229229    {
    230230        MessageBox(0,"バイナリ書き込みに失敗","test",0);
    231231    }
    232     MetaImpl *pTempMeta = new MetaImpl();
    233     if( !pTempMeta->ReadText( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
     232    Meta *pTempMeta = new Meta();
     233    if( !pTempMeta->ReadText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
    234234    {
    235235        MessageBox(0,"バイナリ読み込みに失敗","test",0);
    236236    }
    237     compiler.GetMeta() = (*pTempMeta);*/
     237    compiler.objectModule = (*pTempObjectModule);*/
    238238
    239239
     
    436436
    437437        // コード生成対象を選択
    438         compiler.codeGenerator.Select( compiler.globalNativeCode );
     438        compiler.codeGenerator.Select( compiler.objectModule.globalNativeCode );
    439439
    440440        trace_for_sourcecodestep( "★★★ グローバル領域のコンパイルを開始" );
     
    461461
    462462        //クラスに属する静的メンバを定義
    463         compiler.GetMeta().GetClasses().InitStaticMember();
     463        compiler.objectModule.meta.GetClasses().InitStaticMember();
    464464
    465465        //グローバル実行領域をコンパイル開始
     
    550550
    551551
     552    trace( "コード生成が終了しました。" );
     553
     554
     555/*
     556    int t,t2;
     557    t=GetTickCount();
     558    if( !compiler.objectModule.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
     559    {
     560        MessageBox(0,"XML書き込みに失敗","test",0);
     561    }
     562    if( !compiler.objectModule.ReadText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
     563    {
     564        MessageBox(0,"XML読み込みに失敗","test",0);
     565    }
     566    t2=GetTickCount();
     567    t2-=t;
     568    char s[100];
     569    sprintf(s,"%d",t2);
     570    MessageBox(0,s,"test",0);
     571   
     572    if( !compiler.objectModule.meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
     573    {
     574        MessageBox(0,"バイナリ書き込みに失敗","test",0);
     575    }
     576    Meta *pTempMeta = new Meta();
     577    if( !pTempMeta->ReadBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
     578    {
     579        MessageBox(0,"バイナリ読み込みに失敗","test",0);
     580    }
     581    if( !compiler.objectModule.meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
     582    {
     583        MessageBox(0,"バイナリ書き込みに失敗","test",0);
     584    }
     585    Meta *pTempMeta = new Meta();
     586    if( !pTempMeta->ReadText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
     587    {
     588        MessageBox(0,"バイナリ読み込みに失敗","test",0);
     589    }*/
     590
     591
    552592
    553593    ////////////////////////////////
     
    561601    // 使用するDLL関数のチェック
    562602    ////////////////////////////////
    563     compiler.GetMeta().GetDllProcs().Iterator_Reset();
    564     while( compiler.GetMeta().GetDllProcs().Iterator_HasNext() )
     603    compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
     604    while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
    565605    {
    566         const DllProc *pDllProc = compiler.GetMeta().GetDllProcs().Iterator_GetNext();
     606        const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
    567607
    568608        if( !pDllProc->IsUsing() ){
     
    634674            //辞書順にサーチ
    635675            temporary[0]=0;
    636             compiler.GetMeta().GetUserProcs().Iterator_Reset();
    637             while( compiler.GetMeta().GetUserProcs().Iterator_HasNext() )
     676            compiler.objectModule.meta.GetUserProcs().Iterator_Reset();
     677            while( compiler.objectModule.meta.GetUserProcs().Iterator_HasNext() )
    638678            {
    639                 pUserProc = compiler.GetMeta().GetUserProcs().Iterator_GetNext();
     679                pUserProc = compiler.objectModule.meta.GetUserProcs().Iterator_GetNext();
    640680                if(pUserProc->IsExport()){
    641681                    if(temporary[0]=='\0'){
     
    724764    int ImportDllNum=0;
    725765
    726     compiler.GetMeta().GetDllProcs().Iterator_Reset();
    727     while( compiler.GetMeta().GetDllProcs().Iterator_HasNext() )
     766    compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
     767    while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
    728768    {
    729         const DllProc *pDllProc = compiler.GetMeta().GetDllProcs().Iterator_GetNext();
     769        const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
    730770
    731771        if( !pDllProc->IsUsing() ){
     
    764804        pImportTable[i].Name=i3+i*0x10;
    765805
    766         compiler.GetMeta().GetDllProcs().Iterator_Reset();
    767         while( compiler.GetMeta().GetDllProcs().Iterator_HasNext() )
     806        compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
     807        while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
    768808        {
    769             const DllProc *pDllProc = compiler.GetMeta().GetDllProcs().Iterator_GetNext();
     809            const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
    770810
    771811            if( !pDllProc->IsUsing() ){
     
    793833    i3+=ImportDllNum*0x10;
    794834    for(i=0,i5=0;i<ImportDllNum;i++){
    795         compiler.GetMeta().GetDllProcs().Iterator_Reset();
    796         while( compiler.GetMeta().GetDllProcs().Iterator_HasNext() )
     835        compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
     836        while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
    797837        {
    798             DllProc *pDllProc = compiler.GetMeta().GetDllProcs().Iterator_GetNext();
     838            DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
    799839
    800840            if( !pDllProc->IsUsing() ){
     
    839879    //(デバッグ情報で利用される)
    840880    extern int AllInitGlobalVarSize;
    841     BOOST_FOREACH( Variable *pVar, compiler.GetMeta().GetGlobalVars() ){
     881    BOOST_FOREACH( Variable *pVar, compiler.objectModule.meta.GetGlobalVars() ){
    842882        if(pVar->GetOffsetAddress()&0x80000000){
    843883            pVar->SetOffsetAddress( (pVar->GetOffsetAddress()&0x7FFFFFFF)+AllInitGlobalVarSize );
     
    921961
    922962    //データセクションのファイル上のサイズ
    923     if(compiler.GetDataTable().GetSize()%FILE_ALIGNMENT) FileSize_DataSection=compiler.GetDataTable().GetSize()+(FILE_ALIGNMENT-compiler.GetDataTable().GetSize()%FILE_ALIGNMENT);
    924     else FileSize_DataSection=compiler.GetDataTable().GetSize();
     963    if(compiler.objectModule.dataTable.GetSize()%FILE_ALIGNMENT) FileSize_DataSection=compiler.objectModule.dataTable.GetSize()+(FILE_ALIGNMENT-compiler.objectModule.dataTable.GetSize()%FILE_ALIGNMENT);
     964    else FileSize_DataSection=compiler.objectModule.dataTable.GetSize();
    925965    if(FileSize_DataSection) bUse_DataSection=1;
    926966    else bUse_DataSection=0;
     
    10841124            HintSize;           //ヒント名(関数名)テーブル
    10851125
    1086         compiler.GetMeta().GetDllProcs().Iterator_Reset();
    1087         while( compiler.GetMeta().GetDllProcs().Iterator_HasNext() )
     1126        compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
     1127        while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
    10881128        {
    1089             const DllProc *pDllProc = compiler.GetMeta().GetDllProcs().Iterator_GetNext();
     1129            const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
    10901130
    10911131            if( !pDllProc->IsUsing() ){
     
    11051145    ////////////////////////////////////////
    11061146    //仮想関数データテーブルスケジュール
    1107     compiler.GetMeta().GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);
     1147    compiler.objectModule.meta.GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);
    11081148
    11091149
     
    16401680    if(bUse_DataSection){
    16411681        //データ テーブル
    1642         WriteFile(hFile,compiler.GetDataTable().GetPtr(),compiler.GetDataTable().GetSize(),(DWORD *)&i2,NULL);
     1682        WriteFile(hFile,compiler.objectModule.dataTable.GetPtr(),compiler.objectModule.dataTable.GetSize(),(DWORD *)&i2,NULL);
    16431683        i+=i2;
    16441684    }
     
    17521792
    17531793    //クラスに関するメモリを解放
    1754     compiler.GetMeta().GetClasses().Clear();
     1794    compiler.objectModule.meta.GetClasses().Clear();
    17551795}
Note: See TracChangeset for help on using the changeset viewer.