diff options
Diffstat (limited to 'clang/lib/Basic/VirtualFileSystem.cpp')
-rw-r--r-- | clang/lib/Basic/VirtualFileSystem.cpp | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/clang/lib/Basic/VirtualFileSystem.cpp b/clang/lib/Basic/VirtualFileSystem.cpp index c0cf48d3660..c0dc619129b 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<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::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(); |