mirror of
https://github.com/intel/llvm.git
synced 2026-01-21 20:53:29 +08:00
[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:
committed by
GitHub
parent
8b8e1adbde
commit
65d444b9ed
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user