From 3aa88b5bd9f9cae8e910c2344af7cd14ad93df19 Mon Sep 17 00:00:00 2001 From: Volodymyr Sapsai Date: Tue, 7 Aug 2018 23:00:40 +0000 Subject: [PATCH] [VFS] Unify iteration code for VFSFromYamlDirIterImpl, NFC intended. First and subsequent iteration steps are similar, capture this similarity. Reviewers: bruno, benlangmuir Reviewed By: bruno Subscribers: dexonsmith, cfe-commits Differential Revision: https://reviews.llvm.org/D50118 llvm-svn: 339199 --- clang/lib/Basic/VirtualFileSystem.cpp | 29 +++++++++------------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/clang/lib/Basic/VirtualFileSystem.cpp b/clang/lib/Basic/VirtualFileSystem.cpp index c0cf48d3660b..c0dc619129bc 100644 --- a/clang/lib/Basic/VirtualFileSystem.cpp +++ b/clang/lib/Basic/VirtualFileSystem.cpp @@ -933,6 +933,8 @@ class VFSFromYamlDirIterImpl : public clang::vfs::detail::DirIterImpl { RedirectingFileSystem &FS; RedirectingDirectoryEntry::iterator Current, End; + std::error_code incrementImpl(); + public: VFSFromYamlDirIterImpl(const Twine &Path, RedirectingFileSystem &FS, RedirectingDirectoryEntry::iterator Begin, @@ -1997,29 +1999,17 @@ VFSFromYamlDirIterImpl::VFSFromYamlDirIterImpl( RedirectingDirectoryEntry::iterator Begin, RedirectingDirectoryEntry::iterator End, std::error_code &EC) : Dir(_Path.str()), FS(FS), Current(Begin), End(End) { - while (Current != End) { - SmallString<128> PathStr(Dir); - llvm::sys::path::append(PathStr, (*Current)->getName()); - llvm::ErrorOr S = FS.status(PathStr); - if (S) { - CurrentEntry = *S; - return; - } - // Skip entries which do not map to a reliable external content. - if (FS.ignoreNonExistentContents() && - S.getError() == llvm::errc::no_such_file_or_directory) { - ++Current; - continue; - } else { - EC = S.getError(); - break; - } - } + EC = incrementImpl(); } std::error_code VFSFromYamlDirIterImpl::increment() { assert(Current != End && "cannot iterate past end"); - while (++Current != End) { + ++Current; + return incrementImpl(); +} + +std::error_code VFSFromYamlDirIterImpl::incrementImpl() { + while (Current != End) { SmallString<128> PathStr(Dir); llvm::sys::path::append(PathStr, (*Current)->getName()); llvm::ErrorOr S = FS.status(PathStr); @@ -2027,6 +2017,7 @@ std::error_code VFSFromYamlDirIterImpl::increment() { // Skip entries which do not map to a reliable external content. if (FS.ignoreNonExistentContents() && S.getError() == llvm::errc::no_such_file_or_directory) { + ++Current; continue; } else { return S.getError();