summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/ASTUnit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Frontend/ASTUnit.cpp')
-rw-r--r--clang/lib/Frontend/ASTUnit.cpp48
1 files changed, 19 insertions, 29 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 1bb5c3ff279..76a8cde8857 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -2782,39 +2782,29 @@ bool ASTUnit::visitLocalTopLevelDecls(void *context, DeclVisitorFn Fn) {
return true;
}
-namespace {
-struct PCHLocatorInfo {
- serialization::ModuleFile *Mod;
- PCHLocatorInfo() : Mod(nullptr) {}
-};
-}
-
-static bool PCHLocator(serialization::ModuleFile &M, void *UserData) {
- PCHLocatorInfo &Info = *static_cast<PCHLocatorInfo*>(UserData);
- switch (M.Kind) {
- case serialization::MK_ImplicitModule:
- case serialization::MK_ExplicitModule:
- return true; // skip dependencies.
- case serialization::MK_PCH:
- Info.Mod = &M;
- return true; // found it.
- case serialization::MK_Preamble:
- return false; // look in dependencies.
- case serialization::MK_MainFile:
- return false; // look in dependencies.
- }
-
- return true;
-}
-
const FileEntry *ASTUnit::getPCHFile() {
if (!Reader)
return nullptr;
- PCHLocatorInfo Info;
- Reader->getModuleManager().visit(PCHLocator, &Info);
- if (Info.Mod)
- return Info.Mod->File;
+ serialization::ModuleFile *Mod = nullptr;
+ Reader->getModuleManager().visit([&Mod](serialization::ModuleFile &M) {
+ switch (M.Kind) {
+ case serialization::MK_ImplicitModule:
+ case serialization::MK_ExplicitModule:
+ return true; // skip dependencies.
+ case serialization::MK_PCH:
+ Mod = &M;
+ return true; // found it.
+ case serialization::MK_Preamble:
+ return false; // look in dependencies.
+ case serialization::MK_MainFile:
+ return false; // look in dependencies.
+ }
+
+ return true;
+ });
+ if (Mod)
+ return Mod->File;
return nullptr;
}
OpenPOWER on IntegriCloud