Ignore:
Timestamp:
Sep 7, 2007, 3:15:41 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

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

    r308 r316  
    264264}
    265265
    266 void _compile_proc(const UserProc *pUserProc){
     266void _compile_proc(const UserProc *pUserProc)
     267{
    267268    extern char *basbuf;
    268269    extern HANDLE hHeap;
     
    786787    //ローカル変数のネーム情報は後に解放する
    787788}
    788 
    789 void CompileBufferInProcedure( const UserProc &userProc ){
    790     if( userProc.IsCompiled() ) return;
    791 
    792     _compile_proc( &userProc );
    793 
    794 /*
    795     // ログを履く
    796     char temporary[8192];
    797     temporary[0]=0;
    798     lstrcat( temporary, "------------------------------------------------------------------\n" );
    799     sprintf( temporary + lstrlen(temporary), "【 %s のコード情報】\n", userProc.GetFullName().c_str() );
    800     sprintf( temporary + lstrlen(temporary), "code size: %d bytes\n", userProc.GetCodeSize() );
    801     lstrcat( temporary, "------------------------------------------------------------------\n" );
    802     lstrcat( temporary, "\n" );
    803     Smoothie::Logger::Put( temporary );*/
    804 }
    805 void CompileLocal(){
    806     if( compiler.IsDll() )
    807     {
    808         //DLLの場合はグローバル変数を初期化するための関数を一番初めにコンパイルする
    809         const UserProc *pUserProc=GetSubHash("_System_InitDllGlobalVariables");
    810         if(pUserProc){
    811             CompileBufferInProcedure( *pUserProc );
    812         }
    813         else SetError(300,NULL,cp);
    814     }
    815     else
    816     {
    817         // グローバル領域を一番初めにコンパイルする
    818         extern const UserProc *pSub_System_GlobalArea;
    819         CompileBufferInProcedure( *pSub_System_GlobalArea );
    820     }
    821 
    822     //_System_TypeBase_InitializeUserTypesは一番最後にコンパイル
    823     extern const UserProc *pSubStaticMethod_System_TypeBase_InitializeUserTypes;
    824     pSubStaticMethod_System_TypeBase_InitializeUserTypes->CompleteCompile();
    825 
    826     //_System_InitStaticLocalVariablesは一番最後にコンパイル
    827     //※一般関数内の静的変数オブジェクトをすべて収集しなければならない
    828     extern const UserProc *pSub_System_InitStaticLocalVariables;
    829     pSub_System_InitStaticLocalVariables->CompleteCompile();
    830 
    831     //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
    832     extern const UserProc *pSub_System_Call_Destructor_of_GlobalObject;
    833     pSub_System_Call_Destructor_of_GlobalObject->CompleteCompile();
    834 
    835 repeat:
    836     compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
    837     while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    838     {
    839         UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
    840         CompileBufferInProcedure( *pUserProc );
    841     }
    842 
    843     if( IsNeedProcCompile() ){
    844         //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
    845         goto repeat;
    846     }
    847 
    848     if( !compiler.IsStaticLibrary() )
    849     {
    850         //_System_TypeBase_InitializeUserTypesは最後のほうでコンパイル
    851         pSubStaticMethod_System_TypeBase_InitializeUserTypes->KillCompileStatus();
    852         CompileBufferInProcedure( *pSubStaticMethod_System_TypeBase_InitializeUserTypes );
    853 
    854         if( IsNeedProcCompile() ){
    855             //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
    856 
    857             compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
    858             while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    859             {
    860                 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
    861                 CompileBufferInProcedure( *pUserProc );
    862             }
    863         }
    864 
    865         //_System_InitStaticLocalVariablesは一番最後にコンパイル
    866         pSub_System_InitStaticLocalVariables->KillCompileStatus();
    867         CompileBufferInProcedure( *pSub_System_InitStaticLocalVariables );
    868 
    869         //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
    870         pSub_System_Call_Destructor_of_GlobalObject->KillCompileStatus();
    871         CompileBufferInProcedure( *pSub_System_Call_Destructor_of_GlobalObject );
    872     }
    873 }
Note: See TracChangeset for help on using the changeset viewer.