Author: vsapsai Date: Tue Aug 7 16:00:40 2018 New Revision: 339199 URL: http://llvm.org/viewvc/llvm-project?rev=339199&view=rev Log: [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 Modified: cfe/trunk/lib/Basic/VirtualFileSystem.cpp Modified: cfe/trunk/lib/Basic/VirtualFileSystem.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/VirtualFileSystem.cpp?rev=339199&r1=339198&r2=339199&view=diff ============================================================================== --- cfe/trunk/lib/Basic/VirtualFileSystem.cpp (original) +++ cfe/trunk/lib/Basic/VirtualFileSystem.cpp Tue Aug 7 16:00:40 2018 @@ -933,6 +933,8 @@ class VFSFromYamlDirIterImpl : public cl 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::VFSFromYamlDirIt 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<vfs::Status> 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<vfs::Status> S = FS.status(PathStr); @@ -2027,6 +2017,7 @@ std::error_code VFSFromYamlDirIterImpl:: // 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(); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits