[Lldb-commits] [lldb] [lldb][NFC] Move SBThread::ResumeNewPlan out of the header (PR #151988)
Felipe de Azevedo Piovezan via lldb-commits
lldb-commits at lists.llvm.org
Mon Aug 4 08:37:51 PDT 2025
https://github.com/felipepiovezan created https://github.com/llvm/llvm-project/pull/151988
This *private* method is only defined as a member class of SBThread so that it may be declared a `friend` of SBError and access a private constructor of SBError that takes a `Status`, which is an `lldb_private` object. In other words, the method does not use anything about the class is belongs to, so it has no business being a member method.
A subsequent patch will need to add a new argument to this class, a `Process::StopLocker`, which is also another `lldb_private` object. This is another strong suggestion that this method does not belong on the header file of a public API, even if at the private visibility level. We can't forward declare nested types like `Process:StopLocker`, so this problem is not easily solvable.
This commit moves the method out of the header and into an anon namespace of the cpp file. It is also made to return a Status instead, and the private `SBError` constructor is accessed by the SBThread methods that call it.
>From 3dd0a209cef8c0823b9cdf00169bd27aee3fcf81 Mon Sep 17 00:00:00 2001
From: Felipe de Azevedo Piovezan <fpiovezan at apple.com>
Date: Mon, 4 Aug 2025 08:23:02 -0700
Subject: [PATCH] [lldb][NFC] Move SBThread::ResumeNewPlan out of the header
This *private* method is only defined as a member class of SBThread so
that it may be declared a `friend` of SBError and access a private
constructor of SBError that takes a `Status`, which is an `lldb_private`
object. In other words, the method does not use anything about the class
is belongs to, so it has no business being a member method.
A subsequent patch will need to add a new argument to this class, a
`Process::StopLocker`, which is also another `lldb_private` object. This
is another strong suggestion that this method does not belong on the
header file of a public API, even if at the private visibility level. We
can't forward declare nested types like `Process:StopLocker`, so this
problem is not easily solvable.
This commit moves the method out of the header and into an anon
namespace of the cpp file. It is also made to return a Status instead,
and the private `SBError` constructor is accessed by the SBThread
methods that call it.
---
lldb/include/lldb/API/SBThread.h | 3 ---
lldb/source/API/SBThread.cpp | 24 +++++++-----------------
2 files changed, 7 insertions(+), 20 deletions(-)
diff --git a/lldb/include/lldb/API/SBThread.h b/lldb/include/lldb/API/SBThread.h
index f8ae627da5ace..e9fe5858d125e 100644
--- a/lldb/include/lldb/API/SBThread.h
+++ b/lldb/include/lldb/API/SBThread.h
@@ -251,9 +251,6 @@ class LLDB_API SBThread {
void SetThread(const lldb::ThreadSP &lldb_object_sp);
- SBError ResumeNewPlan(lldb_private::ExecutionContext &exe_ctx,
- lldb_private::ThreadPlan *new_plan);
-
lldb::ThreadSP GetSP() const;
lldb::ExecutionContextRefSP m_opaque_sp;
diff --git a/lldb/source/API/SBThread.cpp b/lldb/source/API/SBThread.cpp
index d9469fc1390d6..74bc66c4f16f1 100644
--- a/lldb/source/API/SBThread.cpp
+++ b/lldb/source/API/SBThread.cpp
@@ -495,21 +495,14 @@ bool SBThread::GetInfoItemByPathAsString(const char *path, SBStream &strm) {
return success;
}
-SBError SBThread::ResumeNewPlan(ExecutionContext &exe_ctx,
- ThreadPlan *new_plan) {
- SBError sb_error;
-
+static Status ResumeNewPlan(ExecutionContext &exe_ctx, ThreadPlan *new_plan) {
Process *process = exe_ctx.GetProcessPtr();
- if (!process) {
- sb_error = Status::FromErrorString("No process in SBThread::ResumeNewPlan");
- return sb_error;
- }
+ if (!process)
+ return Status::FromErrorString("No process in SBThread::ResumeNewPlan");
Thread *thread = exe_ctx.GetThreadPtr();
- if (!thread) {
- sb_error = Status::FromErrorString("No thread in SBThread::ResumeNewPlan");
- return sb_error;
- }
+ if (!thread)
+ return Status::FromErrorString("No thread in SBThread::ResumeNewPlan");
// User level plans should be Controlling Plans so they can be interrupted,
// other plans executed, and then a "continue" will resume the plan.
@@ -522,11 +515,8 @@ SBError SBThread::ResumeNewPlan(ExecutionContext &exe_ctx,
process->GetThreadList().SetSelectedThreadByID(thread->GetID());
if (process->GetTarget().GetDebugger().GetAsyncExecution())
- sb_error.ref() = process->Resume();
- else
- sb_error.ref() = process->ResumeSynchronous(nullptr);
-
- return sb_error;
+ return process->Resume();
+ return process->ResumeSynchronous(nullptr);
}
void SBThread::StepOver(lldb::RunMode stop_other_threads) {
More information about the lldb-commits
mailing list