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

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

ジェネリッククラスの型パラメータに値型が指定されたときに限り、テンプレート展開を行うようにした。

TODO: libファイルを跨ってテンプレート展開ができていないため、ソースコード管理部分に手を加える必要あり。

File size: 4.4 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 ActiveBasic::Common::ResourceManager resourceManager;
98
99 // 静的リンクするオブジェクトファイル
100 std::vector<std::string> staticLibraryFilePaths;
101
102 // 静的リンクするオブジェクトモジュール
103 ObjectModules staticLibraries;
104
105 // オブジェクトモジュール
106 ObjectModule &GetObjectModule()
107 {
108 return *pNowObjectModule;
109 }
110 void SelectObjectModule( ObjectModule &objectModule )
111 {
112 pNowObjectModule = &objectModule;
113
114 namespaceSupporter.RegistAllNamespaceScopesCollection( &GetObjectModule().meta.GetNamespaces() );
115 }
116
117 bool IsExe() const
118 {
119 if( targetModuleType == ActiveBasic::Common::TargetModuleType::Exe )
120 {
121 return true;
122 }
123 return false;
124 }
125 bool IsDll() const
126 {
127 if( targetModuleType == ActiveBasic::Common::TargetModuleType::Dll )
128 {
129 return true;
130 }
131 return false;
132 }
133
134 // スタティック リンク ライブラリをビルドする?
135 bool IsSll() const
136 {
137 if( targetModuleType == ActiveBasic::Common::TargetModuleType::Sll )
138 {
139 return true;
140 }
141 return false;
142 }
143
144 void SetTargetModuleType( ActiveBasic::Common::TargetModuleType::EnumType targetModuleType )
145 {
146 this->targetModuleType = targetModuleType;
147 }
148
149 void SetDebugMark( bool isDebug )
150 {
151 this->isDebug = isDebug;
152 }
153 bool IsDebug() const
154 {
155 return isDebug;
156 }
157
158 void SetUnicodeMark( bool isUnicode )
159 {
160 this->isUnicode = isUnicode;
161 }
162 bool IsUnicode()
163 {
164 return isUnicode;
165 }
166
167
168 // コアモジュールかどうか
169 bool isCore;
170 void SetCoreMark( bool isCore )
171 {
172 this->isCore = isCore;
173 }
174 bool IsCore() const
175 {
176 return isCore;
177 }
178
179 // グローバルエリアが置かれる関数名
180 std::string globalAreaProcName;
181
182 // 列挙型
183 EnumInfoCollection enumInfoCollection;
184
185
186private:
187 ActiveBasic::Compiler::Error::StringToTypeErrorCode::EnumType StringToGenericTypeEx( const std::string &typeName, Type &type );
188public:
189 ActiveBasic::Compiler::Error::StringToTypeErrorCode::EnumType StringToTypeEx( const std::string &typeName, Type &type, bool isResolveGenerics = false );
190 bool StringToType( const std::string &typeName, Type &type );
191 const std::string TypeToString( const Type &type );
192
193 void ClearCompilingUserProcAndClass();
194 void StartGlobalAreaCompile();
195 void FinishGlobalAreaCompile();
196 void SetCompilingClass( const CClass *pClass );
197 void SetCompilingUserProc( const UserProc *pUserProc );
198 void StartProcedureCompile( const UserProc *pUserProc );
199 void FinishProcedureCompile();
200
201 bool IsGlobalAreaCompiling();
202 bool IsLocalAreaCompiling();
203 const UserProc &GetCompilingUserProc();
204 bool IsCompilingClass();
205 const CClass &GetCompilingClass();
206};
207
208extern Compiler compiler;
Note: See TracBrowser for help on using the repository browser.