Index: trunk/abdev/BasicCompiler32/MakePeHdr.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 263)
+++ trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 265)
@@ -146,7 +146,7 @@
 	//////////////////
 	// データテーブル
-	compiler.objectModule.dataTable.Clear();
+	compiler.GetObjectModule().dataTable.Clear();
 	if(bDebugCompile){
-		compiler.objectModule.dataTable.Add( (long)0x00000002 );
+		compiler.GetObjectModule().dataTable.Add( (long)0x00000002 );
 	}
 
@@ -172,10 +172,10 @@
 
 	//関数ポインタ情報を初期化
-	compiler.objectModule.meta.GetProcPointers().clear();
+	compiler.GetObjectModule().meta.GetProcPointers().clear();
 
 	// 名前空間情報を取得
 	NamespaceSupporter::CollectNamespaces(
 		Smoothie::Lexical::source.GetBuffer(),
-		compiler.objectModule.meta.GetNamespaces()
+		compiler.GetObjectModule().meta.GetNamespaces()
 	);
 
@@ -183,8 +183,8 @@
 	//   CollectProcedures関数の中で参照されるオブジェクト名を事前に取得する。
 	//     ※オブジェクトの内容までは取得しない
-	compiler.objectModule.meta.GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source );
+	compiler.GetObjectModule().meta.GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source );
 
 	//TypeDef情報を初期化
-	compiler.objectModule.meta.GetTypeDefs().Init();
+	compiler.GetObjectModule().meta.GetTypeDefs().Init();
 
 	//定数情報を取得
@@ -195,17 +195,17 @@
 	CollectProcedures(
 		Smoothie::Lexical::source,
-		compiler.objectModule.meta.GetUserProcs(),
-		compiler.objectModule.meta.GetDllProcs()
+		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.WriteXml( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
+	if( !compiler.GetObjectModule().WriteXml( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
 	{
 		MessageBox(0,"XML書き込みに失敗","test",0);
@@ -217,5 +217,5 @@
 	}
 
-	if( !compiler.objectModule.meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
+	if( !compiler.GetObjectModule().meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
 	{
 		MessageBox(0,"バイナリ書き込みに失敗","test",0);
@@ -226,5 +226,5 @@
 		MessageBox(0,"バイナリ読み込みに失敗","test",0);
 	}
-	if( !compiler.objectModule.meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
+	if( !compiler.GetObjectModule().meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
 	{
 		MessageBox(0,"バイナリ書き込みに失敗","test",0);
@@ -431,5 +431,5 @@
 
 		// コード生成対象を選択
-		compiler.codeGenerator.Select( compiler.objectModule.globalNativeCode );
+		compiler.codeGenerator.Select( compiler.GetObjectModule().globalNativeCode );
 
 		trace_for_sourcecodestep( "★★★ グローバル領域のコンパイルを開始" );
@@ -456,5 +456,5 @@
 
 		//クラスに属する静的メンバを定義
-		compiler.objectModule.meta.GetClasses().InitStaticMember();
+		compiler.GetObjectModule().meta.GetClasses().InitStaticMember();
 
 		//グローバル実行領域をコンパイル開始
@@ -542,6 +542,8 @@
 
 	vector<ObjectModule *> masterObjectModules;
-	masterObjectModules.push_back( &compiler.objectModule );
+	masterObjectModules.push_back( &compiler.GetObjectModule() );
 	compiler.linker.Link( masterObjectModules );
+
+	oldSourceLines = compiler.linker.GetNativeCode().GetSourceLines();
 
 
@@ -549,9 +551,9 @@
 	int t,t2;
 	t=GetTickCount();
-	if( !compiler.objectModule.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
+	if( !compiler.GetObjectModule().WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
 	{
 		MessageBox(0,"XML書き込みに失敗","test",0);
 	}
-	if( !compiler.objectModule.ReadText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
+	if( !compiler.GetObjectModule().ReadText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
 	{
 		MessageBox(0,"XML読み込みに失敗","test",0);
@@ -563,5 +565,5 @@
 	MessageBox(0,s,"test",0);
 	
-	if( !compiler.objectModule.meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
+	if( !compiler.GetObjectModule().meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
 	{
 		MessageBox(0,"バイナリ書き込みに失敗","test",0);
@@ -572,5 +574,5 @@
 		MessageBox(0,"バイナリ読み込みに失敗","test",0);
 	}
-	if( !compiler.objectModule.meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
+	if( !compiler.GetObjectModule().meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
 	{
 		MessageBox(0,"バイナリ書き込みに失敗","test",0);
@@ -594,8 +596,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() ){
@@ -667,8 +669,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'){
@@ -693,4 +695,5 @@
 
 			if( pUserProc->GetName() == "DllMain" ){
+				// TODO: 未完成
 				DllMain_EntryPoint=pUserProc->_beginOpAddressOld;
 			}
@@ -757,8 +760,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() ){
@@ -797,8 +800,8 @@
 		pImportTable[i].Name=i3+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() ){
@@ -826,8 +829,8 @@
 	i3+=ImportDllNum*0x10;
 	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() ){
@@ -872,5 +875,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( (pVar->GetOffsetAddress()&0x7FFFFFFF)+AllInitGlobalVarSize );
@@ -883,22 +886,4 @@
 	// デバッグセクションを生成
 	////////////////////////////////////
-
-	//機械語コードとBasicコードの関係を整理
-	extern SourceLines oldSourceLines;
-	int MinObp,MaxObp;
-	SourceLines tempSourceLines;
-	MaxObp=0;
-	while(1){
-		for(i3=0,MinObp=0x0FFFFFFF;i3<(int)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;
 
 	//デバッグセクションを生成
@@ -946,6 +931,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;
@@ -1109,8 +1094,8 @@
 			HintSize;			//ヒント名（関数名）テーブル
 
-		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() ){
@@ -1130,5 +1115,5 @@
 	////////////////////////////////////////
 	//仮想関数データテーブルスケジュール
-	compiler.objectModule.meta.GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);
+	compiler.GetObjectModule().meta.GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);
 
 
@@ -1215,5 +1200,5 @@
 	if( obp == compiler.linker.GetNativeCode().GetSize() )
 	{
-		//memcpy( OpBuffer, compiler.linker.GetNativeCode().GetCodeBuffer(), compiler.linker.GetNativeCode().GetSize() );
+		memcpy( OpBuffer, compiler.linker.GetNativeCode().GetCodeBuffer(), compiler.linker.GetNativeCode().GetSize() );
 	}
 	else
@@ -1681,5 +1666,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;
 	}
@@ -1793,4 +1778,4 @@
 
 	//クラスに関するメモリを解放
-	compiler.objectModule.meta.GetClasses().Clear();
+	compiler.GetObjectModule().meta.GetClasses().Clear();
 }
