bpo-40170: Hide impl detail of Py_TRASHCAN_BEGIN macro (GH-23235)
The Py_TRASHCAN_BEGIN macro no longer accesses PyTypeObject attributes, but now can get the condition by calling the new private _PyTrash_cond() function which hides implementation details.
This commit is contained in:
parent
0ec34cab9d
commit
ed1a5a5bac
|
@ -516,6 +516,8 @@ struct _ts;
|
|||
/* Python 3.9 private API, invoked by the macros below. */
|
||||
PyAPI_FUNC(int) _PyTrash_begin(struct _ts *tstate, PyObject *op);
|
||||
PyAPI_FUNC(void) _PyTrash_end(struct _ts *tstate);
|
||||
/* Python 3.10 private API, invoked by the Py_TRASHCAN_BEGIN(). */
|
||||
PyAPI_FUNC(int) _PyTrash_cond(PyObject *op, destructor dealloc);
|
||||
|
||||
#define PyTrash_UNWIND_LEVEL 50
|
||||
|
||||
|
@ -539,7 +541,7 @@ PyAPI_FUNC(void) _PyTrash_end(struct _ts *tstate);
|
|||
|
||||
#define Py_TRASHCAN_BEGIN(op, dealloc) \
|
||||
Py_TRASHCAN_BEGIN_CONDITION(op, \
|
||||
Py_TYPE(op)->tp_dealloc == (destructor)(dealloc))
|
||||
_PyTrash_cond(_PyObject_CAST(op), (destructor)dealloc))
|
||||
|
||||
/* For backwards compatibility, these macros enable the trashcan
|
||||
* unconditionally */
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
The ``Py_TRASHCAN_BEGIN`` macro no longer accesses PyTypeObject attributes,
|
||||
but now can get the condition by calling the new private
|
||||
:c:func:`_PyTrash_cond()` function which hides implementation details.
|
|
@ -2134,6 +2134,15 @@ _PyTrash_end(PyThreadState *tstate)
|
|||
}
|
||||
|
||||
|
||||
/* bpo-40170: It's only be used in Py_TRASHCAN_BEGIN macro to hide
|
||||
implementation details. */
|
||||
int
|
||||
_PyTrash_cond(PyObject *op, destructor dealloc)
|
||||
{
|
||||
return Py_TYPE(op)->tp_dealloc == dealloc;
|
||||
}
|
||||
|
||||
|
||||
void _Py_NO_RETURN
|
||||
_PyObject_AssertFailed(PyObject *obj, const char *expr, const char *msg,
|
||||
const char *file, int line, const char *function)
|
||||
|
|
Loading…
Reference in New Issue