annotate mercurial/pythoncapi_compat.h @ 51592:24844407fa0d

perf: clear vfs audit_cache before each run When generating a stream clone, we spend a large amount of time auditing path. Before this changes, the first run was warming the vfs cache for the other runs, leading to a large runtime difference and a "faulty" reported timing for the operation. We now clear this important cache between run to get a more realistic timing. Below are some example of median time change when clearing these cases. The maximum time for a run did not changed significantly. ### data-env-vars.name = mozilla-central-2018-08-01-zstd-sparse-revlog # benchmark.name = hg.perf.exchange.stream.generate # bin-env-vars.hg.flavor = default # bin-env-vars.hg.py-re2-module = default # benchmark.variants.version = latest no-clearing: 17.289905 cache-clearing: 21.587965 (+24.86%, +4.30) ## data-env-vars.name = mozilla-central-2024-03-22-zstd-sparse-revlog no-clearing: 32.670748 cache-clearing: 40.467095 (+23.86%, +7.80) ## data-env-vars.name = mozilla-try-2019-02-18-zstd-sparse-revlog no-clearing: 37.838858 cache-clearing: 46.072749 (+21.76%, +8.23) ## data-env-vars.name = mozilla-unified-2024-03-22-zstd-sparse-revlog no-clearing: 32.969395 cache-clearing: 39.646209 (+20.25%, +6.68) In addition, this significantly reduce the timing difference between the performance command, from the perf extensions and a `real `hg bundle` call producing a stream bundle. Some significant differences remain especially on the "mozilla-try" repositories, but they are now smaller. Note that some of that difference will actually not be attributable to the stream generation (like maybe phases or branch map computation). Below are some benchmarks done on a currently draft changeset fixing some unrelated slowness in `hg bundle` (34a78972af409d1ff37c29e60f6ca811ad1a457d) ### data-env-vars.name = mozilla-central-2018-08-01-zstd-sparse-revlog # bin-env-vars.hg.flavor = default # bin-env-vars.hg.py-re2-module = default hg.perf.exchange.stream.generate: 21.587965 hg.command.bundle: 24.301799 (+12.57%, +2.71) ## data-env-vars.name = mozilla-central-2024-03-22-zstd-sparse-revlog hg.perf.exchange.stream.generate: 40.467095 hg.command.bundle: 44.831317 (+10.78%, +4.36) ## data-env-vars.name = mozilla-unified-2024-03-22-zstd-sparse-revlog hg.perf.exchange.stream.generate: 39.646209 hg.command.bundle: 45.395258 (+14.50%, +5.75) ## data-env-vars.name = mozilla-try-2019-02-18-zstd-sparse-revlog hg.perf.exchange.stream.generate: 46.072749 hg.command.bundle: 55.882608 (+21.29%, +9.81) ## data-env-vars.name = mozilla-try-2023-03-22-zlib-general-delta hg.perf.exchange.stream.generate: 334.716708 hg.command.bundle: 377.856767 (+12.89%, +43.14) ## data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog hg.perf.exchange.stream.generate: 302.972301 hg.command.bundle: 326.098755 (+7.63%, +23.13)
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sat, 13 Apr 2024 23:40:28 +0200
parents 38b9a63d3a13
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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