Changeset 137 in dev for BasicCompiler_Common/Class.cpp


Ignore:
Timestamp:
Jun 8, 2007, 3:11:47 AM (17 years ago)
Author:
dai_9181
Message:

アクセシビリティ周りをリファクタリングした。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Class.cpp

    r135 r137  
    165165        ppobj_Member[iMemberNum]=new CMember( *inheritsClass.ppobj_Member[i3] );
    166166
    167         //dwAccess
    168         if(inheritsClass.ppobj_Member[i3]->dwAccess==ACCESS_PRIVATE)
    169             ppobj_Member[iMemberNum]->dwAccess=ACCESS_NON;
    170         else ppobj_Member[iMemberNum]->dwAccess=inheritsClass.ppobj_Member[i3]->dwAccess;
     167        // アクセシビリティ
     168        if( inheritsClass.ppobj_Member[i3]->IsPrivate() ){
     169            ppobj_Member[iMemberNum]->SetAccessibility( Prototype::None );
     170        }
     171        else{
     172            ppobj_Member[iMemberNum]->SetAccessibility( inheritsClass.ppobj_Member[i3]->GetAccessibility() );
     173        }
    171174
    172175        iMemberNum++;
     
    177180        CMethod *pMethod = new DynamicMethod( *pBaseMethod );
    178181
    179         //dwAccess
    180         if(pBaseMethod->dwAccess==ACCESS_PRIVATE)
    181             pMethod->dwAccess=ACCESS_NON;
    182         else pMethod->dwAccess=pBaseMethod->dwAccess;
     182        // アクセシビリティ
     183        if(pBaseMethod->GetAccessibility() == Prototype::Private){
     184            pMethod->SetAccessibility( Prototype::None );
     185        }
     186        else{
     187            pMethod->SetAccessibility( pBaseMethod->GetAccessibility() );
     188        }
    183189
    184190        //pobj_Inherits
     
    221227        CMethod *pMethod = new DynamicMethod( *pBaseMethod );
    222228
    223         //dwAccess
    224         if(pBaseMethod->dwAccess==ACCESS_PRIVATE)
    225             pMethod->dwAccess=ACCESS_NON;
    226         else pMethod->dwAccess=pBaseMethod->dwAccess;
     229        // アクセシビリティ
     230        if(pBaseMethod->GetAccessibility() == Prototype::Private){
     231            pMethod->SetAccessibility( Prototype::None );
     232        }
     233        else{
     234            pMethod->SetAccessibility( pBaseMethod->GetAccessibility() );
     235        }
    227236
    228237        //pobj_Inherits
     
    245254    return true;
    246255}
    247 void CClass::AddMember( DWORD dwAccess, bool isConst, bool isRef, char *buffer ){
     256void CClass::AddMember( Prototype::Accessibility accessibility, bool isConst, bool isRef, char *buffer ){
    248257    ppobj_Member = (CMember **)HeapReAlloc( hHeap, 0, ppobj_Member, ( iMemberNum + 1 ) * sizeof(CMember *) );
    249     ppobj_Member[iMemberNum] = new CMember( this, dwAccess, isConst, isRef, buffer );
     258    ppobj_Member[iMemberNum] = new CMember( this, accessibility, isConst, isRef, buffer );
    250259    iMemberNum++;
    251260}
    252 void CClass::AddStaticMember( DWORD dwAccess, bool isConst, bool isRef, char *buffer, int nowLine ){
    253     CMember *member = new CMember( this, dwAccess, isConst, isRef, buffer, nowLine );
     261void CClass::AddStaticMember( Prototype::Accessibility accessibility, bool isConst, bool isRef, char *buffer, int nowLine ){
     262    CMember *member = new CMember( this, accessibility, isConst, isRef, buffer, nowLine );
    254263    staticMembers.push_back( member );
    255264}
     
    326335        CMember *pMember = ppobj_Member[i];
    327336
    328         i2 = pMember->GetSize();
     337        i2 = pMember->GetType().GetSize();
    329338
    330339        //アラインメントを算出
    331340        int member_size;
    332         if( pMember->IsStruct() ){
     341        if( pMember->GetType().IsStruct() ){
    333342            //メンバクラスのアラインメントを取得
    334             member_size=pMember->GetClass().GetAlignment();
     343            member_size=pMember->GetType().GetClass().GetAlignment();
    335344        }
    336345        else{
     
    393402        CMember *pMember = ppobj_Member[i];
    394403
    395         if(pMember->IsStruct()){
     404        if(pMember->GetType().IsStruct()){
    396405            //メンバクラスのアラインメントを取得
    397             member_size=pMember->GetClass().GetAlignment();
     406            member_size=pMember->GetType().GetClass().GetAlignment();
    398407        }
    399408        else{
    400409            //メンバサイズを取得
    401             member_size = pMember->GetSize();
     410            member_size = pMember->GetType().GetSize();
    402411        }
    403412
     
    837846
    838847
    839 void CDBClass::AddMethod(CClass *pobj_c, DWORD dwAccess, BOOL bStatic, bool isConst, bool isAbstract,
     848void CDBClass::AddMethod(CClass *pobj_c, Prototype::Accessibility accessibility, BOOL bStatic, bool isConst, bool isAbstract,
    840849                         bool isVirtual, bool isOverride, char *buffer, int nowLine){
    841850    int i,i2;
     
    932941                        SetError(127,NULL,nowLine);
    933942                    }
    934                     if(pMethod->dwAccess!=dwAccess){
     943                    if(pMethod->GetAccessibility() != accessibility ){
    935944                        SetError(128,NULL,nowLine);
    936945                    }
     
    952961
    953962    if(bStatic){
    954         pobj_c->staticMethods.AddStatic(pUserProc,dwAccess);
     963        pobj_c->staticMethods.AddStatic( pUserProc, accessibility );
    955964    }
    956965    else{
    957         pobj_c->methods.Add(pUserProc, dwAccess, isConst, isAbstract, isVirtual);
     966        pobj_c->methods.Add(pUserProc, accessibility, isConst, isAbstract, isVirtual);
    958967    }
    959968}
     
    963972    for(i=0;i<objClass.iMemberNum;i++){
    964973        const CMember *pMember = objClass.ppobj_Member[i];
    965         if(pMember->IsStruct()){
     974        if(pMember->GetType().IsStruct()){
    966975            //循環参照でないかをチェック
    967             if(pobj_LoopRefCheck->check(pMember->GetClass())){
     976            if(pobj_LoopRefCheck->check(pMember->GetType().GetClass())){
    968977                extern int cp;
    969                 SetError(124,pMember->GetClass().GetName(),cp);
     978                SetError(124,pMember->GetType().GetClass().GetName(),cp);
    970979                return 0;
    971980            }
     
    973982            pobj_LoopRefCheck->add(objClass.GetName().c_str());
    974983
    975             i2=MemberVar_LoopRefCheck(pMember->GetClass());
     984            i2=MemberVar_LoopRefCheck(pMember->GetType().GetClass());
    976985            if(bRet==1) bRet=i2;
    977986
     
    986995    extern char *basbuf;
    987996    int i,i2,i3,sub_address,top_pos;
    988     DWORD dwAccess;
    989997    char temporary[8192];
    990998
     
    11401148                //メンバ関数を追加
    11411149                AddMethod(pobj_c,
    1142                     ACCESS_PUBLIC,      //Publicアクセス権
     1150                    Prototype::Public,  //Publicアクセス権
    11431151                    0,                  //Static指定なし
    11441152                    false,              //Constではない
     
    12121220
    12131221            //アクセス制限の初期値をセット
    1214             if(dwClassType==ESC_CLASS) dwAccess=ACCESS_PRIVATE;
    1215             else dwAccess=ACCESS_PUBLIC;
     1222            Prototype::Accessibility accessibility;
     1223            if(dwClassType==ESC_CLASS){
     1224                accessibility = Prototype::Private;
     1225            }
     1226            else{
     1227                accessibility = Prototype::Public;
     1228            }
    12161229
    12171230            if( pobj_c->GetName() == "Object" || dwClassType == ESC_TYPE ){
     
    13421355                //アクセスを変更
    13431356                if(lstrcmpi(temporary,"Private")==0){
    1344                     dwAccess=ACCESS_PRIVATE;
     1357                    accessibility = Prototype::Private;
    13451358                    continue;
    13461359                }
    13471360                if(lstrcmpi(temporary,"Public")==0){
    1348                     dwAccess=ACCESS_PUBLIC;
     1361                    accessibility = Prototype::Public;
    13491362                    continue;
    13501363                }
    13511364                if(lstrcmpi(temporary,"Protected")==0){
    1352                     dwAccess=ACCESS_PROTECTED;
     1365                    accessibility = Prototype::Protected;
    13531366                    continue;
    13541367                }
     
    13591372                        //静的メンバを追加
    13601373                        cp=i;   //エラー用
    1361                         pobj_c->AddStaticMember( dwAccess, isConst, false, temporary, i);
     1374                        pobj_c->AddStaticMember( accessibility, isConst, false, temporary, i);
    13621375                    }
    13631376                    else{
    13641377                        //メンバを追加
    13651378                        cp=i;   //エラー用
    1366                         pobj_c->AddMember( dwAccess, isConst, false, temporary );
    1367 
    1368 
    1369                         if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->IsStruct()){
    1370                             if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass().ppobj_Member==0){
     1379                        pobj_c->AddMember( accessibility, isConst, false, temporary );
     1380
     1381
     1382                        if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetType().IsStruct()){
     1383                            if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetType().GetClass().ppobj_Member==0){
    13711384                                //参照先が読み取られていないとき
    1372                                 GetClass_recur(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass().GetName().c_str());
     1385                                GetClass_recur(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetType().GetClass().GetName().c_str());
    13731386                            }
    13741387                        }
    13751388
    13761389
    1377                         if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->IsStruct()){
     1390                        if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetType().IsStruct()){
    13781391                            //循環参照のチェック
    13791392                            pobj_LoopRefCheck->add(pobj_c->GetName().c_str());
    1380                             if(!MemberVar_LoopRefCheck(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetClass())){
     1393                            if(!MemberVar_LoopRefCheck(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetType().GetClass())){
    13811394                                //エラー回避
    1382                                 pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->SetBasicType( DEF_PTR_VOID );
     1395                                pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->GetType().SetBasicType( DEF_PTR_VOID );
    13831396                            }
    13841397                            pobj_LoopRefCheck->del(pobj_c->GetName().c_str());
     
    13901403                    cp=i;   //エラー用
    13911404                    AddMethod(pobj_c,
    1392                         dwAccess,
     1405                        accessibility,
    13931406                        bStatic,
    13941407                        isConst,
     
    14661479            CMember &member = *objClass.ppobj_Member[i];
    14671480
    1468             if( member.IsObject() || member.IsPointer() ){
     1481            if( member.GetType().IsObject() || member.GetType().IsPointer() ){
    14691482                if( referenceOffsetsBuffer[0] ){
    14701483                    lstrcat( referenceOffsetsBuffer, "," );
Note: See TracChangeset for help on using the changeset viewer.