gh-133644: remove `PyWeakref_GetObject` and `PyWeakref_GET_OBJECT` (G… · python/cpython@a5e0562

GitHub

Original file line numberDiff line numberDiff line change@@ -64,30 +64,6 @@ as much as it can.

6464 .. versionadded:: 3.13

6565666667-.. c:function:: PyObject* PyWeakref_GetObject(PyObject *ref)

68-69- Return a :term:`borrowed reference` to the referenced object from a weak

70- reference, *ref*. If the referent is no longer live, returns ``Py_None``.

71-72- .. note::

73-74- This function returns a :term:`borrowed reference` to the referenced object.

75- This means that you should always call :c:func:`Py_INCREF` on the object

76- except when it cannot be destroyed before the last usage of the borrowed

77- reference.

78-79- .. deprecated-removed:: 3.13 3.15

80- Use :c:func:`PyWeakref_GetRef` instead.

81-82-83-.. c:function:: PyObject* PyWeakref_GET_OBJECT(PyObject *ref)

84-85- Similar to :c:func:`PyWeakref_GetObject`, but does no error checking.

86-87- .. deprecated-removed:: 3.13 3.15

88- Use :c:func:`PyWeakref_GetRef` instead.

89-90-9167.. c:function::intPyWeakref_IsDead(PyObject *ref)

92689369 Test if the weak reference *ref* is dead. Returns 1 if the reference is

Original file line numberDiff line numberDiff line change@@ -2947,12 +2947,6 @@ PyWeakref_CheckProxy:PyObject*:ob:0:

29472947PyWeakref_CheckRef:int:::

29482948PyWeakref_CheckRef:PyObject*:ob:0:

294929492950-PyWeakref_GET_OBJECT:PyObject*::0:

2951-PyWeakref_GET_OBJECT:PyObject*:ref:0:

2952-2953-PyWeakref_GetObject:PyObject*::0:

2954-PyWeakref_GetObject:PyObject*:ref:0:

2955-29562950PyWeakref_GetRef:int:::

29572951PyWeakref_GetRef:PyObject*:ref:0:

29582952PyWeakref_GetRef:PyObject**:pobj:+1:

Original file line numberDiff line numberDiff line change@@ -3,7 +3,7 @@ Pending removal in Python 3.15

3344* The :c:func:`!PyImport_ImportModuleNoBlock`:

55 Use :c:func:`PyImport_ImportModule` instead.

6-* :c:func:`PyWeakref_GetObject` and :c:func:`PyWeakref_GET_OBJECT`:

6+* :c:func:`!PyWeakref_GetObject` and :c:func:`!PyWeakref_GET_OBJECT`:

77 Use :c:func:`PyWeakref_GetRef` instead. The `pythoncapi-compat project

88<https://github.com/python/pythoncapi-compat/>`__ can be used to get

99:c:func:`PyWeakref_GetRef` on Python 3.12 and older.

Original file line numberDiff line numberDiff line change@@ -173,9 +173,9 @@ that return :term:`strong references <strong reference>`.

173173+-----------------------------------+-----------------------------------+

174174|:c:func:`PyDict_Next` | none (see :ref:`PyDict_Next`) |

175175+-----------------------------------+-----------------------------------+

176-|:c:func:`PyWeakref_GetObject`|:c:func:`PyWeakref_GetRef` |

176+|:c:func:`!PyWeakref_GetObject` |:c:func:`PyWeakref_GetRef` |

177177+-----------------------------------+-----------------------------------+

178-|:c:func:`PyWeakref_GET_OBJECT`|:c:func:`PyWeakref_GetRef` |

178+|:c:func:`!PyWeakref_GET_OBJECT` |:c:func:`PyWeakref_GetRef` |

179179+-----------------------------------+-----------------------------------+

180180|:c:func:`PyImport_AddModule` |:c:func:`PyImport_AddModuleRef` |

181181+-----------------------------------+-----------------------------------+

Original file line numberDiff line numberDiff line change@@ -2673,7 +2673,7 @@ Removed

2673267326742674 (Contributed by Victor Stinner in :issue:`45474`.)

267526752676-* Exclude :c:func:`PyWeakref_GET_OBJECT` from the limited C API. It never

2676+* Exclude :c:func:`!PyWeakref_GET_OBJECT` from the limited C API. It never

26772677 worked since the :c:type:`!PyWeakReference` structure is opaque in the

26782678 limited C API.

26792679 (Contributed by Victor Stinner in :issue:`35134`.)

Original file line numberDiff line numberDiff line change@@ -2246,7 +2246,7 @@ New Features

22462246 (Contributed by Serhiy Storchaka in :gh:`110289`.)

2247224722482248* Add the :c:func:`PyWeakref_GetRef` function

2249- as an alternative to :c:func:`PyWeakref_GetObject`

2249+ as an alternative to :c:func:`!PyWeakref_GetObject`

22502250 that returns a :term:`strong reference`

22512251 or ``NULL`` if the referent is no longer live.

22522252 (Contributed by Victor Stinner in :gh:`105927`.)

@@ -2531,8 +2531,8 @@ Deprecated C APIs

25312531 are just aliases to :c:type:`!wchar_t`.

25322532 (Contributed by Victor Stinner in :gh:`105156`.)

253325332534-* Deprecate the :c:func:`PyWeakref_GetObject` and

2535-:c:func:`PyWeakref_GET_OBJECT` functions,

2534+* Deprecate the :c:func:`!PyWeakref_GetObject` and

2535+:c:func:`!PyWeakref_GET_OBJECT` functions,

25362536 which return a :term:`borrowed reference`.

25372537 Replace them with the new :c:func:`PyWeakref_GetRef` function,

25382538 which returns a :term:`strong reference`.

Original file line numberDiff line numberDiff line change@@ -869,6 +869,11 @@ Removed C APIs

869869 of :c:func:`PyImport_ImportModule`.

870870 (Contributed by Bénédikt Tran in :gh:`133644`.)

871871872+* :c:func:`!PyWeakref_GetObject` and :c:macro:`!PyWeakref_GET_OBJECT`:

873+ use :c:func:`PyWeakref_GetRef` instead. The |pythoncapi_compat_project|

874+ can be used to get :c:func:`!PyWeakref_GetRef` on Python 3.12 and older.

875+ (Contributed by Bénédikt Tran in :gh:`133644`.)

876+872877* Remove deprecated :c:func:`!PySys_ResetWarnOptions`.

873878 Clear :data:`sys.warnoptions` and :data:`!warnings.filters` instead.

874879Original file line numberDiff line numberDiff line change@@ -47,20 +47,3 @@ PyAPI_FUNC(void) _PyWeakref_ClearRef(PyWeakReference *self);

47474848// Test if a weak reference is dead.

4949PyAPI_FUNC(int) PyWeakref_IsDead(PyObject*ref);

50-51-Py_DEPRECATED(3.13) staticinlinePyObject*PyWeakref_GET_OBJECT(PyObject*ref_obj)

52-{

53-PyWeakReference*ref=_PyWeakref_CAST(ref_obj);

54-PyObject*obj=ref->wr_object;

55-// Explanation for the Py_REFCNT() check: when a weakref's target is part

56-// of a long chain of deallocations which triggers the trashcan mechanism,

57-// clearing the weakrefs can be delayed long after the target's refcount

58-// has dropped to zero. In the meantime, code accessing the weakref will

59-// be able to "see" the target object even though it is supposed to be

60-// unreachable. See issue gh-60806.

61-if (Py_REFCNT(obj) >0) {

62-returnobj;

63- }

64-returnPy_None;

65-}

66-#definePyWeakref_GET_OBJECT(ref) PyWeakref_GET_OBJECT(_PyObject_CAST(ref))

Original file line numberDiff line numberDiff line change@@ -27,7 +27,6 @@ PyAPI_FUNC(PyObject *) PyWeakref_NewRef(PyObject *ob,

2727PyObject*callback);

2828PyAPI_FUNC(PyObject*) PyWeakref_NewProxy(PyObject*ob,

2929PyObject*callback);

30-Py_DEPRECATED(3.13) PyAPI_FUNC(PyObject*) PyWeakref_GetObject(PyObject*ref);

31303231#if !defined(Py_LIMITED_API) ||Py_LIMITED_API+0 >= 0x030D0000

3332PyAPI_FUNC(int) PyWeakref_GetRef(PyObject*ref, PyObject**pobj);