[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
This commit is contained in:
Volodymyr Sapsai 2018-08-07 23:00:40 +00:00
parent 9f9462acf6
commit 3aa88b5bd9
1 changed files with 10 additions and 19 deletions

View File

@ -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();