Ignore:
Timestamp:
May 3, 2008, 6:32:50 PM (16 years ago)
Author:
dai_9181
Message:

Compiler::pCompilingClassメンバをprivateにし、setter/getterにあたるメソッドを用意した。

Location:
trunk/ab5.0/abdev/BasicCompiler_Common
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/BasicCompiler_Common/DebugMiddleFile.cpp

    r485 r536  
    162162    int i2,i3;
    163163
    164     compiler.pCompilingClass = NULL;
     164    compiler.ClearCompilingUserProcAndClass();
    165165
    166166    i2=0;
  • trunk/ab5.0/abdev/BasicCompiler_Common/NumOpe_GetType.cpp

    r523 r536  
    480480
    481481
    482     if(lstrcmpi(termFull,"This")==0){
    483         if( compiler.pCompilingClass == NULL )
     482    if(lstrcmpi(termFull,"This")==0)
     483    {
     484        if( !compiler.IsCompilingClass() )
    484485        {
    485486            return false;
     
    487488
    488489        //Thisオブジェクト
    489         resultType.SetType( DEF_OBJECT, compiler.pCompilingClass );
     490        resultType.SetType( DEF_OBJECT, &compiler.GetCompilingClass() );
    490491        isLiteral = false;
    491492        return true;
  • trunk/ab5.0/abdev/BasicCompiler_Common/VarList.cpp

    r508 r536  
    778778
    779779        if(pUserProc){
    780             compiler.pCompilingClass = pUserProc->GetParentClassPtr();
     780            compiler.StartProcedureCompile( pUserProc );
    781781            UserProc::CompileStartForUserProc( pUserProc );
    782782        }
  • trunk/ab5.0/abdev/BasicCompiler_Common/VariableOpe.cpp

    r508 r536  
    457457
    458458    //アクセシビリティをチェック
    459     if( &objClass == compiler.pCompilingClass ){
     459    if( compiler.IsCompilingClass() && &objClass == &compiler.GetCompilingClass() ){
    460460        //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    461461        if( pMember->IsNoneAccess() ){
     
    571571    }
    572572
    573     if(compiler.pCompilingClass){
     573    if( compiler.IsCompilingClass() ){
    574574        ///////////////////////
    575575        // クラスメンバの参照
     
    578578        if(lstrcmpi(variable,"This")==0){
    579579            //Thisオブジェクト
    580             resultType.SetType( DEF_OBJECT, compiler.pCompilingClass );
     580            resultType.SetType( DEF_OBJECT, &compiler.GetCompilingClass() );
    581581            return true;
    582582        }
     
    590590            //クラス内の動的メンバを参照するとき(通常)
    591591
    592             if( !compiler.pCompilingClass->HasDynamicMember( VarName ) )
     592            if( !compiler.GetCompilingClass().HasDynamicMember( VarName ) )
    593593            {
    594594                goto NonClassMember;
     
    597597
    598598        return GetMemberType(
    599             Type( DEF_OBJECT, *compiler.pCompilingClass ),
     599            Type( DEF_OBJECT, compiler.GetCompilingClass() ),
    600600            variable,
    601601            resultType,
     
    653653    }
    654654
    655     if(compiler.pCompilingClass){
     655    if( compiler.IsCompilingClass() ){
    656656        //自身のクラスから静的メンバを参照する場合
    657657        char temp2[VN_SIZE];
    658         sprintf(temp2,"%s.%s",compiler.pCompilingClass->GetName().c_str(),VarName);
     658        sprintf(temp2,"%s.%s",compiler.GetCompilingClass().GetName().c_str(),VarName);
    659659
    660660        pVar = compiler.GetObjectModule().meta.GetGlobalVars().Find( LexicalAnalyzer::FullNameToSymbol( temp2 ) );
     
    916916
    917917    //クラス名
    918     if(compiler.pCompilingClass){
    919         lstrcat(FullName,compiler.pCompilingClass->GetName().c_str());
     918    if( compiler.IsCompilingClass() ){
     919        lstrcat(FullName,compiler.GetCompilingClass().GetName().c_str());
    920920        lstrcat(FullName,"%");
    921921    }
  • trunk/ab5.0/abdev/BasicCompiler_Common/WatchList.cpp

    r508 r536  
    379379    }
    380380
    381     if(compiler.pCompilingClass){
     381    if( compiler.IsCompilingClass() )
     382    {
    382383        ///////////////////////
    383384        // クラスメンバの参照
     
    392393            //クラス内の動的メンバを参照するとき(通常)
    393394
    394             if( !compiler.pCompilingClass->HasDynamicMember( VarName ) )
     395            if( !compiler.GetCompilingClass().HasDynamicMember( VarName ) )
    395396            {
    396397                goto NonClassMember;
     
    418419        pRelativeVar->dwKind=VAR_DIRECTMEM;
    419420
    420         i3=Debugging_GetMember(*compiler.pCompilingClass,variable,pRelativeVar,resultType,1);
     421        i3=Debugging_GetMember( compiler.GetCompilingClass(),variable,pRelativeVar,resultType,1);
    421422        if(i3==0){
    422423            //式エラー
  • trunk/ab5.0/abdev/BasicCompiler_Common/hash.cpp

    r523 r536  
    6666        {
    6767            //クラスメンバ関数内から基底クラスの呼び出し
    68             pobj_c=&compiler.pCompilingClass->GetSuperClass();
     68            pobj_c=&compiler.GetCompilingClass().GetSuperClass();
    6969        }
    7070        else
     
    104104
    105105
    106     if(compiler.pCompilingClass){
     106    if( compiler.IsCompilingClass() ){
    107107        //自身のオブジェクトのメンバ関数を検索
    108108
    109109        // 静的メソッド
    110         compiler.pCompilingClass->GetStaticMethods().Enum( name, subs );
     110        compiler.GetCompilingClass().GetStaticMethods().Enum( name, subs );
    111111
    112112        // 動的メソッド
    113         compiler.pCompilingClass->EnumDynamicMethodsOrInterfaceMethods( name, subs );
     113        compiler.GetCompilingClass().EnumDynamicMethodsOrInterfaceMethods( name, subs );
    114114    }
    115115
  • trunk/ab5.0/abdev/BasicCompiler_Common/include/Compiler.h

    r533 r536  
    3030    // 名前空間サポート
    3131    NamespaceSupporter namespaceSupporter;
     32
     33    // コンパイル中のUserProc/CClass
     34    const UserProc *pCompilingUserProc;
     35    const CClass *pCompilingClass;
    3236
    3337    // オブジェクトモジュール
     
    187191    const std::string TypeToString( const Type &type );
    188192
    189     // コンパイル中のクラス
    190     const CClass *pCompilingClass;
    191 
     193    void ClearCompilingUserProcAndClass();
     194    void SetCompilingClass( const CClass *pClass );
    192195    void StartProcedureCompile( const UserProc *pUserProc );
    193196    void FinishProcedureCompile();
     197
     198    bool IsGlobalAreaCompiling();
     199    const UserProc &GetCompilingUserProc();
     200    bool IsCompilingClass();
     201    const CClass &GetCompilingClass();
    194202};
    195203
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/Class.cpp

    r523 r536  
    942942
    943943        // コンパイル中クラスとしてセット
    944         compiler.pCompilingClass = &objClass;
     944        compiler.SetCompilingClass( &objClass );
    945945
    946946        const EnumInfo *pEnumInfo = NULL;
     
    971971        }
    972972
    973         compiler.pCompilingClass = NULL;
     973        compiler.SetCompilingClass( NULL );
    974974    }
    975975
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp

    r533 r536  
    145145
    146146    // 型パラメータ
    147     if( this->pCompilingClass )
     147    if( this->IsCompilingClass() )
    148148    {
    149149        // クラスに属するメソッドをコンパイルしているとき
    150         int formalTypeIndex = this->pCompilingClass->GetFormalGenericTypeParameterIndex( typeName );
     150        int formalTypeIndex = this->GetCompilingClass().GetFormalGenericTypeParameterIndex( typeName );
    151151        if( formalTypeIndex != -1 )
    152152        {
    153153            // コンパイル中クラスにおけるジェネリクス用の型パラメータのとき
    154154            type.SetBasicType( DEF_TYPE_PARAMETER );
    155             type.SetClassPtr( &this->pCompilingClass->GetFormalGenericTypes()[formalTypeIndex].GetType().GetClass() );
     155            type.SetClassPtr( &this->GetCompilingClass().GetFormalGenericTypes()[formalTypeIndex].GetType().GetClass() );
    156156            type.SetFormalTypeName( typeName );
    157157            type.SetFormalTypeIndex( formalTypeIndex );
     
    211211}
    212212
     213void Compiler::ClearCompilingUserProcAndClass()
     214{
     215    this->pCompilingUserProc = NULL;
     216    this->pCompilingClass = NULL;
     217}
     218
     219void Compiler::SetCompilingClass( const CClass *pClass )
     220{
     221    this->pCompilingClass = pClass;
     222}
     223
    213224void Compiler::StartProcedureCompile( const UserProc *pUserProc )
    214225{
     226    //コンパイル中の関数
     227    this->pCompilingUserProc = pUserProc;
     228
    215229    //コンパイル中の関数が属するクラス
    216     this->pCompilingClass = pUserProc->GetParentClassPtr();
     230    this->SetCompilingClass( pUserProc->GetParentClassPtr() );
    217231
    218232    //コンパイルスタートをクラス管理クラスに追加
     
    233247void Compiler::FinishProcedureCompile()
    234248{
    235 }
     249    this->pCompilingUserProc = NULL;
     250    this->pCompilingClass = NULL;
     251}
     252
     253bool Compiler::IsGlobalAreaCompiling()
     254{
     255    return ( pCompilingUserProc == NULL );
     256}
     257const UserProc &Compiler::GetCompilingUserProc()
     258{
     259    if( !this->IsGlobalAreaCompiling() )
     260    {
     261        return *pCompilingUserProc;
     262    }
     263
     264    throw;
     265}
     266
     267bool Compiler::IsCompilingClass()
     268{
     269    return ( pCompilingClass != NULL );
     270}
     271const CClass &Compiler::GetCompilingClass()
     272{
     273    if( this->IsCompilingClass() )
     274    {
     275        return *pCompilingClass;
     276    }
     277
     278    throw;
     279}
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp

    r512 r536  
    391391
    392392    // 呼び出し元でコンパイル中のクラスポインタをバックアップ
    393     const CClass *pBackCompilingClass = compiler.pCompilingClass;
     393    const CClass *pBackCompilingClass = compiler.IsCompilingClass()
     394        ? &compiler.GetCompilingClass()
     395        : NULL;
    394396
    395397    for(i=0;;i++){
     
    464466            if(!pobj_c) continue;
    465467
    466             compiler.pCompilingClass = pobj_c;
     468            compiler.SetCompilingClass( pobj_c );
    467469
    468470            if(lpszInheritsClass){
     
    688690            if(!pobj_c) continue;
    689691
    690             compiler.pCompilingClass = pobj_c;
     692            compiler.SetCompilingClass( pobj_c );
    691693
    692694            if(lpszInheritsClass){
     
    981983
    982984    // 呼び出し元でコンパイル中のクラスポインタを元に戻す
    983     compiler.pCompilingClass = pBackCompilingClass;
     985    compiler.SetCompilingClass( pBackCompilingClass );
    984986
    985987    // 名前空間を元に戻す
Note: See TracChangeset for help on using the changeset viewer.