File tree Expand file tree Collapse file tree 3 files changed +20
-5
lines changed Expand file tree Collapse file tree 3 files changed +20
-5
lines changed Original file line number Diff line number Diff line change @@ -34,9 +34,16 @@ PyAPI_FUNC(int) Py_IsTrue(PyObject *x);
3434PyAPI_FUNC (int ) Py_IsFalse (PyObject * x );
3535#define Py_IsFalse (x ) Py_Is((x), Py_False)
3636
37- /* Macros for returning Py_True or Py_False, respectively */
38- #define Py_RETURN_TRUE return Py_True
39- #define Py_RETURN_FALSE return Py_False
37+ /* Macros for returning Py_True or Py_False, respectively.
38+ * Only treat Py_True and Py_False as immortal in the limited C API 3.12
39+ * and newer. */
40+ #if defined(Py_LIMITED_API ) && Py_LIMITED_API + 0 < 0x030c0000
41+ # define Py_RETURN_TRUE return Py_NewRef(Py_True)
42+ # define Py_RETURN_FALSE return Py_NewRef(Py_False)
43+ #else
44+ # define Py_RETURN_TRUE return Py_True
45+ # define Py_RETURN_FALSE return Py_False
46+ #endif
4047
4148/* Function to return a bool from a C long */
4249PyAPI_FUNC (PyObject * ) PyBool_FromLong (long );
Original file line number Diff line number Diff line change @@ -1110,8 +1110,13 @@ PyAPI_DATA(PyObject) _Py_NoneStruct; /* Don't use this directly */
11101110PyAPI_FUNC (int ) Py_IsNone (PyObject * x );
11111111#define Py_IsNone (x ) Py_Is((x), Py_None)
11121112
1113- /* Macro for returning Py_None from a function */
1114- #define Py_RETURN_NONE return Py_None
1113+ /* Macro for returning Py_None from a function.
1114+ * Only treat Py_None as immortal in the limited C API 3.12 and newer. */
1115+ #if defined(Py_LIMITED_API ) && Py_LIMITED_API + 0 < 0x030c0000
1116+ # define Py_RETURN_NONE return Py_NewRef(Py_None)
1117+ #else
1118+ # define Py_RETURN_NONE return Py_None
1119+ #endif
11151120
11161121/*
11171122Py_NotImplemented is a singleton used to signal that an operation is
Original file line number Diff line number Diff line change 1+ Fix ``Py_RETURN_NONE ``, ``Py_RETURN_TRUE `` and ``Py_RETURN_FALSE `` macros in
2+ the limited C API 3.11 and older: don't treat ``Py_None ``, ``Py_True `` and
3+ ``Py_False `` as immortal. Patch by Victor Stinner.
You can’t perform that action at this time.
0 commit comments