Index: trunk/jenga/include/smoothie/Class.h
===================================================================
--- trunk/jenga/include/smoothie/Class.h	(revision 180)
+++ trunk/jenga/include/smoothie/Class.h	(revision 181)
@@ -46,14 +46,8 @@
 	};
 
-private:
+protected:
 	ClassType classType;
 
 	bool isReady;
-	void Readed(){
-		isReady = true;
-	}
-	bool IsReady() const{
-		return isReady;
-	}
 
 	// importされている名前空間
@@ -90,4 +84,11 @@
 	CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name );
 	~CClass();
+
+	void Readed(){
+		isReady = true;
+	}
+	bool IsReady() const{
+		return isReady;
+	}
 
 	const NamespaceScopesCollection &GetImportedNamespaces() const
@@ -126,12 +127,14 @@
 	}
 
-	//継承させる
-	bool Inherits( const char *inheritNames, int nowLine );
-	bool InheritsClass( const CClass &inheritsClass, int nowLine );
-	bool InheritsInterface( const CClass &inheritsClass, int nowLine );
-
-	//メンバ、メソッドの追加
-	void AddMember( Prototype::Accessibility accessibility, bool idConst, bool isRef, char *buffer );
-	void AddStaticMember( Prototype::Accessibility accessibility, bool isConst, bool isRef, char *buffer, int nowLine );
+	// 継承させる
+	virtual bool Inherits( const char *inheritNames, int nowLine ) = 0;
+	virtual bool InheritsClass( const CClass &inheritsClass, int nowLine ) = 0;
+	virtual bool InheritsInterface( const CClass &inheritsClass, int nowLine ) = 0;
+
+	virtual void AddMember( Prototype::Accessibility accessibility, bool idConst, bool isRef, char *buffer, int nowLine ) = 0;
+	virtual void AddStaticMember( Prototype::Accessibility accessibility, bool isConst, bool isRef, char *buffer, int nowLine ) = 0;
+
+	virtual void AddMethod(CClass *pobj_c, Prototype::Accessibility accessibility, BOOL bStatic, bool isConst, bool isAbstract,
+		bool isVirtual, bool isOverride, char *buffer, int nowLine) = 0;
 
 	//重複チェック
@@ -173,9 +176,17 @@
 	}
 
-	//デフォルト コンストラクタ メソッドを取得
+	//デフォルト コンストラクタ
 	const CMethod *GetConstructorMethod() const;
+	void SetConstructorMemberSubIndex( int constructorMemberSubIndex )
+	{
+		this->ConstructorMemberSubIndex = constructorMemberSubIndex;
+	}
 
 	//デストラクタ メソッドを取得
 	const CMethod *GetDestructorMethod() const;
+	void SetDestructorMemberSubIndex( int destructorMemberSubIndex )
+	{
+		this->DestructorMemberSubIndex = destructorMemberSubIndex;
+	}
 
 	// vtblに存在する仮想関数の数
@@ -209,10 +220,10 @@
 
 	//vtbl
-private:
+protected:
 	mutable long vtbl_offset;
 public:
 	int GetFuncNumInVtbl( const UserProc *pUserProc ) const;
-	LONG_PTR GetVtblGlobalOffset(void) const;
-	void ActionVtblSchedule(LONG_PTR ImageBase, LONG_PTR MemPos_CodeSection);
+	virtual LONG_PTR GetVtblGlobalOffset(void) const = 0;
+	virtual void ActionVtblSchedule(LONG_PTR ImageBase, LONG_PTR MemPos_CodeSection) = 0;
 	bool IsAbstract() const;
 
@@ -306,16 +317,14 @@
 	const CClass *Find( const NamespaceScopes &namespaceScopes, const string &name ) const;
 
-	CClass *AddClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name,int nowLine);
+	virtual CClass *Create( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name) = 0;
+	CClass *Add( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name,int nowLine);
 
 	void ActionVtblSchedule(LONG_PTR ImageBase, LONG_PTR MemPos_CodeSection);
 
-private:
-	void AddMethod(CClass *pobj_c, Prototype::Accessibility accessibility, BOOL bStatic, bool isConst, bool isAbstract,
-		bool isVirtual, bool isOverride, char *buffer, int nowLine);
-	BOOL MemberVar_LoopRefCheck(const CClass &objClass);
 public:
 
 	// 実体収集
 	virtual void CollectClassesForNameOnly( const BasicSource &source ) = 0;
+	virtual void GetClass_recur(const char *lpszInheritsClass) = 0;
 	virtual void GetAllClassInfo() = 0;
 	virtual void Compile_System_InitializeUserTypes() = 0;
