Index: trunk/abdev/BasicCompiler32/MakePeHdr.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 279)
@@ -174,5 +174,5 @@
 	// 名前空間情報を取得
 	NamespaceSupporter::CollectNamespaces(
-		compiler.source.GetBuffer(),
+		compiler.GetObjectModule().source.GetBuffer(),
 		compiler.GetObjectModule().meta.GetNamespaces()
 	);
@@ -181,5 +181,5 @@
 	//   CollectProcedures関数の中で参照されるオブジェクト名を事前に取得する。
 	//     ※オブジェクトの内容までは取得しない
-	compiler.GetObjectModule().meta.GetClasses().CollectClassesForNameOnly( compiler.source );
+	compiler.GetObjectModule().meta.GetClasses().CollectClassesForNameOnly( compiler.GetObjectModule().source );
 
 	//TypeDef情報を初期化
@@ -192,5 +192,5 @@
 	compiler.pCompilingClass = NULL;
 	CollectProcedures(
-		compiler.source,
+		compiler.GetObjectModule().source,
 		compiler.GetObjectModule().meta.GetUserProcs(),
 		compiler.GetObjectModule().meta.GetDllProcs()
@@ -203,35 +203,4 @@
 	compiler.GetObjectModule().meta.GetUserProcs().Iterator_Init();
 	compiler.GetObjectModule().meta.GetDllProcs().Iterator_Init();
-
-/*
-	if( !compiler.GetObjectModule().WriteXml( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
-	{
-		MessageBox(0,"XML書き込みに失敗","test",0);
-	}
-	ObjectModule *pTempObjectModule = new ObjectModule();
-	if( !pTempObjectModule->ReadXml( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
-	{
-		MessageBox(0,"XML読み込みに失敗","test",0);
-	}
-
-	if( !compiler.GetObjectModule().meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
-	{
-		MessageBox(0,"バイナリ書き込みに失敗","test",0);
-	}
-	Meta *pTempMeta = new Meta();
-	if( !pTempMeta->ReadBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
-	{
-		MessageBox(0,"バイナリ読み込みに失敗","test",0);
-	}
-	if( !compiler.GetObjectModule().meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
-	{
-		MessageBox(0,"バイナリ書き込みに失敗","test",0);
-	}
-	Meta *pTempMeta = new Meta();
-	if( !pTempMeta->ReadText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
-	{
-		MessageBox(0,"バイナリ読み込みに失敗","test",0);
-	}
-	compiler.objectModule = (*pTempObjectModule);*/
 
 
@@ -526,5 +495,5 @@
 		// 静的リンクライブラリ
 
-		if( !compiler.GetObjectModule().WriteText( OutputFileName ) )
+		if( !compiler.GetObjectModule().Write( OutputFileName ) )
 		{
 			MessageBox(0,"XML書き込みに失敗","test",0);
@@ -537,40 +506,4 @@
 
 	oldSourceLines = compiler.linker.GetNativeCode().GetSourceLines();
-
-/*
-	int t,t2;
-	t=GetTickCount();
-	if( !compiler.GetObjectModule().WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
-	{
-		MessageBox(0,"XML書き込みに失敗","test",0);
-	}
-	if( !compiler.GetObjectModule().ReadText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )
-	{
-		MessageBox(0,"XML読み込みに失敗","test",0);
-	}
-	t2=GetTickCount();
-	t2-=t;
-	char s[100];
-	sprintf(s,"%d",t2);
-	MessageBox(0,s,"test",0);
-	
-	if( !compiler.GetObjectModule().meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
-	{
-		MessageBox(0,"バイナリ書き込みに失敗","test",0);
-	}
-	Meta *pTempMeta = new Meta();
-	if( !pTempMeta->ReadBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
-	{
-		MessageBox(0,"バイナリ読み込みに失敗","test",0);
-	}
-	if( !compiler.GetObjectModule().meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
-	{
-		MessageBox(0,"バイナリ書き込みに失敗","test",0);
-	}
-	Meta *pTempMeta = new Meta();
-	if( !pTempMeta->ReadText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )
-	{
-		MessageBox(0,"バイナリ読み込みに失敗","test",0);
-	}*/
 
 
Index: trunk/abdev/BasicCompiler_Common/BasicCompiler.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/BasicCompiler.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/BasicCompiler.cpp	(revision 279)
@@ -206,8 +206,11 @@
 }
 
-void ShowErrorLine(int LineNum,char *FileName){
+void ShowErrorLine(int LineNum,const char *constFileName){
 	HANDLE hFile;
 	DWORD dw;
+	char FileName[MAX_PATH];
 	char temporary[MAX_PATH];
+
+	lstrcpy( FileName, constFileName );
 
 	if(LineNum==-1) return;
@@ -216,5 +219,5 @@
 		if(FileName){
 
-			while(!IsFile(FileName)){
+			while( !IsFileExist( FileName ) ){
 				char temp2[MAX_PATH],temp3[MAX_PATH];
 				_splitpath(FileName,NULL,NULL,temp2,temp3);
Index: trunk/abdev/BasicCompiler_Common/BreakPoint.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/BreakPoint.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/BreakPoint.cpp	(revision 279)
@@ -45,18 +45,25 @@
 
 void CFileBreakPoint::update(char *nativeCodeBuffer){
-	extern INCLUDEFILEINFO IncludeFileInfo;
-
 	int FileNum;
-	for(FileNum=0;FileNum<IncludeFileInfo.FilesNum;FileNum++){
-		if(lstrcmpi(IncludeFileInfo.ppFileNames[FileNum],lpszFileName)==0) break;
+	for(FileNum=0;FileNum<compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileCounts();FileNum++){
+		if(lstrcmpi(compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFilePathFromFileNumber(FileNum).c_str(),lpszFileName)==0) break;
 	}
-	if(FileNum==IncludeFileInfo.FilesNum) return;
+	if( FileNum == compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileCounts() )
+	{
+		return;
+	}
 
 	int i;
 	for(i=0;;i++){
-		if(IncludeFileInfo.LineOfFile[i]==FileNum||
-			IncludeFileInfo.LineOfFile[i]==-1) break;
+		if( compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == FileNum
+			|| compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == -1 )
+		{
+			break;
+		}
 	}
-	if(IncludeFileInfo.LineOfFile[i]==-1) return;
+	if( compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == -1 )
+	{
+		return;
+	}
 
 	int FileBaseLine;
@@ -65,5 +72,6 @@
 	int i2,nCount=0;
 	for(i2=0;;i2++){
-		if(IncludeFileInfo.LineOfFile[FileBaseLine+i2]==-1){
+		if( compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( FileBaseLine+i2 ) == -1 )
+		{
 			//ソースコードの終端行
 			break;
Index: trunk/abdev/BasicCompiler_Common/Debug.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/Debug.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/Debug.cpp	(revision 279)
@@ -55,17 +55,24 @@
 	/////////////////////////////////////////////////////////
 
-	extern INCLUDEFILEINFO IncludeFileInfo;
-
 	int FileNum;
-	for(FileNum=0;FileNum<IncludeFileInfo.FilesNum;FileNum++){
-		if(lstrcmpi(IncludeFileInfo.ppFileNames[FileNum],szFilePath)==0) break;
-	}
-	if(FileNum==IncludeFileInfo.FilesNum) return;
+	for(FileNum=0;FileNum<compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileCounts();FileNum++){
+		if(lstrcmpi(compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFilePathFromFileNumber(FileNum).c_str(),szFilePath)==0) break;
+	}
+	if( FileNum == compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileCounts() )
+	{
+		return;
+	}
 
 	for(i=0;;i++){
-		if(IncludeFileInfo.LineOfFile[i]==FileNum||
-			IncludeFileInfo.LineOfFile[i]==-1) break;
-	}
-	if(IncludeFileInfo.LineOfFile[i]==-1) return;
+		if( compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == FileNum
+			|| compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == -1 )
+		{
+			break;
+		}
+	}
+	if( compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) == -1 )
+	{
+		return;
+	}
 
 	int FileBaseLine;
@@ -73,7 +80,12 @@
 
 	int i2;
-	for(i2=0;;i++,i2++){
-		if(FileNum<IncludeFileInfo.LineOfFile[i]){
-			while(FileNum!=IncludeFileInfo.LineOfFile[i]) i++;
+	for(i2=0;;i++,i2++)
+	{
+		if( FileNum < compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) )
+		{
+			while( FileNum != compiler.GetObjectModule().source.GetIncludedFilesRelation().GetFileNumber( i ) )
+			{
+				i++;
+			}
 		}
 
Index: trunk/abdev/BasicCompiler_Common/DebugMiddleFile.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/DebugMiddleFile.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/DebugMiddleFile.cpp	(revision 279)
@@ -55,5 +55,5 @@
 }
 void CDebugSection::make(void){
-	int i2,i3,BufferSize;
+	int i2,BufferSize;
 
 	if(buffer){
@@ -81,5 +81,5 @@
 		// テキストデータにシリアライズ
 		std::string textString;
-		compiler.GetObjectModule().WriteTextString( textString );
+		compiler.GetObjectModule().WriteString( textString );
 
 		// サイズ
@@ -100,40 +100,4 @@
 		memcpy( buffer+i2, textString.c_str(), textString.size() );
 		i2 += (int)textString.size();
-	}
-
-	// ソースコード
-	{
-		int length = compiler.source.GetLength();
-		if(BufferSize<i2+(int)length+32768){
-			while( BufferSize<i2+(int)length+32768 )
-			{
-				BufferSize+=32768;
-			}
-
-			buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
-		}
-
-		// バッファ
-		lstrcpy( buffer + i2, compiler.source.GetBuffer() );
-		i2 += lstrlen(buffer + i2) + 1;
-	}
-
-	//インクルード情報
-	extern INCLUDEFILEINFO IncludeFileInfo;
-	*(long *)(buffer+i2)=IncludeFileInfo.FilesNum;
-	i2+=sizeof(long);
-	for(i3=0;i3<IncludeFileInfo.FilesNum;i3++){
-		lstrcpy(buffer+i2,IncludeFileInfo.ppFileNames[i3]);
-		i2+=lstrlen(buffer+i2)+1;
-	}
-	for(i3=0;;i3++){
-		buffer[i2++]=(char)IncludeFileInfo.LineOfFile[i3];
-		if(IncludeFileInfo.LineOfFile[i3]==-1) break;
-
-		//バッファが足りない場合は再確保
-		if(BufferSize<i2+32768){
-			BufferSize+=32768;
-			buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
-		}
 	}
 
@@ -226,30 +190,9 @@
 
 		// テキストデータからシリアライズ
-		this->objectModule.ReadTextString( textString );
+		this->objectModule.ReadString( textString );
 
 		compiler.SelectObjectModule( this->objectModule );
 	}
 
-	// ソースコード
-	{
-		// バッファ
-		compiler.source.SetBuffer(buffer+i2);
-		i2 += lstrlen( buffer+i2 ) + 1;
-	}
-
-	//インクルード情報
-	_IncludeFileInfo.FilesNum=*(long *)(buffer+i2);
-	i2+=sizeof(long);
-	_IncludeFileInfo.ppFileNames=(char **)malloc(_IncludeFileInfo.FilesNum*sizeof(char *));
-	for(i3=0;i3<_IncludeFileInfo.FilesNum;i3++){
-		if(buffer[i2]=='\0') break;
-		_IncludeFileInfo.ppFileNames[i3]=(char *)malloc(lstrlen(buffer+i2)+1);
-		lstrcpy(_IncludeFileInfo.ppFileNames[i3],buffer+i2);
-		i2+=lstrlen(buffer+i2)+1;
-	}
-	for(i3=0;;i3++){
-		_IncludeFileInfo.LineOfFile[i3]=(long)buffer[i2++];
-		if(_IncludeFileInfo.LineOfFile[i3]==-1) break;
-	}
 
 	//コードと行番号の関係
@@ -294,8 +237,4 @@
 	// ブレークポイントを適用
 	/////////////////////////////
-
-	//インクルード情報
-	extern INCLUDEFILEINFO IncludeFileInfo;
-	IncludeFileInfo=this->_IncludeFileInfo;
 
 	//コードと行番号の関係
@@ -412,8 +351,4 @@
 	compiler.SelectObjectModule( this->objectModule );
 
-	//インクルード情報
-	extern INCLUDEFILEINFO IncludeFileInfo;
-	IncludeFileInfo=this->_IncludeFileInfo;
-
 	//コードと行番号の関係
 	extern SourceLines oldSourceLines;
@@ -433,13 +368,4 @@
 
 void CDebugSection::DeleteDebugInfo(void){
-	int i2;
-
-	//インクルード情報を解放
-	for(i2=0;i2<_IncludeFileInfo.FilesNum;i2++)
-	{
-		free(_IncludeFileInfo.ppFileNames[i2]);
-	}
-	free(_IncludeFileInfo.ppFileNames);
-
 	//コードバッファを解放
 	free(OpBuffer);
Index: trunk/abdev/BasicCompiler_Common/DebugSection.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/DebugSection.h	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/DebugSection.h	(revision 279)
@@ -27,7 +27,4 @@
 	// オブジェクトモジュール
 	ObjectModule objectModule;
-
-	//インクルード情報
-	INCLUDEFILEINFO _IncludeFileInfo;
 
 	//コードと行番号の関係
Index: trunk/abdev/BasicCompiler_Common/Enum.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/Enum.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/Enum.cpp	(revision 279)
@@ -115,5 +115,5 @@
 	iEnumParentNum=0;
 
-	const char *source = compiler.source.GetBuffer();
+	const char *source = compiler.GetObjectModule().source.GetBuffer();
 
 	// 名前空間管理
Index: trunk/abdev/BasicCompiler_Common/Intermediate_Step1.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/Intermediate_Step1.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/Intermediate_Step1.cpp	(revision 279)
@@ -255,5 +255,5 @@
 
 				compiler.staticLibraries.push_back( new ObjectModule() );
-				compiler.staticLibraries.back()->ReadText( temporary );
+				compiler.staticLibraries.back()->Read( temporary );
 
 				for(;;i2++){
Index: trunk/abdev/BasicCompiler_Common/MakeExe.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/MakeExe.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/MakeExe.cpp	(revision 279)
@@ -24,5 +24,5 @@
 
 	//最後尾に貼り付け
-	compiler.source.Addition( temp );
+	compiler.GetObjectModule().source.Addition( temp );
 
 	HeapDefaultFree(temp);
@@ -35,5 +35,5 @@
 	extern BOOL bStopCompile;
 	extern HWND hMainDlg;
-	int i2,i3;
+	int i3;
 	char temp2[MAX_PATH];
 
@@ -57,5 +57,5 @@
 	//プログラムをファイルから読み込む
 	extern char SourceFileName[MAX_PATH];
-	if( !compiler.source.ReadFile( SourceFileName ) ){
+	if( !compiler.GetObjectModule().source.ReadFile( SourceFileName ) ){
 		SetError(201,SourceFileName,-1);
 		goto EndCompile;
@@ -188,12 +188,4 @@
 	ShowWindow(hMainDlg,SW_SHOW);
 #endif
-
-	//#include情報を解放
-	extern INCLUDEFILEINFO IncludeFileInfo;
-	for(i2=0;i2<IncludeFileInfo.FilesNum;i2++)
-	{
-		free(IncludeFileInfo.ppFileNames[i2]);
-	}
-	free(IncludeFileInfo.ppFileNames);
 }
 int MainThread(DWORD dummy){
Index: trunk/abdev/BasicCompiler_Common/StrOperation.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/StrOperation.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/StrOperation.cpp	(revision 279)
@@ -190,49 +190,4 @@
 	}
 }
-BOOL GetLineNum(int pos,int *pLine,char *FileName){
-	extern INCLUDEFILEINFO IncludeFileInfo;
-	extern char *basbuf;
-	int i,i2,i3,i4,i5;
-
-	i=pos;
-	if(basbuf[i]=='\n') i--;
-	for(i3=0,i2=0;i3<i;i3++){
-		if(basbuf[i3]=='\n') i2++;
-		if(basbuf[i3]=='\0') return 0;
-	}
-	i4=0;
-	while(IncludeFileInfo.LineOfFile[i2]!=IncludeFileInfo.LineOfFile[i4]) i4++;
-	for(i3=0,i5=0;i5<i4;i3++){
-		if(basbuf[i3]=='\n') i5++;
-		if(basbuf[i3]=='\0') return 0;
-	}
-	for(i5=0;i4<i2;i3++){
-		if(basbuf[i3]=='\n'){
-			i4++;
-			i5++;
-			if(IncludeFileInfo.LineOfFile[i2]<IncludeFileInfo.LineOfFile[i4]){
-				for(;IncludeFileInfo.LineOfFile[i2]!=IncludeFileInfo.LineOfFile[i4];i3++){
-					if(basbuf[i3]=='\n') i4++;
-				}
-			}
-		}
-		if(basbuf[i3]=='\0') return 0;
-	}
-
-	if(IncludeFileInfo.LineOfFile[i2]==-1){
-		//ファイル・行番号を特定できなかった場合
-		*pLine=-1;
-		FileName[0]=0;
-	}
-	else{
-		//行番号をセット
-		*pLine=i5;
-
-		//ファイル名をセット
-		lstrcpy(FileName,IncludeFileInfo.ppFileNames[IncludeFileInfo.LineOfFile[i2]]);
-	}
-
-	return 1;
-}
 
 char GetEndXXXCommand(char es){
@@ -449,5 +404,5 @@
 }
 
-BOOL IsFile(char *path){
+bool IsFileExist(const char *path){
 	WIN32_FIND_DATA wfd;
 	HANDLE hFind;
@@ -455,9 +410,9 @@
 	hFind=FindFirstFile(path,&wfd);
 	if(hFind==INVALID_HANDLE_VALUE){
-		return 0;
+		return false;
 	}
 	FindClose(hFind);
 
-	return 1;
+	return true;
 }
 BOOL GetFolder(HWND hWnd,char *folder,char *OpenFolderTitle){
Index: trunk/abdev/BasicCompiler_Common/VarList.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/VarList.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/VarList.cpp	(revision 279)
@@ -591,5 +591,6 @@
 	}
 
-	if(!GetLineNum(pobj_dti->lpdwCp[pobj_dti->iProcLevel],&i2,temporary)){
+	std::string dummyStr;
+	if(!compiler.GetObjectModule().source.GetLineInfo( pobj_dti->lpdwCp[pobj_dti->iProcLevel], i2, dummyStr )){
 		extern HWND hMainDlg;
 		//"デバッグ情報の取得に失敗"
@@ -597,5 +598,5 @@
 		return 0;
 	}
-	ShowErrorLine(i2,temporary);
+	ShowErrorLine(i2,dummyStr.c_str());
 
 	//プロシージャ コンボボックス
@@ -666,5 +667,4 @@
 	extern WNDPROC OldProcComboProc;
 	int i2,i3;
-	char temporary[MAX_PATH];
 
 	switch(message){
@@ -672,6 +672,8 @@
 			if(HIWORD(wParam)==CBN_SELCHANGE){
 				i2=(int)SendMessage(hwnd,CB_GETCURSEL,0,0);
-				GetLineNum(pobj_dti->lpdwCp[pobj_dti->iProcLevel-i2],&i3,temporary);
-				ShowErrorLine(i3,temporary);
+
+				std::string dummyStr;
+				compiler.GetObjectModule().source.GetLineInfo( pobj_dti->lpdwCp[pobj_dti->iProcLevel-i2], i3, dummyStr );
+				ShowErrorLine(i3,dummyStr.c_str());
 
 				RefreshLocalVar_with_WindowLock();
Index: trunk/abdev/BasicCompiler_Common/common.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/common.h	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/common.h	(revision 279)
@@ -219,5 +219,5 @@
 void GetRelationalPath(char *path,char *dir);
 void GetFullPath( char *path, const string &baseDirPath );
-void ShowErrorLine(int LineNum,char *FileName);
+void ShowErrorLine(int LineNum,const char *FileName);
 BOOL GetFilePathDialog(HWND hwnd,char *filename,LPSTR Filter,LPSTR Title,BOOL bOpen);
 void MakeMessageText(char *buffer,char *msg,int flag);
@@ -318,9 +318,8 @@
 void SlideBuffer(char *buffer,int length,int slide);
 int GetCpFromLine(int LineNum);
-BOOL GetLineNum(int pos,int *pLine,char *FileName);
 char GetEndXXXCommand(char es);
 void GetDefaultNameFromES(char es,char *name);
 const std::string &FormatEscapeSequenceStringToDefaultString( const std::string &source );
-BOOL IsFile(char *path);
+bool IsFileExist(const char *path);
 BOOL ShortPathToLongPath(char ShortPath[MAX_PATH],char *LongPath);
 BOOL GetFolder(HWND hWnd,char *folder,char *OpenFolderTitle);
Index: trunk/abdev/BasicCompiler_Common/error.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/error.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/error.cpp	(revision 279)
@@ -4,5 +4,5 @@
 
 #include <Program.h>
-#include <Class.h>
+#include <Compiler.h>
 
 #include "../BasicCompiler_Common/common.h"
@@ -291,5 +291,5 @@
 	extern ERRORINFO *pErrorInfo;
 	extern int ErrorNum;
-	char temporary[1024],temp2[1024],temp3[32],FileName[MAX_PATH];
+	char temporary[1024],temp2[1024],temp3[32];
 	BOOL bFirst;
 	int i2;
@@ -329,8 +329,9 @@
 	}
 	else{
-		GetLineNum(pos,&pErrorInfo[ErrorNum].line,FileName);
-
-		pErrorInfo[ErrorNum].FileName=(char *)HeapAlloc(hHeap,0,lstrlen(FileName)+1);
-		lstrcpy(pErrorInfo[ErrorNum].FileName,FileName);
+		std::string dummyStr;
+		compiler.GetObjectModule().source.GetLineInfo( pos, pErrorInfo[ErrorNum].line, dummyStr );
+
+		pErrorInfo[ErrorNum].FileName=(char *)HeapAlloc(hHeap,0,lstrlen(dummyStr.c_str())+1);
+		lstrcpy(pErrorInfo[ErrorNum].FileName,dummyStr.c_str());
 
 		_splitpath(pErrorInfo[ErrorNum].FileName,0,0,temp2,temp3);
Index: trunk/abdev/BasicCompiler_Common/include/BoostSerializationSupport.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/BoostSerializationSupport.h	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/include/BoostSerializationSupport.h	(revision 279)
@@ -25,4 +25,6 @@
 	bool ReadXml( const std::string &xmlFilePath, bool isShowExceptionMessage = true );
 	bool WriteXml( const std::string &xmlFilePath, bool isShowExceptionMessage = true ) const;
+	bool ReadXmlString( const std::string &xmlString );
+	bool WriteXmlString( std::string &xmlString ) const;
 
 	bool ReadBinary( const std::string &filePath, bool isShowExceptionMessage = true );
Index: trunk/abdev/BasicCompiler_Common/include/Compiler.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/Compiler.h	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/include/Compiler.h	(revision 279)
@@ -46,7 +46,4 @@
 		return namespaceSupporter;
 	}
-
-	// ソースコード
-	BasicSource source;
 
 	// コード生成機構
Index: trunk/abdev/BasicCompiler_Common/include/DataTable.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/DataTable.h	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/include/DataTable.h	(revision 279)
@@ -28,12 +28,8 @@
 		for( int i=0; i<size; i++ )
 		{
-			if( _buffer[i*3+2] != ',' )
-			{
-				//エラー
-				DebugBreak();
-			}
-			ULONG_PTR l;
-			sscanf( _buffer.c_str() + i*3, "%02x,", &l );
-			buffer[i] = (char)l;
+			ULONG_PTR l1 = ( ( _buffer[i*3] >= 'a' ) ? ( _buffer[i*3] - 'a' + 0x0a ) : ( _buffer[i*3] - '0' ) ) * 0x10;
+			ULONG_PTR l2 = ( _buffer[i*3+1] >= 'a' ) ? ( _buffer[i*3+1] - 'a' + 0x0a ) : ( _buffer[i*3+1] - '0' );
+			ULONG_PTR l = l1 + l2;
+			buffer[i] = static_cast<char>(l);
 		}
 	}
Index: trunk/abdev/BasicCompiler_Common/include/NativeCode.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 279)
@@ -219,7 +219,8 @@
 		for( int i=0; i<size; i++ )
 		{
-			ULONG_PTR l;
-			sscanf( code.c_str() + i*3, "%02x,", &l );
-			codeBuffer[i] = (char)l;
+			ULONG_PTR l1 = ( ( code[i*3] >= 'a' ) ? ( code[i*3] - 'a' + 0x0a ) : ( code[i*3] - '0' ) ) * 0x10;
+			ULONG_PTR l2 = ( code[i*3+1] >= 'a' ) ? ( code[i*3+1] - 'a' + 0x0a ) : ( code[i*3+1] - '0' );
+			ULONG_PTR l = l1 + l2;
+			codeBuffer[i] = static_cast<char>(l);
 		}
 	}
Index: trunk/abdev/BasicCompiler_Common/include/ObjectModule.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/ObjectModule.h	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/include/ObjectModule.h	(revision 279)
@@ -12,4 +12,7 @@
 	// データテーブル
 	DataTable dataTable;
+
+	// ソースコード
+	BasicSource source;
 
 	// XMLシリアライズ用
@@ -27,8 +30,14 @@
 		ar & BOOST_SERIALIZATION_NVP( globalNativeCode );
 		ar & BOOST_SERIALIZATION_NVP( dataTable );
+		ar & BOOST_SERIALIZATION_NVP( source );
 	}
 
 public:
 	void StaticLink( ObjectModule &objectModule );
+
+	bool Read( const std::string &filePath );
+	bool Write( const std::string &filePath ) const;
+	bool ReadString( const std::string &str );
+	bool WriteString( std::string &str ) const;
 };
 typedef std::vector<ObjectModule *> ObjectModules;
Index: trunk/abdev/BasicCompiler_Common/include/Source.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/Source.h	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/include/Source.h	(revision 279)
@@ -18,4 +18,61 @@
 	int FilesNum;
 	int LineOfFile[MAX_LEN];
+};
+
+class IncludedFilesRelation
+{
+	std::vector<std::string> filePaths;
+	std::vector<int> lineFileNumbers;
+
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	template<class Archive> void serialize(Archive& ar, const unsigned int version)
+	{
+		trace_for_serialize( "serializing - IncludedFilesRelation" );
+
+		ar & BOOST_SERIALIZATION_NVP( filePaths );
+		ar & BOOST_SERIALIZATION_NVP( lineFileNumbers );
+	}
+
+public:
+	IncludedFilesRelation()
+	{
+	}
+	~IncludedFilesRelation()
+	{
+	}
+
+	const int GetFileNumber( int lineNumber ) const
+	{
+		return lineFileNumbers[lineNumber];
+	}
+	const std::string &GetFilePath( int lineNumber ) const
+	{
+		return filePaths[GetFileNumber( lineNumber )];
+	}
+	const std::string &GetFilePathFromFileNumber( int fileNumber ) const
+	{
+		return filePaths[fileNumber];
+	}
+	int GetFileCounts() const
+	{
+		return filePaths.size();
+	}
+
+	int AddFile( const std::string &filePath )
+	{
+		filePaths.push_back( filePath );
+		return filePaths.size()-1;
+	}
+	void AddLine( int fileNumber )
+	{
+		lineFileNumbers.push_back( fileNumber );
+	}
+
+	int GetLineCounts() const
+	{
+		return lineFileNumbers.size();
+	}
 };
 
@@ -66,4 +123,54 @@
 	static const string generateDirectiveName;
 
+	IncludedFilesRelation includedFilesRelation;
+
+	// XMLシリアライズ用
+private:
+	friend class boost::serialization::access;
+	BOOST_SERIALIZATION_SPLIT_MEMBER();
+	template<class Archive> void load(Archive& ar, const unsigned int version)
+	{
+		trace_for_serialize( "serializing(load) - BasicSource" );
+
+		std::string _buffer;
+		ar & BOOST_SERIALIZATION_NVP( _buffer );
+		ar & BOOST_SERIALIZATION_NVP( length );
+		ar & BOOST_SERIALIZATION_NVP( includedFilesRelation );
+
+		// 読み込み後の処理
+		Realloc( length );
+		for( int i=0; i<length; i++ )
+		{
+			ULONG_PTR l1 = ( ( _buffer[i*3] >= 'a' ) ? ( _buffer[i*3] - 'a' + 0x0a ) : ( _buffer[i*3] - '0' ) ) * 0x10;
+			ULONG_PTR l2 = ( _buffer[i*3+1] >= 'a' ) ? ( _buffer[i*3+1] - 'a' + 0x0a ) : ( _buffer[i*3+1] - '0' );
+			ULONG_PTR l = l1 + l2;
+			buffer[i] = static_cast<char>(l);
+		}
+		buffer[length] = 0;
+	}
+	template<class Archive> void save(Archive& ar, const unsigned int version) const
+	{
+		trace_for_serialize( "serializing(save) - BasicSource" );
+
+		// 保存準備
+		char *tempCode = (char *)calloc( (length+1) * 3, 1 );
+		for( int i=0; i<length; i++ )
+		{
+			char temp[32];
+			sprintf( temp, "%02x,", (unsigned char)buffer[i] );
+			tempCode[i*3] = temp[0];
+			tempCode[i*3+1] = temp[1];
+			tempCode[i*3+2] = temp[2];
+		}
+
+		std::string _buffer = tempCode;
+		free( tempCode );
+
+		ar & BOOST_SERIALIZATION_NVP( _buffer );
+		ar & BOOST_SERIALIZATION_NVP( length );
+		ar & BOOST_SERIALIZATION_NVP( includedFilesRelation );
+	}
+
+private:
 	void Realloc( int newLength ){
 		buffer = (char *)realloc( buffer, newLength + 255 );
@@ -102,4 +209,9 @@
 	}
 
+	const IncludedFilesRelation &GetIncludedFilesRelation() const
+	{
+		return includedFilesRelation;
+	}
+
 	void SetBuffer( const char *buffer );
 
@@ -109,4 +221,6 @@
 
 	void Addition( const char *buffer );
+
+	bool GetLineInfo( int sourceCodePos, int &line, std::string &fileName );
 
 	void operator = ( const BasicSource &source ){
Index: trunk/abdev/BasicCompiler_Common/src/BoostSerializationSupport.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/src/BoostSerializationSupport.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/src/BoostSerializationSupport.cpp	(revision 279)
@@ -115,4 +115,61 @@
 	return result;
 }
+template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadXmlString( const std::string &xmlString )
+{
+	bool isSuccessful = false;
+
+	// 入力アーカイブの作成
+	std::istringstream iss( xmlString );
+
+	try{
+		boost::archive::xml_iarchive ia(iss);
+
+		// 文字列ストリームから読込
+		ia >> boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
+
+		isSuccessful = true;
+	}
+	catch(...){
+		// 失敗
+	}
+
+	if( !isSuccessful )
+	{
+		return false;
+	}
+
+	return true;
+}
+template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::WriteXmlString( std::string &xmlString ) const
+{
+	// 出力アーカイブの作成
+	std::ostringstream oss;
+
+	bool isSuccessful = false;
+	try{
+		boost::archive::xml_oarchive oa(oss);
+
+		// 文字列ストリームに書き出し
+		oa << boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
+
+		isSuccessful = true;
+	}
+	catch( boost::archive::archive_exception e )
+	{
+		echo( e.what() );
+	}
+	catch(...){
+		echo( "archive_exception以外の不明な例外" );
+	}
+
+	if( !isSuccessful )
+	{
+		return false;
+	}
+
+	xmlString = oss.str();
+
+	return true;
+}
 
 template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadBinary( const string &filePath, bool isShowExceptionMessage )
Index: trunk/abdev/BasicCompiler_Common/src/ObjectModule.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/src/ObjectModule.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/src/ObjectModule.cpp	(revision 279)
@@ -2,4 +2,13 @@
 
 #include <Compiler.h>
+
+enum ObjectModuleDataType
+{
+	ObjectModuleDataTypeXml,
+	ObjectModuleDataTypeText,
+	ObjectModuleDataTypeBinaly,
+};
+const ObjectModuleDataType objectModuleDataType = ObjectModuleDataTypeText;
+
 
 void ObjectModule::StaticLink( ObjectModule &objectModule )
@@ -15,2 +24,69 @@
 	dataTable.Add( objectModule.dataTable );
 }
+
+bool ObjectModule::Read( const std::string &filePath )
+{
+	switch( objectModuleDataType )
+	{
+	case ObjectModuleDataTypeXml:
+		return ReadXml( filePath );
+	case ObjectModuleDataTypeText:
+		return ReadText( filePath );
+	case ObjectModuleDataTypeBinaly:
+		return ReadBinary( filePath );
+	default:
+		Jenga::Throw( "" );
+		break;
+	}
+	return false;
+}
+bool ObjectModule::Write( const std::string &filePath ) const
+{
+	switch( objectModuleDataType )
+	{
+	case ObjectModuleDataTypeXml:
+		return WriteXml( filePath );
+	case ObjectModuleDataTypeText:
+		return WriteText( filePath );
+	case ObjectModuleDataTypeBinaly:
+		return WriteBinary( filePath );
+	default:
+		Jenga::Throw( "" );
+		break;
+	}
+	return false;
+}
+bool ObjectModule::ReadString( const std::string &str )
+{
+	switch( objectModuleDataType )
+	{
+	case ObjectModuleDataTypeXml:
+		return ReadXmlString( str );
+	case ObjectModuleDataTypeText:
+		return ReadTextString( str );
+	case ObjectModuleDataTypeBinaly:
+		Jenga::Throw( "" );
+		break;
+	default:
+		Jenga::Throw( "" );
+		break;
+	}
+	return false;
+}
+bool ObjectModule::WriteString( std::string &str ) const
+{
+	switch( objectModuleDataType )
+	{
+	case ObjectModuleDataTypeXml:
+		return WriteXmlString( str );
+	case ObjectModuleDataTypeText:
+		return WriteTextString( str );
+	case ObjectModuleDataTypeBinaly:
+		Jenga::Throw( "" );
+		break;
+	default:
+		Jenga::Throw( "" );
+		break;
+	}
+	return false;
+}
Index: trunk/abdev/BasicCompiler_Common/src/Source.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/src/Source.cpp	(revision 278)
+++ trunk/abdev/BasicCompiler_Common/src/Source.cpp	(revision 279)
@@ -13,6 +13,4 @@
 #include <Compiler.h>
 
-
-INCLUDEFILEINFO IncludeFileInfo;
 
 const string BasicSource::generateDirectiveName = "#generate";
@@ -537,10 +535,4 @@
 	char temporary[MAX_PATH],temp2[MAX_PATH+255],*LayerDir[255];
 
-	IncludeFileInfo.ppFileNames=(char **)calloc(sizeof(char *),1);
-	extern char SourceFileName[MAX_PATH];
-	IncludeFileInfo.ppFileNames[0]=(char *)malloc(lstrlen(SourceFileName)+1);
-	lstrcpy(IncludeFileInfo.ppFileNames[0],SourceFileName);
-	IncludeFileInfo.FilesNum=1;
-
 	layer=0;
 	FileLayer[layer]=0;
@@ -548,4 +540,13 @@
 	LineNum=0;
 
+	if( includedFilesRelation.GetLineCounts() != 0 )
+	{
+		Jenga::Throw( "インクルードファイル構造の初期値が不正" );
+	}
+
+	// メインソースコード
+	extern char SourceFileName[MAX_PATH];
+	FileLayer[layer] = includedFilesRelation.AddFile( SourceFileName );
+
 	//参照ディレクトリ
 	LayerDir[0]=(char *)malloc(lstrlen(BasicCurDir)+1);
@@ -554,10 +555,8 @@
 	for(i=0;;i++){
 		if(buffer[i]=='\0'){
-			IncludeFileInfo.LineOfFile[LineNum]=-1;
 			break;
 		}
 		if(buffer[i]=='\n'){
-			IncludeFileInfo.LineOfFile[LineNum]=FileLayer[layer];
-			LineNum++;
+			includedFilesRelation.AddLine( FileLayer[layer] );
 		}
 		if(i>LastFileByte[layer]){
@@ -624,11 +623,6 @@
 			}
 
-			IncludeFileInfo.ppFileNames=(char **)realloc(IncludeFileInfo.ppFileNames,(IncludeFileInfo.FilesNum+1)*sizeof(char *));
-			IncludeFileInfo.ppFileNames[IncludeFileInfo.FilesNum]=(char *)malloc(lstrlen(temporary)+1);
-			lstrcpy(IncludeFileInfo.ppFileNames[IncludeFileInfo.FilesNum],temporary);
-
 			layer++;
-			FileLayer[layer]=IncludeFileInfo.FilesNum;
-			IncludeFileInfo.FilesNum++;
+			FileLayer[layer] = includedFilesRelation.AddFile( temporary );
 
 			//#requireの場合では、既に読み込まれているファイルは読み込まないようにする
@@ -926,2 +920,57 @@
 	lstrcat( this->buffer, buffer );
 }
+
+bool BasicSource::GetLineInfo( int sourceCodePos, int &line, std::string &filePath )
+{
+	int i2,i3,i4,i5;
+
+	char *buffer = GetBuffer();
+	int i = sourceCodePos;
+
+	if(buffer[i]=='\n') i--;
+	for(i3=0,i2=0;i3<i;i3++){
+		if(buffer[i3]=='\n') i2++;
+		if(buffer[i3]=='\0') return 0;
+	}
+
+	if( includedFilesRelation.GetLineCounts() < i2 )
+	{
+		Jenga::Throw( "BasicSource::GetLineInfoメソッドで不正な行の情報を取得しようとした" );
+
+		//ファイル・行番号を特定できなかった場合
+		line = -1;
+		filePath = "";
+		return false;
+	}
+
+	i4=0;
+	while( includedFilesRelation.GetFileNumber( i2 ) != includedFilesRelation.GetFileNumber( i4 ) )
+	{
+		i4++;
+	}
+	for(i3=0,i5=0;i5<i4;i3++){
+		if(buffer[i3]=='\n') i5++;
+		if(buffer[i3]=='\0') return 0;
+	}
+	for(i5=0;i4<i2;i3++){
+		if(buffer[i3]=='\n'){
+			i4++;
+			i5++;
+			if( includedFilesRelation.GetFileNumber( i2 ) < includedFilesRelation.GetFileNumber( i4 ) )
+			{
+				for( ;includedFilesRelation.GetFileNumber( i2 ) != includedFilesRelation.GetFileNumber( i4 ); i3++ ){
+					if(buffer[i3]=='\n') i4++;
+				}
+			}
+		}
+		if(buffer[i3]=='\0') return 0;
+	}
+
+	//行番号をセット
+	line = i5;
+
+	//ファイル名をセット
+	filePath = includedFilesRelation.GetFilePath( i2 );
+
+	return 1;
+}
