aboutsummaryrefslogtreecommitdiff
path: root/Driver/clang.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-04-17 21:38:34 +0000
committerTed Kremenek <kremenek@apple.com>2008-04-17 21:38:34 +0000
commita42cf2e309a038fd5d2d541f4662aaffe9a060c4 (patch)
tree64f0ebb65960d0559a6c3a04dfa83faf774590be /Driver/clang.cpp
parentdc5be47542e6d4a28d20abf9c0f0a0edd72939b6 (diff)
Generate the Preprocessor using a local PreprocessorFactory object.
While this adds no extra functionality now, we will soon pass the PreprocessorFactory object to some ASTConsumers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49873 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Driver/clang.cpp')
-rw-r--r--Driver/clang.cpp35
1 files changed, 32 insertions, 3 deletions
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 307e49b4cb..cbd27259d7 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -1009,6 +1009,32 @@ static void InitializeIncludePaths(const char *Argv0, HeaderSearch &Headers,
}
}
+//===----------------------------------------------------------------------===//
+// Driver PreprocessorFactory - For lazily generating preprocessors ...
+//===----------------------------------------------------------------------===//
+
+namespace {
+class VISIBILITY_HIDDEN DriverPreprocessorFactory : public PreprocessorFactory {
+ Diagnostic &Diags;
+ const LangOptions &LangInfo;
+ TargetInfo &Target;
+ SourceManager &SourceMgr;
+ HeaderSearch &HeaderInfo;
+
+public:
+ DriverPreprocessorFactory(Diagnostic &diags, const LangOptions &opts,
+ TargetInfo &target, SourceManager &SM,
+ HeaderSearch &Headers)
+ : Diags(diags), LangInfo(opts), Target(target),
+ SourceMgr(SM), HeaderInfo(Headers) {}
+
+ virtual ~DriverPreprocessorFactory() {}
+
+ virtual Preprocessor* CreatePreprocessor() {
+ return new Preprocessor(Diags, LangInfo, Target, SourceMgr, HeaderInfo);
+ }
+};
+}
//===----------------------------------------------------------------------===//
// Basic Parser driver
@@ -1361,13 +1387,16 @@ int main(int argc, char **argv) {
InitializeIncludePaths(argv[0], HeaderInfo, FileMgr, LangInfo);
// Set up the preprocessor with these options.
- Preprocessor PP(Diags, LangInfo, *Target, SourceMgr, HeaderInfo);
+ DriverPreprocessorFactory PPFactory(Diags, LangInfo, *Target,
+ SourceMgr, HeaderInfo);
+ llvm::OwningPtr<Preprocessor> PP(PPFactory.CreatePreprocessor());
+
std::vector<char> PredefineBuffer;
- if (!InitializePreprocessor(PP, InFile, PredefineBuffer))
+ if (!InitializePreprocessor(*PP, InFile, PredefineBuffer))
continue;
- ProcessInputFile(PP, InFile);
+ ProcessInputFile(*PP, InFile);
HeaderInfo.ClearFileInfo();
if (Stats)