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/BasicCompiler64/Compile_ProcOp.cpp

    r169 r183  
     1#include <jenga/include/smoothie/Smoothie.h>
     2#include <jenga/include/smoothie/LexicalAnalysis.h>
     3
    14#include <Program.h>
     5#include <LexicalScopingImpl.h>
     6#include <ClassImpl.h>
    27
    38#include "../BasicCompiler_Common/common.h"
     
    5156
    5257        //クラスに属する静的メンバを定義
    53         CMember::InitStaticMember();
     58        Smoothie::GetMeta().GetClasses().InitStaticMember();
    5459
    5560        GetGlobalDataForDll();
     
    7580        StackFrameSchedule=obp-sizeof(long);
    7681
    77         foreach( Variable *pVar, globalVars ){
     82        BOOST_FOREACH( Variable *pVar, globalVars ){
    7883            if(memicmp(pVar->GetName().c_str(),"Static%",7)==0){
    7984                //コンストラクタ呼び出し
     
    110115        UserProc::CompileStartForGlobalArea();
    111116
    112         obj_LexScopes.CallDestructorsOfScopeEnd();
     117        GetLexicalScopes().CallDestructorsOfScopeEnd();
    113118
    114119        UserProc::CompileStartForUserProc( pBackUserProc );
     
    210215        && userProc.GetParentClass().GetName() == "_System_TypeBase" ){
    211216
    212             pobj_DBClass->Compile_System_InitializeUserTypes();
     217            Smoothie::GetMeta().GetClasses().Compile_System_InitializeUserTypes();
    213218    }
    214219    else if( userProc.GetName() == "RegisterGlobalRoots"
     
    255260
    256261    //コンパイル中の関数が属するクラス
    257     pobj_CompilingClass=pUserProc->GetParentClassPtr();
     262    Smoothie::Temp::pCompilingClass=pUserProc->GetParentClassPtr();
    258263
    259264    //コンパイルスタートをクラス管理クラスに追加
    260     pobj_DBClass->StartCompile( pUserProc );
     265    Smoothie::GetMeta().GetClasses().StartCompile( pUserProc );
    261266
    262267    //コンパイル中の関数
     
    264269
    265270    // コンパイル中の関数が属する名前空間
    266     Smoothie::Lexical::liveingNamespaceScopes = pUserProc->GetNamespaceScopes();
     271    Smoothie::Temp::liveingNamespaceScopes = pUserProc->GetNamespaceScopes();
    267272
    268273    // コンパイル中の関数でImportsされている名前空間
     
    342347
    343348    //レキシカルスコープ情報を初期化
    344     obj_LexScopes.Init(obp);
     349    GetLexicalScopes().Init(obp);
    345350
    346351
     
    377382
    378383        //レキシカルスコープ情報
    379         pVar->ScopeLevel=obj_LexScopes.GetNowLevel();
    380         pVar->ScopeStartAddress=obj_LexScopes.GetStartAddress();
     384        pVar->ScopeLevel=GetLexicalScopes().GetNowLevel();
     385        pVar->ScopeStartAddress=GetLexicalScopes().GetStartAddress();
    381386        pVar->bLiving=TRUE;
    382387
     
    504509    }
    505510
    506     if(pobj_CompilingClass){
    507         if( pUserProc->GetName() == pobj_CompilingClass->GetName() ){
     511    if(Smoothie::Temp::pCompilingClass){
     512        if( pUserProc->GetName() == Smoothie::Temp::pCompilingClass->GetName() ){
    508513            ////////////////////////////////////
    509514            // コンストラクタをコンパイルするとき
     
    511516
    512517            //コンストラクタのコンパイル開始を通知
    513             pobj_CompilingClass->NotifyStartConstructorCompile();
     518            Smoothie::Temp::pCompilingClass->NotifyStartConstructorCompile();
    514519
    515520            //基底クラスかどうかの識別
    516521            //(継承元がインターフェイスの場合も基底クラスと見なす)
    517522            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 ){
    520525                //インターフェイスを継承したときはコンストラクタを持たない
    521526                bThisIsSuperClass=1;
     
    536541                    temporary[i4]=basbuf[i3];
    537542                }
    538                 if( pobj_CompilingClass->pobj_InheritsClass->GetName() == temporary ){
     543                if( Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetName() == temporary ){
    539544                    //基底クラスのコンストラクタを呼び出す
    540545                    cp=i3;
     
    553558                    Type dummyType;
    554559                    CallProc( PROC_DEFAULT
    555                         , pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc
    556                         , 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()
    557562                        , temporary
    558563                        , dummyType );
     
    561566                    //基底クラスのコンストラクタを暗黙的に呼び出す
    562567                    Opcode_CallProc("",
    563                         pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc,
     568                        Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetConstructorMethod()->pUserProc,
    564569                        0,
    565570                        "",
     
    569574
    570575            //仮想関数テーブルを初期化
    571             if( pobj_CompilingClass->IsExistVirtualFunctions()
    572                 && !pobj_CompilingClass->IsAbstract() ){
     576            if( Smoothie::Temp::pCompilingClass->IsExistVirtualFunctions()
     577                && !Smoothie::Temp::pCompilingClass->IsAbstract() ){
    573578                    //関数テーブルに値をセット
    574                     int offset = (int)pobj_CompilingClass->GetVtblGlobalOffset();
     579                    int offset = (int)Smoothie::Temp::pCompilingClass->GetVtblGlobalOffset();
    575580
    576581                    //mov rax,offset
     
    591596
    592597            //デストラクタのコンパイル開始を通知
    593             pobj_CompilingClass->NotifyStartDestructorCompile();
     598            Smoothie::Temp::pCompilingClass->NotifyStartDestructorCompile();
    594599        }
    595600    }
     
    617622    //////////////////////////////////////////
    618623
    619     if( pobj_CompilingClass ){
    620 
    621         if( pobj_CompilingClass->IsCompilingConstructor() ){
     624    if( Smoothie::Temp::pCompilingClass ){
     625
     626        if( Smoothie::Temp::pCompilingClass->IsCompilingConstructor() ){
    622627            // コンストラクタをコンパイルしていたとき
    623628
    624629            // コンストラクタのコンパイルが完了したことを通知
    625             pobj_CompilingClass->NotifyFinishConstructorCompile();
     630            Smoothie::Temp::pCompilingClass->NotifyFinishConstructorCompile();
    626631        }
    627632        else if( pUserProc->IsDestructor() ){
     
    631636
    632637            // デストラクタのコンパイルが完了したことを通知
    633             pobj_CompilingClass->NotifyFinishDestructorCompile();
    634 
    635             if(pobj_CompilingClass->pobj_InheritsClass){
     638            Smoothie::Temp::pCompilingClass->NotifyFinishDestructorCompile();
     639
     640            if(Smoothie::Temp::pCompilingClass->pobj_InheritsClass){
    636641                /* サブクラスのデストラクタをコンパイルしているときは、
    637642                    基底クラスのデストラクタを呼び出す */
    638643
    639                 const CMethod *method = pobj_CompilingClass->pobj_InheritsClass->GetDestructorMethod();
     644                const CMethod *method = Smoothie::Temp::pCompilingClass->pobj_InheritsClass->GetDestructorMethod();
    640645                if( method ){
    641646                    Opcode_CallProc("",
     
    677682
    678683    //ローカルオブジェクト(レキシカルスコープレベル=0)の解放処理
    679     obj_LexScopes.CallDestructorsOfScopeEnd();
     684    GetLexicalScopes().CallDestructorsOfScopeEnd();
    680685
    681686    //プロシージャ抜け出しスケジュール(Exit Sub/Function)
     
    738743    }
    739744    HeapDefaultFree(pLocalVarAddrSchedule);
    740     foreach( Variable *pVar, pUserProc->localVars ){
     745    BOOST_FOREACH( Variable *pVar, pUserProc->localVars ){
    741746        //後にデバッグで利用する
    742747        pVar->offset = AllLocalVarSize + pobj_sf->GetFrameSize() - pVar->offset;
Note: See TracChangeset for help on using the changeset viewer.