mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-29 22:30:33 +00:00
[Support] Add conversions between Expected<T> and ErrorOr<T>.
More utilities to help with std::error_code -> Error transitions. llvm-svn: 264238
This commit is contained in:
parent
0cd69a5030
commit
fc3b132a68
@ -753,6 +753,22 @@ inline std::error_code errorToErrorCode(Error Err) {
|
||||
return EC;
|
||||
}
|
||||
|
||||
/// Convert an ErrorOr<T> to an Expected<T>.
|
||||
template <typename T>
|
||||
Expected<T> errorOrToExpected(ErrorOr<T> &&EO) {
|
||||
if (auto EC = EO.getError())
|
||||
return errorCodeToError(EC);
|
||||
return std::move(*EO);
|
||||
}
|
||||
|
||||
/// Convert an Expected<T> to an ErrorOr<T>.
|
||||
template <typename T>
|
||||
ErrorOr<T> expectedToErrorOr(Expected<T> &&E) {
|
||||
if (auto Err = E.takeError())
|
||||
return errorToErrorCode(std::move(Err));
|
||||
return std::move(*E);
|
||||
}
|
||||
|
||||
/// Helper for check-and-exit error handling.
|
||||
///
|
||||
/// For tool use only. NOT FOR USE IN LIBRARY CODE.
|
||||
|
@ -416,7 +416,7 @@ TEST(Error, ExpectedCovariance) {
|
||||
A2 = Expected<std::unique_ptr<D>>(nullptr);
|
||||
}
|
||||
|
||||
TEST(Error, ECError) {
|
||||
TEST(Error, ErrorCodeConversions) {
|
||||
// Round-trip a success value to check that it converts correctly.
|
||||
EXPECT_EQ(errorToErrorCode(errorCodeToError(std::error_code())),
|
||||
std::error_code())
|
||||
@ -427,6 +427,29 @@ TEST(Error, ECError) {
|
||||
errc::invalid_argument)
|
||||
<< "std::error_code error value should round-trip via Error "
|
||||
"conversions";
|
||||
|
||||
// Round-trip a success value through ErrorOr/Expected to check that it
|
||||
// converts correctly.
|
||||
{
|
||||
auto Orig = ErrorOr<int>(42);
|
||||
auto RoundTripped =
|
||||
expectedToErrorOr(errorOrToExpected(ErrorOr<int>(42)));
|
||||
EXPECT_EQ(*Orig, *RoundTripped)
|
||||
<< "ErrorOr<T> success value should round-trip via Expected<T> "
|
||||
"conversions.";
|
||||
}
|
||||
|
||||
// Round-trip a failure value through ErrorOr/Expected to check that it
|
||||
// converts correctly.
|
||||
{
|
||||
auto Orig = ErrorOr<int>(errc::invalid_argument);
|
||||
auto RoundTripped =
|
||||
expectedToErrorOr(
|
||||
errorOrToExpected(ErrorOr<int>(errc::invalid_argument)));
|
||||
EXPECT_EQ(Orig.getError(), RoundTripped.getError())
|
||||
<< "ErrorOr<T> failure value should round-trip via Expected<T> "
|
||||
"conversions.";
|
||||
}
|
||||
}
|
||||
|
||||
} // end anon namespace
|
||||
|
Loading…
Reference in New Issue
Block a user