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

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

#171への対応。テンプレート展開後のクラスメソッドの実装で、SizeOf(T)が正常値を返さない不具合を修正(特にTが4バイト未満の型場合)。

File size: 4.8 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 int currentRelationalObjectModuleIndexForSource;
29
30
31
32public:
33
34 Compiler();
35 ~Compiler();
36
37 // 静的リンクの準備を行う(オブジェクトモジュール同士の名前リストの結合など、前処理を行う)
38 void PreStaticLink( const ObjectModules &staticLibraries );
39
40 // 静的リンクを行う
41 void StaticLink( ObjectModules &staticLibraries );
42
43 // ビルド成功のフラグ
44 bool IsBuildSuccessful() const
45 {
46 return isBuildSuccessful;
47 }
48 void BuildSuccessful()
49 {
50 isBuildSuccessful = true;
51 }
52
53 // モジュール名
54 void SetModuleName( const std::string &moduleName )
55 {
56 this->moduleName = moduleName;
57 }
58 const std::string &GetModuleName() const
59 {
60 return moduleName;
61 }
62
63 // 名前空間サポート
64 NamespaceSupporter &GetNamespaceSupporter()
65 {
66 return namespaceSupporter;
67 }
68
69 // メッセンジャー
70 Messenger messenger;
71 ErrorMessenger errorMessenger;
72
73 // コード生成機構
74 CodeGenerator codeGenerator;
75
76 // リンカ
77 Linker linker;
78
79 // リソースマネージャ
80 ActiveBasic::Common::ResourceManager resourceManager;
81
82 // 静的リンクするオブジェクトファイル
83 std::vector<std::string> staticLibraryFilePaths;
84
85 // 静的リンクするオブジェクトモジュール
86 ObjectModules staticLibraries;
87
88 ObjectModule *pSelectedObjectModule;
89
90 // オブジェクトモジュール
91 ObjectModule &GetObjectModule()
92 {
93 return *pSelectedObjectModule;
94 }
95
96 void SelectObjectModule( ObjectModule *pObjectModule )
97 {
98 this->pSelectedObjectModule = pObjectModule;
99 }
100
101 // 現在参照すべきソースコード
102 const BasicSource &GetCurrentSource()
103 {
104 return staticLibraries[currentRelationalObjectModuleIndexForSource]->GetSource();
105 }
106
107 // 現在参照すべきソースコードを格納するオブジェクトモジュールのインデックス
108 int GetCurrentRelationalObjectModuleIndexForSource() const
109 {
110 return currentRelationalObjectModuleIndexForSource;
111 }
112 void SetCurrentRelationalObjectModuleIndexForSource( int currentRelationalObjectModuleIndexForSource )
113 {
114 this->currentRelationalObjectModuleIndexForSource = currentRelationalObjectModuleIndexForSource;
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 // ジェネリック型の型パラメータ解決をサポートした上でSizeOf関数の戻り値を取得する
194 int SizeOf( const Type &type );
195
196 void ClearCompilingUserProcAndClass();
197 void StartGlobalAreaCompile();
198 void FinishGlobalAreaCompile();
199 void SetCompilingClass( const CClass *pClass );
200 void SetCompilingUserProc( const UserProc *pUserProc );
201 void StartProcedureCompile( const UserProc *pUserProc );
202 void FinishProcedureCompile();
203
204 bool IsGlobalAreaCompiling();
205 bool IsLocalAreaCompiling();
206 const UserProc &GetCompilingUserProc();
207 bool IsCompilingClass();
208 const CClass &GetCompilingClass();
209};
210
211extern Compiler compiler;
Note: See TracBrowser for help on using the repository browser.