[lldb][nfc] Factor out repeated code in DWIM Print (#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.
This commit is contained in:
Felipe de Azevedo Piovezan
2024-03-18 14:34:08 -07:00
committed by GitHub
parent 8b8e1adbde
commit 65d444b9ed

View File

@@ -129,6 +129,19 @@ void CommandObjectDWIMPrint::DoExecute(StringRef command,
}
};
// 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);
}
};
// First, try `expr` as the name of a frame variable.
if (frame) {
auto valobj_sp = frame->FindVariable(ConstString(expr));
@@ -146,15 +159,7 @@ 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;
}
@@ -165,7 +170,7 @@ void CommandObjectDWIMPrint::DoExecute(StringRef command,
if (auto *state = target.GetPersistentExpressionStateForLanguage(language))
if (auto var_sp = state->GetVariable(expr))
if (auto valobj_sp = var_sp->GetValueObject()) {
valobj_sp->Dump(result.GetOutputStream(), dump_options);
dump_val_object(*valobj_sp);
result.SetStatus(eReturnStatusSuccessFinishResult);
return;
}
@@ -196,17 +201,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 =