Index: /BasicCompiler32/BasicCompiler.vcproj
===================================================================
--- /BasicCompiler32/BasicCompiler.vcproj	(revision 27)
+++ /BasicCompiler32/BasicCompiler.vcproj	(revision 28)
@@ -154,5 +154,5 @@
 				ObjectFile=".\Release/"
 				ProgramDataBaseFileName=".\Release/"
-				BrowseInformation="2"
+				BrowseInformation="0"
 				BrowseInformationFile=".\Release/"
 				WarningLevel="3"
Index: /BasicCompiler32/CParameter.cpp
===================================================================
--- /BasicCompiler32/CParameter.cpp	(revision 27)
+++ /BasicCompiler32/CParameter.cpp	(revision 28)
@@ -215,4 +215,7 @@
 	SUBINFO *psi;
 	psi=0;
+	if(lstrcmp(name,"Abs")==0){
+		MessageBeep(0);
+	}
 	for(i=0;i<num;i++){
 		psi=ppsi[i];
@@ -550,4 +553,9 @@
 	}
 
+	//戻り値用の変数名を取得
+	char *lpszVarNameToReturn;
+	if(FuncName[0]==1&&FuncName[1]==ESC_OPERATOR) lpszVarNameToReturn="_System_ReturnValue";
+	else lpszVarNameToReturn=FuncName;
+
 	//パラメータをレジスタとスタックに格納
 	int CalcType;
