Index: /BasicCompiler32/Compile_Var.cpp
===================================================================
--- /BasicCompiler32/Compile_Var.cpp	(revision 105)
+++ /BasicCompiler32/Compile_Var.cpp	(revision 106)
@@ -352,5 +352,5 @@
 bool GetVarOffset(bool isErrorEnabled,bool isWriteAccess,const char *NameBuffer,RELATIVE_VAR *pRelativeVar,Type &resultType,int *pss){
 	int i;
-	char variable[VN_SIZE],member[VN_SIZE],VarName[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
+	char variable[VN_SIZE];
 
 	if(NameBuffer[0]=='.'){
@@ -360,41 +360,21 @@
 	else lstrcpy(variable,NameBuffer);
 
+	// 名前空間を分離
+	char namespaceStr[VN_SIZE]="", simpleName[VN_SIZE];
+	Smoothie::Meta::namespaceScopesCollection.SplitNamespace( variable, namespaceStr, simpleName );
+
+	// 先頭オブジェクトまたはクラス名と入れ子メンバに分割
 	CClass::RefType refType;
-	if( FormatUseProcReturnObject( variable, VarName, array, refType, member ) ){
-		// 戻り値オブジェクトのメンバを直接参照しているとき
-		//例: func().member
-
-		void *pInfo;
-		int idProc=GetProc(VarName,(void **)&pInfo);
-
-		if(idProc){
-			pRelativeVar->dwKind=VAR_DIRECTMEM;
-
-			Type type;
-
-
-			////////////////
-			// 呼び出し
-			////////////////
-
-			CallProc(idProc,pInfo,VarName,array,type);
-
-			//戻り値をecxにコピー
-			op_mov_RR( REG_ECX, REG_EAX );
-
-
-			if(!_member_offset(
-				isErrorEnabled,
-				isWriteAccess,
-				type.GetClass(),
-				member,pRelativeVar,resultType,0)) return false;
-
-			return true;
-		}
-	}
-
-
-	lstrcpy(VarName,variable);
-	GetVarFormatString(VarName,array,lpPtrOffset,member,refType);
+	char member[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
+	GetVarFormatString(simpleName,array,lpPtrOffset,member,refType);
+
+	// 名前空間を分離していた場合は結合
+	char VarName[VN_SIZE];
+	if( namespaceStr[0] ){
+		sprintf( VarName, "%s.%s", namespaceStr, simpleName );
+	}
+	else{
+		lstrcpy( VarName, simpleName );
+	}
 
 	const int *pSubScripts;
Index: /BasicCompiler32/NumOpe.cpp
===================================================================
--- /BasicCompiler32/NumOpe.cpp	(revision 105)
+++ /BasicCompiler32/NumOpe.cpp	(revision 106)
@@ -272,4 +272,5 @@
 		return TermMemberOpe( leftType.GetClass(), baseType, resultType, termFull, termLeft, member );
 	}
+globalArea:
 
 
@@ -289,5 +290,4 @@
 	// グローバル属性エリア
 	/////////////////////////////////////////////////////////////////
-globalArea:
 
 	const int useReg = REG_EAX;
Index: /BasicCompiler64/Compile_Var.cpp
===================================================================
--- /BasicCompiler64/Compile_Var.cpp	(revision 105)
+++ /BasicCompiler64/Compile_Var.cpp	(revision 106)
@@ -388,54 +388,21 @@
 	else lstrcpy(variable,NameBuffer);
 
+	// 名前空間を分離
+	char namespaceStr[VN_SIZE]="", simpleName[VN_SIZE];
+	Smoothie::Meta::namespaceScopesCollection.SplitNamespace( variable, namespaceStr, simpleName );
+
+	// 先頭オブジェクトまたはクラス名と入れ子メンバに分割
 	CClass::RefType refType;
-	if( FormatUseProcReturnObject( variable, VarName, array, refType, member ) ){
-		// 戻り値オブジェクトのメンバを直接参照しているとき
-		//例: func().member
-
-		// TODO: 消す
-		SetError();
-		return false;
-		/*
-		void *pInfo;
-		int idProc=GetProc(VarName,(void **)&pInfo);
-
-		if(idProc){
-			pRelativeVar->dwKind=VAR_DIRECTMEM;
-
-			Type type;
-
-			//////////////////////////////////////////////////////
-			/////    レジスタ資源のバックアップ
-			{	BACKUP_REGISTER_RESOURCE
-			//////////////////////////////////////////////////////
-
-				////////////////
-				// 呼び出し
-				////////////////
-
-				CallProc(idProc,pInfo,VarName,array,type);
-
-				//戻り値をr11にコピー
-				op_mov_RR( REG_R11, REG_RAX );
-
-			/////////////////////////////////////////////
-			//////   レジスタ資源を復元
-				RESTORE_REGISTER_RESOURCE
-			}////////////////////////////////////////////
-
-			if(!_member_offset(
-				isErrorEnabled,
-				isWriteAccess,
-				type.GetClass(),
-				member,pRelativeVar,resultType,0)) return false;
-
-			return true;
-		}*/
-	}
-
-
-
-	lstrcpy(VarName,variable);
-	GetVarFormatString(VarName,array,lpPtrOffset,member,refType);
+	char member[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
+	GetVarFormatString(simpleName,array,lpPtrOffset,member,refType);
+
+	// 名前空間を分離していた場合は結合
+	char VarName[VN_SIZE];
+	if( namespaceStr[0] ){
+		sprintf( VarName, "%s.%s", namespaceStr, simpleName );
+	}
+	else{
+		lstrcpy( VarName, simpleName );
+	}
 
 	const int *pSubScripts;
Index: /BasicCompiler_Common/Class.cpp
===================================================================
--- /BasicCompiler_Common/Class.cpp	(revision 105)
+++ /BasicCompiler_Common/Class.cpp	(revision 106)
@@ -91,11 +91,13 @@
 
 	while(pobj_DBClass->Iterator_HasNext()){
-		CClass *pobj_c;
-		pobj_c=pobj_DBClass->Iterator_GetNext();
+		CClass &objClass = *pobj_DBClass->Iterator_GetNext();
+
+		// 名前空間をセット
+		Smoothie::Lexical::liveingNamespaceScopes = objClass.GetNamespaceScopes();
 
 		int i=0;
-		foreach( CMember *member, pobj_c->staticMembers ){
+		foreach( CMember *member, objClass.staticMembers ){
 			char temporary[VN_SIZE];
-			sprintf(temporary,"%s.%s",pobj_c->name,member->name);
+			sprintf(temporary,"%s.%s",objClass.name,member->name);
 			dim(
 				temporary,
@@ -112,4 +114,6 @@
 		}
 	}
+
+	Smoothie::Lexical::liveingNamespaceScopes.clear();
 
 	cp=back_cp;
Index: /BasicCompiler_Common/VariableOpe.cpp
===================================================================
--- /BasicCompiler_Common/VariableOpe.cpp	(revision 105)
+++ /BasicCompiler_Common/VariableOpe.cpp	(revision 106)
@@ -249,4 +249,5 @@
 }
 
+/*TODO: 消す
 bool FormatUseProcReturnObject( const char *term, char *procName, char *parameter, CClass::RefType &refType, char *member ){
 	int p1 = 0, p2 = 0;
@@ -294,5 +295,5 @@
 
 	return true;
-}
+}*/
 
 BOOL GetVarFormatString(char *buffer,char *array,char *array2,char *NestMember,CClass::RefType &refType){
@@ -632,5 +633,5 @@
 bool GetVarType( const char *nameBuffer, Type &resultType, bool isErrorEnabled){
 	int i;
-	char variable[VN_SIZE],member[VN_SIZE],VarName[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
+	char variable[VN_SIZE];
 
 	if(nameBuffer[0]=='.'){
@@ -640,27 +641,21 @@
 	else lstrcpy(variable,nameBuffer);
 
-
+	// 名前空間を分離
+	char namespaceStr[VN_SIZE]="", simpleName[VN_SIZE];
+	Smoothie::Meta::namespaceScopesCollection.SplitNamespace( variable, namespaceStr, simpleName );
+
+	// 先頭オブジェクトまたはクラス名と入れ子メンバに分割
 	CClass::RefType refType;
-	if( FormatUseProcReturnObject( variable, VarName, array, refType, member ) ){
-		// 戻り値オブジェクトのメンバを直接参照しているとき
-		//例: func().member
-
-		void *pProc;
-		int idProc=GetProc(VarName,(void **)&pProc);
-
-		if(idProc){
-			Type type;
-			if( !CallProc( idProc, pProc, VarName, array,type, false) ){
-				return false;
-			}
-
-			return GetMemberType( type.GetClass() ,member,resultType,1,isErrorEnabled);
-		}
-	}
-
-
-
-	lstrcpy(VarName,variable);
-	GetVarFormatString(VarName,array,lpPtrOffset,member,refType);
+	char member[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
+	GetVarFormatString(simpleName,array,lpPtrOffset,member,refType);
+
+	// 名前空間を分離していた場合は結合
+	char VarName[VN_SIZE];
+	if( namespaceStr[0] ){
+		sprintf( VarName, "%s.%s", namespaceStr, simpleName );
+	}
+	else{
+		lstrcpy( VarName, simpleName );
+	}
 
 	const Variable *pVar = NULL;
Index: /BasicCompiler_Common/VariableOpe.h
===================================================================
--- /BasicCompiler_Common/VariableOpe.h	(revision 105)
+++ /BasicCompiler_Common/VariableOpe.h	(revision 106)
@@ -15,5 +15,4 @@
 BOOL GetTypeName(int type,LONG_PTR lpIndex,char *name);
 void GetWithName(char *buffer);
-bool FormatUseProcReturnObject( const char *term, char *procName, char *parameter, CClass::RefType &refType, char *member );
 BOOL GetVarFormatString(char *buffer,char *array,char *array2,char *NestMember, CClass::RefType &refType );
 void GetArrayElement( const char *buffer,char *variable,char *array_element);
