[Lldb-commits] [lldb] [lldb] Unify the way we get the Target in CommandObject (PR #101208)

via lldb-commits lldb-commits at lists.llvm.org
Tue Jul 30 11:02:41 PDT 2024


================
@@ -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


More information about the lldb-commits mailing list