diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2015-07-25 12:14:04 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2015-07-25 12:14:04 +0000 |
commit | 9a9efbafa701f7c6a2c6732b4e8e2a4e0adc23e1 (patch) | |
tree | 16a6e5cfbf3c506628d46fd8b691f84acdeff081 /clang/lib/Frontend/ASTUnit.cpp | |
parent | 20dc35aff6e71044b796c4291d9c9238762ca963 (diff) | |
download | bcm5719-llvm-9a9efbafa701f7c6a2c6732b4e8e2a4e0adc23e1.tar.gz bcm5719-llvm-9a9efbafa701f7c6a2c6732b4e8e2a4e0adc23e1.zip |
[Modules] Wrap the main ModuleManager visitor in a function_ref.
Avoids the awkward passing of an opaque void *UserData argument. No
functional change intended.
llvm-svn: 243213
Diffstat (limited to 'clang/lib/Frontend/ASTUnit.cpp')
-rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 48 |
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; } |