Index: trunk/jenga/include/smoothie/Class.h
===================================================================
--- trunk/jenga/include/smoothie/Class.h	(revision 200)
+++ trunk/jenga/include/smoothie/Class.h	(revision 203)
@@ -54,6 +54,9 @@
 	NamespaceScopesCollection importedNamespaces;
 
-	// 継承するインターフェイス
+	// 実装するインターフェイス
 	Interfaces interfaces;
+	
+	// 継承クラス
+	const CClass *pSuperClass;
 
 	// Blittable型情報
@@ -77,4 +80,5 @@
 
 	// XMLシリアライズ用
+	// TODO: xml実装
 private:
 	friend class boost::serialization::access;
@@ -85,4 +89,5 @@
 		ar & BOOST_SERIALIZATION_NVP( importedNamespaces );
 		//ar & BOOST_SERIALIZATION_NVP( interfaces );
+		ar & boost::serialization::make_nvp( "pSuperClass", const_cast<CClass *&>(pSuperClass) );
 		ar & BOOST_SERIALIZATION_NVP( blittableType );
 		//ar & BOOST_SERIALIZATION_NVP( dynamicMembers );
@@ -99,13 +104,38 @@
 
 public:
-	//継承クラスへのポインタ
-	const CClass *pobj_InheritsClass;
 
 	//アラインメント値
 	int iAlign;
 
-	CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name );
+	CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name )
+		: isReady( false )
+		, Prototype( namespaceScopes, name )
+		, importedNamespaces( importedNamespaces )
+		, ConstructorMemberSubIndex( -1 )
+		, DestructorMemberSubIndex( -1 )
+		, classType( Class )
+		, pSuperClass( NULL )
+		, vtblNum( 0 )
+		, iAlign( 0 )
+		, vtbl_offset( -1 )
+		, isCompilingConstructor( false )
+		, isCompilingDestructor( false )
+		, pobj_NextClass( NULL )
+	{
+	}
 	CClass()
-		: Prototype()
+		: isReady( false )
+		, Prototype()
+		, importedNamespaces()
+		, ConstructorMemberSubIndex( -1 )
+		, DestructorMemberSubIndex( -1 )
+		, classType()
+		, pSuperClass( NULL )
+		, vtblNum( 0 )
+		, iAlign( 0 )
+		, vtbl_offset( -1 )
+		, isCompilingConstructor( false )
+		, isCompilingDestructor( false )
+		, pobj_NextClass( NULL )
 	{
 	}
@@ -130,4 +160,18 @@
 	}
 	bool IsInheritsInterface( const CClass *pInterfaceClass ) const;
+
+	// 継承元クラス
+	bool HasSuperClass() const
+	{
+		return ( pSuperClass != NULL );
+	}
+	const CClass &GetSuperClass() const
+	{
+		return *pSuperClass;
+	}
+	void SetSuperClass( const CClass *pSuperClass )
+	{
+		this->pSuperClass = pSuperClass;
+	}
 
 	// Blittable型
Index: trunk/jenga/include/smoothie/Member.h
===================================================================
--- trunk/jenga/include/smoothie/Member.h	(revision 200)
+++ trunk/jenga/include/smoothie/Member.h	(revision 203)
@@ -20,4 +20,18 @@
 	string initializeExpression;
 	string constructParameter;
+
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( MemberPrototype );
+		ar & BOOST_SERIALIZATION_NVP( name );
+		ar & BOOST_SERIALIZATION_NVP( type );
+		ar & BOOST_SERIALIZATION_NVP( isConst );
+		ar & BOOST_SERIALIZATION_NVP( initializeExpression );
+		ar & BOOST_SERIALIZATION_NVP( constructParameter );
+	}
+
 public:
 	int SubScripts[MAX_ARRAYDIM];
Index: trunk/jenga/include/smoothie/Method.h
===================================================================
--- trunk/jenga/include/smoothie/Method.h	(revision 200)
+++ trunk/jenga/include/smoothie/Method.h	(revision 203)
@@ -17,4 +17,15 @@
 class CMethod : public MemberPrototype
 {
+
+	// XMLシリアライズ用
+	// TODO: xml実装
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( MemberPrototype );
+		//ar & BOOST_SERIALIZATION_NVP( pUserProc );
+	}
+
 public:
 	UserProc *pUserProc;
