[Python-checkins] gh-89653: PEP 670: Limited API doesn't cast arguments (#92654)

vstinner webhook-mailer at python.org
Wed May 11 18:01:48 EDT 2022


https://github.com/python/cpython/commit/7d3b469e475e6e52ce4f0bad7198bb05ead77b1d
commit: 7d3b469e475e6e52ce4f0bad7198bb05ead77b1d
branch: main
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2022-05-12T00:01:42+02:00
summary:

gh-89653: PEP 670: Limited API doesn't cast arguments (#92654)

The limited API version 3.11 no longer casts arguments to expected
types of functions of functions:

* PyList_GET_SIZE(), PyList_SET_ITEM()
* PyTuple_GET_SIZE(), PyTuple_SET_ITEM()
* PyWeakref_GET_OBJECT()

files:
M Include/cpython/listobject.h
M Include/cpython/tupleobject.h
M Include/cpython/weakrefobject.h

diff --git a/Include/cpython/listobject.h b/Include/cpython/listobject.h
index ebbea5ebf1ebc..4989cccef9f80 100644
--- a/Include/cpython/listobject.h
+++ b/Include/cpython/listobject.h
@@ -33,7 +33,9 @@ PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out);
 static inline Py_ssize_t PyList_GET_SIZE(PyListObject *op) {
     return Py_SIZE(op);
 }
-#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyList_CAST(op))
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
+#  define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyList_CAST(op))
+#endif
 
 #define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[index])
 
@@ -41,5 +43,7 @@ static inline void
 PyList_SET_ITEM(PyListObject *op, Py_ssize_t index, PyObject *value) {
     op->ob_item[index] = value;
 }
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
 #define PyList_SET_ITEM(op, index, value) \
     PyList_SET_ITEM(_PyList_CAST(op), index, _PyObject_CAST(value))
+#endif
diff --git a/Include/cpython/tupleobject.h b/Include/cpython/tupleobject.h
index d5b810e5f4277..a41cee1759d48 100644
--- a/Include/cpython/tupleobject.h
+++ b/Include/cpython/tupleobject.h
@@ -22,7 +22,9 @@ PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *);
 static inline Py_ssize_t PyTuple_GET_SIZE(PyTupleObject *op) {
     return Py_SIZE(op);
 }
-#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyTuple_CAST(op))
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
+#  define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyTuple_CAST(op))
+#endif
 
 #define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[index])
 
@@ -31,7 +33,9 @@ static inline void
 PyTuple_SET_ITEM(PyTupleObject *op, Py_ssize_t index, PyObject *value) {
     op->ob_item[index] = value;
 }
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
 #define PyTuple_SET_ITEM(op, index, value) \
     PyTuple_SET_ITEM(_PyTuple_CAST(op), index, _PyObject_CAST(value))
+#endif
 
 PyAPI_FUNC(void) _PyTuple_DebugMallocStats(FILE *out);
diff --git a/Include/cpython/weakrefobject.h b/Include/cpython/weakrefobject.h
index bec69ba90d6b9..2dbef2cea3765 100644
--- a/Include/cpython/weakrefobject.h
+++ b/Include/cpython/weakrefobject.h
@@ -51,4 +51,6 @@ static inline PyObject* PyWeakref_GET_OBJECT(PyObject *ref_obj) {
     }
     return Py_None;
 }
-#define PyWeakref_GET_OBJECT(ref) PyWeakref_GET_OBJECT(_PyObject_CAST(ref))
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
+#  define PyWeakref_GET_OBJECT(ref) PyWeakref_GET_OBJECT(_PyObject_CAST(ref))
+#endif



More information about the Python-checkins mailing list