Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[lldb][NFC] Move SBThread::ResumeNewPlan out of the header (llvm#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.

(cherry picked from commit 849daa4)
  • Loading branch information
felipepiovezan authored and medismailben committed Sep 5, 2025
commit 10c91ff157c09e31248241fc7c99c3de1231241c
3 changes: 0 additions & 3 deletions lldb/include/lldb/API/SBThread.h
Original file line number Diff line number Diff line change
Expand Up @@ -255,9 +255,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;
Expand Down
24 changes: 7 additions & 17 deletions lldb/source/API/SBThread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -514,21 +514,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.
Expand All @@ -541,11 +534,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) {
Expand Down