Ignore:
Timestamp:
Jun 24, 2007, 6:50:40 PM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

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

    r143 r183  
     1#include <jenga/include/smoothie/Smoothie.h>
     2#include <jenga/include/smoothie/LexicalAnalysis.h>
     3
     4#include <Program.h>
     5#include <LexicalScopingImpl.h>
     6#include <ClassImpl.h>
     7
    18#include "../BasicCompiler_Common/common.h"
    29#include "Opcode.h"
     
    4855
    4956        //クラスに属する静的メンバを定義
    50         CMember::InitStaticMember();
     57        Smoothie::GetMeta().GetClasses().InitStaticMember();
    5158
    5259        GetGlobalDataForDll();
     
    6168        //静的ローカルオブジェクトのコンストラクタ呼び出し
    6269
    63         foreach( Variable *pVar, globalVars ){
     70        BOOST_FOREACH( Variable *pVar, globalVars ){
    6471            if(memicmp(pVar->GetName().c_str(),"Static%",7)==0){
    6572                //コンストラクタ呼び出し
     
    8794        UserProc::CompileStartForGlobalArea();
    8895
    89         obj_LexScopes.CallDestructorsOfScopeEnd();
     96        GetLexicalScopes().CallDestructorsOfScopeEnd();
    9097
    9198        UserProc::CompileStartForUserProc( pBackUserProc );
     
    217224        && userProc.GetParentClass().GetName() == "_System_TypeBase" ){
    218225
    219             pobj_DBClass->Compile_System_InitializeUserTypes();
     226            Smoothie::GetMeta().GetClasses().Compile_System_InitializeUserTypes();
    220227    }
    221228    else if( userProc.GetName() == "RegisterGlobalRoots"
     
    263270
    264271    //コンパイル中の関数が属するクラス
    265     pobj_CompilingClass=pUserProc->GetParentClassPtr();
     272    Smoothie::Temp::pCompilingClass=pUserProc->GetParentClassPtr();
    266273
    267274    //コンパイルスタートをクラス管理クラスに追加
    268     pobj_DBClass->StartCompile( pUserProc );
     275    Smoothie::GetMeta().GetClasses().StartCompile( pUserProc );
    269276
    270277    //コンパイル中の関数
     
    272279
    273280    // コンパイル中の関数が属する名前空間
    274     Smoothie::Lexical::liveingNamespaceScopes = pUserProc->GetNamespaceScopes();
     281    Smoothie::Temp::liveingNamespaceScopes = pUserProc->GetNamespaceScopes();
    275282
    276283    // コンパイル中の関数でImportsされている名前空間
     
    335342
    336343        //レキシカルスコープ情報
    337         pVar->ScopeLevel=obj_LexScopes.GetNowLevel();
    338         pVar->ScopeStartAddress=obj_LexScopes.GetStartAddress();
     344        pVar->ScopeLevel=GetLexicalScopes().GetNowLevel();
     345        pVar->ScopeStartAddress=GetLexicalScopes().GetStartAddress();
    339346        pVar->bLiving=TRUE;
    340347
     
    450457    }
    451458
    452     if(pobj_CompilingClass){
    453         if( pUserProc->GetName() == pobj_CompilingClass->GetName() ){
     459    if(Smoothie::Temp::pCompilingClass){
     460        if( pUserProc->GetName() == Smoothie::Temp::pCompilingClass->GetName() ){
    454461            ////////////////////////////////////
    455462            // コンストラクタをコンパイルするとき
     
    457464
    458465            //コンストラクタのコンパイル開始を通知
    459             pobj_CompilingClass->NotifyStartConstructorCompile();
     466            Smoothie::Temp::pCompilingClass->NotifyStartConstructorCompile();
    460467
    461468            //基底クラスかどうかの識別
    462469            //(継承元がインターフェイスの場合も基底クラスと見なす)
    463470            BOOL bThisIsSuperClass;
    464             if(pobj_CompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1;
    465             else if( pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod() == NULL ){
     471            if(Smoothie::Temp::pCompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1;
     472            else if( Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetConstructorMethod() == NULL ){
    466473                //インターフェイスを継承したときはコンストラクタを持たない
    467474                bThisIsSuperClass=1;
     
    482489                    temporary[i4]=basbuf[i3];
    483490                }
    484                 if( pobj_CompilingClass->pobj_InheritsClass->GetName() == temporary ){
     491                if( Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetName() == temporary ){
    485492                    //基底クラスのコンストラクタを呼び出す
    486493                    cp=i3;
     
    499506                    Type dummyType;
    500507                    CallProc( PROC_DEFAULT
    501                         , pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc
    502                         , pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc->GetName().c_str()
     508                        , Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc
     509                        , Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc->GetName().c_str()
    503510                        , temporary
    504511                        , dummyType );
     
    507514                    //基底クラスのコンストラクタを暗黙的に呼び出す
    508515                    Opcode_CallProc("",
    509                         pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc,
     516                        Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc,
    510517                        0,
    511518                        "",
     
    515522
    516523            //仮想関数テーブルを初期化
    517             if( pobj_CompilingClass->IsExistVirtualFunctions()
    518                 && !pobj_CompilingClass->IsAbstract() ){
     524            if( Smoothie::Temp::pCompilingClass->IsExistVirtualFunctions()
     525                && !Smoothie::Temp::pCompilingClass->IsAbstract() ){
    519526                    //関数テーブルに値をセット
    520                     int offset = (int)pobj_CompilingClass->GetVtblGlobalOffset();
     527                    int offset = (int)Smoothie::Temp::pCompilingClass->GetVtblGlobalOffset();
    521528
    522529                    //mov eax,offset
     
    538545
    539546            //デストラクタのコンパイル開始を通知
    540             pobj_CompilingClass->NotifyStartDestructorCompile();
     547            Smoothie::Temp::pCompilingClass->NotifyStartDestructorCompile();
    541548        }
    542549    }
     
    564571    //////////////////////////////////////////
    565572
    566     if( pobj_CompilingClass ){
    567 
    568         if( pobj_CompilingClass->IsCompilingConstructor() ){
     573    if( Smoothie::Temp::pCompilingClass ){
     574
     575        if( Smoothie::Temp::pCompilingClass->IsCompilingConstructor() ){
    569576            // コンストラクタをコンパイルしていたとき
    570577
    571578            // コンストラクタのコンパイルが完了したことを通知
    572             pobj_CompilingClass->NotifyFinishConstructorCompile();
     579            Smoothie::Temp::pCompilingClass->NotifyFinishConstructorCompile();
    573580        }
    574581        else if( pUserProc->IsDestructor() ){
     
    578585
    579586            // デストラクタのコンパイルが完了したことを通知
    580             pobj_CompilingClass->NotifyFinishDestructorCompile();
    581 
    582             if(pobj_CompilingClass->pobj_InheritsClass){
     587            Smoothie::Temp::pCompilingClass->NotifyFinishDestructorCompile();
     588
     589            if(Smoothie::Temp::pCompilingClass->pobj_InheritsClass){
    583590                /* サブクラスのデストラクタをコンパイルしているときは、
    584591                    基底クラスのデストラクタを呼び出す */
    585592
    586                 const CMethod *method = pobj_CompilingClass->pobj_InheritsClass->GetDestructorMethod();
     593                const CMethod *method = Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetDestructorMethod();
    587594                if( method ){
    588595                    Opcode_CallProc("",
     
    627634
    628635    //ローカルオブジェクトの解放処理
    629     obj_LexScopes.CallDestructorsOfScopeEnd();
     636    GetLexicalScopes().CallDestructorsOfScopeEnd();
    630637
    631638    //プロシージャ抜け出しスケジュール(Exit Sub/Function)
     
    702709            obp+=sizeof(long);
    703710        }
    704         else if(i3==DEF_INTEGER||i3==DEF_WORD || (isUnicode&&i3==DEF_CHAR)){
     711        else if(i3==DEF_INTEGER||i3==DEF_WORD || (Smoothie::IsUnicode()&&i3==DEF_CHAR)){
    705712            //xor eax,eax(eaxを0に初期化する)
    706713            op_zero_reg(REG_EAX);
     
    714721            obp+=sizeof(long);
    715722        }
    716         else if(i3==DEF_SBYTE||i3==DEF_BYTE||i3==DEF_BOOLEAN || (isUnicode==false&&i3==DEF_CHAR)){
     723        else if(i3==DEF_SBYTE||i3==DEF_BYTE||i3==DEF_BOOLEAN || (Smoothie::IsUnicode()==false&&i3==DEF_CHAR)){
    717724            //xor eax,eax(eaxを0に初期化する)
    718725            op_zero_reg(REG_EAX);
     
    732739    }
    733740    HeapDefaultFree(pLocalVarAddrSchedule);
    734     foreach( Variable *pVar, pUserProc->localVars ){
     741    BOOST_FOREACH( Variable *pVar, pUserProc->localVars ){
    735742        //後にデバッグで利用する
    736743        pVar->offset = AllLocalVarSize - pVar->offset;
Note: See TracChangeset for help on using the changeset viewer.