aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-05-22 19:44:21 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-05-22 19:44:21 +0000
commitfb19dde5bfd42a03786ee50e6b300e47c45ace47 (patch)
tree55abc09b92b053d2b0e643e9451e3aded53defd3 /source
parent5a5de6ea3962782b02221b96b27dd064b25d381f (diff)
downloadsrc-fb19dde5bfd42a03786ee50e6b300e47c45ace47.tar.gz
src-fb19dde5bfd42a03786ee50e6b300e47c45ace47.zip
Vendor import of lldb trunk r303571:vendor/lldb/lldb-trunk-r303571
Notes
Notes: svn path=/vendor/lldb/dist/; revision=318673 svn path=/vendor/lldb/lldb-trunk-r303571/; revision=318674; tag=vendor/lldb/lldb-trunk-r303571
Diffstat (limited to 'source')
-rw-r--r--source/Core/IOHandler.cpp2
-rw-r--r--source/Utility/Status.cpp31
2 files changed, 32 insertions, 1 deletions
diff --git a/source/Core/IOHandler.cpp b/source/Core/IOHandler.cpp
index e5fe490991f9..3cb1ffab3a0e 100644
--- a/source/Core/IOHandler.cpp
+++ b/source/Core/IOHandler.cpp
@@ -4640,7 +4640,7 @@ void IOHandlerCursesGUI::Activate() {
WindowSP threads_window_sp(
main_window_sp->CreateSubWindow("Threads", threads_bounds, false));
WindowSP status_window_sp(
- main_window_sp->CreateSubWindow("Error", status_bounds, false));
+ main_window_sp->CreateSubWindow("Status", status_bounds, false));
status_window_sp->SetCanBeActive(
false); // Don't let the status bar become the active window
main_window_sp->SetDelegate(
diff --git a/source/Utility/Status.cpp b/source/Utility/Status.cpp
index 5996be1e4e05..ba87d3e5144f 100644
--- a/source/Utility/Status.cpp
+++ b/source/Utility/Status.cpp
@@ -56,6 +56,37 @@ Status::Status(const char *format, ...)
va_end(args);
}
+Status::Status(llvm::Error error)
+ : m_code(0), m_type(ErrorType::eErrorTypeGeneric) {
+ if (!error)
+ return;
+
+ // if the error happens to be a errno error, preserve the error code
+ error = llvm::handleErrors(
+ std::move(error), [&](std::unique_ptr<llvm::ECError> e) -> llvm::Error {
+ std::error_code ec = e->convertToErrorCode();
+ if (ec.category() == std::generic_category()) {
+ m_code = ec.value();
+ m_type = ErrorType::eErrorTypePOSIX;
+ return llvm::Error::success();
+ }
+ return llvm::Error(std::move(e));
+ });
+
+ // Otherwise, just preserve the message
+ if (error)
+ SetErrorString(llvm::toString(std::move(error)));
+}
+
+llvm::Error Status::ToError() const {
+ if (Success())
+ return llvm::Error::success();
+ if (m_type == ErrorType::eErrorTypePOSIX)
+ return llvm::errorCodeToError(std::error_code(m_code, std::generic_category()));
+ return llvm::make_error<llvm::StringError>(AsCString(),
+ llvm::inconvertibleErrorCode());
+}
+
//----------------------------------------------------------------------
// Assignment operator
//----------------------------------------------------------------------