Index: trunk/ab5.0/abdev/BasicCompiler_Common/src/Class.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler_Common/src/Class.cpp	(revision 533)
+++ trunk/ab5.0/abdev/BasicCompiler_Common/src/Class.cpp	(revision 536)
@@ -942,5 +942,5 @@
 
 		// コンパイル中クラスとしてセット
-		compiler.pCompilingClass = &objClass;
+		compiler.SetCompilingClass( &objClass );
 
 		const EnumInfo *pEnumInfo = NULL;
@@ -971,5 +971,5 @@
 		}
 
-		compiler.pCompilingClass = NULL;
+		compiler.SetCompilingClass( NULL );
 	}
 
Index: trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp	(revision 533)
+++ trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp	(revision 536)
@@ -145,13 +145,13 @@
 
 	// 型パラメータ
-	if( this->pCompilingClass )
+	if( this->IsCompilingClass() )
 	{
 		// クラスに属するメソッドをコンパイルしているとき
-		int formalTypeIndex = this->pCompilingClass->GetFormalGenericTypeParameterIndex( typeName );
+		int formalTypeIndex = this->GetCompilingClass().GetFormalGenericTypeParameterIndex( typeName );
 		if( formalTypeIndex != -1 )
 		{
 			// コンパイル中クラスにおけるジェネリクス用の型パラメータのとき
 			type.SetBasicType( DEF_TYPE_PARAMETER );
-			type.SetClassPtr( &this->pCompilingClass->GetFormalGenericTypes()[formalTypeIndex].GetType().GetClass() );
+			type.SetClassPtr( &this->GetCompilingClass().GetFormalGenericTypes()[formalTypeIndex].GetType().GetClass() );
 			type.SetFormalTypeName( typeName );
 			type.SetFormalTypeIndex( formalTypeIndex );
@@ -211,8 +211,22 @@
 }
 
+void Compiler::ClearCompilingUserProcAndClass()
+{
+	this->pCompilingUserProc = NULL;
+	this->pCompilingClass = NULL;
+}
+
+void Compiler::SetCompilingClass( const CClass *pClass )
+{
+	this->pCompilingClass = pClass;
+}
+
 void Compiler::StartProcedureCompile( const UserProc *pUserProc )
 {
+	//コンパイル中の関数
+	this->pCompilingUserProc = pUserProc;
+
 	//コンパイル中の関数が属するクラス
-	this->pCompilingClass = pUserProc->GetParentClassPtr();
+	this->SetCompilingClass( pUserProc->GetParentClassPtr() );
 
 	//コンパイルスタートをクラス管理クラスに追加
@@ -233,3 +247,33 @@
 void Compiler::FinishProcedureCompile()
 {
-}
+	this->pCompilingUserProc = NULL;
+	this->pCompilingClass = NULL;
+}
+
+bool Compiler::IsGlobalAreaCompiling()
+{
+	return ( pCompilingUserProc == NULL );
+}
+const UserProc &Compiler::GetCompilingUserProc()
+{
+	if( !this->IsGlobalAreaCompiling() )
+	{
+		return *pCompilingUserProc;
+	}
+
+	throw;
+}
+
+bool Compiler::IsCompilingClass()
+{
+	return ( pCompilingClass != NULL );
+}
+const CClass &Compiler::GetCompilingClass()
+{
+	if( this->IsCompilingClass() )
+	{
+		return *pCompilingClass;
+	}
+
+	throw;
+}
Index: trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp	(revision 533)
+++ trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp	(revision 536)
@@ -391,5 +391,7 @@
 
 	// 呼び出し元でコンパイル中のクラスポインタをバックアップ
-	const CClass *pBackCompilingClass = compiler.pCompilingClass;
+	const CClass *pBackCompilingClass = compiler.IsCompilingClass()
+		? &compiler.GetCompilingClass()
+		: NULL;
 
 	for(i=0;;i++){
@@ -464,5 +466,5 @@
 			if(!pobj_c) continue;
 
-			compiler.pCompilingClass = pobj_c;
+			compiler.SetCompilingClass( pobj_c );
 
 			if(lpszInheritsClass){
@@ -688,5 +690,5 @@
 			if(!pobj_c) continue;
 
-			compiler.pCompilingClass = pobj_c;
+			compiler.SetCompilingClass( pobj_c );
 
 			if(lpszInheritsClass){
@@ -981,5 +983,5 @@
 
 	// 呼び出し元でコンパイル中のクラスポインタを元に戻す
-	compiler.pCompilingClass = pBackCompilingClass;
+	compiler.SetCompilingClass( pBackCompilingClass );
 
 	// 名前空間を元に戻す
