Index: BasicCompiler32/Compile_Calc.cpp
===================================================================
--- BasicCompiler32/Compile_Calc.cpp	(revision 38)
+++ BasicCompiler32/Compile_Calc.cpp	(revision 40)
@@ -600,2 +600,117 @@
 	}
 }
+
+void SetRefVariable( const char *varname, const char *expression ){
+	////////////////////////////////////////
+	// 変数のタイプ型を識別して、演算を行う
+	////////////////////////////////////////
+
+	int VarType,CalcType;
+	LONG_PTR lpVarIndex,lpCalcIndex;
+	RELATIVE_VAR VarRelativeVar;
+	BOOL bCalcUseHeap;
+
+	//型を識別
+	VarType=GetVarType(varname,&lpVarIndex,0);
+	if(VarType==-1){
+		SetError(300,NULL,cp);
+		return;
+	}
+
+	extern LONG_PTR ProcPtr_BaseIndex;
+	if(VarType==DEF_PTR_PROC) ProcPtr_BaseIndex=lpVarIndex;
+	else ProcPtr_BaseIndex=-1;
+
+	if(VarType==DEF_OBJECT){
+		//代入演算のオーバーロード オペレータに備える
+
+		//変数アドレスを取得
+		if(!GetVarOffsetReadWrite(
+			varname,
+			&VarType,
+			&VarRelativeVar,
+			&lpVarIndex)) return;
+
+		SetVarPtrToEax(&VarRelativeVar);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+
+
+	//NumOpe...（スタックに答えが格納される）
+	CalcType=NumOpe(expression,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap);
+	if(VarType==-1||CalcType==-1) return;
+
+	//変数アドレスを取得
+	if(!GetVarOffsetReadWrite(
+		varname,
+		&VarType,
+		&VarRelativeVar,
+		&lpVarIndex)) return;
+
+	if(VarType&FLAG_PTR){
+		SetError(14,varname,cp);
+		return;
+	}
+
+
+	if( VarType == DEF_OBJECT && VarRelativeVar.dwKind == VAR_REFLOCAL ){
+		// 参照型オブジェクトへの代入（初期化）はポインタ変数と同様の処理に値する
+		VarType = PTR_LEVEL_UP( VarType );
+
+		VarRelativeVar.dwKind = VAR_LOCAL;
+
+		if( CalcType == DEF_OBJECT ){
+			//右辺値が実体オブジェクトのときは、参照をコピー
+			CalcType = PTR_LEVEL_UP( DEF_OBJECT );
+		}
+	}
+	else{
+		SetError(300,NULL,cp);
+	}
+
+
+	/////////////////////////////////
+	// 右辺、左辺の型チェックを行う
+	/////////////////////////////////
+
+	CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0);
+
+
+	/////////////////////////////////////////////////
+	// スタックの内容を変数にコピーするコードを抽出
+	/////////////////////////////////////////////////
+
+	if(VarType==DEF_BOOLEAN){
+		//bool
+		SetBooleanVariable(CalcType,&VarRelativeVar);
+	}
+	else if(VarType==DEF_CHAR||VarType==DEF_BYTE){
+		//8ビット整数型変数へスタックの内容を格納する
+		Set8Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+	}
+	else if(VarType==DEF_INTEGER||VarType==DEF_WORD){
+		//16ビット整数型変数へスタックの内容を格納する
+		Set16Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+	}
+	else if(VarType==DEF_LONG||VarType==DEF_DWORD||IsPtrType(VarType)){
+		//32ビット整数型変数へスタックの内容を格納する
+		if(VarType==DEF_LONG)
+			SetLongVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+		else
+			SetDWordVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+	}
+	else if(VarType==DEF_INT64||VarType==DEF_QWORD){
+		//64ビット整数型変数へスタックの内容を格納する
+		SetInt64Variable(CalcType,&VarRelativeVar);
+	}
+	else if(VarType==DEF_DOUBLE){
+		//Double型変数へスタックの内容を格納する
+		SetDoubleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+	}
+	else if(VarType==DEF_SINGLE){
+		//Single型変数へスタックの内容を格納する
+		SetSingleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+	}
+}
Index: BasicCompiler32/Compile_CallProc.cpp
===================================================================
--- BasicCompiler32/Compile_CallProc.cpp	(revision 38)
+++ BasicCompiler32/Compile_CallProc.cpp	(revision 40)
@@ -337,5 +337,5 @@
 	}
 
