[PATCH] D19883: [Support] Add a free toString function for Error
Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue May 3 16:38:26 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL268465: [Support] Add a free toString function for Error (authored by vedantk).
Changed prior to commit:
http://reviews.llvm.org/D19883?vs=56075&id=56078#toc
Repository:
rL LLVM
http://reviews.llvm.org/D19883
Files:
llvm/trunk/include/llvm/Support/Error.h
llvm/trunk/unittests/Support/ErrorTest.cpp
Index: llvm/trunk/unittests/Support/ErrorTest.cpp
===================================================================
--- llvm/trunk/unittests/Support/ErrorTest.cpp
+++ llvm/trunk/unittests/Support/ErrorTest.cpp
@@ -544,4 +544,23 @@
}
}
+// Test that error messages work.
+TEST(Error, ErrorMessage) {
+ EXPECT_EQ(toString(Error::success()).compare(""), 0);
+
+ Error E1 = make_error<CustomError>(0);
+ EXPECT_EQ(toString(std::move(E1)).compare("CustomError { 0}"), 0);
+
+ Error E2 = make_error<CustomError>(0);
+ handleAllErrors(std::move(E2), [](const CustomError &CE) {
+ EXPECT_EQ(CE.message().compare("CustomError { 0}"), 0);
+ });
+
+ Error E3 = joinErrors(make_error<CustomError>(0), make_error<CustomError>(1));
+ EXPECT_EQ(toString(std::move(E3))
+ .compare("CustomError { 0}\n"
+ "CustomError { 1}"),
+ 0);
+}
+
} // end anon namespace
Index: llvm/trunk/include/llvm/Support/Error.h
===================================================================
--- llvm/trunk/include/llvm/Support/Error.h
+++ llvm/trunk/include/llvm/Support/Error.h
@@ -16,6 +16,7 @@
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/raw_ostream.h"
@@ -35,6 +36,14 @@
/// Print an error message to an output stream.
virtual void log(raw_ostream &OS) const = 0;
+ /// Return the error message as a string.
+ virtual std::string message() const {
+ std::string Msg;
+ raw_string_ostream OS(Msg);
+ log(OS);
+ return Msg;
+ }
+
/// Convert this error to a std::error_code.
///
/// This is a temporary crutch to enable interaction with code still
@@ -537,6 +546,16 @@
});
}
+/// Write all error messages (if any) in E to a string. The newline character
+/// is used to separate error messages.
+inline std::string toString(Error E) {
+ SmallVector<std::string, 2> Errors;
+ handleAllErrors(std::move(E), [&Errors](const ErrorInfoBase &EI) {
+ Errors.push_back(EI.message());
+ });
+ return join(Errors.begin(), Errors.end(), "\n");
+}
+
/// Consume a Error without doing anything. This method should be used
/// only where an error can be considered a reasonable and expected return
/// value.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D19883.56078.patch
Type: text/x-patch
Size: 2340 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160503/c7a74a59/attachment.bin>
More information about the llvm-commits
mailing list