source: dev/trunk/abdev/BasicCompiler_Common/src/ObjectModule.cpp@ 344

Last change on this file since 344 was 322, checked in by dai_9181, 17 years ago

コンパイラ組み込みテンプレートエンジンを実装。
静的リンクライブラリ、デバッグ情報の内部形式をテキストからバイナリに変更した。

File size: 2.5 KB
Line 
1#include "stdafx.h"
2
3#include <Compiler.h>
4
5enum ObjectModuleDataType
6{
7 ObjectModuleDataTypeXml,
8 ObjectModuleDataTypeText,
9 ObjectModuleDataTypeBinaly,
10};
11const ObjectModuleDataType objectModuleDataType = ObjectModuleDataTypeBinaly;
12
13
14void ObjectModule::StaticLink( ObjectModule &objectModule )
15{
16 long dataSectionBaseOffset = dataTable.GetSize();
17 int sourceIndexBase = (int)sources.size();
18
19 // メタ情報を結合
20 meta.StaticLink( objectModule.meta, dataSectionBaseOffset, sourceIndexBase );
21
22 // ネイティブコードを結合
23 objectModule.globalNativeCode.ResetDataSectionBaseOffset( dataSectionBaseOffset );
24 objectModule.globalNativeCode.ResetSourceIndexes( sourceIndexBase );
25 globalNativeCode.PutEx( objectModule.globalNativeCode );
26
27 // データテーブルを結合
28 dataTable.Add( objectModule.dataTable );
29
30 // ソースコードを結合
31 BOOST_FOREACH( const BasicSource &source, objectModule.sources )
32 {
33 this->sources.push_back( source );
34 }
35
36 // TODO: basbufがいらなくなったら消す
37 extern char *basbuf;
38 basbuf = this->sources[0].GetBuffer();
39}
40
41bool ObjectModule::Read( const std::string &filePath )
42{
43 switch( objectModuleDataType )
44 {
45 case ObjectModuleDataTypeXml:
46 return ReadXml( filePath );
47 case ObjectModuleDataTypeText:
48 return ReadText( filePath );
49 case ObjectModuleDataTypeBinaly:
50 return ReadBinaryFile( filePath );
51 default:
52 Jenga::Throw( "" );
53 break;
54 }
55 return false;
56}
57bool ObjectModule::Write( const std::string &filePath ) const
58{
59 switch( objectModuleDataType )
60 {
61 case ObjectModuleDataTypeXml:
62 return WriteXml( filePath );
63 case ObjectModuleDataTypeText:
64 return WriteText( filePath );
65 case ObjectModuleDataTypeBinaly:
66 return WriteBinaryFile( filePath );
67 default:
68 Jenga::Throw( "" );
69 break;
70 }
71 return false;
72}
73bool ObjectModule::ReadString( const std::string &str )
74{
75 switch( objectModuleDataType )
76 {
77 case ObjectModuleDataTypeXml:
78 return ReadXmlString( str );
79 case ObjectModuleDataTypeText:
80 return ReadTextString( str );
81 case ObjectModuleDataTypeBinaly:
82 return ReadBinaryString( str );
83 default:
84 Jenga::Throw( "" );
85 break;
86 }
87 return false;
88}
89bool ObjectModule::WriteString( std::string &str ) const
90{
91 switch( objectModuleDataType )
92 {
93 case ObjectModuleDataTypeXml:
94 return WriteXmlString( str );
95 case ObjectModuleDataTypeText:
96 return WriteTextString( str );
97 case ObjectModuleDataTypeBinaly:
98 return WriteBinaryString( str );
99 default:
100 Jenga::Throw( "" );
101 break;
102 }
103 return false;
104}
Note: See TracBrowser for help on using the repository browser.