From 2940303363744b1d22ca4c79454a03bc7f676b52 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Thu, 12 Nov 2009 02:53:59 +0000 Subject: [PATCH] Move TokenCache option to PreprocessorOptions. llvm-svn: 86940 --- .../clang/Frontend/PreprocessorOptions.h | 10 ++++++++++ clang/tools/clang-cc/Options.cpp | 17 ++++++++++++++++ clang/tools/clang-cc/clang-cc.cpp | 20 ++++--------------- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/clang/include/clang/Frontend/PreprocessorOptions.h b/clang/include/clang/Frontend/PreprocessorOptions.h index b918a744a2ab..6ae6843ee65a 100644 --- a/clang/include/clang/Frontend/PreprocessorOptions.h +++ b/clang/include/clang/Frontend/PreprocessorOptions.h @@ -37,6 +37,9 @@ class PreprocessorOptions { /// empty. std::string ImplicitPTHInclude; + /// If given, a PTH cache file to use for speeding up header parsing. + std::string TokenCache; + public: PreprocessorOptions() : UsePredefines(true) {} @@ -63,6 +66,13 @@ public: ImplicitPTHInclude = Value; } + const std::string &getTokenCache() const { + return TokenCache; + } + void setTokenCache(llvm::StringRef Value) { + TokenCache = Value; + } + void addMacroDef(llvm::StringRef Name) { Macros.push_back(std::make_pair(Name, false)); } diff --git a/clang/tools/clang-cc/Options.cpp b/clang/tools/clang-cc/Options.cpp index 2428d3ab8faa..e2b493148bcd 100644 --- a/clang/tools/clang-cc/Options.cpp +++ b/clang/tools/clang-cc/Options.cpp @@ -491,6 +491,10 @@ static llvm::cl::opt ImplicitIncludePTH("include-pth", llvm::cl::value_desc("file"), llvm::cl::desc("Include file before parsing")); +static llvm::cl::opt +TokenCache("token-cache", llvm::cl::value_desc("path"), + llvm::cl::desc("Use specified token cache file")); + static llvm::cl::list U_macros("U", llvm::cl::value_desc("macro"), llvm::cl::Prefix, llvm::cl::desc("Undefine the specified macro")); @@ -776,6 +780,19 @@ void clang::InitializePreprocessorOptions(PreprocessorOptions &Opts) { Opts.setImplicitPCHInclude(ImplicitIncludePCH); Opts.setImplicitPTHInclude(ImplicitIncludePTH); + // Select the token cache file, we don't support more than one currently so we + // can't have both an implicit-pth and a token cache file. + if (TokenCache.getPosition() && ImplicitIncludePTH.getPosition()) { + // FIXME: Don't fail like this. + fprintf(stderr, "error: cannot use both -token-cache and -include-pth " + "options\n"); + exit(1); + } + if (TokenCache.getPosition()) + Opts.setTokenCache(TokenCache); + else + Opts.setTokenCache(ImplicitIncludePTH); + // Use predefines? Opts.setUsePredefines(!UndefMacros); diff --git a/clang/tools/clang-cc/clang-cc.cpp b/clang/tools/clang-cc/clang-cc.cpp index 5803b1291077..a40dcee2b3af 100644 --- a/clang/tools/clang-cc/clang-cc.cpp +++ b/clang/tools/clang-cc/clang-cc.cpp @@ -254,10 +254,6 @@ TimeReport("ftime-report", llvm::cl::desc("Print the amount of time each " "phase of compilation takes")); -static llvm::cl::opt -TokenCache("token-cache", llvm::cl::value_desc("path"), - llvm::cl::desc("Use specified token cache file")); - static llvm::cl::opt VerifyDiagnostics("verify", llvm::cl::desc("Verify emitted diagnostics and warnings")); @@ -381,20 +377,12 @@ CreatePreprocessor(Diagnostic &Diags, const LangOptions &LangInfo, const DependencyOutputOptions &DepOpts, TargetInfo &Target, SourceManager &SourceMgr, FileManager &FileMgr) { + // Create a PTH manager if we are using some form of a token cache. PTHManager *PTHMgr = 0; - if (!TokenCache.empty() && !PPOpts.getImplicitPTHInclude().empty()) { - fprintf(stderr, "error: cannot use both -token-cache and -include-pth " - "options\n"); - exit(1); - } - - // Use PTH? - if (!TokenCache.empty() || !PPOpts.getImplicitPTHInclude().empty()) { - const std::string& x = TokenCache.empty() ? - PPOpts.getImplicitPTHInclude() : TokenCache; - PTHMgr = PTHManager::Create(x, Diags); - } + if (!PPOpts.getTokenCache().empty()) + PTHMgr = PTHManager::Create(PPOpts.getTokenCache(), Diags); + // FIXME: Don't fail like this. if (Diags.hasErrorOccurred()) exit(1);