aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2024-06-20 12:50:26 -0700
committerGitHub <noreply@github.com>2024-06-20 12:50:26 -0700
commit9473e162b92a7e0bb1471eaaa6cbd6b5fc104fed (patch)
tree9e281572229fe12fb14403cbcb4f0185847af428
parenteea150c84053035163f307b46549a2997a343ce9 (diff)
downloadllvm-9473e162b92a7e0bb1471eaaa6cbd6b5fc104fed.zip
llvm-9473e162b92a7e0bb1471eaaa6cbd6b5fc104fed.tar.gz
llvm-9473e162b92a7e0bb1471eaaa6cbd6b5fc104fed.tar.bz2
[DWIMPrint] Move the setting of the result status into dump_val_object (#96232)
Previously the result would get overwritten by a success on all code paths. This is another NFC change for TypeSystemClang, because an object description cannot actually fail there. It will have different behavior in the Swift plugin.
-rw-r--r--lldb/source/Commands/CommandObjectDWIMPrint.cpp58
1 files changed, 31 insertions, 27 deletions
diff --git a/lldb/source/Commands/CommandObjectDWIMPrint.cpp b/lldb/source/Commands/CommandObjectDWIMPrint.cpp
index c1549ca..b7cd955 100644
--- a/lldb/source/Commands/CommandObjectDWIMPrint.cpp
+++ b/lldb/source/Commands/CommandObjectDWIMPrint.cpp
@@ -141,10 +141,14 @@ void CommandObjectDWIMPrint::DoExecute(StringRef command,
maybe_add_hint(output);
result.GetOutputStream() << output;
} else {
- if (llvm::Error error =
- valobj.Dump(result.GetOutputStream(), dump_options))
+ llvm::Error error =
+ valobj.Dump(result.GetOutputStream(), dump_options);
+ if (error) {
result.AppendError(toString(std::move(error)));
+ return;
+ }
}
+ result.SetStatus(eReturnStatusSuccessFinishResult);
};
// First, try `expr` as the name of a frame variable.
@@ -165,7 +169,6 @@ void CommandObjectDWIMPrint::DoExecute(StringRef command,
}
dump_val_object(*valobj_sp);
- result.SetStatus(eReturnStatusSuccessFinishResult);
return;
}
}
@@ -176,7 +179,6 @@ void CommandObjectDWIMPrint::DoExecute(StringRef command,
if (auto var_sp = state->GetVariable(expr))
if (auto valobj_sp = var_sp->GetValueObject()) {
dump_val_object(*valobj_sp);
- result.SetStatus(eReturnStatusSuccessFinishResult);
return;
}
@@ -197,34 +199,36 @@ void CommandObjectDWIMPrint::DoExecute(StringRef command,
error_stream << " " << fixed_expression << "\n";
}
- if (expr_result == eExpressionCompleted) {
- if (verbosity != eDWIMPrintVerbosityNone) {
- StringRef flags;
- if (args.HasArgs())
- flags = args.GetArgStringWithDelimiter();
- result.AppendMessageWithFormatv("note: ran `expression {0}{1}`", flags,
- expr);
- }
-
- if (valobj_sp->GetError().GetError() != UserExpression::kNoResult)
- dump_val_object(*valobj_sp);
-
- if (suppress_result)
- if (auto result_var_sp =
- target.GetPersistentVariable(valobj_sp->GetName())) {
- auto language = valobj_sp->GetPreferredDisplayLanguage();
- if (auto *persistent_state =
- target.GetPersistentExpressionStateForLanguage(language))
- persistent_state->RemovePersistentVariable(result_var_sp);
- }
-
- result.SetStatus(eReturnStatusSuccessFinishResult);
- } else {
+ // If the expression failed, return an error.
+ if (expr_result != eExpressionCompleted) {
if (valobj_sp)
result.SetError(valobj_sp->GetError());
else
result.AppendErrorWithFormatv(
"unknown error evaluating expression `{0}`", expr);
+ return;
+ }
+
+ if (verbosity != eDWIMPrintVerbosityNone) {
+ StringRef flags;
+ if (args.HasArgs())
+ flags = args.GetArgStringWithDelimiter();
+ result.AppendMessageWithFormatv("note: ran `expression {0}{1}`", flags,
+ expr);
}
+
+ if (valobj_sp->GetError().GetError() != UserExpression::kNoResult)
+ dump_val_object(*valobj_sp);
+ else
+ result.SetStatus(eReturnStatusSuccessFinishResult);
+
+ if (suppress_result)
+ if (auto result_var_sp =
+ target.GetPersistentVariable(valobj_sp->GetName())) {
+ auto language = valobj_sp->GetPreferredDisplayLanguage();
+ if (auto *persistent_state =
+ target.GetPersistentExpressionStateForLanguage(language))
+ persistent_state->RemovePersistentVariable(result_var_sp);
+ }
}
}