-	if(psi->ReturnType==DEF_OBJECT){
+	if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false ){
 		//_System_ReturnObject（第一または第二パラメータのダミーを作成）
 		sprintf(temporary+lstrlen(temporary),"%c%c0,",1,ESC_BYVAL);
@@ -375,6 +375,5 @@
 
 
-
-	if(psi->ReturnType==DEF_OBJECT){
+	if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false){
 		//////////////////////////////////////////////////////
 		// 戻り値にオブジェクト インスタンスを持つ場合
Index: BasicCompiler32/Compile_Object.cpp
===================================================================
--- BasicCompiler32/Compile_Object.cpp	(revision 38)
+++ BasicCompiler32/Compile_Object.cpp	(revision 40)
@@ -75,5 +75,5 @@
 	}
 }
-int Operator_New(char *Parameter,LONG_PTR *plpIndex){
+int Operator_New(const char *Parameter,LONG_PTR *plpIndex){
 	char TypeName[VN_SIZE],CreateParameter[VN_SIZE],ObjectSize[VN_SIZE];
 	int i,i2;
Index: BasicCompiler32/Compile_ProcOp.cpp
===================================================================
--- BasicCompiler32/Compile_ProcOp.cpp	(revision 38)
+++ BasicCompiler32/Compile_ProcOp.cpp	(revision 40)
@@ -374,5 +374,5 @@
 		else temp=psi->name;
 
-		if(psi->ReturnType==DEF_OBJECT){
+		if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false){
 			//戻り値用オブジェクトのコンストラクタを呼び出す
 			if(psi->u.Return_pobj_c->ConstructorMemberSubIndex!=-1){
@@ -383,6 +383,12 @@
 		else{
 			//戻り値用の変数の定義
-			sprintf(temporary,"%s%c%c",temp,1,ESC_AS);
+			if( psi->isReturnRef ){
+				sprintf(temporary,"%c%c",1,ESC_BYREF);
+			}
+			else temporary[0]=0;
+
+			sprintf(temporary+lstrlen(temporary),"%s%c%c",temp,1,ESC_AS);
 			GetTypeName(psi->ReturnType,psi->u.ReturnIndex,temporary+lstrlen(temporary));
+
 			OpcodeDim(temporary,0);
 		}
@@ -514,17 +520,19 @@
 			else offset=0;
 			for(i3=0;i3<pobj_CompilingClass->iMemberNum;i3++){
-				offset=GetSizeOfClassMember(pobj_CompilingClass,pobj_CompilingClass->ppobj_Member[i3]->name,NULL);
-
-				if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type==DEF_OBJECT){
-					if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex!=-1){
-						i5=pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex;
-						if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi->RealParmNum==1){	//Thisポインタを第一引数に持ち合わせるため、引数なしの場合はこの値が1になる
+				CMember *pMember = pobj_CompilingClass->ppobj_Member[i3];
+
+				offset=GetSizeOfClassMember(pobj_CompilingClass,pMember->name,NULL);
+
+				if(pMember->TypeInfo.type==DEF_OBJECT){
+					if(pMember->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex!=-1){
+						i5=pMember->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex;
+						if(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi->RealParmNum==1){	//Thisポインタを第一引数に持ち合わせるため、引数なしの場合はこの値が1になる
 
 							MemberTypeSize=
-								GetTypeSize(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type,
-									pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.lpIndex);
+								GetTypeSize(pMember->TypeInfo.type,
+									pMember->TypeInfo.u.lpIndex);
 
 							MemberObjectNum=
-								JumpSubScripts(pobj_CompilingClass->ppobj_Member[i3]->SubScripts);
+								JumpSubScripts(pMember->SubScripts);
 
 							for(i4=0;i4<MemberObjectNum;i4++){
@@ -542,5 +550,5 @@
 
 								//call constructor
-								op_call(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
+								op_call(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
 							}
 						}
@@ -624,15 +632,17 @@
 			offset=GetTypeSize(DEF_OBJECT,(LONG_PTR)pobj_CompilingClass);
 			for(i3=pobj_CompilingClass->iMemberNum-1;i3>=0;i3--){
+				CMember *pMember = pobj_CompilingClass->ppobj_Member[i3];
+
 				MemberTypeSize=
-					GetTypeSize(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type,
-						pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.lpIndex);
+					GetTypeSize(pMember->TypeInfo.type,
+						pMember->TypeInfo.u.lpIndex);
 
 				MemberObjectNum=
-					JumpSubScripts(pobj_CompilingClass->ppobj_Member[i3]->SubScripts);
+					JumpSubScripts(pMember->SubScripts);
 
 				offset-=MemberTypeSize*MemberObjectNum;
 
-				if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type==DEF_OBJECT){
-					if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->DestructorMemberSubIndex!=-1){
+				if(pMember->TypeInfo.type==DEF_OBJECT){
+					if(pMember->TypeInfo.u.pobj_Class->DestructorMemberSubIndex!=-1){
 						for(i4=MemberObjectNum-1;i4>=0;i4--){
 							//Thisポインタをecxにコピー
@@ -649,6 +659,6 @@
 
 							//call destructor
-							i5=pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->DestructorMemberSubIndex;
-							op_call(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
+							i5=pMember->TypeInfo.u.pobj_Class->DestructorMemberSubIndex;
+							op_call(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
 						}
 					}
Index: BasicCompiler32/Compile_Statement.cpp
===================================================================
--- BasicCompiler32/Compile_Statement.cpp	(revision 38)
+++ BasicCompiler32/Compile_Statement.cpp	(revision 40)
@@ -1359,7 +1359,14 @@
 			else temp=pCompilingSubInfo->name;
 
-			char temporary[VN_SIZE];
-			sprintf(temporary,"%s=%s",temp,Parameter);
-			OpcodeCalc(temporary);
+			if( pCompilingSubInfo->isReturnRef ){
+				//参照型
+				SetRefVariable( temp, Parameter );
+			}
+			else{
+				//値型
+				char temporary[VN_SIZE];
+				sprintf(temporary,"%s=%s",temp,Parameter);
+				OpcodeCalc(temporary);
+			}
 		}
 
Index: BasicCompiler32/Compile_Var.cpp
===================================================================
--- BasicCompiler32/Compile_Var.cpp	(revision 38)
+++ BasicCompiler32/Compile_Var.cpp	(revision 40)
@@ -179,8 +179,10 @@
 	}
 
+	CMember *pMember=pobj_c->ppobj_Member[i];
+
 	//アクセシビリティをチェック
 	if(pobj_c==pobj_CompilingClass){
 		//同一クラスオブジェクトの場合はプライベートアクセスを容認する
-		if(pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
+		if(pMember->dwAccess==ACCESS_NON){
 			if(isErrorEnabled) SetError(107,VarName,cp);
 			return 0;
@@ -188,10 +190,10 @@
 	}
 	else{
-		if((bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PRIVATE)||
-			pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
+		if((bPrivateAccess==0&&pMember->dwAccess==ACCESS_PRIVATE)||
+			pMember->dwAccess==ACCESS_NON){
 			if(isErrorEnabled) SetError(107,VarName,cp);
 			return 0;
 		}
-		else if(bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PROTECTED){
+		else if(bPrivateAccess==0&&pMember->dwAccess==ACCESS_PROTECTED){
 			if(isErrorEnabled) SetError(108,VarName,cp);
 			return 0;
@@ -201,5 +203,5 @@
 	//Const定義の場合は書き込みアクセスを制限する
 	//※コンストラクタをコンパイル中の場合は例外的に許可する
-	if( pobj_c->ppobj_Member[i]->IsConst() &&		//定数メンバである
+	if( pMember->IsConst() &&		//定数メンバである
 		isWriteAccess &&							//書き込みアクセスを要求されている
 		pobj_c->IsCompilingConstructor() == false	//コンストラクタ コンパイル中を除く
@@ -209,10 +211,10 @@
 	}
 
-	*pType=pobj_c->ppobj_Member[i]->TypeInfo.type;
-	*plpNestIndex=pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex;
+	*pType=pMember->TypeInfo.type;
+	*plpNestIndex=pMember->TypeInfo.u.lpIndex;
 
 	//ポインタ変数の場合
 	if(IsPtrType(*pType)){
-		if(pobj_c->ppobj_Member[i]->SubScripts[0]==-1){
+		if(pMember->SubScripts[0]==-1){
 			lstrcpy(lpPtrOffset,array);
 			array[0]=0;
@@ -236,8 +238,8 @@
 	if(array[0]){
 		//配列オフセット
-		if(!GetArrayOffset(pobj_c->ppobj_Member[i]->SubScripts,array,*pType,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex))
+		if(!GetArrayOffset(pMember->SubScripts,array,*pType,pMember->TypeInfo.u.lpIndex))
 			if(isErrorEnabled) SetError(14,member,cp);
 	}
-	else if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
+	else if(pMember->SubScripts[0]!=-1){
 		*pType|=FLAG_PTR;
 	}
@@ -320,5 +322,5 @@
 			isErrorEnabled,
 			isWriteAccess,
-			pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
+			pMember->TypeInfo.u.pobj_Class,
 			NestMember,
 			pType,
@@ -357,5 +359,5 @@
 }
 
-BOOL GetVarOffset(bool isErrorEnabled, bool isWriteAccess, char *NameBuffer, int *pType, RELATIVE_VAR *pRelativeVar, LONG_PTR *plpIndex, int *pss){
+BOOL GetVarOffset(bool isErrorEnabled, bool isWriteAccess, const char *NameBuffer, int *pType, RELATIVE_VAR *pRelativeVar, LONG_PTR *plpIndex, int *pss){
 	extern BOOL bCompilingGlobal;
 	int i,RefType;
@@ -907,10 +909,4 @@
 	///////////////////////////////////////
 
-	if( type == DEF_OBJECT){
-		//オブジェクトの場合はありえない
-		SetError(300,NULL,cp);
-		return 0;
-	}
-
 	if(SubScripts[0]!=-1){
 		SetError(41,0,cp);
@@ -1064,5 +1060,5 @@
 }
 
-void dim(char *Parameter,DWORD dwFlag){
+void dim(char *Parameter,DWORD dwFlags){
 	extern BOOL bCompilingGlobal;
 	extern HANDLE hHeap;
@@ -1071,9 +1067,21 @@
 
 
-	if(dwFlag & DIMFLAG_CONST){
+	//参照型かどうか
+	bool isRef = false;
+
+	i2 = 0;
+
+	if( Parameter[i2] == 1 && Parameter[i2+1] == ESC_BYREF ){
+		//参照型
+		isRef = true;
+		Parameter += 2;
+	}
+
+
+	if(dwFlags & DIMFLAG_CONST){
 		//////////////////////////////////
 		// 定数変数の場合を考慮
 		//////////////////////////////////
-		for(i2=0;;i2++){
+		for(;;i2++){
 			if(Parameter[i2] == '=' ||
 				Parameter[i2] == 1 && Parameter[i2] == ESC_AS ||
@@ -1102,5 +1110,5 @@
 	char InitBuf[8192];
 	char ConstractParameter[VN_SIZE];
-	if(!GetDimentionFormat(Parameter,VarName,SubScripts,&TypeInfo,InitBuf,ConstractParameter))
+	if(!GetDimentionFormat(Parameter, isRef, VarName,SubScripts,&TypeInfo,InitBuf,ConstractParameter))
 		return;
 
@@ -1123,5 +1131,5 @@
 	TypeSize=GetTypeSize(TypeInfo.type,TypeInfo.u.lpIndex);
 
-	if(dwFlag&DIMFLAG_STATIC){
+	if(dwFlags&DIMFLAG_STATIC){
 		if(bCompilingGlobal){
 			SetError(60,NULL,cp);
@@ -1137,5 +1145,5 @@
 		GetNowStaticVarFullName(VarName,temporary);
 
-		AddGlobalVariable(temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlag);
+		AddGlobalVariable(temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
 
 		/*
@@ -1150,5 +1158,5 @@
 			/////////////////////////
 
-			AddGlobalVariable(VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlag);
+			AddGlobalVariable(VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
 		}
 		else{
@@ -1168,8 +1176,17 @@
 
 			LocalVar=(VARIABLE *)HeapReAlloc(hHeap,0,LocalVar,(MaxLocalVarNum+1)*sizeof(VARIABLE));
+			VARIABLE *pVar = &LocalVar[MaxLocalVarNum];
+			MaxLocalVarNum++;
+
+			if( isRef ){
+				//参照型
+				pVar->fRef = REF_VARIABLE;
+				TypeSize = PTR_SIZE;
+			}
+			else pVar->fRef=0;
 
 			for(i2=1,i3=0;i3<255;i3++){
 				//配列要素数
-				LocalVar[MaxLocalVarNum].SubScripts[i3]=SubScripts[i3];
+				pVar->SubScripts[i3]=SubScripts[i3];
 
 				if(SubScripts[i3]==-1) break;
@@ -1179,12 +1196,7 @@
 			if(VarSize%4) VarSize+=4-(VarSize%4);
 
-			VARIABLE *pVar = &LocalVar[MaxLocalVarNum];
-
-			MaxLocalVarNum++;
-
 			//変数データを追加
 			lstrcpy(pVar->name,VarName);
-			pVar->fRef=0;
-			if(dwFlag & DIMFLAG_CONST) pVar->bConst = true;
+			if(dwFlags & DIMFLAG_CONST) pVar->bConst = true;
 			else pVar->bConst = false;
 			if(SubScripts[0]==-1) pVar->bArray=0;
@@ -1212,8 +1224,12 @@
 
 				if(!result){
-					//動的な式だった場合は代入演算を行う
-					char temporary[8192];
-					sprintf(temporary,"%s=%s",VarName,InitBuf);
-					OpcodeCalc(temporary);
+					if( isRef ){
+						SetRefVariable( VarName, InitBuf );
+					}
+					else{
+						char temporary[8192];
+						sprintf(temporary,"%s=%s",VarName,InitBuf);
+						OpcodeCalc(temporary);
+					}
 				}
 
@@ -1252,5 +1268,5 @@
 
 		//コンストラクタ呼び出し
-		if(TypeInfo.type==DEF_OBJECT&&(dwFlag&DIMFLAG_NONCALL_CONSTRACTOR)==0){
+		if(TypeInfo.type==DEF_OBJECT&&(dwFlags&DIMFLAG_NONCALL_CONSTRACTOR)==0&& isRef == false ){
 			CallConstractor(VarName,SubScripts,TypeInfo,ConstractParameter);
 		}
@@ -1264,5 +1280,5 @@
 	}
 }
-void OpcodeDim(char *Parameter,DWORD dwFlag){
+void OpcodeDim(char *Parameter,DWORD dwFlags){
 	int i,i2,i3,IsStr=0;
 	char temporary[8192];
@@ -1286,5 +1302,5 @@
 			temporary[i2]=0;
 
-			dim(temporary,dwFlag);
+			dim(temporary,dwFlags);
 
 			if(Parameter[i]=='\0') break;
Index: BasicCompiler32/NumOpe.cpp
===================================================================
--- BasicCompiler32/NumOpe.cpp	(revision 38)
+++ BasicCompiler32/NumOpe.cpp	(revision 40)
@@ -113,5 +113,5 @@
 
 
-int NumOpe(char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap){
+int NumOpe(const char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap){
 	extern HANDLE hHeap;
 	int i,i2,i3,i4;
Index: BasicCompiler32/Opcode.h
===================================================================
--- BasicCompiler32/Opcode.h	(revision 38)
+++ BasicCompiler32/Opcode.h	(revision 40)
@@ -95,8 +95,9 @@
 void ChangeTypeToByte(int OldType);
 void OpcodeCalc(char *Command);
+void SetRefVariable( const char *varname, const char *expression );
 
 //NumOpe.cpp
 void PushReturnValue(int type);
-int NumOpe(char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap=0);
+int NumOpe(const char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap=0);
 
 //NumOpe_Arithmetic.cpp
@@ -167,5 +168,5 @@
 
 //Compile_Object.cpp
-int Operator_New(char *Parameter,LONG_PTR *plpIndex);
+int Operator_New(const char *Parameter,LONG_PTR *plpIndex);
 void OpcodeDelete(char *Parameter);
 
@@ -173,5 +174,5 @@
 void GetWithName(char *buffer);
 void SetThisPtrToReg(int reg);
-BOOL GetVarOffset(bool isErrorEnabled,bool isWriteAccess,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
+BOOL GetVarOffset(bool isErrorEnabled,bool isWriteAccess,const char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
 BOOL SetInitGlobalData(int offset,int type,LONG_PTR lpIndex,int *SubScripts,char *InitBuf);
 #define DIMFLAG_INITDEBUGVAR			1
