Changeset 40 in dev for BasicCompiler64


Ignore:
Timestamp:
Jan 28, 2007, 3:48:22 AM (17 years ago)
Author:
dai_9181
Message:

ByRef修飾子を関数戻り値とDimステートメントで指定可能にした。

Location:
BasicCompiler64
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/Compile_Calc.cpp

    r36 r40  
    237237    SetVariableFromRax(VarType,CalcType,&VarRelativeVar);
    238238}
     239
     240void SetRefVariable( const char *varname, const char *expression ){
     241    ////////////////////////////////////////
     242    // 変数のタイプ型を識別して、演算を行う
     243    ////////////////////////////////////////
     244
     245    int VarType,CalcType;
     246    LONG_PTR lpVarIndex,lpCalcIndex;
     247    BOOL bCalcUseHeap;
     248
     249    //型を識別
     250    VarType=GetVarType(varname,&lpVarIndex,0);
     251    if(VarType==-1){
     252        SetError(300,NULL,cp);
     253        return;
     254    }
     255
     256    extern LONG_PTR ProcPtr_BaseIndex;
     257    if(VarType==DEF_PTR_PROC) ProcPtr_BaseIndex=lpVarIndex;
     258    else ProcPtr_BaseIndex=-1;
     259
     260    //NumOpe...(rax、またはxmm0に答えが格納される)
     261    int reg=REG_RAX;
     262    CalcType=NumOpe(&reg,expression,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap);
     263
     264    //結果を格納しているレジスタをブロッキング
     265    pobj_BlockReg->lock(reg);
     266
     267    if(VarType==-1||CalcType==-1) return;
     268
     269    //変数アドレスを取得
     270    RELATIVE_VAR VarRelativeVar;
     271    if(!GetVarOffsetReadWrite(
     272        varname,
     273        &VarType,
     274        &VarRelativeVar,
     275        &lpVarIndex)) return;
     276
     277    //レジスタのブロッキングを解除
     278    pobj_BlockReg->clear();
     279
     280    if(VarType&FLAG_PTR){
     281        SetError(14,varname,cp);
     282        return;
     283    }
     284
     285    if( VarType == DEF_OBJECT && VarRelativeVar.dwKind == VAR_REFLOCAL ){
     286        // 参照型オブジェクトへの代入(初期化)はポインタ変数と同様の処理に値する
     287        VarType = PTR_LEVEL_UP( VarType );
     288
     289        VarRelativeVar.dwKind = VAR_LOCAL;
     290
     291        if( CalcType == DEF_OBJECT ){
     292            //右辺値が実体オブジェクトのときは、参照をコピー
     293            CalcType = PTR_LEVEL_UP( DEF_OBJECT );
     294        }
     295    }
     296    else{
     297        SetError(300,NULL,cp);
     298    }
     299
     300
     301    /////////////////////////////////
     302    // 右辺、左辺の型チェックを行う
     303    /////////////////////////////////
     304
     305    CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0);
     306
     307
     308    /////////////////////////////////////////////////
     309    // rax(実数はxmm0)の内容を変数にコピー
     310    /////////////////////////////////////////////////
     311    SetVariableFromRax(VarType,CalcType,&VarRelativeVar);
     312}
  • BasicCompiler64/Compile_Calc_PushVar.cpp

    r3 r40  
    5353        }
    5454    }
    55     else if(pRelativeVar->dwKind==VAR_REFLOCAL){
     55    else if( pRelativeVar->dwKind == VAR_REFLOCAL ){
    5656        if(pRelativeVar->bOffsetOffset){
    5757            //add r11,qword ptr[rsp+offset]
     
    134134        }
    135135    }
    136     else if(pRelativeVar->dwKind==VAR_REFLOCAL){
     136    else if( pRelativeVar->dwKind == VAR_REFLOCAL ){
    137137        if(pRelativeVar->bOffsetOffset){
    138138            //add r11,qword ptr[rsp+offset]
     
    204204        }
    205205    }
    206     else if(pRelativeVar->dwKind==VAR_REFLOCAL){
     206    else if( pRelativeVar->dwKind == VAR_REFLOCAL ){
    207207        if(pRelativeVar->bOffsetOffset){
    208208            //add r11,qword ptr[rsp+offset]
  • BasicCompiler64/Compile_CallProc.cpp

    r31 r40  
    339339    }
    340340
    341     if(psi->ReturnType==DEF_OBJECT){
     341    if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false ){
    342342        //_System_ReturnObject(第一または第二パラメータのダミーを作成)
    343343        sprintf(temporary+lstrlen(temporary),"%c%c0,",1,ESC_BYVAL);
     
    378378
    379379
    380     if(psi->ReturnType==DEF_OBJECT){
     380    if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false){
    381381        //////////////////////////////////////////////////////
    382382        // 戻り値にオブジェクト インスタンスを持つ場合
  • BasicCompiler64/Compile_ProcOp.cpp

    r34 r40  
    461461        else temp=psi->name;
    462462
    463         if(psi->ReturnType==DEF_OBJECT){
     463        if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false){
    464464            //戻り値用オブジェクトのコンストラクタを呼び出す
    465465            if(psi->u.Return_pobj_c->ConstructorMemberSubIndex!=-1){
     
    470470        else{
    471471            //戻り値用の変数の定義
    472             sprintf(temporary,"%s%c%c",temp,1,ESC_AS);
     472            if( psi->isReturnRef ){
     473                sprintf(temporary,"%c%c",1,ESC_BYREF);
     474            }
     475            else temporary[0]=0;
     476
     477            sprintf(temporary+lstrlen(temporary),"%s%c%c",temp,1,ESC_AS);
    473478            GetTypeName(psi->ReturnType,psi->u.ReturnIndex,temporary+lstrlen(temporary));
     479
    474480            OpcodeDim(temporary,0);
    475481        }
     
    568574            else offset=0;
    569575            for(i3=0;i3<pobj_CompilingClass->iMemberNum;i3++){
     576                CMember *pMember = pobj_CompilingClass->ppobj_Member[i3];
    570577                MemberTypeSize=
    571                     GetTypeSize(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type,
    572                         pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.lpIndex);
     578                    GetTypeSize(pMember->TypeInfo.type,
     579                        pMember->TypeInfo.u.lpIndex);
    573580
    574581                MemberObjectNum=
    575                     JumpSubScripts(pobj_CompilingClass->ppobj_Member[i3]->SubScripts);
    576 
    577                 offset=GetSizeOfClassMember(pobj_CompilingClass,pobj_CompilingClass->ppobj_Member[i3]->name,NULL);
    578 
    579                 if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type==DEF_OBJECT){
    580                     if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex!=-1){
    581                         i5=pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex;
    582                         if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi->RealParmNum==1){    //Thisポインタを第一引数に持ち合わせるため、引数なしの場合はこの値が1になる
     582                    JumpSubScripts(pMember->SubScripts);
     583
     584                offset=GetSizeOfClassMember(pobj_CompilingClass,pMember->name,NULL);
     585
     586                if(pMember->TypeInfo.type==DEF_OBJECT && pMember->IsRef() == false){
     587                    if(pMember->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex!=-1){
     588                        i5=pMember->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex;
     589                        if(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi->RealParmNum==1){  //Thisポインタを第一引数に持ち合わせるため、引数なしの場合はこの値が1になる
    583590                            for(i4=0;i4<MemberObjectNum;i4++){
    584591                                //Thisポインタをrcxにコピー
     
    589596
    590597                                //call constructor
    591                                 op_call(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
     598                                op_call(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
    592599                            }
    593600                        }
     
    672679            int MemberObjectNum;
    673680            for(i3=pobj_CompilingClass->iMemberNum-1;i3>=0;i3--){
     681                CMember *pMember = pobj_CompilingClass->ppobj_Member[i3];
    674682                MemberTypeSize=
    675                     GetTypeSize(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type,
    676                         pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.lpIndex);
     683                    GetTypeSize(pMember->TypeInfo.type,
     684                        pMember->TypeInfo.u.lpIndex);
    677685
    678686                MemberObjectNum=
    679                     JumpSubScripts(pobj_CompilingClass->ppobj_Member[i3]->SubScripts);
    680 
    681                 offset=GetSizeOfClassMember(pobj_CompilingClass,pobj_CompilingClass->ppobj_Member[i3]->name,NULL);
    682 
    683                 if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type==DEF_OBJECT){
    684                     if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->DestructorMemberSubIndex!=-1){
     687                    JumpSubScripts(pMember->SubScripts);
     688
     689                offset=GetSizeOfClassMember(pobj_CompilingClass,pMember->name,NULL);
     690
     691                if(pMember->TypeInfo.type==DEF_OBJECT && pMember->IsRef() == false){
     692                    if(pMember->TypeInfo.u.pobj_Class->DestructorMemberSubIndex!=-1){
    685693                        for(i4=MemberObjectNum-1;i4>=0;i4--){
    686694                            //Thisポインタをrcxにコピー
     
    691699
    692700                            //call destructor
    693                             i5=pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->DestructorMemberSubIndex;
    694                             op_call(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
     701                            i5=pMember->TypeInfo.u.pobj_Class->DestructorMemberSubIndex;
     702                            op_call(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
    695703                        }
    696704                    }
  • BasicCompiler64/Compile_Set_Var.cpp

    r36 r40  
    179179        }
    180180    }
    181     else if(pRelative->dwKind==VAR_REFLOCAL){
     181    else if( pRelative->dwKind == VAR_REFLOCAL ){
    182182        if(pRelative->bOffsetOffset){
    183183            //add r11,qword ptr[rsp+offset]
     
    267267        }
    268268    }
    269     else if(pRelative->dwKind==VAR_REFLOCAL){
     269    else if( pRelative->dwKind == VAR_REFLOCAL ){
    270270        if(pRelative->bOffsetOffset){
    271271            //add r11,qword ptr[rsp+offset]
     
    383383        }
    384384    }
    385     else if(pRelative->dwKind==VAR_REFLOCAL){
     385    else if( pRelative->dwKind == VAR_REFLOCAL ){
    386386        if(pRelative->bOffsetOffset){
    387387            //add r11,qword ptr[rsp+offset]
  • BasicCompiler64/Compile_Statement.cpp

    r36 r40  
    959959            else temp=pCompilingSubInfo->name;
    960960
    961             char temporary[VN_SIZE];
    962             sprintf(temporary,"%s=%s",temp,Parameter);
    963             OpcodeCalc(temporary);
     961            if( pCompilingSubInfo->isReturnRef ){
     962                //参照型
     963                SetRefVariable( temp, Parameter );
     964            }
     965            else{
     966                //値型
     967                char temporary[VN_SIZE];
     968                sprintf(temporary,"%s=%s",temp,Parameter);
     969                OpcodeCalc(temporary);
     970            }
    964971        }
    965972
  • BasicCompiler64/Compile_Var.cpp

    r36 r40  
    206206    }
    207207
     208    CMember *pMember=pobj_c->ppobj_Member[i];
     209
    208210
    209211    //アクセシビリティをチェック
    210212    if(pobj_c==pobj_CompilingClass){
    211213        //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    212         if(pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
     214        if(pMember->dwAccess==ACCESS_NON){
    213215            if(isErrorEnabled) SetError(107,VarName,cp);
    214216            return 0;
     
    216218    }
    217219    else{
    218         if((bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PRIVATE)||
    219             pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
     220        if((bPrivateAccess==0&&pMember->dwAccess==ACCESS_PRIVATE)||
     221            pMember->dwAccess==ACCESS_NON){
    220222            if(isErrorEnabled) SetError(107,VarName,cp);
    221223            return 0;
    222224        }
    223         else if(bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PROTECTED){
     225        else if(bPrivateAccess==0&&pMember->dwAccess==ACCESS_PROTECTED){
    224226            if(isErrorEnabled) SetError(108,VarName,cp);
    225227            return 0;
     
    229231    //Const定義の場合は書き込みアクセスを制限する
    230232    //※コンストラクタをコンパイル中の場合は例外的に許可する
    231     if( pobj_c->ppobj_Member[i]->IsConst() &&       //定数メンバである
     233    if( pMember->IsConst() &&       //定数メンバである
    232234        isWriteAccess &&                            //書き込みアクセスを要求されている
    233235        pobj_c->IsCompilingConstructor() == false   //コンストラクタ コンパイル中を除く
     
    237239    }
    238240
    239     *pType=pobj_c->ppobj_Member[i]->TypeInfo.type;
    240     *plpNestIndex=pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex;
     241    *pType=pMember->TypeInfo.type;
     242    *plpNestIndex=pMember->TypeInfo.u.lpIndex;
    241243
    242244    //ポインタ変数の場合
    243245    if(IsPtrType(*pType)){
    244         if(pobj_c->ppobj_Member[i]->SubScripts[0]==-1){
     246        if(pMember->SubScripts[0]==-1){
    245247            lstrcpy(lpPtrOffset,array);
    246248            array[0]=0;
     
    265267    if(array[0]){
    266268        //配列オフセット
    267         if(!GetArrayOffset(pobj_c->ppobj_Member[i]->SubScripts,array,*pType,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex)){
     269        if(!GetArrayOffset(pMember->SubScripts,array,*pType,pMember->TypeInfo.u.lpIndex)){
    268270            if(isErrorEnabled) SetError(14,member,cp);
    269271        }
    270272    }
    271     else if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
     273    else if(pMember->SubScripts[0]!=-1){
    272274        *pType|=FLAG_PTR;
    273275    }
     
    276278        //入れ子構造の場合
    277279
    278         if(*pType==DEF_OBJECT){
     280        if(*pType==DEF_OBJECT && pMember->IsRef() == false){
    279281            if(RefType!=DEF_OBJECT){
    280282                if(isErrorEnabled) SetError(104,member,cp);
     
    282284            }
    283285        }
    284         else if(*pType==DEF_PTR_OBJECT){
     286        else if(*pType==DEF_PTR_OBJECT || ( *pType==DEF_OBJECT && pMember->IsRef() )){
    285287            //構造体ポインタ型メンバ変数
    286288
    287289            if(lpPtrOffset[0]){
    288290                //pObj[n].member
    289                 if(RefType!=DEF_OBJECT){
     291                if(*pType==DEF_PTR_OBJECT&&RefType!=DEF_OBJECT){
    290292                    if(isErrorEnabled) SetError(104,member,cp);
    291293                    return 0;
     
    300302            else{
    301303                //pObj->member
    302                 if(RefType!=DEF_PTR_OBJECT){
     304                if(*pType==DEF_PTR_OBJECT&&RefType!=DEF_PTR_OBJECT){
    303305                    if(isErrorEnabled) SetError(104,member,cp);
    304306                    return 0;
     
    347349            isErrorEnabled,
    348350            isWriteAccess,
    349             pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
     351            pMember->TypeInfo.u.pobj_Class,
    350352            NestMember,
    351353            pType,
     
    383385    SetReg_WholeVariable(DEF_PTR_VOID,&RelativeVar,reg);
    384386}
    385 BOOL GetVarOffset(bool isErrorEnabled,bool isWriteAccess,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
     387BOOL GetVarOffset(bool isErrorEnabled,bool isWriteAccess,const char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
    386388    extern BOOL bCompilingGlobal;
    387389    int i,RefType;
     
    432434            pRelativeVar->offset=-LocalVar[i].offset;
    433435            pRelativeVar->bOffsetOffset=0;
    434             if(LocalVar[i].fRef) pRelativeVar->dwKind=VAR_REFLOCAL;
     436            if(LocalVar[i].fRef){
     437                // 参照型
     438                pRelativeVar->dwKind = VAR_REFLOCAL;
     439            }
    435440            else pRelativeVar->dwKind=VAR_LOCAL;
    436441            *pType=LocalVar[i].type;
     
    10451050
    10461051
    1047 void dim(char *Parameter,DWORD dwFlag){
     1052void dim(char *Parameter,DWORD dwFlags){
    10481053    extern BOOL bCompilingGlobal;
    10491054    extern HANDLE hHeap;
     
    10511056    char VarName[VN_SIZE];
    10521057
    1053 
    1054     if(dwFlag & DIMFLAG_CONST){
     1058    //参照型かどうか
     1059    bool isRef = false;
     1060
     1061    i2 = 0;
     1062
     1063    if( Parameter[i2] == 1 && Parameter[i2+1] == ESC_BYREF ){
     1064        //参照型
     1065        isRef = true;
     1066        Parameter += 2;
     1067    }
     1068
     1069    if(dwFlags & DIMFLAG_CONST){
     1070
    10551071        //////////////////////////////////
    10561072        // 定数変数の場合を考慮
    10571073        //////////////////////////////////
    1058         for(i2=0;;i2++){
     1074        for(;;i2++){
    10591075            if(Parameter[i2] == '=' ||
    10601076                Parameter[i2] == 1 && Parameter[i2] == ESC_AS ||
     
    10831099    char InitBuf[8192];
    10841100    char ConstractParameter[VN_SIZE];
    1085     if(!GetDimentionFormat(Parameter,VarName,SubScripts,&TypeInfo,InitBuf,ConstractParameter))
     1101    if(!GetDimentionFormat(Parameter, isRef , VarName,SubScripts,&TypeInfo,InitBuf,ConstractParameter))
    10861102        return;
    10871103
     
    11041120    TypeSize=GetTypeSize(TypeInfo.type,TypeInfo.u.lpIndex);
    11051121
    1106     if(dwFlag&DIMFLAG_STATIC){
     1122    if(dwFlags&DIMFLAG_STATIC){
    11071123        if(bCompilingGlobal){
    11081124            SetError(60,NULL,cp);
     
    11181134        GetNowStaticVarFullName(VarName,temporary);
    11191135
    1120         AddGlobalVariable(temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlag);
     1136        AddGlobalVariable(temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
    11211137
    11221138        /*
     
    11311147            /////////////////////////
    11321148
    1133             AddGlobalVariable(VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlag);
     1149            AddGlobalVariable(VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
    11341150        }
    11351151        else{
     
    11491165
    11501166            LocalVar=(VARIABLE *)HeapReAlloc(hHeap,0,LocalVar,(MaxLocalVarNum+1)*sizeof(VARIABLE));
     1167            VARIABLE *pVar = &LocalVar[MaxLocalVarNum];
     1168            MaxLocalVarNum++;
     1169
     1170            if( isRef ){
     1171                //参照型
     1172                pVar->fRef = REF_VARIABLE;
     1173                TypeSize = PTR_SIZE;
     1174            }
     1175            else pVar->fRef=0;
    11511176
    11521177            for(i2=1,i3=0;i3<255;i3++){
    11531178                //配列要素数
    1154                 LocalVar[MaxLocalVarNum].SubScripts[i3]=SubScripts[i3];
     1179                pVar->SubScripts[i3]=SubScripts[i3];
    11551180
    11561181                if(SubScripts[i3]==-1) break;
     
    11601185            if(VarSize%8) VarSize+=8-(VarSize%8);
    11611186
    1162             VARIABLE *pVar = &LocalVar[MaxLocalVarNum];
    1163 
    1164             MaxLocalVarNum++;
    1165 
    11661187            //変数データを追加
    11671188            lstrcpy(pVar->name,VarName);
    1168             pVar->fRef=0;
    1169             if(dwFlag & DIMFLAG_CONST) pVar->bConst = true;
     1189            if(dwFlags & DIMFLAG_CONST) pVar->bConst = true;
    11701190            else pVar->bConst = false;
    11711191            if(SubScripts[0]==-1) pVar->bArray=0;
     
    11941214                if(!result){
    11951215                    //動的な式だった場合は代入演算を行う
    1196                     char temporary[8192];
    1197                     sprintf(temporary,"%s=%s",VarName,InitBuf);
    1198                     OpcodeCalc(temporary);
     1216                    if( isRef ){
     1217                        SetRefVariable( VarName, InitBuf );
     1218                    }
     1219                    else{
     1220                        char temporary[8192];
     1221                        sprintf(temporary,"%s=%s",VarName,InitBuf);
     1222                        OpcodeCalc(temporary);
     1223                    }
    11991224                }
    12001225
     
    12271252
    12281253        //コンストラクタ呼び出し
    1229         if(TypeInfo.type==DEF_OBJECT&&(dwFlag&DIMFLAG_NONCALL_CONSTRACTOR)==0){
     1254        if(TypeInfo.type==DEF_OBJECT&&(dwFlags&DIMFLAG_NONCALL_CONSTRACTOR)==0&& isRef == false ){
    12301255            CallConstractor(VarName,SubScripts,TypeInfo,ConstractParameter);
    12311256        }
     
    12391264    }
    12401265}
    1241 void OpcodeDim(char *Parameter,DWORD dwFlag){
     1266void OpcodeDim(char *Parameter,DWORD dwFlags){
    12421267    int i,i2,i3,IsStr=0;
    12431268    char temporary[8192];
     
    12611286            temporary[i2]=0;
    12621287
    1263             dim(temporary,dwFlag);
     1288            dim(temporary,dwFlags);
    12641289
    12651290            if(Parameter[i]=='\0') break;
     
    13221347        }
    13231348    }
    1324     else if(pRelativeVar->dwKind==VAR_REFLOCAL){
     1349    else if( pRelativeVar->dwKind == VAR_REFLOCAL ){
    13251350        if(pRelativeVar->bOffsetOffset){
    13261351            //add r11,qword ptr[rsp+offset]
  • BasicCompiler64/Opcode.h

    r38 r40  
    5252
    5353//変数の種類
    54 #define NON_VAR         0
    55 #define VAR_GLOBAL      1   //Global Variable
    56 #define VAR_LOCAL       2   //Local Variable
    57 #define VAR_REFLOCAL    3   //Local Refference Variable
    58 #define VAR_DIRECTMEM   4   //Direct memory
     54#define NON_VAR             0
     55#define VAR_GLOBAL          1   //Global Variable
     56#define VAR_LOCAL           2   //Local Variable
     57#define VAR_REFLOCAL        3   //Local Refference Variable
     58#define VAR_DIRECTMEM       5   //Direct memory
     59
    5960
    6061extern int cp;
     
    245246void SetVariableFromRax(int VarType,int CalcType,RELATIVE_VAR *pRelativeVar);
    246247void OpcodeCalc(char *Command);
     248void SetRefVariable( const char *varname, const char *expression );
    247249
    248250//NumOpe.cpp
     
    310312void GetWithName(char *buffer);
    311313void SetThisPtrToReg(int reg);
    312 BOOL GetVarOffset(bool isErrorEnabled,bool isWriteAccess,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
     314BOOL GetVarOffset(bool isErrorEnabled,bool isWriteAccess,const char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
    313315BOOL SetInitGlobalData(int offset,int type,LONG_PTR lpIndex,int *SubScripts,char *InitBuf);
    314 #define DIMFLAG_INITDEBUGVAR            1
    315 #define DIMFLAG_NONCALL_CONSTRACTOR     2
    316 #define DIMFLAG_STATIC                  4
    317 #define DIMFLAG_CONST                   8
     316#define DIMFLAG_INITDEBUGVAR            0x01
     317#define DIMFLAG_NONCALL_CONSTRACTOR     0x02
     318#define DIMFLAG_STATIC                  0x04
     319#define DIMFLAG_CONST                   0x08
    318320void OpcodeDim(char *Parameter,DWORD dwFlag);
    319321void SetVarPtrToReg(int reg,RELATIVE_VAR *pRelativeVar);
  • BasicCompiler64/WatchList.cpp

    r3 r40  
    2424        return pobj_dti->lplpSpBase[i2]+pRelativeVar->offset;
    2525    }
    26     else if(pRelativeVar->dwKind==VAR_REFLOCAL){
     26    else if( pRelativeVar->dwKind == VAR_REFLOCAL ){
    2727        extern HWND hDebugWnd;
    2828        i2=(int)SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
Note: See TracChangeset for help on using the changeset viewer.