https://github.com/python/cpython/commit/2ad069d906c6952250dabbffbcb882676011b310
commit: 2ad069d906c6952250dabbffbcb882676011b310
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2025-02-02T23:17:30+01:00
summary:
gh-91417: Remove PySequence_Fast() from the limited C API (#129398)
The function never worked with the limited C API. It was added by
mistake.
files:
A Misc/NEWS.d/next/C_API/2025-01-28-13-21-17.gh-issue-91417.AfiR0t.rst
M Doc/data/stable_abi.dat
M Doc/whatsnew/3.14.rst
M Include/abstract.h
M Include/cpython/abstract.h
M Misc/stable_abi.toml
diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat
index c15f82603aa944..59e7a31bc2ef06 100644
--- a/Doc/data/stable_abi.dat
+++ b/Doc/data/stable_abi.dat
@@ -582,7 +582,6 @@ func,PySequence_Contains,3.2,,
func,PySequence_Count,3.2,,
func,PySequence_DelItem,3.2,,
func,PySequence_DelSlice,3.2,,
-func,PySequence_Fast,3.2,,
func,PySequence_GetItem,3.2,,
func,PySequence_GetSlice,3.2,,
func,PySequence_In,3.2,,
diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst
index daed0e8aa509a1..59c432d30a342b 100644
--- a/Doc/whatsnew/3.14.rst
+++ b/Doc/whatsnew/3.14.rst
@@ -1343,6 +1343,11 @@ Limited C API changes
implementation details.
(Contributed by Victor Stinner in :gh:`120600` and :gh:`124127`.)
+* Remove :c:func:`PySequence_Fast` from the limited C API, since this function
+ has to be used with :c:macro:`PySequence_Fast_GET_ITEM` which never worked
+ in the limited C API.
+ (Contributed by Victor Stinner in :gh:`91417`.)
+
Porting to Python 3.14
----------------------
diff --git a/Include/abstract.h b/Include/abstract.h
index 7cfee1332ccaa4..4efe4fcb014903 100644
--- a/Include/abstract.h
+++ b/Include/abstract.h
@@ -726,31 +726,6 @@ PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
This is equivalent to the Python expression: list(o) */
PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
-/* Return the sequence 'o' as a list, unless it's already a tuple or list.
-
- Use PySequence_Fast_GET_ITEM to access the members of this list, and
- PySequence_Fast_GET_SIZE to get its length.
-
- Returns NULL on failure. If the object does not support iteration, raises a
- TypeError exception with 'm' as the message text. */
-PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
-
-/* Return the size of the sequence 'o', assuming that 'o' was returned by
- PySequence_Fast and is not NULL. */
-#define PySequence_Fast_GET_SIZE(o) \
- (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
-
-/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
- by PySequence_Fast, and that i is within bounds. */
-#define PySequence_Fast_GET_ITEM(o, i)\
- (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
-
-/* Return a pointer to the underlying item array for
- an object returned by PySequence_Fast */
-#define PySequence_Fast_ITEMS(sf) \
- (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
- : ((PyTupleObject *)(sf))->ob_item)
-
/* Return the number of occurrences on value on 'o', that is, return
the number of keys for which o[key] == value.
diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h
index 4e7b7a46703a6d..8fed1d3110988b 100644
--- a/Include/cpython/abstract.h
+++ b/Include/cpython/abstract.h
@@ -85,3 +85,29 @@ PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o,
Py_ssize_t);
need to be corrected for a negative index. */
#define PySequence_ITEM(o, i)\
( Py_TYPE(o)->tp_as_sequence->sq_item((o), (i)) )
+
+/* Return the sequence 'o' as a list, unless it's already a tuple or list.
+
+ Use PySequence_Fast_GET_ITEM to access the members of this list, and
+ PySequence_Fast_GET_SIZE to get its length.
+
+ Returns NULL on failure. If the object does not support iteration, raises a
+ TypeError exception with 'm' as the message text. */
+PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
+
+/* Return the size of the sequence 'o', assuming that 'o' was returned by
+ PySequence_Fast and is not NULL. */
+#define PySequence_Fast_GET_SIZE(o) \
+ (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
+
+/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
+ by PySequence_Fast, and that i is within bounds. */
+#define PySequence_Fast_GET_ITEM(o, i)\
+ (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
+
+/* Return a pointer to the underlying item array for
+ an object returned by PySequence_Fast */
+#define PySequence_Fast_ITEMS(sf) \
+ (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
+ : ((PyTupleObject *)(sf))->ob_item)
+
diff --git
a/Misc/NEWS.d/next/C_API/2025-01-28-13-21-17.gh-issue-91417.AfiR0t.rst
b/Misc/NEWS.d/next/C_API/2025-01-28-13-21-17.gh-issue-91417.AfiR0t.rst
new file mode 100644
index 00000000000000..e1017188b8d0ce
--- /dev/null
+++ b/Misc/NEWS.d/next/C_API/2025-01-28-13-21-17.gh-issue-91417.AfiR0t.rst
@@ -0,0 +1,3 @@
+Remove :c:func:`PySequence_Fast` from the limited C API, since this function
+has to be used with :c:macro:`PySequence_Fast_GET_ITEM` which never worked
+in the limited C API. Patch by Victor Stinner.
diff --git a/Misc/stable_abi.toml b/Misc/stable_abi.toml
index 276526a1b6908e..9317be605f0065 100644
--- a/Misc/stable_abi.toml
+++ b/Misc/stable_abi.toml
@@ -1253,6 +1253,7 @@
added = '3.2'
[function.PySequence_Fast]
added = '3.2'
+ abi_only = true
[function.PySequence_GetItem]
added = '3.2'
[function.PySequence_GetSlice]
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]