зеркало из https://github.com/microsoft/clang-1.git
Decouple more of clang-cc by moving ImplicitP[CT]H options into
PreprocessorOptions. Global variables used as [in] [out] parameters considered harmful. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86728 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
7976f5923c
Коммит
e0a9581d60
|
@ -28,6 +28,13 @@ class PreprocessorOptions {
|
||||||
unsigned UsePredefines : 1; /// Initialize the preprocessor with the compiler
|
unsigned UsePredefines : 1; /// Initialize the preprocessor with the compiler
|
||||||
/// and target specific predefines.
|
/// and target specific predefines.
|
||||||
|
|
||||||
|
/// The implicit PCH included at the start of the translation unit, or empty.
|
||||||
|
std::string ImplicitPCHInclude;
|
||||||
|
|
||||||
|
/// The implicit PTH input included at the start of the translation unit, or
|
||||||
|
/// empty.
|
||||||
|
std::string ImplicitPTHInclude;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PreprocessorOptions() : UsePredefines(true) {}
|
PreprocessorOptions() : UsePredefines(true) {}
|
||||||
|
|
||||||
|
@ -36,6 +43,24 @@ public:
|
||||||
UsePredefines = Value;
|
UsePredefines = Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::string &getImplicitPCHInclude() const {
|
||||||
|
return ImplicitPCHInclude;
|
||||||
|
}
|
||||||
|
void setImplicitPCHInclude(llvm::StringRef Value) {
|
||||||
|
assert((Value.empty() || ImplicitPTHInclude.empty()) &&
|
||||||
|
"Cannot both implicit PCH and PTH includes!");
|
||||||
|
ImplicitPCHInclude = Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string &getImplicitPTHInclude() const {
|
||||||
|
return ImplicitPTHInclude;
|
||||||
|
}
|
||||||
|
void setImplicitPTHInclude(llvm::StringRef Value) {
|
||||||
|
assert((ImplicitPCHInclude.empty() || Value.empty()) &&
|
||||||
|
"Cannot both implicit PCH and PTH includes!");
|
||||||
|
ImplicitPTHInclude = Value;
|
||||||
|
}
|
||||||
|
|
||||||
void addMacroDef(const std::string &Name) {
|
void addMacroDef(const std::string &Name) {
|
||||||
Macros.push_back(std::make_pair(Name, false));
|
Macros.push_back(std::make_pair(Name, false));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1090,6 +1090,9 @@ static void InitializeIncludePaths(HeaderSearchOptions &Opts,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void InitializePreprocessorOptions(PreprocessorOptions &InitOpts) {
|
static void InitializePreprocessorOptions(PreprocessorOptions &InitOpts) {
|
||||||
|
InitOpts.setImplicitPCHInclude(ImplicitIncludePCH);
|
||||||
|
InitOpts.setImplicitPTHInclude(ImplicitIncludePTH);
|
||||||
|
|
||||||
// Use predefines?
|
// Use predefines?
|
||||||
InitOpts.setUsePredefines(!UndefMacros);
|
InitOpts.setUsePredefines(!UndefMacros);
|
||||||
|
|
||||||
|
@ -1143,7 +1146,7 @@ static void InitializePreprocessorOptions(PreprocessorOptions &InitOpts) {
|
||||||
std::string OriginalFile = PCHReader::getOriginalSourceFile(*Ptr);
|
std::string OriginalFile = PCHReader::getOriginalSourceFile(*Ptr);
|
||||||
if (!OriginalFile.empty()) {
|
if (!OriginalFile.empty()) {
|
||||||
InitOpts.addInclude(OriginalFile, false);
|
InitOpts.addInclude(OriginalFile, false);
|
||||||
ImplicitIncludePCH.clear();
|
InitOpts.setImplicitPCHInclude("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1159,15 +1162,16 @@ CreatePreprocessor(Diagnostic &Diags, const LangOptions &LangInfo,
|
||||||
const PreprocessorOptions &PPOpts, TargetInfo &Target,
|
const PreprocessorOptions &PPOpts, TargetInfo &Target,
|
||||||
SourceManager &SourceMgr, HeaderSearch &HeaderInfo) {
|
SourceManager &SourceMgr, HeaderSearch &HeaderInfo) {
|
||||||
PTHManager *PTHMgr = 0;
|
PTHManager *PTHMgr = 0;
|
||||||
if (!TokenCache.empty() && !ImplicitIncludePTH.empty()) {
|
if (!TokenCache.empty() && !PPOpts.getImplicitPTHInclude().empty()) {
|
||||||
fprintf(stderr, "error: cannot use both -token-cache and -include-pth "
|
fprintf(stderr, "error: cannot use both -token-cache and -include-pth "
|
||||||
"options\n");
|
"options\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use PTH?
|
// Use PTH?
|
||||||
if (!TokenCache.empty() || !ImplicitIncludePTH.empty()) {
|
if (!TokenCache.empty() || !PPOpts.getImplicitPTHInclude().empty()) {
|
||||||
const std::string& x = TokenCache.empty() ? ImplicitIncludePTH:TokenCache;
|
const std::string& x = TokenCache.empty() ?
|
||||||
|
PPOpts.getImplicitPTHInclude() : TokenCache;
|
||||||
PTHMgr = PTHManager::Create(x, &Diags,
|
PTHMgr = PTHManager::Create(x, &Diags,
|
||||||
TokenCache.empty() ? Diagnostic::Error
|
TokenCache.empty() ? Diagnostic::Error
|
||||||
: Diagnostic::Warning);
|
: Diagnostic::Warning);
|
||||||
|
@ -1736,7 +1740,9 @@ static void ProcessInputFile(const CompilerInvocation &CompOpts,
|
||||||
llvm::OwningPtr<PCHReader> Reader;
|
llvm::OwningPtr<PCHReader> Reader;
|
||||||
llvm::OwningPtr<ExternalASTSource> Source;
|
llvm::OwningPtr<ExternalASTSource> Source;
|
||||||
|
|
||||||
if (!ImplicitIncludePCH.empty()) {
|
const std::string &ImplicitPCHInclude =
|
||||||
|
CompOpts.getPreprocessorOpts().getImplicitPCHInclude();
|
||||||
|
if (!ImplicitPCHInclude.empty()) {
|
||||||
// If the user specified -isysroot, it will be used for relocatable PCH
|
// If the user specified -isysroot, it will be used for relocatable PCH
|
||||||
// files.
|
// files.
|
||||||
const char *isysrootPCH = 0;
|
const char *isysrootPCH = 0;
|
||||||
|
@ -1747,7 +1753,7 @@ static void ProcessInputFile(const CompilerInvocation &CompOpts,
|
||||||
|
|
||||||
// The user has asked us to include a precompiled header. Load
|
// The user has asked us to include a precompiled header. Load
|
||||||
// the precompiled header into the AST context.
|
// the precompiled header into the AST context.
|
||||||
switch (Reader->ReadPCH(ImplicitIncludePCH)) {
|
switch (Reader->ReadPCH(ImplicitPCHInclude)) {
|
||||||
case PCHReader::Success: {
|
case PCHReader::Success: {
|
||||||
// Set the predefines buffer as suggested by the PCH
|
// Set the predefines buffer as suggested by the PCH
|
||||||
// reader. Typically, the predefines buffer will be empty.
|
// reader. Typically, the predefines buffer will be empty.
|
||||||
|
@ -2206,7 +2212,7 @@ int main(int argc, char **argv) {
|
||||||
PhonyDependencyTarget);
|
PhonyDependencyTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImplicitIncludePCH.empty()) {
|
if (CompOpts.getPreprocessorOpts().getImplicitPCHInclude().empty()) {
|
||||||
if (InitializeSourceManager(*PP.get(), InFile))
|
if (InitializeSourceManager(*PP.get(), InFile))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче