Changeset 11 in dev for BasicCompiler32/Compile_Var.cpp


Ignore:
Timestamp:
Dec 8, 2006, 3:25:27 AM (18 years ago)
Author:
dai_9181
Message:

Const変数の書き込み規制を有効化(グローバル/ローカル変数のみ)
定数オブジェクトと定数メンバは未実装。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_Var.cpp

    r8 r11  
    157157    return 1;
    158158}
    159 BOOL GetMemberOffset(BOOL bError,CClass *pobj_c,char *member,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpNestIndex,BOOL bPrivateAccess){
     159BOOL GetMemberOffset(bool ErrorEnabled,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(bError) SetError(103,VarName,cp);
     177        if(ErrorEnabled) SetError(103,VarName,cp);
    178178        return 0;
    179179    }
     
    183183        //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    184184        if(pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
    185             if(bError) SetError(107,VarName,cp);
     185            if(ErrorEnabled) 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(bError) SetError(107,VarName,cp);
     192            if(ErrorEnabled) SetError(107,VarName,cp);
    193193            return 0;
    194194        }
    195195        else if(bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PROTECTED){
    196             if(bError) SetError(108,VarName,cp);
     196            if(ErrorEnabled) SetError(108,VarName,cp);
    197197            return 0;
    198198        }
     
    211211    else{
    212212        if(lpPtrOffset[0]){
    213             if(bError) SetError(16,member,cp);
     213            if(ErrorEnabled) SetError(16,member,cp);
    214214            return 0;
    215215        }
     
    227227        //配列オフセット
    228228        if(!GetArrayOffset(pobj_c->ppobj_Member[i]->SubScripts,array,*pType,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex))
    229             if(bError) SetError(14,member,cp);
     229            if(ErrorEnabled) SetError(14,member,cp);
    230230    }
    231231    else if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
     
    238238        if(*pType==DEF_OBJECT){
    239239            if(RefType!=DEF_OBJECT){
    240                 if(bError) SetError(104,member,cp);
     240                if(ErrorEnabled) SetError(104,member,cp);
    241241                return 0;
    242242            }
     
    248248                //pObj[n].member
    249249                if(RefType!=DEF_OBJECT){
    250                     if(bError) SetError(104,member,cp);
     250                    if(ErrorEnabled) SetError(104,member,cp);
    251251                    return 0;
    252252                }
     
    261261                //pObj->member
    262262                if(RefType!=DEF_PTR_OBJECT){
    263                     if(bError) SetError(104,member,cp);
     263                    if(ErrorEnabled) SetError(104,member,cp);
    264264                    return 0;
    265265                }
     
    287287                //ppObj[n]->member
    288288                if(RefType!=DEF_PTR_OBJECT){
    289                     if(bError) SetError(104,member,cp);
     289                    if(ErrorEnabled) SetError(104,member,cp);
    290290                    return 0;
    291291                }
     
    302302            }
    303303            else{
    304                 if(bError) SetError(104,member,cp);
     304                if(ErrorEnabled) SetError(104,member,cp);
    305305                return 0;
    306306            }
    307307        }
    308308
    309         if(!GetMemberOffset(bError,pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
     309        if(!GetMemberOffset(ErrorEnabled,pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
    310310            NestMember,
    311311            pType,
     
    344344}
    345345
    346 BOOL GetVarOffset(BOOL bError,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
     346BOOL GetVarOffset(bool ErrorEnabled,bool WriteAccess,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
    347347    extern BOOL bCompilingGlobal;
    348348    int i,RefType;
     
    360360    LONG_PTR lpIndex;
    361361    int *pSubScripts;
     362    bool bConst;
    362363
    363364    if(bCompilingGlobal==0){
     
    395396            if(plpIndex) *plpIndex=lpIndex;
    396397            pSubScripts=LocalVar[i].SubScripts;
     398            bConst = LocalVar[i].bConst;
    397399
    398400            goto ok;
     
    439441
    440442        pRelativeVar->dwKind=VAR_DIRECTMEM;
    441         if(!GetMemberOffset(bError,pobj_CompilingClass,variable,pType,pRelativeVar,&lpIndex,1)) return 0;
     443        if(!GetMemberOffset(ErrorEnabled,pobj_CompilingClass,variable,pType,pRelativeVar,&lpIndex,1)) return 0;
    442444        if(plpIndex) *plpIndex=lpIndex;
    443445        return 1;
     
    511513    }
    512514
    513     if(bError) SetError(3,variable,cp);
     515    if(ErrorEnabled) SetError(3,variable,cp);
    514516    pRelativeVar->dwKind=NON_VAR;
    515517    return 0;
     
    540542    if(plpIndex) *plpIndex=lpIndex;
    541543    pSubScripts=GlobalVar[i].SubScripts;
     544    bConst = GlobalVar[i].bConst;
    542545
    543546
    544547ok:
    545548
     549    if(bConst && WriteAccess){
     550        //Const定義の変数に書き込みアクセスをしようとした場合
     551        SetError(61,VarName,cp);
     552    }
    546553
    547554    if(array[0]==0&&pSubScripts[0]!=-1){
     
    576583
    577584            LONG_PTR lp2;
    578             if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
     585            if(!GetMemberOffset(ErrorEnabled,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
    579586            if(plpIndex) *plpIndex=lp2;
    580587        }
     
    592599
    593600                LONG_PTR lp2;
    594                 if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
     601                if(!GetMemberOffset(ErrorEnabled,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
    595602                if(plpIndex) *plpIndex=lp2;
    596603            }
     
    611618
    612619                LONG_PTR lp2;
    613                 if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
     620                if(!GetMemberOffset(ErrorEnabled,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
    614621                if(plpIndex) *plpIndex=lp2;
    615622            }
     
    636643
    637644                LONG_PTR lp2;
    638                 if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
     645                if(!GetMemberOffset(ErrorEnabled,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
    639646                if(plpIndex) *plpIndex=lp2;
    640647            }
     
    11171124            lstrcpy(pVar->name,VarName);
    11181125            pVar->fRef=0;
    1119             if(dwFlag & DIMFLAG_CONST) pVar->bConst = 1;
    1120             else pVar->bConst = 0;
     1126            if(dwFlag & DIMFLAG_CONST) pVar->bConst = true;
     1127            else pVar->bConst = false;
    11211128            if(SubScripts[0]==-1) pVar->bArray=0;
    11221129            else pVar->bArray=1;
     
    11321139
    11331140            if(InitBuf[0]){
     1141                //初期代入時のみ、書き込みアクセスを許可する
     1142                bool bConstBack = pVar->bConst;
     1143                pVar->bConst = false;
     1144
    11341145                int result = InitLocalVar(-pVar->offset,
    11351146                    pVar->type,
     
    11441155                    OpcodeCalc(temporary);
    11451156                }
     1157
     1158                pVar->bConst = bConstBack;
    11461159            }
    11471160            else{
Note: See TracChangeset for help on using the changeset viewer.