@@ -41,4 +52,17 @@
 	bool isConst;
 	const CClass *pInheritsClass;
+
+	// XMLシリアライズ用
+	// TODO: xml実装
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( CMethod );
+		ar & BOOST_SERIALIZATION_NVP( isAbstract );
+		ar & BOOST_SERIALIZATION_NVP( isVirtual );
+		ar & BOOST_SERIALIZATION_NVP( isConst );
+		//ar & BOOST_SERIALIZATION_NVP( pInheritsClass );
+	}
 
 public:
@@ -91,4 +115,12 @@
 class StaticMethod : public CMethod
 {
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( CMethod );
+	}
+
 public:
 	StaticMethod( UserProc *pUserProc, Prototype::Accessibility accessibility )
@@ -113,4 +145,13 @@
 class Methods : public vector<CMethod *>
 {
+	// XMLシリアライズ用
+	// TODO: xml実装
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & boost::serialization::make_nvp("vector_CMethod", boost::serialization::base_object<vector<CMethod *>>(*this));
+	}
+
 public:
 	Methods();
Index: trunk/jenga/include/smoothie/Parameter.h
===================================================================
--- trunk/jenga/include/smoothie/Parameter.h	(revision 200)
+++ trunk/jenga/include/smoothie/Parameter.h	(revision 203)
@@ -15,4 +15,17 @@
 
 	const std::string initValue;
+
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Type );
+		ar & BOOST_SERIALIZATION_NVP( varName );
+		ar & BOOST_SERIALIZATION_NVP( isRef );
+		ar & BOOST_SERIALIZATION_NVP( isArray );
+		ar & BOOST_SERIALIZATION_NVP( subScripts );
+		ar & BOOST_SERIALIZATION_NVP( initValue );
+	}
 
 public:
@@ -93,4 +106,12 @@
 class Parameters : public std::vector<Parameter *>
 {
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & boost::serialization::make_nvp("vector_Parameter", boost::serialization::base_object<vector<Parameter *>>(*this));
+	}
+
 public:
 
Index: trunk/jenga/include/smoothie/Procedure.h
===================================================================
--- trunk/jenga/include/smoothie/Procedure.h	(revision 200)
+++ trunk/jenga/include/smoothie/Procedure.h	(revision 203)
@@ -16,5 +16,5 @@
 
 private:
-	const string name;						// プロシージャ名
+	string name;						// プロシージャ名
 
 	Kind kind;
@@ -33,4 +33,18 @@
 	// ソースコードの位置
 	int codePos;
+
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_NVP( name );
+		ar & BOOST_SERIALIZATION_NVP( kind );
+		ar & BOOST_SERIALIZATION_NVP( isCdecl );
+		ar & BOOST_SERIALIZATION_NVP( isUsing );
+		ar & BOOST_SERIALIZATION_NVP( params );
+		ar & BOOST_SERIALIZATION_NVP( returnType );
+		ar & BOOST_SERIALIZATION_NVP( codePos );
+	}
 
 public:
@@ -112,10 +126,24 @@
 	bool isCompiled;
 
-public:
-
-	void Serialize( bool isRead )
-	{
-
-	}
+	// XMLシリアライズ用
+	// TODO: xml実装（publicなクラスが残っている）
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure );
+		ar & BOOST_SERIALIZATION_NVP( _paramStr );
+		ar & BOOST_SERIALIZATION_NVP( secondParmNum );
+		ar & BOOST_SERIALIZATION_NVP( realParams );
+		ar & BOOST_SERIALIZATION_NVP( realSecondParmNum );
+		ar & BOOST_SERIALIZATION_NVP( pParentClass );
+		ar & BOOST_SERIALIZATION_NVP( pMethod );
+		ar & BOOST_SERIALIZATION_NVP( isExport );
+		ar & BOOST_SERIALIZATION_NVP( isSystem );
+		ar & BOOST_SERIALIZATION_NVP( isAutoGeneration );
+		ar & BOOST_SERIALIZATION_NVP( isCompiled );
+	}
+
+public:
 
 	UserProc( const string &name, Kind kind, bool isMacro, bool isCdecl, bool isExport ):
