forked from OSchip/llvm-project
[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:
parent
9f9462acf6
commit
3aa88b5bd9
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue