Index: /BasicCompiler32/Compile_CallProc.cpp
===================================================================
--- /BasicCompiler32/Compile_CallProc.cpp	(revision 28)
+++ /BasicCompiler32/Compile_CallProc.cpp	(revision 29)
@@ -410,8 +410,6 @@
 				SetVarPtrToEax(&RelativeVar);
 
-				//参照タイプが整合しているかをチェック
-				if(i2!=RefType) SetError(104,ObjectName,cp);
-
-				if(i2==DEF_PTR_OBJECT){
+				//参照タイプが "->" の場合
+				if(RefType==DEF_PTR_OBJECT){
 					//mov eax,dword ptr[eax]
 					OpBuffer[obp++]=(char)0x8B;
Index: /BasicCompiler64/Compile_CallProc.cpp
===================================================================
--- /BasicCompiler64/Compile_CallProc.cpp	(revision 28)
+++ /BasicCompiler64/Compile_CallProc.cpp	(revision 29)
@@ -434,8 +434,6 @@
 				SetVarPtrToReg(REG_RCX,&RelativeVar);
 
-				//参照タイプが整合しているかをチェック
-				if(i2!=RefType) SetError(104,ObjectName,cp);
-
-				if(i2==DEF_PTR_OBJECT){
+				//参照タイプが "->" の場合
+				if(RefType==DEF_PTR_OBJECT){
 					//mov rcx,qword ptr[rcx]
 					op_mov_RM(sizeof(_int64),REG_RCX,REG_RCX,0,MOD_BASE);
Index: /BasicCompiler_Common/Class.cpp
===================================================================
--- /BasicCompiler_Common/Class.cpp	(revision 28)
+++ /BasicCompiler_Common/Class.cpp	(revision 29)
@@ -215,4 +215,53 @@
 	}
 }
+void CClass::Inherits( CClass *pInheritsClass ){
+	int i3;
+
+	//メンバをコピー
+	ppobj_Member=(CMember **)HeapReAlloc(
+		hHeap,
+		0,
+		ppobj_Member,
+		pInheritsClass->iMemberNum*sizeof(CMember *));
+	iMemberNum=pInheritsClass->iMemberNum;
+	for(i3=0;i3<pInheritsClass->iMemberNum;i3++){
+		ppobj_Member[i3]=new CMember(pInheritsClass->ppobj_Member[i3]);
+
+		//dwAccess
+		if(pInheritsClass->ppobj_Member[i3]->dwAccess==ACCESS_PRIVATE)
+			ppobj_Member[i3]->dwAccess=ACCESS_NON;
+		else ppobj_Member[i3]->dwAccess=pInheritsClass->ppobj_Member[i3]->dwAccess;
+	}
+
+	//メソッドをコピー
+	ppobj_Method=(CMethod **)HeapReAlloc(
+		hHeap,
+		0,
+		ppobj_Method,
+		pInheritsClass->iMethodNum*sizeof(CMethod *));
+	iMethodNum=pInheritsClass->iMethodNum;
+	for(i3=0;i3<pInheritsClass->iMethodNum;i3++){
+		ppobj_Method[i3]=new CMethod(pInheritsClass->ppobj_Method[i3]);
+
+		//dwAccess
+		if(pInheritsClass->ppobj_Method[i3]->dwAccess==ACCESS_PRIVATE)
+			ppobj_Method[i3]->dwAccess=ACCESS_NON;
+		else ppobj_Method[i3]->dwAccess=pInheritsClass->ppobj_Method[i3]->dwAccess;
+
+		//pobj_Inherits
+		// ※継承元のClassIndexをセット（入れ子継承を考慮する）
+		if(pInheritsClass->ppobj_Method[i3]->pobj_InheritsClass==0)
+			ppobj_Method[i3]->pobj_InheritsClass=pInheritsClass;
+		else
+			ppobj_Method[i3]->pobj_InheritsClass=
+				pInheritsClass->ppobj_Method[i3]->pobj_InheritsClass;
+	}
+
+	//仮想関数の数
+	vtbl_num=pInheritsClass->vtbl_num;
+
+	//継承先のクラスをメンバとして保持する
+	pobj_InheritsClass = pInheritsClass;
+}
 void CClass::AddMember( DWORD dwAccess, bool isConst, char *buffer ){
 	ppobj_Member = (CMember **)HeapReAlloc( hHeap, 0, ppobj_Member, ( iMemberNum + 1 ) * sizeof(CMember *) );
@@ -849,6 +898,6 @@
 
 				//継承元クラスを取得
-				pobj_c->pobj_InheritsClass=check(temporary);
-				if(!pobj_c->pobj_InheritsClass){
+				CClass *pInheritsClass = check(temporary);
+				if( !pInheritsClass ){
 					SetError(106,temporary,i);
 					goto Interface_InheritsError;
@@ -861,5 +910,5 @@
 				}
 
-				if(pobj_c->pobj_InheritsClass->ppobj_Member==0){
+				if( pInheritsClass->ppobj_Member == 0 ){
 					//継承先が読み取られていないとき
 					pobj_LoopRefCheck->add(pobj_c->name);
@@ -868,46 +917,6 @@
 				}
 
-				//メンバ変数をコピー
-				pobj_c->ppobj_Member=(CMember **)HeapReAlloc(
-					hHeap,
-					0,
-					pobj_c->ppobj_Member,
-					pobj_c->pobj_InheritsClass->iMemberNum*sizeof(CMember *));
-				pobj_c->iMemberNum=pobj_c->pobj_InheritsClass->iMemberNum;
-				for(i3=0;i3<pobj_c->pobj_InheritsClass->iMemberNum;i3++){
-					pobj_c->ppobj_Member[i3]=new CMember(pobj_c->pobj_InheritsClass->ppobj_Member[i3]);
-
-					//dwAccess
-					if(pobj_c->pobj_InheritsClass->ppobj_Member[i3]->dwAccess==ACCESS_PRIVATE)
-						pobj_c->ppobj_Member[i3]->dwAccess=ACCESS_NON;
-					else pobj_c->ppobj_Member[i3]->dwAccess=pobj_c->pobj_InheritsClass->ppobj_Member[i3]->dwAccess;
-				}
-
-				//メンバ関数をコピー
-				pobj_c->ppobj_Method=(CMethod **)HeapReAlloc(
-					hHeap,
-					0,
-					pobj_c->ppobj_Method,
-					pobj_c->pobj_InheritsClass->iMethodNum*sizeof(CMethod *));
-				pobj_c->iMethodNum=pobj_c->pobj_InheritsClass->iMethodNum;
-				for(i3=0;i3<pobj_c->pobj_InheritsClass->iMethodNum;i3++){
-					pobj_c->ppobj_Method[i3]=new CMethod(pobj_c->pobj_InheritsClass->ppobj_Method[i3]);
-
-					//dwAccess
-					if(pobj_c->pobj_InheritsClass->ppobj_Method[i3]->dwAccess==ACCESS_PRIVATE)
-						pobj_c->ppobj_Method[i3]->dwAccess=ACCESS_NON;
-					else pobj_c->ppobj_Method[i3]->dwAccess=pobj_c->pobj_InheritsClass->ppobj_Method[i3]->dwAccess;
-
-					//pobj_Inherits
-					// ※継承元のClassIndexをセット（入れ子継承を考慮する）
-					if(pobj_c->pobj_InheritsClass->ppobj_Method[i3]->pobj_InheritsClass==0)
-						pobj_c->ppobj_Method[i3]->pobj_InheritsClass=pobj_c->pobj_InheritsClass;
-					else
-						pobj_c->ppobj_Method[i3]->pobj_InheritsClass=
-							pobj_c->pobj_InheritsClass->ppobj_Method[i3]->pobj_InheritsClass;
-				}
-
-				//仮想関数の数
-				pobj_c->vtbl_num=pobj_c->pobj_InheritsClass->vtbl_num;
+				//継承させる
+				pobj_c->Inherits( pInheritsClass );
 			}
 			else{
@@ -1039,22 +1048,35 @@
 			else dwAccess=ACCESS_PUBLIC;
 
-			if(basbuf[i+1]==1&&basbuf[i+2]==ESC_INHERITS){
-				//継承を行う場合
-				for(i+=3,i2=0;;i++,i2++){
-					if(IsCommandDelimitation(basbuf[i])){
-						temporary[i2]=0;
-						break;
+			if( lstrcmp( pobj_c->name, "Object" ) == 0 || dwClassType == ESC_TYPE ){
+				//継承無し
+				pobj_c->pobj_InheritsClass=0;
+
+				//仮想関数の数を初期化
+				pobj_c->vtbl_num=0;
+			}
+			else{
+				if(basbuf[i+1]==1&&basbuf[i+2]==ESC_INHERITS){
+					//継承を行う場合
+					for(i+=3,i2=0;;i++,i2++){
+						if(IsCommandDelimitation(basbuf[i])){
+							temporary[i2]=0;
+							break;
+						}
+						temporary[i2]=basbuf[i];
 					}
-					temporary[i2]=basbuf[i];
-				}
-
-				if(lstrcmpi(temporary,pobj_c->name)==0){
-					SetError(105,temporary,i);
-					goto InheritsError;
+
+					if(lstrcmpi(temporary,pobj_c->name)==0){
+						SetError(105,temporary,i);
+						goto InheritsError;
+					}
+				}
+				else{
+					//Objectを継承する
+					lstrcpy( temporary, "Object" );
 				}
 
 				//継承元クラスを取得
-				pobj_c->pobj_InheritsClass=check(temporary);
-				if(!pobj_c->pobj_InheritsClass){
+				CClass *pInheritsClass = check(temporary);
+				if( !pInheritsClass ){
 					SetError(106,temporary,i);
 					goto InheritsError;
@@ -1067,5 +1089,5 @@
 				}
 
-				if(pobj_c->pobj_InheritsClass->ppobj_Member==0){
+				if( pInheritsClass->ppobj_Member == 0 ){
 					//継承先が読み取られていないとき
 					pobj_LoopRefCheck->add(pobj_c->name);
@@ -1074,53 +1096,6 @@
 				}
 
-				//メンバをコピー
-				pobj_c->ppobj_Member=(CMember **)HeapReAlloc(
-					hHeap,
-					0,
-					pobj_c->ppobj_Member,
-					pobj_c->pobj_InheritsClass->iMemberNum*sizeof(CMember *));
-				pobj_c->iMemberNum=pobj_c->pobj_InheritsClass->iMemberNum;
-				for(i3=0;i3<pobj_c->pobj_InheritsClass->iMemberNum;i3++){
-					pobj_c->ppobj_Member[i3]=new CMember(pobj_c->pobj_InheritsClass->ppobj_Member[i3]);
-
-					//dwAccess
-					if(pobj_c->pobj_InheritsClass->ppobj_Member[i3]->dwAccess==ACCESS_PRIVATE)
-						pobj_c->ppobj_Member[i3]->dwAccess=ACCESS_NON;
-					else pobj_c->ppobj_Member[i3]->dwAccess=pobj_c->pobj_InheritsClass->ppobj_Member[i3]->dwAccess;
-				}
-
-				//メソッドをコピー
-				pobj_c->ppobj_Method=(CMethod **)HeapReAlloc(
-					hHeap,
-					0,
-					pobj_c->ppobj_Method,
-					pobj_c->pobj_InheritsClass->iMethodNum*sizeof(CMethod *));
-				pobj_c->iMethodNum=pobj_c->pobj_InheritsClass->iMethodNum;
-				for(i3=0;i3<pobj_c->pobj_InheritsClass->iMethodNum;i3++){
-					pobj_c->ppobj_Method[i3]=new CMethod(pobj_c->pobj_InheritsClass->ppobj_Method[i3]);
-
-					//dwAccess
-					if(pobj_c->pobj_InheritsClass->ppobj_Method[i3]->dwAccess==ACCESS_PRIVATE)
-						pobj_c->ppobj_Method[i3]->dwAccess=ACCESS_NON;
-					else pobj_c->ppobj_Method[i3]->dwAccess=pobj_c->pobj_InheritsClass->ppobj_Method[i3]->dwAccess;
-
-					//pobj_Inherits
-					// ※継承元のClassIndexをセット（入れ子継承を考慮する）
-					if(pobj_c->pobj_InheritsClass->ppobj_Method[i3]->pobj_InheritsClass==0)
-						pobj_c->ppobj_Method[i3]->pobj_InheritsClass=pobj_c->pobj_InheritsClass;
-					else
-						pobj_c->ppobj_Method[i3]->pobj_InheritsClass=
-							pobj_c->pobj_InheritsClass->ppobj_Method[i3]->pobj_InheritsClass;
-				}
-
-				//仮想関数の数
-				pobj_c->vtbl_num=pobj_c->pobj_InheritsClass->vtbl_num;
-			}
-			else{
-				//継承無し
-				pobj_c->pobj_InheritsClass=0;
-
-				//仮想関数の数を初期化
-				pobj_c->vtbl_num=0;
+				//継承させる
+				pobj_c->Inherits( pInheritsClass );
 			}
 InheritsError:
Index: /BasicCompiler_Common/Class.h
===================================================================
--- /BasicCompiler_Common/Class.h	(revision 28)
+++ /BasicCompiler_Common/Class.h	(revision 29)
@@ -95,4 +95,7 @@
 	~CClass();
 
+	//継承させる
+	void Inherits( CClass *pInheritsClass );
+
 	void AddMember( DWORD dwAccess, bool idConst, char *buffer );
 	void AddStaticMember( DWORD dwAccess, bool isConst, char *buffer, int NowLine );
Index: /BasicCompiler_Common/Enum.cpp
===================================================================
--- /BasicCompiler_Common/Enum.cpp	(revision 28)
+++ /BasicCompiler_Common/Enum.cpp	(revision 29)
@@ -183,5 +183,5 @@
 		}
 
-		sprintf(buffer+length,"\tFunction ToString() As String\n",parent->TypeName);
+		sprintf(buffer+length,"\tOverride Function ToString() As String\n",parent->TypeName);
 		length+=lstrlen(buffer+length);
 		lstrcpy(buffer+length,"\t\tSelect Case m_Value\n");
Index: /BasicCompiler_Common/Object.cpp
===================================================================
--- /BasicCompiler_Common/Object.cpp	(revision 28)
+++ /BasicCompiler_Common/Object.cpp	(revision 29)
@@ -256,4 +256,10 @@
 			extern SUBINFO *pSub_free;
 			op_call(pSub_free);
+
+
+			if(bCompilingGlobal){
+				//ここには来ないハズ
+				SetError(300,NULL,cp);
+			}
 		}
 		else if(pVar[i3].type==DEF_OBJECT&&pVar[i3].fRef==0){
Index: /BasicCompiler_Common/Variable.cpp
===================================================================
--- /BasicCompiler_Common/Variable.cpp	(revision 28)
+++ /BasicCompiler_Common/Variable.cpp	(revision 29)
@@ -1080,4 +1080,5 @@
 
 	lstrcpy(pVar->name,name);
+	pVar->fRef = 0;
 	if(dwFlag & DIMFLAG_CONST) pVar->bConst = true;
 	else pVar->bConst = false;
Index: /BasicCompiler_Common/common.h
===================================================================
--- /BasicCompiler_Common/common.h	(revision 28)
+++ /BasicCompiler_Common/common.h	(revision 29)
@@ -38,7 +38,7 @@
 
 #ifdef _AMD64_
-#define VER_INFO		"β9 (x64)"
+#define VER_INFO		"β10 (x64)"
 #else
-#define VER_INFO		"β9"
+#define VER_INFO		"β10"
 #endif
 
Index: /ProjectEditor/Common.h
===================================================================
--- /ProjectEditor/Common.h	(revision 28)
+++ /ProjectEditor/Common.h	(revision 29)
@@ -62,5 +62,5 @@
 #define APPLICATION_NAME "ActiveBasic 5.0"
 #define VERSION_APPLI_NAME APPLICATION_NAME
-#define VERSION_STRING "5.00.00 β9"
+#define VERSION_STRING "5.00.00 β10"
 
 #endif
