mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-134989: Fix Py_RETURN_NONE in the limited C API (GH-135165)
Fix Py_RETURN_NONE, Py_RETURN_TRUE and Py_RETURN_FALSE macros in the limited C API 3.11 and older: Don't treat Py_None, Py_True and Py_False as immortal.
This commit is contained in:
parent
4b44b3409a
commit
9258f3da91
3 changed files with 20 additions and 5 deletions
|
@ -34,9 +34,16 @@ PyAPI_FUNC(int) Py_IsTrue(PyObject *x);
|
||||||
PyAPI_FUNC(int) Py_IsFalse(PyObject *x);
|
PyAPI_FUNC(int) Py_IsFalse(PyObject *x);
|
||||||
#define Py_IsFalse(x) Py_Is((x), Py_False)
|
#define Py_IsFalse(x) Py_Is((x), Py_False)
|
||||||
|
|
||||||
/* Macros for returning Py_True or Py_False, respectively */
|
/* Macros for returning Py_True or Py_False, respectively.
|
||||||
#define Py_RETURN_TRUE return Py_True
|
* Only treat Py_True and Py_False as immortal in the limited C API 3.12
|
||||||
#define Py_RETURN_FALSE return Py_False
|
* and newer. */
|
||||||
|
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 < 0x030c0000
|
||||||
|
# define Py_RETURN_TRUE return Py_NewRef(Py_True)
|
||||||
|
# define Py_RETURN_FALSE return Py_NewRef(Py_False)
|
||||||
|
#else
|
||||||
|
# define Py_RETURN_TRUE return Py_True
|
||||||
|
# define Py_RETURN_FALSE return Py_False
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Function to return a bool from a C long */
|
/* Function to return a bool from a C long */
|
||||||
PyAPI_FUNC(PyObject *) PyBool_FromLong(long);
|
PyAPI_FUNC(PyObject *) PyBool_FromLong(long);
|
||||||
|
|
|
@ -660,8 +660,13 @@ PyAPI_DATA(PyObject) _Py_NoneStruct; /* Don't use this directly */
|
||||||
PyAPI_FUNC(int) Py_IsNone(PyObject *x);
|
PyAPI_FUNC(int) Py_IsNone(PyObject *x);
|
||||||
#define Py_IsNone(x) Py_Is((x), Py_None)
|
#define Py_IsNone(x) Py_Is((x), Py_None)
|
||||||
|
|
||||||
/* Macro for returning Py_None from a function */
|
/* Macro for returning Py_None from a function.
|
||||||
#define Py_RETURN_NONE return Py_None
|
* Only treat Py_None as immortal in the limited C API 3.12 and newer. */
|
||||||
|
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 < 0x030c0000
|
||||||
|
# define Py_RETURN_NONE return Py_NewRef(Py_None)
|
||||||
|
#else
|
||||||
|
# define Py_RETURN_NONE return Py_None
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Py_NotImplemented is a singleton used to signal that an operation is
|
Py_NotImplemented is a singleton used to signal that an operation is
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Fix ``Py_RETURN_NONE``, ``Py_RETURN_TRUE`` and ``Py_RETURN_FALSE`` macros in
|
||||||
|
the limited C API 3.11 and older: don't treat ``Py_None``, ``Py_True`` and
|
||||||
|
``Py_False`` as immortal. Patch by Victor Stinner.
|
Loading…
Add table
Add a link
Reference in a new issue