]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-41692: Deprecate PyUnicode_InternImmortal() (GH-22486)
authorVictor Stinner <vstinner@python.org>
Fri, 2 Oct 2020 12:49:00 +0000 (14:49 +0200)
committerGitHub <noreply@github.com>
Fri, 2 Oct 2020 12:49:00 +0000 (14:49 +0200)
The PyUnicode_InternImmortal() function is now deprecated and will be
removed in Python 3.12: use PyUnicode_InternInPlace() instead.

Doc/whatsnew/3.10.rst
Include/unicodeobject.h
Misc/NEWS.d/next/C API/2020-10-02-00-57-34.bpo-41692.fDScsF.rst [new file with mode: 0644]
Objects/unicodeobject.c

index f74dd1aa247a340d72875c4d989508f09d6bc9a6..957a3e791ecb69a2bce0a665d1022e01c27416e2 100644 (file)
@@ -299,6 +299,14 @@ Porting to Python 3.10
   Unicode object without initial data.
   (Contributed by Inada Naoki in :issue:`36346`.)
 
+Deprecated
+----------
+
+* The ``PyUnicode_InternImmortal()`` function is now deprecated
+  and will be removed in Python 3.12: use :c:func:`PyUnicode_InternInPlace`
+  instead.
+  (Contributed by Victor Stinner in :issue:`41692`.)
+
 Removed
 -------
 
index 500ce242e9f0e850f483695463701aed7d3cce14..90b3299fd26ceb419a8aaeb0c51b5ab760b1a715 100644 (file)
@@ -261,11 +261,14 @@ PyAPI_FUNC(PyObject *) PyUnicode_FromFormat(
     );
 
 PyAPI_FUNC(void) PyUnicode_InternInPlace(PyObject **);
-PyAPI_FUNC(void) PyUnicode_InternImmortal(PyObject **);
 PyAPI_FUNC(PyObject *) PyUnicode_InternFromString(
     const char *u              /* UTF-8 encoded string */
     );
 
+// PyUnicode_InternImmortal() is deprecated since Python 3.10
+// and will be removed in Python 3.12. Use PyUnicode_InternInPlace() instead.
+Py_DEPRECATED(3.10) PyAPI_FUNC(void) PyUnicode_InternImmortal(PyObject **);
+
 /* Use only if you know it's a string */
 #define PyUnicode_CHECK_INTERNED(op) \
     (((PyASCIIObject *)(op))->state.interned)
diff --git a/Misc/NEWS.d/next/C API/2020-10-02-00-57-34.bpo-41692.fDScsF.rst b/Misc/NEWS.d/next/C API/2020-10-02-00-57-34.bpo-41692.fDScsF.rst
new file mode 100644 (file)
index 0000000..1be37c6
--- /dev/null
@@ -0,0 +1,3 @@
+The ``PyUnicode_InternImmortal()`` function is now deprecated and will be
+removed in Python 3.12: use :c:func:`PyUnicode_InternInPlace` instead.
+Patch by Victor Stinner.
index f32ab417c364caf4a91fce6c9e37edf7628a91a4..cf72238a8d058548a1359ebc9e010d163a1e19ef 100644 (file)
@@ -15764,6 +15764,15 @@ PyUnicode_InternInPlace(PyObject **p)
 void
 PyUnicode_InternImmortal(PyObject **p)
 {
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
+            "PyUnicode_InternImmortal() is deprecated; "
+            "use PyUnicode_InternInPlace() instead", 1) < 0)
+    {
+        // The function has no return value, the exception cannot
+        // be reported to the caller, so just log it.
+        PyErr_WriteUnraisable(NULL);
+    }
+
     PyUnicode_InternInPlace(p);
     if (PyUnicode_CHECK_INTERNED(*p) != SSTATE_INTERNED_IMMORTAL) {
         _PyUnicode_STATE(*p).interned = SSTATE_INTERNED_IMMORTAL;