Index: trunk/abdev/BasicCompiler_Common/Subroutine.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/Subroutine.cpp	(revision 206)
+++ trunk/abdev/BasicCompiler_Common/Subroutine.cpp	(revision 209)
@@ -277,157 +277,5 @@
 }
 
-
-void AddDeclareData(const NamespaceScopes &namespaceScopes, char *buffer,int nowLine){
-	extern HANDLE hHeap;
-	int i2;
-
-	int i=0;
-
-	//Sub/Function
-	Procedure::Kind kind = Procedure::Sub;
-	if(buffer[i]==ESC_SUB){
-	}
-	else if(buffer[i]==ESC_FUNCTION){
-		kind = Procedure::Function;
-	}
-	else{
-		SetError(1,NULL,nowLine);
-		return;
-	}
-	i++;
-
-	//プロシージャ名
-	char procName[VN_SIZE];
-	bool isCdecl = false;
-	for(i2=0;;i++,i2++){
-		if(buffer[i]==1&&buffer[i+1]==ESC_CDECL){
-			isCdecl = true;
-
-			i+=2;
-			procName[i2]=0;
-			break;
-		}
-		if(buffer[i]==','){
-			procName[i2]=0;
-			break;
-		}
-		if(buffer[i]=='\0'){
-			SetError(1,NULL,nowLine);
-			return;
-		}
-		procName[i2]=buffer[i];
-	}
-	i++;
-
-	//ユーザー定義関数との重複チェック
-	if(GetSubHash(procName)){
-		SetError(15,procName,nowLine);
-		return;
-	}
-
-
-	//ライブラリ
-	char dllFileName[MAX_PATH];
-	i = GetOneParameter( buffer, i, dllFileName );
-	Type resultType;
-	_int64 i64data;
-	if( !StaticCalculation( true, dllFileName, 0, &i64data, resultType ) ){
-		return;
-	}
-	if( resultType.GetBasicType() != typeOfPtrChar ){
-		SetError(1,NULL,nowLine);
-		return;
-	}
-	lstrcpy( dllFileName, (char *)i64data );
-	CharUpper(dllFileName);
-	if(!strstr(dllFileName,".")){
-		lstrcat(dllFileName,".DLL");
-		if(lstrlen(dllFileName)>=16){
-			SetError(7,NULL,nowLine);
-			return;
-		}
-	}
-
-	//エイリアス
-	char alias[VN_SIZE];
-	i = GetOneParameter( buffer, i, alias );
-	if( alias[0] ){
-		if( !StaticCalculation( true, alias, 0, &i64data, resultType ) ){
-			return;
-		}
-		if( resultType.GetBasicType() != typeOfPtrChar ){
-			SetError(1,NULL,nowLine);
-			return;
-		}
-		lstrcpy( alias, (char *)i64data );
-	}
-	else{
-		//省略されたときは関数名
-		lstrcpy( alias, procName );
-	}
-
-
-	// オブジェクトを生成
-	DllProc *pDllProc = new DllProc( namespaceScopes, procName, kind, isCdecl, dllFileName, alias );
-
-	// パラメータを解析
-	// ※第1パラメータにに指定するデータの例："( s As String ) As String"
-	pDllProc->SetParamsAndReturnType( buffer + i, nowLine );
-
-	// パラメータのエラーチェック
-	BOOST_FOREACH( const Parameter *pParam, pDllProc->Params() ){
-		if( pParam->IsObject() ){
-			SetError(25,pParam->GetVarName(),nowLine);
-		}
-		if( !pParam->IsRef() ){
-			if( pParam->IsStruct() ){
-				SetError(28,pParam->GetVarName(),nowLine);
-			}
-		}
-	}
-
-	//戻り値のエラーチェック
-	if( pDllProc->IsFunction() ){
-		// Function定義
-
-		if( pDllProc->ReturnType().IsObject() ){
-			// DLL関数ではオブジェクトを戻り値にできない
-			SetError(40,pDllProc->GetName(),nowLine);
-		}
-	}
-
-
-	/////////////////////////////////
-	// 格納位置を計算してppDeclareHashにセット
-	/////////////////////////////////
-
-	//ハッシュ値を取得
-	int key;
-	key=hash_default(procName);
-
-	extern DllProc **ppDeclareHash;
-	if(ppDeclareHash[key]){
-		DllProc *pTempProc = ppDeclareHash[key];
-		while(1){
-			if( pTempProc->IsEqualSymbol( pDllProc->GetNamespaceScopes(), pDllProc->GetName() ) ){
-				//重複エラー
-				SetError(15,procName,nowLine);
-				return;
-			}
-
-			if(pTempProc->pNextData==0){
-				pTempProc->pNextData=pDllProc;
-				break;
-			}
-			pTempProc=pTempProc->pNextData;
-		}
-		pTempProc=pTempProc->pNextData;
-	}
-	else{
-		ppDeclareHash[key]=pDllProc;
-	}
-}
-
-void UserProcs::CollectUserProcs( const BasicSource &source, UserProcs &userProcs )
+void CollectProcedures( const BasicSource &source, UserProcs &userProcs, DllProcs &dllProcs )
 {
 	extern HANDLE hHeap;
@@ -435,10 +283,9 @@
 	char temporary[8192];
 
-	//Declare（DLL関数）情報を初期化
-	extern DllProc **ppDeclareHash;
-	ppDeclareHash=(DllProc **)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,MAX_HASH*sizeof(DllProc *));
-
 	//サブルーチン（ユーザー定義）情報を初期化
 	userProcs.Clear();
+
+	//Declare（DLL関数）情報を初期化
+	dllProcs.Clear();
 
 	// 名前空間管理
@@ -522,5 +369,5 @@
 				if(source[i]=='\0') break;
 			}
-			AddDeclareData(namespaceScopes,temporary,i);
+			dllProcs.Add(namespaceScopes,temporary,i);
 
 			continue;
@@ -600,15 +447,4 @@
 	delete pDllProc;
 }
-void DeleteDeclareInfo(void){
-	//DLL情報を解放
-	extern DllProc **ppDeclareHash;
-	int i;
-	for(i=0;i<MAX_HASH;i++){
-		if(!ppDeclareHash[i]) continue;
-
-		Delete_di(ppDeclareHash[i]);
-	}
-	HeapDefaultFree(ppDeclareHash);
-}
 
 bool IsNeedProcCompile(){
