source: dev/trunk/ab5.0/abdev/BasicCompiler_Common/include/Compiler.h@ 608

Last change on this file since 608 was 608, checked in by dai_9181, 16 years ago

静的リンクライブラリプロジェクトの作成(IDE側)に対応。

File size: 4.0 KB
Line 
1#pragma once
2
3class Compiler
4{
5 // ビルド成功のフラグ
6 bool isBuildSuccessful;
7
8 // モジュール名
9 std::string moduleName;
10
11 // モジュール タイプ
12 ActiveBasic::Common::TargetModuleType::EnumType targetModuleType;
13
14 // デバッグ ビルドかどうか
15 bool isDebug;
16
17 // Unicode対応モジュールかどうか
18 bool isUnicode;
19
20 // 名前空間サポート
21 NamespaceSupporter namespaceSupporter;
22
23 // コンパイル中のUserProc/CClass
24 const UserProc *pCompilingUserProc;
25 const CClass *pCompilingClass;
26
27 // オブジェクトモジュール
28 ObjectModule *pObjectModule;
29 ObjectModule *pNowObjectModule;
30
31public:
32
33 Compiler()
34 : isBuildSuccessful( false )
35 , pObjectModule( new ObjectModule )
36 , targetModuleType( ActiveBasic::Common::TargetModuleType::Exe )
37 , isDebug( false )
38 , isUnicode( false )
39 , isCore( false )
40 {
41 SelectObjectModule( *pObjectModule );
42 Symbol::RegistNamespaceSupporter( &namespaceSupporter );
43 }
44 ~Compiler()
45 {
46 delete pObjectModule;
47 Clear();
48 }
49 void Clear()
50 {
51 BOOST_FOREACH( ObjectModule *pStaticLibrary, staticLibraries )
52 {
53 delete pStaticLibrary;
54 }
55 staticLibraries.clear();
56 }
57
58 void StaticLink( ObjectModules &staticLibraries );
59
60 // ビルド成功のフラグ
61 bool IsBuildSuccessful() const
62 {
63 return isBuildSuccessful;
64 }
65 void BuildSuccessful()
66 {
67 isBuildSuccessful = true;
68 }
69
70 // モジュール名
71 void SetModuleName( const std::string &moduleName )
72 {
73 this->moduleName = moduleName;
74 }
75 const std::string &GetModuleName() const
76 {
77 return moduleName;
78 }
79
80 // 名前空間サポート
81 NamespaceSupporter &GetNamespaceSupporter()
82 {
83 return namespaceSupporter;
84 }
85
86 // メッセンジャー
87 Messenger messenger;
88 ErrorMessenger errorMessenger;
89
90 // コード生成機構
91 CodeGenerator codeGenerator;
92
93 // リンカ
94 Linker linker;
95
96 // 静的リンクするオブジェクトファイル
97 std::vector<std::string> staticLibraryFilePaths;
98
99 // 静的リンクするオブジェクトモジュール
100 ObjectModules staticLibraries;
101
102 // オブジェクトモジュール
103 ObjectModule &GetObjectModule()
104 {
105 return *pNowObjectModule;
106 }
107 void SelectObjectModule( ObjectModule &objectModule )
108 {
109 pNowObjectModule = &objectModule;
110
111 namespaceSupporter.RegistAllNamespaceScopesCollection( &GetObjectModule().meta.GetNamespaces() );
112 }
113
114 bool IsExe() const
115 {
116 if( targetModuleType == ActiveBasic::Common::TargetModuleType::Exe )
117 {
118 return true;
119 }
120 return false;
121 }
122 bool IsDll() const
123 {
124 if( targetModuleType == ActiveBasic::Common::TargetModuleType::Dll )
125 {
126 return true;
127 }
128 return false;
129 }
130
131 // スタティック リンク ライブラリをビルドする?
132 bool IsSll() const
133 {
134 if( targetModuleType == ActiveBasic::Common::TargetModuleType::Sll )
135 {
136 return true;
137 }
138 return false;
139 }
140
141 void SetTargetModuleType( ActiveBasic::Common::TargetModuleType::EnumType targetModuleType )
142 {
143 this->targetModuleType = targetModuleType;
144 }
145
146 void SetDebugMark( bool isDebug )
147 {
148 this->isDebug = isDebug;
149 }
150 bool IsDebug() const
151 {
152 return isDebug;
153 }
154
155 void SetUnicodeMark( bool isUnicode )
156 {
157 this->isUnicode = isUnicode;
158 }
159 bool IsUnicode()
160 {
161 return isUnicode;
162 }
163
164
165 // コアモジュールかどうか
166 bool isCore;
167 void SetCoreMark( bool isCore )
168 {
169 this->isCore = isCore;
170 }
171 bool IsCore() const
172 {
173 return isCore;
174 }
175
176 // グローバルエリアが置かれる関数名
177 std::string globalAreaProcName;
178
179 // 列挙型
180 EnumInfoCollection enumInfoCollection;
181
182
183 bool StringToType( const std::string &typeName, Type &type );
184 const std::string TypeToString( const Type &type );
185
186 void ClearCompilingUserProcAndClass();
187 void StartGlobalAreaCompile();
188 void FinishGlobalAreaCompile();
189 void SetCompilingClass( const CClass *pClass );
190 void SetCompilingUserProc( const UserProc *pUserProc );
191 void StartProcedureCompile( const UserProc *pUserProc );
192 void FinishProcedureCompile();
193
194 bool IsGlobalAreaCompiling();
195 bool IsLocalAreaCompiling();
196 const UserProc &GetCompilingUserProc();
197 bool IsCompilingClass();
198 const CClass &GetCompilingClass();
199};
200
201extern Compiler compiler;
Note: See TracBrowser for help on using the repository browser.