aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/ASTUnit.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-10-02 21:09:13 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-10-02 21:09:13 +0000
commit10e7846abf4e69f03dfb65b36d866c01ece66645 (patch)
treec237a52fbbd973c3eea4cb769bc38695e7bc23ac /clang/lib/Frontend/ASTUnit.cpp
parent7768299b98ba4f5b8a4e3f627b521bb8f0e40173 (diff)
downloadllvm-10e7846abf4e69f03dfb65b36d866c01ece66645.zip
llvm-10e7846abf4e69f03dfb65b36d866c01ece66645.tar.gz
llvm-10e7846abf4e69f03dfb65b36d866c01ece66645.tar.bz2
[libclang] When indexing an AST file, only deserialize the file level
declarations of the current primary module. llvm-svn: 165046
Diffstat (limited to 'clang/lib/Frontend/ASTUnit.cpp')
-rw-r--r--clang/lib/Frontend/ASTUnit.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 2cf25eb..eaad06a3 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -2792,6 +2792,30 @@ ASTUnit::getLocalPreprocessingEntities() const {
PreprocessingRecord::iterator());
}
+bool ASTUnit::applyOnLocalTopLevelDecls(void *context, DeclReceiverFn Fn) {
+ if (isMainFileAST()) {
+ serialization::ModuleFile &
+ Mod = Reader->getModuleManager().getPrimaryModule();
+ ASTReader::ModuleDeclIterator MDI, MDE;
+ llvm::tie(MDI, MDE) = Reader->getModuleFileLevelDecls(Mod);
+ for (; MDI != MDE; ++MDI) {
+ if (!Fn(context, *MDI))
+ return false;
+ }
+
+ return true;
+ }
+
+ for (ASTUnit::top_level_iterator TL = top_level_begin(),
+ TLEnd = top_level_end();
+ TL != TLEnd; ++TL) {
+ if (!Fn(context, *TL))
+ return false;
+ }
+
+ return true;
+}
+
void ASTUnit::PreambleData::countLines() const {
NumLines = 0;
if (empty())