Ignore:
Timestamp:
Jul 12, 2007, 2:58:26 AM (17 years ago)
Author:
dai_9181
Message:

コード全体のリファクタリングを実施

File:
1 edited

Legend:

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

    r201 r206  
     1#include "stdafx.h"
     2
    13#include <jenga/include/common/Environment.h>
    24
     
    46
    57#include <LexicalScopingImpl.h>
    6 #include <ClassImpl.h>
     8#include <Class.h>
    79#include <Compiler.h>
    810#include <NamespaceSupporter.h>
    911
     12#include <../Enum.h>
     13
    1014#include "../BasicCompiler_Common/common.h"
     15#include "../BasicCompiler_Common/DebugSection.h"
    1116#include "Opcode.h"
    1217
     
    1924
    2025// グローバル関数、静的メソッド
    21 UserProc
     26const UserProc
    2227    *pSub_System_StartupProgram,
    2328    *pSub_DebugSys_StartProc,
     
    5156
    5257// 動的メソッド
    53 UserProc
     58const UserProc
    5459    *pUserProc_System_CGarbageCollection_RegisterGlobalRoots;
    5560
     
    176181
    177182    //クラス名を取得(詳細情報はGetAllClassInfoで取得)
    178     //   GetSubInfo関数の中で参照されるオブジェクト名を事前に取得する。
     183    //   CollectUserProcs関数の中で参照されるオブジェクト名を事前に取得する。
    179184    //     ※オブジェクトの内容までは取得しない
    180185    compiler.GetMeta().GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source );
     
    186191    GetConstInfo();
    187192
    188     //サブルーチン(ユーザー定義、DLL関数)の識別子、アドレスを取得
    189     Smoothie::Temp::pCompilingClass=0;
    190     GetSubInfo();
    191 
    192     //クラス情報を取得(※注 - GetSubInfoの後に呼び出す)
     193    // サブルーチン(ユーザー定義、DLL関数)の識別子、アドレスを取得
     194    compiler.pCompilingClass=0;
     195    UserProcs::CollectUserProcs( Smoothie::Lexical::source, compiler.GetMeta().GetUserProcs() );
     196
     197    // クラス情報を取得(※注 - CollectUserProcsの後に呼び出す)
    193198    compiler.GetMeta().GetClasses().GetAllClassInfo();
     199
     200    // サブルーチン(ユーザー定義、DLL関数)のイテレータの準備
     201    compiler.GetMeta().GetUserProcs().Iterator_Init();
    194202
    195203    if( !compiler.GetMeta().Write( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
     
    197205        MessageBox(0,"XML書き込みに失敗","test",0);
    198206    }
    199     MetaImpl tempMeta;
    200     if( !tempMeta.Read( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
     207    MetaImpl *pTempMeta = new MetaImpl();
     208    if( !pTempMeta->Read( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
    201209    {
    202210        MessageBox(0,"XML読み込みに失敗","test",0);
    203211    }
     212    compiler.GetMeta() = (*pTempMeta);
    204213
    205214    //コードと行番号の関係
     
    401410        extern DWORD dwContinueAddress;
    402411        dwContinueAddress=-1;
     412
     413        trace_for_sourcecodestep( "★★★ グローバル領域のコンパイルを開始" );
    403414
    404415
     
    451462
    452463        //call _System_End
    453         extern UserProc *pSub_System_End;
     464        extern const UserProc *pSub_System_End;
    454465        op_call(pSub_System_End);
    455466
     
    593604        ExportNamesLength=lstrlen(lpExportNames)+1;
    594605
    595         extern GlobalProc **ppSubHash;
    596         GlobalProc *pUserProc,*psi2;
     606        UserProc *pUserProc,*psi2;
    597607        while(1){
    598608            //辞書順にサーチ
    599609            temporary[0]=0;
    600             for(i=0,psi2=0;i<MAX_HASH;i++){
    601                 pUserProc=ppSubHash[i];
    602                 while(pUserProc){
    603                     if(pUserProc->IsExport()){
    604                         if(temporary[0]=='\0'){
     610            compiler.GetMeta().GetUserProcs().Iterator_Reset();
     611            while( compiler.GetMeta().GetUserProcs().Iterator_HasNext() )
     612            {
     613                pUserProc = compiler.GetMeta().GetUserProcs().Iterator_GetNext();
     614                if(pUserProc->IsExport()){
     615                    if(temporary[0]=='\0'){
     616                        lstrcpy(temporary,pUserProc->GetName().c_str());
     617                        psi2=pUserProc;
     618                    }
     619                    else{
     620                        i3=lstrlen(temporary);
     621                        i4=(int)pUserProc->GetName().size();
     622                        if(i3<i4) i3=i4;
     623                        if(memcmp(temporary,pUserProc->GetName().c_str(),i3)>0){
    605624                            lstrcpy(temporary,pUserProc->GetName().c_str());
    606625                            psi2=pUserProc;
    607626                        }
    608                         else{
    609                             i3=lstrlen(temporary);
    610                             i4=(int)pUserProc->GetName().size();
    611                             if(i3<i4) i3=i4;
    612                             if(memcmp(temporary,pUserProc->GetName().c_str(),i3)>0){
    613                                 lstrcpy(temporary,pUserProc->GetName().c_str());
    614                                 psi2=pUserProc;
    615                             }
    616                         }
    617627                    }
    618                     pUserProc=pUserProc->pNextData;
    619628                }
    620629            }
     
    625634
    626635            if( pUserProc->GetName() == "DllMain" ){
    627                 DllMain_EntryPoint=pUserProc->beginOpAddress;
     636                DllMain_EntryPoint=pUserProc->GetBeginOpAddress();
    628637            }
    629638
    630639            lpdwExportAddressTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportAddressTable,(ExportNum+1)*sizeof(DWORD));
    631             lpdwExportAddressTable[ExportNum]=pUserProc->beginOpAddress;
     640            lpdwExportAddressTable[ExportNum]=pUserProc->GetBeginOpAddress();
    632641
    633642            lpdwExportNamePointerTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportNamePointerTable,(ExportNum+1)*sizeof(DWORD));
     
    808817    //(デバッグ情報で利用される)
    809818    extern int AllInitGlobalVarSize;
    810     BOOST_FOREACH( Variable *pVar, globalVars ){
    811         if(pVar->offset&0x80000000){
    812             pVar->offset=(pVar->offset&0x7FFFFFFF)+AllInitGlobalVarSize;
     819    BOOST_FOREACH( Variable *pVar, compiler.GetMeta().GetGlobalVars() ){
     820        if(pVar->GetOffsetAddress()&0x80000000){
     821            pVar->SetOffsetAddress( (pVar->GetOffsetAddress()&0x7FFFFFFF)+AllInitGlobalVarSize );
    813822        }
    814823    }
     
    11101119    // プロシージャポインタスケジュール
    11111120    for(i=0;i<pobj_SubAddrSchedule->num;i++){
    1112         if(pobj_SubAddrSchedule->ppsi[i]->beginOpAddress==0
    1113             &&pobj_SubAddrSchedule->ppsi[i]->endOpAddress==0){
     1121        if(pobj_SubAddrSchedule->ppsi[i]->GetBeginOpAddress()==0
     1122            &&pobj_SubAddrSchedule->ppsi[i]->GetEndOpAddress()==0){
    11141123            SetError(300,NULL,-1);
    11151124        }
     
    11171126        if(pobj_SubAddrSchedule->pbCall[i]){
    11181127            *((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
    1119                 pobj_SubAddrSchedule->ppsi[i]->beginOpAddress-(pobj_SubAddrSchedule->pObpValues[i]+sizeof(long));
     1128                pobj_SubAddrSchedule->ppsi[i]->GetBeginOpAddress()-(pobj_SubAddrSchedule->pObpValues[i]+sizeof(long));
    11201129        }
    11211130        else{
    11221131            *((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
    1123                 pobj_SubAddrSchedule->ppsi[i]->beginOpAddress+ImageBase+MemPos_CodeSection;
     1132                pobj_SubAddrSchedule->ppsi[i]->GetBeginOpAddress()+ImageBase+MemPos_CodeSection;
    11241133        }
    11251134    }
Note: See TracChangeset for help on using the changeset viewer.