@@ -260,9 +288,21 @@
 class DllProc : public Procedure
 {
-	const NamespaceScopes namespaceScopes;
-
-	const string dllFileName;
-	const string alias;
+	NamespaceScopes namespaceScopes;
+
+	string dllFileName;
+	string alias;
 	int lookupAddress;
+
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure );
+		ar & BOOST_SERIALIZATION_NVP( namespaceScopes );
+		ar & BOOST_SERIALIZATION_NVP( dllFileName );
+		ar & BOOST_SERIALIZATION_NVP( alias );
+		ar & BOOST_SERIALIZATION_NVP( lookupAddress );
+	}
 
 public:
@@ -312,4 +352,12 @@
 class ProcPointer : public Procedure
 {
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure );
+	}
+
 public:
 	ProcPointer( Kind kind ):
@@ -323,4 +371,12 @@
 class ProcPointers : public vector<ProcPointer *>
 {
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & boost::serialization::make_nvp("vector_ProcPointer", boost::serialization::base_object<vector<ProcPointer *>>(*this));
+	}
+
 public:
 	ProcPointers()
Index: trunk/jenga/include/smoothie/Prototype.h
===================================================================
--- trunk/jenga/include/smoothie/Prototype.h	(revision 200)
+++ trunk/jenga/include/smoothie/Prototype.h	(revision 203)
@@ -79,4 +79,13 @@
 {
 	Prototype::Accessibility accessibility;
+
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_NVP( accessibility );
+	}
+
 public:
 	MemberPrototype( Prototype::Accessibility accessibility )
Index: trunk/jenga/include/smoothie/Variable.h
===================================================================
--- trunk/jenga/include/smoothie/Variable.h	(revision 200)
+++ trunk/jenga/include/smoothie/Variable.h	(revision 203)
@@ -6,5 +6,5 @@
 class Variable : public Type
 {
-	const NamespaceScopes namespaceScopes;
+	NamespaceScopes namespaceScopes;
 	string name;
 	bool isConst;
@@ -14,4 +14,20 @@
 
 	bool isParameter;
+
+	// XMLシリアライズ用
+	// TODO: xml実装（publicなクラスが残っている）
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Type );
+		ar & BOOST_SERIALIZATION_NVP( namespaceScopes );
+		ar & BOOST_SERIALIZATION_NVP( name );
+		ar & BOOST_SERIALIZATION_NVP( isConst );
+		ar & BOOST_SERIALIZATION_NVP( isRef );
+		ar & BOOST_SERIALIZATION_NVP( isArray );
+		ar & BOOST_SERIALIZATION_NVP( subScripts );
+		ar & BOOST_SERIALIZATION_NVP( isParameter );
+	}
 
 public:
Index: trunk/jenga/src/smoothie/Class.cpp
===================================================================
--- trunk/jenga/src/smoothie/Class.cpp	(revision 200)
+++ trunk/jenga/src/smoothie/Class.cpp	(revision 203)
@@ -6,20 +6,4 @@
 
 
-CClass::CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name )
-	: isReady( false )
-	, Prototype( namespaceScopes, name )
-	, importedNamespaces( importedNamespaces )
-	, ConstructorMemberSubIndex( -1 )
-	, DestructorMemberSubIndex( -1 )
-	, classType( Class )
-	, pobj_InheritsClass( NULL )
-	, vtblNum( 0 )
-	, iAlign( 0 )
-	, vtbl_offset( -1 )
-	, isCompilingConstructor( false )
-	, isCompilingDestructor( false )
-	, pobj_NextClass( NULL )
-{
-}
 CClass::~CClass(){
 	// 動的メンバ
@@ -284,8 +268,13 @@
 bool CClass::IsSubClass( const CClass *pClass ) const
 {
-	pClass = pClass->pobj_InheritsClass;
-	while( pClass ){
-		if( this == pClass ) return true;
-		pClass = pClass->pobj_InheritsClass;
+	if( !pClass->HasSuperClass() )
+	{
+		return false;
+	}
+
+	const CClass *pTempClass = &pClass->GetSuperClass();
+	while( pTempClass ){
+		if( this == pTempClass ) return true;
+		pTempClass = &pTempClass->GetSuperClass();
 	}
 	return false;
