Skip to content

[lldb] Make SBProgress move-only #124843

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 7 additions & 0 deletions lldb/include/lldb/API/SBProgress.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ class LLDB_API SBProgress {
SBProgress(const char *title, const char *details, uint64_t total_units,
SBDebugger &debugger);

#ifndef SWIG
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why the move operator for only Swig? Wouldn't this be useful if say DAP wanted to grab it's own progress object and then potentially move it?

Copy link
Member Author

@bulbazord bulbazord Jan 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a preprocessor guard that prevents SWIG from processing the move constructor. SWIG generates the bindings by reading the API headers and doesn't handle move constructors well. SBStream does the same thing.

When the headers are installed for distribution, this header guard is removed with unifdef.

SBProgress(SBProgress &&rhs);
#endif

~SBProgress();

void Increment(uint64_t amount, const char *description = nullptr);
Expand All @@ -59,6 +63,9 @@ class LLDB_API SBProgress {
lldb_private::Progress &ref() const;

private:
SBProgress(const SBProgress &rhs) = delete;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh! I didn't originally do this because I thought we weren't adding deletes in the header.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SBStream does this to enforce no copying. :)

const SBProgress &operator=(const SBProgress &rhs) = delete;

std::unique_ptr<lldb_private::Progress> m_opaque_up;
}; // SBProgress
} // namespace lldb
Expand Down
3 changes: 3 additions & 0 deletions lldb/source/API/SBProgress.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ SBProgress::SBProgress(const char *title, const char *details,
lldb_private::Progress::Origin::eExternal);
}

SBProgress::SBProgress(SBProgress &&rhs)
: m_opaque_up(std::move(rhs.m_opaque_up)) {}

SBProgress::~SBProgress() = default;

void SBProgress::Increment(uint64_t amount, const char *description) {
Expand Down