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/Compile_ProcOp.cpp

    r299 r308  
    226226            Compile_AddGlobalRootsForGc();
    227227    }
     228    else if( userProc.GetName() == compiler.globalAreaProcName ){
     229        ////////////////////////////////////////
     230        // グローバル領域をコンパイル
     231        ////////////////////////////////////////
     232
     233        const UserProc *pBackUserProc = &UserProc::CompilingUserProc();
     234        UserProc::CompileStartForGlobalArea();
     235
     236        int BackCp = cp;
     237        cp=-1;
     238
     239        //クラスに属する静的メンバを定義
     240        compiler.GetObjectModule().meta.GetClasses().InitStaticMember();
     241
     242        //グローバル実行領域をコンパイル開始
     243        CompileBuffer(0,0);
     244
     245        //Goto未知ラベルスケジュールが存在したらエラーにする
     246        BOOST_FOREACH( const GotoLabelSchedule *pGotoLabelSchedule, compiler.codeGenerator.gotoLabelSchedules )
     247        {
     248            if(pGotoLabelSchedule->GetName().size()>0){
     249                SetError(6,pGotoLabelSchedule->GetName(),pGotoLabelSchedule->GetSourceCodePos());
     250            }
     251            else{
     252                char temporary[255];
     253                sprintf(temporary,"%d",pGotoLabelSchedule->GetLineNum());
     254                SetError(6,temporary,pGotoLabelSchedule->GetSourceCodePos());
     255            }
     256        }
     257
     258        UserProc::CompileStartForUserProc( pBackUserProc );
     259        cp=BackCp;
     260    }
    228261    else{
    229262        SetError();
     
    422455    //Continueアドレスを初期化
    423456    compiler.codeGenerator.ClearContinueArea();
     457
     458    //レキシカルスコープ情報を初期化
     459    compiler.codeGenerator.lexicalScopes.Init( compiler.codeGenerator.GetNativeCodeSize() );
    424460
    425461    const PertialSchedule *pEspOffsetPertialSchedule = NULL;
     
    768804}
    769805void CompileLocal(){
    770     if( compiler.IsDll() ){
     806    if( compiler.IsDll() )
     807    {
    771808        //DLLの場合はグローバル変数を初期化するための関数を一番初めにコンパイルする
    772809        const UserProc *pUserProc=GetSubHash("_System_InitDllGlobalVariables");
     
    775812        }
    776813        else SetError(300,NULL,cp);
     814    }
     815    else
     816    {
     817        // グローバル領域を一番初めにコンパイルする
     818        extern const UserProc *pSub_System_GlobalArea;
     819        CompileBufferInProcedure( *pSub_System_GlobalArea );
    777820    }
    778821
Note: See TracChangeset for help on using the changeset viewer.