Index: trunk/abdev/BasicCompiler_Common/include/BoostSerializationSupport.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/BoostSerializationSupport.h	(revision 255)
+++ trunk/abdev/BasicCompiler_Common/include/BoostSerializationSupport.h	(revision 256)
@@ -26,6 +26,6 @@
 	bool WriteXml( const string &xmlFilePath, bool isShowExceptionMessage = true ) const;
 
-	bool ReadBinaly( const string &filePath, bool isShowExceptionMessage = true );
-	bool WriteBinaly( const string &filePath, bool isShowExceptionMessage = true ) const;
+	bool ReadBinary( const string &filePath, bool isShowExceptionMessage = true );
+	bool WriteBinary( const string &filePath, bool isShowExceptionMessage = true ) const;
 
 	bool ReadText( const string &filePath, bool isShowExceptionMessage = true );
Index: trunk/abdev/BasicCompiler_Common/include/Compiler.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/Compiler.h	(revision 255)
+++ trunk/abdev/BasicCompiler_Common/include/Compiler.h	(revision 256)
@@ -3,7 +3,8 @@
 #include <CodeGenerator.h>
 #include <NamespaceSupporter.h>
-#include <MetaImpl.h>
+#include <Meta.h>
 #include <DataTable.h>
 #include <CodeGenerator.h>
+#include <Linker.h>
 
 class Compiler
@@ -11,10 +12,4 @@
 	// 名前空間サポート
 	NamespaceSupporter namespaceSupporter;
-
-	// メタ情報
-	MetaImpl metaImpl;
-
-	// データテーブル
-	DataTable dataTable;
 
 public:
@@ -25,19 +20,12 @@
 	}
 
-	MetaImpl &GetMeta()
-	{
-		return metaImpl;
-	}
-
-	DataTable &GetDataTable()
-	{
-		return dataTable;
-	}
-
-	// グローバル領域のネイティブコード
-	NativeCode globalNativeCode;
+	// オブジェクトモジュール
+	ObjectModule objectModule;
 
 	// コード生成機構
 	CodeGenerator codeGenerator;
+
+	// リンカ
+	Linker linker;
 
 	static bool StringToType( const std::string &typeName, Type &type );
Index: trunk/abdev/BasicCompiler_Common/include/DataTable.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/DataTable.h	(revision 255)
+++ trunk/abdev/BasicCompiler_Common/include/DataTable.h	(revision 256)
@@ -1,15 +1,86 @@
 #pragma once
