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

Last change on this file since 636 was 636, checked in by dai_9181, 15 years ago

libファイルを跨ったテンプレート展開に対応。

File size: 4.6 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    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.