diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-04-17 21:38:34 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-04-17 21:38:34 +0000 |
commit | a42cf2e309a038fd5d2d541f4662aaffe9a060c4 (patch) | |
tree | 64f0ebb65960d0559a6c3a04dfa83faf774590be /Driver/clang.cpp | |
parent | dc5be47542e6d4a28d20abf9c0f0a0edd72939b6 (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.cpp | 35 |
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) |