Index: trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp	(revision 723)
+++ trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp	(revision 726)
@@ -8,4 +8,6 @@
 #endif
 
+#include <hash_set>
+
 using namespace ActiveBasic::Compiler;
 
@@ -167,57 +169,29 @@
 
 class CLoopRefCheck{
-	char **names;
-	int num;
-	void init(){
-		int i;
-		for(i=0;i<num;i++){
-			free(names[i]);
-		}
-		free(names);
-	}
+	stdext::hash_set<std::string> names;
+
 public:
 	CLoopRefCheck()
 	{
-		names=(char **)malloc(1);
-		num=0;
 	}
 	~CLoopRefCheck()
 	{
-		init();
-	}
-	void add(const char *lpszInheritsClass)
-	{
-		names=(char **)realloc(names,(num+1)*sizeof(char *));
-		names[num]=(char *)malloc(lstrlen(lpszInheritsClass)+1);
-		lstrcpy(names[num],lpszInheritsClass);
-		num++;
-	}
-	void del(const char *lpszInheritsClass)
-	{
-		int i;
-		for(i=0;i<num;i++){
-			if(lstrcmp(names[i],lpszInheritsClass)==0){
-				free(names[i]);
-				break;
-			}
-		}
-		if(i!=num){
-			num--;
-			for(;i<num;i++){
-				names[i]=names[i+1];
-			}
-		}
-	}
-	BOOL check(const CClass &inheritsClass) const
+	}
+	void add(const std::string &lpszInheritsClass)
+	{
+		names.insert(lpszInheritsClass);
+	}
+	void del(const std::string &lpszInheritsClass)
+	{
+		names.erase(lpszInheritsClass);
+	}
+	bool check(const CClass &inheritsClass) const
 	{
 		//ループ継承チェック
-		int i;
-		for(i=0;i<num;i++){
-			if( inheritsClass.GetName() == names[i] ){
-				return 1;
-			}
-		}
-		return 0;
-	}
+		return names.find(inheritsClass.GetName()) != names.end();
+	}
+private:
+	CLoopRefCheck(const CLoopRefCheck&);
+	CLoopRefCheck& operator =(const CLoopRefCheck&);
 };
 CLoopRefCheck *pobj_LoopRefCheck;
@@ -243,5 +217,5 @@
 			}
 
-			pobj_LoopRefCheck->add(objClass.GetName().c_str());
+			pobj_LoopRefCheck->add(objClass.GetName());
 
 			bool tempResult = MemberVar_LoopRefCheck(pMember->GetType().GetClass());
@@ -251,5 +225,5 @@
 			}
 
-			pobj_LoopRefCheck->del(objClass.GetName().c_str());
+			pobj_LoopRefCheck->del(objClass.GetName());
 		}
 	}
@@ -403,5 +377,5 @@
 				// インターフェイスが未解析のとき
 				LexicalAnalyzer::LookaheadClass(
-					pInterface->GetClass().GetName().c_str(),
+					pInterface->GetClass().GetName(),
 					compiler.GetObjectModule().meta.GetClasses()
 				);
@@ -494,5 +468,5 @@
 				//継承先が読み取られていないとき
 				LexicalAnalyzer::LookaheadClass(
-					pInheritsClass->GetName().c_str(),
+					pInheritsClass->GetName(),
 					compiler.GetObjectModule().meta.GetClasses()
 				);
@@ -526,5 +500,5 @@
 			//継承先が読み取られていないとき
 			LexicalAnalyzer::LookaheadClass(
-				pObjectClass->GetName().c_str(),
+				pObjectClass->GetName(),
 				compiler.GetObjectModule().meta.GetClasses()
 			);
@@ -652,5 +626,5 @@
 			// インターフェイスが未解析のとき
 			LexicalAnalyzer::LookaheadClass(
-				pInterfaceClass->GetName().c_str(),
+				pInterfaceClass->GetName(),
 				compiler.GetObjectModule().meta.GetClasses()
 			);
@@ -1256,5 +1230,5 @@
 							if(pobj_c->GetDynamicMembers().back()->GetType().IsStruct()){
 								//循環参照のチェック
-								pobj_LoopRefCheck->add(pobj_c->GetName().c_str());
+								pobj_LoopRefCheck->add(pobj_c->GetName());
 								if(!MemberVar_LoopRefCheck(pobj_c->GetDynamicMembers().back()->GetType().GetClass())){
 									//エラー回避
@@ -1262,5 +1236,5 @@
 									type.SetBasicType( DEF_PTR_VOID );
 								}
-								pobj_LoopRefCheck->del(pobj_c->GetName().c_str());
+								pobj_LoopRefCheck->del(pobj_c->GetName());
 							}
 						}
@@ -1340,8 +1314,8 @@
 }
 
-void LexicalAnalyzer::LookaheadClass( const char *className, Classes &classes )
+void LexicalAnalyzer::LookaheadClass( const std::string &className, Classes &classes )
 {
 	pobj_LoopRefCheck->add( className );
-	GetClass_recur( className, classes );
+	GetClass_recur( className.c_str(), classes );
 	pobj_LoopRefCheck->del( className );
 }