@@ -567,5 +575,5 @@
 		}
 		if((i2==0||i2==1)&&ppi[i2].name){
-			if(lstrcmp(ppi[i2].name,FuncName)==0){
+			if(lstrcmp(ppi[i2].name,lpszVarNameToReturn)==0){
 				//オブジェクトメンバの第一または第二パラメータの戻り値用オブジェクト
 				continue;
Index: /BasicCompiler32/Compile_Calc.cpp
===================================================================
--- /BasicCompiler32/Compile_Calc.cpp	(revision 27)
+++ /BasicCompiler32/Compile_Calc.cpp	(revision 28)
@@ -484,6 +484,4 @@
 	}
 
-
-
 	////////////////////////////////////////
 	// 変数のタイプ型を識別して、演算を行う
Index: /BasicCompiler32/Compile_CallProc.cpp
===================================================================
--- /BasicCompiler32/Compile_CallProc.cpp	(revision 27)
+++ /BasicCompiler32/Compile_CallProc.cpp	(revision 28)
@@ -48,5 +48,5 @@
 		char ObjectName[VN_SIZE];
 		int RefType;
-		GetObjectName(name,ObjectName,&RefType);
+		SplitObjectName(name,ObjectName,&RefType);
 
 
@@ -112,5 +112,5 @@
 	char ObjectName[VN_SIZE];
 	int RefType;
-	GetObjectName(VarName,ObjectName,&RefType);
+	SplitObjectName(VarName,ObjectName,&RefType);
 
 	//オーバーロード用の関数リストを作成
Index: /BasicCompiler32/Compile_Func.cpp
===================================================================
--- /BasicCompiler32/Compile_Func.cpp	(revision 27)
+++ /BasicCompiler32/Compile_Func.cpp	(revision 28)
@@ -288,5 +288,5 @@
 		char ObjectName[VN_SIZE];
 		int RefType;
-		GetObjectName(name,ObjectName,&RefType);
+		SplitObjectName(name,ObjectName,&RefType);
 
 		if(ObjectName[0]){
Index: /BasicCompiler32/Compile_Object.cpp
===================================================================
--- /BasicCompiler32/Compile_Object.cpp	(revision 27)
+++ /BasicCompiler32/Compile_Object.cpp	(revision 28)
@@ -131,5 +131,5 @@
 	pobj_c=(CClass *)*plpIndex;
 
-	if(pobj_c->IsHoldAbstractFunction()){
+	if(pobj_c->IsAbstract()){
 		//抽象クラスだったとき
 		SetError(125,pobj_c->name,cp);
Index: /BasicCompiler32/Compile_ProcOp.cpp
===================================================================
--- /BasicCompiler32/Compile_ProcOp.cpp	(revision 27)
+++ /BasicCompiler32/Compile_ProcOp.cpp	(revision 28)
@@ -554,20 +554,20 @@
 			//仮想関数テーブルを初期化
 			if(pobj_CompilingClass->vtbl_num&&
-				pobj_CompilingClass->IsHoldAbstractFunction()==0){
-				//関数テーブルに値をセット
-				offset=pobj_CompilingClass->GetVtblGlobalOffset();
-
-				//mov eax,offset
-				OpBuffer[obp++]=(char)0xB8;
-				*((long *)(OpBuffer+obp))=offset;
-				pobj_DataTableSchedule->add();
-				obp+=sizeof(long);
-
-				//Thisポインタをecxにコピー
-				SetThisPtrToReg(REG_ECX);
-
-				//mov dword ptr[ecx],eax
-				OpBuffer[obp++]=(char)0x89;
-				OpBuffer[obp++]=(char)0x01;
+				pobj_CompilingClass->IsAbstract()==false){
+					//関数テーブルに値をセット
+					offset=pobj_CompilingClass->GetVtblGlobalOffset();
+
+					//mov eax,offset
+					OpBuffer[obp++]=(char)0xB8;
+					*((long *)(OpBuffer+obp))=offset;
+					pobj_DataTableSchedule->add();
+					obp+=sizeof(long);
+
+					//Thisポインタをecxにコピー
+					SetThisPtrToReg(REG_ECX);
+
+					//mov dword ptr[ecx],eax
+					OpBuffer[obp++]=(char)0x89;
+					OpBuffer[obp++]=(char)0x01;
 			}
 		}
Index: /BasicCompiler32/Compile_Set_Var.cpp
===================================================================
--- /BasicCompiler32/Compile_Set_Var.cpp	(revision 27)
+++ /BasicCompiler32/Compile_Set_Var.cpp	(revision 28)
@@ -34,42 +34,50 @@
 	}
 
-	if(CalcType==DEF_OBJECT&&lpVarIndex==lpCalcIndex){
-		//双方のオブジェクト型が完全に一致したとき
-		//※コピーを行う
-
-		int object_size;
-		object_size=GetSizeOfClass((CClass *)lpVarIndex);
-
-		//mov ecx,object_size
-		op_mov_RV(REG_ECX,object_size);
-
-		//pop esi
-		op_pop(REG_ESI);
-
-		//pop edi
-		op_pop(REG_EDI);
-
-		if(bUseHeap){
-			//mov eax,esi
-			op_mov_RR(REG_EAX,REG_ESI);
-		}
-
-		//rep movs byte ptr[edi],byte ptr[esi]
-		op_rep_movs(sizeof(BYTE));
-
-		if(bUseHeap){
-			//push eax
-			op_push(REG_EAX);
-
-			//call free
-			extern SUBINFO *pSub_free;
-			op_call(pSub_free);
-		}
-
-		return;
-	}
-	else{
-		SetError(1,NULL,cp);
-	}
+
+	if( CalcType == DEF_OBJECT ){
+		CClass *pVarClass = (CClass *)lpVarIndex;
+		CClass *pCalcClass = (CClass *)lpCalcIndex;
+
+
+		if( pVarClass->IsEquals( pCalcClass )			//等しい
+			|| pVarClass->IsSubClass( pCalcClass ) ){	//派生・継承関係
+
+				//双方のオブジェクト型が一致、または派生・継承関係にあるとき
+				//※コピーを行う
+
+				int object_size;
+				object_size=GetSizeOfClass((CClass *)lpVarIndex);
+
+				//mov ecx,object_size
+				op_mov_RV(REG_ECX,object_size);
+
+				//pop esi
+				op_pop(REG_ESI);
+
+				//pop edi
+				op_pop(REG_EDI);
+
+				if(bUseHeap){
+					//mov eax,esi
+					op_mov_RR(REG_EAX,REG_ESI);
+				}
+
+				//rep movs byte ptr[edi],byte ptr[esi]
+				op_rep_movs(sizeof(BYTE));
+
+				if(bUseHeap){
+					//push eax
+					op_push(REG_EAX);
+
+					//call free
+					extern SUBINFO *pSub_free;
+					op_call(pSub_free);
+				}
+
+				return;
+		}
+	}
+
+	SetError(1,NULL,cp);
 }
 
Index: /BasicCompiler32/Compile_Var.cpp
===================================================================
--- /BasicCompiler32/Compile_Var.cpp	(revision 27)
+++ /BasicCompiler32/Compile_Var.cpp	(revision 28)
@@ -1254,5 +1254,5 @@
 
 	if(TypeInfo.type==DEF_OBJECT){
-		if(TypeInfo.u.pobj_Class->IsHoldAbstractFunction()){
+		if(TypeInfo.u.pobj_Class->IsAbstract()){
 			//抽象クラスだったとき
 			SetError(125,TypeInfo.u.pobj_Class->name,cp);
Index: /BasicCompiler64/CParameter.cpp
===================================================================
--- /BasicCompiler64/CParameter.cpp	(revision 27)
+++ /BasicCompiler64/CParameter.cpp	(revision 28)
@@ -546,4 +546,9 @@
 	}
 
+	//戻り値用の変数名を取得
+	char *lpszVarNameToReturn;
+	if(FuncName[0]==1&&FuncName[1]==ESC_OPERATOR) lpszVarNameToReturn="_System_ReturnValue";
+	else lpszVarNameToReturn=FuncName;
+
 	//パラメータをレジスタとスタックに格納
 	int CalcType;
@@ -563,5 +568,5 @@
 		}
 		if((i2==0||i2==1)&&ppi[i2].name){
-			if(lstrcmp(ppi[i2].name,FuncName)==0){
+			if(lstrcmp(ppi[i2].name,lpszVarNameToReturn)==0){
 				//オブジェクトメンバの第一または第二パラメータの戻り値用オブジェクト
 				continue;
Index: /BasicCompiler64/Compile_CallProc.cpp
===================================================================
--- /BasicCompiler64/Compile_CallProc.cpp	(revision 27)
+++ /BasicCompiler64/Compile_CallProc.cpp	(revision 28)
@@ -49,5 +49,5 @@
 		char ObjectName[VN_SIZE];
 		int RefType;
-		GetObjectName(name,ObjectName,&RefType);
+		SplitObjectName(name,ObjectName,&RefType);
 
 
@@ -113,5 +113,5 @@
 	char ObjectName[VN_SIZE];
 	int RefType;
-	GetObjectName(VarName,ObjectName,&RefType);
+	SplitObjectName(VarName,ObjectName,&RefType);
 
 	//オーバーロード用の関数リストを作成
Index: /BasicCompiler64/Compile_Func.cpp
===================================================================
--- /BasicCompiler64/Compile_Func.cpp	(revision 27)
+++ /BasicCompiler64/Compile_Func.cpp	(revision 28)
@@ -140,5 +140,5 @@
 		char ObjectName[VN_SIZE];
 		int RefType;
-		GetObjectName(name,ObjectName,&RefType);
+		SplitObjectName(name,ObjectName,&RefType);
 
 		if(ObjectName[0]){
Index: /BasicCompiler64/Compile_Object.cpp
===================================================================
--- /BasicCompiler64/Compile_Object.cpp	(revision 27)
+++ /BasicCompiler64/Compile_Object.cpp	(revision 28)
@@ -131,5 +131,5 @@
 	pobj_c=(CClass *)*plpIndex;
 
-	if(pobj_c->IsHoldAbstractFunction()){
+	if(pobj_c->IsAbstract()){
 		//抽象クラスだったとき
 		SetError(125,pobj_c->name,cp);
Index: /BasicCompiler64/Compile_ProcOp.cpp
===================================================================
--- /BasicCompiler64/Compile_ProcOp.cpp	(revision 27)
+++ /BasicCompiler64/Compile_ProcOp.cpp	(revision 28)
@@ -600,19 +600,19 @@
 			//仮想関数テーブルを初期化
 			if(pobj_CompilingClass->vtbl_num&&
-				pobj_CompilingClass->IsHoldAbstractFunction()==0){
-				//関数テーブルに値をセット
-				offset=(int)pobj_CompilingClass->GetVtblGlobalOffset();
-
-				//mov rax,offset
-				op_mov_RV(sizeof(_int64),REG_RAX,offset);
-				obp-=sizeof(long);
-				pobj_DataTableSchedule->add();
-				obp+=sizeof(long);
-
-				//Thisポインタをrcxにコピー
-				SetThisPtrToReg(REG_RCX);
-
-				//mov qword ptr[rcx],rax
-				op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
+				pobj_CompilingClass->IsAbstract()==false){
+					//関数テーブルに値をセット
+					offset=(int)pobj_CompilingClass->GetVtblGlobalOffset();
+
+					//mov rax,offset
+					op_mov_RV(sizeof(_int64),REG_RAX,offset);
+					obp-=sizeof(long);
+					pobj_DataTableSchedule->add();
+					obp+=sizeof(long);
+
+					//Thisポインタをrcxにコピー
+					SetThisPtrToReg(REG_RCX);
+
+					//mov qword ptr[rcx],rax
+					op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
 			}
 		}
Index: /BasicCompiler64/Compile_Set_Var.cpp
===================================================================
--- /BasicCompiler64/Compile_Set_Var.cpp	(revision 27)
+++ /BasicCompiler64/Compile_Set_Var.cpp	(revision 28)
@@ -77,43 +77,47 @@
 
 
-//TODO: 継承・派生関係にある場合は許容する
-	if(CalcType==DEF_OBJECT&&lpVarIndex==lpCalcIndex){
-		//双方のオブジェクト型が完全に一致したとき
-		//※コピーを行う
-
-		//mov rsi,RightTermReg
-		op_mov_RR(REG_RSI,RightTermReg);
-
-		//mov rdi,VarReg
-		op_mov_RR(REG_RDI,VarReg);
-
-		int object_size;
-		object_size=GetSizeOfClass((CClass *)lpVarIndex);
-
-		//mov rcx,object_size
-		op_mov_RV(sizeof(_int64),REG_RCX,object_size);
-
-		if(bUseHeap){
-			//mov rax,rsi
-			op_mov_RR(REG_RAX,REG_RSI);
-		}
-
-		//rep movs byte ptr[rdi],byte ptr[rsi]
-		op_rep_movs(sizeof(BYTE));
-
-		if(bUseHeap){
-			//mov rcx,rax
-			op_mov_RR(REG_RCX,REG_RAX);
-
-			//call free
-			extern SUBINFO *pSub_free;
-			op_call(pSub_free);
-		}
-
-		return;
-	}
-	else{
-		SetError(1,NULL,cp);
-	}
+	if( CalcType == DEF_OBJECT ){
+		CClass *pVarClass = (CClass *)lpVarIndex;
+		CClass *pCalcClass = (CClass *)lpCalcIndex;
+
+		if( pVarClass->IsEquals( pCalcClass )			//等しい
+			|| pVarClass->IsSubClass( pCalcClass ) ){	//派生・継承関係
+
+				//双方のオブジェクト型が一致、または派生・継承関係にあるとき
+				//※コピーを行う
+
+				//mov rsi,RightTermReg
+				op_mov_RR(REG_RSI,RightTermReg);
+
+				//mov rdi,VarReg
+				op_mov_RR(REG_RDI,VarReg);
+
+				int object_size = GetSizeOfClass((CClass *)lpVarIndex);
+
+				//mov rcx,object_size
+				op_mov_RV(sizeof(_int64),REG_RCX,object_size);
+
+				if(bUseHeap){
+					//mov rax,rsi
+					op_mov_RR(REG_RAX,REG_RSI);
+				}
+
+				//rep movs byte ptr[rdi],byte ptr[rsi]
+				op_rep_movs(sizeof(BYTE));
+
+				if(bUseHeap){
+					//mov rcx,rax
+					op_mov_RR(REG_RCX,REG_RAX);
+
+					//call free
+					extern SUBINFO *pSub_free;
+					op_call(pSub_free);
+				}
+
+				return;
+		}
+	}
+
+	SetError(1,NULL,cp);
 }
 
Index: /BasicCompiler64/Compile_Var.cpp
===================================================================
--- /BasicCompiler64/Compile_Var.cpp	(revision 27)
+++ /BasicCompiler64/Compile_Var.cpp	(revision 28)
@@ -1229,5 +1229,5 @@
 
 	if(TypeInfo.type==DEF_OBJECT){
-		if(TypeInfo.u.pobj_Class->IsHoldAbstractFunction()){
+		if(TypeInfo.u.pobj_Class->IsAbstract()){
 			//抽象クラスだったとき
 			SetError(125,TypeInfo.u.pobj_Class->name,cp);
Index: /BasicCompiler_Common/Class.cpp
===================================================================
--- /BasicCompiler_Common/Class.cpp	(revision 27)
+++ /BasicCompiler_Common/Class.cpp	(revision 28)
@@ -25,15 +25,13 @@
 	char init_buf[VN_SIZE];
 	char constract_parameter[VN_SIZE];
-	if(!GetDimentionFormat(buffer,VarName,SubScripts,&TypeInfo,init_buf,constract_parameter))
-		return;
+	GetDimentionFormat(buffer,VarName,SubScripts,&TypeInfo,init_buf,constract_parameter);
 
 	//重複チェック
 	if(pobj_c->DupliCheckAll(VarName)){
 		SetError(15,VarName,cp);
-		return;
 	}
 
 	if(TypeInfo.type==DEF_OBJECT){
-		if(TypeInfo.u.pobj_Class->IsHoldAbstractFunction()){
+		if(TypeInfo.u.pobj_Class->IsAbstract()){
 			//抽象クラスだったとき
 			SetError(125,TypeInfo.u.pobj_Class->name,cp);
@@ -303,5 +301,5 @@
 		if( psi == ppobj_StaticMethod[i]->psi ) break;
 	}
-	if( i == iMethodNum ){
+	if( i == iStaticMethodNum ){
 		return NULL;
 	}
@@ -326,5 +324,12 @@
 }
 LONG_PTR CClass::GetVtblGlobalOffset(void){
+
+	//既に存在する場合はそれを返す
 	if(vtbl_offset!=-1) return vtbl_offset;
+
+
+	//////////////////////////////////////
+	// 存在しないときは新たに生成する
+	//////////////////////////////////////
 
 	SUBINFO **ppsi;
@@ -332,23 +337,16 @@
 
 	//関数テーブルに値をセット
-	int i,i2,i3=0;
-	for(i=0;i < iMethodNum;i++){
+	for( int i=0, i2=0; i < iMethodNum; i++ ){
 		if(ppobj_Method[i]->bVirtual){
-			for(i2=iMethodNum-1; i2>=i; i2--){
-				if(lstrcmp(ppobj_Method[i]->psi->name,ppobj_Method[i2]->psi->name)==0){
-					pobj_CompilingClass->ppobj_Method[i2]->psi->bUse=1;
-
-					if(ppobj_Method[i2]->bAbstract){
-						extern int cp;
-						SetError(300,NULL,cp);
-
-						ppsi[i3]=0;
-					}
-					else ppsi[i3]=pobj_CompilingClass->ppobj_Method[i2]->psi;
-					i3++;
-
-					break;
-				}
-			}
+			ppobj_Method[i]->psi->bUse=1;
+
+			if(ppobj_Method[i]->bAbstract){
+				extern int cp;
+				SetError(300,NULL,cp);
+
+				ppsi[i2]=0;
+			}
+			else ppsi[i2]=ppobj_Method[i]->psi;
+			i2++;
 		}
 	}
@@ -356,5 +354,5 @@
 	vtbl_offset=AddDataTable((char *)ppsi,vtbl_num*sizeof(LONG_PTR));
 
-	for(i=0;i<vtbl_num;i++){
+	for( int i=0; i < vtbl_num; i++ ){
 		pobj_Reloc->AddSchedule_DataSection(vtbl_offset+i*sizeof(LONG_PTR));
 	}
@@ -379,19 +377,11 @@
 	}
 }
-BOOL CClass::IsHoldAbstractFunction(void){
+bool CClass::IsAbstract(){
 	//未実装の仮想関数を持つ場合は1を返す
 
-	int i,i2,i3=0;
-	for(i=0;i < iMethodNum;i++){
+	for( int i=0; i < iMethodNum; i++ ){
 		if(ppobj_Method[i]->bVirtual){
-			for(i2=iMethodNum-1; i2>=i; i2--){
-				if(lstrcmp(ppobj_Method[i]->psi->name,ppobj_Method[i2]->psi->name)==0){
-
-					if(ppobj_Method[i2]->bAbstract){
-						return 1;
-					}
-
-					break;
-				}
+			if(ppobj_Method[i]->bAbstract){
+				return true;
 			}
 		}
@@ -399,12 +389,12 @@
 
 	//コンポジションの関係にあるメンバも検査する
-	for(i=0;i < iMemberNum;i++){
+	for(int i=0;i < iMemberNum;i++){
 		if(ppobj_Member[i]->TypeInfo.type==DEF_OBJECT){
-			if(ppobj_Member[i]->TypeInfo.u.pobj_Class->IsHoldAbstractFunction())
-				return 1;
-		}
-	}
-
-	return 0;
+			if(ppobj_Member[i]->TypeInfo.u.pobj_Class->IsAbstract())
+				return true;
+		}
+	}
+
+	return false;
 }
 
@@ -460,4 +450,22 @@
 	return isCompilingDestructor;
 }
+
+
+//自身と等しいクラスかどうかを確認
+bool CClass::IsEquals( CClass *pClass ){
+	if( this == pClass ) return true;
+	return false;
+}
+
+//自身の派生クラスかどうかを確認
+bool CClass::IsSubClass( CClass *pClass ){
+	pClass = pClass->pobj_InheritsClass;
+	while( pClass ){
+		if( this == pClass ) return true;
+		pClass = pClass->pobj_InheritsClass;
+	}
+	return false;
+}
+
 
 
Index: /BasicCompiler_Common/Class.h
===================================================================
--- /BasicCompiler_Common/Class.h	(revision 27)
+++ /BasicCompiler_Common/Class.h	(revision 28)
@@ -103,6 +103,9 @@
 	BOOL DupliCheckMember(char *name);
 
+	//メソッド取得
 	CMethod *GetMethodInfo( SUBINFO *psi );
 	CMethod *GetStaticMethodInfo( SUBINFO *psi );
+
+	//メソッドの存在を確認
 	bool IsExistMethod( char *name );
 	bool IsExistStaticMethod( char *name );
@@ -116,5 +119,5 @@
 	LONG_PTR GetVtblGlobalOffset(void); 
 	void ActionVtblSchedule(LONG_PTR ImageBase, LONG_PTR MemPos_CodeSection);
-	BOOL IsHoldAbstractFunction(void);
+	bool IsAbstract();
 
 
@@ -138,4 +141,11 @@
 	void NotifyFinishDestructorCompile();
 	bool IsCompilingDestructor();
+
+
+	//自身と等しいクラスかどうかを確認
+	bool IsEquals( CClass *pClass );
+
+	//自身の派生クラスかどうかを確認
+	bool IsSubClass( CClass *pClass );
 
 
Index: /BasicCompiler_Common/Overload.cpp
===================================================================
--- /BasicCompiler_Common/Overload.cpp	(revision 27)
+++ /BasicCompiler_Common/Overload.cpp	(revision 28)
@@ -20,11 +20,16 @@
 	CParameter *pobj_parameter=0;
 
-	BOOL bStatic=0;
-	if(ObjectName[0]){
-		if(pobj_DBClass->check(ObjectName)) bStatic=1;
+	char MethodName[VN_SIZE];
+	if( !SplitMemberName( name, NULL, MethodName ) ) lstrcpy( MethodName, name );
+
+	//メソッドの場合は静的かどうかを調べる
+	bool isStatic = false;
+	CClass *pClass = ppsi[0]->pobj_ParentClass;
+	if( pClass ){
+		isStatic = pClass->IsExistStaticMethod( MethodName );
 	}
 
 	char temporary[VN_SIZE];
-	if((ObjectName[0]||ppsi[0]->pobj_ParentClass)&&bStatic==0){
+	if((ObjectName[0]||ppsi[0]->pobj_ParentClass) && isStatic == false ){
 		//Thisポインタ（第一パラメータ）のダミーを作成
 		if(Parameter[0]) sprintf(temporary,"0%c%cVoidPtr,%s",1,ESC_AS,Parameter);
Index: /BasicCompiler_Common/Subroutine.cpp
===================================================================
--- /BasicCompiler_Common/Subroutine.cpp	(revision 27)
+++ /BasicCompiler_Common/Subroutine.cpp	(revision 28)
@@ -64,5 +64,5 @@
 }
 
-void GetObjectName(char *name,char *ObjectName,int *pRefType){
+void SplitObjectName(char *name,char *ObjectName,int *pRefType){
 	int i4;
 	for(i4=lstrlen(name)-1;i4>=0;i4--){
@@ -83,4 +83,25 @@
 	}
 }
+bool SplitMemberName( const char *desc, char *object, char *member ){
+	int i;
+	for(i=lstrlen(desc)-1;i>=0;i--){
+		if(desc[i]=='.'||(desc[i]==1&&desc[i+1]==ESC_PSMEM))
+			break;
+	}
+	if(i==-1) return false;
+	else{
+		if(desc[i]=='.')
+			lstrcpy(member,desc+i+1);
+		else
+			lstrcpy(member,desc+i+2);
+
+		if( object ){
+			lstrcpy( object, desc );
+			object[i]=0;
+		}
+	}
+
+	return true;
+}
 int GetReturnTypeOfProc(int idProc,void *pInfo,char *name,char *Parameter,LONG_PTR *plpRetIndex){
 	int ret_type;
@@ -101,5 +122,5 @@
 		char ObjectName[VN_SIZE];
 		int RefType;
-		GetObjectName(name,ObjectName,&RefType);
+		SplitObjectName(name,ObjectName,&RefType);
 
 
@@ -168,5 +189,5 @@
 	char ObjectName[VN_SIZE];
 	int RefType;
-	GetObjectName(VarName,ObjectName,&RefType);
+	SplitObjectName(VarName,ObjectName,&RefType);
 
 	//オーバーロード用の関数リストを作成
Index: /BasicCompiler_Common/common.h
===================================================================
--- /BasicCompiler_Common/common.h	(revision 27)
+++ /BasicCompiler_Common/common.h	(revision 28)
@@ -545,5 +545,6 @@
 int GetCallProcName(char *buffer,char *name);
 int GetProc(char *name,void **ppInfo);
-void GetObjectName(char *name,char *ObjectName,int *pRefType);
+void SplitObjectName(char *name,char *ObjectName,int *pRefType);
+bool SplitMemberName( const char *desc, char *object, char *member );
 int GetReturnTypeOfProc(int idProc,void *pInfo,char *name,char *Parameter,LONG_PTR *plpRetIndex);
 BOOL GetReturnTypeOfPropertyMethod(char *variable,char *RightSide,TYPEINFO *pRetTypeInfo);
Index: /BasicCompiler_Common/error.cpp
===================================================================
--- /BasicCompiler_Common/error.cpp	(revision 27)
+++ /BasicCompiler_Common/error.cpp	(revision 28)
@@ -276,4 +276,10 @@
 		//一般エラーまたは警告
 		i2=0;	//ここにブレークポイントをおく
+
+		if(num>-100){
+			//エラーのみ
+			i2=0;
+		}
+
 	}
 
Index: /BasicCompiler_Common/hash.cpp
===================================================================
--- /BasicCompiler_Common/hash.cpp	(revision 27)
+++ /BasicCompiler_Common/hash.cpp	(revision 28)
@@ -83,5 +83,4 @@
 	int i;
 
-
 	char name[VN_SIZE];
 
@@ -102,21 +101,8 @@
 	char ObjName[VN_SIZE];		//オブジェクト変数
 	char NestMember[VN_SIZE];	//入れ子メンバ
-	BOOL bObjectMember;
-	lstrcpy(ObjName,name);
-	for(i=lstrlen(ObjName)-1;i>=0;i--){
-		if(ObjName[i]=='.'||(ObjName[i]==1&&ObjName[i+1]==ESC_PSMEM))
-			break;
-	}
-	if(i==-1) bObjectMember=0;
-	else{
-		if(ObjName[i]=='.')
-			lstrcpy(NestMember,ObjName+i+1);
-		else
-			lstrcpy(NestMember,ObjName+i+2);
-		ObjName[i]=0;
-		bObjectMember=1;
-	}
-
-	if(bObjectMember){
+	bool isObjectMember = SplitMemberName( name, ObjName, NestMember );
+	if( !isObjectMember ) lstrcpy(ObjName,name);
+
+	if(isObjectMember){
 		//オブジェクトのメンバ関数の場合
 
@@ -129,5 +115,8 @@
 		else{
 			pobj_c=pobj_DBClass->check(ObjName);
-			if( ! pobj_c ){
+			if( pobj_c ){
+				isStatic = true;
+			}
+			else{
 				//"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
 				int type = GetVarType(ObjName,(LONG_PTR *)&pobj_c,0);
@@ -136,19 +125,22 @@
 		}
 
-		// 静的メソッドから取得
-		for(i=0;i<pobj_c->iStaticMethodNum;i++){
-			if(lstrcmp(NestMember,pobj_c->ppobj_StaticMethod[i]->psi->name)==0){
-				ppArray_si[num]=pobj_c->ppobj_StaticMethod[i]->psi;
-				num++;
-			}
-		}
-
-		//動的メソッドから取得
-
-		//※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う
-		for(i=pobj_c->iMethodNum-1;i>=0;i--){
-			if(lstrcmp(NestMember,pobj_c->ppobj_Method[i]->psi->name)==0){
-				ppArray_si[num]=pobj_c->ppobj_Method[i]->psi;
-				num++;
+		if( isStatic ){
+			// 静的メソッドから取得
+			for(i=0;i<pobj_c->iStaticMethodNum;i++){
+				if(lstrcmp(NestMember,pobj_c->ppobj_StaticMethod[i]->psi->name)==0){
+					ppArray_si[num]=pobj_c->ppobj_StaticMethod[i]->psi;
+					num++;
+				}
+			}
+		}
+		else{
+			//動的メソッドから取得
+
+			//※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う
+			for(i=pobj_c->iMethodNum-1;i>=0;i--){
+				if(lstrcmp(NestMember,pobj_c->ppobj_Method[i]->psi->name)==0){
+					ppArray_si[num]=pobj_c->ppobj_Method[i]->psi;
+					num++;
+				}
 			}
 		}
