Changeset 316 in dev for trunk/abdev/BasicCompiler_Common/Subroutine.cpp
- Timestamp:
- Sep 7, 2007, 3:15:41 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/Subroutine.cpp
r308 r316 447 447 return false; 448 448 } 449 450 void CompileBufferInProcedure( const UserProc &userProc ){ 451 if( userProc.IsCompiled() ) return; 452 453 _compile_proc( &userProc ); 454 455 /* 456 // ログを履く 457 char temporary[8192]; 458 temporary[0]=0; 459 lstrcat( temporary, "------------------------------------------------------------------\n" ); 460 sprintf( temporary + lstrlen(temporary), "【 %s のコード情報】\n", userProc.GetFullName().c_str() ); 461 sprintf( temporary + lstrlen(temporary), "code size: %d bytes\n", userProc.GetCodeSize() ); 462 lstrcat( temporary, "------------------------------------------------------------------\n" ); 463 lstrcat( temporary, "\n" ); 464 Smoothie::Logger::Put( temporary );*/ 465 } 466 void CompileLocal(){ 467 if( compiler.IsDll() ) 468 { 469 //DLLの場合はグローバル変数を初期化するための関数を一番初めにコンパイルする 470 const UserProc *pUserProc=GetSubHash("_System_InitDllGlobalVariables"); 471 if(pUserProc){ 472 CompileBufferInProcedure( *pUserProc ); 473 } 474 else SetError(300,NULL,cp); 475 } 476 else 477 { 478 // グローバル領域を一番初めにコンパイルする 479 extern const UserProc *pSub_System_GlobalArea; 480 CompileBufferInProcedure( *pSub_System_GlobalArea ); 481 } 482 483 //_System_TypeBase_InitializeUserTypesは一番最後にコンパイル 484 extern const UserProc *pSubStaticMethod_System_TypeBase_InitializeUserTypes; 485 pSubStaticMethod_System_TypeBase_InitializeUserTypes->CompleteCompile(); 486 487 //_System_InitStaticLocalVariablesは一番最後にコンパイル 488 //※一般関数内の静的変数オブジェクトをすべて収集しなければならない 489 extern const UserProc *pSub_System_InitStaticLocalVariables; 490 pSub_System_InitStaticLocalVariables->CompleteCompile(); 491 492 //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル 493 extern const UserProc *pSub_System_Call_Destructor_of_GlobalObject; 494 pSub_System_Call_Destructor_of_GlobalObject->CompleteCompile(); 495 496 repeat: 497 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 498 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 499 { 500 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext(); 501 CompileBufferInProcedure( *pUserProc ); 502 } 503 504 if( IsNeedProcCompile() ){ 505 //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合 506 goto repeat; 507 } 508 509 if( !compiler.IsStaticLibrary() ) 510 { 511 //_System_TypeBase_InitializeUserTypesは最後のほうでコンパイル 512 pSubStaticMethod_System_TypeBase_InitializeUserTypes->KillCompileStatus(); 513 CompileBufferInProcedure( *pSubStaticMethod_System_TypeBase_InitializeUserTypes ); 514 515 if( IsNeedProcCompile() ){ 516 //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合 517 518 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 519 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 520 { 521 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext(); 522 CompileBufferInProcedure( *pUserProc ); 523 } 524 } 525 526 //_System_InitStaticLocalVariablesは一番最後にコンパイル 527 pSub_System_InitStaticLocalVariables->KillCompileStatus(); 528 CompileBufferInProcedure( *pSub_System_InitStaticLocalVariables ); 529 530 //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル 531 pSub_System_Call_Destructor_of_GlobalObject->KillCompileStatus(); 532 CompileBufferInProcedure( *pSub_System_Call_Destructor_of_GlobalObject ); 533 } 534 }
Note:
See TracChangeset
for help on using the changeset viewer.