Index: trunk/abdev/BasicCompiler64/MakePeHdr.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/MakePeHdr.cpp	(revision 263)
+++ trunk/abdev/BasicCompiler64/MakePeHdr.cpp	(revision 266)
@@ -105,5 +105,4 @@
 	extern HANDLE hHeap;
 	extern BOOL bDebugCompile;
-	extern BOOL bDll;
 	extern DWORD ImageBase;
 	extern int obp_AllocSize;
@@ -123,5 +122,5 @@
 
 	//エクスポート セクションを利用するかどうか
-	if(bDll) bUse_ExportSection=1;
+	if( compiler.IsDll() ) bUse_ExportSection=1;
 	else bUse_ExportSection=0;
 
@@ -129,7 +128,7 @@
 	//////////////////
 	// データテーブル
-	compiler.objectModule.dataTable.Clear();
+	compiler.GetObjectModule().dataTable.Clear();
 	if(bDebugCompile){
-		compiler.objectModule.dataTable.Add( (long)0x00000002 );
+		compiler.GetObjectModule().dataTable.Add( (long)0x00000002 );
 	}
 
@@ -155,10 +154,10 @@
 
 	//関数ポインタ情報を初期化
-	compiler.objectModule.meta.GetProcPointers().clear();
+	compiler.GetObjectModule().meta.GetProcPointers().clear();
 
 	// 名前空間情報を取得
 	NamespaceSupporter::CollectNamespaces(
-		Smoothie::Lexical::source.GetBuffer(),
-		compiler.objectModule.meta.GetNamespaces()
+		compiler.GetObjectModule().source.GetBuffer(),
+		compiler.GetObjectModule().meta.GetNamespaces()
 	);
 
@@ -166,8 +165,8 @@
 	//   CollectProcedures関数の中で参照されるオブジェクト名を事前に取得する。
 	//     ※オブジェクトの内容までは取得しない
-	compiler.objectModule.meta.GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source );
+	compiler.GetObjectModule().meta.GetClasses().CollectClassesForNameOnly( compiler.GetObjectModule().source );
 
 	//TypeDef情報を初期化
-	compiler.objectModule.meta.GetTypeDefs().Init();
+	compiler.GetObjectModule().meta.GetTypeDefs().Init();
 
 	//定数情報を取得
@@ -177,18 +176,18 @@
 	compiler.pCompilingClass = NULL;
 	CollectProcedures(
-		Smoothie::Lexical::source,
-		compiler.objectModule.meta.GetUserProcs(),
-		compiler.objectModule.meta.GetDllProcs()
+		compiler.GetObjectModule().source,
+		compiler.GetObjectModule().meta.GetUserProcs(),
+		compiler.GetObjectModule().meta.GetDllProcs()
 	);
 
 	// クラス情報を取得（※注 - CollectProceduresの後に呼び出す）
-	compiler.objectModule.meta.GetClasses().GetAllClassInfo();
+	compiler.GetObjectModule().meta.GetClasses().GetAllClassInfo();
 
 	// サブルーチン（ユーザー定義、DLL関数）のイテレータの準備
-	compiler.objectModule.meta.GetUserProcs().Iterator_Init();
-	compiler.objectModule.meta.GetDllProcs().Iterator_Init();
+	compiler.GetObjectModule().meta.GetUserProcs().Iterator_Init();
+	compiler.GetObjectModule().meta.GetDllProcs().Iterator_Init();
 
 /*
-	if( !compiler.objectModule.meta.WriteXml( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
+	if( !compiler.GetObjectModule().meta.WriteXml( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
 	{
 		MessageBox(0,"XML書き込みに失敗","test",0);
@@ -200,5 +199,5 @@
 	}
 
-	if( !compiler.objectModule.meta.WriteBinaly( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
+	if( !compiler.GetObjectModule().meta.WriteBinaly( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
 	{
 		MessageBox(0,"バイナリ書き込みに失敗","test",0);
@@ -209,5 +208,5 @@
 		MessageBox(0,"バイナリ読み込みに失敗","test",0);
 	}
-	if( !compiler.objectModule.meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
+	if( !compiler.GetObjectModule().meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
 	{
 		MessageBox(0,"バイナリ書き込みに失敗","test",0);
@@ -218,5 +217,5 @@
 		MessageBox(0,"バイナリ読み込みに失敗","test",0);
 	}
-	compiler.objectModule.meta = (*pTempMeta);*/
+	compiler.GetObjectModule().meta = (*pTempMeta);*/
 
 
@@ -353,5 +352,5 @@
 	UserProc::CompileStartForGlobalArea();
 
