From e1fd675769343697c83e018f7fe629eb586dac21 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 23 Jan 2025 23:39:56 +0100 Subject: [PATCH 1/8] gh-128863: Deprecate the private _PyUnicodeWriter API Deprecate private C API functions: * _PyUnicodeWriter_Init() * _PyUnicodeWriter_Finish() * _PyUnicodeWriter_Dealloc() * _PyUnicodeWriter_WriteChar() * _PyUnicodeWriter_WriteStr() * _PyUnicodeWriter_WriteSubstring() * _PyUnicodeWriter_WriteASCIIString() * _PyUnicodeWriter_WriteLatin1String() These functions are not deprecated in the internal C API (if the Py_BUILD_CORE macro is defined). --- .../c-api-pending-removal-in-3.18.rst | 8 +++ Doc/whatsnew/3.14.rst | 8 +++ Include/cpython/unicodeobject.h | 68 ++++++++++--------- ...-01-15-11-42-07.gh-issue-128863.C9MkB_.rst | 8 +++ 4 files changed, 60 insertions(+), 32 deletions(-) diff --git a/Doc/deprecations/c-api-pending-removal-in-3.18.rst b/Doc/deprecations/c-api-pending-removal-in-3.18.rst index 361e1a9abf22d7..9e2f7bf409be56 100644 --- a/Doc/deprecations/c-api-pending-removal-in-3.18.rst +++ b/Doc/deprecations/c-api-pending-removal-in-3.18.rst @@ -10,6 +10,14 @@ Pending removal in Python 3.18 * :c:func:`!_PyLong_New`: use :c:func:`PyLongWriter_Create`. * :c:func:`!_PyThreadState_UncheckedGet`: use :c:func:`PyThreadState_GetUnchecked`. * :c:func:`!_PyUnicode_AsString`: use :c:func:`PyUnicode_AsUTF8`. + * :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create` + * :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish` + * :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard` + * :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar` + * :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr` + * :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring` + * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8` + * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8` * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst index f463ed415d6a20..8faec5b5204447 100644 --- a/Doc/whatsnew/3.14.rst +++ b/Doc/whatsnew/3.14.rst @@ -1399,6 +1399,14 @@ Deprecated * :c:func:`!_PyLong_New`: use :c:func:`PyLongWriter_Create`. * :c:func:`!_PyThreadState_UncheckedGet`: use :c:func:`PyThreadState_GetUnchecked`. * :c:func:`!_PyUnicode_AsString`: use :c:func:`PyUnicode_AsUTF8`. + * :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create` + * :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish` + * :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard` + * :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar` + * :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr` + * :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring` + * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8` + * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8` * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. diff --git a/Include/cpython/unicodeobject.h b/Include/cpython/unicodeobject.h index 287de52b96202c..2f0760f5b7c9fb 100644 --- a/Include/cpython/unicodeobject.h +++ b/Include/cpython/unicodeobject.h @@ -521,13 +521,19 @@ typedef struct { unsigned char readonly; } _PyUnicodeWriter; +#ifndef Py_BUILD_CORE +# define _Py_PUBLIC_DEPRECATED(version) Py_DEPRECATED(version) +#else +# define _Py_PUBLIC_DEPRECATED(version) +#endif + // Initialize a Unicode writer. // // By default, the minimum buffer size is 0 character and overallocation is // disabled. Set min_length, min_char and overallocate attributes to control // the allocation of the buffer. -PyAPI_FUNC(void) -_PyUnicodeWriter_Init(_PyUnicodeWriter *writer); +_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(void) _PyUnicodeWriter_Init( + _PyUnicodeWriter *writer); /* Prepare the buffer to write 'length' characters with the specified maximum character. @@ -543,9 +549,10 @@ _PyUnicodeWriter_Init(_PyUnicodeWriter *writer); /* Don't call this function directly, use the _PyUnicodeWriter_Prepare() macro instead. */ -PyAPI_FUNC(int) -_PyUnicodeWriter_PrepareInternal(_PyUnicodeWriter *writer, - Py_ssize_t length, Py_UCS4 maxchar); +_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_PrepareInternal( + _PyUnicodeWriter *writer, + Py_ssize_t length, + Py_UCS4 maxchar); /* Prepare the buffer to have at least the kind KIND. For example, kind=PyUnicode_2BYTE_KIND ensures that the writer will @@ -559,58 +566,55 @@ _PyUnicodeWriter_PrepareInternal(_PyUnicodeWriter *writer, /* Don't call this function directly, use the _PyUnicodeWriter_PrepareKind() macro instead. */ -PyAPI_FUNC(int) -_PyUnicodeWriter_PrepareKindInternal(_PyUnicodeWriter *writer, - int kind); +_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_PrepareKindInternal( + _PyUnicodeWriter *writer, + int kind); /* Append a Unicode character. Return 0 on success, raise an exception and return -1 on error. */ -PyAPI_FUNC(int) -_PyUnicodeWriter_WriteChar(_PyUnicodeWriter *writer, - Py_UCS4 ch - ); +_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteChar( + _PyUnicodeWriter *writer, + Py_UCS4 ch); /* Append a Unicode string. Return 0 on success, raise an exception and return -1 on error. */ -PyAPI_FUNC(int) -_PyUnicodeWriter_WriteStr(_PyUnicodeWriter *writer, - PyObject *str /* Unicode string */ - ); +_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteStr( + _PyUnicodeWriter *writer, + PyObject *str); /* Unicode string */ /* Append a substring of a Unicode string. Return 0 on success, raise an exception and return -1 on error. */ -PyAPI_FUNC(int) -_PyUnicodeWriter_WriteSubstring(_PyUnicodeWriter *writer, +_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteSubstring( + _PyUnicodeWriter *writer, PyObject *str, /* Unicode string */ Py_ssize_t start, - Py_ssize_t end - ); + Py_ssize_t end); /* Append an ASCII-encoded byte string. Return 0 on success, raise an exception and return -1 on error. */ -PyAPI_FUNC(int) -_PyUnicodeWriter_WriteASCIIString(_PyUnicodeWriter *writer, +_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteASCIIString( + _PyUnicodeWriter *writer, const char *str, /* ASCII-encoded byte string */ - Py_ssize_t len /* number of bytes, or -1 if unknown */ - ); + Py_ssize_t len); /* number of bytes, or -1 if unknown */ /* Append a latin1-encoded byte string. Return 0 on success, raise an exception and return -1 on error. */ -PyAPI_FUNC(int) -_PyUnicodeWriter_WriteLatin1String(_PyUnicodeWriter *writer, +_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteLatin1String( + _PyUnicodeWriter *writer, const char *str, /* latin1-encoded byte string */ - Py_ssize_t len /* length in bytes */ - ); + Py_ssize_t len); /* length in bytes */ /* Get the value of the writer as a Unicode string. Clear the buffer of the writer. Raise an exception and return NULL on error. */ -PyAPI_FUNC(PyObject *) -_PyUnicodeWriter_Finish(_PyUnicodeWriter *writer); +_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(PyObject *) _PyUnicodeWriter_Finish( + _PyUnicodeWriter *writer); /* Deallocate memory of a writer (clear its internal buffer). */ -PyAPI_FUNC(void) -_PyUnicodeWriter_Dealloc(_PyUnicodeWriter *writer); +_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(void) _PyUnicodeWriter_Dealloc( + _PyUnicodeWriter *writer); + +#undef _Py_PUBLIC_DEPRECATED /* --- Manage the default encoding ---------------------------------------- */ diff --git a/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst b/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst index 7e6a8484b8887c..b815ad28de26d8 100644 --- a/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst +++ b/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst @@ -8,6 +8,14 @@ Python 3.18: * :c:func:`!_PyLong_New`: use :c:func:`PyLongWriter_Create`. * :c:func:`!_PyThreadState_UncheckedGet`: use :c:func:`PyThreadState_GetUnchecked`. * :c:func:`!_PyUnicode_AsString`: use :c:func:`PyUnicode_AsUTF8`. +* :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create` +* :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish` +* :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard` +* :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar` +* :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr` +* :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring` +* :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8` +* :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8` * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. From 2ec2b46d0b244e062f13384da862b21bdb0d6614 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 27 Jan 2025 16:10:02 +0100 Subject: [PATCH 2/8] Replace Init with PyUnicodeWriter_Create(0) --- .../c-api-pending-removal-in-3.18.rst | 16 ++++++++-------- Doc/whatsnew/3.14.rst | 18 +++++++++--------- ...5-01-15-11-42-07.gh-issue-128863.C9MkB_.rst | 16 ++++++++-------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Doc/deprecations/c-api-pending-removal-in-3.18.rst b/Doc/deprecations/c-api-pending-removal-in-3.18.rst index 9e2f7bf409be56..a702536f506dd9 100644 --- a/Doc/deprecations/c-api-pending-removal-in-3.18.rst +++ b/Doc/deprecations/c-api-pending-removal-in-3.18.rst @@ -10,14 +10,14 @@ Pending removal in Python 3.18 * :c:func:`!_PyLong_New`: use :c:func:`PyLongWriter_Create`. * :c:func:`!_PyThreadState_UncheckedGet`: use :c:func:`PyThreadState_GetUnchecked`. * :c:func:`!_PyUnicode_AsString`: use :c:func:`PyUnicode_AsUTF8`. - * :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create` - * :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish` - * :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard` - * :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar` - * :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr` - * :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring` - * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8` - * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8` + * :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create(0) ` instead. + * :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish`. + * :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard`. + * :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar`. + * :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr`. + * :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring`. + * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8`. + * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8`. * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst index 8faec5b5204447..3ebc7dfe1cfec1 100644 --- a/Doc/whatsnew/3.14.rst +++ b/Doc/whatsnew/3.14.rst @@ -1344,7 +1344,7 @@ Porting to Python 3.14 * ``_PyLong_Sign()``: :c:func:`PyLong_GetSign`; * ``_PyUnicodeWriter_Dealloc()``: :c:func:`PyUnicodeWriter_Discard`; * ``_PyUnicodeWriter_Finish()``: :c:func:`PyUnicodeWriter_Finish`; - * ``_PyUnicodeWriter_Init()``: :c:func:`PyUnicodeWriter_Create`; + * ``_PyUnicodeWriter_Init()``: use :c:func:`PyUnicodeWriter_Create(0) ` instead; * ``_PyUnicodeWriter_WriteChar()``: :c:func:`PyUnicodeWriter_WriteChar`; * ``_PyUnicodeWriter_WriteStr()``: :c:func:`PyUnicodeWriter_WriteStr`; * ``_PyUnicodeWriter_WriteSubstring()``: :c:func:`PyUnicodeWriter_WriteSubstring`; @@ -1399,14 +1399,14 @@ Deprecated * :c:func:`!_PyLong_New`: use :c:func:`PyLongWriter_Create`. * :c:func:`!_PyThreadState_UncheckedGet`: use :c:func:`PyThreadState_GetUnchecked`. * :c:func:`!_PyUnicode_AsString`: use :c:func:`PyUnicode_AsUTF8`. - * :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create` - * :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish` - * :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard` - * :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar` - * :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr` - * :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring` - * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8` - * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8` + * :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create(0) ` instead. + * :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish`. + * :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard`. + * :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar`. + * :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr`. + * :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring`. + * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8`. + * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8`. * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. diff --git a/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst b/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst index b815ad28de26d8..ceb6663917b404 100644 --- a/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst +++ b/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst @@ -8,14 +8,14 @@ Python 3.18: * :c:func:`!_PyLong_New`: use :c:func:`PyLongWriter_Create`. * :c:func:`!_PyThreadState_UncheckedGet`: use :c:func:`PyThreadState_GetUnchecked`. * :c:func:`!_PyUnicode_AsString`: use :c:func:`PyUnicode_AsUTF8`. -* :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create` -* :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish` -* :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard` -* :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar` -* :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr` -* :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring` -* :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8` -* :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8` +* :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create(0) ` instead. +* :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish`. +* :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard`. +* :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar`. +* :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr`. +* :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring`. +* :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8`. +* :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8`. * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. From c8e6c22da7efd53be13bfb9971a55f829829ac46 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 28 Jan 2025 16:05:23 +0100 Subject: [PATCH 3/8] Elaborate how to update code --- .../c-api-pending-removal-in-3.18.rst | 32 +++++++--- Doc/whatsnew/3.14.rst | 62 ++++++++++++------- 2 files changed, 63 insertions(+), 31 deletions(-) diff --git a/Doc/deprecations/c-api-pending-removal-in-3.18.rst b/Doc/deprecations/c-api-pending-removal-in-3.18.rst index a702536f506dd9..62c890de39f7d1 100644 --- a/Doc/deprecations/c-api-pending-removal-in-3.18.rst +++ b/Doc/deprecations/c-api-pending-removal-in-3.18.rst @@ -10,14 +10,30 @@ Pending removal in Python 3.18 * :c:func:`!_PyLong_New`: use :c:func:`PyLongWriter_Create`. * :c:func:`!_PyThreadState_UncheckedGet`: use :c:func:`PyThreadState_GetUnchecked`. * :c:func:`!_PyUnicode_AsString`: use :c:func:`PyUnicode_AsUTF8`. - * :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create(0) ` instead. - * :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish`. - * :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard`. - * :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar`. - * :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr`. - * :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring`. - * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8`. - * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8`. + * :c:func:`!_PyUnicodeWriter_Init`: + replace ``_PyUnicodeWriter_Init(&writer)`` with + :c:func:`writer = PyUnicodeWriter_Create(0) `. + * :c:func:`!_PyUnicodeWriter_Finish`: + replace ``_PyUnicodeWriter_Finish(&writer)`` with + :c:func:`PyUnicodeWriter_Finish(writer) `. + * :c:func:`!_PyUnicodeWriter_Dealloc`: + replace ``_PyUnicodeWriter_Dealloc(&writer)`` with + :c:func:`PyUnicodeWriter_Discard(writer) `. + * :c:func:`!_PyUnicodeWriter_WriteChar`: + replace ``_PyUnicodeWriter_WriteChar(&writer, ch)`` with + :c:func:`PyUnicodeWriter_WriteChar(writer, ch) `. + * :c:func:`!_PyUnicodeWriter_WriteStr`: + replace ``_PyUnicodeWriter_WriteStr(&writer, str)`` with + :c:func:`PyUnicodeWriter_WriteStr(writer, str) `. + * :c:func:`!_PyUnicodeWriter_WriteSubstring`: + replace ``_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)`` with + :c:func:`PyUnicodeWriter_WriteSubstring(writer, str, start, end) `. + * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: + replace ``_PyUnicodeWriter_WriteASCIIString(&writer, str)`` with + :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) `. + * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: + replace ``_PyUnicodeWriter_WriteLatin1String(&writer, str)`` with + :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) `. * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst index 3ebc7dfe1cfec1..a04a5a7a347d99 100644 --- a/Doc/whatsnew/3.14.rst +++ b/Doc/whatsnew/3.14.rst @@ -1337,21 +1337,21 @@ Porting to Python 3.14 * Private functions promoted to public C APIs: - * ``_PyBytes_Join()``: :c:func:`PyBytes_Join`; - * ``_PyLong_IsNegative()``: :c:func:`PyLong_IsNegative`; - * ``_PyLong_IsPositive()``: :c:func:`PyLong_IsPositive`; - * ``_PyLong_IsZero()``: :c:func:`PyLong_IsZero`; - * ``_PyLong_Sign()``: :c:func:`PyLong_GetSign`; - * ``_PyUnicodeWriter_Dealloc()``: :c:func:`PyUnicodeWriter_Discard`; - * ``_PyUnicodeWriter_Finish()``: :c:func:`PyUnicodeWriter_Finish`; - * ``_PyUnicodeWriter_Init()``: use :c:func:`PyUnicodeWriter_Create(0) ` instead; - * ``_PyUnicodeWriter_WriteChar()``: :c:func:`PyUnicodeWriter_WriteChar`; - * ``_PyUnicodeWriter_WriteStr()``: :c:func:`PyUnicodeWriter_WriteStr`; - * ``_PyUnicodeWriter_WriteSubstring()``: :c:func:`PyUnicodeWriter_WriteSubstring`; - * ``_PyUnicode_EQ()``: :c:func:`PyUnicode_Equal`; - * ``_PyUnicode_Equal()``: :c:func:`PyUnicode_Equal`; - * ``_Py_GetConfig()``: :c:func:`PyConfig_Get` and :c:func:`PyConfig_GetInt`; - * ``_Py_HashBytes()``: :c:func:`Py_HashBuffer`; + * ``_PyBytes_Join()``: :c:func:`PyBytes_Join`. + * ``_PyLong_IsNegative()``: :c:func:`PyLong_IsNegative`. + * ``_PyLong_IsPositive()``: :c:func:`PyLong_IsPositive`. + * ``_PyLong_IsZero()``: :c:func:`PyLong_IsZero`. + * ``_PyLong_Sign()``: :c:func:`PyLong_GetSign`. + * ``_PyUnicodeWriter_Dealloc()``: :c:func:`PyUnicodeWriter_Discard`. + * ``_PyUnicodeWriter_Finish()``: :c:func:`PyUnicodeWriter_Finish`. + * ``_PyUnicodeWriter_Init()``: use :c:func:`PyUnicodeWriter_Create`. + * ``_PyUnicodeWriter_WriteChar()``: :c:func:`PyUnicodeWriter_WriteChar`. + * ``_PyUnicodeWriter_WriteStr()``: :c:func:`PyUnicodeWriter_WriteStr`. + * ``_PyUnicodeWriter_WriteSubstring()``: :c:func:`PyUnicodeWriter_WriteSubstring`. + * ``_PyUnicode_EQ()``: :c:func:`PyUnicode_Equal`. + * ``_PyUnicode_Equal()``: :c:func:`PyUnicode_Equal`. + * ``_Py_GetConfig()``: :c:func:`PyConfig_Get` and :c:func:`PyConfig_GetInt`. + * ``_Py_HashBytes()``: :c:func:`Py_HashBuffer`. * ``_Py_fopen_obj()``: :c:func:`Py_fopen`. The `pythoncapi-compat project`_ can be used to get most of these new @@ -1399,14 +1399,30 @@ Deprecated * :c:func:`!_PyLong_New`: use :c:func:`PyLongWriter_Create`. * :c:func:`!_PyThreadState_UncheckedGet`: use :c:func:`PyThreadState_GetUnchecked`. * :c:func:`!_PyUnicode_AsString`: use :c:func:`PyUnicode_AsUTF8`. - * :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create(0) ` instead. - * :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish`. - * :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard`. - * :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar`. - * :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr`. - * :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring`. - * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8`. - * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8`. + * :c:func:`!_PyUnicodeWriter_Init`: + replace ``_PyUnicodeWriter_Init(&writer)`` with + :c:func:`writer = PyUnicodeWriter_Create(0) `. + * :c:func:`!_PyUnicodeWriter_Finish`: + replace ``_PyUnicodeWriter_Finish(&writer)`` with + :c:func:`PyUnicodeWriter_Finish(writer) `. + * :c:func:`!_PyUnicodeWriter_Dealloc`: + replace ``_PyUnicodeWriter_Dealloc(&writer)`` with + :c:func:`PyUnicodeWriter_Discard(writer) `. + * :c:func:`!_PyUnicodeWriter_WriteChar`: + replace ``_PyUnicodeWriter_WriteChar(&writer, ch)`` with + :c:func:`PyUnicodeWriter_WriteChar(writer, ch) `. + * :c:func:`!_PyUnicodeWriter_WriteStr`: + replace ``_PyUnicodeWriter_WriteStr(&writer, str)`` with + :c:func:`PyUnicodeWriter_WriteStr(writer, str) `. + * :c:func:`!_PyUnicodeWriter_WriteSubstring`: + replace ``_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)`` with + :c:func:`PyUnicodeWriter_WriteSubstring(writer, str, start, end) `. + * :c:func:`!_PyUnicodeWriter_WriteASCIIString`: + replace ``_PyUnicodeWriter_WriteASCIIString(&writer, str)`` with + :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) `. + * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: + replace ``_PyUnicodeWriter_WriteLatin1String(&writer, str)`` with + :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) `. * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. From 959a603e7bf274fd212b0aab46277cb485b74e49 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 28 Jan 2025 16:06:59 +0100 Subject: [PATCH 4/8] Rename the macro to _Py_DEPRECATED_EXTERNALLY --- Include/cpython/unicodeobject.h | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Include/cpython/unicodeobject.h b/Include/cpython/unicodeobject.h index 2f0760f5b7c9fb..e7c50af46f29fb 100644 --- a/Include/cpython/unicodeobject.h +++ b/Include/cpython/unicodeobject.h @@ -522,9 +522,9 @@ typedef struct { } _PyUnicodeWriter; #ifndef Py_BUILD_CORE -# define _Py_PUBLIC_DEPRECATED(version) Py_DEPRECATED(version) +# define _Py_DEPRECATED_EXTERNALLY(version) Py_DEPRECATED(version) #else -# define _Py_PUBLIC_DEPRECATED(version) +# define _Py_DEPRECATED_EXTERNALLY(version) #endif // Initialize a Unicode writer. @@ -532,7 +532,7 @@ typedef struct { // By default, the minimum buffer size is 0 character and overallocation is // disabled. Set min_length, min_char and overallocate attributes to control // the allocation of the buffer. -_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(void) _PyUnicodeWriter_Init( +_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(void) _PyUnicodeWriter_Init( _PyUnicodeWriter *writer); /* Prepare the buffer to write 'length' characters @@ -549,7 +549,7 @@ _Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(void) _PyUnicodeWriter_Init( /* Don't call this function directly, use the _PyUnicodeWriter_Prepare() macro instead. */ -_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_PrepareInternal( +_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_PrepareInternal( _PyUnicodeWriter *writer, Py_ssize_t length, Py_UCS4 maxchar); @@ -566,25 +566,25 @@ _Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_PrepareInternal( /* Don't call this function directly, use the _PyUnicodeWriter_PrepareKind() macro instead. */ -_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_PrepareKindInternal( +_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_PrepareKindInternal( _PyUnicodeWriter *writer, int kind); /* Append a Unicode character. Return 0 on success, raise an exception and return -1 on error. */ -_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteChar( +_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteChar( _PyUnicodeWriter *writer, Py_UCS4 ch); /* Append a Unicode string. Return 0 on success, raise an exception and return -1 on error. */ -_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteStr( +_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteStr( _PyUnicodeWriter *writer, PyObject *str); /* Unicode string */ /* Append a substring of a Unicode string. Return 0 on success, raise an exception and return -1 on error. */ -_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteSubstring( +_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteSubstring( _PyUnicodeWriter *writer, PyObject *str, /* Unicode string */ Py_ssize_t start, @@ -592,14 +592,14 @@ _Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteSubstring( /* Append an ASCII-encoded byte string. Return 0 on success, raise an exception and return -1 on error. */ -_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteASCIIString( +_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteASCIIString( _PyUnicodeWriter *writer, const char *str, /* ASCII-encoded byte string */ Py_ssize_t len); /* number of bytes, or -1 if unknown */ /* Append a latin1-encoded byte string. Return 0 on success, raise an exception and return -1 on error. */ -_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteLatin1String( +_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteLatin1String( _PyUnicodeWriter *writer, const char *str, /* latin1-encoded byte string */ Py_ssize_t len); /* length in bytes */ @@ -607,14 +607,14 @@ _Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(int) _PyUnicodeWriter_WriteLatin1String( /* Get the value of the writer as a Unicode string. Clear the buffer of the writer. Raise an exception and return NULL on error. */ -_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(PyObject *) _PyUnicodeWriter_Finish( +_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(PyObject *) _PyUnicodeWriter_Finish( _PyUnicodeWriter *writer); /* Deallocate memory of a writer (clear its internal buffer). */ -_Py_PUBLIC_DEPRECATED(3.14) PyAPI_FUNC(void) _PyUnicodeWriter_Dealloc( +_Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(void) _PyUnicodeWriter_Dealloc( _PyUnicodeWriter *writer); -#undef _Py_PUBLIC_DEPRECATED +#undef _Py_DEPRECATED_EXTERNALLY /* --- Manage the default encoding ---------------------------------------- */ From a2df55cf0379091c6264d17809a7632b9d618e12 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 28 Jan 2025 16:08:41 +0100 Subject: [PATCH 5/8] Update NEWS entry --- ...-01-15-11-42-07.gh-issue-128863.C9MkB_.rst | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst b/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst index aeaea75b4d4982..06abb7f4bd8b00 100644 --- a/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst +++ b/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst @@ -9,14 +9,30 @@ Python 3.18: use :c:func:`PyLongWriter_Create`. * :c:func:`!_PyThreadState_UncheckedGet`: use :c:func:`PyThreadState_GetUnchecked`. * :c:func:`!_PyUnicode_AsString`: use :c:func:`PyUnicode_AsUTF8`. -* :c:func:`!_PyUnicodeWriter_Init`: use :c:func:`PyUnicodeWriter_Create(0) ` instead. -* :c:func:`!_PyUnicodeWriter_Finish`: use :c:func:`PyUnicodeWriter_Finish`. -* :c:func:`!_PyUnicodeWriter_Dealloc`: use :c:func:`PyUnicodeWriter_Discard`. -* :c:func:`!_PyUnicodeWriter_WriteChar`: use :c:func:`PyUnicodeWriter_WriteChar`. -* :c:func:`!_PyUnicodeWriter_WriteStr`: use :c:func:`PyUnicodeWriter_WriteStr`. -* :c:func:`!_PyUnicodeWriter_WriteSubstring`: use :c:func:`PyUnicodeWriter_WriteSubstring`. -* :c:func:`!_PyUnicodeWriter_WriteASCIIString`: use :c:func:`PyUnicodeWriter_WriteUTF8`. -* :c:func:`!_PyUnicodeWriter_WriteLatin1String`: use :c:func:`PyUnicodeWriter_WriteUTF8`. +* :c:func:`!_PyUnicodeWriter_Init`: + replace ``_PyUnicodeWriter_Init(&writer)`` with + :c:func:`writer = PyUnicodeWriter_Create(0) `. +* :c:func:`!_PyUnicodeWriter_Finish`: + replace ``_PyUnicodeWriter_Finish(&writer)`` with + :c:func:`PyUnicodeWriter_Finish(writer) `. +* :c:func:`!_PyUnicodeWriter_Dealloc`: + replace ``_PyUnicodeWriter_Dealloc(&writer)`` with + :c:func:`PyUnicodeWriter_Discard(writer) `. +* :c:func:`!_PyUnicodeWriter_WriteChar`: + replace ``_PyUnicodeWriter_WriteChar(&writer, ch)`` with + :c:func:`PyUnicodeWriter_WriteChar(writer, ch) `. +* :c:func:`!_PyUnicodeWriter_WriteStr`: + replace ``_PyUnicodeWriter_WriteStr(&writer, str)`` with + :c:func:`PyUnicodeWriter_WriteStr(writer, str) `. +* :c:func:`!_PyUnicodeWriter_WriteSubstring`: + replace ``_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)`` with + :c:func:`PyUnicodeWriter_WriteSubstring(writer, str, start, end) `. +* :c:func:`!_PyUnicodeWriter_WriteASCIIString`: + replace ``_PyUnicodeWriter_WriteASCIIString(&writer, str)`` with + :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) `. +* :c:func:`!_PyUnicodeWriter_WriteLatin1String`: + replace ``_PyUnicodeWriter_WriteLatin1String(&writer, str)`` with + :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) `. * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. From a42355321462215d92ae1d053d9357899e6dd2e3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 28 Jan 2025 16:14:55 +0100 Subject: [PATCH 6/8] Don't redefine _Py_DEPRECATED_EXTERNALLY() --- Include/cpython/unicodeobject.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Include/cpython/unicodeobject.h b/Include/cpython/unicodeobject.h index e7c50af46f29fb..444760a1e32b5c 100644 --- a/Include/cpython/unicodeobject.h +++ b/Include/cpython/unicodeobject.h @@ -521,12 +521,6 @@ typedef struct { unsigned char readonly; } _PyUnicodeWriter; -#ifndef Py_BUILD_CORE -# define _Py_DEPRECATED_EXTERNALLY(version) Py_DEPRECATED(version) -#else -# define _Py_DEPRECATED_EXTERNALLY(version) -#endif - // Initialize a Unicode writer. // // By default, the minimum buffer size is 0 character and overallocation is @@ -614,8 +608,6 @@ _Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(PyObject *) _PyUnicodeWriter_Finish( _Py_DEPRECATED_EXTERNALLY(3.14) PyAPI_FUNC(void) _PyUnicodeWriter_Dealloc( _PyUnicodeWriter *writer); -#undef _Py_DEPRECATED_EXTERNALLY - /* --- Manage the default encoding ---------------------------------------- */ From 2a01b13634bcbf47ec3701a6cec1839424fff5e2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 29 Jan 2025 08:23:15 +0100 Subject: [PATCH 7/8] Document _PyUnicodeWriter_Prepare() deprecation --- Doc/deprecations/c-api-pending-removal-in-3.18.rst | 2 ++ Doc/whatsnew/3.14.rst | 2 ++ .../next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst | 2 ++ 3 files changed, 6 insertions(+) diff --git a/Doc/deprecations/c-api-pending-removal-in-3.18.rst b/Doc/deprecations/c-api-pending-removal-in-3.18.rst index 1b7e45576f6055..b0b8ceaea86cba 100644 --- a/Doc/deprecations/c-api-pending-removal-in-3.18.rst +++ b/Doc/deprecations/c-api-pending-removal-in-3.18.rst @@ -35,6 +35,8 @@ Pending removal in Python 3.18 * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: replace ``_PyUnicodeWriter_WriteLatin1String(&writer, str)`` with :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) `. + * :c:func:`_PyUnicodeWriter_Prepare`: (no replacement). + * :c:func:`_PyUnicodeWriter_PrepareKind`: (no replacement). * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst index a91cd70ad499b3..622b8a23f8532e 100644 --- a/Doc/whatsnew/3.14.rst +++ b/Doc/whatsnew/3.14.rst @@ -1360,6 +1360,8 @@ Porting to Python 3.14 * ``_PyUnicodeWriter_Dealloc()``: :c:func:`PyUnicodeWriter_Discard`. * ``_PyUnicodeWriter_Finish()``: :c:func:`PyUnicodeWriter_Finish`. * ``_PyUnicodeWriter_Init()``: use :c:func:`PyUnicodeWriter_Create`. + * ``_PyUnicodeWriter_Prepare()``: (no replacement). + * ``_PyUnicodeWriter_PrepareKind()``: (no replacement). * ``_PyUnicodeWriter_WriteChar()``: :c:func:`PyUnicodeWriter_WriteChar`. * ``_PyUnicodeWriter_WriteStr()``: :c:func:`PyUnicodeWriter_WriteStr`. * ``_PyUnicodeWriter_WriteSubstring()``: :c:func:`PyUnicodeWriter_WriteSubstring`. diff --git a/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst b/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst index 06abb7f4bd8b00..665e5afb44a300 100644 --- a/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst +++ b/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst @@ -33,6 +33,8 @@ Python 3.18: * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: replace ``_PyUnicodeWriter_WriteLatin1String(&writer, str)`` with :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) `. +* :c:func:`_PyUnicodeWriter_Prepare`: (no replacement). +* :c:func:`_PyUnicodeWriter_PrepareKind`: (no replacement). * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. From d650aae785c287d3c88156d7aa7fd76af457d02b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 3 Feb 2025 18:12:58 +0100 Subject: [PATCH 8/8] Fix doc --- Doc/deprecations/c-api-pending-removal-in-3.18.rst | 4 ++-- .../next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doc/deprecations/c-api-pending-removal-in-3.18.rst b/Doc/deprecations/c-api-pending-removal-in-3.18.rst index b0b8ceaea86cba..564cfb79a0b513 100644 --- a/Doc/deprecations/c-api-pending-removal-in-3.18.rst +++ b/Doc/deprecations/c-api-pending-removal-in-3.18.rst @@ -35,8 +35,8 @@ Pending removal in Python 3.18 * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: replace ``_PyUnicodeWriter_WriteLatin1String(&writer, str)`` with :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) `. - * :c:func:`_PyUnicodeWriter_Prepare`: (no replacement). - * :c:func:`_PyUnicodeWriter_PrepareKind`: (no replacement). + * :c:func:`!_PyUnicodeWriter_Prepare`: (no replacement). + * :c:func:`!_PyUnicodeWriter_PrepareKind`: (no replacement). * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`. diff --git a/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst b/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst index 665e5afb44a300..f031f636bceb23 100644 --- a/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst +++ b/Misc/NEWS.d/next/C_API/2025-01-15-11-42-07.gh-issue-128863.C9MkB_.rst @@ -33,8 +33,8 @@ Python 3.18: * :c:func:`!_PyUnicodeWriter_WriteLatin1String`: replace ``_PyUnicodeWriter_WriteLatin1String(&writer, str)`` with :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) `. -* :c:func:`_PyUnicodeWriter_Prepare`: (no replacement). -* :c:func:`_PyUnicodeWriter_PrepareKind`: (no replacement). +* :c:func:`!_PyUnicodeWriter_Prepare`: (no replacement). +* :c:func:`!_PyUnicodeWriter_PrepareKind`: (no replacement). * :c:func:`!_Py_HashPointer`: use :c:func:`Py_HashPointer`. * :c:func:`!_Py_fopen_obj`: use :c:func:`Py_fopen`.