Changeset 17 in dev for BasicCompiler32/Compile_Var.cpp


Ignore:
Timestamp:
Dec 20, 2006, 2:51:56 AM (17 years ago)
Author:
dai_9181
Message:

定数メンバ機能を有効にした。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_Var.cpp

    r11 r17  
    157157    return 1;
    158158}
    159 BOOL GetMemberOffset(bool ErrorEnabled,CClass *pobj_c,char *member,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpNestIndex,BOOL bPrivateAccess){
     159BOOL GetMemberOffset(bool isErrorEnabled, bool isWriteAccess, CClass *pobj_c, char *member, int *pType, RELATIVE_VAR *pRelativeVar, LONG_PTR *plpNestIndex, BOOL bPrivateAccess){
    160160    int i,offset;
    161161
     
    175175    offset=GetSizeOfClassMember(pobj_c,VarName,&i);
    176176    if(i==pobj_c->iMemberNum){
    177         if(ErrorEnabled) SetError(103,VarName,cp);
     177        if(isErrorEnabled) SetError(103,VarName,cp);
    178178        return 0;
    179179    }
     
    183183        //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    184184        if(pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
    185             if(ErrorEnabled) SetError(107,VarName,cp);
     185            if(isErrorEnabled) SetError(107,VarName,cp);
    186186            return 0;
    187187        }
     
    190190        if((bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PRIVATE)||
    191191            pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
    192             if(ErrorEnabled) SetError(107,VarName,cp);
     192            if(isErrorEnabled) SetError(107,VarName,cp);
    193193            return 0;
    194194        }
    195195        else if(bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PROTECTED){
    196             if(ErrorEnabled) SetError(108,VarName,cp);
     196            if(isErrorEnabled) SetError(108,VarName,cp);
    197197            return 0;
    198198        }
     199    }
     200
     201    //Const定義の場合は書き込みアクセスを制限する
     202    //※コンストラクタをコンパイル中の場合は例外的に許可する
     203    if( pobj_c->ppobj_Member[i]->IsConst() &&       //定数メンバである
     204        isWriteAccess &&                            //書き込みアクセスを要求されている
     205        pobj_c->IsCompilingConstructor() == false   //コンストラクタ コンパイル中を除く
     206        ){
     207            //Const定義の変数に書き込みアクセスをしようとした場合
     208            SetError(61,VarName,cp);
    199209    }
    200210
     
    211221    else{
    212222        if(lpPtrOffset[0]){
    213             if(ErrorEnabled) SetError(16,member,cp);
     223            if(isErrorEnabled) SetError(16,member,cp);
    214224            return 0;
    215225        }
     
    227237        //配列オフセット
    228238        if(!GetArrayOffset(pobj_c->ppobj_Member[i]->SubScripts,array,*pType,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex))
    229             if(ErrorEnabled) SetError(14,member,cp);
     239            if(isErrorEnabled) SetError(14,member,cp);
    230240    }
    231241    else if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
     
    238248        if(*pType==DEF_OBJECT){
    239249            if(RefType!=DEF_OBJECT){
    240                 if(ErrorEnabled) SetError(104,member,cp);
     250                if(isErrorEnabled) SetError(104,member,cp);
    241251                return 0;
    242252            }
     
    248258                //pObj[n].member
    249259                if(RefType!=DEF_OBJECT){
    250                     if(ErrorEnabled) SetError(104,member,cp);
     260                    if(isErrorEnabled) SetError(104,member,cp);
    251261                    return 0;
    252262                }
     
    261271                //pObj->member
    262272                if(RefType!=DEF_PTR_OBJECT){
    263                     if(ErrorEnabled) SetError(104,member,cp);
     273                    if(isErrorEnabled) SetError(104,member,cp);
    264274                    return 0;
    265275                }
     
    287297                //ppObj[n]->member
    288298                if(RefType!=DEF_PTR_OBJECT){
    289                     if(ErrorEnabled) SetError(104,member,cp);
     299                    if(isErrorEnabled) SetError(104,member,cp);
    290300                    return 0;
    291301                }
     
    302312            }
    303313            else{
    304                 if(ErrorEnabled) SetError(104,member,cp);
     314                if(isErrorEnabled) SetError(104,member,cp);
    305315                return 0;
    306316            }
    307317        }
    308318
    309         if(!GetMemberOffset(ErrorEnabled,pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
     319        if(!GetMemberOffset(
     320            isErrorEnabled,
     321            isWriteAccess,
     322            pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
    310323            NestMember,
    311324            pType,
     
    344357}
    345358
    346 BOOL GetVarOffset(bool ErrorEnabled,bool WriteAccess,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
     359BOOL GetVarOffset(bool isErrorEnabled, bool isWriteAccess, char *NameBuffer, int *pType, RELATIVE_VAR *pRelativeVar, LONG_PTR *plpIndex, int *pss){
    347360    extern BOOL bCompilingGlobal;
    348361    int i,RefType;
     
    441454
    442455        pRelativeVar->dwKind=VAR_DIRECTMEM;
    443         if(!GetMemberOffset(ErrorEnabled,pobj_CompilingClass,variable,pType,pRelativeVar,&lpIndex,1)) return 0;
     456        if(!GetMemberOffset(
     457            isErrorEnabled,
     458            isWriteAccess,
     459            pobj_CompilingClass,
     460            variable,
     461            pType,
     462            pRelativeVar,
     463            &lpIndex,1)) return 0;
    444464        if(plpIndex) *plpIndex=lpIndex;
    445465        return 1;
     
    513533    }
    514534
    515     if(ErrorEnabled) SetError(3,variable,cp);
     535    if(isErrorEnabled) SetError(3,variable,cp);
    516536    pRelativeVar->dwKind=NON_VAR;
    517537    return 0;
     
    547567ok:
    548568
    549     if(bConst && WriteAccess){
     569    if(bConst && isWriteAccess){
    550570        //Const定義の変数に書き込みアクセスをしようとした場合
    551571        SetError(61,VarName,cp);
     
    581601                return 0;
    582602            }
    583 
    584             LONG_PTR lp2;
    585             if(!GetMemberOffset(ErrorEnabled,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
    586             if(plpIndex) *plpIndex=lp2;
    587603        }
    588604        else if(*pType==DEF_PTR_OBJECT){
     
    597613                SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset);
    598614                pRelativeVar->dwKind=VAR_DIRECTMEM;
    599 
    600                 LONG_PTR lp2;
    601                 if(!GetMemberOffset(ErrorEnabled,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
    602                 if(plpIndex) *plpIndex=lp2;
    603615            }
    604616            else{
     
    616628                OpBuffer[obp++]=(char)0x8B;
    617629                OpBuffer[obp++]=(char)0x08;
    618 
    619                 LONG_PTR lp2;
    620                 if(!GetMemberOffset(ErrorEnabled,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
    621                 if(plpIndex) *plpIndex=lp2;
    622630            }
    623631        }
     
    641649                OpBuffer[obp++]=(char)0x8B;
    642650                OpBuffer[obp++]=(char)0x08;
    643 
    644                 LONG_PTR lp2;
    645                 if(!GetMemberOffset(ErrorEnabled,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
    646                 if(plpIndex) *plpIndex=lp2;
    647651            }
    648652            else{
     
    657661            return 0;
    658662        }
     663
     664        LONG_PTR lp2;
     665        if(!GetMemberOffset(
     666            isErrorEnabled,
     667            isWriteAccess,
     668            (CClass *)lpIndex,
     669            member,pType,pRelativeVar,&lp2,0)) return 0;
     670        if(plpIndex) *plpIndex=lp2;
     671
    659672        return 1;
    660673    }
Note: See TracChangeset for help on using the changeset viewer.