Index: trunk/abdev/BasicCompiler_Common/include/Class.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/Class.h	(revision 354)
+++ trunk/abdev/BasicCompiler_Common/include/Class.h	(revision 355)
@@ -422,4 +422,16 @@
 		return staticMembers;
 	}
+	
+	const CMember *FindDynamicMember( const char *memberName ) const
+	{
+		BOOST_FOREACH( CMember *pMember, GetDynamicMembers() )
+		{
+			if( pMember->GetName() == memberName )
+			{
+				return pMember;
+			}
+		}
+		return NULL;
+	}
 
 	void EnumDynamicMethodsOrInterfaceMethods( const char *methodName, std::vector<const UserProc *> &subs ) const;
@@ -516,4 +528,16 @@
 
 
+	// TypeInfo用
+	mutable int typeInfoDataTableOffset;
+	void SetTypeInfoDataTableOffset( int typeInfoDataTableOffset ) const
+	{
+		this->typeInfoDataTableOffset = typeInfoDataTableOffset;
+	}
+	int GetTypeInfoDataTableOffset() const
+	{
+		return typeInfoDataTableOffset;
+	}
+
+
 	//線形リスト用
 	CClass *pobj_NextClass;
@@ -554,4 +578,5 @@
 	virtual void GetAllClassInfo();
 	virtual void Compile_System_InitializeUserTypes();
+	virtual void Compile_System_InitializeUserTypesForBaseType();
 
 	const CClass *Find( const NamespaceScopes &namespaceScopes, const string &name ) const;
Index: trunk/abdev/BasicCompiler_Common/include/DataTable.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/DataTable.h	(revision 354)
+++ trunk/abdev/BasicCompiler_Common/include/DataTable.h	(revision 355)
@@ -4,13 +4,12 @@
 
 //DataTable.cpp
-class DataTable{
+class DataTable
+{
 	char *buffer;
 	int size;
 
-	void Realloc( int size )
-	{
-		this->buffer = (char *)realloc( this->buffer, size + 100 );
-		this->size = size;
-	}
+public:
+	// リンカで解決しなければならないスケジュール
+	Schedules schedules;
 
 	// XMLシリアライズ用
@@ -23,4 +22,5 @@
 		ar & BOOST_SERIALIZATION_NVP( _buffer );
 		ar & BOOST_SERIALIZATION_NVP( size );
+		ar & BOOST_SERIALIZATION_NVP( schedules );
 
 		// 読み込み後の処理
@@ -52,4 +52,12 @@
 		ar & BOOST_SERIALIZATION_NVP( _buffer );
 		ar & BOOST_SERIALIZATION_NVP( size );
+		ar & BOOST_SERIALIZATION_NVP( schedules );
+	}
+
+
+	void Realloc( int size )
+	{
+		this->buffer = (char *)realloc( this->buffer, size + 100 );
+		this->size = size;
 	}
 
@@ -92,8 +100,60 @@
 	void Add( const DataTable &dataTable )
 	{
+		long baseOffset = GetSize();
+
 		AddBinary( dataTable.GetPtr(), dataTable.GetSize() );
+
+		// スケジュールを追加
+		BOOST_FOREACH( const Schedule &schedule, dataTable.schedules )
+		{
+			this->schedules.push_back(
+				Schedule(
+					schedule.GetType(),
+					baseOffset + schedule.GetOffset(),
+					schedule.GetLongPtrValue()
+				)
+			);
+		}
 	}
 
-	const void *GetPtr() const;
-	int GetSize() const;
+	const void *GetPtr() const
+	{
+		return buffer;
+	}
+	int GetSize() const
+	{
+		return size;
+	}
+
+	long GetLong( int pos ) const
+	{
+		return *(long *)( buffer + pos );
+	}
+	_int64 GetInt64( int pos ) const
+	{
+		return *(_int64 *)( buffer + pos );
+	}
+	void Overwrite( int pos, long newLongValue )
+	{
+		*(long *)( buffer + pos ) = newLongValue;
+	}
+	void OverwriteInt64( int pos, _int64 new64Value )
+	{
+		*(_int64 *)( buffer + pos ) = new64Value;
+	}
+
+	bool MakeConstObjectToProcessStaticBuffer( const CClass &objClass, const Jenga::Common::Strings &initMemberValues, int &dataTableOffset );
+	bool MakeConstObjectToProcessStaticBuffer( const char *expression, Type &resultType, int &dataTableOffset );
+	int MakeConstStringObjectToProcessStaticBuffer( const char *str );
+	bool MakeLiteralArrayBuffer( const char *expression, const Type &baseType, int &dataTableOffset );
+
+private:
+	int lastMadeConstObjectDataTableOffset;
+public:
+	int GetLastMadeConstObjectDataTableOffset()
+	{
+		return lastMadeConstObjectDataTableOffset;
+	}
+
+	void ResetDataSectionBaseOffset( long dataSectionBaseOffset );
 };
