[Lldb-commits] [lldb] [lldb][nfc] Factor out repeated code in DWIM Print (PR #85669)
Felipe de Azevedo Piovezan via lldb-commits
lldb-commits at lists.llvm.org
Mon Mar 18 10:27:24 PDT 2024
https://github.com/felipepiovezan created https://github.com/llvm/llvm-project/pull/85669
The code that prints ValueObjects is duplicated across two different cases of the dwim-print command, and a subsequent commit will add a third case. As such, this commit factors out the common code into a lambda. A free function was considered, but there is too much function-local context required in that.
We also reword some of the comments so that they stop counting cases, making it easier to add other cases later.
>From 0480765c0c1feef6c93e6ba90f8367d30fec33bf Mon Sep 17 00:00:00 2001
From: Felipe de Azevedo Piovezan <fpiovezan at apple.com>
Date: Mon, 18 Mar 2024 10:14:49 -0700
Subject: [PATCH] [lldb][nfc] Factor out repeated code in DWIM Print
The code that prints ValueObjects is duplicated across two different cases of
the dwim-print command, and a subsequent commit will add a third case. As such,
this commit factors out the common code into a lambda. A free function was
considered, but there is too much function-local context required in that.
We also reword some of the comments so that they stop counting cases, making it
easier to add other cases later.
---
.../Commands/CommandObjectDWIMPrint.cpp | 40 +++++++++----------
1 file changed, 18 insertions(+), 22 deletions(-)
diff --git a/lldb/source/Commands/CommandObjectDWIMPrint.cpp b/lldb/source/Commands/CommandObjectDWIMPrint.cpp
index b183cb423111fb..300647a98b6b95 100644
--- a/lldb/source/Commands/CommandObjectDWIMPrint.cpp
+++ b/lldb/source/Commands/CommandObjectDWIMPrint.cpp
@@ -130,7 +130,20 @@ void CommandObjectDWIMPrint::DoExecute(StringRef command,
}
};
- // First, try `expr` as the name of a frame variable.
+ // Dump `valobj` according to whether `po` was requested or not.
+ auto dump_val_object = [&](ValueObject &valobj) {
+ if (is_po) {
+ StreamString temp_result_stream;
+ valobj.Dump(temp_result_stream, dump_options);
+ llvm::StringRef output = temp_result_stream.GetString();
+ maybe_add_hint(output);
+ result.GetOutputStream() << output;
+ } else {
+ valobj.Dump(result.GetOutputStream(), dump_options);
+ }
+ };
+
+ // Try `expr` as the name of a frame variable.
if (frame) {
auto valobj_sp = frame->FindVariable(ConstString(expr));
if (valobj_sp && valobj_sp->GetError().Success()) {
@@ -147,21 +160,13 @@ void CommandObjectDWIMPrint::DoExecute(StringRef command,
flags, expr);
}
- if (is_po) {
- StreamString temp_result_stream;
- valobj_sp->Dump(temp_result_stream, dump_options);
- llvm::StringRef output = temp_result_stream.GetString();
- maybe_add_hint(output);
- result.GetOutputStream() << output;
- } else {
- valobj_sp->Dump(result.GetOutputStream(), dump_options);
- }
+ dump_val_object(*valobj_sp);
result.SetStatus(eReturnStatusSuccessFinishResult);
return;
}
}
- // Second, also lastly, try `expr` as a source expression to evaluate.
+ // Try `expr` as a source expression to evaluate.
{
auto *exe_scope = m_exe_ctx.GetBestExecutionContextScope();
ValueObjectSP valobj_sp;
@@ -187,17 +192,8 @@ void CommandObjectDWIMPrint::DoExecute(StringRef command,
expr);
}
- if (valobj_sp->GetError().GetError() != UserExpression::kNoResult) {
- if (is_po) {
- StreamString temp_result_stream;
- valobj_sp->Dump(temp_result_stream, dump_options);
- llvm::StringRef output = temp_result_stream.GetString();
- maybe_add_hint(output);
- result.GetOutputStream() << output;
- } else {
- valobj_sp->Dump(result.GetOutputStream(), dump_options);
- }
- }
+ if (valobj_sp->GetError().GetError() != UserExpression::kNoResult)
+ dump_val_object(*valobj_sp);
if (suppress_result)
if (auto result_var_sp =
More information about the lldb-commits
mailing list