Changeset 40 in dev for BasicCompiler32


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

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

Location:
BasicCompiler32
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_Calc.cpp

    r36 r40  
    600600    }
    601601}
     602
     603void SetRefVariable( const char *varname, const char *expression ){
     604    ////////////////////////////////////////
     605    // 変数のタイプ型を識別して、演算を行う
     606    ////////////////////////////////////////
     607
     608    int VarType,CalcType;
     609    LONG_PTR lpVarIndex,lpCalcIndex;
     610    RELATIVE_VAR VarRelativeVar;
     611    BOOL bCalcUseHeap;
     612
     613    //型を識別
     614    VarType=GetVarType(varname,&lpVarIndex,0);
     615    if(VarType==-1){
     616        SetError(300,NULL,cp);
     617        return;
     618    }
     619
     620    extern LONG_PTR ProcPtr_BaseIndex;
     621    if(VarType==DEF_PTR_PROC) ProcPtr_BaseIndex=lpVarIndex;
     622    else ProcPtr_BaseIndex=-1;
     623
     624    if(VarType==DEF_OBJECT){
     625        //代入演算のオーバーロード オペレータに備える
     626
     627        //変数アドレスを取得
     628        if(!GetVarOffsetReadWrite(
     629            varname,
     630            &VarType,
     631            &VarRelativeVar,
     632            &lpVarIndex)) return;
     633
     634        SetVarPtrToEax(&VarRelativeVar);
     635
     636        //push eax
     637        op_push(REG_EAX);
     638    }
     639
     640
     641    //NumOpe...(スタックに答えが格納される)
     642    CalcType=NumOpe(expression,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap);
     643    if(VarType==-1||CalcType==-1) return;
     644
     645    //変数アドレスを取得
     646    if(!GetVarOffsetReadWrite(
     647        varname,
     648        &VarType,
     649        &VarRelativeVar,
     650        &lpVarIndex)) return;
     651
     652    if(VarType&FLAG_PTR){
     653        SetError(14,varname,cp);
     654        return;
     655    }
     656
     657
     658    if( VarType == DEF_OBJECT && VarRelativeVar.dwKind == VAR_REFLOCAL ){
     659        // 参照型オブジェクトへの代入(初期化)はポインタ変数と同様の処理に値する
     660        VarType = PTR_LEVEL_UP( VarType );
     661
     662        VarRelativeVar.dwKind = VAR_LOCAL;
     663
     664        if( CalcType == DEF_OBJECT ){
     665            //右辺値が実体オブジェクトのときは、参照をコピー
     666            CalcType = PTR_LEVEL_UP( DEF_OBJECT );
     667        }
     668    }
     669    else{
     670        SetError(300,NULL,cp);
     671    }
     672
     673
     674    /////////////////////////////////
     675    // 右辺、左辺の型チェックを行う
     676    /////////////////////////////////
     677
     678    CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0);
     679
     680
     681    /////////////////////////////////////////////////
     682    // スタックの内容を変数にコピーするコードを抽出
     683    /////////////////////////////////////////////////
     684
     685    if(VarType==DEF_BOOLEAN){
     686        //bool
     687        SetBooleanVariable(CalcType,&VarRelativeVar);
     688    }
     689    else if(VarType==DEF_CHAR||VarType==DEF_BYTE){
     690        //8ビット整数型変数へスタックの内容を格納する
     691        Set8Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
     692    }
     693    else if(VarType==DEF_INTEGER||VarType==DEF_WORD){
     694        //16ビット整数型変数へスタックの内容を格納する
     695        Set16Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
     696    }
     697    else if(VarType==DEF_LONG||VarType==DEF_DWORD||IsPtrType(VarType)){
     698        //32ビット整数型変数へスタックの内容を格納する
     699        if(VarType==DEF_LONG)
     700            SetLongVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
     701        else
     702            SetDWordVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
     703    }
     704    else if(VarType==DEF_INT64||VarType==DEF_QWORD){
     705        //64ビット整数型変数へスタックの内容を格納する
     706        SetInt64Variable(CalcType,&VarRelativeVar);
     707    }
     708    else if(VarType==DEF_DOUBLE){
     709        //Double型変数へスタックの内容を格納する
     710        SetDoubleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
     711    }
     712    else if(VarType==DEF_SINGLE){
     713        //Single型変数へスタックの内容を格納する
     714        SetSingleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
     715    }
     716}
  • BasicCompiler32/Compile_CallProc.cpp

    r31 r40  
    337337    }
    338338
    339     if(psi->ReturnType==DEF_OBJECT){
     339    if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false ){
    340340        //_System_ReturnObject(第一または第二パラメータのダミーを作成)
    341341        sprintf(temporary+lstrlen(temporary),"%c%c0,",1,ESC_BYVAL);
     
    375375
    376376
    377 
    378     if(psi->ReturnType==DEF_OBJECT){
     377    if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false){
    379378        //////////////////////////////////////////////////////
    380379        // 戻り値にオブジェクト インスタンスを持つ場合
  • BasicCompiler32/Compile_Object.cpp

    r31 r40  
    7575    }
    7676}
    77 int Operator_New(char *Parameter,LONG_PTR *plpIndex){
     77int Operator_New(const char *Parameter,LONG_PTR *plpIndex){
    7878    char TypeName[VN_SIZE],CreateParameter[VN_SIZE],ObjectSize[VN_SIZE];
    7979    int i,i2;
  • BasicCompiler32/Compile_ProcOp.cpp

    r36 r40  
    374374        else temp=psi->name;
    375375
    376         if(psi->ReturnType==DEF_OBJECT){
     376        if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false){
    377377            //戻り値用オブジェクトのコンストラクタを呼び出す
    378378            if(psi->u.Return_pobj_c->ConstructorMemberSubIndex!=-1){
     
    383383        else{
    384384            //戻り値用の変数の定義
    385             sprintf(temporary,"%s%c%c",temp,1,ESC_AS);
     385            if( psi->isReturnRef ){
     386                sprintf(temporary,"%c%c",1,ESC_BYREF);
     387            }
     388            else temporary[0]=0;
     389
     390            sprintf(temporary+lstrlen(temporary),"%s%c%c",temp,1,ESC_AS);
    386391            GetTypeName(psi->ReturnType,psi->u.ReturnIndex,temporary+lstrlen(temporary));
     392
    387393            OpcodeDim(temporary,0);
    388394        }
     
    514520            else offset=0;
    515521            for(i3=0;i3<pobj_CompilingClass->iMemberNum;i3++){
    516                 offset=GetSizeOfClassMember(pobj_CompilingClass,pobj_CompilingClass->ppobj_Member[i3]->name,NULL);
    517 
    518                 if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type==DEF_OBJECT){
    519                     if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex!=-1){
    520                         i5=pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex;
    521                         if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi->RealParmNum==1){    //Thisポインタを第一引数に持ち合わせるため、引数なしの場合はこの値が1になる
     522                CMember *pMember = pobj_CompilingClass->ppobj_Member[i3];
     523
     524                offset=GetSizeOfClassMember(pobj_CompilingClass,pMember->name,NULL);
     525
     526                if(pMember->TypeInfo.type==DEF_OBJECT){
     527                    if(pMember->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex!=-1){
     528                        i5=pMember->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex;
     529                        if(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi->RealParmNum==1){  //Thisポインタを第一引数に持ち合わせるため、引数なしの場合はこの値が1になる
    522530
    523531                            MemberTypeSize=
    524                                 GetTypeSize(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type,
    525                                     pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.lpIndex);
     532                                GetTypeSize(pMember->TypeInfo.type,
     533                                    pMember->TypeInfo.u.lpIndex);
    526534
    527535                            MemberObjectNum=
    528                                 JumpSubScripts(pobj_CompilingClass->ppobj_Member[i3]->SubScripts);
     536                                JumpSubScripts(pMember->SubScripts);
    529537
    530538                            for(i4=0;i4<MemberObjectNum;i4++){
     
    542550
    543551                                //call constructor
    544                                 op_call(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
     552                                op_call(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
    545553                            }
    546554                        }
     
    624632            offset=GetTypeSize(DEF_OBJECT,(LONG_PTR)pobj_CompilingClass);
    625633            for(i3=pobj_CompilingClass->iMemberNum-1;i3>=0;i3--){
     634                CMember *pMember = pobj_CompilingClass->ppobj_Member[i3];
     635
    626636                MemberTypeSize=
    627                     GetTypeSize(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type,
    628                         pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.lpIndex);
     637                    GetTypeSize(pMember->TypeInfo.type,
     638                        pMember->TypeInfo.u.lpIndex);
    629639
    630640                MemberObjectNum=
    631                     JumpSubScripts(pobj_CompilingClass->ppobj_Member[i3]->SubScripts);
     641                    JumpSubScripts(pMember->SubScripts);
    632642
    633643                offset-=MemberTypeSize*MemberObjectNum;
    634644
    635                 if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type==DEF_OBJECT){
    636                     if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->DestructorMemberSubIndex!=-1){
     645                if(pMember->TypeInfo.type==DEF_OBJECT){
     646                    if(pMember->TypeInfo.u.pobj_Class->DestructorMemberSubIndex!=-1){
    637647                        for(i4=MemberObjectNum-1;i4>=0;i4--){
    638648                            //Thisポインタをecxにコピー
     
    649659
    650660                            //call destructor
    651                             i5=pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->DestructorMemberSubIndex;
    652                             op_call(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
     661                            i5=pMember->TypeInfo.u.pobj_Class->DestructorMemberSubIndex;
     662                            op_call(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
    653663                        }
    654664                    }
  • BasicCompiler32/Compile_Statement.cpp

    r36 r40  
    13591359            else temp=pCompilingSubInfo->name;
    13601360
    1361             char temporary[VN_SIZE];
    1362             sprintf(temporary,"%s=%s",temp,Parameter);
    1363             OpcodeCalc(temporary);
     1361            if( pCompilingSubInfo->isReturnRef ){
     1362                //参照型
     1363                SetRefVariable( temp, Parameter );
     1364            }
     1365            else{
     1366                //値型
     1367                char temporary[VN_SIZE];
     1368                sprintf(temporary,"%s=%s",temp,Parameter);
     1369                OpcodeCalc(temporary);
     1370            }
    13641371        }
    13651372
  • BasicCompiler32/Compile_Var.cpp

    r36 r40  
    179179    }
    180180
     181    CMember *pMember=pobj_c->ppobj_Member[i];
     182
    181183    //アクセシビリティをチェック
    182184    if(pobj_c==pobj_CompilingClass){
    183185        //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    184         if(pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
     186        if(pMember->dwAccess==ACCESS_NON){
    185187            if(isErrorEnabled) SetError(107,VarName,cp);
    186188            return 0;
     
    188190    }
    189191    else{
    190         if((bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PRIVATE)||
    191             pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
     192        if((bPrivateAccess==0&&pMember->dwAccess==ACCESS_PRIVATE)||
     193            pMember->dwAccess==ACCESS_NON){
    192194            if(isErrorEnabled) SetError(107,VarName,cp);
    193195            return 0;
    194196        }
    195         else if(bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PROTECTED){
     197        else if(bPrivateAccess==0&&pMember->dwAccess==ACCESS_PROTECTED){
    196198            if(isErrorEnabled) SetError(108,VarName,cp);
    197199            return 0;
     
    201203    //Const定義の場合は書き込みアクセスを制限する
    202204    //※コンストラクタをコンパイル中の場合は例外的に許可する
    203     if( pobj_c->ppobj_Member[i]->IsConst() &&       //定数メンバである
     205    if( pMember->IsConst() &&       //定数メンバである
    204206        isWriteAccess &&                            //書き込みアクセスを要求されている
    205207        pobj_c->IsCompilingConstructor() == false   //コンストラクタ コンパイル中を除く
     
    209211    }
    210212
    211     *pType=pobj_c->ppobj_Member[i]->TypeInfo.type;
    212     *plpNestIndex=pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex;
     213    *pType=pMember->TypeInfo.type;
     214    *plpNestIndex=pMember->TypeInfo.u.lpIndex;
    213215
    214216    //ポインタ変数の場合
    215217    if(IsPtrType(*pType)){
    216         if(pobj_c->ppobj_Member[i]->SubScripts[0]==-1){
     218        if(pMember->SubScripts[0]==-1){
    217219            lstrcpy(lpPtrOffset,array);
    218220            array[0]=0;
     
    236238    if(array[0]){
    237239        //配列オフセット
    238         if(!GetArrayOffset(pobj_c->ppobj_Member[i]->SubScripts,array,*pType,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex))
     240        if(!GetArrayOffset(pMember->SubScripts,array,*pType,pMember->TypeInfo.u.lpIndex))
    239241            if(isErrorEnabled) SetError(14,member,cp);
    240242    }
    241     else if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
     243    else if(pMember->SubScripts[0]!=-1){
    242244        *pType|=FLAG_PTR;
    243245    }
     
    320322            isErrorEnabled,
    321323            isWriteAccess,
    322             pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
     324            pMember->TypeInfo.u.pobj_Class,
    323325            NestMember,
    324326            pType,
     
    357359}
    358360
    359 BOOL GetVarOffset(bool isErrorEnabled, bool isWriteAccess, char *NameBuffer, int *pType, RELATIVE_VAR *pRelativeVar, LONG_PTR *plpIndex, int *pss){
     361BOOL GetVarOffset(bool isErrorEnabled, bool isWriteAccess, const char *NameBuffer, int *pType, RELATIVE_VAR *pRelativeVar, LONG_PTR *plpIndex, int *pss){
    360362    extern BOOL bCompilingGlobal;
    361363    int i,RefType;
     
    907909    ///////////////////////////////////////
    908910
    909     if( type == DEF_OBJECT){
    910         //オブジェクトの場合はありえない
    911         SetError(300,NULL,cp);
    912         return 0;
    913     }
    914 
    915911    if(SubScripts[0]!=-1){
    916912        SetError(41,0,cp);
     
    10641060}
    10651061
    1066 void dim(char *Parameter,DWORD dwFlag){
     1062void dim(char *Parameter,DWORD dwFlags){
    10671063    extern BOOL bCompilingGlobal;
    10681064    extern HANDLE hHeap;
     
    10711067
    10721068
    1073     if(dwFlag & DIMFLAG_CONST){
     1069    //参照型かどうか
     1070    bool isRef = false;
     1071
     1072    i2 = 0;
     1073
     1074    if( Parameter[i2] == 1 && Parameter[i2+1] == ESC_BYREF ){
     1075        //参照型
     1076        isRef = true;
     1077        Parameter += 2;
     1078    }
     1079
     1080
     1081    if(dwFlags & DIMFLAG_CONST){
    10741082        //////////////////////////////////
    10751083        // 定数変数の場合を考慮
    10761084        //////////////////////////////////
    1077         for(i2=0;;i2++){
     1085        for(;;i2++){
    10781086            if(Parameter[i2] == '=' ||
    10791087                Parameter[i2] == 1 && Parameter[i2] == ESC_AS ||
     
    11021110    char InitBuf[8192];
    11031111    char ConstractParameter[VN_SIZE];
    1104     if(!GetDimentionFormat(Parameter,VarName,SubScripts,&TypeInfo,InitBuf,ConstractParameter))
     1112    if(!GetDimentionFormat(Parameter, isRef, VarName,SubScripts,&TypeInfo,InitBuf,ConstractParameter))
    11051113        return;
    11061114
     
    11231131    TypeSize=GetTypeSize(TypeInfo.type,TypeInfo.u.lpIndex);
    11241132
    1125     if(dwFlag&DIMFLAG_STATIC){
     1133    if(dwFlags&DIMFLAG_STATIC){
    11261134        if(bCompilingGlobal){
    11271135            SetError(60,NULL,cp);
     
    11371145        GetNowStaticVarFullName(VarName,temporary);
    11381146
    1139         AddGlobalVariable(temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlag);
     1147        AddGlobalVariable(temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
    11401148
    11411149        /*
     
    11501158            /////////////////////////
    11511159
    1152             AddGlobalVariable(VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlag);
     1160            AddGlobalVariable(VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
    11531161        }
    11541162        else{
     
    11681176
    11691177            LocalVar=(VARIABLE *)HeapReAlloc(hHeap,0,LocalVar,(MaxLocalVarNum+1)*sizeof(VARIABLE));
     1178            VARIABLE *pVar = &LocalVar[MaxLocalVarNum];
     1179            MaxLocalVarNum++;
     1180
     1181            if( isRef ){
     1182                //参照型
     1183                pVar->fRef = REF_VARIABLE;
     1184                TypeSize = PTR_SIZE;
     1185            }
     1186            else pVar->fRef=0;
    11701187
    11711188            for(i2=1,i3=0;i3<255;i3++){
    11721189                //配列要素数
    1173                 LocalVar[MaxLocalVarNum].SubScripts[i3]=SubScripts[i3];
     1190                pVar->SubScripts[i3]=SubScripts[i3];
    11741191
    11751192                if(SubScripts[i3]==-1) break;
     
    11791196            if(VarSize%4) VarSize+=4-(VarSize%4);
    11801197
    1181             VARIABLE *pVar = &LocalVar[MaxLocalVarNum];
    1182 
    1183             MaxLocalVarNum++;
    1184 
    11851198            //変数データを追加
    11861199            lstrcpy(pVar->name,VarName);
    1187             pVar->fRef=0;
    1188             if(dwFlag & DIMFLAG_CONST) pVar->bConst = true;
     1200            if(dwFlags & DIMFLAG_CONST) pVar->bConst = true;
    11891201            else pVar->bConst = false;
    11901202            if(SubScripts[0]==-1) pVar->bArray=0;
     
    12121224
    12131225                if(!result){
    1214                     //動的な式だった場合は代入演算を行う
    1215                     char temporary[8192];
    1216                     sprintf(temporary,"%s=%s",VarName,InitBuf);
    1217                     OpcodeCalc(temporary);
     1226                    if( isRef ){
     1227                        SetRefVariable( VarName, InitBuf );
     1228                    }
     1229                    else{
     1230                        char temporary[8192];
     1231                        sprintf(temporary,"%s=%s",VarName,InitBuf);
     1232                        OpcodeCalc(temporary);
     1233                    }
    12181234                }
    12191235
     
    12521268
    12531269        //コンストラクタ呼び出し
    1254         if(TypeInfo.type==DEF_OBJECT&&(dwFlag&DIMFLAG_NONCALL_CONSTRACTOR)==0){
     1270        if(TypeInfo.type==DEF_OBJECT&&(dwFlags&DIMFLAG_NONCALL_CONSTRACTOR)==0&& isRef == false ){
    12551271            CallConstractor(VarName,SubScripts,TypeInfo,ConstractParameter);
    12561272        }
     
    12641280    }
    12651281}
    1266 void OpcodeDim(char *Parameter,DWORD dwFlag){
     1282void OpcodeDim(char *Parameter,DWORD dwFlags){
    12671283    int i,i2,i3,IsStr=0;
    12681284    char temporary[8192];
     
    12861302            temporary[i2]=0;
    12871303
    1288             dim(temporary,dwFlag);
     1304            dim(temporary,dwFlags);
    12891305
    12901306            if(Parameter[i]=='\0') break;
  • BasicCompiler32/NumOpe.cpp

    r38 r40  
    113113
    114114
    115 int NumOpe(char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap){
     115int NumOpe(const char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap){
    116116    extern HANDLE hHeap;
    117117    int i,i2,i3,i4;
  • BasicCompiler32/Opcode.h

    r38 r40  
    9595void ChangeTypeToByte(int OldType);
    9696void OpcodeCalc(char *Command);
     97void SetRefVariable( const char *varname, const char *expression );
    9798
    9899//NumOpe.cpp
    99100void PushReturnValue(int type);
    100 int NumOpe(char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap=0);
     101int NumOpe(const char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap=0);
    101102
    102103//NumOpe_Arithmetic.cpp
     
    167168
    168169//Compile_Object.cpp
    169 int Operator_New(char *Parameter,LONG_PTR *plpIndex);
     170int Operator_New(const char *Parameter,LONG_PTR *plpIndex);
    170171void OpcodeDelete(char *Parameter);
    171172
     
    173174void GetWithName(char *buffer);
    174175void SetThisPtrToReg(int reg);
    175 BOOL GetVarOffset(bool isErrorEnabled,bool isWriteAccess,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
     176BOOL GetVarOffset(bool isErrorEnabled,bool isWriteAccess,const char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
    176177BOOL SetInitGlobalData(int offset,int type,LONG_PTR lpIndex,int *SubScripts,char *InitBuf);
    177178#define DIMFLAG_INITDEBUGVAR            1
Note: See TracChangeset for help on using the changeset viewer.