We only have this left for _PyTrash_begin and _PyTrash_end:
~/Desktop/cpython2 main ✗
» ag _PyTrash_begin .
Misc/NEWS.d/3.9.0a5.rst
1217:PyThreadState attributes, but call new private _PyTrash_begin() and
Include/cpython/object.h
479:PyAPI_FUNC(int) _PyTrash_begin(PyThreadState *tstate, PyObject *op);
» ag _PyTrash_end .
Misc/NEWS.d/3.9.0a5.rst
1218:_PyTrash_end() functions which hide implementation details.
Include/cpython/object.h
480:PyAPI_FUNC(void) _PyTrash_end(PyThreadState *tstate);
Source:
|
/* Python 3.9 private API, invoked by the macros below. */ |
|
PyAPI_FUNC(int) _PyTrash_begin(PyThreadState *tstate, PyObject *op); |
|
PyAPI_FUNC(void) _PyTrash_end(PyThreadState *tstate); |
|
|
They don't even have implementations. Looks like that they used to be called from Py_TRASHCAN_BEGIN and Py_TRASHCAN_END in 3.9:
|
PyAPI_FUNC(int) _PyTrash_begin(struct _ts *tstate, PyObject *op); |
|
PyAPI_FUNC(void) _PyTrash_end(struct _ts *tstate); |
|
|
|
#define PyTrash_UNWIND_LEVEL 50 |
|
|
|
#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \ |
|
do { \ |
|
PyThreadState *_tstate = NULL; \ |
|
/* If "cond" is false, then _tstate remains NULL and the deallocator \ |
|
* is run normally without involving the trashcan */ \ |
|
if (cond) { \ |
|
_tstate = PyThreadState_GET(); \ |
|
if (_PyTrash_begin(_tstate, _PyObject_CAST(op))) { \ |
|
break; \ |
|
} \ |
|
} |
|
/* The body of the deallocator is here. */ |
|
#define Py_TRASHCAN_END \ |
|
if (_tstate) { \ |
|
_PyTrash_end(_tstate); \ |
|
} \ |
|
} while (0); |
|
|
|
#define Py_TRASHCAN_BEGIN(op, dealloc) \ |
|
Py_TRASHCAN_BEGIN_CONDITION(op, \ |
|
Py_TYPE(op)->tp_dealloc == (destructor)(dealloc)) |
But, they are unused since #117763 in ~3.11
What should we do?
- Nothing
- Remove them
- Raise deprecation warning when they are called (but they return
void, it would be hard to do)
CC @markshannon @vstinner
Linked PRs
We only have this left for
_PyTrash_beginand_PyTrash_end:Source:
cpython/Include/cpython/object.h
Lines 478 to 481 in 313b96e
They don't even have implementations. Looks like that they used to be called from
Py_TRASHCAN_BEGINandPy_TRASHCAN_ENDin 3.9:cpython/Include/cpython/object.h
Lines 520 to 545 in 340a82d
But, they are unused since #117763 in ~3.11
What should we do?
void, it would be hard to do)CC @markshannon @vstinner
Linked PRs
_PyTrash_beginand_PyTrash_endC-API functions #128919