r339199 - [VFS] Unify iteration code for VFSFromYamlDirIterImpl, NFC intended.

Volodymyr Sapsai via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 7 16:00:40 PDT 2018


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




More information about the cfe-commits mailing list