Index: trunk/ab5.0/abdev/compiler_x64/Compile_ProcOp.cpp
===================================================================
--- trunk/ab5.0/abdev/compiler_x64/Compile_ProcOp.cpp	(revision 482)
+++ trunk/ab5.0/abdev/compiler_x64/Compile_ProcOp.cpp	(revision 584)
@@ -27,6 +27,7 @@
 		}
 
-		const UserProc *pBackUserProc = &UserProc::CompilingUserProc();
-		UserProc::CompileStartForGlobalArea();
+		const UserProc *pBackUserProc;
+		pBackUserProc = &compiler.GetCompilingUserProc();
+		compiler.StartGlobalAreaCompile();
 
 		int BackCp;
@@ -51,5 +52,7 @@
 
 		//クラスに属する静的メンバを定義
-		compiler.GetObjectModule().meta.GetClasses().InitStaticMember();
+		ActiveBasic::Compiler::ProcedureGenerator::Generate_InitStaticMember(
+			compiler.GetObjectModule().meta.GetClasses()
+		);
 
 		GetGlobalDataForDll();
@@ -61,5 +64,5 @@
 		compiler.codeGenerator.opfix( pStackFramePertialSchedule, pobj_sf->GetFrameSize(0) );
 
-		UserProc::CompileStartForUserProc( pBackUserProc );
+		compiler.SetCompilingUserProc( pBackUserProc );
 		cp=BackCp;
 
@@ -103,11 +106,11 @@
 		compiler.codeGenerator.op_sub_rsp(0x8);
 
-
-		const UserProc *pBackUserProc = &UserProc::CompilingUserProc();
-		UserProc::CompileStartForGlobalArea();
+		const UserProc *pBackUserProc;
+		pBackUserProc = &compiler.GetCompilingUserProc();
+		compiler.StartGlobalAreaCompile();
 
 		compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
 
-		UserProc::CompileStartForUserProc( pBackUserProc );
+		compiler.SetCompilingUserProc( pBackUserProc );
 
 
@@ -127,5 +130,7 @@
 		&& userProc.GetParentClass().GetName() == "_System_TypeBase" )
 	{
-		compiler.GetObjectModule().meta.GetClasses().Compile_System_InitializeUserTypes();
+		ActiveBasic::Compiler::ProcedureGenerator::Generate_System_InitializeUserTypes(
+			compiler.GetObjectModule().meta.GetClasses()
+		);
 	}
 	else if( userProc.GetName() == "InitializeUserTypesForBaseType"
@@ -133,5 +138,7 @@
 		&& userProc.GetParentClass().GetName() == "_System_TypeBase" )
 	{
-		compiler.GetObjectModule().meta.GetClasses().Compile_System_InitializeUserTypesForBaseType();
+		ActiveBasic::Compiler::ProcedureGenerator::Generate_System_InitializeUserTypesForBaseType(
+			compiler.GetObjectModule().meta.GetClasses()
+		);
 	}
 	else if( userProc.GetName() == "RegisterGlobalRoots"
@@ -148,6 +155,6 @@
 		UserProc::pGlobalProc = &userProc;
 
-		const UserProc *pBackUserProc = &UserProc::CompilingUserProc();
-		UserProc::CompileStartForGlobalArea();
+		const UserProc *pBackUserProc = &compiler.GetCompilingUserProc();
+		compiler.StartGlobalAreaCompile();
 
 		int BackCp = cp;
@@ -155,5 +162,7 @@
 
 		//クラスに属する静的メンバを定義
-		compiler.GetObjectModule().meta.GetClasses().InitStaticMember();
+		ActiveBasic::Compiler::ProcedureGenerator::Generate_InitStaticMember(
+			compiler.GetObjectModule().meta.GetClasses()
+		);
 
 		//グローバル実行領域をコンパイル開始
@@ -173,5 +182,5 @@
 		}
 
-		UserProc::CompileStartForUserProc( pBackUserProc );
+		compiler.SetCompilingUserProc( pBackUserProc );
 		cp=BackCp;
 	}
@@ -227,21 +236,5 @@
 	else bDebugSupportProc=0;
 
-	//コンパイル中の関数が属するクラス
-	compiler.pCompilingClass=pUserProc->GetParentClassPtr();
-
-	//コンパイルスタートをクラス管理クラスに追加
-	compiler.GetObjectModule().meta.GetClasses().StartCompile( pUserProc );
-
-	//コンパイル中の関数
-	UserProc::CompileStartForUserProc( pUserProc );
-
-	// コンパイル中の関数が属する名前空間
-	compiler.GetNamespaceSupporter().SetLivingNamespaceScopes( pUserProc->GetNamespaceScopes() );
-
-	// コンパイル中の関数でImportsされている名前空間
-	compiler.GetNamespaceSupporter().SetImportedNamespaces( pUserProc->GetImportedNamespaces() );
-
-	// コード生成対象を選択
-	compiler.codeGenerator.Select( (const_cast<UserProc *>(pUserProc))->GetNativeCode() );
+	compiler.StartProcedureCompile( pUserProc );
 
 	if(pUserProc->IsSystem()){
@@ -290,10 +283,4 @@
 	WithInfo.num=0;
 
-	//重複エラー情報管理のメモリを確保
-	extern char **SynonymErrorWords;
-	extern int SynonymErrorNum;
-	SynonymErrorNum=0;
-	SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1);
-
 	//Continueアドレスを初期化
 	compiler.codeGenerator.ClearContinueArea();
