[PATCH] D116659: [llvm][clang][vfs] NFC: Extract directory iteration boilerplate into macro

Duncan P. N. Exon Smith via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 10 20:19:06 PST 2022


dexonsmith added a comment.

I think th eAPI is designed to ensure users don't forget to check the error code.

What about a new API/iterator type that wraps the existing one and has a "normal" `operator++`?

- Take an error as an out-parameter on construction
- Make it an `llvm::Error` which guarantees a crash if not checked
- This would wrap the other type and store a reference to the `Error`. If there's an error during iteration, advances to end and sets the error.

Here's what I'm thinking:

  Optional<llvm::Error> DirError;
  for (vfs::error_directory_iterator File = D.getVFS().dir_begin(Cand.Path, DirError),
                                     FileEnd;
       File != FileEnd; ++File) {
    // ...
  }
  if (DirError)
    return errorToErrorCode(std::move(*IterationEC));

At that point, it'd be easy to add a `dir_range` wrapper that creates an iterator range:

  for (auto &File : dir_range(Path, DirError)) {
    // ...
  }


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116659/new/

https://reviews.llvm.org/D116659



More information about the llvm-commits mailing list