Changeset 183 in dev for trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
- Timestamp:
- Jun 24, 2007, 6:50:40 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
r169 r183 1 #include <jenga/include/smoothie/Smoothie.h> 2 #include <jenga/include/smoothie/LexicalAnalysis.h> 3 1 4 #include <Program.h> 5 #include <LexicalScopingImpl.h> 6 #include <ClassImpl.h> 2 7 3 8 #include "../BasicCompiler_Common/common.h" … … 51 56 52 57 //クラスに属する静的メンバを定義 53 CMember::InitStaticMember();58 Smoothie::GetMeta().GetClasses().InitStaticMember(); 54 59 55 60 GetGlobalDataForDll(); … … 75 80 StackFrameSchedule=obp-sizeof(long); 76 81 77 foreach( Variable *pVar, globalVars ){82 BOOST_FOREACH( Variable *pVar, globalVars ){ 78 83 if(memicmp(pVar->GetName().c_str(),"Static%",7)==0){ 79 84 //コンストラクタ呼び出し … … 110 115 UserProc::CompileStartForGlobalArea(); 111 116 112 obj_LexScopes.CallDestructorsOfScopeEnd();117 GetLexicalScopes().CallDestructorsOfScopeEnd(); 113 118 114 119 UserProc::CompileStartForUserProc( pBackUserProc ); … … 210 215 && userProc.GetParentClass().GetName() == "_System_TypeBase" ){ 211 216 212 pobj_DBClass->Compile_System_InitializeUserTypes();217 Smoothie::GetMeta().GetClasses().Compile_System_InitializeUserTypes(); 213 218 } 214 219 else if( userProc.GetName() == "RegisterGlobalRoots" … … 255 260 256 261 //コンパイル中の関数が属するクラス 257 pobj_CompilingClass=pUserProc->GetParentClassPtr();262 Smoothie::Temp::pCompilingClass=pUserProc->GetParentClassPtr(); 258 263 259 264 //コンパイルスタートをクラス管理クラスに追加 260 pobj_DBClass->StartCompile( pUserProc );265 Smoothie::GetMeta().GetClasses().StartCompile( pUserProc ); 261 266 262 267 //コンパイル中の関数 … … 264 269 265 270 // コンパイル中の関数が属する名前空間 266 Smoothie:: Lexical::liveingNamespaceScopes = pUserProc->GetNamespaceScopes();271 Smoothie::Temp::liveingNamespaceScopes = pUserProc->GetNamespaceScopes(); 267 272 268 273 // コンパイル中の関数でImportsされている名前空間 … … 342 347 343 348 //レキシカルスコープ情報を初期化 344 obj_LexScopes.Init(obp);349 GetLexicalScopes().Init(obp); 345 350 346 351 … … 377 382 378 383 //レキシカルスコープ情報 379 pVar->ScopeLevel= obj_LexScopes.GetNowLevel();380 pVar->ScopeStartAddress= obj_LexScopes.GetStartAddress();384 pVar->ScopeLevel=GetLexicalScopes().GetNowLevel(); 385 pVar->ScopeStartAddress=GetLexicalScopes().GetStartAddress(); 381 386 pVar->bLiving=TRUE; 382 387 … … 504 509 } 505 510 506 if( pobj_CompilingClass){507 if( pUserProc->GetName() == pobj_CompilingClass->GetName() ){511 if(Smoothie::Temp::pCompilingClass){ 512 if( pUserProc->GetName() == Smoothie::Temp::pCompilingClass->GetName() ){ 508 513 //////////////////////////////////// 509 514 // コンストラクタをコンパイルするとき … … 511 516 512 517 //コンストラクタのコンパイル開始を通知 513 pobj_CompilingClass->NotifyStartConstructorCompile();518 Smoothie::Temp::pCompilingClass->NotifyStartConstructorCompile(); 514 519 515 520 //基底クラスかどうかの識別 516 521 //(継承元がインターフェイスの場合も基底クラスと見なす) 517 522 BOOL bThisIsSuperClass; 518 if( pobj_CompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1;519 else if( pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod() == NULL ){523 if(Smoothie::Temp::pCompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1; 524 else if( Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetConstructorMethod() == NULL ){ 520 525 //インターフェイスを継承したときはコンストラクタを持たない 521 526 bThisIsSuperClass=1; … … 536 541 temporary[i4]=basbuf[i3]; 537 542 } 538 if( pobj_CompilingClass->pobj_InheritsClass->GetName() == temporary ){543 if( Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetName() == temporary ){ 539 544 //基底クラスのコンストラクタを呼び出す 540 545 cp=i3; … … 553 558 Type dummyType; 554 559 CallProc( PROC_DEFAULT 555 , pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc556 , pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc->GetName().c_str()560 , Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc 561 , Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc->GetName().c_str() 557 562 , temporary 558 563 , dummyType ); … … 561 566 //基底クラスのコンストラクタを暗黙的に呼び出す 562 567 Opcode_CallProc("", 563 pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc,568 Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc, 564 569 0, 565 570 "", … … 569 574 570 575 //仮想関数テーブルを初期化 571 if( pobj_CompilingClass->IsExistVirtualFunctions()572 && ! pobj_CompilingClass->IsAbstract() ){576 if( Smoothie::Temp::pCompilingClass->IsExistVirtualFunctions() 577 && !Smoothie::Temp::pCompilingClass->IsAbstract() ){ 573 578 //関数テーブルに値をセット 574 int offset = (int) pobj_CompilingClass->GetVtblGlobalOffset();579 int offset = (int)Smoothie::Temp::pCompilingClass->GetVtblGlobalOffset(); 575 580 576 581 //mov rax,offset … … 591 596 592 597 //デストラクタのコンパイル開始を通知 593 pobj_CompilingClass->NotifyStartDestructorCompile();598 Smoothie::Temp::pCompilingClass->NotifyStartDestructorCompile(); 594 599 } 595 600 } … … 617 622 ////////////////////////////////////////// 618 623 619 if( pobj_CompilingClass ){620 621 if( pobj_CompilingClass->IsCompilingConstructor() ){624 if( Smoothie::Temp::pCompilingClass ){ 625 626 if( Smoothie::Temp::pCompilingClass->IsCompilingConstructor() ){ 622 627 // コンストラクタをコンパイルしていたとき 623 628 624 629 // コンストラクタのコンパイルが完了したことを通知 625 pobj_CompilingClass->NotifyFinishConstructorCompile();630 Smoothie::Temp::pCompilingClass->NotifyFinishConstructorCompile(); 626 631 } 627 632 else if( pUserProc->IsDestructor() ){ … … 631 636 632 637 // デストラクタのコンパイルが完了したことを通知 633 pobj_CompilingClass->NotifyFinishDestructorCompile();634 635 if( pobj_CompilingClass->pobj_InheritsClass){638 Smoothie::Temp::pCompilingClass->NotifyFinishDestructorCompile(); 639 640 if(Smoothie::Temp::pCompilingClass->pobj_InheritsClass){ 636 641 /* サブクラスのデストラクタをコンパイルしているときは、 637 642 基底クラスのデストラクタを呼び出す */ 638 643 639 const CMethod *method = pobj_CompilingClass->pobj_InheritsClass->GetDestructorMethod();644 const CMethod *method = Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetDestructorMethod(); 640 645 if( method ){ 641 646 Opcode_CallProc("", … … 677 682 678 683 //ローカルオブジェクト(レキシカルスコープレベル=0)の解放処理 679 obj_LexScopes.CallDestructorsOfScopeEnd();684 GetLexicalScopes().CallDestructorsOfScopeEnd(); 680 685 681 686 //プロシージャ抜け出しスケジュール(Exit Sub/Function) … … 738 743 } 739 744 HeapDefaultFree(pLocalVarAddrSchedule); 740 foreach( Variable *pVar, pUserProc->localVars ){745 BOOST_FOREACH( Variable *pVar, pUserProc->localVars ){ 741 746 //後にデバッグで利用する 742 747 pVar->offset = AllLocalVarSize + pobj_sf->GetFrameSize() - pVar->offset;
Note:
See TracChangeset
for help on using the changeset viewer.