mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
FileManager: Use llvm::Expected in new getFileRef API
`FileManager::getFileRef` is a modern API which we expect to convert to over time. We should modernize the error handling as well, using `llvm::Expected` instead of `llvm::ErrorOr`, to help clients that care about errors to ensure nothing is missed. However, not all clients care. I've also added another path for those that don't: - `FileEntryRef` is now copy- and move-assignable (using a pointer instead of a reference). - `FileManager::getOptionalFileRef` returns an `llvm::Optional` instead of `llvm::Expected`. - Added an `llvm::expectedToOptional` utility in case this is useful elsewhere. https://reviews.llvm.org/D66705 llvm-svn: 369943
This commit is contained in:
parent
08c0a7aaec
commit
d2ffaaeb6c
@ -982,6 +982,20 @@ inline void consumeError(Error Err) {
|
||||
handleAllErrors(std::move(Err), [](const ErrorInfoBase &) {});
|
||||
}
|
||||
|
||||
/// Convert an Expected to an Optional without doing anything. This method
|
||||
/// should be used only where an error can be considered a reasonable and
|
||||
/// expected return value.
|
||||
///
|
||||
/// Uses of this method are potentially indicative of problems: perhaps the
|
||||
/// error should be propagated further, or the error-producer should just
|
||||
/// return an Optional in the first place.
|
||||
template <typename T> Optional<T> expectedToOptional(Expected<T> &&E) {
|
||||
if (E)
|
||||
return std::move(*E);
|
||||
consumeError(E.takeError());
|
||||
return None;
|
||||
}
|
||||
|
||||
/// Helper for converting an Error to a bool.
|
||||
///
|
||||
/// This method returns true if Err is in an error state, or false if it is
|
||||
|
Loading…
Reference in New Issue
Block a user