@@ -315,5 +302,12 @@
 		Parameter &param = *pUserProc->RealParams()[i3];
 
-		Variable *pVar = new Variable( param.GetVarName(), param, false, param.IsRef(), "", false );
+		Variable *pVar = new Variable(
+			ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol( param.GetVarName().c_str() ),
+			param,
+			false,
+			param.IsRef(),
+			"",
+			false
+		);
 
 		if( param.IsArray() ){
@@ -463,6 +457,6 @@
 	}
 
-	if(compiler.pCompilingClass){
-		if( pUserProc->GetName() == compiler.pCompilingClass->GetName() ){
+	if( compiler.IsCompilingClass() ){
+		if( pUserProc->GetName() == compiler.GetCompilingClass().GetName() ){
 			////////////////////////////////////
 			// コンストラクタをコンパイルするとき
@@ -470,11 +464,11 @@
 
 			//コンストラクタのコンパイル開始を通知
-			compiler.pCompilingClass->NotifyStartConstructorCompile();
+			compiler.GetCompilingClass().NotifyStartConstructorCompile();
 
 			//基底クラスかどうかの識別
 			//（継承元がインターフェイスの場合も基底クラスと見なす）
 			BOOL bThisIsSuperClass;
-			if( !compiler.pCompilingClass->HasSuperClass() ) bThisIsSuperClass=1;
-			else if( compiler.pCompilingClass->GetSuperClass().GetConstructorMethod() == NULL ){
+			if( !compiler.GetCompilingClass().HasSuperClass() ) bThisIsSuperClass=1;
+			else if( compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod() == NULL ){
 				//インターフェイスを継承したときはコンストラクタを持たない
 				bThisIsSuperClass=1;
@@ -495,5 +489,5 @@
 					temporary[i4]=basbuf[i3];
 				}
-				if( compiler.pCompilingClass->GetSuperClass().GetName() == temporary ){
+				if( compiler.GetCompilingClass().GetSuperClass().GetName() == temporary ){
 					//基底クラスのコンストラクタを呼び出す
 					cp=i3;
@@ -512,6 +506,6 @@
 					Type dummyType;
 					CallProc( PROC_DEFAULT
-						, &compiler.pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc()
-						, compiler.pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str()
+						, &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc()
+						, compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str()
 						, temporary
 						, Type()		// baseTypeはなし
@@ -522,5 +516,5 @@
 					//基底クラスのコンストラクタを暗黙的に呼び出す
 					Opcode_CallProc("",
-						&compiler.pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc(),
+						&compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc(),
 						0,
 						"");
@@ -532,5 +526,5 @@
 
 			//デストラクタのコンパイル開始を通知
-			compiler.pCompilingClass->NotifyStartDestructorCompile();
+			compiler.GetCompilingClass().NotifyStartDestructorCompile();
 		}
 	}
@@ -558,11 +552,11 @@
 	//////////////////////////////////////////
 
-	if( compiler.pCompilingClass ){
-
-		if( compiler.pCompilingClass->IsCompilingConstructor() ){
+	if( compiler.IsCompilingClass() ){
+
+		if( compiler.GetCompilingClass().IsCompilingConstructor() ){
 			// コンストラクタをコンパイルしていたとき
 
 			// コンストラクタのコンパイルが完了したことを通知
-			compiler.pCompilingClass->NotifyFinishConstructorCompile();
+			compiler.GetCompilingClass().NotifyFinishConstructorCompile();
 		}
 		else if( pUserProc->IsDestructor() ){
@@ -572,11 +566,11 @@
 
 			// デストラクタのコンパイルが完了したことを通知
-			compiler.pCompilingClass->NotifyFinishDestructorCompile();
-
-			if( compiler.pCompilingClass->HasSuperClass() ){
+			compiler.GetCompilingClass().NotifyFinishDestructorCompile();
+
+			if( compiler.GetCompilingClass().HasSuperClass() ){
 				/* サブクラスのデストラクタをコンパイルしているときは、
 					基底クラスのデストラクタを呼び出す */
 
-				const CMethod *method = compiler.pCompilingClass->GetSuperClass().GetDestructorMethod();
+				const CMethod *method = compiler.GetCompilingClass().GetSuperClass().GetDestructorMethod();
 				if( method ){
 					Opcode_CallProc("",
@@ -705,6 +699,7 @@
 
 
-	//重複エラー情報管理のメモリを解放
-	for(i3=0;i3<SynonymErrorNum;i3++) HeapDefaultFree(SynonymErrorWords[i3]);
-	HeapDefaultFree(SynonymErrorWords);
+	compiler.FinishProcedureCompile();
+
+
+	//ローカル変数のネーム情報は後に解放する
 }
