diff options
| author | Adrian Prantl <aprantl@apple.com> | 2024-09-27 16:09:52 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-27 16:09:52 -0700 |
| commit | 84fdfb9ca63ee4304b486d7e85545ee4e1a46f5d (patch) | |
| tree | 286e36dc02f9d125c8456a77126644626e60ea2d /lldb/source/Expression/UtilityFunction.cpp | |
| parent | c2af9af73d56d0ae89cc26d0064b7657a30359a7 (diff) | |
[lldb] Store expression evaluator diagnostics in an llvm::Error (NFC) (#106442)
…NFC]
This patch is the first patch in a series reworking of Pete Lawrence's
(@PortalPete) amazing proposal for better expression evaluator error
messages (https://github.com/llvm/llvm-project/pull/80938)
This patch is preparatory patch for improving the rendering of
expression evaluator diagnostics. Currently diagnostics are rendered
into a string and the command interpreter layer then textually parses
words like "error:" to (sometimes) color the output accordingly. In
order to enable user interfaces to do better with diagnostics, we need
to store them in a machine-readable fromat. This patch does this by
adding a new llvm::Error kind wrapping a DiagnosticDetail struct that
is used when the error type is eErrorTypeExpression. Multiple
diagnostics are modeled using llvm::ErrorList.
Right now the extra information is not used by the CommandInterpreter,
this will be added in a follow-up patch!
Diffstat (limited to 'lldb/source/Expression/UtilityFunction.cpp')
| -rw-r--r-- | lldb/source/Expression/UtilityFunction.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/lldb/source/Expression/UtilityFunction.cpp b/lldb/source/Expression/UtilityFunction.cpp index 55ebfb8ef342..97c226ae1c5f 100644 --- a/lldb/source/Expression/UtilityFunction.cpp +++ b/lldb/source/Expression/UtilityFunction.cpp @@ -83,19 +83,19 @@ FunctionCaller *UtilityFunction::MakeFunctionCaller( m_caller_up.reset(process_sp->GetTarget().GetFunctionCallerForLanguage( Language().AsLanguageType(), return_type, impl_code_address, arg_value_list, name.c_str(), error)); - if (error.Fail()) { - + if (error.Fail()) return nullptr; - } + if (m_caller_up) { DiagnosticManager diagnostics; unsigned num_errors = m_caller_up->CompileFunction(thread_to_use_sp, diagnostics); if (num_errors) { - error = Status::FromErrorStringWithFormat( - "Error compiling %s caller function: \"%s\".", - m_function_name.c_str(), diagnostics.GetString().c_str()); + error = Status::FromError(diagnostics.GetAsError( + lldb::eExpressionParseError, + "Error compiling " + m_function_name + " caller function:")); + m_caller_up.reset(); return nullptr; } @@ -104,9 +104,9 @@ FunctionCaller *UtilityFunction::MakeFunctionCaller( ExecutionContext exe_ctx(process_sp); if (!m_caller_up->WriteFunctionWrapper(exe_ctx, diagnostics)) { - error = Status::FromErrorStringWithFormat( - "Error inserting caller function for %s: \"%s\".", - m_function_name.c_str(), diagnostics.GetString().c_str()); + error = Status::FromError(diagnostics.GetAsError( + lldb::eExpressionSetupError, + "Error inserting " + m_function_name + " caller function:")); m_caller_up.reset(); return nullptr; } |
