summaryrefslogtreecommitdiffstats
path: root/Misc
diff options
context:
space:
mode:
authorPetr Viktorin <encukou@gmail.com>2022-11-22 07:25:43 (GMT)
committerGitHub <noreply@github.com>2022-11-22 07:25:43 (GMT)
commit4d82f628c44490d6fbc3f6998d2473d1304d891f (patch)
tree18f77c7b3b48fe7acecbb4e967e677e8420bf778 /Misc
parent1bf983ce7eb8bfd17dc18102b61dfbdafe0deda2 (diff)
downloadcpython-4d82f628c44490d6fbc3f6998d2473d1304d891f.zip
cpython-4d82f628c44490d6fbc3f6998d2473d1304d891f.tar.gz
cpython-4d82f628c44490d6fbc3f6998d2473d1304d891f.tar.bz2
gh-47146: Soft-deprecate structmember.h, expose its contents via Python.h (GH-99014)
The ``structmember.h`` header is deprecated, though it continues to be available and there are no plans to remove it. There are no deprecation warnings. Old code can stay unchanged (unless the extra include and non-namespaced macros bother you greatly). Specifically, no uses in CPython are updated -- that would just be unnecessary churn. The ``structmember.h`` header is deprecated, though it continues to be available and there are no plans to remove it. Its contents are now available just by including ``Python.h``, with a ``Py`` prefix added if it was missing: - `PyMemberDef`, `PyMember_GetOne` and`PyMember_SetOne` - Type macros like `Py_T_INT`, `Py_T_DOUBLE`, etc. (previously ``T_INT``, ``T_DOUBLE``, etc.) - The flags `Py_READONLY` (previously ``READONLY``) and `Py_AUDIT_READ` (previously all uppercase) Several items are not exposed from ``Python.h``: - `T_OBJECT` (use `Py_T_OBJECT_EX`) - `T_NONE` (previously undocumented, and pretty quirky) - The macro ``WRITE_RESTRICTED`` which does nothing. - The macros ``RESTRICTED`` and ``READ_RESTRICTED``, equivalents of `Py_AUDIT_READ`. - In some configurations, ``<stddef.h>`` is not included from ``Python.h``. It should be included manually when using ``offsetof()``. The deprecated header continues to provide its original contents under the original names. Your old code can stay unchanged, unless the extra include and non-namespaced macros bother you greatly. There is discussion on the issue to rename `T_PYSSIZET` to `PY_T_SSIZE` or similar. I chose not to do that -- users will probably copy/paste that with any spelling, and not renaming it makes migration docs simpler. Co-Authored-By: Alexander Belopolsky <abalkin@users.noreply.github.com> Co-Authored-By: Matthias Braun <MatzeB@users.noreply.github.com>
Diffstat (limited to 'Misc')
-rw-r--r--Misc/NEWS.d/next/C API/2022-11-02-16-51-24.gh-issue-47146.dsYDtI.rst5
-rw-r--r--Misc/stable_abi.toml49
2 files changed, 49 insertions, 5 deletions
diff --git a/Misc/NEWS.d/next/C API/2022-11-02-16-51-24.gh-issue-47146.dsYDtI.rst b/Misc/NEWS.d/next/C API/2022-11-02-16-51-24.gh-issue-47146.dsYDtI.rst
new file mode 100644
index 0000000..0f41942
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2022-11-02-16-51-24.gh-issue-47146.dsYDtI.rst
@@ -0,0 +1,5 @@
+The ``structmember.h`` header is deprecated. Its non-deprecated contents are
+now available just by including ``Python.h``, with a ``Py_`` prefix added if
+it was missing. (Deprecated contents are :c:macro:`T_OBJECT`,
+:c:macro:`T_NONE`, and no-op flags.) Patch by Petr Viktorin, based on
+earlier work by Alexander Belopolsky and Matthias Braun.
diff --git a/Misc/stable_abi.toml b/Misc/stable_abi.toml
index 0ba0f51..aa12bcc 100644
--- a/Misc/stable_abi.toml
+++ b/Misc/stable_abi.toml
@@ -94,7 +94,7 @@
added = '3.2'
struct_abi_kind = 'full-abi'
[struct.PyMemberDef]
- added = '3.2'
+ added = '3.2' # Before 3.12, PyMemberDef required #include "structmember.h"
struct_abi_kind = 'full-abi'
[struct.PyGetSetDef]
added = '3.2'
@@ -1777,11 +1777,9 @@
added = '3.2'
abi_only = true
[function.PyMember_GetOne]
- added = '3.2'
- abi_only = true
+ added = '3.2' # Before 3.12, available in "structmember.h"
[function.PyMember_SetOne]
- added = '3.2'
- abi_only = true
+ added = '3.2' # Before 3.12, available in "structmember.h"
# TLS api is deprecated; superseded by TSS API
@@ -2303,3 +2301,44 @@
added = '3.12'
[typedef.releasebufferproc]
added = '3.12'
+
+[const.Py_T_BYTE]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_SHORT]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_INT]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_LONG]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_LONGLONG]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_UBYTE]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_UINT]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_USHORT]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_ULONG]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_ULONGLONG]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_PYSSIZET]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_FLOAT]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_DOUBLE]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_BOOL]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_STRING]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_STRING_INPLACE]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_CHAR]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_T_OBJECT_EX]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_READONLY]
+ added = '3.12' # Before 3.12, available in "structmember.h" w/o Py_ prefix
+[const.Py_AUDIT_READ]
+ added = '3.12' # Before 3.12, available in "structmember.h"