diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-08-25 18:03:05 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-08-25 18:03:05 +0000 |
commit | 14f771695a0e9a8d80d0da24d45a8f9ba0c4ae4c (patch) | |
tree | 47e6e18abdf9b79cd87e68881b4c097cd37e83ab /clang/lib/Serialization/ASTReader.cpp | |
parent | 35d0e66bee4aa2cccaad1c1a2193b927914176cf (diff) | |
download | bcm5719-llvm-14f771695a0e9a8d80d0da24d45a8f9ba0c4ae4c.tar.gz bcm5719-llvm-14f771695a0e9a8d80d0da24d45a8f9ba0c4ae4c.zip |
Switch the forward walk through the module chain over to a depth-first
search in ASTReader::ReadPreprocessedEntities().
llvm-svn: 138572
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 9b23e9ab4f2..75f12ec5841 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -3230,16 +3230,37 @@ bool ASTReader::ParseLanguageOptions( return false; } -void ASTReader::ReadPreprocessedEntities() { - for (ModuleIterator I = ModuleMgr.begin(), E = ModuleMgr.end(); I != E; ++I) { - Module &F = *(*I); - if (!F.PreprocessorDetailCursor.getBitStreamReader()) - continue; +namespace { + /// \brief Visitor used by ASTReader::ReadPreprocessedEntities() to load + /// all of the preprocessed entities within a module. + class ReadPreprocessedEntitiesVisitor { + ASTReader &Reader; + + public: + explicit ReadPreprocessedEntitiesVisitor(ASTReader &Reader) + : Reader(Reader) { } + + static bool visit(Module &M, bool Preorder, void *UserData) { + if (Preorder) + return false; + + ReadPreprocessedEntitiesVisitor *This + = static_cast<ReadPreprocessedEntitiesVisitor *>(UserData); + + if (!M.PreprocessorDetailCursor.getBitStreamReader()) + return false; + + SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor); + M.PreprocessorDetailCursor.JumpToBit(M.PreprocessorDetailStartOffset); + while (This->Reader.LoadPreprocessedEntity(M)) { } + return false; + } + }; +} - SavedStreamPosition SavedPosition(F.PreprocessorDetailCursor); - F.PreprocessorDetailCursor.JumpToBit(F.PreprocessorDetailStartOffset); - while (LoadPreprocessedEntity(F)) { } - } +void ASTReader::ReadPreprocessedEntities() { + ReadPreprocessedEntitiesVisitor Visitor(*this); + ModuleMgr.visitDepthFirst(&ReadPreprocessedEntitiesVisitor::visit, &Visitor); } PreprocessedEntity *ASTReader::ReadPreprocessedEntityAtOffset(uint64_t Offset) { |