+
+#include <BoostSerializationSupport.h>
 
 //DataTable.cpp
 class DataTable{
-	void *pdata;
+	char *buffer;
 	int size;
 
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	BOOST_SERIALIZATION_SPLIT_MEMBER();
+	template<class Archive> void load(Archive& ar, const unsigned int version)
+	{
+		std::string _buffer;
+		ar & BOOST_SERIALIZATION_NVP( _buffer );
+		ar & BOOST_SERIALIZATION_NVP( size );
+
+		// 読み込み後の処理
+		Realloc( size );
+		for( int i=0; i<size; i++ )
+		{
+			if( _buffer[i*3+2] != ',' )
+			{
+				//エラー
+				DebugBreak();
+			}
+			ULONG_PTR l;
+			sscanf( _buffer.c_str() + i*3, "%02x,", &l );
+			buffer[i] = (char)l;
+		}
+	}
+	template<class Archive> void save(Archive& ar, const unsigned int version) const
+	{
+		// 保存準備
+		char *tempCode = (char *)calloc( (size+1) * 3, 1 );
+		for( int i=0; i<size; i++ )
+		{
+			char temp[32];
+			sprintf( temp, "%02x,", (unsigned char)buffer[i] );
+			tempCode[i*3] = temp[0];
+			tempCode[i*3+1] = temp[1];
+			tempCode[i*3+2] = temp[2];
+		}
+
+		std::string _buffer = tempCode;
+		free( tempCode );
+
+		ar & BOOST_SERIALIZATION_NVP( _buffer );
+		ar & BOOST_SERIALIZATION_NVP( size );
+	}
+
 public:
-	DataTable();
-	~DataTable();
-	void Init();
+	DataTable()
+		: buffer( (char *)malloc(100) )
+		, size( 0 )
+	{
+		lstrcpy( buffer, "initialized!!!" );
+	}
+	DataTable( const DataTable &dataTable )
+		: buffer( (char *)malloc(100) )
+		, size( 0 )
+	{
+		lstrcpy( buffer, "initialized!!!" );
+		AddBinary( dataTable.GetPtr(), dataTable.GetSize() );
+	}
+	~DataTable()
+	{
+		free( buffer );
+	}
+	void Clear()
+	{
+		size = 0;
+	}
 
-	int AddBinary( const void *pdata, int size );
+	void operator =( const DataTable &dataTable )
+	{
+		Clear();
+		AddBinary( dataTable.GetPtr(), dataTable.GetSize() );
+	}
+
+	void Realloc( int size );
+	int AddBinary( const void *buffer, int size );
 	int Add( _int64 i64data );
 	int Add( int i32data );
Index: trunk/abdev/BasicCompiler_Common/include/Linker.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/Linker.h	(revision 256)
+++ trunk/abdev/BasicCompiler_Common/include/Linker.h	(revision 256)
@@ -0,0 +1,36 @@
+#pragma once
+
+class ObjectModule : public Jenga::Common::BoostSerializationSupport<ObjectModule>
+{
+public:
+	// メタ情報
+	Meta meta;
+
+	// グローバル領域のネイティブコード
+	NativeCode globalNativeCode;
+
+	// データテーブル
+	DataTable dataTable;
+
+	// XMLシリアライズ用
+private:
+	virtual const char *RootTagName() const
+	{
+		return "objectModule";
+	}
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		trace_for_serialize( "serializing - objectModule" );
+
+		ar & BOOST_SERIALIZATION_NVP( meta );
+		ar & BOOST_SERIALIZATION_NVP( globalNativeCode );
+		ar & BOOST_SERIALIZATION_NVP( dataTable );
+	}
+};
+
+class Linker
+{
+	// メタ情報
+	vector<const ObjectModule *> objectModules;
+};
Index: trunk/abdev/BasicCompiler_Common/include/Meta.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/Meta.h	(revision 256)
+++ trunk/abdev/BasicCompiler_Common/include/Meta.h	(revision 256)
@@ -0,0 +1,151 @@
+#pragma once
+
+#include <BoostSerializationSupport.h>
+
+#include <option.h>
+#include <Program.h>
+#include <Class.h>
+#include <Procedure.h>
+#include <TypeDef.h>
+#include <Variable.h>
+#include <Const.h>
+
+class Meta
+{
+	// 名前空間
+	NamespaceScopesCollection namespaceScopesCollection;
+
+	// 関数・メソッド
+	UserProcs userProcs;
+
+	// DLL関数
+	DllProcs dllProcs;
+
+	// クラス
+	Classes classesImpl;
+
+	// グローバル変数
+	Variables globalVars;
+
+	// グローバル定数
+	Consts globalConsts;
+
+	// グローバル定数マクロ
+	ConstMacros globalConstMacros;
+
+	// blittable型
+	BlittableTypes blittableTypes;
+
+	// TypeDef
+	TypeDefCollection typeDefs;
+
+	// 関数ポインタ
+	ProcPointers procPointers;
+
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		trace_for_serialize( "serializing - Meta" );
+
+		ar & BOOST_SERIALIZATION_NVP( namespaceScopesCollection );
+		ar & BOOST_SERIALIZATION_NVP( userProcs );
+		ar & BOOST_SERIALIZATION_NVP( dllProcs );
+		ar & BOOST_SERIALIZATION_NVP( classesImpl );
+		ar & BOOST_SERIALIZATION_NVP( globalVars );
+		ar & BOOST_SERIALIZATION_NVP( globalConsts );
+		ar & BOOST_SERIALIZATION_NVP( globalConstMacros );
+		ar & BOOST_SERIALIZATION_NVP( blittableTypes );
+		ar & BOOST_SERIALIZATION_NVP( typeDefs );
+		ar & BOOST_SERIALIZATION_NVP( procPointers );
+	}
+
+	Classes *pNowClassesForDebugger;
+
+public:
+	Meta()
+		: classesImpl()
+		, pNowClassesForDebugger( &classesImpl )
+	{
+	}
+
+	const NamespaceScopesCollection &GetNamespaces() const
+	{
+		return namespaceScopesCollection;
+	}
+	NamespaceScopesCollection &GetNamespaces()
+	{
+		return namespaceScopesCollection;
+	}
+
+	const UserProcs &GetUserProcs() const
+	{
+		return userProcs;
+	}
+	UserProcs &GetUserProcs()
+	{
+		return userProcs;
+	}
+
+	const DllProcs &GetDllProcs() const
+	{
+		return dllProcs;
+	}
+	DllProcs &GetDllProcs()
+	{
+		return dllProcs;
+	}
+
+	Classes &GetClasses()
+	{
+		return *pNowClassesForDebugger;
+	}
+	void SetClasses( Classes *pClasses )
+	{
+		this->pNowClassesForDebugger = pClasses;
+	}
+
+	const Variables &GetGlobalVars() const
+	{
+		return globalVars;
+	}
+	Variables &GetGlobalVars()
+	{
+		return globalVars;
+	}
+
+	const Consts &GetGlobalConsts() const
+	{
+		return globalConsts;
+	}
+	Consts &GetGlobalConsts()
+	{
+		return globalConsts;
+	}
+
+	const ConstMacros &GetGlobalConstMacros() const
+	{
+		return globalConstMacros;
+	}
+	ConstMacros &GetGlobalConstMacros()
+	{
+		return globalConstMacros;
+	}
+
+	BlittableTypes &GetBlittableTypes()
+	{
+		return blittableTypes;
+	}
+
+	TypeDefCollection &GetTypeDefs()
+	{
+		return typeDefs;
+	}
+
+	// 関数ポインタ
+	ProcPointers &GetProcPointers()
+	{
+		return procPointers;
+	}
+};
Index: trunk/abdev/BasicCompiler_Common/include/MetaImpl.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/MetaImpl.h	(revision 255)
+++ 	(revision )
@@ -1,155 +1,0 @@
-#pragma once
-
-#include <BoostSerializationSupport.h>
-
-#include <option.h>
-#include <Program.h>
-#include <Class.h>
-#include <Procedure.h>
-#include <TypeDef.h>
-#include <Variable.h>
-#include <Const.h>
-
-class MetaImpl : public Jenga::Common::BoostSerializationSupport<MetaImpl>
-{
-	// 名前空間
-	NamespaceScopesCollection namespaceScopesCollection;
-
-	// 関数・メソッド
-	UserProcs userProcs;
-
-	// DLL関数
-	DllProcs dllProcs;
-
-	// クラス
-	Classes classesImpl;
-
-	// グローバル変数
-	Variables globalVars;
-
-	// グローバル定数
-	Consts globalConsts;
-
-	// グローバル定数マクロ
-	ConstMacros globalConstMacros;
-
-	// blittable型
-	BlittableTypes blittableTypes;
-
-	// TypeDef
-	TypeDefCollection typeDefs;
-
-	// 関数ポインタ
-	ProcPointers procPointers;
-
-	// XMLシリアライズ用
-private:
-	virtual const char *RootTagName() const
-	{
-		return "metaImpl";
-	}
-	friend class boost::serialization::access;
-	template<class Archive> void serialize(Archive& ar, const unsigned int version)
-	{
-		trace_for_serialize( "serializing - MetaImpl" );
-
-		ar & BOOST_SERIALIZATION_NVP( namespaceScopesCollection );
-		ar & BOOST_SERIALIZATION_NVP( userProcs );
-		ar & BOOST_SERIALIZATION_NVP( dllProcs );
-		ar & BOOST_SERIALIZATION_NVP( classesImpl );
-		ar & BOOST_SERIALIZATION_NVP( globalVars );
-		ar & BOOST_SERIALIZATION_NVP( globalConsts );
-		ar & BOOST_SERIALIZATION_NVP( globalConstMacros );
-		ar & BOOST_SERIALIZATION_NVP( blittableTypes );
-		ar & BOOST_SERIALIZATION_NVP( typeDefs );
-		ar & BOOST_SERIALIZATION_NVP( procPointers );
-	}
-
-	Classes *pNowClassesForDebugger;
-
-public:
-	MetaImpl()
-		: classesImpl()
-		, pNowClassesForDebugger( &classesImpl )
-	{
-	}
-
-	const NamespaceScopesCollection &GetNamespaces() const
-	{
-		return namespaceScopesCollection;
-	}
-	NamespaceScopesCollection &GetNamespaces()
-	{
-		return namespaceScopesCollection;
-	}
-
-	const UserProcs &GetUserProcs() const
-	{
-		return userProcs;
-	}
-	UserProcs &GetUserProcs()
-	{
-		return userProcs;
-	}
-
-	const DllProcs &GetDllProcs() const
-	{
-		return dllProcs;
-	}
-	DllProcs &GetDllProcs()
-	{
-		return dllProcs;
-	}
-
-	Classes &GetClasses()
-	{
-		return *pNowClassesForDebugger;
-	}
-	void SetClasses( Classes *pClasses )
-	{
-		this->pNowClassesForDebugger = pClasses;
-	}
-
-	const Variables &GetGlobalVars() const
-	{
-		return globalVars;
-	}
-	Variables &GetGlobalVars()
-	{
-		return globalVars;
-	}
-
-	const Consts &GetGlobalConsts() const
-	{
-		return globalConsts;
-	}
-	Consts &GetGlobalConsts()
-	{
-		return globalConsts;
-	}
-
-	const ConstMacros &GetGlobalConstMacros() const
-	{
-		return globalConstMacros;
-	}
-	ConstMacros &GetGlobalConstMacros()
-	{
-		return globalConstMacros;
-	}
-
-	BlittableTypes &GetBlittableTypes()
-	{
-		return blittableTypes;
-	}
-
-	TypeDefCollection &GetTypeDefs()
-	{
-		return typeDefs;
-	}
-
-	// 関数ポインタ
-	ProcPointers &GetProcPointers()
-	{
-		return procPointers;
-	}
-};
Index: trunk/abdev/BasicCompiler_Common/include/NativeCode.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 255)
+++ trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 256)
@@ -39,4 +39,6 @@
 	template<class Archive> void serialize(Archive& ar, const unsigned int version)
 	{
+		trace_for_serialize( "serializing - Schedule" );
+
 		ar & BOOST_SERIALIZATION_NVP( type );
 		ar & BOOST_SERIALIZATION_NVP( offset );
@@ -94,4 +96,6 @@
 	template<class Archive> void load(Archive& ar, const unsigned int version)
 	{
+		trace_for_serialize( "serializing(load) - NativeCode" );
+
 		std::string code;
 		ar & BOOST_SERIALIZATION_NVP( code );
@@ -103,17 +107,19 @@
 		for( int i=0; i<size; i++ )
 		{
-			char c;
-			sscanf( code.c_str() + i*3, "%02x,", &c );
-			codeBuffer[i] = c;
+			ULONG_PTR l;
+			sscanf( code.c_str() + i*3, "%02x,", &l );
+			codeBuffer[i] = (char)l;
 		}
 	}
 	template<class Archive> void save(Archive& ar, const unsigned int version) const
 	{
+		trace_for_serialize( "serializing(save) - NativeCode" );
+
 		// 保存準備
-		char *tempCode = (char *)malloc( (size+1) * 3 );
+		char *tempCode = (char *)calloc( (size+1) * 3, 1 );
 		for( int i=0; i<size; i++ )
 		{
 			char temp[32];
-			sprintf( temp, "%02x,", codeBuffer[i] );
+			sprintf( temp, "%02x,", (unsigned char)codeBuffer[i] );
 			tempCode[i*3] = temp[0];
 			tempCode[i*3+1] = temp[1];
@@ -130,9 +136,9 @@
 
 
-	void Realloc( int additionSize = 0 )
-	{
-		if( allocateSize < size + 8192 + additionSize )
-		{
-			while( allocateSize < size + 8192 + additionSize )
+	void Realloc( int newSize )
+	{
+		if( allocateSize < newSize + 8192 )
+		{
+			while( allocateSize < newSize + 8192 )
 			{
 				allocateSize += 8192;
@@ -149,4 +155,11 @@
 	{
 	}
+	NativeCode( const NativeCode &nativeCode )
+		: allocateSize( 8192 )
+		, codeBuffer( (char *)malloc( allocateSize ) )
+		, size( 0 )
+	{
+		Put( nativeCode );
+	}
 	NativeCode( const char *codeBuffer, int size )
 		: allocateSize( 8192 )
@@ -165,4 +178,10 @@
 	}
 
+	void operator =( const NativeCode &nativeCode )
+	{
+		Clear();
+		Put( nativeCode );
+	}
+
 	int GetSize() const
 	{
@@ -203,5 +222,5 @@
 	void Put( const char *codeBuffer, int size )
 	{
-		Realloc( size );
+		Realloc( this->size + size );
 
 		memcpy( this->codeBuffer + this->size, codeBuffer, size );
@@ -268,6 +287,6 @@
 	void Put( char c )
 	{
+		Realloc( size + 1 );
 		codeBuffer[size++] = c;
-		Realloc();
 
 
Index: trunk/abdev/BasicCompiler_Common/include/SmoothieImpl.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/SmoothieImpl.h	(revision 255)
+++ trunk/abdev/BasicCompiler_Common/include/SmoothieImpl.h	(revision 256)
@@ -3,5 +3,5 @@
 #include <jenga/include/smoothie/Smoothie.h>
 
-#include <MetaImpl.h>
+#include <Meta.h>
 
 class SmoothieImpl : public Smoothie
