================
@@ -754,23 +754,29 @@ const char
*CommandObject::GetArgumentDescriptionAsCString(
return g_argument_table[arg_type].help_text;
}
-Target &CommandObject::GetDummyTarget() {
+Target &CommandObject::GetTarget(bool dummy) {
+ // Always return the dummy target if explicitly requested.
+ if (dummy)
+ return m_interpreter.GetDebugger().GetDummyTarget();
+
+ // Prefer the frozen execution context in the command object.
+ if (Target *target = m_exe_ctx.GetTargetPtr())
+ return *target;
+
+ // Fallback to the command interpreter's execution context in case we get
+ // called after DoExecute has finished. For example, when doing multi-line
+ // expression that uses an input reader or breakpoint callbacks.
+ if (Target *target = m_interpreter.GetExecutionContext().GetTargetPtr())
+ return *target;
+
+ // Finally, if we have no other target, get the selected target.
+ if (TargetSP target_sp = m_interpreter.GetDebugger().GetSelectedTarget())
+ return *target_sp;
+
+ // We only have the dummy target.
----------------
jimingham wrote:
I don't think it's worth using an optional here, but passing out a reference
here means that if you called this with dummy == false, and there was only the
dummy target, we would still return the Dummy target.
That seems unexpected - but maybe just worth a comment?
https://github.com/llvm/llvm-project/pull/101208
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits