Mercurial > hg
annotate mercurial/pythoncapi_compat.h @ 50751:0a55206c5a1e
branching: merge stable into default
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Thu, 06 Jul 2023 16:07:34 +0200 |
parents | 38b9a63d3a13 |
children |
rev | line source |
---|---|
46374
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
1 // Header file providing new functions of the Python C API to old Python |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
2 // versions. |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
3 // |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
4 // File distributed under the MIT license. |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
5 // |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
6 // Homepage: |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
7 // https://github.com/pythoncapi/pythoncapi_compat |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
8 // |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
9 // Latest version: |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
10 // https://raw.githubusercontent.com/pythoncapi/pythoncapi_compat/master/pythoncapi_compat.h |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
11 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
12 #ifndef PYTHONCAPI_COMPAT |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
13 #define PYTHONCAPI_COMPAT |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
14 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
15 #ifdef __cplusplus |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
16 extern "C" { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
17 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
18 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
19 #include <Python.h> |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
20 #include "frameobject.h" // PyFrameObject, PyFrame_GetBack() |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
21 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
22 |
46389
38b9a63d3a13
cext: restore the ability to build on Windows with py2
Matt Harbison <matt_harbison@yahoo.com>
parents:
46374
diff
changeset
|
23 /* VC 2008 doesn't know about the inline keyword. */ |
38b9a63d3a13
cext: restore the ability to build on Windows with py2
Matt Harbison <matt_harbison@yahoo.com>
parents:
46374
diff
changeset
|
24 #if defined(_MSC_VER) && _MSC_VER < 1900 |
38b9a63d3a13
cext: restore the ability to build on Windows with py2
Matt Harbison <matt_harbison@yahoo.com>
parents:
46374
diff
changeset
|
25 #define inline __forceinline |
38b9a63d3a13
cext: restore the ability to build on Windows with py2
Matt Harbison <matt_harbison@yahoo.com>
parents:
46374
diff
changeset
|
26 #endif |
38b9a63d3a13
cext: restore the ability to build on Windows with py2
Matt Harbison <matt_harbison@yahoo.com>
parents:
46374
diff
changeset
|
27 |
46374
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
28 // Cast argument to PyObject* type. |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
29 #ifndef _PyObject_CAST |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
30 # define _PyObject_CAST(op) ((PyObject*)(op)) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
31 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
32 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
33 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
34 // bpo-42262 added Py_NewRef() to Python 3.10.0a3 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
35 #if PY_VERSION_HEX < 0x030a00A3 && !defined(Py_NewRef) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
36 static inline PyObject* _Py_NewRef(PyObject *obj) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
37 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
38 Py_INCREF(obj); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
39 return obj; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
40 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
41 #define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj)) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
42 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
43 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
44 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
45 // bpo-42262 added Py_XNewRef() to Python 3.10.0a3 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
46 #if PY_VERSION_HEX < 0x030a00A3 && !defined(Py_XNewRef) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
47 static inline PyObject* _Py_XNewRef(PyObject *obj) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
48 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
49 Py_XINCREF(obj); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
50 return obj; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
51 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
52 #define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj)) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
53 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
54 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
55 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
56 // bpo-39573 added Py_SET_REFCNT() to Python 3.9.0a4 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
57 #if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_REFCNT) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
58 static inline void _Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
59 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
60 ob->ob_refcnt = refcnt; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
61 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
62 #define Py_SET_REFCNT(ob, refcnt) _Py_SET_REFCNT((PyObject*)(ob), refcnt) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
63 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
64 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
65 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
66 // bpo-39573 added Py_SET_TYPE() to Python 3.9.0a4 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
67 #if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_TYPE) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
68 static inline void |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
69 _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
70 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
71 ob->ob_type = type; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
72 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
73 #define Py_SET_TYPE(ob, type) _Py_SET_TYPE((PyObject*)(ob), type) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
74 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
75 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
76 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
77 // bpo-39573 added Py_SET_SIZE() to Python 3.9.0a4 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
78 #if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_SIZE) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
79 static inline void |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
80 _Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
81 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
82 ob->ob_size = size; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
83 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
84 #define Py_SET_SIZE(ob, size) _Py_SET_SIZE((PyVarObject*)(ob), size) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
85 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
86 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
87 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
88 // bpo-40421 added PyFrame_GetCode() to Python 3.9.0b1 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
89 #if PY_VERSION_HEX < 0x030900B1 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
90 static inline PyCodeObject* |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
91 PyFrame_GetCode(PyFrameObject *frame) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
92 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
93 PyCodeObject *code; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
94 assert(frame != NULL); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
95 code = frame->f_code; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
96 assert(code != NULL); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
97 Py_INCREF(code); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
98 return code; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
99 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
100 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
101 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
102 static inline PyCodeObject* |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
103 _PyFrame_GetCodeBorrow(PyFrameObject *frame) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
104 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
105 PyCodeObject *code = PyFrame_GetCode(frame); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
106 Py_DECREF(code); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
107 return code; // borrowed reference |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
108 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
109 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
110 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
111 // bpo-40421 added PyFrame_GetCode() to Python 3.9.0b1 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
112 #if PY_VERSION_HEX < 0x030900B1 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
113 static inline PyFrameObject* |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
114 PyFrame_GetBack(PyFrameObject *frame) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
115 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
116 PyFrameObject *back; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
117 assert(frame != NULL); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
118 back = frame->f_back; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
119 Py_XINCREF(back); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
120 return back; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
121 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
122 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
123 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
124 static inline PyFrameObject* |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
125 _PyFrame_GetBackBorrow(PyFrameObject *frame) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
126 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
127 PyFrameObject *back = PyFrame_GetBack(frame); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
128 Py_XDECREF(back); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
129 return back; // borrowed reference |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
130 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
131 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
132 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
133 // bpo-39947 added PyThreadState_GetInterpreter() to Python 3.9.0a5 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
134 #if PY_VERSION_HEX < 0x030900A5 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
135 static inline PyInterpreterState * |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
136 PyThreadState_GetInterpreter(PyThreadState *tstate) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
137 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
138 assert(tstate != NULL); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
139 return tstate->interp; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
140 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
141 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
142 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
143 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
144 // bpo-40429 added PyThreadState_GetFrame() to Python 3.9.0b1 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
145 #if PY_VERSION_HEX < 0x030900B1 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
146 static inline PyFrameObject* |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
147 PyThreadState_GetFrame(PyThreadState *tstate) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
148 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
149 PyFrameObject *frame; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
150 assert(tstate != NULL); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
151 frame = tstate->frame; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
152 Py_XINCREF(frame); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
153 return frame; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
154 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
155 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
156 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
157 static inline PyFrameObject* |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
158 _PyThreadState_GetFrameBorrow(PyThreadState *tstate) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
159 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
160 PyFrameObject *frame = PyThreadState_GetFrame(tstate); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
161 Py_XDECREF(frame); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
162 return frame; // borrowed reference |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
163 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
164 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
165 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
166 // bpo-39947 added PyInterpreterState_Get() to Python 3.9.0a5 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
167 #if PY_VERSION_HEX < 0x030900A5 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
168 static inline PyInterpreterState * |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
169 PyInterpreterState_Get(void) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
170 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
171 PyThreadState *tstate; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
172 PyInterpreterState *interp; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
173 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
174 tstate = PyThreadState_GET(); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
175 if (tstate == NULL) { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
176 Py_FatalError("GIL released (tstate is NULL)"); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
177 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
178 interp = tstate->interp; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
179 if (interp == NULL) { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
180 Py_FatalError("no current interpreter"); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
181 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
182 return interp; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
183 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
184 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
185 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
186 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
187 // bpo-39947 added PyInterpreterState_Get() to Python 3.9.0a6 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
188 #if 0x030700A1 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x030900A6 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
189 static inline uint64_t |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
190 PyThreadState_GetID(PyThreadState *tstate) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
191 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
192 assert(tstate != NULL); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
193 return tstate->id; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
194 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
195 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
196 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
197 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
198 // bpo-37194 added PyObject_CallNoArgs() to Python 3.9.0a1 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
199 #if PY_VERSION_HEX < 0x030900A1 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
200 static inline PyObject* |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
201 PyObject_CallNoArgs(PyObject *func) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
202 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
203 return PyObject_CallFunctionObjArgs(func, NULL); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
204 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
205 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
206 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
207 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
208 // bpo-39245 made PyObject_CallOneArg() public (previously called |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
209 // _PyObject_CallOneArg) in Python 3.9.0a4 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
210 #if PY_VERSION_HEX < 0x030900A4 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
211 static inline PyObject* |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
212 PyObject_CallOneArg(PyObject *func, PyObject *arg) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
213 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
214 return PyObject_CallFunctionObjArgs(func, arg, NULL); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
215 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
216 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
217 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
218 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
219 // bpo-40024 added PyModule_AddType() to Python 3.9.0a5 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
220 #if PY_VERSION_HEX < 0x030900A5 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
221 static inline int |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
222 PyModule_AddType(PyObject *module, PyTypeObject *type) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
223 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
224 const char *name, *dot; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
225 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
226 if (PyType_Ready(type) < 0) { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
227 return -1; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
228 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
229 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
230 // inline _PyType_Name() |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
231 name = type->tp_name; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
232 assert(name != NULL); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
233 dot = strrchr(name, '.'); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
234 if (dot != NULL) { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
235 name = dot + 1; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
236 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
237 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
238 Py_INCREF(type); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
239 if (PyModule_AddObject(module, name, (PyObject *)type) < 0) { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
240 Py_DECREF(type); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
241 return -1; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
242 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
243 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
244 return 0; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
245 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
246 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
247 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
248 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
249 // bpo-40241 added PyObject_GC_IsTracked() to Python 3.9.0a6. |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
250 // bpo-4688 added _PyObject_GC_IS_TRACKED() to Python 2.7.0a2. |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
251 #if PY_VERSION_HEX < 0x030900A6 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
252 static inline int |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
253 PyObject_GC_IsTracked(PyObject* obj) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
254 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
255 return (PyObject_IS_GC(obj) && _PyObject_GC_IS_TRACKED(obj)); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
256 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
257 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
258 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
259 // bpo-40241 added PyObject_GC_IsFinalized() to Python 3.9.0a6. |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
260 // bpo-18112 added _PyGCHead_FINALIZED() to Python 3.4.0 final. |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
261 #if PY_VERSION_HEX < 0x030900A6 && PY_VERSION_HEX >= 0x030400F0 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
262 static inline int |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
263 PyObject_GC_IsFinalized(PyObject *obj) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
264 { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
265 return (PyObject_IS_GC(obj) && _PyGCHead_FINALIZED((PyGC_Head *)(obj)-1)); |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
266 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
267 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
268 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
269 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
270 // bpo-39573 added Py_IS_TYPE() to Python 3.9.0a4 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
271 #if PY_VERSION_HEX < 0x030900A4 && !defined(Py_IS_TYPE) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
272 static inline int |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
273 _Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type) { |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
274 return ob->ob_type == type; |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
275 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
276 #define Py_IS_TYPE(ob, type) _Py_IS_TYPE((const PyObject*)(ob), type) |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
277 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
278 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
279 |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
280 #ifdef __cplusplus |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
281 } |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
282 #endif |
e92ca942ddca
cext: add Python 3.10 support
Victor Stinner <vstinner@python.org>
parents:
diff
changeset
|
283 #endif // PYTHONCAPI_COMPAT |