Index: trunk/ab5.0/abdev/compiler_x64/Compile_Var.cpp
===================================================================
--- trunk/ab5.0/abdev/compiler_x64/Compile_Var.cpp	(revision 514)
+++ trunk/ab5.0/abdev/compiler_x64/Compile_Var.cpp	(revision 584)
@@ -209,5 +209,5 @@
 	////////////////////////////
 
-	const CMember *pMember = objClass.FindDynamicMember( VarName );
+	const Member *pMember = objClass.FindDynamicMember( VarName );
 	if( !pMember )
 	{
@@ -220,5 +220,5 @@
 
 	//アクセシビリティをチェック
-	if(&objClass==compiler.pCompilingClass){
+	if( compiler.IsCompilingClass() && &objClass == &compiler.GetCompilingClass() ){
 		//同一クラスオブジェクトの場合はプライベートアクセスを容認する
 		if(pMember->IsNoneAccess()){
@@ -412,10 +412,13 @@
 
 
-	if( UserProc::IsLocalAreaCompiling() ){
+	if( compiler.IsLocalAreaCompiling() ){
 		//////////////////
 		// ローカル変数
 		//////////////////
 
-		const Variable *pVar = UserProc::CompilingUserProc().GetLocalVars().BackSearch( LexicalAnalyzer::FullNameToSymbol( VarName ) );
+		const Variable *pVar = compiler.GetCompilingUserProc().GetLocalVars().BackSearch(
+			LexicalAnalyzer::FullNameToSymbol( VarName ),
+			compiler.codeGenerator.lexicalScopes.GetNowLevel()
+		);
 		if( pVar ){
 			//ポインタ変数の場合
@@ -470,6 +473,5 @@
 	}
 
-
-	if(compiler.pCompilingClass){
+	if( compiler.IsCompilingClass() ){
 		//////////////////////
 		// クラスメンバの参照
@@ -482,5 +484,5 @@
 			pRelativeVar->dwKind=VAR_DIRECTMEM;
 
-			resultType.SetType( DEF_OBJECT, compiler.pCompilingClass );
+			resultType.SetType( DEF_OBJECT, &compiler.GetCompilingClass() );
 			return true;
 		}
@@ -494,5 +496,5 @@
 			//クラス内の動的メンバを参照するとき（通常）
 
-			if( !compiler.pCompilingClass->HasDynamicMember( VarName ) )
+			if( !compiler.GetCompilingClass().HasDynamicMember( VarName ) )
 			{
 				goto NonClassMember;
@@ -502,9 +504,9 @@
 		//Const修飾子のメソッド内でメンバ書き込みアクセスが発生したとき
 		//（コンストラクタ、デストラクタ内を除く）
-		const CMethod *pMethod = compiler.GetObjectModule().meta.GetClasses().GetNowCompilingMethodInfo();
+		const CMethod *pMethod = &compiler.GetCompilingUserProc().GetMethod();
 		if( isWriteAccess &&
 			pMethod->IsConst() &&
-			compiler.pCompilingClass->IsCompilingConstructor() == false &&
-			compiler.pCompilingClass->IsCompilingDestructor() == false
+			compiler.GetCompilingClass().IsCompilingConstructor() == false &&
+			compiler.GetCompilingClass().IsCompilingDestructor() == false
 			){
 				compiler.errorMessenger.Output(131, NULL, cp );
@@ -518,5 +520,5 @@
 			isErrorEnabled,
 			isWriteAccess,
-			Type( DEF_OBJECT, *compiler.pCompilingClass ),
+			Type( DEF_OBJECT, compiler.GetCompilingClass() ),
 			variable,
 			pRelativeVar,
@@ -536,5 +538,5 @@
 
 		char temporary[VN_SIZE];
-		if( UserProc::IsLocalAreaCompiling() ){
+		if( compiler.IsLocalAreaCompiling() ){
 			GetNowStaticVarFullName(VarName,temporary);
 
@@ -578,8 +580,8 @@
 		}
 
-		if(compiler.pCompilingClass){
+		if( compiler.IsCompilingClass() ){
 			//自身のクラスから静的メンバを参照する場合
 			char temp2[VN_SIZE];
-			sprintf(temp2,"%s.%s",compiler.pCompilingClass->GetName().c_str(),VarName);
+			sprintf(temp2,"%s.%s",compiler.GetCompilingClass().GetName().c_str(),VarName);
 			pVar = compiler.GetObjectModule().meta.GetGlobalVars().Find( LexicalAnalyzer::FullNameToSymbol( temp2 ) );
 			if( pVar ){
@@ -592,5 +594,8 @@
 		/////////////////////
 
-		pVar = compiler.GetObjectModule().meta.GetGlobalVars().BackSearch( LexicalAnalyzer::FullNameToSymbol( VarName ) );
+		pVar = compiler.GetObjectModule().meta.GetGlobalVars().BackSearch(
+			LexicalAnalyzer::FullNameToSymbol( VarName ),
+			compiler.codeGenerator.lexicalScopes.GetNowLevel()
+		);
 		if( pVar ){
 			goto GlobalOk;
@@ -806,5 +811,5 @@
 
 			int i = 0;
-			BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
+			BOOST_FOREACH( Member *pMember, objClass.GetDynamicMembers() ){
 				if(InitBuf[i]=='\0'){
 					compiler.errorMessenger.Output(41,0,cp);
@@ -968,5 +973,5 @@
 
 			int i = 0;
-			BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
+			BOOST_FOREACH( Member *pMember, objClass.GetDynamicMembers() ){
 				if(InitBuf[i]=='\0'){
 					compiler.errorMessenger.Output(41,0,cp);
@@ -1100,5 +1105,5 @@
 void dim( char *VarName, const Subscripts &subscripts, const Type &type,const char *InitBuf,const char *ConstractParameter,DWORD dwFlags)
 {
-	if( UserProc::IsGlobalAreaCompiling() ){
+	if( compiler.IsGlobalAreaCompiling() ){
 		/////////////////////////
 		// グローバル変数
@@ -1112,5 +1117,5 @@
 		/////////////////
 
-		if( UserProc::CompilingUserProc().GetLocalVars().DuplicateCheck( LexicalAnalyzer::FullNameToSymbol( VarName ) ) ){
+		if( compiler.GetCompilingUserProc().GetLocalVars().DuplicateCheck( LexicalAnalyzer::FullNameToSymbol( VarName ), compiler.codeGenerator.lexicalScopes.GetNowLevel() ) ){
 			//２重定義のエラー
 			compiler.errorMessenger.Output(15,VarName,cp);
@@ -1120,5 +1125,12 @@
 		bool isConst = ( dwFlags & DIMFLAG_CONST ) ? true:false;
 
-		Variable *pVar = new Variable( VarName, type, isConst, false, ConstractParameter, false );
+		Variable *pVar = new Variable(
+			ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol( VarName ),
+			type,
+			isConst,
+			false,
+			ConstractParameter,
+			false
+		);
 
 		if( subscripts.size() > 0 ){
@@ -1136,5 +1148,5 @@
 
 		// 変数を追加
-		UserProc::CompilingUserProc().GetLocalVars().push_back( pVar );
+		compiler.GetCompilingUserProc().GetLocalVars().push_back( pVar );
 
 		//アラインメントを考慮
@@ -1153,5 +1165,5 @@
 				// 呼び出し側のオフセットズレを考慮する
 
-				if( 0 == ( UserProc::CompilingUserProc().RealParams().GetMemorySize() + PTR_SIZE/*ret分*/ ) % alignment ){
+				if( 0 == ( compiler.GetCompilingUserProc().RealParams().GetMemorySize() + PTR_SIZE /* ret分 */ ) % alignment ){
 					AllLocalVarSize += PTR_SIZE;
 				}