-	if(!bDll){
+	if( !compiler.IsDll() ){
 		// 名前空間が初期化されているかをチェック
 		if( compiler.GetNamespaceSupporter().GetLivingNamespaceScopes().size() ){
@@ -379,5 +378,5 @@
 
 		// コード生成対象を選択
-		compiler.codeGenerator.Select( compiler.objectModule.globalNativeCode );
+		compiler.codeGenerator.Select( compiler.GetObjectModule().globalNativeCode );
 
 		trace_for_sourcecodestep( "★★★ グローバル領域のコンパイルを開始" );
@@ -402,5 +401,5 @@
 
 		//クラスに属する静的メンバを定義
-		compiler.objectModule.meta.GetClasses().InitStaticMember();
+		compiler.GetObjectModule().meta.GetClasses().InitStaticMember();
 
 		//グローバル実行領域をコンパイル開始
@@ -506,5 +505,5 @@
 
 	vector<ObjectModule *> masterObjectModules;
-	masterObjectModules.push_back( &compiler.objectModule );
+	masterObjectModules.push_back( &compiler.GetObjectModule() );
 	compiler.linker.Link( masterObjectModules );
 
@@ -520,8 +519,8 @@
 	// 使用するDLL関数のチェック
 	////////////////////////////////
-	compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
-	while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
+	compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset();
+	while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() )
 	{
-		const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
+		const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext();
 
 		if( !pDllProc->IsUsing() ){
@@ -594,8 +593,8 @@
 			//辞書順にサーチ
 			temporary[0]=0;
-			compiler.objectModule.meta.GetUserProcs().Iterator_Reset();
-			while( compiler.objectModule.meta.GetUserProcs().Iterator_HasNext() )
+			compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
+			while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
 			{
-				pUserProc = compiler.objectModule.meta.GetUserProcs().Iterator_GetNext();
+				pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
 				if(pUserProc->IsExport()){
 					if(temporary[0]=='\0'){
@@ -698,8 +697,8 @@
 	int ImportDllNum=0;
 
-	compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
-	while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
+	compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset();
+	while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() )
 	{
-		const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
+		const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext();
 
 		if( !pDllProc->IsUsing() ){
@@ -737,8 +736,8 @@
 		pImportDescriptor[i].Name=i*0x10;	//※すぐ下で再計算
 
-		compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
-		while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
+		compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset();
+		while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() )
 		{
-			const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
+			const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext();
 
 			if( !pDllProc->IsUsing() ){
@@ -775,8 +774,8 @@
 	pHintTable=(char *)HeapAlloc(hHeap,0,HintAllocSize);
 	for(i=0,i5=0;i<ImportDllNum;i++){
-		compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
-		while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
+		compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset();
+		while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() )
 		{
-			DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
+			DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext();
 
 			if( !pDllProc->IsUsing() ){
@@ -815,5 +814,5 @@
 
 
-	if(bDll){
+	if( compiler.IsDll() ){
 		//DLLの場合はリロケーション情報を仮生成
 		//※正式な生成は各セクションのメモリ上のサイズが決定してから再度行う。
@@ -826,5 +825,5 @@
 	//（デバッグ情報で利用される）
 	extern int AllInitGlobalVarSize;
-	BOOST_FOREACH( Variable *pVar, compiler.objectModule.meta.GetGlobalVars() ){
+	BOOST_FOREACH( Variable *pVar, compiler.GetObjectModule().meta.GetGlobalVars() ){
 		if(pVar->GetOffsetAddress()&0x80000000){
 			pVar->SetOffsetAddress(
@@ -839,22 +838,4 @@
 	// デバッグセクションを生成
 	////////////////////////////////////
-
-	//機械語コードとBasicコードの関係を整理
-	extern SourceLines oldSourceLines;
-	int MinObp,MaxObp;
-	SourceLines tempSourceLines;
-	MaxObp=0;
-	while(1){
-		for(i3=0,MinObp=0x0FFFFFFF;i3<oldSourceLines.size();i3++){
-			if(oldSourceLines[i3].GetNativeCodePos()<MinObp&&MaxObp<oldSourceLines[i3].GetNativeCodePos()){
-				MinObp=oldSourceLines[i3].GetNativeCodePos();
-				i4=i3;
-			}
-		}
-		if(MinObp==0x0FFFFFFF) break;
-		tempSourceLines.push_back( oldSourceLines[i4] );
-		MaxObp=tempSourceLines.back().GetNativeCodePos();
-	}
-	oldSourceLines = tempSourceLines;
 
 	//デバッグセクションを生成
@@ -903,6 +884,6 @@
 
 	//データセクションのファイル上のサイズ
-	if(compiler.objectModule.dataTable.GetSize()%FILE_ALIGNMENT) FileSize_DataSection=compiler.objectModule.dataTable.GetSize()+(FILE_ALIGNMENT-compiler.objectModule.dataTable.GetSize()%FILE_ALIGNMENT);
-	else FileSize_DataSection=compiler.objectModule.dataTable.GetSize();
+	if(compiler.GetObjectModule().dataTable.GetSize()%FILE_ALIGNMENT) FileSize_DataSection=compiler.GetObjectModule().dataTable.GetSize()+(FILE_ALIGNMENT-compiler.GetObjectModule().dataTable.GetSize()%FILE_ALIGNMENT);
+	else FileSize_DataSection=compiler.GetObjectModule().dataTable.GetSize();
 	if(FileSize_DataSection) bUse_DataSection=1;
 	else bUse_DataSection=0;
@@ -1065,8 +1046,8 @@
 			LookupSize;			//ルックアップテーブル
 
-		compiler.objectModule.meta.GetDllProcs().Iterator_Reset();
-		while( compiler.objectModule.meta.GetDllProcs().Iterator_HasNext() )
+		compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset();
+		while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() )
 		{
-			const DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().Iterator_GetNext();
+			const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext();
 
 			if( !pDllProc->IsUsing() ){
@@ -1086,5 +1067,5 @@
 	////////////////////////////////////////
 	//仮想関数データテーブルスケジュール
-	compiler.objectModule.meta.GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);
+	compiler.GetObjectModule().meta.GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);
 
 
@@ -1130,5 +1111,5 @@
 
 
-	if(bDll){
+	if( compiler.IsDll() ){
 		//DLLの場合はリロケーション情報を生成
 		pobj_Reloc->ResetRelocBuffer();
@@ -1269,5 +1250,5 @@
 	ImagePeHdr.FileHeader.NumberOfSymbols=		0x00000000;
 	ImagePeHdr.FileHeader.SizeOfOptionalHeader=	IMAGE_SIZEOF_NT_OPTIONAL64_HEADER;
-	if(bDll){
+	if( compiler.IsDll() ){
 		ImagePeHdr.FileHeader.Characteristics=	IMAGE_FILE_EXECUTABLE_IMAGE|
 												IMAGE_FILE_DLL|
@@ -1286,5 +1267,5 @@
 	ImagePeHdr.OptionalHeader.SizeOfInitializedData=FileSize_DataSection;	//データサイズ（.dataのセッションサイズ）
 	ImagePeHdr.OptionalHeader.SizeOfUninitializedData=0;					//未初期化データのサイズ（なし）
-	if(bDll){
+	if( compiler.IsDll() ){
 		if(DllMain_EntryPoint==-1)
 			ImagePeHdr.OptionalHeader.AddressOfEntryPoint=0;
@@ -1636,5 +1617,5 @@
 	if(bUse_DataSection){
 		//データ テーブル
-		WriteFile(hFile,compiler.objectModule.dataTable.GetPtr(),compiler.objectModule.dataTable.GetSize(),(DWORD *)&i2,NULL);
+		WriteFile(hFile,compiler.GetObjectModule().dataTable.GetPtr(),compiler.GetObjectModule().dataTable.GetSize(),(DWORD *)&i2,NULL);
 		i+=i2;
 	}
@@ -1748,4 +1729,4 @@
 
 	//クラスに関するメモリを解放
-	compiler.objectModule.meta.GetClasses().Clear();
+	compiler.GetObjectModule().meta.GetClasses().Clear();
 }
