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

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

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

File size: 2.5 KB
RevLine 
[274]1#include "stdafx.h"
2
3#include <Compiler.h>
4
[279]5enum ObjectModuleDataType
6{
7 ObjectModuleDataTypeXml,
8 ObjectModuleDataTypeText,
9 ObjectModuleDataTypeBinaly,
10};
[322]11const ObjectModuleDataType objectModuleDataType = ObjectModuleDataTypeBinaly;
[279]12
13
[274]14void ObjectModule::StaticLink( ObjectModule &objectModule )
15{
[280]16 long dataSectionBaseOffset = dataTable.GetSize();
[308]17 int sourceIndexBase = (int)sources.size();
[280]18
[274]19 // メタ情報を結合
[280]20 meta.StaticLink( objectModule.meta, dataSectionBaseOffset, sourceIndexBase );
[274]21
[276]22 // ネイティブコードを結合
[280]23 objectModule.globalNativeCode.ResetDataSectionBaseOffset( dataSectionBaseOffset );
24 objectModule.globalNativeCode.ResetSourceIndexes( sourceIndexBase );
[287]25 globalNativeCode.PutEx( objectModule.globalNativeCode );
[276]26
[274]27 // データテーブルを結合
28 dataTable.Add( objectModule.dataTable );
[280]29
30 // ソースコードを結合
31 BOOST_FOREACH( const BasicSource &source, objectModule.sources )
32 {
33 this->sources.push_back( source );
34 }
[282]35
36 // TODO: basbufがいらなくなったら消す
37 extern char *basbuf;
38 basbuf = this->sources[0].GetBuffer();
[274]39}
[279]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:
[322]50 return ReadBinaryFile( filePath );
[279]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:
[322]66 return WriteBinaryFile( filePath );
[279]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:
[322]82 return ReadBinaryString( str );
[279]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:
[322]98 return WriteBinaryString( str );
[279]99 default:
100 Jenga::Throw( "" );
101 break;
102 }
103 return false;
104}
Note: See TracBrowser for help on using the repository browser.