Changeset 316 in dev for trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
- Timestamp:
- Sep 7, 2007, 3:15:41 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r308 r316 264 264 } 265 265 266 void _compile_proc(const UserProc *pUserProc){ 266 void _compile_proc(const UserProc *pUserProc) 267 { 267 268 extern char *basbuf; 268 269 extern HANDLE hHeap; … … 786 787 //ローカル変数のネーム情報は後に解放する 787 788 } 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 else816 {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.