Changeset 137 in dev


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

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

Files:
16 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_CallProc.cpp

    r135 r137  
    170170        // アクセスエラーチェック
    171171        //////////////////////////////
    172         DWORD dwAccess = pMethod->dwAccess;
    173172
    174173        if(ObjectName[0]){
     
    176175            if(pobj_c==pobj_CompilingClass){
    177176                //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    178                 if(dwAccess==ACCESS_NON){
     177                if( pMethod->IsNoneAccess() ){
    179178                    SetError(109,pUserProc->GetName(),cp);
    180179                    return false;
     
    182181            }
    183182            else{
    184                 if(dwAccess==ACCESS_PRIVATE||
    185                     dwAccess==ACCESS_NON){
     183                if( pMethod->IsPrivate()
     184                    || pMethod->IsNoneAccess() ){
    186185                    SetError(109,pUserProc->GetName(),cp);
    187186                    return false;
    188187                }
    189                 if(dwAccess==ACCESS_PROTECTED){
     188                if( pMethod->IsProtected() ){
    190189                    SetError(110,pUserProc->GetName(),cp);
    191190                    return false;
     
    195194        else{
    196195            //クラス内部からの呼び出し(継承によるACCESS_NONのみをエラーとする)
    197             if(dwAccess==ACCESS_NON){
     196            if( pMethod->IsNoneAccess() ){
    198197                SetError(109,pUserProc->GetName(),cp);
    199198                return false;
  • BasicCompiler32/Compile_Var.cpp

    r135 r137  
    190190    if(&objClass==pobj_CompilingClass){
    191191        //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    192         if(pMember->dwAccess==ACCESS_NON){
     192        if(pMember->IsNoneAccess()){
    193193            if(isErrorEnabled) SetError(107,VarName,cp);
    194194            return false;
     
    196196    }
    197197    else{
    198         if((bPrivateAccess==0&&pMember->dwAccess==ACCESS_PRIVATE)||
    199             pMember->dwAccess==ACCESS_NON){
     198        if((bPrivateAccess==0&&pMember->IsPrivate())||
     199            pMember->IsNoneAccess()){
    200200            if(isErrorEnabled) SetError(107,VarName,cp);
    201201            return false;
    202202        }
    203         else if(bPrivateAccess==0&&pMember->dwAccess==ACCESS_PROTECTED){
     203        else if(bPrivateAccess==0&&pMember->IsProtected()){
    204204            if(isErrorEnabled) SetError(108,VarName,cp);
    205205            return false;
     
    217217    }
    218218
    219     resultType = *pMember;
     219    resultType = pMember->GetType();
    220220
    221221    //ポインタ変数の場合
     
    243243    if(array[0]){
    244244        //配列オフセット
    245         if(!GetArrayOffset(pMember->SubScripts,array,*pMember)){
     245        if(!GetArrayOffset(pMember->SubScripts,array,pMember->GetType())){
    246246            if(isErrorEnabled) SetError(14,member,cp);
    247247        }
     
    323323            isErrorEnabled,
    324324            isWriteAccess,
    325             pMember->GetClass(),
     325            pMember->GetType().GetClass(),
    326326            NestMember,
    327327            pRelativeVar,
     
    755755
    756756                if(!SetInitGlobalData(offset+i3,
    757                     *objClass.ppobj_Member[i2],
     757                    objClass.ppobj_Member[i2]->GetType(),
    758758                    objClass.ppobj_Member[i2]->SubScripts,
    759759                    temporary)) return false;
     
    891891
    892892                if(!InitLocalVar(offset+i3,
    893                     *objClass.ppobj_Member[i2],
     893                    objClass.ppobj_Member[i2]->GetType(),
    894894                    objClass.ppobj_Member[i2]->SubScripts,
    895895                    temporary)) return false;
  • BasicCompiler64/BasicCompiler.vcproj

    r135 r137  
    480480                    >
    481481                    <File
    482                         RelativePath="..\BasicCompiler_Common\include\Member.h"
    483                         >
    484                     </File>
    485                     <File
    486                         RelativePath="..\BasicCompiler_Common\include\Method.h"
    487                         >
    488                     </File>
    489                     <File
    490482                        RelativePath="..\BasicCompiler_Common\include\Namespace.h"
    491483                        >
     
    500492                    </File>
    501493                    <File
    502                         RelativePath="..\BasicCompiler_Common\include\Prototype.h"
    503                         >
    504                     </File>
    505                     <File
    506494                        RelativePath="..\BasicCompiler_Common\Type.h"
    507495                        >
     
    515503                        >
    516504                    </File>
     505                    <Filter
     506                        Name="Prototype"
     507                        >
     508                        <File
     509                            RelativePath="..\BasicCompiler_Common\include\Member.h"
     510                            >
     511                        </File>
     512                        <File
     513                            RelativePath="..\BasicCompiler_Common\include\Method.h"
     514                            >
     515                        </File>
     516                        <File
     517                            RelativePath="..\BasicCompiler_Common\include\Prototype.h"
     518                            >
     519                        </File>
     520                    </Filter>
    517521                </Filter>
    518522                <Filter
  • BasicCompiler64/Compile_CallProc.cpp

    r135 r137  
    175175        // アクセスエラーチェック
    176176        //////////////////////////////
    177         DWORD dwAccess = pMethod->dwAccess;
    178177
    179178        if(ObjectName[0]){
     
    181180            if(pobj_c==pobj_CompilingClass){
    182181                //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    183                 if(dwAccess==ACCESS_NON){
     182                if( pMethod->IsNoneAccess() ){
    184183                    SetError(109,pUserProc->GetName(),cp);
    185184                    return false;
     
    187186            }
    188187            else{
    189                 if(dwAccess==ACCESS_PRIVATE||
    190                     dwAccess==ACCESS_NON){
     188                if( pMethod->IsPrivate()
     189                    || pMethod->IsNoneAccess() ){
    191190                    SetError(109,pUserProc->GetName(),cp);
    192191                    return false;
    193192                }
    194                 if(dwAccess==ACCESS_PROTECTED){
     193                if( pMethod->IsProtected() ){
    195194                    SetError(110,pUserProc->GetName(),cp);
    196195                    return false;
     
    200199        else{
    201200            //クラス内部からの呼び出し(継承によるACCESS_NONのみをエラーとする)
    202             if(dwAccess==ACCESS_NON){
     201            if( pMethod->IsNoneAccess() ){
    203202                SetError(109,pUserProc->GetName(),cp);
    204203                return false;
  • BasicCompiler64/Compile_Var.cpp

    r135 r137  
    219219    if(&objClass==pobj_CompilingClass){
    220220        //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    221         if(pMember->dwAccess==ACCESS_NON){
     221        if(pMember->IsNoneAccess()){
    222222            if(isErrorEnabled) SetError(107,VarName,cp);
    223223            return false;
     
    225225    }
    226226    else{
    227         if((bPrivateAccess==0&&pMember->dwAccess==ACCESS_PRIVATE)||
    228             pMember->dwAccess==ACCESS_NON){
     227        if((bPrivateAccess==0&&pMember->IsPrivate())||
     228            pMember->IsNoneAccess()){
    229229            if(isErrorEnabled) SetError(107,VarName,cp);
    230230            return false;
    231231        }
    232         else if(bPrivateAccess==0&&pMember->dwAccess==ACCESS_PROTECTED){
     232        else if(bPrivateAccess==0&&pMember->IsProtected()){
    233233            if(isErrorEnabled) SetError(108,VarName,cp);
    234234            return false;
     
    246246    }
    247247
    248     resultType = *pMember;
     248    resultType = pMember->GetType();
    249249
    250250    //ポインタ変数の場合
     
    273273    if(array[0]){
    274274        //配列オフセット
    275         if(!GetArrayOffset(pMember->SubScripts,array,*pMember)){
     275        if(!GetArrayOffset(pMember->SubScripts,array,pMember->GetType())){
    276276            if(isErrorEnabled) SetError(14,member,cp);
    277277        }
     
    352352            isErrorEnabled,
    353353            isWriteAccess,
    354             pMember->GetClass(),
     354            pMember->GetType().GetClass(),
    355355            NestMember,
    356356            pRelativeVar,
     
    777777
    778778                if(!SetInitGlobalData(offset+i3,
    779                     *objClass.ppobj_Member[i2],
     779                    objClass.ppobj_Member[i2]->GetType(),
    780780                    objClass.ppobj_Member[i2]->SubScripts,
    781781                    temporary)) return false;
     
    913913
    914914                if(!InitLocalVar(offset+i3,
    915                     *objClass.ppobj_Member[i2],
     915                    objClass.ppobj_Member[i2]->GetType(),
    916916                    objClass.ppobj_Member[i2]->SubScripts,
    917917                    temporary)) return false;
  • 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, "," );
  • BasicCompiler_Common/Class.h

    r135 r137  
    88#include <Member.h>
    99#include "Procedure.h"
    10 
    11 #define ACCESS_NON          0
    12 #define ACCESS_PRIVATE      1
    13 #define ACCESS_PUBLIC       2
    14 #define ACCESS_PROTECTED    3
    1510
    1611class CDBClass;
     
    8883    int iAlign;
    8984
    90 
    91 public:
    9285    CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name );
    9386    ~CClass();
     
    130123
    131124    //メンバ、メソッドの追加
    132     void AddMember( DWORD dwAccess, bool idConst, bool isRef, char *buffer );
    133     void AddStaticMember( DWORD dwAccess, bool isConst, bool isRef, char *buffer, int nowLine );
     125    void AddMember( Prototype::Accessibility accessibility, bool idConst, bool isRef, char *buffer );
     126    void AddStaticMember( Prototype::Accessibility accessibility, bool isConst, bool isRef, char *buffer, int nowLine );
    134127
    135128    //重複チェック
     
    230223
    231224private:
    232     void AddMethod(CClass *pobj_c, DWORD dwAccess, BOOL bStatic, bool isConst, bool isAbstract,
     225    void AddMethod(CClass *pobj_c, Prototype::Accessibility accessibility, BOOL bStatic, bool isConst, bool isAbstract,
    233226        bool isVirtual, bool isOverride, char *buffer, int nowLine);
    234227    BOOL MemberVar_LoopRefCheck(const CClass &objClass);
  • BasicCompiler_Common/DebugMiddleFile.cpp

    r135 r137  
    327327        i2+=sizeof(long);
    328328        for(i4=0;i4<pobj_c->iMemberNum;i4++){
     329            // 名前
    329330            lstrcpy(buffer+i2,pobj_c->ppobj_Member[i4]->GetName().c_str());
    330331            i2+=lstrlen(buffer+i2)+1;
    331332
     333            // 型
     334            *(long *)(buffer+i2)=pobj_c->ppobj_Member[i4]->GetType().GetBasicType();
     335            i2+=sizeof(long);
     336
     337            // 型の拡張情報
     338            SetLpIndex_DebugFile(buffer,&i2,pobj_c->ppobj_Member[i4]->GetType());
     339
     340            // アクセシビリティ
     341            *(Prototype::Accessibility *)(buffer+i2)=pobj_c->ppobj_Member[i4]->GetAccessibility();
     342            i2+=sizeof(Prototype::Accessibility);
     343
    332344            memcpy(buffer+i2,pobj_c->ppobj_Member[i4]->SubScripts,sizeof(int)*MAX_ARRAYDIM);
    333345            i2+=sizeof(int)*MAX_ARRAYDIM;
    334 
    335             //型
    336             *(long *)(buffer+i2)=pobj_c->ppobj_Member[i4]->GetBasicType();
    337             i2+=sizeof(long);
    338 
    339             //型の拡張情報
    340             SetLpIndex_DebugFile(buffer,&i2,*pobj_c->ppobj_Member[i4]);
    341 
    342             *(long *)(buffer+i2)=pobj_c->ppobj_Member[i4]->dwAccess;
    343             i2+=sizeof(long);
    344346
    345347            //バッファが足りない場合は再確保
     
    354356        i2+=sizeof(long);
    355357        foreach( const CMethod *pMethod, pobj_c->methods ){
    356             *(long *)(buffer+i2)=pMethod->dwAccess;
    357             i2+=sizeof(long);
     358            *(Prototype::Accessibility *)(buffer+i2)=pMethod->GetAccessibility();
     359            i2+=sizeof(Prototype::Accessibility);
    358360            if( pMethod->GetInheritsClassPtr() ){
    359361                lstrcpy(buffer+i2,pMethod->GetInheritsClassPtr()->GetName().c_str());
     
    372374        i2+=sizeof(long);
    373375        foreach( CMember *member, pobj_c->staticMembers ){
     376            // 名前
    374377            lstrcpy(buffer+i2,member->GetName().c_str());
    375378            i2+=lstrlen(buffer+i2)+1;
    376379
     380            // 型
     381            *(long *)(buffer+i2)=member->GetType().GetBasicType();
     382            i2+=sizeof(long);
     383
     384            // 型の拡張情報
     385            SetLpIndex_DebugFile(buffer,&i2,member->GetType());
     386
     387            // アクセシビリティ
     388            *(Prototype::Accessibility *)(buffer+i2)=member->GetAccessibility();
     389            i2+=sizeof(Prototype::Accessibility);
     390
    377391            memcpy(buffer+i2,member->SubScripts,sizeof(int)*MAX_ARRAYDIM);
    378392            i2+=sizeof(int)*MAX_ARRAYDIM;
    379 
    380             //型
    381             *(long *)(buffer+i2)=member->GetBasicType();
    382             i2+=sizeof(long);
    383 
    384             //型の拡張情報
    385             SetLpIndex_DebugFile(buffer,&i2,*member);
    386 
    387             *(long *)(buffer+i2)=member->dwAccess;
    388             i2+=sizeof(long);
    389393
    390394            //バッファが足りない場合は再確保
     
    707711            (CMember **)HeapAlloc(hHeap,0,pobj_c->iMemberNum*sizeof(CMember *));
    708712        for(i4=0;i4<pobj_c->iMemberNum;i4++){
    709             pobj_c->ppobj_Member[i4]=new CMember();
    710 
    711             pobj_c->ppobj_Member[i4]->SetName( (char *)(buffer+i2) );
     713
     714            // 名前
     715            string name = (char *)(buffer+i2);
    712716            i2+=lstrlen(buffer+i2)+1;
     717
     718            // 型
     719            Type type( *(long *)(buffer+i2) );
     720            i2+=sizeof(long);
     721
     722            // 型の拡張情報
     723            GetLpIndex_DebugFile(buffer,&i2,type);
     724
     725            // アクセシビリティ
     726            Prototype::Accessibility accessibility = *(Prototype::Accessibility *)(buffer+i2);
     727            i2+=sizeof(Prototype::Accessibility);
     728
     729            pobj_c->ppobj_Member[i4]=new CMember( accessibility, name, type, false );
    713730
    714731            memcpy(pobj_c->ppobj_Member[i4]->SubScripts,buffer+i2,sizeof(int)*MAX_ARRAYDIM);
    715732            i2+=sizeof(int)*MAX_ARRAYDIM;
    716 
    717             //型
    718             Type type( *(long *)(buffer+i2) );
    719             i2+=sizeof(long);
    720 
    721             //型の拡張情報
    722             GetLpIndex_DebugFile(buffer,&i2,type);
    723 
    724             pobj_c->ppobj_Member[i4]->SetType( type.GetBasicType(), type.GetIndex() );
    725 
    726             pobj_c->ppobj_Member[i4]->dwAccess=*(long *)(buffer+i2);
    727             i2+=sizeof(long);
    728733        }
    729734
     
    733738        for( i4=0; i4<nMethod; i4++ ){
    734739
    735             DWORD dwAccess=*(long *)(buffer+i2);
    736             i2+=sizeof(long);
     740            Prototype::Accessibility accessibility=*(Prototype::Accessibility *)(buffer+i2);
     741            i2+=sizeof(Prototype::Accessibility);
    737742
    738743            char szInherits[VN_SIZE];
     
    758763            }
    759764
    760             CMethod *pMethod = new DynamicMethod( pUserProc, dwAccess, 0,0,false, pobj_InheritsClass);
     765            CMethod *pMethod = new DynamicMethod( pUserProc, accessibility, 0,0,false, pobj_InheritsClass);
    761766
    762767            pobj_c->methods.push_back( pMethod );
     
    767772        i2+=sizeof(long);
    768773        for( i4=0; i4<nStaticMember; i4++ ){
    769             CMember *member=new CMember();
    770 
    771             member->SetName( (char *)(buffer+i2) );
     774            // 名前
     775            string name = (char *)(buffer+i2);
    772776            i2+=lstrlen(buffer+i2)+1;
     777
     778            // 型
     779            Type type( *(long *)(buffer+i2) );
     780            i2+=sizeof(long);
     781
     782            // 型の拡張情報
     783            GetLpIndex_DebugFile(buffer,&i2,type);
     784
     785            // アクセシビリティ
     786            Prototype::Accessibility accessibility = *(Prototype::Accessibility *)(buffer+i2);
     787            i2+=sizeof(Prototype::Accessibility);
     788
     789            CMember *member=new CMember( accessibility, name, type, false );
    773790
    774791            memcpy(member->SubScripts,buffer+i2,sizeof(int)*MAX_ARRAYDIM);
    775792            i2+=sizeof(int)*MAX_ARRAYDIM;
    776 
    777             //型
    778             Type type( *(long *)(buffer+i2) );
    779             i2+=sizeof(long);
    780 
    781             //型の拡張情報
    782             GetLpIndex_DebugFile(buffer,&i2,type);
    783 
    784             member->SetType( type.GetBasicType(), type.GetIndex() );
    785 
    786             member->dwAccess=*(long *)(buffer+i2);
    787             i2+=sizeof(long);
    788793
    789794            pobj_c->staticMembers.push_back( member );
  • BasicCompiler_Common/VarList.cpp

    r135 r137  
    188188            VarList_Array(hVarTree,hParent,
    189189                pTopOffset+offset,
    190                 *objClass.ppobj_Member[i],
     190                objClass.ppobj_Member[i]->GetType(),
    191191                objClass.ppobj_Member[i]->SubScripts);
    192192        }
     
    196196                &tv,
    197197                VarName,
    198                 *objClass.ppobj_Member[i],
     198                objClass.ppobj_Member[i]->GetType(),
    199199                pTopOffset+offset);
    200200        }
     
    437437            VarList_Array(hVarTree_This,hParent,
    438438                pThis+offset,
    439                 *pUserProc->GetParentClassPtr()->ppobj_Member[i],
     439                pUserProc->GetParentClassPtr()->ppobj_Member[i]->GetType(),
    440440                pUserProc->GetParentClassPtr()->ppobj_Member[i]->SubScripts);
    441441        }
     
    443443            VarList_Insert(hVarTree_This,&tv,
    444444                pUserProc->GetParentClassPtr()->ppobj_Member[i]->GetName().c_str(),
    445                 *pUserProc->GetParentClassPtr()->ppobj_Member[i],
     445                pUserProc->GetParentClassPtr()->ppobj_Member[i]->GetType(),
    446446                pThis+offset);
    447447        }
  • BasicCompiler_Common/VariableOpe.cpp

    r135 r137  
    571571    if( &objClass == pobj_CompilingClass ){
    572572        //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    573         if(objClass.ppobj_Member[i]->dwAccess==ACCESS_NON){
     573        if( objClass.ppobj_Member[i]->IsNoneAccess() ){
    574574            if(isErrorEnabled) SetError(107,VarName,cp);
    575575            return false;
     
    577577    }
    578578    else{
    579         if((bPrivateAccess==0&&objClass.ppobj_Member[i]->dwAccess==ACCESS_PRIVATE)||
    580             objClass.ppobj_Member[i]->dwAccess==ACCESS_NON){
     579        if(( bPrivateAccess==0 && objClass.ppobj_Member[i]->IsPrivate() )||
     580            objClass.ppobj_Member[i]->IsNoneAccess() ){
    581581            if(isErrorEnabled) SetError(107,VarName,cp);
    582582            return false;
    583583        }
    584         else if(bPrivateAccess==0&&objClass.ppobj_Member[i]->dwAccess==ACCESS_PROTECTED){
     584        else if( bPrivateAccess==0 && objClass.ppobj_Member[i]->IsProtected() ){
    585585            if(isErrorEnabled) SetError(108,VarName,cp);
    586586            return false;
     
    588588    }
    589589
    590     resultType = *objClass.ppobj_Member[i];
     590    resultType = objClass.ppobj_Member[i]->GetType();
    591591
    592592    //ポインタ変数の場合
     
    607607        //入れ子構造の場合
    608608
    609         return GetMemberType( objClass.ppobj_Member[i]->GetClass(),
     609        return GetMemberType( objClass.ppobj_Member[i]->GetType().GetClass(),
    610610            NestMember,
    611611            resultType,
  • BasicCompiler_Common/WatchList.cpp

    r135 r137  
    129129
    130130    //アクセシビリティをチェック
    131     if((bPrivateAccess==0&&objClass.ppobj_Member[i]->dwAccess==ACCESS_PRIVATE)||
    132         objClass.ppobj_Member[i]->dwAccess==ACCESS_NON){
     131    if(( bPrivateAccess==0 && objClass.ppobj_Member[i]->IsPrivate() )||
     132        objClass.ppobj_Member[i]->IsNoneAccess() ){
    133133        return 0;
    134134    }
    135     else if(bPrivateAccess==0&&objClass.ppobj_Member[i]->dwAccess==ACCESS_PROTECTED)
     135    else if(bPrivateAccess==0&&objClass.ppobj_Member[i]->IsProtected())
    136136        return 0;
    137137
    138     resultType = *objClass.ppobj_Member[i];
     138    resultType = objClass.ppobj_Member[i]->GetType();
    139139
    140140    //ポインタ変数の場合
     
    209209        }
    210210
    211         i2=Debugging_GetMember(objClass.ppobj_Member[i]->GetClass(),
     211        i2=Debugging_GetMember(objClass.ppobj_Member[i]->GetType().GetClass(),
    212212            NestMember,
    213213            pRelativeVar,
  • BasicCompiler_Common/include/Member.h

    r136 r137  
    1010class CClass;
    1111
    12 class CMember : public Type
     12class CMember : public MemberPrototype
    1313{
    1414    string name;
     15    Type type;
    1516    bool isConst;
    1617public:
    1718    int SubScripts[MAX_ARRAYDIM];
    18 
    19     DWORD dwAccess;
    2019
    2120    char *InitBuf;
     
    3332    }
    3433
     34    Type GetType() const
     35    {
     36        return type;
     37    }
     38
    3539    bool IsConst()
    3640    {
     
    3842    }
    3943
    40     CMember()
     44    CMember( Prototype::Accessibility accessibility, const string &name, const Type &type, bool isConst )
     45        : MemberPrototype( accessibility )
     46        , name( name )
     47        , type( type )
     48        , isConst( isConst )
    4149    {
    4250    }
    43     CMember( CClass *pobj_c, DWORD access, bool idConst, bool isRef, char *buffer, int nowLine=-1 );
     51    CMember( CClass *pobj_c, Prototype::Accessibility accessibility, bool idConst, bool isRef, char *buffer, int nowLine=-1 );
    4452    CMember( CMember &member );
    4553    ~CMember();
  • BasicCompiler_Common/include/Method.h

    r136 r137  
    44#include <vector>
    55
     6#include "../Class.h"
    67#include <windows.h>
    78
     
    1213void SetError();
    1314
    14 class CMethod
     15class CMethod : public MemberPrototype
    1516{
    1617public:
    1718    UserProc *pUserProc;
    18     DWORD dwAccess;
    1919
    20     CMethod( UserProc *pUserProc, DWORD dwAccess )
    21         : pUserProc( pUserProc )
    22         , dwAccess( dwAccess )
     20    CMethod( UserProc *pUserProc, Prototype::Accessibility accessibility )
     21        : MemberPrototype( accessibility )
     22        , pUserProc( pUserProc )
    2323    {
    2424    }
     
    4141
    4242public:
    43     DynamicMethod( UserProc *pUserProc, DWORD dwAccess, bool isAbstract, bool isVirtual, bool isConst, const CClass *pInheritsClass = NULL )
    44         : CMethod( pUserProc, dwAccess )
     43    DynamicMethod( UserProc *pUserProc, Prototype::Accessibility accessibility, bool isAbstract, bool isVirtual, bool isConst, const CClass *pInheritsClass = NULL )
     44        : CMethod( pUserProc, accessibility )
    4545        , isAbstract( isAbstract )
    4646        , isVirtual( isVirtual )
     
    5050    }
    5151    DynamicMethod( const CMethod &method )
    52         : CMethod( method.pUserProc, method.dwAccess )
     52        : CMethod( method.pUserProc, method.GetAccessibility() )
    5353        , isAbstract( method.IsAbstract() )
    5454        , isVirtual( method.IsVirtual() )
     
    9090{
    9191public:
    92     StaticMethod( UserProc *pUserProc, DWORD dwAccess )
    93         : CMethod( pUserProc, dwAccess )
     92    StaticMethod( UserProc *pUserProc, Prototype::Accessibility accessibility )
     93        : CMethod( pUserProc, accessibility )
    9494    {
    9595    }
     
    116116
    117117    //メンバ、メソッドの追加
    118     void Add( UserProc *pUserProc,DWORD dwAccess, bool isConst, bool isAbstract, bool isVirtual );
    119     void AddStatic(UserProc *pUserProc,DWORD dwAccess);
     118    void Add( UserProc *pUserProc, Prototype::Accessibility accessibility, bool isConst, bool isAbstract, bool isVirtual );
     119    void AddStatic(UserProc *pUserProc,Prototype::Accessibility accessibility);
    120120
    121121    const CMethod *GetMethodPtr( UserProc *pUserProc ) const;
  • BasicCompiler_Common/include/Prototype.h

    r135 r137  
    1313class Prototype
    1414{
     15public:
     16    enum Accessibility{
     17        None,
     18        Private,
     19        Protected,
     20        Public,
     21    };
     22
     23private:
    1524    // 名前空間
    1625    NamespaceScopes namespaceScopes;
     
    6978
    7079};
     80
     81class MemberPrototype
     82{
     83    Prototype::Accessibility accessibility;
     84public:
     85    MemberPrototype( Prototype::Accessibility accessibility )
     86        : accessibility( accessibility )
     87    {
     88    }
     89
     90    Prototype::Accessibility GetAccessibility() const
     91    {
     92        return accessibility;
     93    }
     94    void SetAccessibility( Prototype::Accessibility accessibility ){
     95        this->accessibility = accessibility;
     96    }
     97
     98    bool IsNoneAccess() const
     99    {
     100        return ( accessibility == Prototype::None );
     101    }
     102    bool IsPrivate() const
     103    {
     104        return ( accessibility == Prototype::Private );
     105    }
     106    bool IsProtected() const
     107    {
     108        return ( accessibility == Prototype::Protected );
     109    }
     110    bool IsPublic() const
     111    {
     112        return ( accessibility == Prototype::Public );
     113    }
     114};
  • BasicCompiler_Common/src/Member.cpp

    r136 r137  
    77#include <Member.h>
    88
    9 CMember::CMember( CClass *pobj_c, DWORD access, bool isConst, bool isRef, char *buffer, int nowLine ){
     9CMember::CMember( CClass *pobj_c, Prototype::Accessibility accessibility, bool isConst, bool isRef, char *buffer, int nowLine )
     10    : MemberPrototype( accessibility )
     11{
    1012    extern int cp;
    1113
     
    1416    char init_buf[VN_SIZE];
    1517    char constract_parameter[VN_SIZE];
    16     GetDimentionFormat(buffer,VarName,SubScripts,*this,init_buf,constract_parameter);
     18    GetDimentionFormat(buffer,VarName,SubScripts,type,init_buf,constract_parameter);
    1719
    1820    //重複チェック
     
    2325    //メンバ名
    2426    name = VarName;
    25 
    26     //アクセス権
    27     dwAccess=access;
    2827
    2928    //定数扱いかどうか
     
    4140    source_code_address=nowLine;
    4241}
    43 CMember::CMember(CMember &member):
    44     Type( member )
     42CMember::CMember(CMember &member)
     43    : MemberPrototype( member.GetAccessibility() )
     44    , name( member.GetName() )
     45    , type( member.GetType() )
     46    , isConst( member.IsConst() )
    4547{
    46 
    47     //name
    48     name = member.name;
    49 
    50     //定数扱いかどうか
    51     isConst = member.isConst;
    52 
    5348    //SubScripts
    5449    memcpy(SubScripts,member.SubScripts,MAX_ARRAYDIM*sizeof(int));
     
    8479                temporary,
    8580                member->SubScripts,
    86                 *member,
     81                member->GetType(),
    8782                member->InitBuf,
    8883                member->ConstractParameter,
  • BasicCompiler_Common/src/Method.cpp

    r136 r137  
    1414}
    1515
    16 void Methods::Add( UserProc *pUserProc,DWORD dwAccess, bool isConst, bool isAbstract, bool isVirtual ){
    17     CMethod *pMethod = new DynamicMethod( pUserProc, dwAccess, isAbstract, isVirtual, isConst );
     16void Methods::Add( UserProc *pUserProc,Prototype::Accessibility accessibility, bool isConst, bool isAbstract, bool isVirtual ){
     17    CMethod *pMethod = new DynamicMethod( pUserProc, accessibility, isAbstract, isVirtual, isConst );
    1818    this->push_back( pMethod );
    1919    pUserProc->SetMethod( pMethod );
    2020}
    21 void Methods::AddStatic(UserProc *pUserProc,DWORD dwAccess){
    22     CMethod *pMethod = new StaticMethod( pUserProc, dwAccess );
     21void Methods::AddStatic(UserProc *pUserProc, Prototype::Accessibility accessibility ){
     22    CMethod *pMethod = new StaticMethod( pUserProc, accessibility );
    2323    this->push_back( pMethod );
    2424    pUserProc->SetMethod( pMethod );
Note: See TracChangeset for help on using the changeset viewer.