From 98fa3b53e2aecc5ecec64a921bc9cf4f9d07ac75 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Wed, 20 Oct 2021 11:32:14 +0200 Subject: [PATCH] bpo-45474: Exclude all of marshal.h if Py_LIMITED_API is defined (GH-29061) Also, reword the What's New messages: this doesn't change the limited API, it only brings the Py_LIMITED_API macro closer to the ideal of only allowing the limited API. Automerge-Triggered-By: GH:encukou --- Doc/whatsnew/3.11.rst | 9 ++++++--- Include/marshal.h | 6 ++++-- .../next/C API/2021-10-14-22-16-56.bpo-45474.1OkJQh.rst | 9 +++++---- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index b583c2f31c4..13c1e723066 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -627,14 +627,17 @@ Removed ``Py_IS_INFINITY()`` macro. (Contributed by Victor Stinner in :issue:`45440`.) -* Remove two functions from the limited C API: +* The following items are no longer available when :c:macro:`Py_LIMITED_API` + is defined: * :c:func:`PyMarshal_WriteLongToFile` * :c:func:`PyMarshal_WriteObjectToFile` + * :c:func:`PyMarshal_ReadObjectFromString` + * :c:func:`PyMarshal_WriteObjectToString` + * the ``Py_MARSHAL_VERSION`` macro - The :pep:`384` excludes functions expecting ``FILE*`` from the stable ABI. + These are not part of the :ref:`limited API `. - Remove also the ``Py_MARSHAL_VERSION`` macro from the limited C API. (Contributed by Victor Stinner in :issue:`45474`.) * Exclude :c:func:`PyWeakref_GET_OBJECT` from the limited C API. It never diff --git a/Include/marshal.h b/Include/marshal.h index 36ef6a779ec..f8b0de80cfc 100644 --- a/Include/marshal.h +++ b/Include/marshal.h @@ -3,6 +3,8 @@ #ifndef Py_MARSHAL_H #define Py_MARSHAL_H +#ifndef Py_LIMITED_API + #ifdef __cplusplus extern "C" { #endif @@ -11,7 +13,6 @@ PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromString(const char *, Py_ssize_t); PyAPI_FUNC(PyObject *) PyMarshal_WriteObjectToString(PyObject *, int); -#ifndef Py_LIMITED_API #define Py_MARSHAL_VERSION 4 PyAPI_FUNC(long) PyMarshal_ReadLongFromFile(FILE *); @@ -21,9 +22,10 @@ PyAPI_FUNC(PyObject *) PyMarshal_ReadLastObjectFromFile(FILE *); PyAPI_FUNC(void) PyMarshal_WriteLongToFile(long, FILE *, int); PyAPI_FUNC(void) PyMarshal_WriteObjectToFile(PyObject *, FILE *, int); -#endif #ifdef __cplusplus } #endif + +#endif /* Py_LIMITED_API */ #endif /* !Py_MARSHAL_H */ diff --git a/Misc/NEWS.d/next/C API/2021-10-14-22-16-56.bpo-45474.1OkJQh.rst b/Misc/NEWS.d/next/C API/2021-10-14-22-16-56.bpo-45474.1OkJQh.rst index 90bf498579c..d41f1b72b89 100644 --- a/Misc/NEWS.d/next/C API/2021-10-14-22-16-56.bpo-45474.1OkJQh.rst +++ b/Misc/NEWS.d/next/C API/2021-10-14-22-16-56.bpo-45474.1OkJQh.rst @@ -1,10 +1,11 @@ -Remove two functions from the limited C API: +The following items are no longer available when ``Py_LIMITED_API`` is defined: * :c:func:`PyMarshal_WriteLongToFile` * :c:func:`PyMarshal_WriteObjectToFile` +* :c:func:`PyMarshal_ReadObjectFromString` +* :c:func:`PyMarshal_WriteObjectToString` +* the ``Py_MARSHAL_VERSION`` macro -The :pep:`384` excludes functions expecting ``FILE*`` from the stable ABI. - -Remove also the ``Py_MARSHAL_VERSION`` macro from the limited C API. +These are not part of the :ref:`limited API `. Patch by Victor Stinner.