eliminate one form of PythonObject::Reset()
Summary: I'd like to eliminate all forms of Reset() and all public constructors on these objects, so the only way to make them is with Take<> and Retain<> and the only way to copy or move them is with actual c++ copy, move, or assignment. This is a simple place to start. Reviewers: JDevlieghere, clayborg, labath, jingham Reviewed By: labath Subscribers: lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D69080 llvm-svn: 375182
This commit is contained in:
@@ -182,7 +182,8 @@ public:
|
||||
Reset(type, py_obj);
|
||||
}
|
||||
|
||||
PythonObject(const PythonObject &rhs) : m_py_obj(nullptr) { Reset(rhs); }
|
||||
PythonObject(const PythonObject &rhs)
|
||||
: PythonObject(PyRefType::Borrowed, rhs.m_py_obj) {}
|
||||
|
||||
PythonObject(PythonObject &&rhs) {
|
||||
m_py_obj = rhs.m_py_obj;
|
||||
@@ -197,19 +198,6 @@ public:
|
||||
m_py_obj = nullptr;
|
||||
}
|
||||
|
||||
void Reset(const PythonObject &rhs) {
|
||||
if (!rhs.IsValid())
|
||||
Reset();
|
||||
else
|
||||
Reset(PyRefType::Borrowed, rhs.m_py_obj);
|
||||
}
|
||||
|
||||
// PythonObject is implicitly convertible to PyObject *, which will call the
|
||||
// wrong overload. We want to explicitly disallow this, since a PyObject
|
||||
// *always* owns its reference. Therefore the overload which takes a
|
||||
// PyRefType doesn't make sense, and the copy constructor should be used.
|
||||
void Reset(PyRefType type, const PythonObject &ref) = delete;
|
||||
|
||||
void Reset(PyRefType type, PyObject *py_obj) {
|
||||
if (py_obj == m_py_obj)
|
||||
return;
|
||||
@@ -244,19 +232,9 @@ public:
|
||||
return result;
|
||||
}
|
||||
|
||||
PythonObject &operator=(const PythonObject &other) {
|
||||
Reset(PyRefType::Borrowed, other.get());
|
||||
return *this;
|
||||
}
|
||||
|
||||
void Reset(PythonObject &&other) {
|
||||
PythonObject &operator=(PythonObject other) {
|
||||
Reset();
|
||||
m_py_obj = other.m_py_obj;
|
||||
other.m_py_obj = nullptr;
|
||||
}
|
||||
|
||||
PythonObject &operator=(PythonObject &&other) {
|
||||
Reset(std::move(other));
|
||||
m_py_obj = std::exchange(other.m_py_obj, nullptr);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user