Index: trunk/ab5.0/abdev/compiler_x64/MakePeHdr.cpp
===================================================================
--- trunk/ab5.0/abdev/compiler_x64/MakePeHdr.cpp	(revision 528)
+++ trunk/ab5.0/abdev/compiler_x64/MakePeHdr.cpp	(revision 584)
@@ -119,22 +119,28 @@
 
 
+	//"メタ情報を解析中..."
+	compiler.messenger.Output( STRING_ANALYZING_META_INFO );
+
+
 	//////////////////////
 	// コード生成前の準備
 	//////////////////////
 
-	//重複エラー情報管理のメモリを確保（グローバル領域コンパイル用）
-	extern char **SynonymErrorWords;
-	extern int SynonymErrorNum;
-	SynonymErrorNum=0;
-	SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1);
+	// 重複エラー情報をクリア
+	compiler.errorMessenger.ClearSynonymKeyWords();
 
 	//列挙体に関する情報を収集
-	compiler.enumInfoCollection.InitEnum();
-
-	//列挙体からクラスコードを生成
-	char *temp;
-	temp = compiler.enumInfoCollection.GenerateSourceCode();
-	AddSourceCode(temp);
-	HeapDefaultFree(temp);
+	{
+		ActiveBasic::Compiler::LexicalAnalyzer::CollectEnums(
+			compiler.GetObjectModule().GetCurrentSource().GetBuffer(),
+			compiler.enumInfoCollection
+		);
+
+		// デリゲートからクラスコードを生成
+		std::string tempSource = ActiveBasic::Compiler::LexicalAnalyzer::GenerateEnumsSourceCode(
+			compiler.enumInfoCollection
+		);
+		AddSourceCode( tempSource.c_str() );
+	}
 
 	// 名前空間情報を取得
@@ -147,5 +153,5 @@
 	{
 		ActiveBasic::Compiler::LexicalAnalyzer::CollectDelegates(
-			compiler.GetObjectModule().GetCurrentSource(),
+			compiler.GetObjectModule().GetCurrentSource().GetBuffer(),
 			compiler.GetObjectModule().meta.GetDelegates()
 		);
@@ -167,6 +173,9 @@
 	);
 
-	//TypeDef情報を初期化
-	compiler.GetObjectModule().meta.GetTypeDefs().CollectTypeDefs();
+	//TypeDef情報を収集
+	ActiveBasic::Compiler::LexicalAnalyzer::CollectTypeDefs(
+		compiler.GetObjectModule().GetCurrentSource().GetBuffer(),
+		compiler.GetObjectModule().meta.GetTypeDefs()
+	);
 
 	/*
@@ -180,10 +189,14 @@
 
 	//定数情報を取得
-	GetConstInfo();
+	ActiveBasic::Compiler::LexicalAnalyzer::CollectConsts(
+		compiler.GetObjectModule().GetCurrentSource().GetBuffer(),
+		compiler.GetObjectModule().meta.GetGlobalConsts(),
+		compiler.GetObjectModule().meta.GetGlobalConstMacros()
+	);
 
 	//サブルーチン（ユーザー定義、DLL関数）の識別子、アドレスを取得
-	compiler.pCompilingClass = NULL;
+	compiler.SetCompilingClass( NULL );
 	ActiveBasic::Compiler::LexicalAnalyzer::CollectProcedures(
-		compiler.GetObjectModule().GetCurrentSource(),
+		compiler.GetObjectModule().GetCurrentSource().GetBuffer(),
 		compiler.GetObjectModule().meta.GetUserProcs(),
 		compiler.GetObjectModule().meta.GetDllProcs()
@@ -320,4 +333,8 @@
 
 
+	//"コンパイル中..."
+	compiler.messenger.Output(STRING_COMPILE_COMPILING);
+
+
 	//////////////////////
 	// グローバル実行領域
@@ -325,5 +342,5 @@
 
 	cp=-1;
-	UserProc::CompileStartForGlobalArea();
+	compiler.StartGlobalAreaCompile();
 
 	if( !compiler.IsDll() ){
@@ -434,8 +451,4 @@
 	}
 
-	//重複エラー情報管理のメモリを解放（グローバル領域用）
-	for(i=0;i<SynonymErrorNum;i++) HeapDefaultFree(SynonymErrorWords[i]);
-	HeapDefaultFree(SynonymErrorWords);
-
 
 	StepCompileProgress();
@@ -499,5 +512,7 @@
 	/////////////////////////////////////////////////////////////////
 
-	compiler.GetObjectModule().meta.GetClasses().GenerateVTables();
+	ActiveBasic::Compiler::VtblGenerator::GenerateVTablesForAllClasses(
+		compiler.GetObjectModule().meta.GetClasses()
+	);
 
 
@@ -1077,5 +1092,10 @@
 	////////////////////////////////////////
 	//仮想関数データテーブルスケジュール
-	compiler.GetObjectModule().meta.GetClasses().ActionVtblSchedule( ImageBase, MemPos_CodeSection, MemPos_DataSection );
+	ActiveBasic::Compiler::VtblGenerator::ActionVtblScheduleForAllClasses(
+		compiler.GetObjectModule().meta.GetClasses(),
+		ImageBase,
+		MemPos_CodeSection,
+		MemPos_DataSection
+	);
 
 
