================ @@ -37,49 +39,75 @@ class raw_ostream; using namespace lldb; using namespace lldb_private; -Status::Status() {} +char MachKernelError::ID; +char Win32Error::ID; +char ExpressionError::ID; + +namespace { +/// A std::error_code category for eErrorTypeGeneric. +class GenericCategory : public std::error_category { + const char *name() const override { return "LLDBGenericCategory"; } + std::string message(int __ev) const override { return "generic LLDB error"; }; +}; +GenericCategory &generic_category() { + static GenericCategory g_generic_category; + return g_generic_category; +} + +/// A std::error_code category for eErrorTypeExpression. +class ExpressionCategory : public std::error_category { + const char *name() const override { return "LLDBExpressionCategory"; } + std::string message(int __ev) const override { + return ExecutionResultAsCString(static_cast<lldb::ExpressionResults>(__ev)); + }; +}; +ExpressionCategory &expression_category() { + static ExpressionCategory g_expression_category; + return g_expression_category; +} +} // namespace + +Status::Status() : m_error(llvm::Error::success()) {} Status::Status(ValueType err, ErrorType type, std::string msg) - : m_code(err), m_type(type), m_string(std::move(msg)) {} + : m_error( + type == eErrorTypeMachKernel + ? llvm::make_error<MachKernelError>( + std::error_code(err, std::system_category()), msg) + : (type == eErrorTypePOSIX + ? llvm::errorCodeToError( + std::error_code(err, std::generic_category())) + : (type == eErrorTypeWin32 + ? llvm::make_error<Win32Error>( + std::error_code(err, std::system_category()), + msg) + : llvm::createStringError( + std::move(msg), + std::error_code(err, generic_category()))))) { ---------------- adrian-prantl wrote:
The price of non-copyable data structures! https://github.com/llvm/llvm-project/pull/106774 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits