diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-05-22 19:44:21 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-05-22 19:44:21 +0000 |
commit | fb19dde5bfd42a03786ee50e6b300e47c45ace47 (patch) | |
tree | 55abc09b92b053d2b0e643e9451e3aded53defd3 /source | |
parent | 5a5de6ea3962782b02221b96b27dd064b25d381f (diff) | |
download | src-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.cpp | 2 | ||||
-rw-r--r-- | source/Utility/Status.cpp | 31 |
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 //---------------------------------------------------------------------- |