Ignore:
Timestamp:
Aug 29, 2007, 9:05:22 AM (17 years ago)
Author:
dai_9181
Message:

静的リンクライブラリにより、複数のグローバル領域が存在することになったのでそれぞれを関数ベースに分けた

File:
1 edited

Legend:

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

    r294 r308  
    77#include <jenga/include/smoothie/Smoothie.h>
    88
    9 #include <LexicalScope.h>
    109#include <Class.h>
    1110#include <Compiler.h>
    12 #include <NamespaceSupporter.h>
    1311
    1412#include <../Enum.h>
     
    1816#include "Opcode.h"
    1917
    20 extern int GlobalOpBufferSize;
    21 
    2218
    2319////////////////////////////
     
    2824const UserProc
    2925    *pSub_System_StartupProgram,
     26    *pSub_System_GlobalArea,
    3027    *pSub_DebugSys_StartProc,
    3128    *pSub_DebugSys_EndProc,
     
    106103
    107104
    108 void DebugVariable(void){
    109     char temporary[255];
    110     if( compiler.GetObjectModule().meta.GetGlobalVars().Find( Symbol( "_DebugSys_dwThreadID" ) ) == NULL )
    111     {
    112         // 未定義の場合は定義する
    113         sprintf(temporary,"_DebugSys_dwThreadID[255]%c%cDWord",1,ESC_AS);
    114         OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
    115         sprintf(temporary,"_DebugSys_ProcNum[255]%c%cDWord",1,ESC_AS);
    116         OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
    117         sprintf(temporary,"_DebugSys_lplpObp[255]%c%c*ULONG_PTR",1,ESC_AS);
    118         OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
    119         sprintf(temporary,"_DebugSys_lplpSpBase[255]%c%c*ULONG_PTR",1,ESC_AS);
    120         OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
    121     }
    122 }
    123 
    124105void Compile(void){
    125106    extern HWND hMainDlg;
     
    220201        pSub_System_StartupProgram->Using();
    221202
     203    if(pSub_System_GlobalArea=GetSubHash(compiler.globalAreaProcName.c_str(),1))
     204    {
     205        pSub_System_GlobalArea->Using();
     206        pSub_System_GlobalArea->ThisIsAutoGenerationProc();
     207    }
     208
    222209    if(pSub_DebugSys_StartProc=GetSubHash("_DebugSys_StartProc",1))
    223210        pSub_DebugSys_StartProc->Using();
     
    392379            if(bDebugCompile)
    393380            {
    394                 //デバッグ用の変数を定義
     381                // デバッグ用の変数を定義
    395382                DebugVariable();
    396383            }
    397384
    398             //GC用の変数を定義
     385            // GC用の変数を定義
    399386            InitGCVariables();
    400387
    401             //_System_StartupProgramの呼び出し
     388            // _System_StartupProgram の呼び出し
    402389            compiler.codeGenerator.op_call(pSub_System_StartupProgram);
    403390        }
    404391
    405         //クラスに属する静的メンバを定義
    406         compiler.GetObjectModule().meta.GetClasses().InitStaticMember();
    407 
    408         //グローバル実行領域をコンパイル開始
    409         CompileBuffer(0,0);
    410 
    411         //Goto未知ラベルスケジュールが存在したらエラーにする
    412         BOOST_FOREACH( const GotoLabelSchedule *pGotoLabelSchedule, compiler.codeGenerator.gotoLabelSchedules )
    413         {
    414             if(pGotoLabelSchedule->GetName().size()>0){
    415                 SetError(6,pGotoLabelSchedule->GetName(),pGotoLabelSchedule->GetSourceCodePos());
    416             }
    417             else{
    418                 sprintf(temporary,"%d",pGotoLabelSchedule->GetLineNum());
    419                 SetError(6,temporary,pGotoLabelSchedule->GetSourceCodePos());
    420             }
    421         }
    422 
     392        // _System_GlobalArea の呼び出し
     393        compiler.codeGenerator.op_call( pSub_System_GlobalArea );
    423394
    424395        if( !compiler.IsStaticLibrary() )
     
    444415
    445416        //グローバル実行領域のコードサイズ
     417        extern int GlobalOpBufferSize;
    446418        GlobalOpBufferSize = compiler.linker.GetNativeCode().GetSize();
    447419
Note: See TracChangeset for help on using the changeset viewer.