Skip to content

Commit

Permalink
pythongh-105111: remove deprecated macros Py_TRASHCAN_SAFE_BEGIN and …
Browse files Browse the repository at this point in the history
…Py_TRASHCAN_SAFE_END (python#105112)
  • Loading branch information
iritkatriel committed May 31, 2023
1 parent 0430e97 commit fbc9d0d
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 13 deletions.
34 changes: 34 additions & 0 deletions Doc/whatsnew/3.13.rst
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,11 @@ Removed
third-party Tix library which the module wrapped is unmaintained.
(Contributed by Zachary Ware in :gh:`75552`.)

* Remove the old trashcan macros ``Py_TRASHCAN_SAFE_BEGIN`` and
``Py_TRASHCAN_SAFE_END``. They should be replaced by the new macros
``Py_TRASHCAN_BEGIN`` and ``Py_TRASHCAN_END``. The new macros were
added in Python 3.8 and the old macros were deprecated in Python 3.11.
(Contributed by Irit Katriel in :gh:`105111`.)


Porting to Python 3.13
Expand All @@ -294,6 +299,35 @@ Porting to Python 3.13
This section lists previously described changes and other bugfixes
that may require changes to your code.

* The old trashcan macros ``Py_TRASHCAN_SAFE_BEGIN`` and ``Py_TRASHCAN_SAFE_END``
were removed. They should be replaced by the new macros ``Py_TRASHCAN_BEGIN``
and ``Py_TRASHCAN_END``.

A tp_dealloc function that has the old macros, such as::

static void
mytype_dealloc(mytype *p)
{
PyObject_GC_UnTrack(p);
Py_TRASHCAN_SAFE_BEGIN(p);
...
Py_TRASHCAN_SAFE_END
}

should migrate to the new macros as follows::

static void
mytype_dealloc(mytype *p)
{
PyObject_GC_UnTrack(p);
Py_TRASHCAN_BEGIN(p, mytype_dealloc)
...
Py_TRASHCAN_END
}

Note that ``Py_TRASHCAN_BEGIN`` has a second argument which
should be the deallocation function it is in.


Build Changes
=============
Expand Down
13 changes: 0 additions & 13 deletions Include/cpython/object.h
Original file line number Diff line number Diff line change
Expand Up @@ -539,19 +539,6 @@ PyAPI_FUNC(int) _PyTrash_cond(PyObject *op, destructor dealloc);
Py_TRASHCAN_BEGIN_CONDITION((op), \
_PyTrash_cond(_PyObject_CAST(op), (destructor)(dealloc)))

/* The following two macros, Py_TRASHCAN_SAFE_BEGIN and
* Py_TRASHCAN_SAFE_END, are deprecated since version 3.11 and
* will be removed in the future.
* Use Py_TRASHCAN_BEGIN and Py_TRASHCAN_END instead.
*/
Py_DEPRECATED(3.11) typedef int UsingDeprecatedTrashcanMacro;
#define Py_TRASHCAN_SAFE_BEGIN(op) \
do { \
UsingDeprecatedTrashcanMacro cond=1; \
Py_TRASHCAN_BEGIN_CONDITION((op), cond);
#define Py_TRASHCAN_SAFE_END(op) \
Py_TRASHCAN_END; \
} while(0);

PyAPI_FUNC(void *) PyObject_GetItemData(PyObject *obj);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Remove the old trashcan macros
``Py_TRASHCAN_SAFE_BEGIN`` and ``Py_TRASHCAN_SAFE_END``. They should be
replaced by the new macros ``Py_TRASHCAN_BEGIN`` and ``Py_TRASHCAN_END``.

0 comments on commit fbc9d0d

Please sign in to comment.