Index: trunk/abdev/BasicCompiler_Common/include/Linker.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/Linker.h	(revision 354)
+++ trunk/abdev/BasicCompiler_Common/include/Linker.h	(revision 355)
@@ -4,4 +4,5 @@
 {
 	NativeCode nativeCode;
+	DataTable dataTable;
 	DWORD imageBase;
 
@@ -15,4 +16,9 @@
 	{
 		return nativeCode;
+	}
+
+	const DataTable &GetDataTable() const
+	{
+		return dataTable;
 	}
 
@@ -37,5 +43,11 @@
 	void ResolveVtblSchedule( long dataSectionBaseOffset );
 
+	// TypeInfoスケジュール
+	void ResolveTypeInfoSchedule( long dataSectionBaseOffset );
+
 	// リンク
 	void Link( ObjectModule &masterObjectModule );
+
+	// データテーブルをセット
+	void SetDataTable( DataTable &dataTable );
 };
Index: trunk/abdev/BasicCompiler_Common/include/NamespaceSupporter.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/NamespaceSupporter.h	(revision 354)
+++ trunk/abdev/BasicCompiler_Common/include/NamespaceSupporter.h	(revision 355)
@@ -53,7 +53,5 @@
 
 		while( tempLivingNamespaceScopes.size() ){
-			NamespaceScopes tempNamespaceScopes = tempLivingNamespaceScopes;
-
-			string tempStr = tempNamespaceScopes.ToString() + "." + entryName;
+			string tempStr = tempLivingNamespaceScopes.ToString() + "." + entryName;
 			if( thisStr == tempStr ){
 				return true;
Index: trunk/abdev/BasicCompiler_Common/include/NativeCode.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 354)
+++ trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 355)
@@ -24,4 +24,5 @@
 		DllProc,		// DLL関数位置スケジュール
 		Vtbl,			// vtblスケジュール
+		TypeInfo,		// TypeInfoスケジュール
 	};
 
@@ -57,4 +58,5 @@
 			break;
 		case Vtbl:
+		case TypeInfo:
 			ar & boost::serialization::make_nvp("pClass", const_cast<::CClass *&>(pClass));
 			break;
@@ -93,4 +95,10 @@
 	{
 	}
+	Schedule( Type type, const ::CClass *pClass, long offset )
+		: type( type )
+		, pClass( pClass )
+		, offset( offset )
+	{
+	}
 	~Schedule()
 	{
@@ -127,5 +135,5 @@
 	const ::CClass &GetClass() const
 	{
-		if( type != Schedule::Vtbl )
+		if( !( type == Schedule::Vtbl || type == Schedule::TypeInfo ) )
 		{
 			SetError();
Index: trunk/abdev/BasicCompiler_Common/include/ver.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/ver.h	(revision 354)
+++ trunk/abdev/BasicCompiler_Common/include/ver.h	(revision 355)
@@ -6,6 +6,6 @@
 // バージョン付加文字列
 #ifdef _AMD64_
-#define VER_INFO		"(x64) (rev.361)"
+#define VER_INFO		"(x64) (rev.367)"
 #else
-#define VER_INFO		"(rev.361)"
+#define VER_INFO		"(rev.367)"
 #endif
