Index: trunk/jenga/include/smoothie/Class.h
===================================================================
--- trunk/jenga/include/smoothie/Class.h	(revision 174)
+++ trunk/jenga/include/smoothie/Class.h	(revision 180)
@@ -315,6 +315,10 @@
 	BOOL MemberVar_LoopRefCheck(const CClass &objClass);
 public:
-	void GetAllClassInfo(void);
-	void Compile_System_InitializeUserTypes();
+
+	// 実体収集
+	virtual void CollectClassesForNameOnly( const BasicSource &source ) = 0;
+	virtual void GetAllClassInfo() = 0;
+	virtual void Compile_System_InitializeUserTypes() = 0;
+	virtual void InitStaticMember() = 0;
 
 
Index: trunk/jenga/include/smoothie/Member.h
===================================================================
--- trunk/jenga/include/smoothie/Member.h	(revision 174)
+++ trunk/jenga/include/smoothie/Member.h	(revision 180)
@@ -75,5 +75,4 @@
 	{
 	}
-	static void InitStaticMember(void);
 };
 typedef std::vector<CMember *> Members;
Index: trunk/jenga/include/smoothie/ObjectModule.h
===================================================================
--- trunk/jenga/include/smoothie/ObjectModule.h	(revision 174)
+++ trunk/jenga/include/smoothie/ObjectModule.h	(revision 180)
@@ -8,10 +8,24 @@
 // プロジェクト中に存在するメタ情報
 class Meta{
+	Classes *pClasses;
 public:
+
+	Meta( Classes *pNewClasses )
+		: pClasses( pNewClasses )
+	{
+	}
+	~Meta()
+	{
+		delete pClasses;
+	}
+
 	// 名前空間
 	NamespaceScopesCollection namespaceScopesCollection;
 
 	// クラス
-	Classes classes;
+	Classes &GetClasses()
+	{
+		return *pClasses;
+	}
 
 	// TypeDef
Index: trunk/jenga/src/smoothie/Class.cpp
===================================================================
--- trunk/jenga/src/smoothie/Class.cpp	(revision 174)
+++ trunk/jenga/src/smoothie/Class.cpp	(revision 180)
@@ -140,5 +140,5 @@
 
 		//継承元クラスを取得
-		const CClass *pInheritsClass = Smoothie::meta.classes.Find(temporary);
+		const CClass *pInheritsClass = Smoothie::meta.GetClasses().Find(temporary);
 		if( !pInheritsClass ){
 			throw SmoothieException(106,temporary,nowLine);
@@ -170,5 +170,5 @@
 	if( !isInheritsClass ){
 		// クラスを一つも継承していないとき
-		const CClass *pObjectClass = Smoothie::meta.classes.Find("Object");
+		const CClass *pObjectClass = Smoothie::meta.GetClasses().Find("Object");
 		if( !pObjectClass ){
 			throw SmoothieException(106,"Object",i);
@@ -194,5 +194,5 @@
 
 		//継承元クラスを取得
-		const CClass *pInheritsClass = Smoothie::meta.classes.Find(temporary);
+		const CClass *pInheritsClass = Smoothie::meta.GetClasses().Find(temporary);
 		if( !pInheritsClass ){
 			throw SmoothieException(106,temporary,nowLine);
@@ -234,5 +234,5 @@
 		//継承先が読み取られていないとき
 		pobj_LoopRefCheck->add(this->GetName().c_str());
-		Smoothie::meta.classes.GetClass_recur(inheritsClass.GetName().c_str());
+		Smoothie::meta.GetClasses().GetClass_recur(inheritsClass.GetName().c_str());
 		pobj_LoopRefCheck->del(this->GetName().c_str());
 	}
@@ -296,5 +296,5 @@
 		//継承先が読み取られていないとき
 		pobj_LoopRefCheck->add(this->GetName().c_str());
-		Smoothie::meta.classes.GetClass_recur(inheritsInterface.GetName().c_str());
+		Smoothie::meta.GetClasses().GetClass_recur(inheritsInterface.GetName().c_str());
 		pobj_LoopRefCheck->del(this->GetName().c_str());
 	}
Index: trunk/jenga/src/smoothie/Smoothie.cpp
===================================================================
--- trunk/jenga/src/smoothie/Smoothie.cpp	(revision 174)
+++ trunk/jenga/src/smoothie/Smoothie.cpp	(revision 180)
@@ -4,5 +4,4 @@
 NamespaceScopes Smoothie::Lexical::liveingNamespaceScopes;
 
-Meta Smoothie::meta;
 NamespaceScopesCollection Smoothie::Temp::importedNamespaces;
 const CClass *Smoothie::Temp::pCompilingClass = NULL;
Index: trunk/jenga/src/smoothie/Type.cpp
===================================================================
--- trunk/jenga/src/smoothie/Type.cpp	(revision 174)
+++ trunk/jenga/src/smoothie/Type.cpp	(revision 180)
@@ -93,5 +93,5 @@
 	// Object型だったとき
 	if( typeName == "Object" ){
-		type.SetType( DEF_OBJECT, Smoothie::meta.classes.GetObjectClassPtr() );
+		type.SetType( DEF_OBJECT, Smoothie::meta.GetClasses().GetObjectClassPtr() );
 		return true;
 	}
@@ -99,5 +99,5 @@
 	// String型だったとき
 	if( typeName == "String" ){
-		type.SetType( DEF_OBJECT, Smoothie::meta.classes.GetStringClassPtr() );
+		type.SetType( DEF_OBJECT, Smoothie::meta.GetClasses().GetStringClassPtr() );
 		return true;
 	}
@@ -114,5 +114,5 @@
 
 	//クラス
-	const CClass *pobj_c = Smoothie::meta.classes.Find( typeName );
+	const CClass *pobj_c = Smoothie::meta.GetClasses().Find( typeName );
 	if(pobj_c){
 		type.pClass = pobj_c;
@@ -539,5 +539,5 @@
 
 Type Type::String(){
-	return Type( DEF_OBJECT, *Smoothie::meta.classes.GetStringClassPtr() );
+	return Type( DEF_OBJECT, *Smoothie::meta.GetClasses().GetStringClassPtr() );
 }*/
 
