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);
34
34
PyAPI_FUNC (int ) Py_IsFalse (PyObject * x );
35
35
#define Py_IsFalse (x ) Py_Is((x), Py_False)
36
36
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
40
47
41
48
/* Function to return a bool from a C long */
42
49
PyAPI_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 */
1110
1110
PyAPI_FUNC (int ) Py_IsNone (PyObject * x );
1111
1111
#define Py_IsNone (x ) Py_Is((x), Py_None)
1112
1112
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
1115
1120
1116
1121
/*
1117
1122
Py_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