aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Include
diff options
context:
space:
mode:
authorshadchin <shadchin@yandex-team.com>2024-02-12 07:53:52 +0300
committershadchin <shadchin@yandex-team.com>2024-02-12 08:07:36 +0300
commitce1b7ca3171f9158180640c6a02a74b4afffedea (patch)
treee47c1e8391b1b0128262c1e9b1e6ed4c8fff2348 /contrib/tools/python3/src/Include
parent57350d96f030db90f220ce50ee591d5c5d403df7 (diff)
downloadydb-ce1b7ca3171f9158180640c6a02a74b4afffedea.tar.gz
Update Python from 3.11.8 to 3.12.2
Diffstat (limited to 'contrib/tools/python3/src/Include')
-rw-r--r--contrib/tools/python3/src/Include/abstract.h42
-rw-r--r--contrib/tools/python3/src/Include/boolobject.h15
-rw-r--r--contrib/tools/python3/src/Include/bytearrayobject.h4
-rw-r--r--contrib/tools/python3/src/Include/bytesobject.h2
-rw-r--r--contrib/tools/python3/src/Include/ceval.h2
-rw-r--r--contrib/tools/python3/src/Include/compile.h3
-rw-r--r--contrib/tools/python3/src/Include/complexobject.h4
-rw-r--r--contrib/tools/python3/src/Include/cpython/abstract.h25
-rw-r--r--contrib/tools/python3/src/Include/cpython/bytearrayobject.h8
-rw-r--r--contrib/tools/python3/src/Include/cpython/bytesobject.h8
-rw-r--r--contrib/tools/python3/src/Include/cpython/cellobject.h19
-rw-r--r--contrib/tools/python3/src/Include/cpython/ceval.h11
-rw-r--r--contrib/tools/python3/src/Include/cpython/classobject.h38
-rw-r--r--contrib/tools/python3/src/Include/cpython/code.h213
-rw-r--r--contrib/tools/python3/src/Include/cpython/compile.h19
-rw-r--r--contrib/tools/python3/src/Include/cpython/context.h6
-rw-r--r--contrib/tools/python3/src/Include/cpython/dictobject.h42
-rw-r--r--contrib/tools/python3/src/Include/cpython/floatobject.h10
-rw-r--r--contrib/tools/python3/src/Include/cpython/funcobject.h111
-rw-r--r--contrib/tools/python3/src/Include/cpython/genobject.h15
-rw-r--r--contrib/tools/python3/src/Include/cpython/import.h5
-rw-r--r--contrib/tools/python3/src/Include/cpython/initconfig.h7
-rw-r--r--contrib/tools/python3/src/Include/cpython/interpreteridobject.h (renamed from contrib/tools/python3/src/Include/internal/pycore_interpreteridobject.h)17
-rw-r--r--contrib/tools/python3/src/Include/cpython/listobject.h10
-rw-r--r--contrib/tools/python3/src/Include/cpython/longintrepr.h40
-rw-r--r--contrib/tools/python3/src/Include/cpython/longobject.h5
-rw-r--r--contrib/tools/python3/src/Include/cpython/memoryobject.h52
-rw-r--r--contrib/tools/python3/src/Include/cpython/methodobject.h20
-rw-r--r--contrib/tools/python3/src/Include/cpython/modsupport.h9
-rw-r--r--contrib/tools/python3/src/Include/cpython/object.h144
-rw-r--r--contrib/tools/python3/src/Include/cpython/objimpl.h16
-rw-r--r--contrib/tools/python3/src/Include/cpython/odictobject.h12
-rw-r--r--contrib/tools/python3/src/Include/cpython/picklebufobject.h2
-rw-r--r--contrib/tools/python3/src/Include/cpython/pydebug.h36
-rw-r--r--contrib/tools/python3/src/Include/cpython/pyerrors.h37
-rw-r--r--contrib/tools/python3/src/Include/cpython/pyframe.h18
-rw-r--r--contrib/tools/python3/src/Include/cpython/pylifecycle.h48
-rw-r--r--contrib/tools/python3/src/Include/cpython/pystate.h134
-rw-r--r--contrib/tools/python3/src/Include/cpython/pythonrun.h28
-rw-r--r--contrib/tools/python3/src/Include/cpython/pytime.h8
-rw-r--r--contrib/tools/python3/src/Include/cpython/setobject.h9
-rw-r--r--contrib/tools/python3/src/Include/cpython/tupleobject.h10
-rw-r--r--contrib/tools/python3/src/Include/cpython/unicodeobject.h442
-rw-r--r--contrib/tools/python3/src/Include/cpython/warnings.h2
-rw-r--r--contrib/tools/python3/src/Include/cpython/weakrefobject.h4
-rw-r--r--contrib/tools/python3/src/Include/datetime.h92
-rw-r--r--contrib/tools/python3/src/Include/descrobject.h56
-rw-r--r--contrib/tools/python3/src/Include/dictobject.h8
-rw-r--r--contrib/tools/python3/src/Include/errcode.h1
-rw-r--r--contrib/tools/python3/src/Include/exports.h12
-rw-r--r--contrib/tools/python3/src/Include/fileobject.h8
-rw-r--r--contrib/tools/python3/src/Include/floatobject.h2
-rw-r--r--contrib/tools/python3/src/Include/import.h2
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_accu.h39
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_asdl.h4
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_ast.h82
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_ast_state.h7
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_atexit.h57
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_bytesobject.h5
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_call.h12
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_ceval.h62
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_ceval_state.h103
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_code.h394
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_compile.h84
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_context.h4
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_descrobject.h26
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_dict.h81
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_dict_state.h50
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_dtoa.h49
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_faulthandler.h99
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_fileutils.h22
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_fileutils_windows.h98
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_floatobject.h12
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_flowgraph.h120
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_frame.h125
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_function.h8
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_gc.h70
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_genobject.h2
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_global_objects.h55
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_global_objects_fini_generated.h1531
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_global_strings.h416
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_hamt.h13
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_hashtable.h5
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_import.h160
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_initconfig.h12
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_instruments.h106
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_interp.h230
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_intrinsics.h32
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_list.h23
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_long.h144
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_memoryobject.h18
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_moduleobject.h3
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_object.h211
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_object_state.h36
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_obmalloc.h700
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_obmalloc_init.h73
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_opcode.h396
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_opcode_utils.h92
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_parser.h35
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_pyerrors.h13
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_pyhash.h32
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_pylifecycle.h16
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_pymath.h19
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_pymem.h62
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_pymem_init.h85
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_pystate.h87
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_pythread.h81
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_range.h21
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_runtime.h110
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_runtime_init.h1285
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_runtime_init_generated.h1525
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_signal.h63
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_sliceobject.h2
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_structseq.h15
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_symtable.h36
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_sysmodule.h3
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_time.h25
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_token.h (renamed from contrib/tools/python3/src/Include/token.h)45
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_tracemalloc.h123
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_tuple.h10
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_typeobject.h127
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_typevarobject.h24
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_unicodeobject.h10
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_unicodeobject_generated.h2093
-rw-r--r--contrib/tools/python3/src/Include/internal/pycore_unionobject.h4
-rw-r--r--contrib/tools/python3/src/Include/interpreteridobject.h17
-rw-r--r--contrib/tools/python3/src/Include/iterobject.h4
-rw-r--r--contrib/tools/python3/src/Include/listobject.h2
-rw-r--r--contrib/tools/python3/src/Include/longobject.h4
-rw-r--r--contrib/tools/python3/src/Include/memoryobject.h46
-rw-r--r--contrib/tools/python3/src/Include/methodobject.h4
-rw-r--r--contrib/tools/python3/src/Include/modsupport.h14
-rw-r--r--contrib/tools/python3/src/Include/moduleobject.h30
-rw-r--r--contrib/tools/python3/src/Include/object.h281
-rw-r--r--contrib/tools/python3/src/Include/objimpl.h23
-rw-r--r--contrib/tools/python3/src/Include/opcode.h229
-rw-r--r--contrib/tools/python3/src/Include/patchlevel.h6
-rw-r--r--contrib/tools/python3/src/Include/pybuffer.h5
-rw-r--r--contrib/tools/python3/src/Include/pycapsule.h2
-rw-r--r--contrib/tools/python3/src/Include/pyconfig-linux.h166
-rw-r--r--contrib/tools/python3/src/Include/pyconfig-osx-arm64.h170
-rw-r--r--contrib/tools/python3/src/Include/pyconfig-osx.h168
-rw-r--r--contrib/tools/python3/src/Include/pyconfig.h3
-rw-r--r--contrib/tools/python3/src/Include/pydtrace.h2
-rw-r--r--contrib/tools/python3/src/Include/pyerrors.h10
-rw-r--r--contrib/tools/python3/src/Include/pymacconfig.h23
-rw-r--r--contrib/tools/python3/src/Include/pymacro.h5
-rw-r--r--contrib/tools/python3/src/Include/pymath.h25
-rw-r--r--contrib/tools/python3/src/Include/pymem.h14
-rw-r--r--contrib/tools/python3/src/Include/pyport.h89
-rw-r--r--contrib/tools/python3/src/Include/pystats.h110
-rw-r--r--contrib/tools/python3/src/Include/pythonrun.h4
-rw-r--r--contrib/tools/python3/src/Include/pythread.h4
-rw-r--r--contrib/tools/python3/src/Include/rangeobject.h2
-rw-r--r--contrib/tools/python3/src/Include/setobject.h10
-rw-r--r--contrib/tools/python3/src/Include/sliceobject.h2
-rw-r--r--contrib/tools/python3/src/Include/structmember.h95
-rw-r--r--contrib/tools/python3/src/Include/structseq.h4
-rw-r--r--contrib/tools/python3/src/Include/sysmodule.h13
-rw-r--r--contrib/tools/python3/src/Include/traceback.h2
-rw-r--r--contrib/tools/python3/src/Include/tracemalloc.h34
-rw-r--r--contrib/tools/python3/src/Include/tupleobject.h2
-rw-r--r--contrib/tools/python3/src/Include/unicodeobject.h47
-rw-r--r--contrib/tools/python3/src/Include/weakrefobject.h8
164 files changed, 12067 insertions, 3327 deletions
diff --git a/contrib/tools/python3/src/Include/abstract.h b/contrib/tools/python3/src/Include/abstract.h
index 9e06fbbb74..064b0300b5 100644
--- a/contrib/tools/python3/src/Include/abstract.h
+++ b/contrib/tools/python3/src/Include/abstract.h
@@ -14,9 +14,9 @@ extern "C" {
Print an object 'o' on file 'fp'. Returns -1 on error. The flags argument
is used to enable certain printing options. The only option currently
- supported is Py_Print_RAW.
-
- (What should be said about Py_Print_RAW?). */
+ supported is Py_PRINT_RAW. By default (flags=0), PyObject_Print() formats
+ the object by calling PyObject_Repr(). If flags equals to Py_PRINT_RAW, it
+ formats the object by calling PyObject_Str(). */
/* Implemented elsewhere:
@@ -88,7 +88,7 @@ extern "C" {
-1 on failure.
This is the equivalent of the Python statement: del o.attr_name. */
-#define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A), NULL)
+#define PyObject_DelAttrString(O, A) PyObject_SetAttrString((O), (A), NULL)
/* Implemented as a macro:
@@ -98,7 +98,7 @@ extern "C" {
Delete attribute named attr_name, for object o. Returns -1
on failure. This is the equivalent of the Python
statement: del o.attr_name. */
-#define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A), NULL)
+#define PyObject_DelAttr(O, A) PyObject_SetAttr((O), (A), NULL)
/* Implemented elsewhere:
@@ -228,6 +228,32 @@ PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(
PyObject *name,
...);
+/* Given a vectorcall nargsf argument, return the actual number of arguments.
+ * (For use outside the limited API, this is re-defined as a static inline
+ * function in cpython/abstract.h)
+ */
+PyAPI_FUNC(Py_ssize_t) PyVectorcall_NARGS(size_t nargsf);
+
+/* Call "callable" (which must support vectorcall) with positional arguments
+ "tuple" and keyword arguments "dict". "dict" may also be NULL */
+PyAPI_FUNC(PyObject *) PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict);
+
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030C0000
+#define PY_VECTORCALL_ARGUMENTS_OFFSET \
+ (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
+
+/* Perform a PEP 590-style vector call on 'callable' */
+PyAPI_FUNC(PyObject *) PyObject_Vectorcall(
+ PyObject *callable,
+ PyObject *const *args,
+ size_t nargsf,
+ PyObject *kwnames);
+
+/* Call the method 'name' on args[0] with arguments in args[1..nargsf-1]. */
+PyAPI_FUNC(PyObject *) PyObject_VectorcallMethod(
+ PyObject *name, PyObject *const *args,
+ size_t nargsf, PyObject *kwnames);
+#endif
/* Implemented elsewhere:
@@ -722,7 +748,7 @@ PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
by PySequence_Fast, and that i is within bounds. */
#define PySequence_Fast_GET_ITEM(o, i)\
- (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
+ (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
/* Return a pointer to the underlying item array for
an object returned by PySequence_Fast */
@@ -802,7 +828,7 @@ PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
failure.
This is equivalent to the Python statement: del o[key]. */
-#define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
+#define PyMapping_DelItemString(O, K) PyObject_DelItemString((O), (K))
/* Implemented as a macro:
@@ -812,7 +838,7 @@ PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
Returns -1 on failure.
This is equivalent to the Python statement: del o[key]. */
-#define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
+#define PyMapping_DelItem(O, K) PyObject_DelItem((O), (K))
/* On success, return 1 if the mapping object 'o' has the key 'key',
and 0 otherwise.
diff --git a/contrib/tools/python3/src/Include/boolobject.h b/contrib/tools/python3/src/Include/boolobject.h
index 28068d1cbe..19aef5b1b8 100644
--- a/contrib/tools/python3/src/Include/boolobject.h
+++ b/contrib/tools/python3/src/Include/boolobject.h
@@ -7,20 +7,19 @@ extern "C" {
#endif
-PyAPI_DATA(PyTypeObject) PyBool_Type;
+// PyBool_Type is declared by object.h
-#define PyBool_Check(x) Py_IS_TYPE(x, &PyBool_Type)
+#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
-/* Py_False and Py_True are the only two bools in existence.
-Don't forget to apply Py_INCREF() when returning either!!! */
+/* Py_False and Py_True are the only two bools in existence. */
/* Don't use these directly */
PyAPI_DATA(PyLongObject) _Py_FalseStruct;
PyAPI_DATA(PyLongObject) _Py_TrueStruct;
/* Use these macros */
-#define Py_False ((PyObject *) &_Py_FalseStruct)
-#define Py_True ((PyObject *) &_Py_TrueStruct)
+#define Py_False _PyObject_CAST(&_Py_FalseStruct)
+#define Py_True _PyObject_CAST(&_Py_TrueStruct)
// Test if an object is the True singleton, the same as "x is True" in Python.
PyAPI_FUNC(int) Py_IsTrue(PyObject *x);
@@ -31,8 +30,8 @@ PyAPI_FUNC(int) Py_IsFalse(PyObject *x);
#define Py_IsFalse(x) Py_Is((x), Py_False)
/* Macros for returning Py_True or Py_False, respectively */
-#define Py_RETURN_TRUE return Py_NewRef(Py_True)
-#define Py_RETURN_FALSE return Py_NewRef(Py_False)
+#define Py_RETURN_TRUE return Py_True
+#define Py_RETURN_FALSE return Py_False
/* Function to return a bool from a C long */
PyAPI_FUNC(PyObject *) PyBool_FromLong(long);
diff --git a/contrib/tools/python3/src/Include/bytearrayobject.h b/contrib/tools/python3/src/Include/bytearrayobject.h
index ae2bde1c30..3d53fdba64 100644
--- a/contrib/tools/python3/src/Include/bytearrayobject.h
+++ b/contrib/tools/python3/src/Include/bytearrayobject.h
@@ -21,8 +21,8 @@ PyAPI_DATA(PyTypeObject) PyByteArray_Type;
PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type;
/* Type check macros */
-#define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type)
-#define PyByteArray_CheckExact(self) Py_IS_TYPE(self, &PyByteArray_Type)
+#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
+#define PyByteArray_CheckExact(self) Py_IS_TYPE((self), &PyByteArray_Type)
/* Direct API functions */
PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *);
diff --git a/contrib/tools/python3/src/Include/bytesobject.h b/contrib/tools/python3/src/Include/bytesobject.h
index 4c4dc40d70..ee448cd02b 100644
--- a/contrib/tools/python3/src/Include/bytesobject.h
+++ b/contrib/tools/python3/src/Include/bytesobject.h
@@ -29,7 +29,7 @@ PyAPI_DATA(PyTypeObject) PyBytesIter_Type;
#define PyBytes_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
-#define PyBytes_CheckExact(op) Py_IS_TYPE(op, &PyBytes_Type)
+#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *);
diff --git a/contrib/tools/python3/src/Include/ceval.h b/contrib/tools/python3/src/Include/ceval.h
index 1b57f6ea20..ad4d909d6f 100644
--- a/contrib/tools/python3/src/Include/ceval.h
+++ b/contrib/tools/python3/src/Include/ceval.h
@@ -31,7 +31,7 @@ Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords(
/* Deprecated since PyEval_CallObjectWithKeywords is deprecated */
#define PyEval_CallObject(callable, arg) \
- PyEval_CallObjectWithKeywords(callable, arg, (PyObject *)NULL)
+ PyEval_CallObjectWithKeywords((callable), (arg), _PyObject_CAST(_Py_NULL))
Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallFunction(
PyObject *callable, const char *format, ...);
diff --git a/contrib/tools/python3/src/Include/compile.h b/contrib/tools/python3/src/Include/compile.h
index 3c5acd7209..52d0bc76c9 100644
--- a/contrib/tools/python3/src/Include/compile.h
+++ b/contrib/tools/python3/src/Include/compile.h
@@ -10,9 +10,6 @@ extern "C" {
#define Py_eval_input 258
#define Py_func_type_input 345
-/* This doesn't need to match anything */
-#define Py_fstring_input 800
-
#ifndef Py_LIMITED_API
# define Py_CPYTHON_COMPILE_H
# include "cpython/compile.h"
diff --git a/contrib/tools/python3/src/Include/complexobject.h b/contrib/tools/python3/src/Include/complexobject.h
index c7764e4380..ebe49a832f 100644
--- a/contrib/tools/python3/src/Include/complexobject.h
+++ b/contrib/tools/python3/src/Include/complexobject.h
@@ -10,8 +10,8 @@ extern "C" {
PyAPI_DATA(PyTypeObject) PyComplex_Type;
-#define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type)
-#define PyComplex_CheckExact(op) Py_IS_TYPE(op, &PyComplex_Type)
+#define PyComplex_Check(op) PyObject_TypeCheck((op), &PyComplex_Type)
+#define PyComplex_CheckExact(op) Py_IS_TYPE((op), &PyComplex_Type)
PyAPI_FUNC(PyObject *) PyComplex_FromDoubles(double real, double imag);
diff --git a/contrib/tools/python3/src/Include/cpython/abstract.h b/contrib/tools/python3/src/Include/cpython/abstract.h
index d276669312..3b27aab2fc 100644
--- a/contrib/tools/python3/src/Include/cpython/abstract.h
+++ b/contrib/tools/python3/src/Include/cpython/abstract.h
@@ -50,23 +50,18 @@ PyAPI_FUNC(PyObject *) _PyObject_MakeTpCall(
PyObject *const *args, Py_ssize_t nargs,
PyObject *keywords);
-#define PY_VECTORCALL_ARGUMENTS_OFFSET \
- (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
-
+// PyVectorcall_NARGS() is exported as a function for the stable ABI.
+// Here (when we are not using the stable ABI), the name is overridden to
+// call a static inline function for best performance.
+#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
static inline Py_ssize_t
-PyVectorcall_NARGS(size_t n)
+_PyVectorcall_NARGS(size_t n)
{
return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
}
PyAPI_FUNC(vectorcallfunc) PyVectorcall_Function(PyObject *callable);
-PyAPI_FUNC(PyObject *) PyObject_Vectorcall(
- PyObject *callable,
- PyObject *const *args,
- size_t nargsf,
- PyObject *kwnames);
-
// Backwards compatibility aliases for API that was provisional in Python 3.8
#define _PyObject_Vectorcall PyObject_Vectorcall
#define _PyObject_VectorcallMethod PyObject_VectorcallMethod
@@ -84,10 +79,6 @@ PyAPI_FUNC(PyObject *) PyObject_VectorcallDict(
size_t nargsf,
PyObject *kwargs);
-/* Call "callable" (which must support vectorcall) with positional arguments
- "tuple" and keyword arguments "dict". "dict" may also be NULL */
-PyAPI_FUNC(PyObject *) PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict);
-
// Same as PyObject_Vectorcall(), except without keyword arguments
PyAPI_FUNC(PyObject *) _PyObject_FastCall(
PyObject *func,
@@ -96,10 +87,6 @@ PyAPI_FUNC(PyObject *) _PyObject_FastCall(
PyAPI_FUNC(PyObject *) PyObject_CallOneArg(PyObject *func, PyObject *arg);
-PyAPI_FUNC(PyObject *) PyObject_VectorcallMethod(
- PyObject *name, PyObject *const *args,
- size_t nargsf, PyObject *kwnames);
-
static inline PyObject *
PyObject_CallMethodNoArgs(PyObject *self, PyObject *name)
{
@@ -176,7 +163,7 @@ PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t);
/* Assume tp_as_sequence and sq_item exist and that 'i' does not
need to be corrected for a negative index. */
#define PySequence_ITEM(o, i)\
- ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
+ ( Py_TYPE(o)->tp_as_sequence->sq_item((o), (i)) )
#define PY_ITERSEARCH_COUNT 1
#define PY_ITERSEARCH_INDEX 2
diff --git a/contrib/tools/python3/src/Include/cpython/bytearrayobject.h b/contrib/tools/python3/src/Include/cpython/bytearrayobject.h
index 5114169c28..9ba176eb2d 100644
--- a/contrib/tools/python3/src/Include/cpython/bytearrayobject.h
+++ b/contrib/tools/python3/src/Include/cpython/bytearrayobject.h
@@ -25,14 +25,10 @@ static inline char* PyByteArray_AS_STRING(PyObject *op)
}
return _PyByteArray_empty_string;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
-#endif
+#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
static inline Py_ssize_t PyByteArray_GET_SIZE(PyObject *op) {
PyByteArrayObject *self = _PyByteArray_CAST(op);
return Py_SIZE(self);
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
-#endif
+#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
diff --git a/contrib/tools/python3/src/Include/cpython/bytesobject.h b/contrib/tools/python3/src/Include/cpython/bytesobject.h
index 53343661f0..e982031c10 100644
--- a/contrib/tools/python3/src/Include/cpython/bytesobject.h
+++ b/contrib/tools/python3/src/Include/cpython/bytesobject.h
@@ -36,17 +36,13 @@ static inline char* PyBytes_AS_STRING(PyObject *op)
{
return _PyBytes_CAST(op)->ob_sval;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
-#endif
+#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
PyBytesObject *self = _PyBytes_CAST(op);
return Py_SIZE(self);
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
-#endif
+#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*,
x must be an iterable object. */
diff --git a/contrib/tools/python3/src/Include/cpython/cellobject.h b/contrib/tools/python3/src/Include/cpython/cellobject.h
index e07f9d1de7..47a6a49149 100644
--- a/contrib/tools/python3/src/Include/cpython/cellobject.h
+++ b/contrib/tools/python3/src/Include/cpython/cellobject.h
@@ -15,14 +15,27 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyCell_Type;
-#define PyCell_Check(op) Py_IS_TYPE(op, &PyCell_Type)
+#define PyCell_Check(op) Py_IS_TYPE((op), &PyCell_Type)
PyAPI_FUNC(PyObject *) PyCell_New(PyObject *);
PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);
-#define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref)
-#define PyCell_SET(op, v) _Py_RVALUE(((PyCellObject *)(op))->ob_ref = (v))
+static inline PyObject* PyCell_GET(PyObject *op) {
+ PyCellObject *cell;
+ assert(PyCell_Check(op));
+ cell = _Py_CAST(PyCellObject*, op);
+ return cell->ob_ref;
+}
+#define PyCell_GET(op) PyCell_GET(_PyObject_CAST(op))
+
+static inline void PyCell_SET(PyObject *op, PyObject *value) {
+ PyCellObject *cell;
+ assert(PyCell_Check(op));
+ cell = _Py_CAST(PyCellObject*, op);
+ cell->ob_ref = value;
+}
+#define PyCell_SET(op, value) PyCell_SET(_PyObject_CAST(op), (value))
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/cpython/ceval.h b/contrib/tools/python3/src/Include/cpython/ceval.h
index 9d4eeafb42..a9616bd6a4 100644
--- a/contrib/tools/python3/src/Include/cpython/ceval.h
+++ b/contrib/tools/python3/src/Include/cpython/ceval.h
@@ -3,8 +3,10 @@
#endif
PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
+PyAPI_FUNC(void) PyEval_SetProfileAllThreads(Py_tracefunc, PyObject *);
PyAPI_DATA(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
+PyAPI_FUNC(void) PyEval_SetTraceAllThreads(Py_tracefunc, PyObject *);
PyAPI_FUNC(int) _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
/* Helper to look up a builtin object */
@@ -20,7 +22,14 @@ PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(PyThreadState *tstate, struct _P
PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds);
PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void);
-PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc);
+PyAPI_FUNC(int) _PyEval_MakePendingCalls(PyThreadState *);
+
+PyAPI_FUNC(Py_ssize_t) PyUnstable_Eval_RequestCodeExtraIndex(freefunc);
+// Old name -- remove when this API changes:
+_Py_DEPRECATED_EXTERNALLY(3.12) static inline Py_ssize_t
+_PyEval_RequestCodeExtraIndex(freefunc f) {
+ return PyUnstable_Eval_RequestCodeExtraIndex(f);
+}
PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *);
diff --git a/contrib/tools/python3/src/Include/cpython/classobject.h b/contrib/tools/python3/src/Include/cpython/classobject.h
index 80df8842eb..d7c9ddd133 100644
--- a/contrib/tools/python3/src/Include/cpython/classobject.h
+++ b/contrib/tools/python3/src/Include/cpython/classobject.h
@@ -19,19 +19,27 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyMethod_Type;
-#define PyMethod_Check(op) Py_IS_TYPE(op, &PyMethod_Type)
+#define PyMethod_Check(op) Py_IS_TYPE((op), &PyMethod_Type)
PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyMethod_Function(PyObject *);
PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *);
-/* Macros for direct access to these values. Type checks are *not*
- done, so use with care. */
-#define PyMethod_GET_FUNCTION(meth) \
- (((PyMethodObject *)meth) -> im_func)
-#define PyMethod_GET_SELF(meth) \
- (((PyMethodObject *)meth) -> im_self)
+#define _PyMethod_CAST(meth) \
+ (assert(PyMethod_Check(meth)), _Py_CAST(PyMethodObject*, meth))
+
+/* Static inline functions for direct access to these values.
+ Type checks are *not* done, so use with care. */
+static inline PyObject* PyMethod_GET_FUNCTION(PyObject *meth) {
+ return _PyMethod_CAST(meth)->im_func;
+}
+#define PyMethod_GET_FUNCTION(meth) PyMethod_GET_FUNCTION(_PyObject_CAST(meth))
+
+static inline PyObject* PyMethod_GET_SELF(PyObject *meth) {
+ return _PyMethod_CAST(meth)->im_self;
+}
+#define PyMethod_GET_SELF(meth) PyMethod_GET_SELF(_PyObject_CAST(meth))
typedef struct {
PyObject_HEAD
@@ -40,15 +48,21 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type;
-#define PyInstanceMethod_Check(op) Py_IS_TYPE(op, &PyInstanceMethod_Type)
+#define PyInstanceMethod_Check(op) Py_IS_TYPE((op), &PyInstanceMethod_Type)
PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *);
PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *);
-/* Macros for direct access to these values. Type checks are *not*
- done, so use with care. */
-#define PyInstanceMethod_GET_FUNCTION(meth) \
- (((PyInstanceMethodObject *)meth) -> func)
+#define _PyInstanceMethod_CAST(meth) \
+ (assert(PyInstanceMethod_Check(meth)), \
+ _Py_CAST(PyInstanceMethodObject*, meth))
+
+/* Static inline function for direct access to these values.
+ Type checks are *not* done, so use with care. */
+static inline PyObject* PyInstanceMethod_GET_FUNCTION(PyObject *meth) {
+ return _PyInstanceMethod_CAST(meth)->func;
+}
+#define PyInstanceMethod_GET_FUNCTION(meth) PyInstanceMethod_GET_FUNCTION(_PyObject_CAST(meth))
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/cpython/code.h b/contrib/tools/python3/src/Include/cpython/code.h
index 7006060cc7..03834b20c3 100644
--- a/contrib/tools/python3/src/Include/cpython/code.h
+++ b/contrib/tools/python3/src/Include/cpython/code.h
@@ -3,10 +3,29 @@
#ifndef Py_LIMITED_API
#ifndef Py_CODE_H
#define Py_CODE_H
+
#ifdef __cplusplus
extern "C" {
#endif
+/* Count of all local monitoring events */
+#define _PY_MONITORING_LOCAL_EVENTS 10
+/* Count of all "real" monitoring events (not derived from other events) */
+#define _PY_MONITORING_UNGROUPED_EVENTS 15
+/* Count of all monitoring events */
+#define _PY_MONITORING_EVENTS 17
+
+/* Tables of which tools are active for each monitored event. */
+/* For 3.12 ABI compatibility this is over sized */
+typedef struct _Py_LocalMonitors {
+ /* Only _PY_MONITORING_LOCAL_EVENTS of these are used */
+ uint8_t tools[_PY_MONITORING_UNGROUPED_EVENTS];
+} _Py_LocalMonitors;
+
+typedef struct _Py_GlobalMonitors {
+ uint8_t tools[_PY_MONITORING_UNGROUPED_EVENTS];
+} _Py_GlobalMonitors;
+
/* Each instruction in a code object is a fixed-width value,
* currently 2 bytes: 1-byte opcode + 1-byte oparg. The EXTENDED_ARG
* opcode allows for larger values but the current limit is 3 uses
@@ -16,20 +35,74 @@ extern "C" {
* 2**32 - 1, rather than INT_MAX.
*/
-typedef uint16_t _Py_CODEUNIT;
+typedef union {
+ uint16_t cache;
+ struct {
+ uint8_t code;
+ uint8_t arg;
+ } op;
+} _Py_CODEUNIT;
-#ifdef WORDS_BIGENDIAN
-# define _Py_OPCODE(word) ((word) >> 8)
-# define _Py_OPARG(word) ((word) & 255)
-# define _Py_MAKECODEUNIT(opcode, oparg) (((opcode)<<8)|(oparg))
-#else
-# define _Py_OPCODE(word) ((word) & 255)
-# define _Py_OPARG(word) ((word) >> 8)
-# define _Py_MAKECODEUNIT(opcode, oparg) ((opcode)|((oparg)<<8))
-#endif
-// Use "unsigned char" instead of "uint8_t" here to avoid illegal aliasing:
-#define _Py_SET_OPCODE(word, opcode) (((unsigned char *)&(word))[0] = (opcode))
+/* These macros only remain defined for compatibility. */
+#define _Py_OPCODE(word) ((word).op.code)
+#define _Py_OPARG(word) ((word).op.arg)
+
+static inline _Py_CODEUNIT
+_py_make_codeunit(uint8_t opcode, uint8_t oparg)
+{
+ // No designated initialisers because of C++ compat
+ _Py_CODEUNIT word;
+ word.op.code = opcode;
+ word.op.arg = oparg;
+ return word;
+}
+
+static inline void
+_py_set_opcode(_Py_CODEUNIT *word, uint8_t opcode)
+{
+ word->op.code = opcode;
+}
+
+#define _Py_MAKE_CODEUNIT(opcode, oparg) _py_make_codeunit((opcode), (oparg))
+#define _Py_SET_OPCODE(word, opcode) _py_set_opcode(&(word), (opcode))
+
+
+typedef struct {
+ PyObject *_co_code;
+ PyObject *_co_varnames;
+ PyObject *_co_cellvars;
+ PyObject *_co_freevars;
+} _PyCoCached;
+
+/* Ancilliary data structure used for instrumentation.
+ Line instrumentation creates an array of
+ these. One entry per code unit.*/
+typedef struct {
+ uint8_t original_opcode;
+ int8_t line_delta;
+} _PyCoLineInstrumentationData;
+
+/* Main data structure used for instrumentation.
+ * This is allocated when needed for instrumentation
+ */
+typedef struct {
+ /* Monitoring specific to this code object */
+ _Py_LocalMonitors local_monitors;
+ /* Monitoring that is active on this code object */
+ _Py_LocalMonitors active_monitors;
+ /* The tools that are to be notified for events for the matching code unit */
+ uint8_t *tools;
+ /* Information to support line events */
+ _PyCoLineInstrumentationData *lines;
+ /* The tools that are to be notified for line events for the matching code unit */
+ uint8_t *line_tools;
+ /* Information to support instruction events */
+ /* The underlying instructions, which can themselves be instrumented */
+ uint8_t *per_instruction_opcodes;
+ /* The tools that are to be notified for instruction events for the matching code unit */
+ uint8_t *per_instruction_tools;
+} _PyCoMonitoringData;
// To avoid repeating ourselves in deepfreeze.py, all PyCodeObject members are
// defined in this macro:
@@ -62,8 +135,6 @@ typedef uint16_t _Py_CODEUNIT;
PyObject *co_exceptiontable; /* Byte string encoding exception handling \
table */ \
int co_flags; /* CO_..., see below */ \
- short co_warmup; /* Warmup counter for quickening */ \
- short _co_linearray_entry_size; /* Size of each entry in _co_linearray */ \
\
/* The rest are not so impactful on performance. */ \
int co_argcount; /* #arguments, except *args */ \
@@ -74,12 +145,12 @@ typedef uint16_t _Py_CODEUNIT;
\
/* redundant values (derived from co_localsplusnames and \
co_localspluskinds) */ \
- int co_nlocalsplus; /* number of local + cell + free variables \
- */ \
+ int co_nlocalsplus; /* number of local + cell + free variables */ \
+ int co_framesize; /* Size of frame in words */ \
int co_nlocals; /* number of local variables */ \
- int co_nplaincellvars; /* number of non-arg cell variables */ \
int co_ncellvars; /* total number of cell variables */ \
int co_nfreevars; /* number of free variables */ \
+ uint32_t co_version; /* version number */ \
\
PyObject *co_localsplusnames; /* tuple mapping offsets to names */ \
PyObject *co_localspluskinds; /* Bytes mapping to local kinds (one byte \
@@ -89,8 +160,9 @@ typedef uint16_t _Py_CODEUNIT;
PyObject *co_qualname; /* unicode (qualname, for reference) */ \
PyObject *co_linetable; /* bytes object that holds location info */ \
PyObject *co_weakreflist; /* to support weakrefs to code objects */ \
- PyObject *_co_code; /* cached co_code object/attribute */ \
- char *_co_linearray; /* array of line offsets */ \
+ _PyCoCached *_co_cached; /* cached co_* attributes */ \
+ uint64_t _co_instrumentation_version; /* current instrumentation version */ \
+ _PyCoMonitoringData *_co_monitoring; /* Monitoring data */ \
int _co_firsttraceable; /* index of first traceable instruction */ \
/* Scratch space for extra data relating to the code object. \
Type is a void* to keep the format private in codeobject.c to force \
@@ -139,24 +211,55 @@ struct PyCodeObject _PyCode_DEF(1);
PyAPI_DATA(PyTypeObject) PyCode_Type;
-#define PyCode_Check(op) Py_IS_TYPE(op, &PyCode_Type)
-#define PyCode_GetNumFree(op) ((op)->co_nfreevars)
-#define _PyCode_CODE(CO) ((_Py_CODEUNIT *)(CO)->co_code_adaptive)
+#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type)
+
+static inline Py_ssize_t PyCode_GetNumFree(PyCodeObject *op) {
+ assert(PyCode_Check(op));
+ return op->co_nfreevars;
+}
+
+static inline int PyCode_GetFirstFree(PyCodeObject *op) {
+ assert(PyCode_Check(op));
+ return op->co_nlocalsplus - op->co_nfreevars;
+}
+
+#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
#define _PyCode_NBYTES(CO) (Py_SIZE(CO) * (Py_ssize_t)sizeof(_Py_CODEUNIT))
-/* Public interface */
-PyAPI_FUNC(PyCodeObject *) PyCode_New(
+/* Unstable public interface */
+PyAPI_FUNC(PyCodeObject *) PyUnstable_Code_New(
int, int, int, int, int, PyObject *, PyObject *,
PyObject *, PyObject *, PyObject *, PyObject *,
PyObject *, PyObject *, PyObject *, int, PyObject *,
PyObject *);
-PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs(
+PyAPI_FUNC(PyCodeObject *) PyUnstable_Code_NewWithPosOnlyArgs(
int, int, int, int, int, int, PyObject *, PyObject *,
PyObject *, PyObject *, PyObject *, PyObject *,
PyObject *, PyObject *, PyObject *, int, PyObject *,
PyObject *);
/* same as struct above */
+// Old names -- remove when this API changes:
+_Py_DEPRECATED_EXTERNALLY(3.12) static inline PyCodeObject *
+PyCode_New(
+ int a, int b, int c, int d, int e, PyObject *f, PyObject *g,
+ PyObject *h, PyObject *i, PyObject *j, PyObject *k,
+ PyObject *l, PyObject *m, PyObject *n, int o, PyObject *p,
+ PyObject *q)
+{
+ return PyUnstable_Code_New(
+ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q);
+}
+_Py_DEPRECATED_EXTERNALLY(3.12) static inline PyCodeObject *
+PyCode_NewWithPosOnlyArgs(
+ int a, int poac, int b, int c, int d, int e, PyObject *f, PyObject *g,
+ PyObject *h, PyObject *i, PyObject *j, PyObject *k,
+ PyObject *l, PyObject *m, PyObject *n, int o, PyObject *p,
+ PyObject *q)
+{
+ return PyUnstable_Code_NewWithPosOnlyArgs(
+ a, poac, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q);
+}
/* Creates a new empty code object with the specified source location. */
PyAPI_FUNC(PyCodeObject *)
@@ -169,6 +272,46 @@ PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
PyAPI_FUNC(int) PyCode_Addr2Location(PyCodeObject *, int, int *, int *, int *, int *);
+#define PY_FOREACH_CODE_EVENT(V) \
+ V(CREATE) \
+ V(DESTROY)
+
+typedef enum {
+ #define PY_DEF_EVENT(op) PY_CODE_EVENT_##op,
+ PY_FOREACH_CODE_EVENT(PY_DEF_EVENT)
+ #undef PY_DEF_EVENT
+} PyCodeEvent;
+
+
+/*
+ * A callback that is invoked for different events in a code object's lifecycle.
+ *
+ * The callback is invoked with a borrowed reference to co, after it is
+ * created and before it is destroyed.
+ *
+ * If the callback sets an exception, it must return -1. Otherwise
+ * it should return 0.
+ */
+typedef int (*PyCode_WatchCallback)(
+ PyCodeEvent event,
+ PyCodeObject* co);
+
+/*
+ * Register a per-interpreter callback that will be invoked for code object
+ * lifecycle events.
+ *
+ * Returns a handle that may be passed to PyCode_ClearWatcher on success,
+ * or -1 and sets an error if no more handles are available.
+ */
+PyAPI_FUNC(int) PyCode_AddWatcher(PyCode_WatchCallback callback);
+
+/*
+ * Clear the watcher associated with the watcher_id handle.
+ *
+ * Returns 0 on success or -1 if no watcher exists for the provided id.
+ */
+PyAPI_FUNC(int) PyCode_ClearWatcher(int watcher_id);
+
/* for internal use only */
struct _opaque {
int computed_line;
@@ -200,11 +343,21 @@ PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj);
PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
PyObject *names, PyObject *lnotab);
-
-PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index,
- void **extra);
-PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index,
- void *extra);
+PyAPI_FUNC(int) PyUnstable_Code_GetExtra(
+ PyObject *code, Py_ssize_t index, void **extra);
+PyAPI_FUNC(int) PyUnstable_Code_SetExtra(
+ PyObject *code, Py_ssize_t index, void *extra);
+// Old names -- remove when this API changes:
+_Py_DEPRECATED_EXTERNALLY(3.12) static inline int
+_PyCode_GetExtra(PyObject *code, Py_ssize_t index, void **extra)
+{
+ return PyUnstable_Code_GetExtra(code, index, extra);
+}
+_Py_DEPRECATED_EXTERNALLY(3.12) static inline int
+_PyCode_SetExtra(PyObject *code, Py_ssize_t index, void *extra)
+{
+ return PyUnstable_Code_SetExtra(code, index, extra);
+}
/* Equivalent to getattr(code, 'co_code') in Python.
Returns a strong reference to a bytes object. */
diff --git a/contrib/tools/python3/src/Include/cpython/compile.h b/contrib/tools/python3/src/Include/cpython/compile.h
index 518a376499..f5a62a8ec6 100644
--- a/contrib/tools/python3/src/Include/cpython/compile.h
+++ b/contrib/tools/python3/src/Include/cpython/compile.h
@@ -31,11 +31,26 @@ typedef struct {
#define _PyCompilerFlags_INIT \
(PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
+/* source location information */
+typedef struct {
+ int lineno;
+ int end_lineno;
+ int col_offset;
+ int end_col_offset;
+} _PyCompilerSrcLocation;
+
+#define SRC_LOCATION_FROM_AST(n) \
+ (_PyCompilerSrcLocation){ \
+ .lineno = (n)->lineno, \
+ .end_lineno = (n)->end_lineno, \
+ .col_offset = (n)->col_offset, \
+ .end_col_offset = (n)->end_col_offset }
+
/* Future feature support */
typedef struct {
- int ff_features; /* flags set by future statements */
- int ff_lineno; /* line number of last future statement */
+ int ff_features; /* flags set by future statements */
+ _PyCompilerSrcLocation ff_location; /* location of last future statement */
} PyFutureFeatures;
#define FUTURE_NESTED_SCOPES "nested_scopes"
diff --git a/contrib/tools/python3/src/Include/cpython/context.h b/contrib/tools/python3/src/Include/cpython/context.h
index 4db079f763..9879fc7192 100644
--- a/contrib/tools/python3/src/Include/cpython/context.h
+++ b/contrib/tools/python3/src/Include/cpython/context.h
@@ -15,9 +15,9 @@ PyAPI_DATA(PyTypeObject) PyContextToken_Type;
typedef struct _pycontexttokenobject PyContextToken;
-#define PyContext_CheckExact(o) Py_IS_TYPE(o, &PyContext_Type)
-#define PyContextVar_CheckExact(o) Py_IS_TYPE(o, &PyContextVar_Type)
-#define PyContextToken_CheckExact(o) Py_IS_TYPE(o, &PyContextToken_Type)
+#define PyContext_CheckExact(o) Py_IS_TYPE((o), &PyContext_Type)
+#define PyContextVar_CheckExact(o) Py_IS_TYPE((o), &PyContextVar_Type)
+#define PyContextToken_CheckExact(o) Py_IS_TYPE((o), &PyContextToken_Type)
PyAPI_FUNC(PyObject *) PyContext_New(void);
diff --git a/contrib/tools/python3/src/Include/cpython/dictobject.h b/contrib/tools/python3/src/Include/cpython/dictobject.h
index 033eaeb4c9..ddada92202 100644
--- a/contrib/tools/python3/src/Include/cpython/dictobject.h
+++ b/contrib/tools/python3/src/Include/cpython/dictobject.h
@@ -16,7 +16,11 @@ typedef struct {
/* Dictionary version: globally unique, value change each time
the dictionary is modified */
+#ifdef Py_BUILD_CORE
uint64_t ma_version_tag;
+#else
+ Py_DEPRECATED(3.12) uint64_t ma_version_tag;
+#endif
PyDictKeysObject *ma_keys;
@@ -46,7 +50,14 @@ PyAPI_FUNC(int) _PyDict_Next(
PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, Py_hash_t *hash);
/* Get the number of items of a dictionary. */
-#define PyDict_GET_SIZE(mp) (assert(PyDict_Check(mp)),((PyDictObject *)mp)->ma_used)
+static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
+ PyDictObject *mp;
+ assert(PyDict_Check(op));
+ mp = _Py_CAST(PyDictObject*, op);
+ return mp->ma_used;
+}
+#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
+
PyAPI_FUNC(int) _PyDict_Contains_KnownHash(PyObject *, PyObject *, Py_hash_t);
PyAPI_FUNC(int) _PyDict_ContainsId(PyObject *, _Py_Identifier *);
PyAPI_FUNC(PyObject *) _PyDict_NewPresized(Py_ssize_t minused);
@@ -76,3 +87,32 @@ typedef struct {
PyAPI_FUNC(PyObject *) _PyDictView_New(PyObject *, PyTypeObject *);
PyAPI_FUNC(PyObject *) _PyDictView_Intersect(PyObject* self, PyObject *other);
+
+/* Dictionary watchers */
+
+#define PY_FOREACH_DICT_EVENT(V) \
+ V(ADDED) \
+ V(MODIFIED) \
+ V(DELETED) \
+ V(CLONED) \
+ V(CLEARED) \
+ V(DEALLOCATED)
+
+typedef enum {
+ #define PY_DEF_EVENT(EVENT) PyDict_EVENT_##EVENT,
+ PY_FOREACH_DICT_EVENT(PY_DEF_EVENT)
+ #undef PY_DEF_EVENT
+} PyDict_WatchEvent;
+
+// Callback to be invoked when a watched dict is cleared, dealloced, or modified.
+// In clear/dealloc case, key and new_value will be NULL. Otherwise, new_value will be the
+// new value for key, NULL if key is being deleted.
+typedef int(*PyDict_WatchCallback)(PyDict_WatchEvent event, PyObject* dict, PyObject* key, PyObject* new_value);
+
+// Register/unregister a dict-watcher callback
+PyAPI_FUNC(int) PyDict_AddWatcher(PyDict_WatchCallback callback);
+PyAPI_FUNC(int) PyDict_ClearWatcher(int watcher_id);
+
+// Mark given dictionary as "watched" (callback will be called if it is modified)
+PyAPI_FUNC(int) PyDict_Watch(int watcher_id, PyObject* dict);
+PyAPI_FUNC(int) PyDict_Unwatch(int watcher_id, PyObject* dict);
diff --git a/contrib/tools/python3/src/Include/cpython/floatobject.h b/contrib/tools/python3/src/Include/cpython/floatobject.h
index 7795d9f83f..127093098b 100644
--- a/contrib/tools/python3/src/Include/cpython/floatobject.h
+++ b/contrib/tools/python3/src/Include/cpython/floatobject.h
@@ -7,9 +7,15 @@ typedef struct {
double ob_fval;
} PyFloatObject;
-// Macro version of PyFloat_AsDouble() trading safety for speed.
+#define _PyFloat_CAST(op) \
+ (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op))
+
+// Static inline version of PyFloat_AsDouble() trading safety for speed.
// It doesn't check if op is a double object.
-#define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval)
+static inline double PyFloat_AS_DOUBLE(PyObject *op) {
+ return _PyFloat_CAST(op)->ob_fval;
+}
+#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
PyAPI_FUNC(int) PyFloat_Pack2(double x, char *p, int le);
diff --git a/contrib/tools/python3/src/Include/cpython/funcobject.h b/contrib/tools/python3/src/Include/cpython/funcobject.h
index 99ac6008f8..6f78f5868d 100644
--- a/contrib/tools/python3/src/Include/cpython/funcobject.h
+++ b/contrib/tools/python3/src/Include/cpython/funcobject.h
@@ -41,6 +41,7 @@ typedef struct {
PyObject *func_weakreflist; /* List of weak references */
PyObject *func_module; /* The __module__ attribute, can be anything */
PyObject *func_annotations; /* Annotations, a dict or NULL */
+ PyObject *func_typeparams; /* Tuple of active type variables or NULL */
vectorcallfunc vectorcall;
/* Version number for use by specializer.
* Can set to non-zero when we want to specialize.
@@ -48,7 +49,8 @@ typedef struct {
* defaults
* kwdefaults (only if the object changes, not the contents of the dict)
* code
- * annotations */
+ * annotations
+ * vectorcall function pointer */
uint32_t func_version;
/* Invariant:
@@ -60,7 +62,7 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyFunction_Type;
-#define PyFunction_Check(op) Py_IS_TYPE(op, &PyFunction_Type)
+#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *);
@@ -69,6 +71,7 @@ PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *);
PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *);
PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *);
PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *);
+PyAPI_FUNC(void) PyFunction_SetVectorcall(PyFunctionObject *, vectorcallfunc);
PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *);
PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *);
@@ -82,22 +85,45 @@ PyAPI_FUNC(PyObject *) _PyFunction_Vectorcall(
size_t nargsf,
PyObject *kwnames);
-/* Macros for direct access to these values. Type checks are *not*
- done, so use with care. */
-#define PyFunction_GET_CODE(func) \
- (((PyFunctionObject *)func) -> func_code)
-#define PyFunction_GET_GLOBALS(func) \
- (((PyFunctionObject *)func) -> func_globals)
-#define PyFunction_GET_MODULE(func) \
- (((PyFunctionObject *)func) -> func_module)
-#define PyFunction_GET_DEFAULTS(func) \
- (((PyFunctionObject *)func) -> func_defaults)
-#define PyFunction_GET_KW_DEFAULTS(func) \
- (((PyFunctionObject *)func) -> func_kwdefaults)
-#define PyFunction_GET_CLOSURE(func) \
- (((PyFunctionObject *)func) -> func_closure)
-#define PyFunction_GET_ANNOTATIONS(func) \
- (((PyFunctionObject *)func) -> func_annotations)
+#define _PyFunction_CAST(func) \
+ (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
+
+/* Static inline functions for direct access to these values.
+ Type checks are *not* done, so use with care. */
+static inline PyObject* PyFunction_GET_CODE(PyObject *func) {
+ return _PyFunction_CAST(func)->func_code;
+}
+#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
+
+static inline PyObject* PyFunction_GET_GLOBALS(PyObject *func) {
+ return _PyFunction_CAST(func)->func_globals;
+}
+#define PyFunction_GET_GLOBALS(func) PyFunction_GET_GLOBALS(_PyObject_CAST(func))
+
+static inline PyObject* PyFunction_GET_MODULE(PyObject *func) {
+ return _PyFunction_CAST(func)->func_module;
+}
+#define PyFunction_GET_MODULE(func) PyFunction_GET_MODULE(_PyObject_CAST(func))
+
+static inline PyObject* PyFunction_GET_DEFAULTS(PyObject *func) {
+ return _PyFunction_CAST(func)->func_defaults;
+}
+#define PyFunction_GET_DEFAULTS(func) PyFunction_GET_DEFAULTS(_PyObject_CAST(func))
+
+static inline PyObject* PyFunction_GET_KW_DEFAULTS(PyObject *func) {
+ return _PyFunction_CAST(func)->func_kwdefaults;
+}
+#define PyFunction_GET_KW_DEFAULTS(func) PyFunction_GET_KW_DEFAULTS(_PyObject_CAST(func))
+
+static inline PyObject* PyFunction_GET_CLOSURE(PyObject *func) {
+ return _PyFunction_CAST(func)->func_closure;
+}
+#define PyFunction_GET_CLOSURE(func) PyFunction_GET_CLOSURE(_PyObject_CAST(func))
+
+static inline PyObject* PyFunction_GET_ANNOTATIONS(PyObject *func) {
+ return _PyFunction_CAST(func)->func_annotations;
+}
+#define PyFunction_GET_ANNOTATIONS(func) PyFunction_GET_ANNOTATIONS(_PyObject_CAST(func))
/* The classmethod and staticmethod types lives here, too */
PyAPI_DATA(PyTypeObject) PyClassMethod_Type;
@@ -106,6 +132,55 @@ PyAPI_DATA(PyTypeObject) PyStaticMethod_Type;
PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *);
PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);
+#define PY_FOREACH_FUNC_EVENT(V) \
+ V(CREATE) \
+ V(DESTROY) \
+ V(MODIFY_CODE) \
+ V(MODIFY_DEFAULTS) \
+ V(MODIFY_KWDEFAULTS)
+
+typedef enum {
+ #define PY_DEF_EVENT(EVENT) PyFunction_EVENT_##EVENT,
+ PY_FOREACH_FUNC_EVENT(PY_DEF_EVENT)
+ #undef PY_DEF_EVENT
+} PyFunction_WatchEvent;
+
+/*
+ * A callback that is invoked for different events in a function's lifecycle.
+ *
+ * The callback is invoked with a borrowed reference to func, after it is
+ * created and before it is modified or destroyed. The callback should not
+ * modify func.
+ *
+ * When a function's code object, defaults, or kwdefaults are modified the
+ * callback will be invoked with the respective event and new_value will
+ * contain a borrowed reference to the new value that is about to be stored in
+ * the function. Otherwise the third argument is NULL.
+ *
+ * If the callback returns with an exception set, it must return -1. Otherwise
+ * it should return 0.
+ */
+typedef int (*PyFunction_WatchCallback)(
+ PyFunction_WatchEvent event,
+ PyFunctionObject *func,
+ PyObject *new_value);
+
+/*
+ * Register a per-interpreter callback that will be invoked for function lifecycle
+ * events.
+ *
+ * Returns a handle that may be passed to PyFunction_ClearWatcher on success,
+ * or -1 and sets an error if no more handles are available.
+ */
+PyAPI_FUNC(int) PyFunction_AddWatcher(PyFunction_WatchCallback callback);
+
+/*
+ * Clear the watcher associated with the watcher_id handle.
+ *
+ * Returns 0 on success or -1 if no watcher exists for the supplied id.
+ */
+PyAPI_FUNC(int) PyFunction_ClearWatcher(int watcher_id);
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/cpython/genobject.h b/contrib/tools/python3/src/Include/cpython/genobject.h
index 40eaa19d3f..7856481b5d 100644
--- a/contrib/tools/python3/src/Include/cpython/genobject.h
+++ b/contrib/tools/python3/src/Include/cpython/genobject.h
@@ -13,8 +13,6 @@ extern "C" {
and coroutine objects. */
#define _PyGenObject_HEAD(prefix) \
PyObject_HEAD \
- /* The code object backing the generator */ \
- PyCodeObject *prefix##_code; \
/* List of weak reference. */ \
PyObject *prefix##_weakreflist; \
/* Name of the generator. */ \
@@ -28,7 +26,7 @@ extern "C" {
char prefix##_running_async; \
/* The frame */ \
int8_t prefix##_frame_state; \
- PyObject *prefix##_iframe[1];
+ PyObject *prefix##_iframe[1]; \
typedef struct {
/* The gi_ prefix is intended to remind of generator-iterator. */
@@ -37,8 +35,8 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyGen_Type;
-#define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type)
-#define PyGen_CheckExact(op) Py_IS_TYPE(op, &PyGen_Type)
+#define PyGen_Check(op) PyObject_TypeCheck((op), &PyGen_Type)
+#define PyGen_CheckExact(op) Py_IS_TYPE((op), &PyGen_Type)
PyAPI_FUNC(PyObject *) PyGen_New(PyFrameObject *);
PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(PyFrameObject *,
@@ -46,6 +44,7 @@ PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(PyFrameObject *,
PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *);
PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
PyAPI_FUNC(void) _PyGen_Finalize(PyObject *self);
+PyAPI_FUNC(PyCodeObject *) PyGen_GetCode(PyGenObject *gen);
/* --- PyCoroObject ------------------------------------------------------- */
@@ -57,7 +56,7 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyCoro_Type;
PyAPI_DATA(PyTypeObject) _PyCoroWrapper_Type;
-#define PyCoro_CheckExact(op) Py_IS_TYPE(op, &PyCoro_Type)
+#define PyCoro_CheckExact(op) Py_IS_TYPE((op), &PyCoro_Type)
PyAPI_FUNC(PyObject *) PyCoro_New(PyFrameObject *,
PyObject *name, PyObject *qualname);
@@ -76,7 +75,9 @@ PyAPI_DATA(PyTypeObject) _PyAsyncGenAThrow_Type;
PyAPI_FUNC(PyObject *) PyAsyncGen_New(PyFrameObject *,
PyObject *name, PyObject *qualname);
-#define PyAsyncGen_CheckExact(op) Py_IS_TYPE(op, &PyAsyncGen_Type)
+#define PyAsyncGen_CheckExact(op) Py_IS_TYPE((op), &PyAsyncGen_Type)
+
+#define PyAsyncGenASend_CheckExact(op) Py_IS_TYPE((op), &_PyAsyncGenASend_Type)
#undef _PyGenObject_HEAD
diff --git a/contrib/tools/python3/src/Include/cpython/import.h b/contrib/tools/python3/src/Include/cpython/import.h
index a69b4f34de..2bca4ade4c 100644
--- a/contrib/tools/python3/src/Include/cpython/import.h
+++ b/contrib/tools/python3/src/Include/cpython/import.h
@@ -10,8 +10,8 @@ PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(_Py_Identifier *name);
PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module);
-PyAPI_FUNC(void) _PyImport_AcquireLock(void);
-PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
+PyAPI_FUNC(void) _PyImport_AcquireLock(PyInterpreterState *interp);
+PyAPI_FUNC(int) _PyImport_ReleaseLock(PyInterpreterState *interp);
PyAPI_FUNC(int) _PyImport_FixupBuiltin(
PyObject *mod,
@@ -25,6 +25,7 @@ struct _inittab {
const char *name; /* ASCII encoded string */
PyObject* (*initfunc)(void);
};
+// This is not used after Py_Initialize() is called.
PyAPI_DATA(struct _inittab *) PyImport_Inittab;
PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab);
diff --git a/contrib/tools/python3/src/Include/cpython/initconfig.h b/contrib/tools/python3/src/Include/cpython/initconfig.h
index 3b6d59389f..cbae97f12f 100644
--- a/contrib/tools/python3/src/Include/cpython/initconfig.h
+++ b/contrib/tools/python3/src/Include/cpython/initconfig.h
@@ -25,6 +25,7 @@ PyAPI_FUNC(PyStatus) PyStatus_Exit(int exitcode);
PyAPI_FUNC(int) PyStatus_IsError(PyStatus err);
PyAPI_FUNC(int) PyStatus_IsExit(PyStatus err);
PyAPI_FUNC(int) PyStatus_Exception(PyStatus err);
+PyAPI_FUNC(PyObject *) _PyErr_SetFromPyStatus(PyStatus status);
/* --- PyWideStringList ------------------------------------------------ */
@@ -142,6 +143,7 @@ typedef struct PyConfig {
unsigned long hash_seed;
int faulthandler;
int tracemalloc;
+ int perf_profiling;
int import_time;
int code_debug_ranges;
int show_ref_count;
@@ -177,6 +179,7 @@ typedef struct PyConfig {
wchar_t *check_hash_pycs_mode;
int use_frozen_modules;
int safe_path;
+ int int_max_str_digits;
/* --- Path configuration inputs ------------ */
int pathconfig_warnings;
@@ -211,10 +214,6 @@ typedef struct PyConfig {
// If equal to 0, stop Python initialization before the "main" phase.
int _init_main;
- // If non-zero, disallow threads, subprocesses, and fork.
- // Default: 0.
- int _isolated_interpreter;
-
// If non-zero, we believe we're running from a source tree.
int _is_python_build;
} PyConfig;
diff --git a/contrib/tools/python3/src/Include/internal/pycore_interpreteridobject.h b/contrib/tools/python3/src/Include/cpython/interpreteridobject.h
index 804831e76d..5076584209 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_interpreteridobject.h
+++ b/contrib/tools/python3/src/Include/cpython/interpreteridobject.h
@@ -1,22 +1,11 @@
-/* Interpreter ID Object */
-
-#ifndef Py_INTERNAL_INTERPRETERIDOBJECT_H
-#define Py_INTERNAL_INTERPRETERIDOBJECT_H
-#ifdef __cplusplus
-extern "C" {
+#ifndef Py_CPYTHON_INTERPRETERIDOBJECT_H
+# error "this header file must not be included directly"
#endif
-#ifndef Py_BUILD_CORE
-# error "this header requires Py_BUILD_CORE define"
-#endif
+/* Interpreter ID Object */
PyAPI_DATA(PyTypeObject) _PyInterpreterID_Type;
PyAPI_FUNC(PyObject *) _PyInterpreterID_New(int64_t);
PyAPI_FUNC(PyObject *) _PyInterpreterState_GetIDObject(PyInterpreterState *);
PyAPI_FUNC(PyInterpreterState *) _PyInterpreterID_LookUp(PyObject *);
-
-#ifdef __cplusplus
-}
-#endif
-#endif // !Py_INTERNAL_INTERPRETERIDOBJECT_H
diff --git a/contrib/tools/python3/src/Include/cpython/listobject.h b/contrib/tools/python3/src/Include/cpython/listobject.h
index 1add8213e0..8fa82122d8 100644
--- a/contrib/tools/python3/src/Include/cpython/listobject.h
+++ b/contrib/tools/python3/src/Include/cpython/listobject.h
@@ -34,18 +34,14 @@ static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
PyListObject *list = _PyList_CAST(op);
return Py_SIZE(list);
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
-#endif
+#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
-#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[index])
+#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
static inline void
PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
PyListObject *list = _PyList_CAST(op);
list->ob_item[index] = value;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define PyList_SET_ITEM(op, index, value) \
- PyList_SET_ITEM(_PyObject_CAST(op), index, _PyObject_CAST(value))
-#endif
+ PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
diff --git a/contrib/tools/python3/src/Include/cpython/longintrepr.h b/contrib/tools/python3/src/Include/cpython/longintrepr.h
index 6d52427508..692c69ba76 100644
--- a/contrib/tools/python3/src/Include/cpython/longintrepr.h
+++ b/contrib/tools/python3/src/Include/cpython/longintrepr.h
@@ -79,9 +79,14 @@ typedef long stwodigits; /* signed variant of twodigits */
aware that ints abuse ob_size's sign bit.
*/
-struct _longobject {
- PyObject_VAR_HEAD
+typedef struct _PyLongValue {
+ uintptr_t lv_tag; /* Number of digits, sign and flags */
digit ob_digit[1];
+} _PyLongValue;
+
+struct _longobject {
+ PyObject_HEAD
+ _PyLongValue long_value;
};
PyAPI_FUNC(PyLongObject *) _PyLong_New(Py_ssize_t);
@@ -89,6 +94,37 @@ PyAPI_FUNC(PyLongObject *) _PyLong_New(Py_ssize_t);
/* Return a copy of src. */
PyAPI_FUNC(PyObject *) _PyLong_Copy(PyLongObject *src);
+PyAPI_FUNC(PyLongObject *)
+_PyLong_FromDigits(int negative, Py_ssize_t digit_count, digit *digits);
+
+
+/* Inline some internals for speed. These should be in pycore_long.h
+ * if user code didn't need them inlined. */
+
+#define _PyLong_SIGN_MASK 3
+#define _PyLong_NON_SIZE_BITS 3
+
+
+static inline int
+_PyLong_IsCompact(const PyLongObject* op) {
+ assert(PyType_HasFeature((op)->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
+ return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
+}
+
+#define PyUnstable_Long_IsCompact _PyLong_IsCompact
+
+static inline Py_ssize_t
+_PyLong_CompactValue(const PyLongObject *op)
+{
+ assert(PyType_HasFeature((op)->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
+ assert(PyUnstable_Long_IsCompact(op));
+ Py_ssize_t sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
+ return sign * (Py_ssize_t)op->long_value.ob_digit[0];
+}
+
+#define PyUnstable_Long_CompactValue _PyLong_CompactValue
+
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/cpython/longobject.h b/contrib/tools/python3/src/Include/cpython/longobject.h
index 1a73799d65..90cc0f267a 100644
--- a/contrib/tools/python3/src/Include/cpython/longobject.h
+++ b/contrib/tools/python3/src/Include/cpython/longobject.h
@@ -93,3 +93,8 @@ PyAPI_FUNC(PyObject *) _PyLong_GCD(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) _PyLong_Rshift(PyObject *, size_t);
PyAPI_FUNC(PyObject *) _PyLong_Lshift(PyObject *, size_t);
+
+
+PyAPI_FUNC(int) PyUnstable_Long_IsCompact(const PyLongObject* op);
+PyAPI_FUNC(Py_ssize_t) PyUnstable_Long_CompactValue(const PyLongObject* op);
+
diff --git a/contrib/tools/python3/src/Include/cpython/memoryobject.h b/contrib/tools/python3/src/Include/cpython/memoryobject.h
new file mode 100644
index 0000000000..3837fa8c6a
--- /dev/null
+++ b/contrib/tools/python3/src/Include/cpython/memoryobject.h
@@ -0,0 +1,52 @@
+#ifndef Py_CPYTHON_MEMORYOBJECT_H
+# error "this header file must not be included directly"
+#endif
+
+PyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type;
+
+/* The structs are declared here so that macros can work, but they shouldn't
+ be considered public. Don't access their fields directly, use the macros
+ and functions instead! */
+#define _Py_MANAGED_BUFFER_RELEASED 0x001 /* access to exporter blocked */
+#define _Py_MANAGED_BUFFER_FREE_FORMAT 0x002 /* free format */
+
+typedef struct {
+ PyObject_HEAD
+ int flags; /* state flags */
+ Py_ssize_t exports; /* number of direct memoryview exports */
+ Py_buffer master; /* snapshot buffer obtained from the original exporter */
+} _PyManagedBufferObject;
+
+
+/* memoryview state flags */
+#define _Py_MEMORYVIEW_RELEASED 0x001 /* access to master buffer blocked */
+#define _Py_MEMORYVIEW_C 0x002 /* C-contiguous layout */
+#define _Py_MEMORYVIEW_FORTRAN 0x004 /* Fortran contiguous layout */
+#define _Py_MEMORYVIEW_SCALAR 0x008 /* scalar: ndim = 0 */
+#define _Py_MEMORYVIEW_PIL 0x010 /* PIL-style layout */
+#define _Py_MEMORYVIEW_RESTRICTED 0x020 /* Disallow new references to the memoryview's buffer */
+
+typedef struct {
+ PyObject_VAR_HEAD
+ _PyManagedBufferObject *mbuf; /* managed buffer */
+ Py_hash_t hash; /* hash value for read-only views */
+ int flags; /* state flags */
+ Py_ssize_t exports; /* number of buffer re-exports */
+ Py_buffer view; /* private copy of the exporter's view */
+ PyObject *weakreflist;
+ Py_ssize_t ob_array[1]; /* shape, strides, suboffsets */
+} PyMemoryViewObject;
+
+#define _PyMemoryView_CAST(op) _Py_CAST(PyMemoryViewObject*, op)
+
+/* Get a pointer to the memoryview's private copy of the exporter's buffer. */
+static inline Py_buffer* PyMemoryView_GET_BUFFER(PyObject *op) {
+ return (&_PyMemoryView_CAST(op)->view);
+}
+#define PyMemoryView_GET_BUFFER(op) PyMemoryView_GET_BUFFER(_PyObject_CAST(op))
+
+/* Get a pointer to the exporting object (this may be NULL!). */
+static inline PyObject* PyMemoryView_GET_BASE(PyObject *op) {
+ return _PyMemoryView_CAST(op)->view.obj;
+}
+#define PyMemoryView_GET_BASE(op) PyMemoryView_GET_BASE(_PyObject_CAST(op))
diff --git a/contrib/tools/python3/src/Include/cpython/methodobject.h b/contrib/tools/python3/src/Include/cpython/methodobject.h
index 54a61cfd07..d541e15494 100644
--- a/contrib/tools/python3/src/Include/cpython/methodobject.h
+++ b/contrib/tools/python3/src/Include/cpython/methodobject.h
@@ -31,8 +31,8 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyCMethod_Type;
-#define PyCMethod_CheckExact(op) Py_IS_TYPE(op, &PyCMethod_Type)
-#define PyCMethod_Check(op) PyObject_TypeCheck(op, &PyCMethod_Type)
+#define PyCMethod_CheckExact(op) Py_IS_TYPE((op), &PyCMethod_Type)
+#define PyCMethod_Check(op) PyObject_TypeCheck((op), &PyCMethod_Type)
/* Static inline functions for direct access to these values.
@@ -40,9 +40,7 @@ PyAPI_DATA(PyTypeObject) PyCMethod_Type;
static inline PyCFunction PyCFunction_GET_FUNCTION(PyObject *func) {
return _PyCFunctionObject_CAST(func)->m_ml->ml_meth;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(_PyObject_CAST(func))
-#endif
+#define PyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(_PyObject_CAST(func))
static inline PyObject* PyCFunction_GET_SELF(PyObject *func_obj) {
PyCFunctionObject *func = _PyCFunctionObject_CAST(func_obj);
@@ -51,16 +49,12 @@ static inline PyObject* PyCFunction_GET_SELF(PyObject *func_obj) {
}
return func->m_self;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyCFunction_GET_SELF(func) PyCFunction_GET_SELF(_PyObject_CAST(func))
-#endif
+#define PyCFunction_GET_SELF(func) PyCFunction_GET_SELF(_PyObject_CAST(func))
static inline int PyCFunction_GET_FLAGS(PyObject *func) {
return _PyCFunctionObject_CAST(func)->m_ml->ml_flags;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyCFunction_GET_FLAGS(func) PyCFunction_GET_FLAGS(_PyObject_CAST(func))
-#endif
+#define PyCFunction_GET_FLAGS(func) PyCFunction_GET_FLAGS(_PyObject_CAST(func))
static inline PyTypeObject* PyCFunction_GET_CLASS(PyObject *func_obj) {
PyCFunctionObject *func = _PyCFunctionObject_CAST(func_obj);
@@ -69,6 +63,4 @@ static inline PyTypeObject* PyCFunction_GET_CLASS(PyObject *func_obj) {
}
return _Py_NULL;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyCFunction_GET_CLASS(func) PyCFunction_GET_CLASS(_PyObject_CAST(func))
-#endif
+#define PyCFunction_GET_CLASS(func) PyCFunction_GET_CLASS(_PyObject_CAST(func))
diff --git a/contrib/tools/python3/src/Include/cpython/modsupport.h b/contrib/tools/python3/src/Include/cpython/modsupport.h
index 205e174243..2259291aff 100644
--- a/contrib/tools/python3/src/Include/cpython/modsupport.h
+++ b/contrib/tools/python3/src/Include/cpython/modsupport.h
@@ -34,11 +34,13 @@ PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args);
#define _PyArg_NoPositional(funcname, args) \
((args) == NULL || _PyArg_NoPositional((funcname), (args)))
+#define _Py_ANY_VARARGS(n) ((n) == PY_SSIZE_T_MAX)
+
PyAPI_FUNC(void) _PyArg_BadArgument(const char *, const char *, const char *, PyObject *);
PyAPI_FUNC(int) _PyArg_CheckPositional(const char *, Py_ssize_t,
Py_ssize_t, Py_ssize_t);
#define _PyArg_CheckPositional(funcname, nargs, min, max) \
- ((!ANY_VARARGS(max) && (min) <= (nargs) && (nargs) <= (max)) \
+ ((!_Py_ANY_VARARGS(max) && (min) <= (nargs) && (nargs) <= (max)) \
|| _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
PyAPI_FUNC(PyObject **) _Py_VaBuildStack(
@@ -49,6 +51,7 @@ PyAPI_FUNC(PyObject **) _Py_VaBuildStack(
Py_ssize_t *p_nargs);
typedef struct _PyArg_Parser {
+ int initialized;
const char *format;
const char * const *keywords;
const char *fname;
@@ -98,11 +101,9 @@ PyAPI_FUNC(PyObject * const *) _PyArg_UnpackKeywordsWithVararg(
#define _PyArg_UnpackKeywords(args, nargs, kwargs, kwnames, parser, minpos, maxpos, minkw, buf) \
(((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
- (minpos) <= (nargs) && (nargs) <= (maxpos) && args != NULL) ? (args) : \
+ (minpos) <= (nargs) && (nargs) <= (maxpos) && (args) != NULL) ? (args) : \
_PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
(minpos), (maxpos), (minkw), (buf)))
PyAPI_FUNC(PyObject *) _PyModule_CreateInitialized(PyModuleDef*, int apiver);
PyAPI_FUNC(int) _PyModule_Add(PyObject *, const char *, PyObject *);
-
-PyAPI_DATA(const char *) _Py_PackageContext;
diff --git a/contrib/tools/python3/src/Include/cpython/object.h b/contrib/tools/python3/src/Include/cpython/object.h
index b018dabf9d..ae7f780a93 100644
--- a/contrib/tools/python3/src/Include/cpython/object.h
+++ b/contrib/tools/python3/src/Include/cpython/object.h
@@ -3,6 +3,7 @@
#endif
PyAPI_FUNC(void) _Py_NewReference(PyObject *op);
+PyAPI_FUNC(void) _Py_NewReferenceNoTotal(PyObject *op);
#ifdef Py_TRACE_REFS
/* Py_TRACE_REFS is such major surgery that we call external routines. */
@@ -10,7 +11,11 @@ PyAPI_FUNC(void) _Py_ForgetReference(PyObject *);
#endif
#ifdef Py_REF_DEBUG
-PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void);
+/* These are useful as debugging aids when chasing down refleaks. */
+PyAPI_FUNC(Py_ssize_t) _Py_GetGlobalRefTotal(void);
+# define _Py_GetRefTotal() _Py_GetGlobalRefTotal()
+PyAPI_FUNC(Py_ssize_t) _Py_GetLegacyRefTotal(void);
+PyAPI_FUNC(Py_ssize_t) _PyInterpreterState_GetRefTotal(PyInterpreterState *);
#endif
@@ -41,22 +46,15 @@ typedef struct _Py_Identifier {
Py_ssize_t index;
} _Py_Identifier;
-#if defined(NEEDS_PY_IDENTIFIER) || !defined(Py_BUILD_CORE)
+#ifndef Py_BUILD_CORE
// For now we are keeping _Py_IDENTIFIER for continued use
// in non-builtin extensions (and naughty PyPI modules).
-#define _Py_static_string_init(value) { .string = value, .index = -1 }
+#define _Py_static_string_init(value) { .string = (value), .index = -1 }
#define _Py_static_string(varname, value) static _Py_Identifier varname = _Py_static_string_init(value)
#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname)
-#endif /* NEEDS_PY_IDENTIFIER */
-
-typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
-typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
-
-typedef PyObject *(*vectorcallfunc)(PyObject *callable, PyObject *const *args,
- size_t nargsf, PyObject *kwnames);
-
+#endif /* !Py_BUILD_CORE */
typedef struct {
/* Number implementations must check *both*
@@ -217,9 +215,9 @@ struct _typeobject {
inquiry tp_is_gc; /* For PyObject_IS_GC */
PyObject *tp_bases;
PyObject *tp_mro; /* method resolution order */
- PyObject *tp_cache;
- PyObject *tp_subclasses;
- PyObject *tp_weaklist;
+ PyObject *tp_cache; /* no longer used */
+ void *tp_subclasses; /* for static builtin types this is an index */
+ PyObject *tp_weaklist; /* not used for static builtin types */
destructor tp_del;
/* Type attribute cache version tag. Added in version 2.6 */
@@ -227,13 +225,27 @@ struct _typeobject {
destructor tp_finalize;
vectorcallfunc tp_vectorcall;
+
+ /* bitset of which type-watchers care about this type */
+ unsigned char tp_watched;
};
/* This struct is used by the specializer
* It should should be treated as an opaque blob
* by code other than the specializer and interpreter. */
struct _specialization_cache {
+ // In order to avoid bloating the bytecode with lots of inline caches, the
+ // members of this structure have a somewhat unique contract. They are set
+ // by the specialization machinery, and are invalidated by PyType_Modified.
+ // The rules for using them are as follows:
+ // - If getitem is non-NULL, then it is the same Python function that
+ // PyType_Lookup(cls, "__getitem__") would return.
+ // - If getitem is NULL, then getitem_version is meaningless.
+ // - If getitem->func_version == getitem_version, then getitem can be called
+ // with two positional arguments and no keyword arguments, and has neither
+ // *args nor **kwargs (as required by BINARY_SUBSCR_GETITEM):
PyObject *getitem;
+ uint32_t getitem_version;
};
/* The *real* layout of a type object when allocated on the heap */
@@ -271,6 +283,7 @@ PyAPI_FUNC(PyTypeObject *) _PyType_CalculateMetaclass(PyTypeObject *, PyObject *
PyAPI_FUNC(PyObject *) _PyType_GetDocFromInternalDoc(const char *, const char *);
PyAPI_FUNC(PyObject *) _PyType_GetTextSignatureFromInternalDoc(const char *, const char *);
PyAPI_FUNC(PyObject *) PyType_GetModuleByDef(PyTypeObject *, PyModuleDef *);
+PyAPI_FUNC(PyObject *) PyType_GetDict(PyTypeObject *);
PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int);
PyAPI_FUNC(void) _Py_BreakPoint(void);
@@ -309,38 +322,69 @@ _PyObject_GenericSetAttrWithDict(PyObject *, PyObject *,
PyAPI_FUNC(PyObject *) _PyObject_FunctionStr(PyObject *);
-/* Safely decref `op` and set `op` to `op2`.
+/* Safely decref `dst` and set `dst` to `src`.
*
* As in case of Py_CLEAR "the obvious" code can be deadly:
*
- * Py_DECREF(op);
- * op = op2;
+ * Py_DECREF(dst);
+ * dst = src;
*
* The safe way is:
*
- * Py_SETREF(op, op2);
+ * Py_SETREF(dst, src);
+ *
+ * That arranges to set `dst` to `src` _before_ decref'ing, so that any code
+ * triggered as a side-effect of `dst` getting torn down no longer believes
+ * `dst` points to a valid object.
*
- * That arranges to set `op` to `op2` _before_ decref'ing, so that any code
- * triggered as a side-effect of `op` getting torn down no longer believes
- * `op` points to a valid object.
+ * Temporary variables are used to only evalutate macro arguments once and so
+ * avoid the duplication of side effects. _Py_TYPEOF() or memcpy() is used to
+ * avoid a miscompilation caused by type punning. See Py_CLEAR() comment for
+ * implementation details about type punning.
*
- * Py_XSETREF is a variant of Py_SETREF that uses Py_XDECREF instead of
- * Py_DECREF.
+ * The memcpy() implementation does not emit a compiler warning if 'src' has
+ * not the same type than 'src': any pointer type is accepted for 'src'.
*/
-
-#define Py_SETREF(op, op2) \
- do { \
- PyObject *_py_tmp = _PyObject_CAST(op); \
- (op) = (op2); \
- Py_DECREF(_py_tmp); \
+#ifdef _Py_TYPEOF
+#define Py_SETREF(dst, src) \
+ do { \
+ _Py_TYPEOF(dst)* _tmp_dst_ptr = &(dst); \
+ _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
+ *_tmp_dst_ptr = (src); \
+ Py_DECREF(_tmp_old_dst); \
+ } while (0)
+#else
+#define Py_SETREF(dst, src) \
+ do { \
+ PyObject **_tmp_dst_ptr = _Py_CAST(PyObject**, &(dst)); \
+ PyObject *_tmp_old_dst = (*_tmp_dst_ptr); \
+ PyObject *_tmp_src = _PyObject_CAST(src); \
+ memcpy(_tmp_dst_ptr, &_tmp_src, sizeof(PyObject*)); \
+ Py_DECREF(_tmp_old_dst); \
} while (0)
+#endif
-#define Py_XSETREF(op, op2) \
- do { \
- PyObject *_py_tmp = _PyObject_CAST(op); \
- (op) = (op2); \
- Py_XDECREF(_py_tmp); \
+/* Py_XSETREF() is a variant of Py_SETREF() that uses Py_XDECREF() instead of
+ * Py_DECREF().
+ */
+#ifdef _Py_TYPEOF
+#define Py_XSETREF(dst, src) \
+ do { \
+ _Py_TYPEOF(dst)* _tmp_dst_ptr = &(dst); \
+ _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
+ *_tmp_dst_ptr = (src); \
+ Py_XDECREF(_tmp_old_dst); \
+ } while (0)
+#else
+#define Py_XSETREF(dst, src) \
+ do { \
+ PyObject **_tmp_dst_ptr = _Py_CAST(PyObject**, &(dst)); \
+ PyObject *_tmp_old_dst = (*_tmp_dst_ptr); \
+ PyObject *_tmp_src = _PyObject_CAST(src); \
+ memcpy(_tmp_dst_ptr, &_tmp_src, sizeof(PyObject*)); \
+ Py_XDECREF(_tmp_old_dst); \
} while (0)
+#endif
PyAPI_DATA(PyTypeObject) _PyNone_Type;
@@ -385,9 +429,9 @@ _PyObject_DebugTypeStats(FILE *out);
#endif
#define _PyObject_ASSERT_WITH_MSG(obj, expr, msg) \
- _PyObject_ASSERT_FROM(obj, expr, msg, __FILE__, __LINE__, __func__)
+ _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
#define _PyObject_ASSERT(obj, expr) \
- _PyObject_ASSERT_WITH_MSG(obj, expr, NULL)
+ _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
#define _PyObject_ASSERT_FAILED_MSG(obj, msg) \
_PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
@@ -480,7 +524,7 @@ PyAPI_FUNC(int) _PyTrash_cond(PyObject *op, destructor dealloc);
/* If "cond" is false, then _tstate remains NULL and the deallocator \
* is run normally without involving the trashcan */ \
if (cond) { \
- _tstate = PyThreadState_Get(); \
+ _tstate = _PyThreadState_UncheckedGet(); \
if (_PyTrash_begin(_tstate, _PyObject_CAST(op))) { \
break; \
} \
@@ -493,8 +537,8 @@ PyAPI_FUNC(int) _PyTrash_cond(PyObject *op, destructor dealloc);
} while (0);
#define Py_TRASHCAN_BEGIN(op, dealloc) \
- Py_TRASHCAN_BEGIN_CONDITION(op, \
- _PyTrash_cond(_PyObject_CAST(op), (destructor)dealloc))
+ Py_TRASHCAN_BEGIN_CONDITION((op), \
+ _PyTrash_cond(_PyObject_CAST(op), (destructor)(dealloc)))
/* The following two macros, Py_TRASHCAN_SAFE_BEGIN and
* Py_TRASHCAN_SAFE_END, are deprecated since version 3.11 and
@@ -505,7 +549,27 @@ Py_DEPRECATED(3.11) typedef int UsingDeprecatedTrashcanMacro;
#define Py_TRASHCAN_SAFE_BEGIN(op) \
do { \
UsingDeprecatedTrashcanMacro cond=1; \
- Py_TRASHCAN_BEGIN_CONDITION(op, cond);
+ Py_TRASHCAN_BEGIN_CONDITION((op), cond);
#define Py_TRASHCAN_SAFE_END(op) \
Py_TRASHCAN_END; \
} while(0);
+
+PyAPI_FUNC(void *) PyObject_GetItemData(PyObject *obj);
+
+PyAPI_FUNC(int) _PyObject_VisitManagedDict(PyObject *obj, visitproc visit, void *arg);
+PyAPI_FUNC(void) _PyObject_ClearManagedDict(PyObject *obj);
+
+#define TYPE_MAX_WATCHERS 8
+
+typedef int(*PyType_WatchCallback)(PyTypeObject *);
+PyAPI_FUNC(int) PyType_AddWatcher(PyType_WatchCallback callback);
+PyAPI_FUNC(int) PyType_ClearWatcher(int watcher_id);
+PyAPI_FUNC(int) PyType_Watch(int watcher_id, PyObject *type);
+PyAPI_FUNC(int) PyType_Unwatch(int watcher_id, PyObject *type);
+
+/* Attempt to assign a version tag to the given type.
+ *
+ * Returns 1 if the type already had a valid version tag or a new one was
+ * assigned, or 0 if a new tag could not be assigned.
+ */
+PyAPI_FUNC(int) PyUnstable_Type_AssignVersionTag(PyTypeObject *type);
diff --git a/contrib/tools/python3/src/Include/cpython/objimpl.h b/contrib/tools/python3/src/Include/cpython/objimpl.h
index d7c76eab5c..5a8cdd57c7 100644
--- a/contrib/tools/python3/src/Include/cpython/objimpl.h
+++ b/contrib/tools/python3/src/Include/cpython/objimpl.h
@@ -2,7 +2,9 @@
# error "this header file must not be included directly"
#endif
-#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize )
+static inline size_t _PyObject_SIZE(PyTypeObject *type) {
+ return _Py_STATIC_CAST(size_t, type->tp_basicsize);
+}
/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a
vrbl-size object with nitems items, exclusive of gc overhead (if any). The
@@ -18,10 +20,11 @@
# error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2"
#endif
-#define _PyObject_VAR_SIZE(typeobj, nitems) \
- _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \
- (nitems)*(typeobj)->tp_itemsize, \
- SIZEOF_VOID_P)
+static inline size_t _PyObject_VAR_SIZE(PyTypeObject *type, Py_ssize_t nitems) {
+ size_t size = _Py_STATIC_CAST(size_t, type->tp_basicsize);
+ size += _Py_STATIC_CAST(size_t, nitems) * _Py_STATIC_CAST(size_t, type->tp_itemsize);
+ return _Py_SIZE_ROUND_UP(size, SIZEOF_VOID_P);
+}
/* This example code implements an object constructor with a custom
@@ -87,3 +90,6 @@ PyAPI_FUNC(int) PyObject_IS_GC(PyObject *obj);
PyAPI_FUNC(int) PyType_SUPPORTS_WEAKREFS(PyTypeObject *type);
PyAPI_FUNC(PyObject **) PyObject_GET_WEAKREFS_LISTPTR(PyObject *op);
+
+PyAPI_FUNC(PyObject *) PyUnstable_Object_GC_NewWithExtraData(PyTypeObject *,
+ size_t);
diff --git a/contrib/tools/python3/src/Include/cpython/odictobject.h b/contrib/tools/python3/src/Include/cpython/odictobject.h
index e070413017..3822d55486 100644
--- a/contrib/tools/python3/src/Include/cpython/odictobject.h
+++ b/contrib/tools/python3/src/Include/cpython/odictobject.h
@@ -18,8 +18,8 @@ PyAPI_DATA(PyTypeObject) PyODictKeys_Type;
PyAPI_DATA(PyTypeObject) PyODictItems_Type;
PyAPI_DATA(PyTypeObject) PyODictValues_Type;
-#define PyODict_Check(op) PyObject_TypeCheck(op, &PyODict_Type)
-#define PyODict_CheckExact(op) Py_IS_TYPE(op, &PyODict_Type)
+#define PyODict_Check(op) PyObject_TypeCheck((op), &PyODict_Type)
+#define PyODict_CheckExact(op) Py_IS_TYPE((op), &PyODict_Type)
#define PyODict_SIZE(op) PyDict_GET_SIZE((op))
PyAPI_FUNC(PyObject *) PyODict_New(void);
@@ -27,13 +27,13 @@ PyAPI_FUNC(int) PyODict_SetItem(PyObject *od, PyObject *key, PyObject *item);
PyAPI_FUNC(int) PyODict_DelItem(PyObject *od, PyObject *key);
/* wrappers around PyDict* functions */
-#define PyODict_GetItem(od, key) PyDict_GetItem(_PyObject_CAST(od), key)
+#define PyODict_GetItem(od, key) PyDict_GetItem(_PyObject_CAST(od), (key))
#define PyODict_GetItemWithError(od, key) \
- PyDict_GetItemWithError(_PyObject_CAST(od), key)
-#define PyODict_Contains(od, key) PyDict_Contains(_PyObject_CAST(od), key)
+ PyDict_GetItemWithError(_PyObject_CAST(od), (key))
+#define PyODict_Contains(od, key) PyDict_Contains(_PyObject_CAST(od), (key))
#define PyODict_Size(od) PyDict_Size(_PyObject_CAST(od))
#define PyODict_GetItemString(od, key) \
- PyDict_GetItemString(_PyObject_CAST(od), key)
+ PyDict_GetItemString(_PyObject_CAST(od), (key))
#endif
diff --git a/contrib/tools/python3/src/Include/cpython/picklebufobject.h b/contrib/tools/python3/src/Include/cpython/picklebufobject.h
index 0df2561dce..f3cbaeef91 100644
--- a/contrib/tools/python3/src/Include/cpython/picklebufobject.h
+++ b/contrib/tools/python3/src/Include/cpython/picklebufobject.h
@@ -12,7 +12,7 @@ extern "C" {
PyAPI_DATA(PyTypeObject) PyPickleBuffer_Type;
-#define PyPickleBuffer_Check(op) Py_IS_TYPE(op, &PyPickleBuffer_Type)
+#define PyPickleBuffer_Check(op) Py_IS_TYPE((op), &PyPickleBuffer_Type)
/* Create a PickleBuffer redirecting to the given buffer-enabled object */
PyAPI_FUNC(PyObject *) PyPickleBuffer_FromObject(PyObject *);
diff --git a/contrib/tools/python3/src/Include/cpython/pydebug.h b/contrib/tools/python3/src/Include/cpython/pydebug.h
index cab799f0b3..f6ebd99ed7 100644
--- a/contrib/tools/python3/src/Include/cpython/pydebug.h
+++ b/contrib/tools/python3/src/Include/cpython/pydebug.h
@@ -5,31 +5,31 @@
extern "C" {
#endif
-PyAPI_DATA(int) Py_DebugFlag;
-PyAPI_DATA(int) Py_VerboseFlag;
-PyAPI_DATA(int) Py_QuietFlag;
-PyAPI_DATA(int) Py_InteractiveFlag;
-PyAPI_DATA(int) Py_InspectFlag;
-PyAPI_DATA(int) Py_OptimizeFlag;
-PyAPI_DATA(int) Py_NoSiteFlag;
-PyAPI_DATA(int) Py_BytesWarningFlag;
-PyAPI_DATA(int) Py_FrozenFlag;
-PyAPI_DATA(int) Py_IgnoreEnvironmentFlag;
-PyAPI_DATA(int) Py_DontWriteBytecodeFlag;
-PyAPI_DATA(int) Py_NoUserSiteDirectory;
-PyAPI_DATA(int) Py_UnbufferedStdioFlag;
-PyAPI_DATA(int) Py_HashRandomizationFlag;
-PyAPI_DATA(int) Py_IsolatedFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_DebugFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_VerboseFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_QuietFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_InteractiveFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_InspectFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_OptimizeFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_NoSiteFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_BytesWarningFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_FrozenFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_IgnoreEnvironmentFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_DontWriteBytecodeFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_NoUserSiteDirectory;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_UnbufferedStdioFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_HashRandomizationFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_IsolatedFlag;
#ifdef MS_WINDOWS
-PyAPI_DATA(int) Py_LegacyWindowsFSEncodingFlag;
-PyAPI_DATA(int) Py_LegacyWindowsStdioFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_LegacyWindowsFSEncodingFlag;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_LegacyWindowsStdioFlag;
#endif
/* this is a wrapper around getenv() that pays attention to
Py_IgnoreEnvironmentFlag. It should be used for getting variables like
PYTHONPATH and PYTHONHOME from the environment */
-PyAPI_DATA(char*) Py_GETENV(const char *name);
+PyAPI_FUNC(char*) Py_GETENV(const char *name);
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/cpython/pyerrors.h b/contrib/tools/python3/src/Include/cpython/pyerrors.h
index 47d80e3242..156665cbdb 100644
--- a/contrib/tools/python3/src/Include/cpython/pyerrors.h
+++ b/contrib/tools/python3/src/Include/cpython/pyerrors.h
@@ -37,6 +37,7 @@ typedef struct {
PyObject *msg;
PyObject *name;
PyObject *path;
+ PyObject *name_from;
} PyImportErrorObject;
typedef struct {
@@ -97,7 +98,8 @@ PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, Py
/* Context manipulation (PEP 3134) */
-PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *);
+Py_DEPRECATED(3.12) PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *);
+PyAPI_FUNC(void) _PyErr_ChainExceptions1(PyObject *);
/* Like PyErr_Format(), but saves current exception as __context__ and
__cause__.
@@ -110,23 +112,13 @@ PyAPI_FUNC(PyObject *) _PyErr_FormatFromCause(
/* In exceptions.c */
-/* Helper that attempts to replace the current exception with one of the
- * same type but with a prefix added to the exception text. The resulting
- * exception description looks like:
- *
- * prefix (exc_type: original_exc_str)
- *
- * Only some exceptions can be safely replaced. If the function determines
- * it isn't safe to perform the replacement, it will leave the original
- * unmodified exception in place.
- *
- * Returns a borrowed reference to the new exception (if any), NULL if the
- * existing exception was left in place.
- */
-PyAPI_FUNC(PyObject *) _PyErr_TrySetFromCause(
- const char *prefix_format, /* ASCII-encoded string */
- ...
- );
+PyAPI_FUNC(int) _PyException_AddNote(
+ PyObject *exc,
+ PyObject *note);
+
+PyAPI_FUNC(PyObject*) PyUnstable_Exc_PrepReraiseStar(
+ PyObject *orig,
+ PyObject *excs);
/* In signalmodule.c */
@@ -176,4 +168,11 @@ PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFormat(
const char *format,
...);
-#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, message)
+extern PyObject *_PyErr_SetImportErrorWithNameFrom(
+ PyObject *,
+ PyObject *,
+ PyObject *,
+ PyObject *);
+
+
+#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
diff --git a/contrib/tools/python3/src/Include/cpython/pyframe.h b/contrib/tools/python3/src/Include/cpython/pyframe.h
index 1dc634ccee..0e2afff925 100644
--- a/contrib/tools/python3/src/Include/cpython/pyframe.h
+++ b/contrib/tools/python3/src/Include/cpython/pyframe.h
@@ -14,4 +14,22 @@ PyAPI_FUNC(PyObject *) PyFrame_GetBuiltins(PyFrameObject *frame);
PyAPI_FUNC(PyObject *) PyFrame_GetGenerator(PyFrameObject *frame);
PyAPI_FUNC(int) PyFrame_GetLasti(PyFrameObject *frame);
+PyAPI_FUNC(PyObject*) PyFrame_GetVar(PyFrameObject *frame, PyObject *name);
+PyAPI_FUNC(PyObject*) PyFrame_GetVarString(PyFrameObject *frame, const char *name);
+/* The following functions are for use by debuggers and other tools
+ * implementing custom frame evaluators with PEP 523. */
+
+struct _PyInterpreterFrame;
+
+/* Returns the code object of the frame (strong reference).
+ * Does not raise an exception. */
+PyAPI_FUNC(PyObject *) PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame);
+
+/* Returns a byte ofsset into the last executed instruction.
+ * Does not raise an exception. */
+PyAPI_FUNC(int) PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame);
+
+/* Returns the currently executing line number, or -1 if there is no line number.
+ * Does not raise an exception. */
+PyAPI_FUNC(int) PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame);
diff --git a/contrib/tools/python3/src/Include/cpython/pylifecycle.h b/contrib/tools/python3/src/Include/cpython/pylifecycle.h
index bb5b07ef59..4daea33bf8 100644
--- a/contrib/tools/python3/src/Include/cpython/pylifecycle.h
+++ b/contrib/tools/python3/src/Include/cpython/pylifecycle.h
@@ -52,6 +52,7 @@ PyAPI_FUNC(const char *) _Py_gitidentifier(void);
PyAPI_FUNC(const char *) _Py_gitversion(void);
PyAPI_FUNC(int) _Py_IsFinalizing(void);
+PyAPI_FUNC(int) _Py_IsInterpreterFinalizing(PyInterpreterState *interp);
/* Random */
PyAPI_FUNC(int) _PyOS_URandom(void *buffer, Py_ssize_t size);
@@ -62,4 +63,49 @@ PyAPI_FUNC(int) _Py_CoerceLegacyLocale(int warn);
PyAPI_FUNC(int) _Py_LegacyLocaleDetected(int warn);
PyAPI_FUNC(char *) _Py_SetLocaleFromEnv(int category);
-PyAPI_FUNC(PyThreadState *) _Py_NewInterpreter(int isolated_subinterpreter);
+/* --- PyInterpreterConfig ------------------------------------ */
+
+#define PyInterpreterConfig_DEFAULT_GIL (0)
+#define PyInterpreterConfig_SHARED_GIL (1)
+#define PyInterpreterConfig_OWN_GIL (2)
+
+typedef struct {
+ // XXX "allow_object_sharing"? "own_objects"?
+ int use_main_obmalloc;
+ int allow_fork;
+ int allow_exec;
+ int allow_threads;
+ int allow_daemon_threads;
+ int check_multi_interp_extensions;
+ int gil;
+} PyInterpreterConfig;
+
+#define _PyInterpreterConfig_INIT \
+ { \
+ .use_main_obmalloc = 0, \
+ .allow_fork = 0, \
+ .allow_exec = 0, \
+ .allow_threads = 1, \
+ .allow_daemon_threads = 0, \
+ .check_multi_interp_extensions = 1, \
+ .gil = PyInterpreterConfig_OWN_GIL, \
+ }
+
+#define _PyInterpreterConfig_LEGACY_INIT \
+ { \
+ .use_main_obmalloc = 1, \
+ .allow_fork = 1, \
+ .allow_exec = 1, \
+ .allow_threads = 1, \
+ .allow_daemon_threads = 1, \
+ .check_multi_interp_extensions = 0, \
+ .gil = PyInterpreterConfig_SHARED_GIL, \
+ }
+
+PyAPI_FUNC(PyStatus) Py_NewInterpreterFromConfig(
+ PyThreadState **tstate_p,
+ const PyInterpreterConfig *config);
+
+typedef void (*atexit_datacallbackfunc)(void *);
+PyAPI_FUNC(int) _Py_AtExit(
+ PyInterpreterState *, atexit_datacallbackfunc, void *);
diff --git a/contrib/tools/python3/src/Include/cpython/pystate.h b/contrib/tools/python3/src/Include/cpython/pystate.h
index 2bd46067cb..628f2e0996 100644
--- a/contrib/tools/python3/src/Include/cpython/pystate.h
+++ b/contrib/tools/python3/src/Include/cpython/pystate.h
@@ -3,11 +3,46 @@
#endif
+/*
+Runtime Feature Flags
+
+Each flag indicate whether or not a specific runtime feature
+is available in a given context. For example, forking the process
+might not be allowed in the current interpreter (i.e. os.fork() would fail).
+*/
+
+/* Set if the interpreter share obmalloc runtime state
+ with the main interpreter. */
+#define Py_RTFLAGS_USE_MAIN_OBMALLOC (1UL << 5)
+
+/* Set if import should check a module for subinterpreter support. */
+#define Py_RTFLAGS_MULTI_INTERP_EXTENSIONS (1UL << 8)
+
+/* Set if threads are allowed. */
+#define Py_RTFLAGS_THREADS (1UL << 10)
+
+/* Set if daemon threads are allowed. */
+#define Py_RTFLAGS_DAEMON_THREADS (1UL << 11)
+
+/* Set if os.fork() is allowed. */
+#define Py_RTFLAGS_FORK (1UL << 15)
+
+/* Set if os.exec*() is allowed. */
+#define Py_RTFLAGS_EXEC (1UL << 16)
+
+
+PyAPI_FUNC(int) _PyInterpreterState_HasFeature(PyInterpreterState *interp,
+ unsigned long feature);
+
+
+/* private interpreter helpers */
+
PyAPI_FUNC(int) _PyInterpreterState_RequiresIDRef(PyInterpreterState *);
PyAPI_FUNC(void) _PyInterpreterState_RequireIDRef(PyInterpreterState *, int);
PyAPI_FUNC(PyObject *) _PyInterpreterState_GetMainModule(PyInterpreterState *);
+
/* State unique per thread */
/* Py_tracefunc return -1 when raising an exception, or 0 for success. */
@@ -27,12 +62,6 @@ typedef int (*Py_tracefunc)(PyObject *, PyFrameObject *, int, PyObject *);
#define PyTrace_C_RETURN 6
#define PyTrace_OPCODE 7
-
-typedef struct {
- PyCodeObject *code; // The code object for the bounds. May be NULL.
- PyCodeAddressRange bounds; // Only valid if code != NULL.
-} PyTraceInfo;
-
// Internal structure: you should not use it directly, but use public functions
// like PyThreadState_EnterTracing() and PyThreadState_LeaveTracing().
typedef struct _PyCFrame {
@@ -46,7 +75,6 @@ typedef struct _PyCFrame {
* discipline and make sure that instances of this struct cannot
* accessed outside of their lifetime.
*/
- uint8_t use_tracing; // 0 or 255 (or'ed into opcode, hence 8-bit type)
/* Pointer to the currently executing frame (it can be NULL) */
struct _PyInterpreterFrame *current_frame;
struct _PyCFrame *previous;
@@ -79,6 +107,11 @@ typedef struct _stack_chunk {
PyObject * data[1]; /* Variable sized */
} _PyStackChunk;
+struct _py_trashcan {
+ int delete_nesting;
+ PyObject *delete_later;
+};
+
struct _ts {
/* See Python/ceval.c for comments explaining most fields */
@@ -86,24 +119,42 @@ struct _ts {
PyThreadState *next;
PyInterpreterState *interp;
- /* Has been initialized to a safe state.
+ struct {
+ /* Has been initialized to a safe state.
+
+ In order to be effective, this must be set to 0 during or right
+ after allocation. */
+ unsigned int initialized:1;
+
+ /* Has been bound to an OS thread. */
+ unsigned int bound:1;
+ /* Has been unbound from its OS thread. */
+ unsigned int unbound:1;
+ /* Has been bound aa current for the GILState API. */
+ unsigned int bound_gilstate:1;
+ /* Currently in use (maybe holds the GIL). */
+ unsigned int active:1;
- In order to be effective, this must be set to 0 during or right
- after allocation. */
- int _initialized;
+ /* various stages of finalization */
+ unsigned int finalizing:1;
+ unsigned int cleared:1;
+ unsigned int finalized:1;
- /* Was this thread state statically allocated? */
- int _static;
+ /* padding to align to 4 bytes */
+ unsigned int :24;
+ } _status;
- int recursion_remaining;
- int recursion_limit;
+ int py_recursion_remaining;
+ int py_recursion_limit;
+
+ int c_recursion_remaining;
int recursion_headroom; /* Allow 50 more calls to handle any errors. */
/* 'tracing' keeps track of the execution depth when tracing/profiling.
This is to prevent the actual trace/profile code from being recorded in
the trace/profile. */
int tracing;
- int tracing_what; /* The event currently being traced, if any. */
+ int what_event; /* The event currently being monitored, if any. */
/* Pointer to current _PyCFrame in the C stack frame of the currently,
* or most recently, executing _PyEval_EvalFrameDefault. */
@@ -115,9 +166,7 @@ struct _ts {
PyObject *c_traceobj;
/* The exception currently being raised */
- PyObject *curexc_type;
- PyObject *curexc_value;
- PyObject *curexc_traceback;
+ PyObject *current_exception;
/* Pointer to the top of the exception stack for the exceptions
* we may be currently handling. (See _PyErr_StackItem above.)
@@ -137,8 +186,7 @@ struct _ts {
*/
unsigned long native_thread_id;
- int trash_delete_nesting;
- PyObject *trash_delete_later;
+ struct _py_trashcan trash;
/* Called when a thread state is deleted normally, but not when it
* is destroyed after fork().
@@ -177,8 +225,6 @@ struct _ts {
/* Unique thread state id. */
uint64_t id;
- PyTraceInfo trace_info;
-
_PyStackChunk *datastack_chunk;
PyObject **datastack_top;
PyObject **datastack_limit;
@@ -202,12 +248,25 @@ struct _ts {
_PyCFrame root_cframe;
};
+/* WASI has limited call stack. Python's recursion limit depends on code
+ layout, optimization, and WASI runtime. Wasmtime can handle about 700
+ recursions, sometimes less. 500 is a more conservative limit. */
+#ifndef C_RECURSION_LIMIT
+# ifdef __wasi__
+# define C_RECURSION_LIMIT 500
+# else
+ // This value is duplicated in Lib/test/support/__init__.py
+# define C_RECURSION_LIMIT 1500
+# endif
+#endif
/* other API */
// Alias for backward compatibility with Python 3.8
#define _PyInterpreterState_Get PyInterpreterState_Get
+/* An alias for the internal _PyThreadState_New(),
+ kept for stable ABI compatibility. */
PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *);
/* Similar to PyThreadState_Get(), but don't issue a fatal error
@@ -279,7 +338,10 @@ PyAPI_FUNC(const PyConfig*) _PyInterpreterState_GetConfig(PyInterpreterState *in
for example.
Python must be preinitialized to call this method.
- The caller must hold the GIL. */
+ The caller must hold the GIL.
+
+ Once done with the configuration, PyConfig_Clear() must be called to clear
+ it. */
PyAPI_FUNC(int) _PyInterpreterState_GetConfigCopy(
struct PyConfig *config);
@@ -313,6 +375,9 @@ PyAPI_FUNC(const PyConfig*) _Py_GetConfig(void);
// is necessary to pass safely between interpreters in the same process.
typedef struct _xid _PyCrossInterpreterData;
+typedef PyObject *(*xid_newobjectfunc)(_PyCrossInterpreterData *);
+typedef void (*xid_freefunc)(void *);
+
struct _xid {
// data is the cross-interpreter-safe derivation of a Python object
// (see _PyObject_GetCrossInterpreterData). It will be NULL if the
@@ -339,7 +404,7 @@ struct _xid {
// interpreter given the data. The resulting object (a new
// reference) will be equivalent to the original object. This field
// is required.
- PyObject *(*new_object)(_PyCrossInterpreterData *);
+ xid_newobjectfunc new_object;
// free is called when the data is released. If it is NULL then
// nothing will be done to free the data. For some types this is
// okay (e.g. bytes) and for those types this field should be set
@@ -349,18 +414,31 @@ struct _xid {
// leak. In that case, at the very least this field should be set
// to PyMem_RawFree (the default if not explicitly set to NULL).
// The call will happen with the original interpreter activated.
- void (*free)(void *);
+ xid_freefunc free;
};
+PyAPI_FUNC(void) _PyCrossInterpreterData_Init(
+ _PyCrossInterpreterData *data,
+ PyInterpreterState *interp, void *shared, PyObject *obj,
+ xid_newobjectfunc new_object);
+PyAPI_FUNC(int) _PyCrossInterpreterData_InitWithSize(
+ _PyCrossInterpreterData *,
+ PyInterpreterState *interp, const size_t, PyObject *,
+ xid_newobjectfunc);
+PyAPI_FUNC(void) _PyCrossInterpreterData_Clear(
+ PyInterpreterState *, _PyCrossInterpreterData *);
+
PyAPI_FUNC(int) _PyObject_GetCrossInterpreterData(PyObject *, _PyCrossInterpreterData *);
PyAPI_FUNC(PyObject *) _PyCrossInterpreterData_NewObject(_PyCrossInterpreterData *);
-PyAPI_FUNC(void) _PyCrossInterpreterData_Release(_PyCrossInterpreterData *);
+PyAPI_FUNC(int) _PyCrossInterpreterData_Release(_PyCrossInterpreterData *);
PyAPI_FUNC(int) _PyObject_CheckCrossInterpreterData(PyObject *);
/* cross-interpreter data registry */
-typedef int (*crossinterpdatafunc)(PyObject *, _PyCrossInterpreterData *);
+typedef int (*crossinterpdatafunc)(PyThreadState *tstate, PyObject *,
+ _PyCrossInterpreterData *);
PyAPI_FUNC(int) _PyCrossInterpreterData_RegisterClass(PyTypeObject *, crossinterpdatafunc);
+PyAPI_FUNC(int) _PyCrossInterpreterData_UnregisterClass(PyTypeObject *);
PyAPI_FUNC(crossinterpdatafunc) _PyCrossInterpreterData_Lookup(PyObject *);
diff --git a/contrib/tools/python3/src/Include/cpython/pythonrun.h b/contrib/tools/python3/src/Include/cpython/pythonrun.h
index 2e72d0820d..fb61765537 100644
--- a/contrib/tools/python3/src/Include/cpython/pythonrun.h
+++ b/contrib/tools/python3/src/Include/cpython/pythonrun.h
@@ -66,8 +66,8 @@ PyAPI_FUNC(PyObject *) Py_CompileStringObject(
PyCompilerFlags *flags,
int optimize);
-#define Py_CompileString(str, p, s) Py_CompileStringExFlags(str, p, s, NULL, -1)
-#define Py_CompileStringFlags(str, p, s, f) Py_CompileStringExFlags(str, p, s, f, -1)
+#define Py_CompileString(str, p, s) Py_CompileStringExFlags((str), (p), (s), NULL, -1)
+#define Py_CompileStringFlags(str, p, s, f) Py_CompileStringExFlags((str), (p), (s), (f), -1)
PyAPI_FUNC(const char *) _Py_SourceAsString(
@@ -96,23 +96,23 @@ PyAPI_FUNC(PyObject *) PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g,
PyAPI_FUNC(PyObject *) PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, PyCompilerFlags *flags);
/* Use macros for a bunch of old variants */
-#define PyRun_String(str, s, g, l) PyRun_StringFlags(str, s, g, l, NULL)
-#define PyRun_AnyFile(fp, name) PyRun_AnyFileExFlags(fp, name, 0, NULL)
+#define PyRun_String(str, s, g, l) PyRun_StringFlags((str), (s), (g), (l), NULL)
+#define PyRun_AnyFile(fp, name) PyRun_AnyFileExFlags((fp), (name), 0, NULL)
#define PyRun_AnyFileEx(fp, name, closeit) \
- PyRun_AnyFileExFlags(fp, name, closeit, NULL)
+ PyRun_AnyFileExFlags((fp), (name), (closeit), NULL)
#define PyRun_AnyFileFlags(fp, name, flags) \
- PyRun_AnyFileExFlags(fp, name, 0, flags)
-#define PyRun_SimpleString(s) PyRun_SimpleStringFlags(s, NULL)
-#define PyRun_SimpleFile(f, p) PyRun_SimpleFileExFlags(f, p, 0, NULL)
-#define PyRun_SimpleFileEx(f, p, c) PyRun_SimpleFileExFlags(f, p, c, NULL)
-#define PyRun_InteractiveOne(f, p) PyRun_InteractiveOneFlags(f, p, NULL)
-#define PyRun_InteractiveLoop(f, p) PyRun_InteractiveLoopFlags(f, p, NULL)
+ PyRun_AnyFileExFlags((fp), (name), 0, (flags))
+#define PyRun_SimpleString(s) PyRun_SimpleStringFlags((s), NULL)
+#define PyRun_SimpleFile(f, p) PyRun_SimpleFileExFlags((f), (p), 0, NULL)
+#define PyRun_SimpleFileEx(f, p, c) PyRun_SimpleFileExFlags((f), (p), (c), NULL)
+#define PyRun_InteractiveOne(f, p) PyRun_InteractiveOneFlags((f), (p), NULL)
+#define PyRun_InteractiveLoop(f, p) PyRun_InteractiveLoopFlags((f), (p), NULL)
#define PyRun_File(fp, p, s, g, l) \
- PyRun_FileExFlags(fp, p, s, g, l, 0, NULL)
+ PyRun_FileExFlags((fp), (p), (s), (g), (l), 0, NULL)
#define PyRun_FileEx(fp, p, s, g, l, c) \
- PyRun_FileExFlags(fp, p, s, g, l, c, NULL)
+ PyRun_FileExFlags((fp), (p), (s), (g), (l), (c), NULL)
#define PyRun_FileFlags(fp, p, s, g, l, flags) \
- PyRun_FileExFlags(fp, p, s, g, l, 0, flags)
+ PyRun_FileExFlags((fp), (p), (s), (g), (l), 0, (flags))
/* Stuff with no proper home (yet) */
diff --git a/contrib/tools/python3/src/Include/cpython/pytime.h b/contrib/tools/python3/src/Include/cpython/pytime.h
index 386e18a1a9..6891bd5c03 100644
--- a/contrib/tools/python3/src/Include/cpython/pytime.h
+++ b/contrib/tools/python3/src/Include/cpython/pytime.h
@@ -55,6 +55,10 @@ functions and constants
extern "C" {
#endif
+#ifdef __clang__
+struct timeval;
+#endif
+
/* _PyTime_t: Python timestamp with subsecond precision. It can be used to
store a duration, and so indirectly a date (related to another date, like
UNIX epoch). */
@@ -132,6 +136,10 @@ PyAPI_FUNC(_PyTime_t) _PyTime_FromSeconds(int seconds);
/* Create a timestamp from a number of nanoseconds. */
PyAPI_FUNC(_PyTime_t) _PyTime_FromNanoseconds(_PyTime_t ns);
+/* Create a timestamp from a number of microseconds.
+ * Clamp to [_PyTime_MIN; _PyTime_MAX] on overflow. */
+PyAPI_FUNC(_PyTime_t) _PyTime_FromMicrosecondsClamp(_PyTime_t us);
+
/* Create a timestamp from nanoseconds (Python int). */
PyAPI_FUNC(int) _PyTime_FromNanosecondsObject(_PyTime_t *t,
PyObject *obj);
diff --git a/contrib/tools/python3/src/Include/cpython/setobject.h b/contrib/tools/python3/src/Include/cpython/setobject.h
index b4443a678b..20fd63eaae 100644
--- a/contrib/tools/python3/src/Include/cpython/setobject.h
+++ b/contrib/tools/python3/src/Include/cpython/setobject.h
@@ -58,8 +58,13 @@ typedef struct {
PyObject *weakreflist; /* List of weak references */
} PySetObject;
-#define PySet_GET_SIZE(so) \
- (assert(PyAnySet_Check(so)), (((PySetObject *)(so))->used))
+#define _PySet_CAST(so) \
+ (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
+
+static inline Py_ssize_t PySet_GET_SIZE(PyObject *so) {
+ return _PySet_CAST(so)->used;
+}
+#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
PyAPI_DATA(PyObject *) _PySet_Dummy;
diff --git a/contrib/tools/python3/src/Include/cpython/tupleobject.h b/contrib/tools/python3/src/Include/cpython/tupleobject.h
index 3d9c1aff58..f6a1f076e0 100644
--- a/contrib/tools/python3/src/Include/cpython/tupleobject.h
+++ b/contrib/tools/python3/src/Include/cpython/tupleobject.h
@@ -23,11 +23,9 @@ static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
PyTupleObject *tuple = _PyTuple_CAST(op);
return Py_SIZE(tuple);
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
-#endif
+#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
-#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[index])
+#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
/* Function *only* to be used to fill in brand new tuples */
static inline void
@@ -35,9 +33,7 @@ PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
PyTupleObject *tuple = _PyTuple_CAST(op);
tuple->ob_item[index] = value;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define PyTuple_SET_ITEM(op, index, value) \
- PyTuple_SET_ITEM(_PyObject_CAST(op), index, _PyObject_CAST(value))
-#endif
+ PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
PyAPI_FUNC(void) _PyTuple_DebugMallocStats(FILE *out);
diff --git a/contrib/tools/python3/src/Include/cpython/unicodeobject.h b/contrib/tools/python3/src/Include/cpython/unicodeobject.h
index 84307d1885..f177cd9e2a 100644
--- a/contrib/tools/python3/src/Include/cpython/unicodeobject.h
+++ b/contrib/tools/python3/src/Include/cpython/unicodeobject.h
@@ -11,63 +11,43 @@
/* --- Internal Unicode Operations ---------------------------------------- */
-#ifndef USE_UNICODE_WCHAR_CACHE
-# define USE_UNICODE_WCHAR_CACHE 1
-#endif /* USE_UNICODE_WCHAR_CACHE */
-
-/* Since splitting on whitespace is an important use case, and
- whitespace in most situations is solely ASCII whitespace, we
- optimize for the common case by using a quick look-up table
- _Py_ascii_whitespace (see below) with an inlined check.
-
- */
-#define Py_UNICODE_ISSPACE(ch) \
- ((Py_UCS4)(ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch))
-
-#define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch)
-#define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch)
-#define Py_UNICODE_ISTITLE(ch) _PyUnicode_IsTitlecase(ch)
-#define Py_UNICODE_ISLINEBREAK(ch) _PyUnicode_IsLinebreak(ch)
-
-#define Py_UNICODE_TOLOWER(ch) _PyUnicode_ToLowercase(ch)
-#define Py_UNICODE_TOUPPER(ch) _PyUnicode_ToUppercase(ch)
-#define Py_UNICODE_TOTITLE(ch) _PyUnicode_ToTitlecase(ch)
-
-#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch)
-#define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch)
-#define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch)
-#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
+// Static inline functions to work with surrogates
+static inline int Py_UNICODE_IS_SURROGATE(Py_UCS4 ch) {
+ return (0xD800 <= ch && ch <= 0xDFFF);
+}
+static inline int Py_UNICODE_IS_HIGH_SURROGATE(Py_UCS4 ch) {
+ return (0xD800 <= ch && ch <= 0xDBFF);
+}
+static inline int Py_UNICODE_IS_LOW_SURROGATE(Py_UCS4 ch) {
+ return (0xDC00 <= ch && ch <= 0xDFFF);
+}
-#define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch)
-#define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch)
-#define Py_UNICODE_TONUMERIC(ch) _PyUnicode_ToNumeric(ch)
+// Join two surrogate characters and return a single Py_UCS4 value.
+static inline Py_UCS4 Py_UNICODE_JOIN_SURROGATES(Py_UCS4 high, Py_UCS4 low) {
+ assert(Py_UNICODE_IS_HIGH_SURROGATE(high));
+ assert(Py_UNICODE_IS_LOW_SURROGATE(low));
+ return 0x10000 + (((high & 0x03FF) << 10) | (low & 0x03FF));
+}
-#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
+// High surrogate = top 10 bits added to 0xD800.
+// The character must be in the range [U+10000; U+10ffff].
+static inline Py_UCS4 Py_UNICODE_HIGH_SURROGATE(Py_UCS4 ch) {
+ assert(0x10000 <= ch && ch <= 0x10ffff);
+ return (0xD800 - (0x10000 >> 10) + (ch >> 10));
+}
-#define Py_UNICODE_ISALNUM(ch) \
- (Py_UNICODE_ISALPHA(ch) || \
- Py_UNICODE_ISDECIMAL(ch) || \
- Py_UNICODE_ISDIGIT(ch) || \
- Py_UNICODE_ISNUMERIC(ch))
-
-/* macros to work with surrogates */
-#define Py_UNICODE_IS_SURROGATE(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
-#define Py_UNICODE_IS_HIGH_SURROGATE(ch) (0xD800 <= (ch) && (ch) <= 0xDBFF)
-#define Py_UNICODE_IS_LOW_SURROGATE(ch) (0xDC00 <= (ch) && (ch) <= 0xDFFF)
-/* Join two surrogate characters and return a single Py_UCS4 value. */
-#define Py_UNICODE_JOIN_SURROGATES(high, low) \
- (((((Py_UCS4)(high) & 0x03FF) << 10) | \
- ((Py_UCS4)(low) & 0x03FF)) + 0x10000)
-/* high surrogate = top 10 bits added to D800 */
-#define Py_UNICODE_HIGH_SURROGATE(ch) (0xD800 - (0x10000 >> 10) + ((ch) >> 10))
-/* low surrogate = bottom 10 bits added to DC00 */
-#define Py_UNICODE_LOW_SURROGATE(ch) (0xDC00 + ((ch) & 0x3FF))
+// Low surrogate = bottom 10 bits added to 0xDC00.
+// The character must be in the range [U+10000; U+10ffff].
+static inline Py_UCS4 Py_UNICODE_LOW_SURROGATE(Py_UCS4 ch) {
+ assert(0x10000 <= ch && ch <= 0x10ffff);
+ return (0xDC00 + (ch & 0x3FF));
+}
/* --- Unicode Type ------------------------------------------------------- */
/* ASCII-only strings created through PyUnicode_New use the PyASCIIObject
structure. state.ascii and state.compact are set, and the data
- immediately follow the structure. utf8_length and wstr_length can be found
+ immediately follow the structure. utf8_length can be found
in the length field; the utf8 pointer is equal to the data pointer. */
typedef struct {
/* There are 4 forms of Unicode strings:
@@ -79,8 +59,7 @@ typedef struct {
* kind = PyUnicode_1BYTE_KIND
* compact = 1
* ascii = 1
- * ready = 1
- * (length is the length of the utf8 and wstr strings)
+ * (length is the length of the utf8)
* (data starts just after the structure)
* (since ASCII is decoded from UTF-8, the utf8 string are the data)
@@ -91,55 +70,27 @@ typedef struct {
* kind = PyUnicode_1BYTE_KIND, PyUnicode_2BYTE_KIND or
PyUnicode_4BYTE_KIND
* compact = 1
- * ready = 1
* ascii = 0
* utf8 is not shared with data
* utf8_length = 0 if utf8 is NULL
- * wstr is shared with data and wstr_length=length
- if kind=PyUnicode_2BYTE_KIND and sizeof(wchar_t)=2
- or if kind=PyUnicode_4BYTE_KIND and sizeof(wchar_t)=4
- * wstr_length = 0 if wstr is NULL
* (data starts just after the structure)
- - legacy string, not ready:
-
- * structure = PyUnicodeObject
- * test: kind == PyUnicode_WCHAR_KIND
- * length = 0 (use wstr_length)
- * hash = -1
- * kind = PyUnicode_WCHAR_KIND
- * compact = 0
- * ascii = 0
- * ready = 0
- * interned = SSTATE_NOT_INTERNED
- * wstr is not NULL
- * data.any is NULL
- * utf8 is NULL
- * utf8_length = 0
-
- - legacy string, ready:
+ - legacy string:
* structure = PyUnicodeObject structure
- * test: !PyUnicode_IS_COMPACT(op) && kind != PyUnicode_WCHAR_KIND
+ * test: !PyUnicode_IS_COMPACT(op)
* kind = PyUnicode_1BYTE_KIND, PyUnicode_2BYTE_KIND or
PyUnicode_4BYTE_KIND
* compact = 0
- * ready = 1
* data.any is not NULL
* utf8 is shared and utf8_length = length with data.any if ascii = 1
* utf8_length = 0 if utf8 is NULL
- * wstr is shared with data.any and wstr_length = length
- if kind=PyUnicode_2BYTE_KIND and sizeof(wchar_t)=2
- or if kind=PyUnicode_4BYTE_KIND and sizeof(wchar_4)=4
- * wstr_length = 0 if wstr is NULL
Compact strings use only one memory block (structure + characters),
whereas legacy strings use one block for the structure and one block
for characters.
- Legacy strings are created by PyUnicode_FromUnicode() and
- PyUnicode_FromStringAndSize(NULL, size) functions. They become ready
- when PyUnicode_READY() is called.
+ Legacy strings are created by subclasses of Unicode.
See also _PyUnicode_CheckConsistency().
*/
@@ -147,22 +98,18 @@ typedef struct {
Py_ssize_t length; /* Number of code points in the string */
Py_hash_t hash; /* Hash value; -1 if not set */
struct {
- /*
- SSTATE_NOT_INTERNED (0)
- SSTATE_INTERNED_MORTAL (1)
- SSTATE_INTERNED_IMMORTAL (2)
-
- If interned != SSTATE_NOT_INTERNED, the two references from the
+ /* If interned is non-zero, the two references from the
dictionary to this object are *not* counted in ob_refcnt.
- */
+ The possible values here are:
+ 0: Not Interned
+ 1: Interned
+ 2: Interned and Immortal
+ 3: Interned, Immortal, and Static
+ This categorization allows the runtime to determine the right
+ cleanup mechanism at runtime shutdown. */
unsigned int interned:2;
/* Character size:
- - PyUnicode_WCHAR_KIND (0):
-
- * character type = wchar_t (16 or 32 bits, depending on the
- platform)
-
- PyUnicode_1BYTE_KIND (1):
* character type = Py_UCS1 (8 bits, unsigned)
@@ -193,16 +140,12 @@ typedef struct {
and the kind is PyUnicode_1BYTE_KIND. If ascii is set and compact is
set, use the PyASCIIObject structure. */
unsigned int ascii:1;
- /* The ready flag indicates whether the object layout is initialized
- completely. This means that this is either a compact object, or
- the data pointer is filled out. The bit is redundant, and helps
- to minimize the test in PyUnicode_IS_READY(). */
- unsigned int ready:1;
+ /* The object is statically allocated. */
+ unsigned int statically_allocated:1;
/* Padding to ensure that PyUnicode_DATA() is always aligned to
4 bytes (see issue #19537 on m68k). */
unsigned int :24;
} state;
- wchar_t *wstr; /* wchar_t representation (null-terminated) */
} PyASCIIObject;
/* Non-ASCII strings allocated through PyUnicode_New use the
@@ -213,13 +156,9 @@ typedef struct {
Py_ssize_t utf8_length; /* Number of bytes in utf8, excluding the
* terminating \0. */
char *utf8; /* UTF-8 representation (null-terminated) */
- Py_ssize_t wstr_length; /* Number of code points in wstr, possible
- * surrogates count as two code points. */
} PyCompactUnicodeObject;
-/* Strings allocated through PyUnicode_FromUnicode(NULL, len) use the
- PyUnicodeObject structure. The actual string data is initially in the wstr
- block, and copied into the data block using _PyUnicode_Ready. */
+/* Object format for Unicode subclasses. */
typedef struct {
PyCompactUnicodeObject _base;
union {
@@ -254,68 +193,56 @@ PyAPI_FUNC(int) _PyUnicode_CheckConsistency(
#define SSTATE_NOT_INTERNED 0
#define SSTATE_INTERNED_MORTAL 1
#define SSTATE_INTERNED_IMMORTAL 2
+#define SSTATE_INTERNED_IMMORTAL_STATIC 3
/* Use only if you know it's a string */
static inline unsigned int PyUnicode_CHECK_INTERNED(PyObject *op) {
return _PyASCIIObject_CAST(op)->state.interned;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_CHECK_INTERNED(op) PyUnicode_CHECK_INTERNED(_PyObject_CAST(op))
-#endif
+#define PyUnicode_CHECK_INTERNED(op) PyUnicode_CHECK_INTERNED(_PyObject_CAST(op))
-/* Fast check to determine whether an object is ready. Equivalent to:
- PyUnicode_IS_COMPACT(op) || _PyUnicodeObject_CAST(op)->data.any */
-static inline unsigned int PyUnicode_IS_READY(PyObject *op) {
- return _PyASCIIObject_CAST(op)->state.ready;
+/* For backward compatibility */
+static inline unsigned int PyUnicode_IS_READY(PyObject* Py_UNUSED(op)) {
+ return 1;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_IS_READY(op) PyUnicode_IS_READY(_PyObject_CAST(op))
-#endif
+#define PyUnicode_IS_READY(op) PyUnicode_IS_READY(_PyObject_CAST(op))
/* Return true if the string contains only ASCII characters, or 0 if not. The
string may be compact (PyUnicode_IS_COMPACT_ASCII) or not, but must be
ready. */
static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
- assert(PyUnicode_IS_READY(op));
return _PyASCIIObject_CAST(op)->state.ascii;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
-#endif
+#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
/* Return true if the string is compact or 0 if not.
No type checks or Ready calls are performed. */
static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
return _PyASCIIObject_CAST(op)->state.compact;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
-#endif
+#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
/* Return true if the string is a compact ASCII string (use PyASCIIObject
structure), or 0 if not. No type checks or Ready calls are performed. */
static inline int PyUnicode_IS_COMPACT_ASCII(PyObject *op) {
return (_PyASCIIObject_CAST(op)->state.ascii && PyUnicode_IS_COMPACT(op));
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_IS_COMPACT_ASCII(op) PyUnicode_IS_COMPACT_ASCII(_PyObject_CAST(op))
-#endif
+#define PyUnicode_IS_COMPACT_ASCII(op) PyUnicode_IS_COMPACT_ASCII(_PyObject_CAST(op))
enum PyUnicode_Kind {
-/* String contains only wstr byte characters. This is only possible
- when the string was created with a legacy API and _PyUnicode_Ready()
- has not been called yet. */
- PyUnicode_WCHAR_KIND = 0,
/* Return values of the PyUnicode_KIND() function: */
PyUnicode_1BYTE_KIND = 1,
PyUnicode_2BYTE_KIND = 2,
PyUnicode_4BYTE_KIND = 4
};
-/* Return one of the PyUnicode_*_KIND values defined above. */
-#define PyUnicode_KIND(op) \
- (assert(PyUnicode_IS_READY(op)), \
- _PyASCIIObject_CAST(op)->state.kind)
+// PyUnicode_KIND(): Return one of the PyUnicode_*_KIND values defined above.
+//
+// gh-89653: Converting this macro to a static inline function would introduce
+// new compiler warnings on "kind < PyUnicode_KIND(str)" (compare signed and
+// unsigned numbers) where kind type is an int or on
+// "unsigned int kind = PyUnicode_KIND(str)" (cast signed to unsigned).
+#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
/* Return a void pointer to the raw unicode buffer. */
static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
@@ -339,9 +266,7 @@ static inline void* PyUnicode_DATA(PyObject *op) {
}
return _PyUnicode_NONCOMPACT_DATA(op);
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_DATA(op) PyUnicode_DATA(_PyObject_CAST(op))
-#endif
+#define PyUnicode_DATA(op) PyUnicode_DATA(_PyObject_CAST(op))
/* Return pointers to the canonical representation cast to unsigned char,
Py_UCS2, or Py_UCS4 for direct character access.
@@ -352,16 +277,11 @@ static inline void* PyUnicode_DATA(PyObject *op) {
#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
-/* Returns the length of the unicode string. The caller has to make sure that
- the string has it's canonical representation set before calling
- this function. Call PyUnicode_(FAST_)Ready to ensure that. */
+/* Returns the length of the unicode string. */
static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
- assert(PyUnicode_IS_READY(op));
return _PyASCIIObject_CAST(op)->length;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
-#endif
+#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
/* Write into the canonical representation, this function does not do any sanity
checks and is intended for usage in loops. The caller should cache the
@@ -371,6 +291,7 @@ static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
static inline void PyUnicode_WRITE(int kind, void *data,
Py_ssize_t index, Py_UCS4 value)
{
+ assert(index >= 0);
if (kind == PyUnicode_1BYTE_KIND) {
assert(value <= 0xffU);
_Py_STATIC_CAST(Py_UCS1*, data)[index] = _Py_STATIC_CAST(Py_UCS1, value);
@@ -385,17 +306,16 @@ static inline void PyUnicode_WRITE(int kind, void *data,
_Py_STATIC_CAST(Py_UCS4*, data)[index] = value;
}
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define PyUnicode_WRITE(kind, data, index, value) \
PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
(index), _Py_STATIC_CAST(Py_UCS4, value))
-#endif
/* Read a code point from the string's canonical representation. No checks
or ready calls are performed. */
static inline Py_UCS4 PyUnicode_READ(int kind,
const void *data, Py_ssize_t index)
{
+ assert(index >= 0);
if (kind == PyUnicode_1BYTE_KIND) {
return _Py_STATIC_CAST(const Py_UCS1*, data)[index];
}
@@ -405,12 +325,10 @@ static inline Py_UCS4 PyUnicode_READ(int kind,
assert(kind == PyUnicode_4BYTE_KIND);
return _Py_STATIC_CAST(const Py_UCS4*, data)[index];
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define PyUnicode_READ(kind, data, index) \
PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
_Py_STATIC_CAST(const void*, data), \
(index))
-#endif
/* PyUnicode_READ_CHAR() is less efficient than PyUnicode_READ() because it
calls PyUnicode_KIND() and might call it twice. For single reads, use
@@ -419,7 +337,11 @@ static inline Py_UCS4 PyUnicode_READ(int kind,
static inline Py_UCS4 PyUnicode_READ_CHAR(PyObject *unicode, Py_ssize_t index)
{
int kind;
- assert(PyUnicode_IS_READY(unicode));
+
+ assert(index >= 0);
+ // Tolerate reading the NUL character at str[len(str)]
+ assert(index <= PyUnicode_GET_LENGTH(unicode));
+
kind = PyUnicode_KIND(unicode);
if (kind == PyUnicode_1BYTE_KIND) {
return PyUnicode_1BYTE_DATA(unicode)[index];
@@ -430,10 +352,8 @@ static inline Py_UCS4 PyUnicode_READ_CHAR(PyObject *unicode, Py_ssize_t index)
assert(kind == PyUnicode_4BYTE_KIND);
return PyUnicode_4BYTE_DATA(unicode)[index];
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_READ_CHAR(unicode, index) \
- PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
-#endif
+#define PyUnicode_READ_CHAR(unicode, index) \
+ PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
/* Return a maximum character value which is suitable for creating another
string based on op. This is always an approximation but more efficient
@@ -442,7 +362,6 @@ static inline Py_UCS4 PyUnicode_MAX_CHAR_VALUE(PyObject *op)
{
int kind;
- assert(PyUnicode_IS_READY(op));
if (PyUnicode_IS_ASCII(op)) {
return 0x7fU;
}
@@ -457,10 +376,8 @@ static inline Py_UCS4 PyUnicode_MAX_CHAR_VALUE(PyObject *op)
assert(kind == PyUnicode_4BYTE_KIND);
return 0x10ffffU;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_MAX_CHAR_VALUE(op) \
- PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
-#endif
+#define PyUnicode_MAX_CHAR_VALUE(op) \
+ PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
/* === Public API ========================================================= */
@@ -474,31 +391,12 @@ PyAPI_FUNC(PyObject*) PyUnicode_New(
Py_UCS4 maxchar /* maximum code point value in the string */
);
-/* Initializes the canonical string representation from the deprecated
- wstr/Py_UNICODE representation. This function is used to convert Unicode
- objects which were created using the old API to the new flexible format
- introduced with PEP 393.
-
- Don't call this function directly, use the public PyUnicode_READY() function
- instead. */
-PyAPI_FUNC(int) _PyUnicode_Ready(
- PyObject *unicode /* Unicode object */
- );
-
-/* PyUnicode_READY() does less work than _PyUnicode_Ready() in the best
- case. If the canonical representation is not yet set, it will still call
- _PyUnicode_Ready().
- Returns 0 on success and -1 on errors. */
-static inline int PyUnicode_READY(PyObject *op)
+/* For backward compatibility */
+static inline int PyUnicode_READY(PyObject* Py_UNUSED(op))
{
- if (PyUnicode_IS_READY(op)) {
- return 0;
- }
- return _PyUnicode_Ready(op);
+ return 0;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_READY(op) PyUnicode_READY(_PyObject_CAST(op))
-#endif
+#define PyUnicode_READY(op) PyUnicode_READY(_PyObject_CAST(op))
/* Get a copy of a Unicode string. */
PyAPI_FUNC(PyObject*) _PyUnicode_Copy(
@@ -586,139 +484,12 @@ PyAPI_FUNC(Py_UCS4) _PyUnicode_FindMaxChar (
Py_ssize_t start,
Py_ssize_t end);
-/* --- Legacy deprecated API ---------------------------------------------- */
-
-/* Create a Unicode Object from the Py_UNICODE buffer u of the given
- size.
-
- u may be NULL which causes the contents to be undefined. It is the
- user's responsibility to fill in the needed data afterwards. Note
- that modifying the Unicode object contents after construction is
- only allowed if u was set to NULL.
-
- The buffer is copied into the new object. */
-Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode(
- const Py_UNICODE *u, /* Unicode buffer */
- Py_ssize_t size /* size of buffer */
- );
-
-/* Return a read-only pointer to the Unicode object's internal
- Py_UNICODE buffer.
- If the wchar_t/Py_UNICODE representation is not yet available, this
- function will calculate it. */
-Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(
- PyObject *unicode /* Unicode object */
- );
-
-/* Similar to PyUnicode_AsUnicode(), but raises a ValueError if the string
- contains null characters. */
-PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode(
- PyObject *unicode /* Unicode object */
- );
-
-/* Return a read-only pointer to the Unicode object's internal
- Py_UNICODE buffer and save the length at size.
- If the wchar_t/Py_UNICODE representation is not yet available, this
- function will calculate it. */
-
-Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize(
- PyObject *unicode, /* Unicode object */
- Py_ssize_t *size /* location where to save the length */
- );
-
-
-/* Fast access macros */
-
-Py_DEPRECATED(3.3)
-static inline Py_ssize_t PyUnicode_WSTR_LENGTH(PyObject *op)
-{
- if (PyUnicode_IS_COMPACT_ASCII(op)) {
- return _PyASCIIObject_CAST(op)->length;
- }
- else {
- return _PyCompactUnicodeObject_CAST(op)->wstr_length;
- }
-}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_WSTR_LENGTH(op) PyUnicode_WSTR_LENGTH(_PyObject_CAST(op))
-#endif
-
-/* Returns the deprecated Py_UNICODE representation's size in code units
- (this includes surrogate pairs as 2 units).
- If the Py_UNICODE representation is not available, it will be computed
- on request. Use PyUnicode_GET_LENGTH() for the length in code points. */
-
-Py_DEPRECATED(3.3)
-static inline Py_ssize_t PyUnicode_GET_SIZE(PyObject *op)
-{
- _Py_COMP_DIAG_PUSH
- _Py_COMP_DIAG_IGNORE_DEPR_DECLS
- if (_PyASCIIObject_CAST(op)->wstr == _Py_NULL) {
- (void)PyUnicode_AsUnicode(op);
- assert(_PyASCIIObject_CAST(op)->wstr != _Py_NULL);
- }
- return PyUnicode_WSTR_LENGTH(op);
- _Py_COMP_DIAG_POP
-}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_GET_SIZE(op) PyUnicode_GET_SIZE(_PyObject_CAST(op))
-#endif
-
-Py_DEPRECATED(3.3)
-static inline Py_ssize_t PyUnicode_GET_DATA_SIZE(PyObject *op)
-{
- _Py_COMP_DIAG_PUSH
- _Py_COMP_DIAG_IGNORE_DEPR_DECLS
- return PyUnicode_GET_SIZE(op) * Py_UNICODE_SIZE;
- _Py_COMP_DIAG_POP
-}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_GET_DATA_SIZE(op) PyUnicode_GET_DATA_SIZE(_PyObject_CAST(op))
-#endif
-
-/* Alias for PyUnicode_AsUnicode(). This will create a wchar_t/Py_UNICODE
- representation on demand. Using this macro is very inefficient now,
- try to port your code to use the new PyUnicode_*BYTE_DATA() macros or
- use PyUnicode_WRITE() and PyUnicode_READ(). */
-
-Py_DEPRECATED(3.3)
-static inline Py_UNICODE* PyUnicode_AS_UNICODE(PyObject *op)
-{
- wchar_t *wstr = _PyASCIIObject_CAST(op)->wstr;
- if (wstr != _Py_NULL) {
- return wstr;
- }
-
- _Py_COMP_DIAG_PUSH
- _Py_COMP_DIAG_IGNORE_DEPR_DECLS
- return PyUnicode_AsUnicode(op);
- _Py_COMP_DIAG_POP
-}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_AS_UNICODE(op) PyUnicode_AS_UNICODE(_PyObject_CAST(op))
-#endif
-
-Py_DEPRECATED(3.3)
-static inline const char* PyUnicode_AS_DATA(PyObject *op)
-{
- _Py_COMP_DIAG_PUSH
- _Py_COMP_DIAG_IGNORE_DEPR_DECLS
- Py_UNICODE *data = PyUnicode_AS_UNICODE(op);
- // In C++, casting directly PyUnicode* to const char* is not valid
- return _Py_STATIC_CAST(const char*, _Py_STATIC_CAST(const void*, data));
- _Py_COMP_DIAG_POP
-}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyUnicode_AS_DATA(op) PyUnicode_AS_DATA(_PyObject_CAST(op))
-#endif
-
-
/* --- _PyUnicodeWriter API ----------------------------------------------- */
typedef struct {
PyObject *buffer;
void *data;
- enum PyUnicode_Kind kind;
+ int kind;
Py_UCS4 maxchar;
Py_ssize_t size;
Py_ssize_t pos;
@@ -769,8 +540,7 @@ _PyUnicodeWriter_PrepareInternal(_PyUnicodeWriter *writer,
Return 0 on success, raise an exception and return -1 on error. */
#define _PyUnicodeWriter_PrepareKind(WRITER, KIND) \
- (assert((KIND) != PyUnicode_WCHAR_KIND), \
- (KIND) <= (WRITER)->kind \
+ ((KIND) <= (WRITER)->kind \
? 0 \
: _PyUnicodeWriter_PrepareKindInternal((WRITER), (KIND)))
@@ -778,7 +548,7 @@ _PyUnicodeWriter_PrepareInternal(_PyUnicodeWriter *writer,
macro instead. */
PyAPI_FUNC(int)
_PyUnicodeWriter_PrepareKindInternal(_PyUnicodeWriter *writer,
- enum PyUnicode_Kind kind);
+ int kind);
/* Append a Unicode character.
Return 0 on success, raise an exception and return -1 on error. */
@@ -1024,10 +794,6 @@ PyAPI_FUNC(Py_ssize_t) _PyUnicode_InsertThousandsGrouping(
/* === Characters Type APIs =============================================== */
-/* Helper array used by Py_UNICODE_ISSPACE(). */
-
-PyAPI_DATA(const unsigned char) _Py_ascii_whitespace[];
-
/* These should not be used directly. Use the Py_UNICODE_IS* and
Py_UNICODE_TO* macros instead.
@@ -1135,6 +901,50 @@ PyAPI_FUNC(int) _PyUnicode_IsAlpha(
Py_UCS4 ch /* Unicode character */
);
+// Helper array used by Py_UNICODE_ISSPACE().
+PyAPI_DATA(const unsigned char) _Py_ascii_whitespace[];
+
+// Since splitting on whitespace is an important use case, and
+// whitespace in most situations is solely ASCII whitespace, we
+// optimize for the common case by using a quick look-up table
+// _Py_ascii_whitespace (see below) with an inlined check.
+static inline int Py_UNICODE_ISSPACE(Py_UCS4 ch) {
+ if (ch < 128) {
+ return _Py_ascii_whitespace[ch];
+ }
+ return _PyUnicode_IsWhitespace(ch);
+}
+
+#define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch)
+#define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch)
+#define Py_UNICODE_ISTITLE(ch) _PyUnicode_IsTitlecase(ch)
+#define Py_UNICODE_ISLINEBREAK(ch) _PyUnicode_IsLinebreak(ch)
+
+#define Py_UNICODE_TOLOWER(ch) _PyUnicode_ToLowercase(ch)
+#define Py_UNICODE_TOUPPER(ch) _PyUnicode_ToUppercase(ch)
+#define Py_UNICODE_TOTITLE(ch) _PyUnicode_ToTitlecase(ch)
+
+#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch)
+#define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch)
+#define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch)
+#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
+
+#define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch)
+#define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch)
+#define Py_UNICODE_TONUMERIC(ch) _PyUnicode_ToNumeric(ch)
+
+#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
+
+static inline int Py_UNICODE_ISALNUM(Py_UCS4 ch) {
+ return (Py_UNICODE_ISALPHA(ch)
+ || Py_UNICODE_ISDECIMAL(ch)
+ || Py_UNICODE_ISDIGIT(ch)
+ || Py_UNICODE_ISNUMERIC(ch));
+}
+
+
+/* === Misc functions ===================================================== */
+
PyAPI_FUNC(PyObject*) _PyUnicode_FormatLong(PyObject *, int, int, int);
/* Return an interned Unicode object for an Identifier; may fail if there is no memory.*/
@@ -1144,7 +954,7 @@ PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*);
and where the hash values are equal (i.e. a very probable match) */
PyAPI_FUNC(int) _PyUnicode_EQ(PyObject *, PyObject *);
-/* Equality check. Returns -1 on failure. */
+/* Equality check. */
PyAPI_FUNC(int) _PyUnicode_Equal(PyObject *, PyObject *);
PyAPI_FUNC(int) _PyUnicode_WideCharString_Converter(PyObject *, void *);
diff --git a/contrib/tools/python3/src/Include/cpython/warnings.h b/contrib/tools/python3/src/Include/cpython/warnings.h
index 2ef8e3ce94..4e3eb88e8f 100644
--- a/contrib/tools/python3/src/Include/cpython/warnings.h
+++ b/contrib/tools/python3/src/Include/cpython/warnings.h
@@ -17,4 +17,4 @@ PyAPI_FUNC(int) PyErr_WarnExplicitFormat(
const char *format, ...);
// DEPRECATED: Use PyErr_WarnEx() instead.
-#define PyErr_Warn(category, msg) PyErr_WarnEx(category, msg, 1)
+#define PyErr_Warn(category, msg) PyErr_WarnEx((category), (msg), 1)
diff --git a/contrib/tools/python3/src/Include/cpython/weakrefobject.h b/contrib/tools/python3/src/Include/cpython/weakrefobject.h
index 26b364f41d..fd79fdc2dc 100644
--- a/contrib/tools/python3/src/Include/cpython/weakrefobject.h
+++ b/contrib/tools/python3/src/Include/cpython/weakrefobject.h
@@ -53,6 +53,4 @@ static inline PyObject* PyWeakref_GET_OBJECT(PyObject *ref_obj) {
}
return Py_None;
}
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyWeakref_GET_OBJECT(ref) PyWeakref_GET_OBJECT(_PyObject_CAST(ref))
-#endif
+#define PyWeakref_GET_OBJECT(ref) PyWeakref_GET_OBJECT(_PyObject_CAST(ref))
diff --git a/contrib/tools/python3/src/Include/datetime.h b/contrib/tools/python3/src/Include/datetime.h
index bb565201a1..b78cc0e8e2 100644
--- a/contrib/tools/python3/src/Include/datetime.h
+++ b/contrib/tools/python3/src/Include/datetime.h
@@ -119,39 +119,39 @@ typedef struct
// o is a pointer to a time or a datetime object.
#define _PyDateTime_HAS_TZINFO(o) (((_PyDateTime_BaseTZInfo *)(o))->hastzinfo)
-#define PyDateTime_GET_YEAR(o) ((((PyDateTime_Date*)o)->data[0] << 8) | \
- ((PyDateTime_Date*)o)->data[1])
-#define PyDateTime_GET_MONTH(o) (((PyDateTime_Date*)o)->data[2])
-#define PyDateTime_GET_DAY(o) (((PyDateTime_Date*)o)->data[3])
-
-#define PyDateTime_DATE_GET_HOUR(o) (((PyDateTime_DateTime*)o)->data[4])
-#define PyDateTime_DATE_GET_MINUTE(o) (((PyDateTime_DateTime*)o)->data[5])
-#define PyDateTime_DATE_GET_SECOND(o) (((PyDateTime_DateTime*)o)->data[6])
+#define PyDateTime_GET_YEAR(o) ((((PyDateTime_Date*)(o))->data[0] << 8) | \
+ ((PyDateTime_Date*)(o))->data[1])
+#define PyDateTime_GET_MONTH(o) (((PyDateTime_Date*)(o))->data[2])
+#define PyDateTime_GET_DAY(o) (((PyDateTime_Date*)(o))->data[3])
+
+#define PyDateTime_DATE_GET_HOUR(o) (((PyDateTime_DateTime*)(o))->data[4])
+#define PyDateTime_DATE_GET_MINUTE(o) (((PyDateTime_DateTime*)(o))->data[5])
+#define PyDateTime_DATE_GET_SECOND(o) (((PyDateTime_DateTime*)(o))->data[6])
#define PyDateTime_DATE_GET_MICROSECOND(o) \
- ((((PyDateTime_DateTime*)o)->data[7] << 16) | \
- (((PyDateTime_DateTime*)o)->data[8] << 8) | \
- ((PyDateTime_DateTime*)o)->data[9])
-#define PyDateTime_DATE_GET_FOLD(o) (((PyDateTime_DateTime*)o)->fold)
-#define PyDateTime_DATE_GET_TZINFO(o) (_PyDateTime_HAS_TZINFO(o) ? \
+ ((((PyDateTime_DateTime*)(o))->data[7] << 16) | \
+ (((PyDateTime_DateTime*)(o))->data[8] << 8) | \
+ ((PyDateTime_DateTime*)(o))->data[9])
+#define PyDateTime_DATE_GET_FOLD(o) (((PyDateTime_DateTime*)(o))->fold)
+#define PyDateTime_DATE_GET_TZINFO(o) (_PyDateTime_HAS_TZINFO((o)) ? \
((PyDateTime_DateTime *)(o))->tzinfo : Py_None)
/* Apply for time instances. */
-#define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)o)->data[0])
-#define PyDateTime_TIME_GET_MINUTE(o) (((PyDateTime_Time*)o)->data[1])
-#define PyDateTime_TIME_GET_SECOND(o) (((PyDateTime_Time*)o)->data[2])
+#define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)(o))->data[0])
+#define PyDateTime_TIME_GET_MINUTE(o) (((PyDateTime_Time*)(o))->data[1])
+#define PyDateTime_TIME_GET_SECOND(o) (((PyDateTime_Time*)(o))->data[2])
#define PyDateTime_TIME_GET_MICROSECOND(o) \
- ((((PyDateTime_Time*)o)->data[3] << 16) | \
- (((PyDateTime_Time*)o)->data[4] << 8) | \
- ((PyDateTime_Time*)o)->data[5])
-#define PyDateTime_TIME_GET_FOLD(o) (((PyDateTime_Time*)o)->fold)
+ ((((PyDateTime_Time*)(o))->data[3] << 16) | \
+ (((PyDateTime_Time*)(o))->data[4] << 8) | \
+ ((PyDateTime_Time*)(o))->data[5])
+#define PyDateTime_TIME_GET_FOLD(o) (((PyDateTime_Time*)(o))->fold)
#define PyDateTime_TIME_GET_TZINFO(o) (_PyDateTime_HAS_TZINFO(o) ? \
((PyDateTime_Time *)(o))->tzinfo : Py_None)
/* Apply for time delta instances */
-#define PyDateTime_DELTA_GET_DAYS(o) (((PyDateTime_Delta*)o)->days)
-#define PyDateTime_DELTA_GET_SECONDS(o) (((PyDateTime_Delta*)o)->seconds)
+#define PyDateTime_DELTA_GET_DAYS(o) (((PyDateTime_Delta*)(o))->days)
+#define PyDateTime_DELTA_GET_SECONDS(o) (((PyDateTime_Delta*)(o))->seconds)
#define PyDateTime_DELTA_GET_MICROSECONDS(o) \
- (((PyDateTime_Delta*)o)->microseconds)
+ (((PyDateTime_Delta*)(o))->microseconds)
/* Define structure for C API. */
@@ -203,60 +203,60 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL;
#define PyDateTime_TimeZone_UTC PyDateTimeAPI->TimeZone_UTC
/* Macros for type checking when not building the Python core. */
-#define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType)
-#define PyDate_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DateType)
+#define PyDate_Check(op) PyObject_TypeCheck((op), PyDateTimeAPI->DateType)
+#define PyDate_CheckExact(op) Py_IS_TYPE((op), PyDateTimeAPI->DateType)
-#define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType)
-#define PyDateTime_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DateTimeType)
+#define PyDateTime_Check(op) PyObject_TypeCheck((op), PyDateTimeAPI->DateTimeType)
+#define PyDateTime_CheckExact(op) Py_IS_TYPE((op), PyDateTimeAPI->DateTimeType)
-#define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType)
-#define PyTime_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->TimeType)
+#define PyTime_Check(op) PyObject_TypeCheck((op), PyDateTimeAPI->TimeType)
+#define PyTime_CheckExact(op) Py_IS_TYPE((op), PyDateTimeAPI->TimeType)
-#define PyDelta_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DeltaType)
-#define PyDelta_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DeltaType)
+#define PyDelta_Check(op) PyObject_TypeCheck((op), PyDateTimeAPI->DeltaType)
+#define PyDelta_CheckExact(op) Py_IS_TYPE((op), PyDateTimeAPI->DeltaType)
-#define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType)
-#define PyTZInfo_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->TZInfoType)
+#define PyTZInfo_Check(op) PyObject_TypeCheck((op), PyDateTimeAPI->TZInfoType)
+#define PyTZInfo_CheckExact(op) Py_IS_TYPE((op), PyDateTimeAPI->TZInfoType)
/* Macros for accessing constructors in a simplified fashion. */
#define PyDate_FromDate(year, month, day) \
- PyDateTimeAPI->Date_FromDate(year, month, day, PyDateTimeAPI->DateType)
+ PyDateTimeAPI->Date_FromDate((year), (month), (day), PyDateTimeAPI->DateType)
#define PyDateTime_FromDateAndTime(year, month, day, hour, min, sec, usec) \
- PyDateTimeAPI->DateTime_FromDateAndTime(year, month, day, hour, \
- min, sec, usec, Py_None, PyDateTimeAPI->DateTimeType)
+ PyDateTimeAPI->DateTime_FromDateAndTime((year), (month), (day), (hour), \
+ (min), (sec), (usec), Py_None, PyDateTimeAPI->DateTimeType)
#define PyDateTime_FromDateAndTimeAndFold(year, month, day, hour, min, sec, usec, fold) \
- PyDateTimeAPI->DateTime_FromDateAndTimeAndFold(year, month, day, hour, \
- min, sec, usec, Py_None, fold, PyDateTimeAPI->DateTimeType)
+ PyDateTimeAPI->DateTime_FromDateAndTimeAndFold((year), (month), (day), (hour), \
+ (min), (sec), (usec), Py_None, (fold), PyDateTimeAPI->DateTimeType)
#define PyTime_FromTime(hour, minute, second, usecond) \
- PyDateTimeAPI->Time_FromTime(hour, minute, second, usecond, \
+ PyDateTimeAPI->Time_FromTime((hour), (minute), (second), (usecond), \
Py_None, PyDateTimeAPI->TimeType)
#define PyTime_FromTimeAndFold(hour, minute, second, usecond, fold) \
- PyDateTimeAPI->Time_FromTimeAndFold(hour, minute, second, usecond, \
- Py_None, fold, PyDateTimeAPI->TimeType)
+ PyDateTimeAPI->Time_FromTimeAndFold((hour), (minute), (second), (usecond), \
+ Py_None, (fold), PyDateTimeAPI->TimeType)
#define PyDelta_FromDSU(days, seconds, useconds) \
- PyDateTimeAPI->Delta_FromDelta(days, seconds, useconds, 1, \
+ PyDateTimeAPI->Delta_FromDelta((days), (seconds), (useconds), 1, \
PyDateTimeAPI->DeltaType)
#define PyTimeZone_FromOffset(offset) \
- PyDateTimeAPI->TimeZone_FromTimeZone(offset, NULL)
+ PyDateTimeAPI->TimeZone_FromTimeZone((offset), NULL)
#define PyTimeZone_FromOffsetAndName(offset, name) \
- PyDateTimeAPI->TimeZone_FromTimeZone(offset, name)
+ PyDateTimeAPI->TimeZone_FromTimeZone((offset), (name))
/* Macros supporting the DB API. */
#define PyDateTime_FromTimestamp(args) \
PyDateTimeAPI->DateTime_FromTimestamp( \
- (PyObject*) (PyDateTimeAPI->DateTimeType), args, NULL)
+ (PyObject*) (PyDateTimeAPI->DateTimeType), (args), NULL)
#define PyDate_FromTimestamp(args) \
PyDateTimeAPI->Date_FromTimestamp( \
- (PyObject*) (PyDateTimeAPI->DateType), args)
+ (PyObject*) (PyDateTimeAPI->DateType), (args))
#endif /* !defined(_PY_DATETIME_IMPL) */
diff --git a/contrib/tools/python3/src/Include/descrobject.h b/contrib/tools/python3/src/Include/descrobject.h
index 77f221df07..fd66d17b49 100644
--- a/contrib/tools/python3/src/Include/descrobject.h
+++ b/contrib/tools/python3/src/Include/descrobject.h
@@ -32,6 +32,62 @@ PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *, PyGetSetDef *);
PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *);
PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *);
+
+/* An array of PyMemberDef structures defines the name, type and offset
+ of selected members of a C structure. These can be read by
+ PyMember_GetOne() and set by PyMember_SetOne() (except if their READONLY
+ flag is set). The array must be terminated with an entry whose name
+ pointer is NULL. */
+struct PyMemberDef {
+ const char *name;
+ int type;
+ Py_ssize_t offset;
+ int flags;
+ const char *doc;
+};
+
+// These constants used to be in structmember.h, not prefixed by Py_.
+// (structmember.h now has aliases to the new names.)
+
+/* Types */
+#define Py_T_SHORT 0
+#define Py_T_INT 1
+#define Py_T_LONG 2
+#define Py_T_FLOAT 3
+#define Py_T_DOUBLE 4
+#define Py_T_STRING 5
+#define _Py_T_OBJECT 6 // Deprecated, use Py_T_OBJECT_EX instead
+/* the ordering here is weird for binary compatibility */
+#define Py_T_CHAR 7 /* 1-character string */
+#define Py_T_BYTE 8 /* 8-bit signed int */
+/* unsigned variants: */
+#define Py_T_UBYTE 9
+#define Py_T_USHORT 10
+#define Py_T_UINT 11
+#define Py_T_ULONG 12
+
+/* Added by Jack: strings contained in the structure */
+#define Py_T_STRING_INPLACE 13
+
+/* Added by Lillo: bools contained in the structure (assumed char) */
+#define Py_T_BOOL 14
+
+#define Py_T_OBJECT_EX 16
+#define Py_T_LONGLONG 17
+#define Py_T_ULONGLONG 18
+
+#define Py_T_PYSSIZET 19 /* Py_ssize_t */
+#define _Py_T_NONE 20 // Deprecated. Value is always None.
+
+/* Flags */
+#define Py_READONLY 1
+#define Py_AUDIT_READ 2 // Added in 3.10, harmless no-op before that
+#define _Py_WRITE_RESTRICTED 4 // Deprecated, no-op. Do not reuse the value.
+#define Py_RELATIVE_OFFSET 8
+
+PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, PyMemberDef *);
+PyAPI_FUNC(int) PyMember_SetOne(char *, PyMemberDef *, PyObject *);
+
#ifndef Py_LIMITED_API
# define Py_CPYTHON_DESCROBJECT_H
# include "cpython/descrobject.h"
diff --git a/contrib/tools/python3/src/Include/dictobject.h b/contrib/tools/python3/src/Include/dictobject.h
index a6233d8ae2..e7fcb44d0c 100644
--- a/contrib/tools/python3/src/Include/dictobject.h
+++ b/contrib/tools/python3/src/Include/dictobject.h
@@ -16,7 +16,7 @@ PyAPI_DATA(PyTypeObject) PyDict_Type;
#define PyDict_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
-#define PyDict_CheckExact(op) Py_IS_TYPE(op, &PyDict_Type)
+#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
PyAPI_FUNC(PyObject *) PyDict_New(void);
PyAPI_FUNC(PyObject *) PyDict_GetItem(PyObject *mp, PyObject *key);
@@ -67,9 +67,9 @@ PyAPI_DATA(PyTypeObject) PyDictKeys_Type;
PyAPI_DATA(PyTypeObject) PyDictValues_Type;
PyAPI_DATA(PyTypeObject) PyDictItems_Type;
-#define PyDictKeys_Check(op) PyObject_TypeCheck(op, &PyDictKeys_Type)
-#define PyDictValues_Check(op) PyObject_TypeCheck(op, &PyDictValues_Type)
-#define PyDictItems_Check(op) PyObject_TypeCheck(op, &PyDictItems_Type)
+#define PyDictKeys_Check(op) PyObject_TypeCheck((op), &PyDictKeys_Type)
+#define PyDictValues_Check(op) PyObject_TypeCheck((op), &PyDictValues_Type)
+#define PyDictItems_Check(op) PyObject_TypeCheck((op), &PyDictItems_Type)
/* This excludes Values, since they are not sets. */
# define PyDictViewSet_Check(op) \
(PyDictKeys_Check(op) || PyDictItems_Check(op))
diff --git a/contrib/tools/python3/src/Include/errcode.h b/contrib/tools/python3/src/Include/errcode.h
index 19ee83ec73..bd9066bb41 100644
--- a/contrib/tools/python3/src/Include/errcode.h
+++ b/contrib/tools/python3/src/Include/errcode.h
@@ -32,7 +32,6 @@ extern "C" {
#define E_INTERACT_STOP 28 /* Interactive mode stopped tokenization */
#define E_COLUMNOVERFLOW 29 /* Column offset overflow */
-
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/exports.h b/contrib/tools/python3/src/Include/exports.h
index fc1a5c5ead..59373c39ff 100644
--- a/contrib/tools/python3/src/Include/exports.h
+++ b/contrib/tools/python3/src/Include/exports.h
@@ -2,9 +2,15 @@
#define Py_EXPORTS_H
#if defined(_WIN32) || defined(__CYGWIN__)
- #define Py_IMPORTED_SYMBOL __declspec(dllimport)
- #define Py_EXPORTED_SYMBOL __declspec(dllexport)
- #define Py_LOCAL_SYMBOL
+ #if defined(Py_ENABLE_SHARED)
+ #define Py_IMPORTED_SYMBOL __declspec(dllimport)
+ #define Py_EXPORTED_SYMBOL __declspec(dllexport)
+ #define Py_LOCAL_SYMBOL
+ #else
+ #define Py_IMPORTED_SYMBOL
+ #define Py_EXPORTED_SYMBOL
+ #define Py_LOCAL_SYMBOL
+ #endif
#else
/*
* If we only ever used gcc >= 5, we could use __has_attribute(visibility)
diff --git a/contrib/tools/python3/src/Include/fileobject.h b/contrib/tools/python3/src/Include/fileobject.h
index 4c983e7b5d..2deef544d6 100644
--- a/contrib/tools/python3/src/Include/fileobject.h
+++ b/contrib/tools/python3/src/Include/fileobject.h
@@ -19,14 +19,14 @@ PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *);
/* The default encoding used by the platform file system APIs
If non-NULL, this is different than the default encoding for strings
*/
-PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding;
+Py_DEPRECATED(3.12) PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding;
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
-PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
+Py_DEPRECATED(3.12) PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
#endif
-PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
-PyAPI_DATA(int) Py_UTF8Mode;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_UTF8Mode;
#endif
/* A routine to check if a file descriptor can be select()-ed. */
diff --git a/contrib/tools/python3/src/Include/floatobject.h b/contrib/tools/python3/src/Include/floatobject.h
index 9d2fff3097..999441ac53 100644
--- a/contrib/tools/python3/src/Include/floatobject.h
+++ b/contrib/tools/python3/src/Include/floatobject.h
@@ -14,7 +14,7 @@ extern "C" {
PyAPI_DATA(PyTypeObject) PyFloat_Type;
#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
-#define PyFloat_CheckExact(op) Py_IS_TYPE(op, &PyFloat_Type)
+#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
#define Py_RETURN_NAN return PyFloat_FromDouble(Py_NAN)
diff --git a/contrib/tools/python3/src/Include/import.h b/contrib/tools/python3/src/Include/import.h
index a87677bb10..5d5f3425b8 100644
--- a/contrib/tools/python3/src/Include/import.h
+++ b/contrib/tools/python3/src/Include/import.h
@@ -67,7 +67,7 @@ PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject(
#endif
#define PyImport_ImportModuleEx(n, g, l, f) \
- PyImport_ImportModuleLevel(n, g, l, f, 0)
+ PyImport_ImportModuleLevel((n), (g), (l), (f), 0)
PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path);
PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name);
diff --git a/contrib/tools/python3/src/Include/internal/pycore_accu.h b/contrib/tools/python3/src/Include/internal/pycore_accu.h
deleted file mode 100644
index d346222e4d..0000000000
--- a/contrib/tools/python3/src/Include/internal/pycore_accu.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef Py_LIMITED_API
-#ifndef Py_INTERNAL_ACCU_H
-#define Py_INTERNAL_ACCU_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*** This is a private API for use by the interpreter and the stdlib.
- *** Its definition may be changed or removed at any moment.
- ***/
-
-#ifndef Py_BUILD_CORE
-# error "this header requires Py_BUILD_CORE define"
-#endif
-
-/*
- * A two-level accumulator of unicode objects that avoids both the overhead
- * of keeping a huge number of small separate objects, and the quadratic
- * behaviour of using a naive repeated concatenation scheme.
- */
-
-#undef small /* defined by some Windows headers */
-
-typedef struct {
- PyObject *large; /* A list of previously accumulated large strings */
- PyObject *small; /* Pending small strings */
-} _PyAccu;
-
-PyAPI_FUNC(int) _PyAccu_Init(_PyAccu *acc);
-PyAPI_FUNC(int) _PyAccu_Accumulate(_PyAccu *acc, PyObject *unicode);
-PyAPI_FUNC(PyObject *) _PyAccu_FinishAsList(_PyAccu *acc);
-PyAPI_FUNC(PyObject *) _PyAccu_Finish(_PyAccu *acc);
-PyAPI_FUNC(void) _PyAccu_Destroy(_PyAccu *acc);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* !Py_INTERNAL_ACCU_H */
-#endif /* !Py_LIMITED_API */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_asdl.h b/contrib/tools/python3/src/Include/internal/pycore_asdl.h
index 5b01c7a665..afeada88d1 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_asdl.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_asdl.h
@@ -91,7 +91,7 @@ asdl_ ## NAME ## _seq *_Py_asdl_ ## NAME ## _seq_new(Py_ssize_t size, PyArena *a
(S)->typed_elements[_asdl_i] = (V); \
} while (0)
#else
-# define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[I] = (V))
+# define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
#endif
#ifdef Py_DEBUG
@@ -103,7 +103,7 @@ asdl_ ## NAME ## _seq *_Py_asdl_ ## NAME ## _seq_new(Py_ssize_t size, PyArena *a
(S)->elements[_asdl_i] = (V); \
} while (0)
#else
-# define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[I] = (V))
+# define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
#endif
#ifdef __cplusplus
diff --git a/contrib/tools/python3/src/Include/internal/pycore_ast.h b/contrib/tools/python3/src/Include/internal/pycore_ast.h
index 36277efe9c..b568902bb1 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_ast.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_ast.h
@@ -51,6 +51,8 @@ typedef struct _pattern *pattern_ty;
typedef struct _type_ignore *type_ignore_ty;
+typedef struct _type_param *type_param_ty;
+
typedef struct {
_ASDL_SEQ_HEAD
@@ -147,6 +149,14 @@ typedef struct {
asdl_type_ignore_seq *_Py_asdl_type_ignore_seq_new(Py_ssize_t size, PyArena
*arena);
+typedef struct {
+ _ASDL_SEQ_HEAD
+ type_param_ty typed_elements[1];
+} asdl_type_param_seq;
+
+asdl_type_param_seq *_Py_asdl_type_param_seq_new(Py_ssize_t size, PyArena
+ *arena);
+
enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3,
FunctionType_kind=4};
@@ -176,12 +186,13 @@ struct _mod {
enum _stmt_kind {FunctionDef_kind=1, AsyncFunctionDef_kind=2, ClassDef_kind=3,
Return_kind=4, Delete_kind=5, Assign_kind=6,
- AugAssign_kind=7, AnnAssign_kind=8, For_kind=9,
- AsyncFor_kind=10, While_kind=11, If_kind=12, With_kind=13,
- AsyncWith_kind=14, Match_kind=15, Raise_kind=16, Try_kind=17,
- TryStar_kind=18, Assert_kind=19, Import_kind=20,
- ImportFrom_kind=21, Global_kind=22, Nonlocal_kind=23,
- Expr_kind=24, Pass_kind=25, Break_kind=26, Continue_kind=27};
+ TypeAlias_kind=7, AugAssign_kind=8, AnnAssign_kind=9,
+ For_kind=10, AsyncFor_kind=11, While_kind=12, If_kind=13,
+ With_kind=14, AsyncWith_kind=15, Match_kind=16,
+ Raise_kind=17, Try_kind=18, TryStar_kind=19, Assert_kind=20,
+ Import_kind=21, ImportFrom_kind=22, Global_kind=23,
+ Nonlocal_kind=24, Expr_kind=25, Pass_kind=26, Break_kind=27,
+ Continue_kind=28};
struct _stmt {
enum _stmt_kind kind;
union {
@@ -192,6 +203,7 @@ struct _stmt {
asdl_expr_seq *decorator_list;
expr_ty returns;
string type_comment;
+ asdl_type_param_seq *type_params;
} FunctionDef;
struct {
@@ -201,6 +213,7 @@ struct _stmt {
asdl_expr_seq *decorator_list;
expr_ty returns;
string type_comment;
+ asdl_type_param_seq *type_params;
} AsyncFunctionDef;
struct {
@@ -209,6 +222,7 @@ struct _stmt {
asdl_keyword_seq *keywords;
asdl_stmt_seq *body;
asdl_expr_seq *decorator_list;
+ asdl_type_param_seq *type_params;
} ClassDef;
struct {
@@ -226,6 +240,12 @@ struct _stmt {
} Assign;
struct {
+ expr_ty name;
+ asdl_type_param_seq *type_params;
+ expr_ty value;
+ } TypeAlias;
+
+ struct {
expr_ty target;
operator_ty op;
expr_ty value;
@@ -630,6 +650,30 @@ struct _type_ignore {
} v;
};
+enum _type_param_kind {TypeVar_kind=1, ParamSpec_kind=2, TypeVarTuple_kind=3};
+struct _type_param {
+ enum _type_param_kind kind;
+ union {
+ struct {
+ identifier name;
+ expr_ty bound;
+ } TypeVar;
+
+ struct {
+ identifier name;
+ } ParamSpec;
+
+ struct {
+ identifier name;
+ } TypeVarTuple;
+
+ } v;
+ int lineno;
+ int col_offset;
+ int end_lineno;
+ int end_col_offset;
+};
+
// Note: these macros affect function definitions, not only call sites.
mod_ty _PyAST_Module(asdl_stmt_seq * body, asdl_type_ignore_seq * type_ignores,
@@ -640,19 +684,20 @@ mod_ty _PyAST_FunctionType(asdl_expr_seq * argtypes, expr_ty returns, PyArena
*arena);
stmt_ty _PyAST_FunctionDef(identifier name, arguments_ty args, asdl_stmt_seq *
body, asdl_expr_seq * decorator_list, expr_ty
- returns, string type_comment, int lineno, int
- col_offset, int end_lineno, int end_col_offset,
- PyArena *arena);
+ returns, string type_comment, asdl_type_param_seq *
+ type_params, int lineno, int col_offset, int
+ end_lineno, int end_col_offset, PyArena *arena);
stmt_ty _PyAST_AsyncFunctionDef(identifier name, arguments_ty args,
asdl_stmt_seq * body, asdl_expr_seq *
decorator_list, expr_ty returns, string
- type_comment, int lineno, int col_offset, int
+ type_comment, asdl_type_param_seq *
+ type_params, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
stmt_ty _PyAST_ClassDef(identifier name, asdl_expr_seq * bases,
asdl_keyword_seq * keywords, asdl_stmt_seq * body,
- asdl_expr_seq * decorator_list, int lineno, int
- col_offset, int end_lineno, int end_col_offset, PyArena
- *arena);
+ asdl_expr_seq * decorator_list, asdl_type_param_seq *
+ type_params, int lineno, int col_offset, int
+ end_lineno, int end_col_offset, PyArena *arena);
stmt_ty _PyAST_Return(expr_ty value, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
stmt_ty _PyAST_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int
@@ -660,6 +705,9 @@ stmt_ty _PyAST_Delete(asdl_expr_seq * targets, int lineno, int col_offset, int
stmt_ty _PyAST_Assign(asdl_expr_seq * targets, expr_ty value, string
type_comment, int lineno, int col_offset, int end_lineno,
int end_col_offset, PyArena *arena);
+stmt_ty _PyAST_TypeAlias(expr_ty name, asdl_type_param_seq * type_params,
+ expr_ty value, int lineno, int col_offset, int
+ end_lineno, int end_col_offset, PyArena *arena);
stmt_ty _PyAST_AugAssign(expr_ty target, operator_ty op, expr_ty value, int
lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
@@ -844,6 +892,14 @@ pattern_ty _PyAST_MatchOr(asdl_pattern_seq * patterns, int lineno, int
col_offset, int end_lineno, int end_col_offset,
PyArena *arena);
type_ignore_ty _PyAST_TypeIgnore(int lineno, string tag, PyArena *arena);
+type_param_ty _PyAST_TypeVar(identifier name, expr_ty bound, int lineno, int
+ col_offset, int end_lineno, int end_col_offset,
+ PyArena *arena);
+type_param_ty _PyAST_ParamSpec(identifier name, int lineno, int col_offset, int
+ end_lineno, int end_col_offset, PyArena *arena);
+type_param_ty _PyAST_TypeVarTuple(identifier name, int lineno, int col_offset,
+ int end_lineno, int end_col_offset, PyArena
+ *arena);
PyObject* PyAST_mod2obj(mod_ty t);
diff --git a/contrib/tools/python3/src/Include/internal/pycore_ast_state.h b/contrib/tools/python3/src/Include/internal/pycore_ast_state.h
index d354822e1d..863c73b0d6 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_ast_state.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_ast_state.h
@@ -118,6 +118,7 @@ struct ast_state {
PyObject *Not_type;
PyObject *Or_singleton;
PyObject *Or_type;
+ PyObject *ParamSpec_type;
PyObject *Pass_type;
PyObject *Pow_singleton;
PyObject *Pow_type;
@@ -137,7 +138,10 @@ struct ast_state {
PyObject *TryStar_type;
PyObject *Try_type;
PyObject *Tuple_type;
+ PyObject *TypeAlias_type;
PyObject *TypeIgnore_type;
+ PyObject *TypeVarTuple_type;
+ PyObject *TypeVar_type;
PyObject *UAdd_singleton;
PyObject *UAdd_type;
PyObject *USub_singleton;
@@ -166,6 +170,7 @@ struct ast_state {
PyObject *bases;
PyObject *body;
PyObject *boolop_type;
+ PyObject *bound;
PyObject *cases;
PyObject *cause;
PyObject *cls;
@@ -243,6 +248,8 @@ struct ast_state {
PyObject *type_comment;
PyObject *type_ignore_type;
PyObject *type_ignores;
+ PyObject *type_param_type;
+ PyObject *type_params;
PyObject *unaryop_type;
PyObject *upper;
PyObject *value;
diff --git a/contrib/tools/python3/src/Include/internal/pycore_atexit.h b/contrib/tools/python3/src/Include/internal/pycore_atexit.h
new file mode 100644
index 0000000000..63a2cd5d50
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_atexit.h
@@ -0,0 +1,57 @@
+#ifndef Py_INTERNAL_ATEXIT_H
+#define Py_INTERNAL_ATEXIT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+
+//###############
+// runtime atexit
+
+typedef void (*atexit_callbackfunc)(void);
+
+struct _atexit_runtime_state {
+ PyThread_type_lock mutex;
+#define NEXITFUNCS 32
+ atexit_callbackfunc callbacks[NEXITFUNCS];
+ int ncallbacks;
+};
+
+
+//###################
+// interpreter atexit
+
+struct atexit_callback;
+typedef struct atexit_callback {
+ atexit_datacallbackfunc func;
+ void *data;
+ struct atexit_callback *next;
+} atexit_callback;
+
+typedef struct {
+ PyObject *func;
+ PyObject *args;
+ PyObject *kwargs;
+} atexit_py_callback;
+
+struct atexit_state {
+ atexit_callback *ll_callbacks;
+ atexit_callback *last_ll_callback;
+
+ // XXX The rest of the state could be moved to the atexit module state
+ // and a low-level callback added for it during module exec.
+ // For the moment we leave it here.
+ atexit_py_callback **callbacks;
+ int ncallbacks;
+ int callback_len;
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_ATEXIT_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_bytesobject.h b/contrib/tools/python3/src/Include/internal/pycore_bytesobject.h
index 9173a4f105..d36fa9569d 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_bytesobject.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_bytesobject.h
@@ -9,11 +9,6 @@ extern "C" {
#endif
-/* runtime lifecycle */
-
-extern PyStatus _PyBytes_InitTypes(PyInterpreterState *);
-
-
/* Substring Search.
Returns the index of the first occurrence of
diff --git a/contrib/tools/python3/src/Include/internal/pycore_call.h b/contrib/tools/python3/src/Include/internal/pycore_call.h
index 3ccacfa0b8..5d9342b562 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_call.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_call.h
@@ -103,6 +103,7 @@ _PyObject_CallNoArgsTstate(PyThreadState *tstate, PyObject *func) {
// Private static inline function variant of public PyObject_CallNoArgs()
static inline PyObject *
_PyObject_CallNoArgs(PyObject *func) {
+ EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
PyThreadState *tstate = _PyThreadState_GET();
return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
}
@@ -111,9 +112,20 @@ _PyObject_CallNoArgs(PyObject *func) {
static inline PyObject *
_PyObject_FastCallTstate(PyThreadState *tstate, PyObject *func, PyObject *const *args, Py_ssize_t nargs)
{
+ EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
return _PyObject_VectorcallTstate(tstate, func, args, (size_t)nargs, NULL);
}
+PyObject *const *
+_PyStack_UnpackDict(PyThreadState *tstate,
+ PyObject *const *args, Py_ssize_t nargs,
+ PyObject *kwargs, PyObject **p_kwnames);
+
+void
+_PyStack_UnpackDict_Free(PyObject *const *stack, Py_ssize_t nargs,
+ PyObject *kwnames);
+
+void _PyStack_UnpackDict_FreeNoDecRef(PyObject *const *stack, PyObject *kwnames);
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/internal/pycore_ceval.h b/contrib/tools/python3/src/Include/internal/pycore_ceval.h
index 8d18d200aa..921b1cfcd3 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_ceval.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_ceval.h
@@ -12,15 +12,8 @@ extern "C" {
struct pyruntimestate;
struct _ceval_runtime_state;
-/* WASI has limited call stack. Python's recursion limit depends on code
- layout, optimization, and WASI runtime. Wasmtime can handle about 700-750
- recursions, sometimes less. 600 is a more conservative limit. */
#ifndef Py_DEFAULT_RECURSION_LIMIT
-# ifdef __wasi__
-# define Py_DEFAULT_RECURSION_LIMIT 600
-# else
-# define Py_DEFAULT_RECURSION_LIMIT 1000
-# endif
+# define Py_DEFAULT_RECURSION_LIMIT 1000
#endif
#include "pycore_interp.h" // PyInterpreterState.eval_frame
@@ -28,14 +21,14 @@ struct _ceval_runtime_state;
extern void _Py_FinishPendingCalls(PyThreadState *tstate);
-extern void _PyEval_InitRuntimeState(struct _ceval_runtime_state *);
-extern void _PyEval_InitState(struct _ceval_state *, PyThread_type_lock);
+extern void _PyEval_InitState(PyInterpreterState *, PyThread_type_lock);
extern void _PyEval_FiniState(struct _ceval_state *ceval);
PyAPI_FUNC(void) _PyEval_SignalReceived(PyInterpreterState *interp);
PyAPI_FUNC(int) _PyEval_AddPendingCall(
PyInterpreterState *interp,
int (*func)(void *),
- void *arg);
+ void *arg,
+ int mainthreadonly);
PyAPI_FUNC(void) _PyEval_SignalAsyncExc(PyInterpreterState *interp);
#ifdef HAVE_FORK
extern PyStatus _PyEval_ReInitThreads(PyThreadState *tstate);
@@ -65,10 +58,33 @@ extern PyObject* _PyEval_BuiltinsFromGlobals(
PyThreadState *tstate,
PyObject *globals);
+// Trampoline API
+
+typedef struct {
+ // Callback to initialize the trampoline state
+ void* (*init_state)(void);
+ // Callback to register every trampoline being created
+ void (*write_state)(void* state, const void *code_addr,
+ unsigned int code_size, PyCodeObject* code);
+ // Callback to free the trampoline state
+ int (*free_state)(void* state);
+} _PyPerf_Callbacks;
+
+extern int _PyPerfTrampoline_SetCallbacks(_PyPerf_Callbacks *);
+extern void _PyPerfTrampoline_GetCallbacks(_PyPerf_Callbacks *);
+extern int _PyPerfTrampoline_Init(int activate);
+extern int _PyPerfTrampoline_Fini(void);
+extern void _PyPerfTrampoline_FreeArenas(void);
+extern int _PyIsPerfTrampolineActive(void);
+extern PyStatus _PyPerfTrampoline_AfterFork_Child(void);
+#ifdef PY_HAVE_PERF_TRAMPOLINE
+extern _PyPerf_Callbacks _Py_perfmap_callbacks;
+#endif
static inline PyObject*
_PyEval_EvalFrame(PyThreadState *tstate, struct _PyInterpreterFrame *frame, int throwflag)
{
+ EVAL_CALL_STAT_INC(EVAL_CALL_TOTAL);
if (tstate->interp->eval_frame == NULL) {
return _PyEval_EvalFrameDefault(tstate, frame, throwflag);
}
@@ -81,11 +97,13 @@ _PyEval_Vector(PyThreadState *tstate,
PyObject* const* args, size_t argcount,
PyObject *kwnames);
-extern int _PyEval_ThreadsInitialized(struct pyruntimestate *runtime);
-extern PyStatus _PyEval_InitGIL(PyThreadState *tstate);
+extern int _PyEval_ThreadsInitialized(void);
+extern PyStatus _PyEval_InitGIL(PyThreadState *tstate, int own_gil);
extern void _PyEval_FiniGIL(PyInterpreterState *interp);
-extern void _PyEval_ReleaseLock(PyThreadState *tstate);
+extern void _PyEval_AcquireLock(PyThreadState *tstate);
+extern void _PyEval_ReleaseLock(PyInterpreterState *, PyThreadState *);
+extern PyThreadState * _PyThreadState_SwapNoGIL(PyThreadState *);
extern void _PyEval_DeactivateOpCache(void);
@@ -96,12 +114,12 @@ extern void _PyEval_DeactivateOpCache(void);
/* With USE_STACKCHECK macro defined, trigger stack checks in
_Py_CheckRecursiveCall() on every 64th call to _Py_EnterRecursiveCall. */
static inline int _Py_MakeRecCheck(PyThreadState *tstate) {
- return (tstate->recursion_remaining-- <= 0
- || (tstate->recursion_remaining & 63) == 0);
+ return (tstate->c_recursion_remaining-- <= 0
+ || (tstate->c_recursion_remaining & 63) == 0);
}
#else
static inline int _Py_MakeRecCheck(PyThreadState *tstate) {
- return tstate->recursion_remaining-- <= 0;
+ return tstate->c_recursion_remaining-- <= 0;
}
#endif
@@ -109,6 +127,9 @@ PyAPI_FUNC(int) _Py_CheckRecursiveCall(
PyThreadState *tstate,
const char *where);
+int _Py_CheckRecursiveCallPy(
+ PyThreadState *tstate);
+
static inline int _Py_EnterRecursiveCallTstate(PyThreadState *tstate,
const char *where) {
return (_Py_MakeRecCheck(tstate) && _Py_CheckRecursiveCall(tstate, where));
@@ -120,7 +141,7 @@ static inline int _Py_EnterRecursiveCall(const char *where) {
}
static inline void _Py_LeaveRecursiveCallTstate(PyThreadState *tstate) {
- tstate->recursion_remaining++;
+ tstate->c_recursion_remaining++;
}
static inline void _Py_LeaveRecursiveCall(void) {
@@ -132,6 +153,11 @@ extern struct _PyInterpreterFrame* _PyEval_GetFrame(void);
extern PyObject* _Py_MakeCoro(PyFunctionObject *func);
+extern int _Py_HandlePending(PyThreadState *tstate);
+
+extern PyObject * _PyEval_GetFrameLocals(void);
+
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_ceval_state.h b/contrib/tools/python3/src/Include/internal/pycore_ceval_state.h
new file mode 100644
index 0000000000..e56e43c6e0
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_ceval_state.h
@@ -0,0 +1,103 @@
+#ifndef Py_INTERNAL_CEVAL_STATE_H
+#define Py_INTERNAL_CEVAL_STATE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+
+#include "pycore_atomic.h" /* _Py_atomic_address */
+#include "pycore_gil.h" // struct _gil_runtime_state
+
+
+struct _pending_calls {
+ int busy;
+ PyThread_type_lock lock;
+ /* Request for running pending calls. */
+ _Py_atomic_int calls_to_do;
+ /* Request for looking at the `async_exc` field of the current
+ thread state.
+ Guarded by the GIL. */
+ int async_exc;
+#define NPENDINGCALLS 32
+ struct _pending_call {
+ int (*func)(void *);
+ void *arg;
+ } calls[NPENDINGCALLS];
+ int first;
+ int last;
+};
+
+typedef enum {
+ PERF_STATUS_FAILED = -1, // Perf trampoline is in an invalid state
+ PERF_STATUS_NO_INIT = 0, // Perf trampoline is not initialized
+ PERF_STATUS_OK = 1, // Perf trampoline is ready to be executed
+} perf_status_t;
+
+
+#ifdef PY_HAVE_PERF_TRAMPOLINE
+struct code_arena_st;
+
+struct trampoline_api_st {
+ void* (*init_state)(void);
+ void (*write_state)(void* state, const void *code_addr,
+ unsigned int code_size, PyCodeObject* code);
+ int (*free_state)(void* state);
+ void *state;
+};
+#endif
+
+struct _ceval_runtime_state {
+ struct {
+#ifdef PY_HAVE_PERF_TRAMPOLINE
+ perf_status_t status;
+ Py_ssize_t extra_code_index;
+ struct code_arena_st *code_arena;
+ struct trampoline_api_st trampoline_api;
+ FILE *map_file;
+#else
+ int _not_used;
+#endif
+ } perf;
+ /* Request for checking signals. It is shared by all interpreters (see
+ bpo-40513). Any thread of any interpreter can receive a signal, but only
+ the main thread of the main interpreter can handle signals: see
+ _Py_ThreadCanHandleSignals(). */
+ _Py_atomic_int signals_pending;
+ /* Pending calls to be made only on the main thread. */
+ struct _pending_calls pending_mainthread;
+};
+
+#ifdef PY_HAVE_PERF_TRAMPOLINE
+# define _PyEval_RUNTIME_PERF_INIT \
+ { \
+ .status = PERF_STATUS_NO_INIT, \
+ .extra_code_index = -1, \
+ }
+#else
+# define _PyEval_RUNTIME_PERF_INIT {0}
+#endif
+
+
+struct _ceval_state {
+ /* This single variable consolidates all requests to break out of
+ the fast path in the eval loop. */
+ _Py_atomic_int eval_breaker;
+ /* Request for dropping the GIL */
+ _Py_atomic_int gil_drop_request;
+ int recursion_limit;
+ struct _gil_runtime_state *gil;
+ int own_gil;
+ /* The GC is ready to be executed */
+ _Py_atomic_int gc_scheduled;
+ struct _pending_calls pending;
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_CEVAL_STATE_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_code.h b/contrib/tools/python3/src/Include/internal/pycore_code.h
index 3a24a65426..92e0a8bbd3 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_code.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_code.h
@@ -4,6 +4,8 @@
extern "C" {
#endif
+#define CODE_MAX_WATCHERS 8
+
/* PEP 659
* Specialization and quickening structs and helper functions
*/
@@ -16,109 +18,95 @@ extern "C" {
#define CACHE_ENTRIES(cache) (sizeof(cache)/sizeof(_Py_CODEUNIT))
typedef struct {
- _Py_CODEUNIT counter;
- _Py_CODEUNIT index;
- _Py_CODEUNIT module_keys_version[2];
- _Py_CODEUNIT builtin_keys_version;
+ uint16_t counter;
+ uint16_t index;
+ uint16_t module_keys_version;
+ uint16_t builtin_keys_version;
} _PyLoadGlobalCache;
#define INLINE_CACHE_ENTRIES_LOAD_GLOBAL CACHE_ENTRIES(_PyLoadGlobalCache)
typedef struct {
- _Py_CODEUNIT counter;
+ uint16_t counter;
} _PyBinaryOpCache;
#define INLINE_CACHE_ENTRIES_BINARY_OP CACHE_ENTRIES(_PyBinaryOpCache)
typedef struct {
- _Py_CODEUNIT counter;
+ uint16_t counter;
} _PyUnpackSequenceCache;
#define INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE \
CACHE_ENTRIES(_PyUnpackSequenceCache)
typedef struct {
- _Py_CODEUNIT counter;
- _Py_CODEUNIT mask;
+ uint16_t counter;
} _PyCompareOpCache;
#define INLINE_CACHE_ENTRIES_COMPARE_OP CACHE_ENTRIES(_PyCompareOpCache)
typedef struct {
- _Py_CODEUNIT counter;
- _Py_CODEUNIT type_version[2];
- _Py_CODEUNIT func_version;
+ uint16_t counter;
} _PyBinarySubscrCache;
#define INLINE_CACHE_ENTRIES_BINARY_SUBSCR CACHE_ENTRIES(_PyBinarySubscrCache)
typedef struct {
- _Py_CODEUNIT counter;
- _Py_CODEUNIT version[2];
- _Py_CODEUNIT index;
-} _PyAttrCache;
+ uint16_t counter;
+} _PySuperAttrCache;
-#define INLINE_CACHE_ENTRIES_LOAD_ATTR CACHE_ENTRIES(_PyAttrCache)
+#define INLINE_CACHE_ENTRIES_LOAD_SUPER_ATTR CACHE_ENTRIES(_PySuperAttrCache)
-#define INLINE_CACHE_ENTRIES_STORE_ATTR CACHE_ENTRIES(_PyAttrCache)
+typedef struct {
+ uint16_t counter;
+ uint16_t version[2];
+ uint16_t index;
+} _PyAttrCache;
typedef struct {
- _Py_CODEUNIT counter;
- _Py_CODEUNIT type_version[2];
- _Py_CODEUNIT dict_offset;
- _Py_CODEUNIT keys_version[2];
- _Py_CODEUNIT descr[4];
+ uint16_t counter;
+ uint16_t type_version[2];
+ uint16_t keys_version[2];
+ uint16_t descr[4];
} _PyLoadMethodCache;
-#define INLINE_CACHE_ENTRIES_LOAD_METHOD CACHE_ENTRIES(_PyLoadMethodCache)
-typedef struct {
- _Py_CODEUNIT counter;
- _Py_CODEUNIT func_version[2];
- _Py_CODEUNIT min_args;
-} _PyCallCache;
+// MUST be the max(_PyAttrCache, _PyLoadMethodCache)
+#define INLINE_CACHE_ENTRIES_LOAD_ATTR CACHE_ENTRIES(_PyLoadMethodCache)
-#define INLINE_CACHE_ENTRIES_CALL CACHE_ENTRIES(_PyCallCache)
+#define INLINE_CACHE_ENTRIES_STORE_ATTR CACHE_ENTRIES(_PyAttrCache)
typedef struct {
- _Py_CODEUNIT counter;
-} _PyPrecallCache;
+ uint16_t counter;
+ uint16_t func_version[2];
+} _PyCallCache;
-#define INLINE_CACHE_ENTRIES_PRECALL CACHE_ENTRIES(_PyPrecallCache)
+#define INLINE_CACHE_ENTRIES_CALL CACHE_ENTRIES(_PyCallCache)
typedef struct {
- _Py_CODEUNIT counter;
+ uint16_t counter;
} _PyStoreSubscrCache;
#define INLINE_CACHE_ENTRIES_STORE_SUBSCR CACHE_ENTRIES(_PyStoreSubscrCache)
-#define QUICKENING_WARMUP_DELAY 8
-
-/* We want to compare to zero for efficiency, so we offset values accordingly */
-#define QUICKENING_INITIAL_WARMUP_VALUE (-QUICKENING_WARMUP_DELAY)
+typedef struct {
+ uint16_t counter;
+} _PyForIterCache;
-void _PyCode_Quicken(PyCodeObject *code);
+#define INLINE_CACHE_ENTRIES_FOR_ITER CACHE_ENTRIES(_PyForIterCache)
-static inline void
-_PyCode_Warmup(PyCodeObject *code)
-{
- if (code->co_warmup != 0) {
- code->co_warmup++;
- if (code->co_warmup == 0) {
- _PyCode_Quicken(code);
- }
- }
-}
-
-extern uint8_t _PyOpcode_Adaptive[256];
+typedef struct {
+ uint16_t counter;
+} _PySendCache;
-extern Py_ssize_t _Py_QuickenedCount;
+#define INLINE_CACHE_ENTRIES_SEND CACHE_ENTRIES(_PySendCache)
// Borrowed references to common callables:
struct callable_cache {
PyObject *isinstance;
PyObject *len;
PyObject *list_append;
+ PyObject *object__getattribute__;
};
/* "Locals plus" for a code object is the set of locals + cell vars +
@@ -140,6 +128,7 @@ struct callable_cache {
// Note that these all fit within a byte, as do combinations.
// Later, we will use the smaller numbers to differentiate the different
// kinds of locals (e.g. pos-only arg, varkwargs, local-only).
+#define CO_FAST_HIDDEN 0x10
#define CO_FAST_LOCAL 0x20
#define CO_FAST_CELL 0x40
#define CO_FAST_FREE 0x80
@@ -235,90 +224,47 @@ extern int _PyLineTable_PreviousAddressRange(PyCodeAddressRange *range);
/* Specialization functions */
-extern int _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr,
- PyObject *name);
-extern int _Py_Specialize_StoreAttr(PyObject *owner, _Py_CODEUNIT *instr,
+extern void _Py_Specialize_LoadSuperAttr(PyObject *global_super, PyObject *cls,
+ _Py_CODEUNIT *instr, int load_method);
+extern void _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr,
PyObject *name);
-extern int _Py_Specialize_LoadGlobal(PyObject *globals, PyObject *builtins, _Py_CODEUNIT *instr, PyObject *name);
-extern int _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr,
+extern void _Py_Specialize_StoreAttr(PyObject *owner, _Py_CODEUNIT *instr,
PyObject *name);
-extern int _Py_Specialize_BinarySubscr(PyObject *sub, PyObject *container, _Py_CODEUNIT *instr);
-extern int _Py_Specialize_StoreSubscr(PyObject *container, PyObject *sub, _Py_CODEUNIT *instr);
-extern int _Py_Specialize_Call(PyObject *callable, _Py_CODEUNIT *instr,
- int nargs, PyObject *kwnames);
-extern int _Py_Specialize_Precall(PyObject *callable, _Py_CODEUNIT *instr,
- int nargs, PyObject *kwnames, int oparg);
+extern void _Py_Specialize_LoadGlobal(PyObject *globals, PyObject *builtins,
+ _Py_CODEUNIT *instr, PyObject *name);
+extern void _Py_Specialize_BinarySubscr(PyObject *sub, PyObject *container,
+ _Py_CODEUNIT *instr);
+extern void _Py_Specialize_StoreSubscr(PyObject *container, PyObject *sub,
+ _Py_CODEUNIT *instr);
+extern void _Py_Specialize_Call(PyObject *callable, _Py_CODEUNIT *instr,
+ int nargs, PyObject *kwnames);
extern void _Py_Specialize_BinaryOp(PyObject *lhs, PyObject *rhs, _Py_CODEUNIT *instr,
int oparg, PyObject **locals);
extern void _Py_Specialize_CompareOp(PyObject *lhs, PyObject *rhs,
_Py_CODEUNIT *instr, int oparg);
extern void _Py_Specialize_UnpackSequence(PyObject *seq, _Py_CODEUNIT *instr,
int oparg);
+extern void _Py_Specialize_ForIter(PyObject *iter, _Py_CODEUNIT *instr, int oparg);
+extern void _Py_Specialize_Send(PyObject *receiver, _Py_CODEUNIT *instr);
-/* Deallocator function for static codeobjects used in deepfreeze.py */
-extern void _PyStaticCode_Dealloc(PyCodeObject *co);
-/* Function to intern strings of codeobjects */
-extern int _PyStaticCode_InternStrings(PyCodeObject *co);
+/* Finalizer function for static codeobjects used in deepfreeze.py */
+extern void _PyStaticCode_Fini(PyCodeObject *co);
+/* Function to intern strings of codeobjects and quicken the bytecode */
+extern int _PyStaticCode_Init(PyCodeObject *co);
#ifdef Py_STATS
-#define SPECIALIZATION_FAILURE_KINDS 30
-
-typedef struct _specialization_stats {
- uint64_t success;
- uint64_t failure;
- uint64_t hit;
- uint64_t deferred;
- uint64_t miss;
- uint64_t deopt;
- uint64_t failure_kinds[SPECIALIZATION_FAILURE_KINDS];
-} SpecializationStats;
-
-typedef struct _opcode_stats {
- SpecializationStats specialization;
- uint64_t execution_count;
- uint64_t pair_count[256];
-} OpcodeStats;
-
-typedef struct _call_stats {
- uint64_t inlined_py_calls;
- uint64_t pyeval_calls;
- uint64_t frames_pushed;
- uint64_t frame_objects_created;
-} CallStats;
-
-typedef struct _object_stats {
- uint64_t allocations;
- uint64_t allocations512;
- uint64_t allocations4k;
- uint64_t allocations_big;
- uint64_t frees;
- uint64_t to_freelist;
- uint64_t from_freelist;
- uint64_t new_values;
- uint64_t dict_materialized_on_request;
- uint64_t dict_materialized_new_key;
- uint64_t dict_materialized_too_big;
- uint64_t dict_materialized_str_subclass;
-} ObjectStats;
-
-typedef struct _stats {
- OpcodeStats opcode_stats[256];
- CallStats call_stats;
- ObjectStats object_stats;
-} PyStats;
-
-extern PyStats _py_stats;
-
-#define STAT_INC(opname, name) _py_stats.opcode_stats[opname].specialization.name++
-#define STAT_DEC(opname, name) _py_stats.opcode_stats[opname].specialization.name--
-#define OPCODE_EXE_INC(opname) _py_stats.opcode_stats[opname].execution_count++
-#define CALL_STAT_INC(name) _py_stats.call_stats.name++
-#define OBJECT_STAT_INC(name) _py_stats.object_stats.name++
-#define OBJECT_STAT_INC_COND(name, cond) \
- do { if (cond) _py_stats.object_stats.name++; } while (0)
-extern void _Py_PrintSpecializationStats(int to_file);
+#define STAT_INC(opname, name) do { if (_py_stats) _py_stats->opcode_stats[opname].specialization.name++; } while (0)
+#define STAT_DEC(opname, name) do { if (_py_stats) _py_stats->opcode_stats[opname].specialization.name--; } while (0)
+#define OPCODE_EXE_INC(opname) do { if (_py_stats) _py_stats->opcode_stats[opname].execution_count++; } while (0)
+#define CALL_STAT_INC(name) do { if (_py_stats) _py_stats->call_stats.name++; } while (0)
+#define OBJECT_STAT_INC(name) do { if (_py_stats) _py_stats->object_stats.name++; } while (0)
+#define OBJECT_STAT_INC_COND(name, cond) \
+ do { if (_py_stats && cond) _py_stats->object_stats.name++; } while (0)
+#define EVAL_CALL_STAT_INC(name) do { if (_py_stats) _py_stats->call_stats.eval_calls[name]++; } while (0)
+#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) \
+ do { if (_py_stats && PyFunction_Check(callable)) _py_stats->call_stats.eval_calls[name]++; } while (0)
// Used by the _opcode extension which is built as a shared library
PyAPI_FUNC(PyObject*) _Py_GetSpecializationStats(void);
@@ -330,112 +276,65 @@ PyAPI_FUNC(PyObject*) _Py_GetSpecializationStats(void);
#define CALL_STAT_INC(name) ((void)0)
#define OBJECT_STAT_INC(name) ((void)0)
#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
+#define EVAL_CALL_STAT_INC(name) ((void)0)
+#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
#endif // !Py_STATS
-// Cache values are only valid in memory, so use native endianness.
-#ifdef WORDS_BIGENDIAN
+// Utility functions for reading/writing 32/64-bit values in the inline caches.
+// Great care should be taken to ensure that these functions remain correct and
+// performant! They should compile to just "move" instructions on all supported
+// compilers and platforms.
+
+// We use memcpy to let the C compiler handle unaligned accesses and endianness
+// issues for us. It also seems to produce better code than manual copying for
+// most compilers (see https://blog.regehr.org/archives/959 for more info).
static inline void
write_u32(uint16_t *p, uint32_t val)
{
- p[0] = (uint16_t)(val >> 16);
- p[1] = (uint16_t)(val >> 0);
+ memcpy(p, &val, sizeof(val));
}
static inline void
write_u64(uint16_t *p, uint64_t val)
{
- p[0] = (uint16_t)(val >> 48);
- p[1] = (uint16_t)(val >> 32);
- p[2] = (uint16_t)(val >> 16);
- p[3] = (uint16_t)(val >> 0);
-}
-
-static inline uint32_t
-read_u32(uint16_t *p)
-{
- uint32_t val = 0;
- val |= (uint32_t)p[0] << 16;
- val |= (uint32_t)p[1] << 0;
- return val;
+ memcpy(p, &val, sizeof(val));
}
-static inline uint64_t
-read_u64(uint16_t *p)
-{
- uint64_t val = 0;
- val |= (uint64_t)p[0] << 48;
- val |= (uint64_t)p[1] << 32;
- val |= (uint64_t)p[2] << 16;
- val |= (uint64_t)p[3] << 0;
- return val;
-}
-
-#else
-
static inline void
-write_u32(uint16_t *p, uint32_t val)
+write_obj(uint16_t *p, PyObject *val)
{
- p[0] = (uint16_t)(val >> 0);
- p[1] = (uint16_t)(val >> 16);
+ memcpy(p, &val, sizeof(val));
}
-static inline void
-write_u64(uint16_t *p, uint64_t val)
+static inline uint16_t
+read_u16(uint16_t *p)
{
- p[0] = (uint16_t)(val >> 0);
- p[1] = (uint16_t)(val >> 16);
- p[2] = (uint16_t)(val >> 32);
- p[3] = (uint16_t)(val >> 48);
+ return *p;
}
static inline uint32_t
read_u32(uint16_t *p)
{
- uint32_t val = 0;
- val |= (uint32_t)p[0] << 0;
- val |= (uint32_t)p[1] << 16;
+ uint32_t val;
+ memcpy(&val, p, sizeof(val));
return val;
}
static inline uint64_t
read_u64(uint16_t *p)
{
- uint64_t val = 0;
- val |= (uint64_t)p[0] << 0;
- val |= (uint64_t)p[1] << 16;
- val |= (uint64_t)p[2] << 32;
- val |= (uint64_t)p[3] << 48;
+ uint64_t val;
+ memcpy(&val, p, sizeof(val));
return val;
}
-#endif
-
-static inline void
-write_obj(uint16_t *p, PyObject *obj)
-{
- uintptr_t val = (uintptr_t)obj;
-#if SIZEOF_VOID_P == 8
- write_u64(p, val);
-#elif SIZEOF_VOID_P == 4
- write_u32(p, val);
-#else
- #error "SIZEOF_VOID_P must be 4 or 8"
-#endif
-}
-
static inline PyObject *
read_obj(uint16_t *p)
{
- uintptr_t val;
-#if SIZEOF_VOID_P == 8
- val = read_u64(p);
-#elif SIZEOF_VOID_P == 4
- val = read_u32(p);
-#else
- #error "SIZEOF_VOID_P must be 4 or 8"
-#endif
- return (PyObject *)val;
+ PyObject *val;
+ memcpy(&val, p, sizeof(val));
+ return val;
}
/* See Objects/exception_handling_notes.txt for details.
@@ -460,27 +359,29 @@ write_varint(uint8_t *ptr, unsigned int val)
val >>= 6;
written++;
}
- *ptr = val;
+ *ptr = (uint8_t)val;
return written;
}
static inline int
write_signed_varint(uint8_t *ptr, int val)
{
+ unsigned int uval;
if (val < 0) {
- val = ((-val)<<1) | 1;
+ // (unsigned int)(-val) has an undefined behavior for INT_MIN
+ uval = ((0 - (unsigned int)val) << 1) | 1;
}
else {
- val = val << 1;
+ uval = (unsigned int)val << 1;
}
- return write_varint(ptr, val);
+ return write_varint(ptr, uval);
}
static inline int
write_location_entry_start(uint8_t *ptr, int code, int length)
{
assert((code & 15) == code);
- *ptr = 128 | (code << 3) | (length - 1);
+ *ptr = 128 | (uint8_t)(code << 3) | (uint8_t)(length - 1);
return 1;
}
@@ -499,63 +400,94 @@ write_location_entry_start(uint8_t *ptr, int code, int length)
/* With a 16-bit counter, we have 12 bits for the counter value, and 4 bits for the backoff */
#define ADAPTIVE_BACKOFF_BITS 4
-/* The initial counter value is 31 == 2**ADAPTIVE_BACKOFF_START - 1 */
-#define ADAPTIVE_BACKOFF_START 5
+
+// A value of 1 means that we attempt to specialize the *second* time each
+// instruction is executed. Executing twice is a much better indicator of
+// "hotness" than executing once, but additional warmup delays only prevent
+// specialization. Most types stabilize by the second execution, too:
+#define ADAPTIVE_WARMUP_VALUE 1
+#define ADAPTIVE_WARMUP_BACKOFF 1
+
+// A value of 52 means that we attempt to re-specialize after 53 misses (a prime
+// number, useful for avoiding artifacts if every nth value is a different type
+// or something). Setting the backoff to 0 means that the counter is reset to
+// the same state as a warming-up instruction (value == 1, backoff == 1) after
+// deoptimization. This isn't strictly necessary, but it is bit easier to reason
+// about when thinking about the opcode transitions as a state machine:
+#define ADAPTIVE_COOLDOWN_VALUE 52
+#define ADAPTIVE_COOLDOWN_BACKOFF 0
#define MAX_BACKOFF_VALUE (16 - ADAPTIVE_BACKOFF_BITS)
static inline uint16_t
-adaptive_counter_bits(int value, int backoff) {
- return (value << ADAPTIVE_BACKOFF_BITS) |
- (backoff & ((1<<ADAPTIVE_BACKOFF_BITS)-1));
+adaptive_counter_bits(uint16_t value, uint16_t backoff) {
+ return ((value << ADAPTIVE_BACKOFF_BITS)
+ | (backoff & ((1 << ADAPTIVE_BACKOFF_BITS) - 1)));
}
static inline uint16_t
-adaptive_counter_start(void) {
- unsigned int value = (1 << ADAPTIVE_BACKOFF_START) - 1;
- return adaptive_counter_bits(value, ADAPTIVE_BACKOFF_START);
+adaptive_counter_warmup(void) {
+ return adaptive_counter_bits(ADAPTIVE_WARMUP_VALUE,
+ ADAPTIVE_WARMUP_BACKOFF);
+}
+
+static inline uint16_t
+adaptive_counter_cooldown(void) {
+ return adaptive_counter_bits(ADAPTIVE_COOLDOWN_VALUE,
+ ADAPTIVE_COOLDOWN_BACKOFF);
}
static inline uint16_t
adaptive_counter_backoff(uint16_t counter) {
- unsigned int backoff = counter & ((1<<ADAPTIVE_BACKOFF_BITS)-1);
+ uint16_t backoff = counter & ((1 << ADAPTIVE_BACKOFF_BITS) - 1);
backoff++;
if (backoff > MAX_BACKOFF_VALUE) {
backoff = MAX_BACKOFF_VALUE;
}
- unsigned int value = (1 << backoff) - 1;
+ uint16_t value = (uint16_t)(1 << backoff) - 1;
return adaptive_counter_bits(value, backoff);
}
/* Line array cache for tracing */
-extern int _PyCode_CreateLineArray(PyCodeObject *co);
+typedef struct _PyShimCodeDef {
+ const uint8_t *code;
+ int codelen;
+ int stacksize;
+ const char *cname;
+} _PyShimCodeDef;
-static inline int
-_PyCode_InitLineArray(PyCodeObject *co)
-{
- if (co->_co_linearray) {
- return 0;
- }
- return _PyCode_CreateLineArray(co);
-}
+extern PyCodeObject *
+_Py_MakeShimCode(const _PyShimCodeDef *code);
-static inline int
-_PyCode_LineNumberFromArray(PyCodeObject *co, int index)
-{
- assert(co->_co_linearray != NULL);
- assert(index >= 0);
- assert(index < Py_SIZE(co));
- if (co->_co_linearray_entry_size == 2) {
- return ((int16_t *)co->_co_linearray)[index];
- }
- else {
- assert(co->_co_linearray_entry_size == 4);
- return ((int32_t *)co->_co_linearray)[index];
- }
-}
+extern uint32_t _Py_next_func_version;
+
+
+/* Comparison bit masks. */
+
+/* Note this evaluates its arguments twice each */
+#define COMPARISON_BIT(x, y) (1 << (2 * ((x) >= (y)) + ((x) <= (y))))
+
+/*
+ * The following bits are chosen so that the value of
+ * COMPARSION_BIT(left, right)
+ * masked by the values below will be non-zero if the
+ * comparison is true, and zero if it is false */
+
+/* This is for values that are unordered, ie. NaN, not types that are unordered, e.g. sets */
+#define COMPARISON_UNORDERED 1
+
+#define COMPARISON_LESS_THAN 2
+#define COMPARISON_GREATER_THAN 4
+#define COMPARISON_EQUALS 8
+
+#define COMPARISON_NOT_EQUALS (COMPARISON_UNORDERED | COMPARISON_LESS_THAN | COMPARISON_GREATER_THAN)
+
+extern int _Py_Instrument(PyCodeObject *co, PyInterpreterState *interp);
+
+extern int _Py_GetBaseOpcode(PyCodeObject *code, int offset);
#ifdef __cplusplus
diff --git a/contrib/tools/python3/src/Include/internal/pycore_compile.h b/contrib/tools/python3/src/Include/internal/pycore_compile.h
index 06a6082cdd..80a637e5bf 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_compile.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_compile.h
@@ -18,12 +18,8 @@ PyAPI_FUNC(PyCodeObject*) _PyAST_Compile(
PyCompilerFlags *flags,
int optimize,
struct _arena *arena);
-extern PyFutureFeatures* _PyFuture_FromAST(
- struct _mod * mod,
- PyObject *filename
- );
-extern PyObject* _Py_Mangle(PyObject *p, PyObject *name);
+static const _PyCompilerSrcLocation NO_LOCATION = {-1, -1, -1, -1};
typedef struct {
int optimize;
@@ -38,6 +34,84 @@ extern int _PyAST_Optimize(
struct _arena *arena,
_PyASTOptimizeState *state);
+typedef struct {
+ int h_offset;
+ int h_startdepth;
+ int h_preserve_lasti;
+} _PyCompile_ExceptHandlerInfo;
+
+typedef struct {
+ int i_opcode;
+ int i_oparg;
+ _PyCompilerSrcLocation i_loc;
+ _PyCompile_ExceptHandlerInfo i_except_handler_info;
+} _PyCompile_Instruction;
+
+typedef struct {
+ _PyCompile_Instruction *s_instrs;
+ int s_allocated;
+ int s_used;
+
+ int *s_labelmap; /* label id --> instr offset */
+ int s_labelmap_size;
+ int s_next_free_label; /* next free label id */
+} _PyCompile_InstructionSequence;
+
+typedef struct {
+ PyObject *u_name;
+ PyObject *u_qualname; /* dot-separated qualified name (lazy) */
+
+ /* The following fields are dicts that map objects to
+ the index of them in co_XXX. The index is used as
+ the argument for opcodes that refer to those collections.
+ */
+ PyObject *u_consts; /* all constants */
+ PyObject *u_names; /* all names */
+ PyObject *u_varnames; /* local variables */
+ PyObject *u_cellvars; /* cell variables */
+ PyObject *u_freevars; /* free variables */
+ PyObject *u_fasthidden; /* dict; keys are names that are fast-locals only
+ temporarily within an inlined comprehension. When
+ value is True, treat as fast-local. */
+
+ Py_ssize_t u_argcount; /* number of arguments for block */
+ Py_ssize_t u_posonlyargcount; /* number of positional only arguments for block */
+ Py_ssize_t u_kwonlyargcount; /* number of keyword only arguments for block */
+
+ int u_firstlineno; /* the first lineno of the block */
+} _PyCompile_CodeUnitMetadata;
+
+
+/* Utility for a number of growing arrays used in the compiler */
+int _PyCompile_EnsureArrayLargeEnough(
+ int idx,
+ void **array,
+ int *alloc,
+ int default_alloc,
+ size_t item_size);
+
+int _PyCompile_ConstCacheMergeOne(PyObject *const_cache, PyObject **obj);
+
+int _PyCompile_InstrSize(int opcode, int oparg);
+
+/* Access compiler internals for unit testing */
+
+PyAPI_FUNC(PyObject*) _PyCompile_CodeGen(
+ PyObject *ast,
+ PyObject *filename,
+ PyCompilerFlags *flags,
+ int optimize,
+ int compile_mode);
+
+PyAPI_FUNC(PyObject*) _PyCompile_OptimizeCfg(
+ PyObject *instructions,
+ PyObject *consts,
+ int nlocals);
+
+PyAPI_FUNC(PyCodeObject*)
+_PyCompile_Assemble(_PyCompile_CodeUnitMetadata *umd, PyObject *filename,
+ PyObject *instructions);
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_context.h b/contrib/tools/python3/src/Include/internal/pycore_context.h
index 1bf4e8f3ee..52dfe3ef23 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_context.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_context.h
@@ -18,6 +18,10 @@ void _PyContext_Fini(PyInterpreterState *);
/* other API */
+typedef struct {
+ PyObject_HEAD
+} _PyContextTokenMissing;
+
#ifndef WITH_FREELISTS
// without freelists
# define PyContext_MAXFREELIST 0
diff --git a/contrib/tools/python3/src/Include/internal/pycore_descrobject.h b/contrib/tools/python3/src/Include/internal/pycore_descrobject.h
new file mode 100644
index 0000000000..76378569df
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_descrobject.h
@@ -0,0 +1,26 @@
+#ifndef Py_INTERNAL_DESCROBJECT_H
+#define Py_INTERNAL_DESCROBJECT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+typedef struct {
+ PyObject_HEAD
+ PyObject *prop_get;
+ PyObject *prop_set;
+ PyObject *prop_del;
+ PyObject *prop_doc;
+ PyObject *prop_name;
+ int getter_doc;
+} propertyobject;
+
+typedef propertyobject _PyPropertyObject;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_DESCROBJECT_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_dict.h b/contrib/tools/python3/src/Include/internal/pycore_dict.h
index dc308fe5e2..6253e0841a 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_dict.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_dict.h
@@ -9,6 +9,9 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
+#include "pycore_dict_state.h"
+#include "pycore_runtime.h" // _PyRuntime
+
/* runtime lifecycle */
@@ -17,25 +20,6 @@ extern void _PyDict_Fini(PyInterpreterState *interp);
/* other API */
-#ifndef WITH_FREELISTS
-// without freelists
-# define PyDict_MAXFREELIST 0
-#endif
-
-#ifndef PyDict_MAXFREELIST
-# define PyDict_MAXFREELIST 80
-#endif
-
-struct _Py_dict_state {
-#if PyDict_MAXFREELIST > 0
- /* Dictionary reuse scheme to save calls to malloc and free */
- PyDictObject *free_list[PyDict_MAXFREELIST];
- int numfree;
- PyDictKeysObject *keys_free_list[PyDict_MAXFREELIST];
- int keys_numfree;
-#endif
-};
-
typedef struct {
/* Cached hash code of me_key. */
Py_hash_t me_hash;
@@ -53,16 +37,17 @@ extern PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *);
/* Gets a version number unique to the current state of the keys of dict, if possible.
* Returns the version number, or zero if it was not possible to get a version number. */
-extern uint32_t _PyDictKeys_GetVersionForCurrentState(PyDictKeysObject *dictkeys);
+extern uint32_t _PyDictKeys_GetVersionForCurrentState(
+ PyInterpreterState *interp, PyDictKeysObject *dictkeys);
-extern Py_ssize_t _PyDict_KeysSize(PyDictKeysObject *keys);
+extern size_t _PyDict_KeysSize(PyDictKeysObject *keys);
/* _Py_dict_lookup() returns index of entry which can be used like DK_ENTRIES(dk)[index].
* -1 when no entry found, -3 when compare raises error.
*/
extern Py_ssize_t _Py_dict_lookup(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject **value_addr);
-extern Py_ssize_t _PyDict_GetItemHint(PyDictObject *, PyObject *, Py_ssize_t, PyObject **);
+extern Py_ssize_t _PyDict_LookupIndex(PyDictObject *, PyObject *);
extern Py_ssize_t _PyDictKeys_StringLookup(PyDictKeysObject* dictkeys, PyObject *key);
extern PyObject *_PyDict_LoadGlobal(PyDictObject *, PyDictObject *, PyObject *);
@@ -138,21 +123,57 @@ struct _dictvalues {
PyObject *values[1];
};
-#define DK_LOG_SIZE(dk) ((dk)->dk_log2_size)
+#define DK_LOG_SIZE(dk) _Py_RVALUE((dk)->dk_log2_size)
#if SIZEOF_VOID_P > 4
#define DK_SIZE(dk) (((int64_t)1)<<DK_LOG_SIZE(dk))
#else
#define DK_SIZE(dk) (1<<DK_LOG_SIZE(dk))
#endif
-#define DK_ENTRIES(dk) \
- (assert(dk->dk_kind == DICT_KEYS_GENERAL), (PyDictKeyEntry*)(&((int8_t*)((dk)->dk_indices))[(size_t)1 << (dk)->dk_log2_index_bytes]))
-#define DK_UNICODE_ENTRIES(dk) \
- (assert(dk->dk_kind != DICT_KEYS_GENERAL), (PyDictUnicodeEntry*)(&((int8_t*)((dk)->dk_indices))[(size_t)1 << (dk)->dk_log2_index_bytes]))
-#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
-extern uint64_t _pydict_global_version;
+static inline void* _DK_ENTRIES(PyDictKeysObject *dk) {
+ int8_t *indices = (int8_t*)(dk->dk_indices);
+ size_t index = (size_t)1 << dk->dk_log2_index_bytes;
+ return (&indices[index]);
+}
+static inline PyDictKeyEntry* DK_ENTRIES(PyDictKeysObject *dk) {
+ assert(dk->dk_kind == DICT_KEYS_GENERAL);
+ return (PyDictKeyEntry*)_DK_ENTRIES(dk);
+}
+static inline PyDictUnicodeEntry* DK_UNICODE_ENTRIES(PyDictKeysObject *dk) {
+ assert(dk->dk_kind != DICT_KEYS_GENERAL);
+ return (PyDictUnicodeEntry*)_DK_ENTRIES(dk);
+}
+
+#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
-#define DICT_NEXT_VERSION() (++_pydict_global_version)
+#define DICT_VERSION_INCREMENT (1 << DICT_MAX_WATCHERS)
+#define DICT_VERSION_MASK (DICT_VERSION_INCREMENT - 1)
+
+#define DICT_NEXT_VERSION(INTERP) \
+ ((INTERP)->dict_state.global_version += DICT_VERSION_INCREMENT)
+
+void
+_PyDict_SendEvent(int watcher_bits,
+ PyDict_WatchEvent event,
+ PyDictObject *mp,
+ PyObject *key,
+ PyObject *value);
+
+static inline uint64_t
+_PyDict_NotifyEvent(PyInterpreterState *interp,
+ PyDict_WatchEvent event,
+ PyDictObject *mp,
+ PyObject *key,
+ PyObject *value)
+{
+ assert(Py_REFCNT((PyObject*)mp) > 0);
+ int watcher_bits = mp->ma_version_tag & DICT_VERSION_MASK;
+ if (watcher_bits) {
+ _PyDict_SendEvent(watcher_bits, event, mp, key, value);
+ return DICT_NEXT_VERSION(interp) | watcher_bits;
+ }
+ return DICT_NEXT_VERSION(interp);
+}
extern PyObject *_PyObject_MakeDictFromInstanceAttributes(PyObject *obj, PyDictValues *values);
extern PyObject *_PyDict_FromItems(
diff --git a/contrib/tools/python3/src/Include/internal/pycore_dict_state.h b/contrib/tools/python3/src/Include/internal/pycore_dict_state.h
new file mode 100644
index 0000000000..ece0f10ca2
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_dict_state.h
@@ -0,0 +1,50 @@
+#ifndef Py_INTERNAL_DICT_STATE_H
+#define Py_INTERNAL_DICT_STATE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+
+#ifndef WITH_FREELISTS
+// without freelists
+# define PyDict_MAXFREELIST 0
+#endif
+
+#ifndef PyDict_MAXFREELIST
+# define PyDict_MAXFREELIST 80
+#endif
+
+#define DICT_MAX_WATCHERS 8
+
+struct _Py_dict_state {
+ /*Global counter used to set ma_version_tag field of dictionary.
+ * It is incremented each time that a dictionary is created and each
+ * time that a dictionary is modified. */
+ uint64_t global_version;
+ uint32_t next_keys_version;
+
+#if PyDict_MAXFREELIST > 0
+ /* Dictionary reuse scheme to save calls to malloc and free */
+ PyDictObject *free_list[PyDict_MAXFREELIST];
+ PyDictKeysObject *keys_free_list[PyDict_MAXFREELIST];
+ int numfree;
+ int keys_numfree;
+#endif
+
+ PyDict_WatchCallback watchers[DICT_MAX_WATCHERS];
+};
+
+#define _dict_state_INIT \
+ { \
+ .next_keys_version = 2, \
+ }
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_DICT_STATE_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_dtoa.h b/contrib/tools/python3/src/Include/internal/pycore_dtoa.h
index c77cf6e46c..4d9681d59a 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_dtoa.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_dtoa.h
@@ -1,3 +1,5 @@
+#ifndef Py_INTERNAL_DTOA_H
+#define Py_INTERNAL_DTOA_H
#ifdef __cplusplus
extern "C" {
#endif
@@ -11,6 +13,50 @@ extern "C" {
#if _PY_SHORT_FLOAT_REPR == 1
+typedef uint32_t ULong;
+
+struct
+Bigint {
+ struct Bigint *next;
+ int k, maxwds, sign, wds;
+ ULong x[1];
+};
+
+#ifdef Py_USING_MEMORY_DEBUGGER
+
+struct _dtoa_state {
+ int _not_used;
+};
+#define _dtoa_interp_state_INIT(INTERP) \
+ {0}
+
+#else // !Py_USING_MEMORY_DEBUGGER
+
+/* The size of the Bigint freelist */
+#define Bigint_Kmax 7
+
+#ifndef PRIVATE_MEM
+#define PRIVATE_MEM 2304
+#endif
+#define Bigint_PREALLOC_SIZE \
+ ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))
+
+struct _dtoa_state {
+ /* p5s is a linked list of powers of 5 of the form 5**(2**i), i >= 2 */
+ // XXX This should be freed during runtime fini.
+ struct Bigint *p5s;
+ struct Bigint *freelist[Bigint_Kmax+1];
+ double preallocated[Bigint_PREALLOC_SIZE];
+ double *preallocated_next;
+};
+#define _dtoa_state_INIT(INTERP) \
+ { \
+ .preallocated_next = (INTERP)->dtoa.preallocated, \
+ }
+
+#endif // !Py_USING_MEMORY_DEBUGGER
+
+
/* These functions are used by modules compiled as C extension like math:
they must be exported. */
@@ -18,11 +64,10 @@ PyAPI_FUNC(double) _Py_dg_strtod(const char *str, char **ptr);
PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits,
int *decpt, int *sign, char **rve);
PyAPI_FUNC(void) _Py_dg_freedtoa(char *s);
-PyAPI_FUNC(double) _Py_dg_stdnan(int sign);
-PyAPI_FUNC(double) _Py_dg_infinity(int sign);
#endif // _PY_SHORT_FLOAT_REPR == 1
#ifdef __cplusplus
}
#endif
+#endif /* !Py_INTERNAL_DTOA_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_faulthandler.h b/contrib/tools/python3/src/Include/internal/pycore_faulthandler.h
new file mode 100644
index 0000000000..e6aec7745a
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_faulthandler.h
@@ -0,0 +1,99 @@
+#ifndef Py_INTERNAL_FAULTHANDLER_H
+#define Py_INTERNAL_FAULTHANDLER_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+#ifdef HAVE_SIGACTION
+# include <signal.h>
+#endif
+
+
+#ifndef MS_WINDOWS
+ /* register() is useless on Windows, because only SIGSEGV, SIGABRT and
+ SIGILL can be handled by the process, and these signals can only be used
+ with enable(), not using register() */
+# define FAULTHANDLER_USER
+#endif
+
+
+#ifdef HAVE_SIGACTION
+/* Using an alternative stack requires sigaltstack()
+ and sigaction() SA_ONSTACK */
+# ifdef HAVE_SIGALTSTACK
+# define FAULTHANDLER_USE_ALT_STACK
+# endif
+typedef struct sigaction _Py_sighandler_t;
+#else
+typedef PyOS_sighandler_t _Py_sighandler_t;
+#endif // HAVE_SIGACTION
+
+
+#ifdef FAULTHANDLER_USER
+struct faulthandler_user_signal {
+ int enabled;
+ PyObject *file;
+ int fd;
+ int all_threads;
+ int chain;
+ _Py_sighandler_t previous;
+ PyInterpreterState *interp;
+};
+#endif /* FAULTHANDLER_USER */
+
+
+struct _faulthandler_runtime_state {
+ struct {
+ int enabled;
+ PyObject *file;
+ int fd;
+ int all_threads;
+ PyInterpreterState *interp;
+#ifdef MS_WINDOWS
+ void *exc_handler;
+#endif
+ } fatal_error;
+
+ struct {
+ PyObject *file;
+ int fd;
+ PY_TIMEOUT_T timeout_us; /* timeout in microseconds */
+ int repeat;
+ PyInterpreterState *interp;
+ int exit;
+ char *header;
+ size_t header_len;
+ /* The main thread always holds this lock. It is only released when
+ faulthandler_thread() is interrupted before this thread exits, or at
+ Python exit. */
+ PyThread_type_lock cancel_event;
+ /* released by child thread when joined */
+ PyThread_type_lock running;
+ } thread;
+
+#ifdef FAULTHANDLER_USER
+ struct faulthandler_user_signal *user_signals;
+#endif
+
+#ifdef FAULTHANDLER_USE_ALT_STACK
+ stack_t stack;
+ stack_t old_stack;
+#endif
+};
+
+#define _faulthandler_runtime_state_INIT \
+ { \
+ .fatal_error = { \
+ .fd = -1, \
+ }, \
+ }
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_FAULTHANDLER_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_fileutils.h b/contrib/tools/python3/src/Include/internal/pycore_fileutils.h
index 332cc30365..7c2b6ec0bf 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_fileutils.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_fileutils.h
@@ -10,6 +10,11 @@ extern "C" {
#include <locale.h> /* struct lconv */
+
+struct _fileutils_state {
+ int force_ascii;
+};
+
typedef enum {
_Py_ERROR_UNKNOWN=0,
_Py_ERROR_STRICT,
@@ -61,7 +66,7 @@ PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
#ifdef MS_WINDOWS
struct _Py_stat_struct {
- unsigned long st_dev;
+ uint64_t st_dev;
uint64_t st_ino;
unsigned short st_mode;
int st_nlink;
@@ -75,8 +80,11 @@ struct _Py_stat_struct {
int st_mtime_nsec;
time_t st_ctime;
int st_ctime_nsec;
+ time_t st_birthtime;
+ int st_birthtime_nsec;
unsigned long st_file_attributes;
unsigned long st_reparse_tag;
+ uint64_t st_ino_high;
};
#else
# define _Py_stat_struct stat
@@ -155,11 +163,11 @@ PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable,
PyAPI_FUNC(int) _Py_dup(int fd);
-#ifndef MS_WINDOWS
PyAPI_FUNC(int) _Py_get_blocking(int fd);
PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
-#else /* MS_WINDOWS */
+
+#ifdef MS_WINDOWS
PyAPI_FUNC(void*) _Py_get_osfhandle_noraise(int fd);
PyAPI_FUNC(void*) _Py_get_osfhandle(int fd);
@@ -247,6 +255,14 @@ extern size_t _Py_find_basename(const wchar_t *filename);
PyAPI_FUNC(wchar_t*) _Py_normpath(wchar_t *path, Py_ssize_t size);
extern wchar_t *_Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *length);
+// The Windows Games API family does not provide these functions
+// so provide our own implementations. Remove them in case they get added
+// to the Games API family
+#if defined(MS_WINDOWS_GAMES) && !defined(MS_WINDOWS_DESKTOP)
+#include <winerror.h>
+
+extern HRESULT PathCchSkipRoot(const wchar_t *pszPath, const wchar_t **ppszRootEnd);
+#endif /* defined(MS_WINDOWS_GAMES) && !defined(MS_WINDOWS_DESKTOP) */
// Macros to protect CRT calls against instant termination when passed an
// invalid parameter (bpo-23524). IPH stands for Invalid Parameter Handler.
diff --git a/contrib/tools/python3/src/Include/internal/pycore_fileutils_windows.h b/contrib/tools/python3/src/Include/internal/pycore_fileutils_windows.h
new file mode 100644
index 0000000000..e804d385e7
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_fileutils_windows.h
@@ -0,0 +1,98 @@
+#ifndef Py_INTERNAL_FILEUTILS_WINDOWS_H
+#define Py_INTERNAL_FILEUTILS_WINDOWS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "Py_BUILD_CORE must be defined to include this header"
+#endif
+
+#ifdef MS_WINDOWS
+
+#if !defined(NTDDI_WIN10_NI) || !(NTDDI_VERSION >= NTDDI_WIN10_NI)
+typedef struct _FILE_STAT_BASIC_INFORMATION {
+ LARGE_INTEGER FileId;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER EndOfFile;
+ ULONG FileAttributes;
+ ULONG ReparseTag;
+ ULONG NumberOfLinks;
+ ULONG DeviceType;
+ ULONG DeviceCharacteristics;
+ ULONG Reserved;
+ LARGE_INTEGER VolumeSerialNumber;
+ FILE_ID_128 FileId128;
+} FILE_STAT_BASIC_INFORMATION;
+
+typedef enum _FILE_INFO_BY_NAME_CLASS {
+ FileStatByNameInfo,
+ FileStatLxByNameInfo,
+ FileCaseSensitiveByNameInfo,
+ FileStatBasicByNameInfo,
+ MaximumFileInfoByNameClass
+} FILE_INFO_BY_NAME_CLASS;
+#endif
+
+typedef BOOL (WINAPI *PGetFileInformationByName)(
+ PCWSTR FileName,
+ FILE_INFO_BY_NAME_CLASS FileInformationClass,
+ PVOID FileInfoBuffer,
+ ULONG FileInfoBufferSize
+);
+
+static inline BOOL _Py_GetFileInformationByName(
+ PCWSTR FileName,
+ FILE_INFO_BY_NAME_CLASS FileInformationClass,
+ PVOID FileInfoBuffer,
+ ULONG FileInfoBufferSize
+) {
+ static PGetFileInformationByName GetFileInformationByName = NULL;
+ static int GetFileInformationByName_init = -1;
+
+ if (GetFileInformationByName_init < 0) {
+ HMODULE hMod = LoadLibraryW(L"api-ms-win-core-file-l2-1-4");
+ GetFileInformationByName_init = 0;
+ if (hMod) {
+ GetFileInformationByName = (PGetFileInformationByName)GetProcAddress(
+ hMod, "GetFileInformationByName");
+ if (GetFileInformationByName) {
+ GetFileInformationByName_init = 1;
+ } else {
+ FreeLibrary(hMod);
+ }
+ }
+ }
+
+ if (GetFileInformationByName_init <= 0) {
+ SetLastError(ERROR_NOT_SUPPORTED);
+ return FALSE;
+ }
+ return GetFileInformationByName(FileName, FileInformationClass, FileInfoBuffer, FileInfoBufferSize);
+}
+
+static inline BOOL _Py_GetFileInformationByName_ErrorIsTrustworthy(int error)
+{
+ switch(error) {
+ case ERROR_FILE_NOT_FOUND:
+ case ERROR_PATH_NOT_FOUND:
+ case ERROR_NOT_READY:
+ case ERROR_BAD_NET_NAME:
+ case ERROR_BAD_NETPATH:
+ case ERROR_BAD_PATHNAME:
+ case ERROR_INVALID_NAME:
+ case ERROR_FILENAME_EXCED_RANGE:
+ return TRUE;
+ case ERROR_NOT_SUPPORTED:
+ return FALSE;
+ }
+ return FALSE;
+}
+
+#endif
+
+#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_floatobject.h b/contrib/tools/python3/src/Include/internal/pycore_floatobject.h
index 8a65554332..27c63bc87f 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_floatobject.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_floatobject.h
@@ -19,6 +19,18 @@ extern void _PyFloat_FiniType(PyInterpreterState *);
/* other API */
+enum _py_float_format_type {
+ _py_float_format_unknown,
+ _py_float_format_ieee_big_endian,
+ _py_float_format_ieee_little_endian,
+};
+
+struct _Py_float_runtime_state {
+ enum _py_float_format_type float_format;
+ enum _py_float_format_type double_format;
+};
+
+
#ifndef WITH_FREELISTS
// without freelists
# define PyFloat_MAXFREELIST 0
diff --git a/contrib/tools/python3/src/Include/internal/pycore_flowgraph.h b/contrib/tools/python3/src/Include/internal/pycore_flowgraph.h
new file mode 100644
index 0000000000..98d3374a75
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_flowgraph.h
@@ -0,0 +1,120 @@
+#ifndef Py_INTERNAL_CFG_H
+#define Py_INTERNAL_CFG_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+#include "pycore_opcode_utils.h"
+#include "pycore_compile.h"
+
+
+typedef struct {
+ int i_opcode;
+ int i_oparg;
+ _PyCompilerSrcLocation i_loc;
+ struct _PyCfgBasicblock_ *i_target; /* target block (if jump instruction) */
+ struct _PyCfgBasicblock_ *i_except; /* target block when exception is raised */
+} _PyCfgInstruction;
+
+typedef struct {
+ int id;
+} _PyCfgJumpTargetLabel;
+
+
+typedef struct {
+ struct _PyCfgBasicblock_ *handlers[CO_MAXBLOCKS+2];
+ int depth;
+} _PyCfgExceptStack;
+
+typedef struct _PyCfgBasicblock_ {
+ /* Each basicblock in a compilation unit is linked via b_list in the
+ reverse order that the block are allocated. b_list points to the next
+ block in this list, not to be confused with b_next, which is next by
+ control flow. */
+ struct _PyCfgBasicblock_ *b_list;
+ /* The label of this block if it is a jump target, -1 otherwise */
+ _PyCfgJumpTargetLabel b_label;
+ /* Exception stack at start of block, used by assembler to create the exception handling table */
+ _PyCfgExceptStack *b_exceptstack;
+ /* pointer to an array of instructions, initially NULL */
+ _PyCfgInstruction *b_instr;
+ /* If b_next is non-NULL, it is a pointer to the next
+ block reached by normal control flow. */
+ struct _PyCfgBasicblock_ *b_next;
+ /* number of instructions used */
+ int b_iused;
+ /* length of instruction array (b_instr) */
+ int b_ialloc;
+ /* Used by add_checks_for_loads_of_unknown_variables */
+ uint64_t b_unsafe_locals_mask;
+ /* Number of predecessors that a block has. */
+ int b_predecessors;
+ /* depth of stack upon entry of block, computed by stackdepth() */
+ int b_startdepth;
+ /* instruction offset for block, computed by assemble_jump_offsets() */
+ int b_offset;
+ /* Basic block is an exception handler that preserves lasti */
+ unsigned b_preserve_lasti : 1;
+ /* Used by compiler passes to mark whether they have visited a basic block. */
+ unsigned b_visited : 1;
+ /* b_except_handler is used by the cold-detection algorithm to mark exception targets */
+ unsigned b_except_handler : 1;
+ /* b_cold is true if this block is not perf critical (like an exception handler) */
+ unsigned b_cold : 1;
+ /* b_warm is used by the cold-detection algorithm to mark blocks which are definitely not cold */
+ unsigned b_warm : 1;
+} _PyCfgBasicblock;
+
+int _PyBasicblock_InsertInstruction(_PyCfgBasicblock *block, int pos, _PyCfgInstruction *instr);
+
+typedef struct cfg_builder_ {
+ /* The entryblock, at which control flow begins. All blocks of the
+ CFG are reachable through the b_next links */
+ _PyCfgBasicblock *g_entryblock;
+ /* Pointer to the most recently allocated block. By following
+ b_list links, you can reach all allocated blocks. */
+ _PyCfgBasicblock *g_block_list;
+ /* pointer to the block currently being constructed */
+ _PyCfgBasicblock *g_curblock;
+ /* label for the next instruction to be placed */
+ _PyCfgJumpTargetLabel g_current_label;
+} _PyCfgBuilder;
+
+int _PyCfgBuilder_UseLabel(_PyCfgBuilder *g, _PyCfgJumpTargetLabel lbl);
+int _PyCfgBuilder_Addop(_PyCfgBuilder *g, int opcode, int oparg, _PyCompilerSrcLocation loc);
+
+int _PyCfgBuilder_Init(_PyCfgBuilder *g);
+void _PyCfgBuilder_Fini(_PyCfgBuilder *g);
+
+_PyCfgInstruction* _PyCfg_BasicblockLastInstr(const _PyCfgBasicblock *b);
+int _PyCfg_OptimizeCodeUnit(_PyCfgBuilder *g, PyObject *consts, PyObject *const_cache,
+ int code_flags, int nlocals, int nparams, int firstlineno);
+int _PyCfg_Stackdepth(_PyCfgBasicblock *entryblock, int code_flags);
+void _PyCfg_ConvertPseudoOps(_PyCfgBasicblock *entryblock);
+int _PyCfg_ResolveJumps(_PyCfgBuilder *g);
+
+
+static inline int
+basicblock_nofallthrough(const _PyCfgBasicblock *b) {
+ _PyCfgInstruction *last = _PyCfg_BasicblockLastInstr(b);
+ return (last &&
+ (IS_SCOPE_EXIT_OPCODE(last->i_opcode) ||
+ IS_UNCONDITIONAL_JUMP_OPCODE(last->i_opcode)));
+}
+
+#define BB_NO_FALLTHROUGH(B) (basicblock_nofallthrough(B))
+#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
+
+PyCodeObject *
+_PyAssemble_MakeCodeObject(_PyCompile_CodeUnitMetadata *u, PyObject *const_cache,
+ PyObject *consts, int maxdepth, _PyCompile_InstructionSequence *instrs,
+ int nlocalsplus, int code_flags, PyObject *filename);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_CFG_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_frame.h b/contrib/tools/python3/src/Include/internal/pycore_frame.h
index 4866ea21b9..bfe4a759ba 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_frame.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_frame.h
@@ -6,6 +6,7 @@ extern "C" {
#include <stdbool.h>
#include <stddef.h>
+#include "pycore_code.h" // STATS
/* See Objects/frame_layout.md for an explanation of the frame stack
* including explanation of the PyFrameObject and _PyInterpreterFrame
@@ -38,29 +39,36 @@ typedef enum _framestate {
FRAME_CLEARED = 4
} PyFrameState;
+#define FRAME_STATE_FINISHED(S) ((S) >= FRAME_COMPLETED)
+
enum _frameowner {
FRAME_OWNED_BY_THREAD = 0,
FRAME_OWNED_BY_GENERATOR = 1,
- FRAME_OWNED_BY_FRAME_OBJECT = 2
+ FRAME_OWNED_BY_FRAME_OBJECT = 2,
+ FRAME_OWNED_BY_CSTACK = 3,
};
typedef struct _PyInterpreterFrame {
- /* "Specials" section */
- PyFunctionObject *f_func; /* Strong reference */
- PyObject *f_globals; /* Borrowed reference */
- PyObject *f_builtins; /* Borrowed reference */
- PyObject *f_locals; /* Strong reference, may be NULL */
PyCodeObject *f_code; /* Strong reference */
- PyFrameObject *frame_obj; /* Strong reference, may be NULL */
- /* Linkage section */
struct _PyInterpreterFrame *previous;
+ PyObject *f_funcobj; /* Strong reference. Only valid if not on C stack */
+ PyObject *f_globals; /* Borrowed reference. Only valid if not on C stack */
+ PyObject *f_builtins; /* Borrowed reference. Only valid if not on C stack */
+ PyObject *f_locals; /* Strong reference, may be NULL. Only valid if not on C stack */
+ PyFrameObject *frame_obj; /* Strong reference, may be NULL. Only valid if not on C stack */
// NOTE: This is not necessarily the last instruction started in the given
// frame. Rather, it is the code unit *prior to* the *next* instruction. For
// example, it may be an inline CACHE entry, an instruction we just jumped
// over, or (in the case of a newly-created frame) a totally invalid value:
_Py_CODEUNIT *prev_instr;
- int stacktop; /* Offset of TOS from localsplus */
- bool is_entry; // Whether this is the "root" frame for the current _PyCFrame.
+ int stacktop; /* Offset of TOS from localsplus */
+ /* The return_offset determines where a `RETURN` should go in the caller,
+ * relative to `prev_instr`.
+ * It is only meaningful to the callee,
+ * so it needs to be set in any CALL (to a Python function)
+ * or SEND (to a coroutine or generator).
+ * If there is no callee, then it is meaningless. */
+ uint16_t return_offset;
char owner;
/* Locals and stack */
PyObject *localsplus[1];
@@ -90,7 +98,16 @@ static inline void _PyFrame_StackPush(_PyInterpreterFrame *f, PyObject *value) {
f->stacktop++;
}
-#define FRAME_SPECIALS_SIZE ((sizeof(_PyInterpreterFrame)-1)/sizeof(PyObject *))
+#define FRAME_SPECIALS_SIZE ((int)((sizeof(_PyInterpreterFrame)-1)/sizeof(PyObject *)))
+
+static inline int
+_PyFrame_NumSlotsForCodeObject(PyCodeObject *code)
+{
+ /* This function needs to remain in sync with the calculation of
+ * co_framesize in Tools/build/deepfreeze.py */
+ assert(code->co_framesize >= FRAME_SPECIALS_SIZE);
+ return code->co_framesize - FRAME_SPECIALS_SIZE;
+}
void _PyFrame_Copy(_PyInterpreterFrame *src, _PyInterpreterFrame *dest);
@@ -99,20 +116,24 @@ void _PyFrame_Copy(_PyInterpreterFrame *src, _PyInterpreterFrame *dest);
when frame is linked into the frame stack.
*/
static inline void
-_PyFrame_InitializeSpecials(
+_PyFrame_Initialize(
_PyInterpreterFrame *frame, PyFunctionObject *func,
- PyObject *locals, int nlocalsplus)
+ PyObject *locals, PyCodeObject *code, int null_locals_from)
{
- frame->f_func = func;
- frame->f_code = (PyCodeObject *)Py_NewRef(func->func_code);
+ frame->f_funcobj = (PyObject *)func;
+ frame->f_code = (PyCodeObject *)Py_NewRef(code);
frame->f_builtins = func->func_builtins;
frame->f_globals = func->func_globals;
- frame->f_locals = Py_XNewRef(locals);
- frame->stacktop = nlocalsplus;
+ frame->f_locals = locals;
+ frame->stacktop = code->co_nlocalsplus;
frame->frame_obj = NULL;
- frame->prev_instr = _PyCode_CODE(frame->f_code) - 1;
- frame->is_entry = false;
+ frame->prev_instr = _PyCode_CODE(code) - 1;
+ frame->return_offset = 0;
frame->owner = FRAME_OWNED_BY_THREAD;
+
+ for (int i = null_locals_from; i < code->co_nlocalsplus; i++) {
+ frame->localsplus[i] = NULL;
+ }
}
/* Gets the pointer to the locals array
@@ -124,10 +145,16 @@ _PyFrame_GetLocalsArray(_PyInterpreterFrame *frame)
return frame->localsplus;
}
+/* Fetches the stack pointer, and sets stacktop to -1.
+ Having stacktop <= 0 ensures that invalid
+ values are not visible to the cycle GC.
+ We choose -1 rather than 0 to assist debugging. */
static inline PyObject**
_PyFrame_GetStackPointer(_PyInterpreterFrame *frame)
{
- return frame->localsplus+frame->stacktop;
+ PyObject **sp = frame->localsplus + frame->stacktop;
+ frame->stacktop = -1;
+ return sp;
}
static inline void
@@ -151,6 +178,21 @@ _PyFrame_IsIncomplete(_PyInterpreterFrame *frame)
frame->prev_instr < _PyCode_CODE(frame->f_code) + frame->f_code->_co_firsttraceable;
}
+static inline _PyInterpreterFrame *
+_PyFrame_GetFirstComplete(_PyInterpreterFrame *frame)
+{
+ while (frame && _PyFrame_IsIncomplete(frame)) {
+ frame = frame->previous;
+ }
+ return frame;
+}
+
+static inline _PyInterpreterFrame *
+_PyThreadState_GetFrame(PyThreadState *tstate)
+{
+ return _PyFrame_GetFirstComplete(tstate->cframe->current_frame);
+}
+
/* For use by _PyFrame_GetFrameObject
Do not call directly. */
PyFrameObject *
@@ -181,22 +223,22 @@ _PyFrame_GetFrameObject(_PyInterpreterFrame *frame)
* frames like the ones in generators and coroutines.
*/
void
-_PyFrame_Clear(_PyInterpreterFrame * frame);
+_PyFrame_ClearExceptCode(_PyInterpreterFrame * frame);
int
_PyFrame_Traverse(_PyInterpreterFrame *frame, visitproc visit, void *arg);
+PyObject *
+_PyFrame_GetLocals(_PyInterpreterFrame *frame, int include_hidden);
+
int
_PyFrame_FastToLocalsWithError(_PyInterpreterFrame *frame);
void
_PyFrame_LocalsToFast(_PyInterpreterFrame *frame, int clear);
-extern _PyInterpreterFrame *
-_PyThreadState_BumpFramePointerSlow(PyThreadState *tstate, size_t size);
-
static inline bool
-_PyThreadState_HasStackSpace(PyThreadState *tstate, size_t size)
+_PyThreadState_HasStackSpace(PyThreadState *tstate, int size)
{
assert(
(tstate->datastack_top == NULL && tstate->datastack_limit == NULL)
@@ -204,27 +246,28 @@ _PyThreadState_HasStackSpace(PyThreadState *tstate, size_t size)
(tstate->datastack_top != NULL && tstate->datastack_limit != NULL)
);
return tstate->datastack_top != NULL &&
- size < (size_t)(tstate->datastack_limit - tstate->datastack_top);
+ size < tstate->datastack_limit - tstate->datastack_top;
}
-static inline _PyInterpreterFrame *
-_PyThreadState_BumpFramePointer(PyThreadState *tstate, size_t size)
-{
- if (_PyThreadState_HasStackSpace(tstate, size)) {
- _PyInterpreterFrame *res = (_PyInterpreterFrame *)tstate->datastack_top;
- tstate->datastack_top += size;
- return res;
- }
- return _PyThreadState_BumpFramePointerSlow(tstate, size);
-}
+extern _PyInterpreterFrame *
+_PyThreadState_PushFrame(PyThreadState *tstate, size_t size);
void _PyThreadState_PopFrame(PyThreadState *tstate, _PyInterpreterFrame *frame);
-/* Consume reference to func */
-_PyInterpreterFrame *
-_PyFrame_Push(PyThreadState *tstate, PyFunctionObject *func);
-
-int _PyInterpreterFrame_GetLine(_PyInterpreterFrame *frame);
+/* Pushes a frame without checking for space.
+ * Must be guarded by _PyThreadState_HasStackSpace()
+ * Consumes reference to func. */
+static inline _PyInterpreterFrame *
+_PyFrame_PushUnchecked(PyThreadState *tstate, PyFunctionObject *func, int null_locals_from)
+{
+ CALL_STAT_INC(frames_pushed);
+ PyCodeObject *code = (PyCodeObject *)func->func_code;
+ _PyInterpreterFrame *new_frame = (_PyInterpreterFrame *)tstate->datastack_top;
+ tstate->datastack_top += code->co_framesize;
+ assert(tstate->datastack_top < tstate->datastack_limit);
+ _PyFrame_Initialize(new_frame, func, NULL, code, null_locals_from);
+ return new_frame;
+}
static inline
PyGenObject *_PyFrame_GetGenerator(_PyInterpreterFrame *frame)
diff --git a/contrib/tools/python3/src/Include/internal/pycore_function.h b/contrib/tools/python3/src/Include/internal/pycore_function.h
index 1c87aa31dd..ecbb7001e7 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_function.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_function.h
@@ -8,9 +8,17 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
+#define FUNC_MAX_WATCHERS 8
+
+struct _py_func_state {
+ uint32_t next_version;
+};
+
extern PyFunctionObject* _PyFunction_FromConstructor(PyFrameConstructor *constr);
extern uint32_t _PyFunction_GetVersionForCurrentState(PyFunctionObject *func);
+extern PyObject *_Py_set_function_type_params(
+ PyThreadState* unused, PyObject *func, PyObject *type_params);
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/internal/pycore_gc.h b/contrib/tools/python3/src/Include/internal/pycore_gc.h
index 16c1893639..b3abe2030a 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_gc.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_gc.h
@@ -19,17 +19,29 @@ typedef struct {
uintptr_t _gc_prev;
} PyGC_Head;
-#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1)
+static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
+ return (_Py_CAST(PyGC_Head*, op) - 1);
+}
#define _PyGC_Head_UNUSED PyGC_Head
/* True if the object is currently tracked by the GC. */
-#define _PyObject_GC_IS_TRACKED(o) (_Py_AS_GC(o)->_gc_next != 0)
+static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
+ PyGC_Head *gc = _Py_AS_GC(op);
+ return (gc->_gc_next != 0);
+}
+#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
/* True if the object may be tracked by the GC in the future, or already is.
This can be useful to implement some optimizations. */
-#define _PyObject_GC_MAY_BE_TRACKED(obj) \
- (PyObject_IS_GC(obj) && \
- (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj)))
+static inline int _PyObject_GC_MAY_BE_TRACKED(PyObject *obj) {
+ if (!PyObject_IS_GC(obj)) {
+ return 0;
+ }
+ if (PyTuple_CheckExact(obj)) {
+ return _PyObject_GC_IS_TRACKED(obj);
+ }
+ return 1;
+}
/* Bit flags for _gc_prev */
@@ -43,26 +55,40 @@ typedef struct {
// Lowest bit of _gc_next is used for flags only in GC.
// But it is always 0 for normal code.
-#define _PyGCHead_NEXT(g) ((PyGC_Head*)(g)->_gc_next)
-#define _PyGCHead_SET_NEXT(g, p) _Py_RVALUE((g)->_gc_next = (uintptr_t)(p))
+static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
+ uintptr_t next = gc->_gc_next;
+ return _Py_CAST(PyGC_Head*, next);
+}
+static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
+ gc->_gc_next = _Py_CAST(uintptr_t, next);
+}
// Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags.
-#define _PyGCHead_PREV(g) ((PyGC_Head*)((g)->_gc_prev & _PyGC_PREV_MASK))
-#define _PyGCHead_SET_PREV(g, p) do { \
- assert(((uintptr_t)p & ~_PyGC_PREV_MASK) == 0); \
- (g)->_gc_prev = ((g)->_gc_prev & ~_PyGC_PREV_MASK) \
- | ((uintptr_t)(p)); \
- } while (0)
+static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
+ uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
+ return _Py_CAST(PyGC_Head*, prev);
+}
+static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
+ uintptr_t uprev = _Py_CAST(uintptr_t, prev);
+ assert((uprev & ~_PyGC_PREV_MASK) == 0);
+ gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
+}
-#define _PyGCHead_FINALIZED(g) \
- (((g)->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0)
-#define _PyGCHead_SET_FINALIZED(g) \
- _Py_RVALUE((g)->_gc_prev |= _PyGC_PREV_MASK_FINALIZED)
+static inline int _PyGCHead_FINALIZED(PyGC_Head *gc) {
+ return ((gc->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0);
+}
+static inline void _PyGCHead_SET_FINALIZED(PyGC_Head *gc) {
+ gc->_gc_prev |= _PyGC_PREV_MASK_FINALIZED;
+}
-#define _PyGC_FINALIZED(o) \
- _PyGCHead_FINALIZED(_Py_AS_GC(o))
-#define _PyGC_SET_FINALIZED(o) \
- _PyGCHead_SET_FINALIZED(_Py_AS_GC(o))
+static inline int _PyGC_FINALIZED(PyObject *op) {
+ PyGC_Head *gc = _Py_AS_GC(op);
+ return _PyGCHead_FINALIZED(gc);
+}
+static inline void _PyGC_SET_FINALIZED(PyObject *op) {
+ PyGC_Head *gc = _Py_AS_GC(op);
+ _PyGCHead_SET_FINALIZED(gc);
+}
/* GC runtime state */
@@ -176,6 +202,8 @@ extern void _PyList_ClearFreeList(PyInterpreterState *interp);
extern void _PyDict_ClearFreeList(PyInterpreterState *interp);
extern void _PyAsyncGen_ClearFreeLists(PyInterpreterState *interp);
extern void _PyContext_ClearFreeList(PyInterpreterState *interp);
+extern void _Py_ScheduleGC(PyInterpreterState *interp);
+extern void _Py_RunGC(PyThreadState *tstate);
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/internal/pycore_genobject.h b/contrib/tools/python3/src/Include/internal/pycore_genobject.h
index 42db0d87d1..dc60b4ca70 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_genobject.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_genobject.h
@@ -10,7 +10,7 @@ extern "C" {
extern PyObject *_PyGen_yf(PyGenObject *);
extern PyObject *_PyCoro_GetAwaitableIter(PyObject *o);
-extern PyObject *_PyAsyncGenValueWrapperNew(PyObject *);
+extern PyObject *_PyAsyncGenValueWrapperNew(PyThreadState *state, PyObject *);
/* runtime lifecycle */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_global_objects.h b/contrib/tools/python3/src/Include/internal/pycore_global_objects.h
index 98673d4efc..442f851627 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_global_objects.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_global_objects.h
@@ -8,8 +8,12 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
+#include "pycore_hashtable.h" // _Py_hashtable_t
#include "pycore_gc.h" // PyGC_Head
#include "pycore_global_strings.h" // struct _Py_global_strings
+#include "pycore_hamt.h" // PyHamtNode_Bitmap
+#include "pycore_context.h" // _PyContextTokenMissing
+#include "pycore_typeobject.h" // pytype_slotdef
// These would be in pycore_long.h if it weren't for an include cycle.
@@ -21,11 +25,16 @@ extern "C" {
// All others must be per-interpreter.
#define _Py_GLOBAL_OBJECT(NAME) \
- _PyRuntime.global_objects.NAME
+ _PyRuntime.static_objects.NAME
#define _Py_SINGLETON(NAME) \
_Py_GLOBAL_OBJECT(singletons.NAME)
-struct _Py_global_objects {
+struct _Py_cached_objects {
+ // XXX We could statically allocate the hashtable.
+ _Py_hashtable_t *interned_strings;
+};
+
+struct _Py_static_objects {
struct {
/* Small integers are preallocated in this array so that they
* can be shared.
@@ -44,6 +53,48 @@ struct _Py_global_objects {
_PyGC_Head_UNUSED _tuple_empty_gc_not_used;
PyTupleObject tuple_empty;
+
+ _PyGC_Head_UNUSED _hamt_bitmap_node_empty_gc_not_used;
+ PyHamtNode_Bitmap hamt_bitmap_node_empty;
+ _PyContextTokenMissing context_token_missing;
+ } singletons;
+};
+
+#define _Py_INTERP_CACHED_OBJECT(interp, NAME) \
+ (interp)->cached_objects.NAME
+
+struct _Py_interp_cached_objects {
+ PyObject *interned_strings;
+
+ /* AST */
+ PyObject *str_replace_inf;
+
+ /* object.__reduce__ */
+ PyObject *objreduce;
+ PyObject *type_slots_pname;
+ pytype_slotdef *type_slots_ptrs[MAX_EQUIV];
+
+ /* TypeVar and related types */
+ PyTypeObject *generic_type;
+ PyTypeObject *typevar_type;
+ PyTypeObject *typevartuple_type;
+ PyTypeObject *paramspec_type;
+ PyTypeObject *paramspecargs_type;
+ PyTypeObject *paramspeckwargs_type;
+};
+
+#define _Py_INTERP_STATIC_OBJECT(interp, NAME) \
+ (interp)->static_objects.NAME
+#define _Py_INTERP_SINGLETON(interp, NAME) \
+ _Py_INTERP_STATIC_OBJECT(interp, singletons.NAME)
+
+struct _Py_interp_static_objects {
+ struct {
+ int _not_used;
+ // hamt_empty is here instead of global because of its weakreflist.
+ _PyGC_Head_UNUSED _hamt_empty_gc_not_used;
+ PyHamtObject hamt_empty;
+ PyBaseExceptionObject last_resort_memory_error;
} singletons;
};
diff --git a/contrib/tools/python3/src/Include/internal/pycore_global_objects_fini_generated.h b/contrib/tools/python3/src/Include/internal/pycore_global_objects_fini_generated.h
new file mode 100644
index 0000000000..439f47a263
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_global_objects_fini_generated.h
@@ -0,0 +1,1531 @@
+#ifndef Py_INTERNAL_GLOBAL_OBJECTS_FINI_GENERATED_INIT_H
+#define Py_INTERNAL_GLOBAL_OBJECTS_FINI_GENERATED_INIT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+#ifdef Py_DEBUG
+static inline void
+_PyStaticObject_CheckRefcnt(PyObject *obj) {
+ if (Py_REFCNT(obj) < _Py_IMMORTAL_REFCNT) {
+ fprintf(stderr, "Immortal Object has less refcnt than expected.\n");
+ _PyObject_Dump(obj);
+ }
+}
+#endif
+
+/* The following is auto-generated by Tools/build/generate_global_objects.py. */
+#ifdef Py_DEBUG
+static inline void
+_PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
+ /* generated runtime-global */
+ // (see pycore_runtime_init_generated.h)
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + -5]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + -4]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + -3]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + -2]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + -1]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 0]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 1]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 2]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 3]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 4]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 5]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 6]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 7]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 8]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 9]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 10]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 11]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 12]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 13]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 14]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 15]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 16]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 17]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 18]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 19]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 20]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 21]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 22]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 23]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 24]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 25]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 26]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 27]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 28]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 29]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 30]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 31]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 32]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 33]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 34]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 35]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 36]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 37]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 38]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 39]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 40]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 41]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 42]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 43]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 44]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 45]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 46]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 47]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 48]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 49]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 50]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 51]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 52]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 53]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 54]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 55]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 56]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 57]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 58]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 59]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 60]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 61]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 62]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 63]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 64]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 65]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 66]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 67]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 68]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 69]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 70]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 71]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 72]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 73]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 74]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 75]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 76]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 77]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 78]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 79]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 80]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 81]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 82]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 83]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 84]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 85]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 86]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 87]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 88]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 89]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 90]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 91]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 92]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 93]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 94]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 95]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 96]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 97]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 98]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 99]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 100]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 101]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 102]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 103]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 104]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 105]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 106]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 107]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 108]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 109]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 110]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 111]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 112]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 113]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 114]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 115]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 116]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 117]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 118]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 119]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 120]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 121]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 122]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 123]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 124]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 125]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 126]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 127]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 129]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 130]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 131]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 132]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 133]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 134]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 135]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 136]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 137]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 138]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 139]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 140]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 141]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 142]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 143]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 144]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 145]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 146]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 147]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 148]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 149]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 150]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 151]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 152]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 153]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 154]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 155]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 156]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 157]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 158]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 159]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 160]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 161]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 162]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 163]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 164]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 165]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 166]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 167]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 168]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 169]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 170]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 171]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 172]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 173]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 174]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 175]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 176]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 177]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 178]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 179]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 180]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 181]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 182]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 183]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 184]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 185]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 186]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 187]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 188]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 189]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 190]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 191]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 192]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 193]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 194]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 195]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 196]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 197]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 198]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 199]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 200]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 201]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 202]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 203]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 204]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 205]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 206]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 207]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 208]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 209]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 210]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 211]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 212]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 213]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 214]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 215]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 216]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 217]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 218]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 219]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 220]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 221]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 222]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 223]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 224]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 225]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 226]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 227]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 228]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 229]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 230]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 231]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 232]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 233]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 234]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 235]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 236]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 237]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 238]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 239]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 240]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 241]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 242]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 243]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 244]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 245]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 246]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 247]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 248]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 249]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 250]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 251]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 252]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 253]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 254]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 255]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(small_ints)[_PY_NSMALLNEGINTS + 256]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[0]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[1]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[2]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[3]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[4]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[5]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[6]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[7]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[8]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[9]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[10]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[11]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[12]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[13]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[14]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[15]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[16]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[17]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[18]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[19]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[20]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[21]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[22]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[23]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[24]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[25]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[26]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[27]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[28]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[29]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[30]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[31]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[32]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[33]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[34]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[35]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[36]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[37]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[38]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[39]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[40]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[41]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[42]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[43]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[44]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[45]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[46]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[47]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[48]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[49]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[50]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[51]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[52]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[53]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[54]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[55]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[56]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[57]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[58]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[59]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[60]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[61]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[62]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[63]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[64]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[65]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[66]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[67]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[68]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[69]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[70]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[71]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[72]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[73]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[74]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[75]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[76]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[77]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[78]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[79]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[80]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[81]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[82]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[83]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[84]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[85]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[86]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[87]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[88]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[89]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[90]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[91]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[92]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[93]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[94]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[95]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[96]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[97]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[98]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[99]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[100]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[101]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[102]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[103]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[104]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[105]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[106]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[107]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[108]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[109]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[110]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[111]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[112]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[113]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[114]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[115]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[116]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[117]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[118]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[119]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[120]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[121]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[122]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[123]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[124]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[125]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[126]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[127]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[129]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[130]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[131]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[132]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[133]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[134]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[135]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[136]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[137]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[138]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[139]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[140]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[141]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[142]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[143]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[144]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[145]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[146]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[147]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[148]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[149]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[150]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[151]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[152]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[153]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[154]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[155]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[156]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[157]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[158]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[159]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[160]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[161]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[162]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[163]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[164]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[165]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[166]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[167]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[168]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[169]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[170]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[171]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[172]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[173]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[174]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[175]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[176]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[177]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[178]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[179]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[180]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[181]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[182]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[183]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[184]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[185]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[186]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[187]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[188]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[189]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[190]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[191]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[192]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[193]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[194]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[195]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[196]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[197]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[198]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[199]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[200]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[201]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[202]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[203]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[204]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[205]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[206]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[207]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[208]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[209]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[210]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[211]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[212]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[213]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[214]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[215]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[216]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[217]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[218]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[219]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[220]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[221]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[222]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[223]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[224]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[225]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[226]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[227]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[228]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[229]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[230]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[231]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[232]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[233]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[234]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[235]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[236]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[237]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[238]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[239]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[240]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[241]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[242]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[243]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[244]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[245]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[246]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[247]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[248]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[249]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[250]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[251]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[252]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[253]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[254]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_characters)[255]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_dictcomp));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_genexpr));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_lambda));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_listcomp));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_module));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_setcomp));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_string));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_unknown));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(close_br));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dbl_close_br));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dbl_open_br));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dbl_percent));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(defaults));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dot));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dot_locals));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(empty));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(generic_base));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(json_decoder));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(kwdefaults));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(list_err));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(newline));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(open_br));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(percent));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(shim_name));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(type_params));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(utf_8));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(CANCELLED));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(FINISHED));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(False));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(JSONDecodeError));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(PENDING));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(Py_Repr));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(TextIOWrapper));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(True));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(WarningMessage));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_WindowsConsoleIO));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__IOBase_closed));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abc_tpflags__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abs__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abstractmethods__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__add__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__aenter__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__aexit__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__aiter__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__all__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__and__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__anext__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__annotations__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__args__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__asyncio_running_event_loop__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__await__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__bases__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__bool__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__buffer__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__build_class__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__builtins__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__bytes__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__call__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__cantrace__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__class__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__class_getitem__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__classcell__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__classdict__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__classdictcell__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__complex__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__contains__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__copy__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ctypes_from_outparam__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__del__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__delattr__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__delete__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__delitem__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__dict__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__dictoffset__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__dir__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__divmod__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__doc__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__enter__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__eq__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__exit__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__file__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__float__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__floordiv__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__format__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__fspath__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ge__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__get__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getattr__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getattribute__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getinitargs__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getitem__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getnewargs__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getnewargs_ex__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__getstate__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__gt__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__hash__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__iadd__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__iand__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ifloordiv__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ilshift__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__imatmul__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__imod__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__import__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__imul__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__index__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__init__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__init_subclass__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__instancecheck__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__int__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__invert__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ior__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ipow__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__irshift__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__isabstractmethod__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__isub__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__iter__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__itruediv__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ixor__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__le__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__len__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__length_hint__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__lltrace__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__loader__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__lshift__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__lt__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__main__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__matmul__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__missing__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__mod__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__module__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__mro_entries__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__mul__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__name__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ne__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__neg__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__new__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__newobj__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__newobj_ex__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__next__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__notes__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__or__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__orig_class__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__origin__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__package__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__parameters__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__path__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__pos__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__pow__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__prepare__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__qualname__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__radd__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rand__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rdivmod__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__reduce__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__reduce_ex__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__release_buffer__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__repr__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__reversed__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rfloordiv__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rlshift__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rmatmul__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rmod__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rmul__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__ror__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__round__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rpow__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rrshift__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rshift__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rsub__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rtruediv__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__rxor__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__set__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__set_name__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__setattr__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__setitem__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__setstate__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__sizeof__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__slotnames__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__slots__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__spec__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__str__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__sub__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__subclasscheck__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__subclasshook__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__truediv__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__trunc__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__type_params__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__typing_is_unpacked_typevartuple__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__typing_prepare_subst__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__typing_subst__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__typing_unpacked_tuple_args__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__warningregistry__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__weaklistoffset__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__weakref__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__xor__));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_abc_impl));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_abstract_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_active));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_annotation));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_anonymous_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_argtypes_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_as_parameter_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_asyncio_future_blocking));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_blksize));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_bootstrap));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_check_retval_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_dealloc_warn));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_feature_version));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_fields_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_finalizing));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_find_and_load));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_fix_up_module));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_flags_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_get_sourcefile));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_handle_fromlist));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_initializing));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_io));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_is_text_encoding));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_length_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_limbo));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_lock_unlock_module));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_loop));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_needs_com_addref_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_pack_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_restype_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_showwarnmsg));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_shutdown));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_slotnames));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_strptime_datetime));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_swappedbytes_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_type_));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_uninitialized_submodules));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_warn_unawaited_coroutine));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_xoptions));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(a));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(abs_tol));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(access));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(add));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(add_done_callback));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(after_in_child));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(after_in_parent));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(aggregate_class));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(alias));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(append));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(arg));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(argdefs));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(args));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(arguments));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(argv));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(as_integer_ratio));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ast));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(attribute));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(authorizer_callback));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(autocommit));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(b));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(backtick));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(base));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(before));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(big));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(binary_form));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(block));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bound));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(buffer));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(buffer_callback));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(buffer_size));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(buffering));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(buffers));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bufsize));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(builtins));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(byteorder));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bytes));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bytes_per_sep));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c_call));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c_exception));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c_return));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cached_statements));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cadata));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cafile));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(call));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(call_exception_handler));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(call_soon));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cancel));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(capath));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(category));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cb_type));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(certfile));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(check_same_thread));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(clear));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(close));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(closed));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(closefd));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(closure));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_argcount));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_cellvars));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_code));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_consts));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_exceptiontable));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_filename));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_firstlineno));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_flags));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_freevars));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_kwonlyargcount));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_linetable));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_name));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_names));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_nlocals));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_posonlyargcount));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_qualname));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_stacksize));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(co_varnames));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(code));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(command));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(comment_factory));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(compile_mode));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(consts));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(context));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(contravariant));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cookie));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(copy));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(copyreg));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(coro));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(count));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(covariant));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cwd));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(d));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(data));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(database));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(decode));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(decoder));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(default));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(defaultaction));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(delete));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(depth));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(detect_types));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(deterministic));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(device));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dict));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dictcomp));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(difference_update));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(digest));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(digest_size));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(digestmod));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dir_fd));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(discard));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dispatch_table));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(displayhook));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dklen));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(doc));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dont_inherit));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dst));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dst_dir_fd));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(duration));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(e));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(eager_start));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(effective_ids));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(element_factory));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(encode));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(encoding));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(end));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(end_lineno));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(end_offset));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(endpos));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(entrypoint));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(env));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(errors));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(event));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(eventmask));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exc_type));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exc_value));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(excepthook));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exception));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(existing_file_name));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exp));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(extend));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(extra_tokens));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(facility));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(factory));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(false));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(family));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fanout));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fd));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fd2));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fdel));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fget));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(file));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(file_actions));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(filename));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fileno));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(filepath));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fillvalue));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(filters));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(final));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(find_class));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fix_imports));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(flags));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(flush));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(follow_symlinks));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(format));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(frequency));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(from_param));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fromlist));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fromtimestamp));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fromutc));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(fset));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(func));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(future));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(generation));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(genexpr));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(get));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(get_debug));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(get_event_loop));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(get_loop));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(get_source));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(getattr));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(getstate));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(gid));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(globals));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(groupindex));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(groups));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(handle));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hash_name));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(header));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(headers));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hi));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hook));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(id));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ident));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ignore));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(imag));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(importlib));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(in_fd));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(incoming));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(indexgroup));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inf));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(infer_variance));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inheritable));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial_bytes));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial_value));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initval));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inner_size));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(input));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(insert_comments));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(insert_pis));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(instructions));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(intern));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(intersection));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(is_running));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(isatty));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(isinstance));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(isoformat));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(isolation_level));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(istext));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(item));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(items));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(iter));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(iterable));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(iterations));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(join));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(jump));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(keepends));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(key));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(keyfile));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(keys));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(kind));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(kw));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(kw1));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(kw2));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(lambda));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last_exc));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last_node));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last_traceback));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last_type));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(last_value));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(latin1));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(leaf_size));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(len));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(length));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(level));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(limit));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(line));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(line_buffering));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(lineno));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(listcomp));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(little));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(lo));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(locale));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(locals));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(logoption));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(loop));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mapping));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(match));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(max_length));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxdigits));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxevents));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxmem));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxsplit));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(maxvalue));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(memLevel));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(memlimit));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(message));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(metaclass));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(metadata));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(method));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mod));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mode));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(module));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(module_globals));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(modules));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mro));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(msg));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mycmp));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_arg));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_fields));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_sequence_fields));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_unnamed_fields));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(name));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(name_from));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(namespace_separator));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(namespaces));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(narg));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ndigits));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(new_file_name));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(new_limit));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(newline));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(newlines));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(next));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(nlocals));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(node_depth));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(node_offset));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ns));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(nstype));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(nt));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(null));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(number));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(obj));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(object));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(offset));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(offset_dst));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(offset_src));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(on_type_read));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(onceregistry));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(only_keys));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(oparg));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(opcode));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(open));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(opener));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(operation));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(optimize));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(options));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(order));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(origin));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(out_fd));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(outgoing));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(overlapped));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(owner));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(p));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pages));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(parent));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(password));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(path));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pattern));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(peek));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(persistent_id));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(persistent_load));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(person));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pi_factory));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pid));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(policy));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pos));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pos1));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pos2));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(posix));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(print_file_and_line));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(priority));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(progress));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(progress_handler));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(progress_routine));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(proto));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(protocol));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ps1));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ps2));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(query));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(quotetabs));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(r));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(raw));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(read));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(read1));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readable));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readall));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readinto));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readinto1));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readline));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(readonly));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(real));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reducer_override));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(registry));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(rel_tol));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(release));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reload));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(repl));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(replace));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reserved));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reset));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(resetids));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(return));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reverse));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reversed));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(s));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(salt));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sched_priority));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(scheduler));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(seek));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(seekable));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(selectors));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(self));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(send));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sep));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sequence));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(server_hostname));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(server_side));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(session));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setcomp));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setpgroup));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setsid));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setsigdef));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setsigmask));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(setstate));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(shape));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(show_cmd));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(signed));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(size));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sizehint));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(skip_file_prefixes));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sleep));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sock));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sort));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sound));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(source));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(source_traceback));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(src));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(src_dir_fd));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(stacklevel));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(start));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(statement));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(status));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(stderr));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(stdin));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(stdout));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(step));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(steps));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(store_name));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(strategy));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(strftime));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(strict));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(strict_mode));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(string));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sub_key));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(symmetric_difference_update));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tabsize));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tag));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(target));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(target_is_directory));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(task));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tb_frame));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tb_lasti));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tb_lineno));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tb_next));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tell));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(template));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(term));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(text));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(threading));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(throw));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(timeout));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(times));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(timetuple));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(top));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(trace_callback));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(traceback));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(trailers));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(translate));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(true));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(truncate));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(twice));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(txt));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(type));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(type_params));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tz));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(tzname));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(uid));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(unlink));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(unraisablehook));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(uri));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(usedforsecurity));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(value));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(values));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(version));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(volume));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(warnings));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(warnoptions));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(wbits));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(week));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(weekday));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(which));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(who));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(withdata));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(writable));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(write));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(write_through));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(x));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(year));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(zdict));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[0]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[1]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[2]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[3]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[4]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[5]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[6]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[7]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[8]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[9]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[10]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[11]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[12]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[13]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[14]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[15]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[16]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[17]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[18]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[19]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[20]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[21]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[22]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[23]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[24]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[25]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[26]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[27]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[28]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[29]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[30]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[31]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[32]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[33]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[34]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[35]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[36]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[37]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[38]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[39]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[40]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[41]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[42]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[43]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[44]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[45]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[46]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[47]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[48]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[49]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[50]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[51]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[52]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[53]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[54]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[55]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[56]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[57]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[58]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[59]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[60]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[61]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[62]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[63]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[64]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[65]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[66]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[67]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[68]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[69]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[70]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[71]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[72]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[73]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[74]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[75]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[76]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[77]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[78]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[79]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[80]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[81]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[82]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[83]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[84]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[85]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[86]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[87]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[88]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[89]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[90]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[91]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[92]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[93]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[94]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[95]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[96]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[97]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[98]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[99]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[100]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[101]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[102]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[103]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[104]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[105]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[106]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[107]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[108]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[109]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[110]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[111]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[112]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[113]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[114]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[115]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[116]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[117]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[118]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[119]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[120]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[121]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[122]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[123]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[124]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[125]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[126]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[127]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[128 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[129 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[130 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[131 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[132 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[133 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[134 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[135 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[136 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[137 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[138 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[139 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[140 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[141 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[142 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[143 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[144 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[145 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[146 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[147 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[148 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[149 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[150 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[151 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[152 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[153 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[154 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[155 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[156 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[157 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[158 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[159 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[160 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[161 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[162 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[163 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[164 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[165 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[166 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[167 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[168 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[169 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[170 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[171 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[172 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[173 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[174 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[175 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[176 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[177 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[178 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[179 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[180 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[181 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[182 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[183 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[184 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[185 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[186 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[187 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[188 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[189 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[190 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[191 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[192 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[193 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[194 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[195 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[196 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[197 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[198 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[199 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[200 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[201 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[202 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[203 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[204 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[205 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[206 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[207 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[208 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[209 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[210 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[211 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[212 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[213 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[214 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[215 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[216 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[217 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[218 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[219 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[220 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[221 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[222 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[223 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[224 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[225 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[226 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[227 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[228 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[229 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[230 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[231 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[232 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[233 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[234 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[235 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[236 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[237 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[238 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[239 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[240 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[241 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[242 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[243 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[244 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[245 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[246 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[247 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[248 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[249 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[250 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[251 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[252 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[253 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[254 - 128]);
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).latin1[255 - 128]);
+ /* non-generated */
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(bytes_empty));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(tuple_empty));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(hamt_bitmap_node_empty));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_INTERP_SINGLETON(interp, hamt_empty));
+ _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(context_token_missing));
+}
+#endif // Py_DEBUG
+/* End auto-generated code */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_GLOBAL_OBJECTS_FINI_GENERATED_INIT_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_global_strings.h b/contrib/tools/python3/src/Include/internal/pycore_global_strings.h
index ca970627cb..0c84999cbf 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_global_strings.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_global_strings.h
@@ -8,10 +8,10 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-// The data structure & init here are inspired by Tools/scripts/deepfreeze.py.
+// The data structure & init here are inspired by Tools/build/deepfreeze.py.
// All field names generated by ASCII_STR() have a common prefix,
-// to help avoid collisions with keywords, etc.
+// to help avoid collisions with keywords, macros, etc.
#define STRUCT_FOR_ASCII_STR(LITERAL) \
struct { \
@@ -19,13 +19,13 @@ extern "C" {
uint8_t _data[sizeof(LITERAL)]; \
}
#define STRUCT_FOR_STR(NAME, LITERAL) \
- STRUCT_FOR_ASCII_STR(LITERAL) _ ## NAME;
+ STRUCT_FOR_ASCII_STR(LITERAL) _py_ ## NAME;
#define STRUCT_FOR_ID(NAME) \
- STRUCT_FOR_ASCII_STR(#NAME) _ ## NAME;
+ STRUCT_FOR_ASCII_STR(#NAME) _py_ ## NAME;
// XXX Order by frequency of use?
-/* The following is auto-generated by Tools/scripts/generate_global_objects.py. */
+/* The following is auto-generated by Tools/build/generate_global_objects.py. */
struct _Py_global_strings {
struct {
STRUCT_FOR_STR(anon_dictcomp, "<dictcomp>")
@@ -37,27 +37,37 @@ struct _Py_global_strings {
STRUCT_FOR_STR(anon_string, "<string>")
STRUCT_FOR_STR(anon_unknown, "<unknown>")
STRUCT_FOR_STR(close_br, "}")
- STRUCT_FOR_STR(comma_sep, ", ")
STRUCT_FOR_STR(dbl_close_br, "}}")
STRUCT_FOR_STR(dbl_open_br, "{{")
STRUCT_FOR_STR(dbl_percent, "%%")
+ STRUCT_FOR_STR(defaults, ".defaults")
STRUCT_FOR_STR(dot, ".")
STRUCT_FOR_STR(dot_locals, ".<locals>")
STRUCT_FOR_STR(empty, "")
+ STRUCT_FOR_STR(generic_base, ".generic_base")
+ STRUCT_FOR_STR(json_decoder, "json.decoder")
+ STRUCT_FOR_STR(kwdefaults, ".kwdefaults")
STRUCT_FOR_STR(list_err, "list index out of range")
STRUCT_FOR_STR(newline, "\n")
STRUCT_FOR_STR(open_br, "{")
STRUCT_FOR_STR(percent, "%")
+ STRUCT_FOR_STR(shim_name, "<shim>")
+ STRUCT_FOR_STR(type_params, ".type_params")
STRUCT_FOR_STR(utf_8, "utf-8")
} literals;
struct {
+ STRUCT_FOR_ID(CANCELLED)
+ STRUCT_FOR_ID(FINISHED)
STRUCT_FOR_ID(False)
+ STRUCT_FOR_ID(JSONDecodeError)
+ STRUCT_FOR_ID(PENDING)
STRUCT_FOR_ID(Py_Repr)
STRUCT_FOR_ID(TextIOWrapper)
STRUCT_FOR_ID(True)
STRUCT_FOR_ID(WarningMessage)
STRUCT_FOR_ID(_)
+ STRUCT_FOR_ID(_WindowsConsoleIO)
STRUCT_FOR_ID(__IOBase_closed)
STRUCT_FOR_ID(__abc_tpflags__)
STRUCT_FOR_ID(__abs__)
@@ -71,9 +81,11 @@ struct _Py_global_strings {
STRUCT_FOR_ID(__anext__)
STRUCT_FOR_ID(__annotations__)
STRUCT_FOR_ID(__args__)
+ STRUCT_FOR_ID(__asyncio_running_event_loop__)
STRUCT_FOR_ID(__await__)
STRUCT_FOR_ID(__bases__)
STRUCT_FOR_ID(__bool__)
+ STRUCT_FOR_ID(__buffer__)
STRUCT_FOR_ID(__build_class__)
STRUCT_FOR_ID(__builtins__)
STRUCT_FOR_ID(__bytes__)
@@ -82,14 +94,18 @@ struct _Py_global_strings {
STRUCT_FOR_ID(__class__)
STRUCT_FOR_ID(__class_getitem__)
STRUCT_FOR_ID(__classcell__)
+ STRUCT_FOR_ID(__classdict__)
+ STRUCT_FOR_ID(__classdictcell__)
STRUCT_FOR_ID(__complex__)
STRUCT_FOR_ID(__contains__)
STRUCT_FOR_ID(__copy__)
+ STRUCT_FOR_ID(__ctypes_from_outparam__)
STRUCT_FOR_ID(__del__)
STRUCT_FOR_ID(__delattr__)
STRUCT_FOR_ID(__delete__)
STRUCT_FOR_ID(__delitem__)
STRUCT_FOR_ID(__dict__)
+ STRUCT_FOR_ID(__dictoffset__)
STRUCT_FOR_ID(__dir__)
STRUCT_FOR_ID(__divmod__)
STRUCT_FOR_ID(__doc__)
@@ -171,6 +187,7 @@ struct _Py_global_strings {
STRUCT_FOR_ID(__rdivmod__)
STRUCT_FOR_ID(__reduce__)
STRUCT_FOR_ID(__reduce_ex__)
+ STRUCT_FOR_ID(__release_buffer__)
STRUCT_FOR_ID(__repr__)
STRUCT_FOR_ID(__reversed__)
STRUCT_FOR_ID(__rfloordiv__)
@@ -201,122 +218,408 @@ struct _Py_global_strings {
STRUCT_FOR_ID(__subclasshook__)
STRUCT_FOR_ID(__truediv__)
STRUCT_FOR_ID(__trunc__)
+ STRUCT_FOR_ID(__type_params__)
STRUCT_FOR_ID(__typing_is_unpacked_typevartuple__)
STRUCT_FOR_ID(__typing_prepare_subst__)
STRUCT_FOR_ID(__typing_subst__)
STRUCT_FOR_ID(__typing_unpacked_tuple_args__)
STRUCT_FOR_ID(__warningregistry__)
+ STRUCT_FOR_ID(__weaklistoffset__)
STRUCT_FOR_ID(__weakref__)
STRUCT_FOR_ID(__xor__)
STRUCT_FOR_ID(_abc_impl)
+ STRUCT_FOR_ID(_abstract_)
+ STRUCT_FOR_ID(_active)
STRUCT_FOR_ID(_annotation)
+ STRUCT_FOR_ID(_anonymous_)
+ STRUCT_FOR_ID(_argtypes_)
+ STRUCT_FOR_ID(_as_parameter_)
+ STRUCT_FOR_ID(_asyncio_future_blocking)
STRUCT_FOR_ID(_blksize)
STRUCT_FOR_ID(_bootstrap)
+ STRUCT_FOR_ID(_check_retval_)
STRUCT_FOR_ID(_dealloc_warn)
+ STRUCT_FOR_ID(_feature_version)
+ STRUCT_FOR_ID(_fields_)
STRUCT_FOR_ID(_finalizing)
STRUCT_FOR_ID(_find_and_load)
STRUCT_FOR_ID(_fix_up_module)
+ STRUCT_FOR_ID(_flags_)
STRUCT_FOR_ID(_get_sourcefile)
STRUCT_FOR_ID(_handle_fromlist)
STRUCT_FOR_ID(_initializing)
+ STRUCT_FOR_ID(_io)
STRUCT_FOR_ID(_is_text_encoding)
+ STRUCT_FOR_ID(_length_)
+ STRUCT_FOR_ID(_limbo)
STRUCT_FOR_ID(_lock_unlock_module)
+ STRUCT_FOR_ID(_loop)
+ STRUCT_FOR_ID(_needs_com_addref_)
+ STRUCT_FOR_ID(_pack_)
+ STRUCT_FOR_ID(_restype_)
STRUCT_FOR_ID(_showwarnmsg)
STRUCT_FOR_ID(_shutdown)
STRUCT_FOR_ID(_slotnames)
- STRUCT_FOR_ID(_strptime_time)
+ STRUCT_FOR_ID(_strptime_datetime)
+ STRUCT_FOR_ID(_swappedbytes_)
+ STRUCT_FOR_ID(_type_)
STRUCT_FOR_ID(_uninitialized_submodules)
STRUCT_FOR_ID(_warn_unawaited_coroutine)
STRUCT_FOR_ID(_xoptions)
+ STRUCT_FOR_ID(a)
+ STRUCT_FOR_ID(abs_tol)
+ STRUCT_FOR_ID(access)
STRUCT_FOR_ID(add)
+ STRUCT_FOR_ID(add_done_callback)
+ STRUCT_FOR_ID(after_in_child)
+ STRUCT_FOR_ID(after_in_parent)
+ STRUCT_FOR_ID(aggregate_class)
+ STRUCT_FOR_ID(alias)
STRUCT_FOR_ID(append)
+ STRUCT_FOR_ID(arg)
+ STRUCT_FOR_ID(argdefs)
+ STRUCT_FOR_ID(args)
+ STRUCT_FOR_ID(arguments)
+ STRUCT_FOR_ID(argv)
+ STRUCT_FOR_ID(as_integer_ratio)
+ STRUCT_FOR_ID(ast)
+ STRUCT_FOR_ID(attribute)
+ STRUCT_FOR_ID(authorizer_callback)
+ STRUCT_FOR_ID(autocommit)
+ STRUCT_FOR_ID(b)
+ STRUCT_FOR_ID(backtick)
+ STRUCT_FOR_ID(base)
+ STRUCT_FOR_ID(before)
STRUCT_FOR_ID(big)
+ STRUCT_FOR_ID(binary_form)
+ STRUCT_FOR_ID(block)
+ STRUCT_FOR_ID(bound)
STRUCT_FOR_ID(buffer)
+ STRUCT_FOR_ID(buffer_callback)
+ STRUCT_FOR_ID(buffer_size)
+ STRUCT_FOR_ID(buffering)
+ STRUCT_FOR_ID(buffers)
+ STRUCT_FOR_ID(bufsize)
STRUCT_FOR_ID(builtins)
+ STRUCT_FOR_ID(byteorder)
+ STRUCT_FOR_ID(bytes)
+ STRUCT_FOR_ID(bytes_per_sep)
+ STRUCT_FOR_ID(c)
STRUCT_FOR_ID(c_call)
STRUCT_FOR_ID(c_exception)
STRUCT_FOR_ID(c_return)
+ STRUCT_FOR_ID(cached_statements)
+ STRUCT_FOR_ID(cadata)
+ STRUCT_FOR_ID(cafile)
STRUCT_FOR_ID(call)
+ STRUCT_FOR_ID(call_exception_handler)
+ STRUCT_FOR_ID(call_soon)
+ STRUCT_FOR_ID(cancel)
+ STRUCT_FOR_ID(capath)
+ STRUCT_FOR_ID(category)
+ STRUCT_FOR_ID(cb_type)
+ STRUCT_FOR_ID(certfile)
+ STRUCT_FOR_ID(check_same_thread)
STRUCT_FOR_ID(clear)
STRUCT_FOR_ID(close)
STRUCT_FOR_ID(closed)
+ STRUCT_FOR_ID(closefd)
+ STRUCT_FOR_ID(closure)
+ STRUCT_FOR_ID(co_argcount)
+ STRUCT_FOR_ID(co_cellvars)
+ STRUCT_FOR_ID(co_code)
+ STRUCT_FOR_ID(co_consts)
+ STRUCT_FOR_ID(co_exceptiontable)
+ STRUCT_FOR_ID(co_filename)
+ STRUCT_FOR_ID(co_firstlineno)
+ STRUCT_FOR_ID(co_flags)
+ STRUCT_FOR_ID(co_freevars)
+ STRUCT_FOR_ID(co_kwonlyargcount)
+ STRUCT_FOR_ID(co_linetable)
+ STRUCT_FOR_ID(co_name)
+ STRUCT_FOR_ID(co_names)
+ STRUCT_FOR_ID(co_nlocals)
+ STRUCT_FOR_ID(co_posonlyargcount)
+ STRUCT_FOR_ID(co_qualname)
+ STRUCT_FOR_ID(co_stacksize)
+ STRUCT_FOR_ID(co_varnames)
STRUCT_FOR_ID(code)
+ STRUCT_FOR_ID(command)
+ STRUCT_FOR_ID(comment_factory)
+ STRUCT_FOR_ID(compile_mode)
+ STRUCT_FOR_ID(consts)
+ STRUCT_FOR_ID(context)
+ STRUCT_FOR_ID(contravariant)
+ STRUCT_FOR_ID(cookie)
STRUCT_FOR_ID(copy)
STRUCT_FOR_ID(copyreg)
+ STRUCT_FOR_ID(coro)
+ STRUCT_FOR_ID(count)
+ STRUCT_FOR_ID(covariant)
+ STRUCT_FOR_ID(cwd)
+ STRUCT_FOR_ID(d)
+ STRUCT_FOR_ID(data)
+ STRUCT_FOR_ID(database)
STRUCT_FOR_ID(decode)
+ STRUCT_FOR_ID(decoder)
STRUCT_FOR_ID(default)
STRUCT_FOR_ID(defaultaction)
+ STRUCT_FOR_ID(delete)
+ STRUCT_FOR_ID(depth)
+ STRUCT_FOR_ID(detect_types)
+ STRUCT_FOR_ID(deterministic)
+ STRUCT_FOR_ID(device)
+ STRUCT_FOR_ID(dict)
STRUCT_FOR_ID(dictcomp)
STRUCT_FOR_ID(difference_update)
+ STRUCT_FOR_ID(digest)
+ STRUCT_FOR_ID(digest_size)
+ STRUCT_FOR_ID(digestmod)
+ STRUCT_FOR_ID(dir_fd)
+ STRUCT_FOR_ID(discard)
STRUCT_FOR_ID(dispatch_table)
STRUCT_FOR_ID(displayhook)
- STRUCT_FOR_ID(enable)
+ STRUCT_FOR_ID(dklen)
+ STRUCT_FOR_ID(doc)
+ STRUCT_FOR_ID(dont_inherit)
+ STRUCT_FOR_ID(dst)
+ STRUCT_FOR_ID(dst_dir_fd)
+ STRUCT_FOR_ID(duration)
+ STRUCT_FOR_ID(e)
+ STRUCT_FOR_ID(eager_start)
+ STRUCT_FOR_ID(effective_ids)
+ STRUCT_FOR_ID(element_factory)
STRUCT_FOR_ID(encode)
STRUCT_FOR_ID(encoding)
+ STRUCT_FOR_ID(end)
STRUCT_FOR_ID(end_lineno)
STRUCT_FOR_ID(end_offset)
+ STRUCT_FOR_ID(endpos)
+ STRUCT_FOR_ID(entrypoint)
+ STRUCT_FOR_ID(env)
STRUCT_FOR_ID(errors)
+ STRUCT_FOR_ID(event)
+ STRUCT_FOR_ID(eventmask)
+ STRUCT_FOR_ID(exc_type)
+ STRUCT_FOR_ID(exc_value)
STRUCT_FOR_ID(excepthook)
STRUCT_FOR_ID(exception)
+ STRUCT_FOR_ID(existing_file_name)
+ STRUCT_FOR_ID(exp)
STRUCT_FOR_ID(extend)
+ STRUCT_FOR_ID(extra_tokens)
+ STRUCT_FOR_ID(facility)
+ STRUCT_FOR_ID(factory)
+ STRUCT_FOR_ID(false)
+ STRUCT_FOR_ID(family)
+ STRUCT_FOR_ID(fanout)
+ STRUCT_FOR_ID(fd)
+ STRUCT_FOR_ID(fd2)
+ STRUCT_FOR_ID(fdel)
+ STRUCT_FOR_ID(fget)
+ STRUCT_FOR_ID(file)
+ STRUCT_FOR_ID(file_actions)
STRUCT_FOR_ID(filename)
STRUCT_FOR_ID(fileno)
+ STRUCT_FOR_ID(filepath)
STRUCT_FOR_ID(fillvalue)
STRUCT_FOR_ID(filters)
+ STRUCT_FOR_ID(final)
STRUCT_FOR_ID(find_class)
+ STRUCT_FOR_ID(fix_imports)
+ STRUCT_FOR_ID(flags)
STRUCT_FOR_ID(flush)
+ STRUCT_FOR_ID(follow_symlinks)
+ STRUCT_FOR_ID(format)
+ STRUCT_FOR_ID(frequency)
+ STRUCT_FOR_ID(from_param)
+ STRUCT_FOR_ID(fromlist)
+ STRUCT_FOR_ID(fromtimestamp)
+ STRUCT_FOR_ID(fromutc)
+ STRUCT_FOR_ID(fset)
+ STRUCT_FOR_ID(func)
+ STRUCT_FOR_ID(future)
+ STRUCT_FOR_ID(generation)
STRUCT_FOR_ID(genexpr)
STRUCT_FOR_ID(get)
+ STRUCT_FOR_ID(get_debug)
+ STRUCT_FOR_ID(get_event_loop)
+ STRUCT_FOR_ID(get_loop)
STRUCT_FOR_ID(get_source)
STRUCT_FOR_ID(getattr)
STRUCT_FOR_ID(getstate)
+ STRUCT_FOR_ID(gid)
+ STRUCT_FOR_ID(globals)
+ STRUCT_FOR_ID(groupindex)
+ STRUCT_FOR_ID(groups)
+ STRUCT_FOR_ID(handle)
+ STRUCT_FOR_ID(hash_name)
+ STRUCT_FOR_ID(header)
+ STRUCT_FOR_ID(headers)
+ STRUCT_FOR_ID(hi)
+ STRUCT_FOR_ID(hook)
+ STRUCT_FOR_ID(id)
+ STRUCT_FOR_ID(ident)
STRUCT_FOR_ID(ignore)
+ STRUCT_FOR_ID(imag)
STRUCT_FOR_ID(importlib)
+ STRUCT_FOR_ID(in_fd)
+ STRUCT_FOR_ID(incoming)
+ STRUCT_FOR_ID(indexgroup)
STRUCT_FOR_ID(inf)
+ STRUCT_FOR_ID(infer_variance)
+ STRUCT_FOR_ID(inheritable)
+ STRUCT_FOR_ID(initial)
+ STRUCT_FOR_ID(initial_bytes)
+ STRUCT_FOR_ID(initial_value)
+ STRUCT_FOR_ID(initval)
+ STRUCT_FOR_ID(inner_size)
+ STRUCT_FOR_ID(input)
+ STRUCT_FOR_ID(insert_comments)
+ STRUCT_FOR_ID(insert_pis)
+ STRUCT_FOR_ID(instructions)
+ STRUCT_FOR_ID(intern)
STRUCT_FOR_ID(intersection)
+ STRUCT_FOR_ID(is_running)
STRUCT_FOR_ID(isatty)
STRUCT_FOR_ID(isinstance)
+ STRUCT_FOR_ID(isoformat)
+ STRUCT_FOR_ID(isolation_level)
+ STRUCT_FOR_ID(istext)
+ STRUCT_FOR_ID(item)
STRUCT_FOR_ID(items)
STRUCT_FOR_ID(iter)
+ STRUCT_FOR_ID(iterable)
+ STRUCT_FOR_ID(iterations)
STRUCT_FOR_ID(join)
+ STRUCT_FOR_ID(jump)
+ STRUCT_FOR_ID(keepends)
+ STRUCT_FOR_ID(key)
+ STRUCT_FOR_ID(keyfile)
STRUCT_FOR_ID(keys)
+ STRUCT_FOR_ID(kind)
+ STRUCT_FOR_ID(kw)
+ STRUCT_FOR_ID(kw1)
+ STRUCT_FOR_ID(kw2)
STRUCT_FOR_ID(lambda)
+ STRUCT_FOR_ID(last)
+ STRUCT_FOR_ID(last_exc)
+ STRUCT_FOR_ID(last_node)
STRUCT_FOR_ID(last_traceback)
STRUCT_FOR_ID(last_type)
STRUCT_FOR_ID(last_value)
STRUCT_FOR_ID(latin1)
+ STRUCT_FOR_ID(leaf_size)
STRUCT_FOR_ID(len)
+ STRUCT_FOR_ID(length)
+ STRUCT_FOR_ID(level)
+ STRUCT_FOR_ID(limit)
STRUCT_FOR_ID(line)
+ STRUCT_FOR_ID(line_buffering)
STRUCT_FOR_ID(lineno)
STRUCT_FOR_ID(listcomp)
STRUCT_FOR_ID(little)
+ STRUCT_FOR_ID(lo)
STRUCT_FOR_ID(locale)
+ STRUCT_FOR_ID(locals)
+ STRUCT_FOR_ID(logoption)
+ STRUCT_FOR_ID(loop)
+ STRUCT_FOR_ID(mapping)
STRUCT_FOR_ID(match)
+ STRUCT_FOR_ID(max_length)
+ STRUCT_FOR_ID(maxdigits)
+ STRUCT_FOR_ID(maxevents)
+ STRUCT_FOR_ID(maxmem)
+ STRUCT_FOR_ID(maxsplit)
+ STRUCT_FOR_ID(maxvalue)
+ STRUCT_FOR_ID(memLevel)
+ STRUCT_FOR_ID(memlimit)
+ STRUCT_FOR_ID(message)
STRUCT_FOR_ID(metaclass)
+ STRUCT_FOR_ID(metadata)
+ STRUCT_FOR_ID(method)
+ STRUCT_FOR_ID(mod)
STRUCT_FOR_ID(mode)
+ STRUCT_FOR_ID(module)
+ STRUCT_FOR_ID(module_globals)
STRUCT_FOR_ID(modules)
STRUCT_FOR_ID(mro)
STRUCT_FOR_ID(msg)
+ STRUCT_FOR_ID(mycmp)
+ STRUCT_FOR_ID(n)
+ STRUCT_FOR_ID(n_arg)
STRUCT_FOR_ID(n_fields)
STRUCT_FOR_ID(n_sequence_fields)
STRUCT_FOR_ID(n_unnamed_fields)
STRUCT_FOR_ID(name)
+ STRUCT_FOR_ID(name_from)
+ STRUCT_FOR_ID(namespace_separator)
+ STRUCT_FOR_ID(namespaces)
+ STRUCT_FOR_ID(narg)
+ STRUCT_FOR_ID(ndigits)
+ STRUCT_FOR_ID(new_file_name)
+ STRUCT_FOR_ID(new_limit)
+ STRUCT_FOR_ID(newline)
STRUCT_FOR_ID(newlines)
STRUCT_FOR_ID(next)
+ STRUCT_FOR_ID(nlocals)
+ STRUCT_FOR_ID(node_depth)
+ STRUCT_FOR_ID(node_offset)
+ STRUCT_FOR_ID(ns)
+ STRUCT_FOR_ID(nstype)
+ STRUCT_FOR_ID(nt)
+ STRUCT_FOR_ID(null)
+ STRUCT_FOR_ID(number)
STRUCT_FOR_ID(obj)
+ STRUCT_FOR_ID(object)
STRUCT_FOR_ID(offset)
+ STRUCT_FOR_ID(offset_dst)
+ STRUCT_FOR_ID(offset_src)
+ STRUCT_FOR_ID(on_type_read)
STRUCT_FOR_ID(onceregistry)
+ STRUCT_FOR_ID(only_keys)
+ STRUCT_FOR_ID(oparg)
STRUCT_FOR_ID(opcode)
STRUCT_FOR_ID(open)
+ STRUCT_FOR_ID(opener)
+ STRUCT_FOR_ID(operation)
+ STRUCT_FOR_ID(optimize)
+ STRUCT_FOR_ID(options)
+ STRUCT_FOR_ID(order)
+ STRUCT_FOR_ID(origin)
+ STRUCT_FOR_ID(out_fd)
+ STRUCT_FOR_ID(outgoing)
+ STRUCT_FOR_ID(overlapped)
+ STRUCT_FOR_ID(owner)
+ STRUCT_FOR_ID(p)
+ STRUCT_FOR_ID(pages)
STRUCT_FOR_ID(parent)
- STRUCT_FOR_ID(partial)
+ STRUCT_FOR_ID(password)
STRUCT_FOR_ID(path)
+ STRUCT_FOR_ID(pattern)
STRUCT_FOR_ID(peek)
STRUCT_FOR_ID(persistent_id)
STRUCT_FOR_ID(persistent_load)
+ STRUCT_FOR_ID(person)
+ STRUCT_FOR_ID(pi_factory)
+ STRUCT_FOR_ID(pid)
+ STRUCT_FOR_ID(policy)
+ STRUCT_FOR_ID(pos)
+ STRUCT_FOR_ID(pos1)
+ STRUCT_FOR_ID(pos2)
+ STRUCT_FOR_ID(posix)
STRUCT_FOR_ID(print_file_and_line)
+ STRUCT_FOR_ID(priority)
+ STRUCT_FOR_ID(progress)
+ STRUCT_FOR_ID(progress_handler)
+ STRUCT_FOR_ID(progress_routine)
+ STRUCT_FOR_ID(proto)
+ STRUCT_FOR_ID(protocol)
STRUCT_FOR_ID(ps1)
STRUCT_FOR_ID(ps2)
+ STRUCT_FOR_ID(query)
+ STRUCT_FOR_ID(quotetabs)
+ STRUCT_FOR_ID(r)
STRUCT_FOR_ID(raw)
STRUCT_FOR_ID(read)
STRUCT_FOR_ID(read1)
@@ -325,37 +628,126 @@ struct _Py_global_strings {
STRUCT_FOR_ID(readinto)
STRUCT_FOR_ID(readinto1)
STRUCT_FOR_ID(readline)
+ STRUCT_FOR_ID(readonly)
+ STRUCT_FOR_ID(real)
STRUCT_FOR_ID(reducer_override)
+ STRUCT_FOR_ID(registry)
+ STRUCT_FOR_ID(rel_tol)
+ STRUCT_FOR_ID(release)
STRUCT_FOR_ID(reload)
+ STRUCT_FOR_ID(repl)
STRUCT_FOR_ID(replace)
+ STRUCT_FOR_ID(reserved)
STRUCT_FOR_ID(reset)
+ STRUCT_FOR_ID(resetids)
STRUCT_FOR_ID(return)
+ STRUCT_FOR_ID(reverse)
STRUCT_FOR_ID(reversed)
+ STRUCT_FOR_ID(s)
+ STRUCT_FOR_ID(salt)
+ STRUCT_FOR_ID(sched_priority)
+ STRUCT_FOR_ID(scheduler)
STRUCT_FOR_ID(seek)
STRUCT_FOR_ID(seekable)
+ STRUCT_FOR_ID(selectors)
+ STRUCT_FOR_ID(self)
STRUCT_FOR_ID(send)
+ STRUCT_FOR_ID(sep)
+ STRUCT_FOR_ID(sequence)
+ STRUCT_FOR_ID(server_hostname)
+ STRUCT_FOR_ID(server_side)
+ STRUCT_FOR_ID(session)
STRUCT_FOR_ID(setcomp)
+ STRUCT_FOR_ID(setpgroup)
+ STRUCT_FOR_ID(setsid)
+ STRUCT_FOR_ID(setsigdef)
+ STRUCT_FOR_ID(setsigmask)
STRUCT_FOR_ID(setstate)
+ STRUCT_FOR_ID(shape)
+ STRUCT_FOR_ID(show_cmd)
+ STRUCT_FOR_ID(signed)
+ STRUCT_FOR_ID(size)
+ STRUCT_FOR_ID(sizehint)
+ STRUCT_FOR_ID(skip_file_prefixes)
+ STRUCT_FOR_ID(sleep)
+ STRUCT_FOR_ID(sock)
STRUCT_FOR_ID(sort)
+ STRUCT_FOR_ID(sound)
+ STRUCT_FOR_ID(source)
+ STRUCT_FOR_ID(source_traceback)
+ STRUCT_FOR_ID(src)
+ STRUCT_FOR_ID(src_dir_fd)
+ STRUCT_FOR_ID(stacklevel)
+ STRUCT_FOR_ID(start)
+ STRUCT_FOR_ID(statement)
+ STRUCT_FOR_ID(status)
STRUCT_FOR_ID(stderr)
STRUCT_FOR_ID(stdin)
STRUCT_FOR_ID(stdout)
+ STRUCT_FOR_ID(step)
+ STRUCT_FOR_ID(steps)
+ STRUCT_FOR_ID(store_name)
+ STRUCT_FOR_ID(strategy)
+ STRUCT_FOR_ID(strftime)
STRUCT_FOR_ID(strict)
+ STRUCT_FOR_ID(strict_mode)
+ STRUCT_FOR_ID(string)
+ STRUCT_FOR_ID(sub_key)
STRUCT_FOR_ID(symmetric_difference_update)
+ STRUCT_FOR_ID(tabsize)
+ STRUCT_FOR_ID(tag)
+ STRUCT_FOR_ID(target)
+ STRUCT_FOR_ID(target_is_directory)
+ STRUCT_FOR_ID(task)
+ STRUCT_FOR_ID(tb_frame)
+ STRUCT_FOR_ID(tb_lasti)
+ STRUCT_FOR_ID(tb_lineno)
+ STRUCT_FOR_ID(tb_next)
STRUCT_FOR_ID(tell)
+ STRUCT_FOR_ID(template)
+ STRUCT_FOR_ID(term)
STRUCT_FOR_ID(text)
STRUCT_FOR_ID(threading)
STRUCT_FOR_ID(throw)
+ STRUCT_FOR_ID(timeout)
+ STRUCT_FOR_ID(times)
+ STRUCT_FOR_ID(timetuple)
STRUCT_FOR_ID(top)
+ STRUCT_FOR_ID(trace_callback)
+ STRUCT_FOR_ID(traceback)
+ STRUCT_FOR_ID(trailers)
+ STRUCT_FOR_ID(translate)
+ STRUCT_FOR_ID(true)
STRUCT_FOR_ID(truncate)
+ STRUCT_FOR_ID(twice)
+ STRUCT_FOR_ID(txt)
+ STRUCT_FOR_ID(type)
+ STRUCT_FOR_ID(type_params)
+ STRUCT_FOR_ID(tz)
+ STRUCT_FOR_ID(tzname)
+ STRUCT_FOR_ID(uid)
+ STRUCT_FOR_ID(unlink)
STRUCT_FOR_ID(unraisablehook)
+ STRUCT_FOR_ID(uri)
+ STRUCT_FOR_ID(usedforsecurity)
+ STRUCT_FOR_ID(value)
STRUCT_FOR_ID(values)
STRUCT_FOR_ID(version)
+ STRUCT_FOR_ID(volume)
STRUCT_FOR_ID(warnings)
STRUCT_FOR_ID(warnoptions)
+ STRUCT_FOR_ID(wbits)
+ STRUCT_FOR_ID(week)
+ STRUCT_FOR_ID(weekday)
+ STRUCT_FOR_ID(which)
+ STRUCT_FOR_ID(who)
+ STRUCT_FOR_ID(withdata)
STRUCT_FOR_ID(writable)
STRUCT_FOR_ID(write)
- STRUCT_FOR_ID(zipimporter)
+ STRUCT_FOR_ID(write_through)
+ STRUCT_FOR_ID(x)
+ STRUCT_FOR_ID(year)
+ STRUCT_FOR_ID(zdict)
} identifiers;
struct {
PyASCIIObject _ascii;
@@ -373,9 +765,9 @@ struct _Py_global_strings {
#define _Py_ID(NAME) \
- (_Py_SINGLETON(strings.identifiers._ ## NAME._ascii.ob_base))
+ (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
#define _Py_STR(NAME) \
- (_Py_SINGLETON(strings.literals._ ## NAME._ascii.ob_base))
+ (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
/* _Py_DECLARE_STR() should precede all uses of _Py_STR() in a function.
diff --git a/contrib/tools/python3/src/Include/internal/pycore_hamt.h b/contrib/tools/python3/src/Include/internal/pycore_hamt.h
index 4d64288bba..d8742c7cb6 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_hamt.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_hamt.h
@@ -28,14 +28,10 @@ extern PyTypeObject _PyHamtKeys_Type;
extern PyTypeObject _PyHamtValues_Type;
extern PyTypeObject _PyHamtItems_Type;
-/* runtime lifecycle */
-
-void _PyHamt_Fini(PyInterpreterState *);
-
/* other API */
-#define PyHamt_Check(o) Py_IS_TYPE(o, &_PyHamt_Type)
+#define PyHamt_Check(o) Py_IS_TYPE((o), &_PyHamt_Type)
/* Abstract tree node. */
@@ -53,6 +49,13 @@ typedef struct {
} PyHamtObject;
+typedef struct {
+ PyObject_VAR_HEAD
+ uint32_t b_bitmap;
+ PyObject *b_array[1];
+} PyHamtNode_Bitmap;
+
+
/* A struct to hold the state of depth-first traverse of the tree.
HAMT is an immutable collection. Iterators will hold a strong reference
diff --git a/contrib/tools/python3/src/Include/internal/pycore_hashtable.h b/contrib/tools/python3/src/Include/internal/pycore_hashtable.h
index 18757abc28..f57978a8d6 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_hashtable.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_hashtable.h
@@ -18,9 +18,9 @@ typedef struct {
_Py_slist_item_t *head;
} _Py_slist_t;
-#define _Py_SLIST_ITEM_NEXT(ITEM) (((_Py_slist_item_t *)ITEM)->next)
+#define _Py_SLIST_ITEM_NEXT(ITEM) _Py_RVALUE(((_Py_slist_item_t *)(ITEM))->next)
-#define _Py_SLIST_HEAD(SLIST) (((_Py_slist_t *)SLIST)->head)
+#define _Py_SLIST_HEAD(SLIST) _Py_RVALUE(((_Py_slist_t *)(SLIST))->head)
/* _Py_hashtable: table entry */
@@ -106,6 +106,7 @@ PyAPI_FUNC(int) _Py_hashtable_foreach(
void *user_data);
PyAPI_FUNC(size_t) _Py_hashtable_size(const _Py_hashtable_t *ht);
+PyAPI_FUNC(size_t) _Py_hashtable_len(const _Py_hashtable_t *ht);
/* Add a new entry to the hash. The key must not be present in the hash table.
Return 0 on success, -1 on memory error. */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_import.h b/contrib/tools/python3/src/Include/internal/pycore_import.h
index aee1f66a3e..376957bdc9 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_import.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_import.h
@@ -5,10 +5,159 @@
extern "C" {
#endif
+#include "pycore_hashtable.h" // _Py_hashtable_t
+#include "pycore_time.h" // _PyTime_t
+
+
+struct _import_runtime_state {
+ /* The builtin modules (defined in config.c). */
+ struct _inittab *inittab;
+ /* The most recent value assigned to a PyModuleDef.m_base.m_index.
+ This is incremented each time PyModuleDef_Init() is called,
+ which is just about every time an extension module is imported.
+ See PyInterpreterState.modules_by_index for more info. */
+ Py_ssize_t last_module_index;
+ struct {
+ /* A lock to guard the cache. */
+ PyThread_type_lock mutex;
+ /* The actual cache of (filename, name, PyModuleDef) for modules.
+ Only legacy (single-phase init) extension modules are added
+ and only if they support multiple initialization (m_size >- 0)
+ or are imported in the main interpreter.
+ This is initialized lazily in _PyImport_FixupExtensionObject().
+ Modules are added there and looked up in _imp.find_extension(). */
+ _Py_hashtable_t *hashtable;
+ } extensions;
+ /* Package context -- the full module name for package imports */
+ const char * pkgcontext;
+};
+
+struct _import_state {
+ /* cached sys.modules dictionary */
+ PyObject *modules;
+ /* This is the list of module objects for all legacy (single-phase init)
+ extension modules ever loaded in this process (i.e. imported
+ in this interpreter or in any other). Py_None stands in for
+ modules that haven't actually been imported in this interpreter.
+
+ A module's index (PyModuleDef.m_base.m_index) is used to look up
+ the corresponding module object for this interpreter, if any.
+ (See PyState_FindModule().) When any extension module
+ is initialized during import, its moduledef gets initialized by
+ PyModuleDef_Init(), and the first time that happens for each
+ PyModuleDef, its index gets set to the current value of
+ a global counter (see _PyRuntimeState.imports.last_module_index).
+ The entry for that index in this interpreter remains unset until
+ the module is actually imported here. (Py_None is used as
+ a placeholder.) Note that multi-phase init modules always get
+ an index for which there will never be a module set.
+
+ This is initialized lazily in PyState_AddModule(), which is also
+ where modules get added. */
+ PyObject *modules_by_index;
+ /* importlib module._bootstrap */
+ PyObject *importlib;
+ /* override for config->use_frozen_modules (for tests)
+ (-1: "off", 1: "on", 0: no override) */
+ int override_frozen_modules;
+ int override_multi_interp_extensions_check;
+#ifdef HAVE_DLOPEN
+ int dlopenflags;
+#endif
+ PyObject *import_func;
+ /* The global import lock. */
+ struct {
+ PyThread_type_lock mutex;
+ unsigned long thread;
+ int level;
+ } lock;
+ /* diagnostic info in PyImport_ImportModuleLevelObject() */
+ struct {
+ int import_level;
+ _PyTime_t accumulated;
+ int header;
+ } find_and_load;
+};
+
+#ifdef HAVE_DLOPEN
+# include <dlfcn.h>
+# if HAVE_DECL_RTLD_NOW
+# define _Py_DLOPEN_FLAGS RTLD_NOW
+# else
+# define _Py_DLOPEN_FLAGS RTLD_LAZY
+# endif
+# define DLOPENFLAGS_INIT .dlopenflags = _Py_DLOPEN_FLAGS,
+#else
+# define _Py_DLOPEN_FLAGS 0
+# define DLOPENFLAGS_INIT
+#endif
+
+#define IMPORTS_INIT \
+ { \
+ DLOPENFLAGS_INIT \
+ .lock = { \
+ .mutex = NULL, \
+ .thread = PYTHREAD_INVALID_THREAD_ID, \
+ .level = 0, \
+ }, \
+ .find_and_load = { \
+ .header = 1, \
+ }, \
+ }
+
+extern void _PyImport_ClearCore(PyInterpreterState *interp);
+
+extern Py_ssize_t _PyImport_GetNextModuleIndex(void);
+extern const char * _PyImport_ResolveNameWithPackageContext(const char *name);
+extern const char * _PyImport_SwapPackageContext(const char *newcontext);
+
+extern int _PyImport_GetDLOpenFlags(PyInterpreterState *interp);
+extern void _PyImport_SetDLOpenFlags(PyInterpreterState *interp, int new_val);
+
+extern PyObject * _PyImport_InitModules(PyInterpreterState *interp);
+extern PyObject * _PyImport_GetModules(PyInterpreterState *interp);
+extern void _PyImport_ClearModules(PyInterpreterState *interp);
+
+extern void _PyImport_ClearModulesByIndex(PyInterpreterState *interp);
+
+extern int _PyImport_InitDefaultImportFunc(PyInterpreterState *interp);
+extern int _PyImport_IsDefaultImportFunc(
+ PyInterpreterState *interp,
+ PyObject *func);
+
+extern PyObject * _PyImport_GetImportlibLoader(
+ PyInterpreterState *interp,
+ const char *loader_name);
+extern PyObject * _PyImport_GetImportlibExternalLoader(
+ PyInterpreterState *interp,
+ const char *loader_name);
+extern PyObject * _PyImport_BlessMyLoader(
+ PyInterpreterState *interp,
+ PyObject *module_globals);
+extern PyObject * _PyImport_ImportlibModuleRepr(
+ PyInterpreterState *interp,
+ PyObject *module);
+
+
+extern PyStatus _PyImport_Init(void);
+extern void _PyImport_Fini(void);
+extern void _PyImport_Fini2(void);
+
+extern PyStatus _PyImport_InitCore(
+ PyThreadState *tstate,
+ PyObject *sysmod,
+ int importlib);
+extern PyStatus _PyImport_InitExternal(PyThreadState *tstate);
+extern void _PyImport_FiniCore(PyInterpreterState *interp);
+extern void _PyImport_FiniExternal(PyInterpreterState *interp);
+
+
#ifdef HAVE_FORK
-extern PyStatus _PyImport_ReInitLock(void);
+extern PyStatus _PyImport_ReInitLock(PyInterpreterState *interp);
#endif
-extern PyObject* _PyImport_BootstrapImp(PyThreadState *tstate);
+
+
+extern PyObject* _PyImport_GetBuiltinModuleNames(void);
struct _module_alias {
const char *name; /* ASCII encoded string */
@@ -20,6 +169,13 @@ PyAPI_DATA(const struct _frozen *) _PyImport_FrozenStdlib;
PyAPI_DATA(const struct _frozen *) _PyImport_FrozenTest;
extern const struct _module_alias * _PyImport_FrozenAliases;
+PyAPI_FUNC(int) _PyImport_CheckSubinterpIncompatibleExtensionAllowed(
+ const char *name);
+
+
+// for testing
+PyAPI_FUNC(int) _PyImport_ClearExtension(PyObject *name, PyObject *filename);
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_initconfig.h b/contrib/tools/python3/src/Include/internal/pycore_initconfig.h
index d765600fec..4cbd14a61d 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_initconfig.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_initconfig.h
@@ -36,15 +36,13 @@ struct pyruntimestate;
._type = _PyStatus_TYPE_EXIT, \
.exitcode = (EXITCODE)}
#define _PyStatus_IS_ERROR(err) \
- (err._type == _PyStatus_TYPE_ERROR)
+ ((err)._type == _PyStatus_TYPE_ERROR)
#define _PyStatus_IS_EXIT(err) \
- (err._type == _PyStatus_TYPE_EXIT)
+ ((err)._type == _PyStatus_TYPE_EXIT)
#define _PyStatus_EXCEPTION(err) \
- (err._type != _PyStatus_TYPE_OK)
+ ((err)._type != _PyStatus_TYPE_OK)
#define _PyStatus_UPDATE_FUNC(err) \
- do { err.func = _PyStatus_GET_FUNC(); } while (0)
-
-PyObject* _PyErr_SetFromPyStatus(PyStatus status);
+ do { (err).func = _PyStatus_GET_FUNC(); } while (0)
/* --- PyWideStringList ------------------------------------------------ */
@@ -170,8 +168,6 @@ extern void _Py_DumpPathConfig(PyThreadState *tstate);
PyAPI_FUNC(PyObject*) _Py_Get_Getpath_CodeObject(void);
-extern int _Py_global_config_int_max_str_digits;
-
/* --- Function used for testing ---------------------------------- */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_instruments.h b/contrib/tools/python3/src/Include/internal/pycore_instruments.h
new file mode 100644
index 0000000000..87f70d2dc0
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_instruments.h
@@ -0,0 +1,106 @@
+
+#ifndef Py_INTERNAL_INSTRUMENT_H
+#define Py_INTERNAL_INSTRUMENT_H
+
+
+#include "pycore_bitutils.h" // _Py_popcount32
+#include "pycore_frame.h"
+
+#include "cpython/code.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PY_MONITORING_TOOL_IDS 8
+
+/* Local events.
+ * These require bytecode instrumentation */
+
+#define PY_MONITORING_EVENT_PY_START 0
+#define PY_MONITORING_EVENT_PY_RESUME 1
+#define PY_MONITORING_EVENT_PY_RETURN 2
+#define PY_MONITORING_EVENT_PY_YIELD 3
+#define PY_MONITORING_EVENT_CALL 4
+#define PY_MONITORING_EVENT_LINE 5
+#define PY_MONITORING_EVENT_INSTRUCTION 6
+#define PY_MONITORING_EVENT_JUMP 7
+#define PY_MONITORING_EVENT_BRANCH 8
+#define PY_MONITORING_EVENT_STOP_ITERATION 9
+
+#define PY_MONITORING_IS_INSTRUMENTED_EVENT(ev) \
+ ((ev) < _PY_MONITORING_LOCAL_EVENTS)
+
+/* Other events, mainly exceptions */
+
+#define PY_MONITORING_EVENT_RAISE 10
+#define PY_MONITORING_EVENT_EXCEPTION_HANDLED 11
+#define PY_MONITORING_EVENT_PY_UNWIND 12
+#define PY_MONITORING_EVENT_PY_THROW 13
+#define PY_MONITORING_EVENT_RERAISE 14
+
+
+/* Ancilliary events */
+
+#define PY_MONITORING_EVENT_C_RETURN 15
+#define PY_MONITORING_EVENT_C_RAISE 16
+
+
+typedef uint32_t _PyMonitoringEventSet;
+
+/* Tool IDs */
+
+/* These are defined in PEP 669 for convenience to avoid clashes */
+#define PY_MONITORING_DEBUGGER_ID 0
+#define PY_MONITORING_COVERAGE_ID 1
+#define PY_MONITORING_PROFILER_ID 2
+#define PY_MONITORING_OPTIMIZER_ID 5
+
+/* Internal IDs used to suuport sys.setprofile() and sys.settrace() */
+#define PY_MONITORING_SYS_PROFILE_ID 6
+#define PY_MONITORING_SYS_TRACE_ID 7
+
+
+PyObject *_PyMonitoring_RegisterCallback(int tool_id, int event_id, PyObject *obj);
+
+int _PyMonitoring_SetEvents(int tool_id, _PyMonitoringEventSet events);
+
+extern int
+_Py_call_instrumentation(PyThreadState *tstate, int event,
+ _PyInterpreterFrame *frame, _Py_CODEUNIT *instr);
+
+extern int
+_Py_call_instrumentation_line(PyThreadState *tstate, _PyInterpreterFrame* frame,
+ _Py_CODEUNIT *instr, _Py_CODEUNIT *prev);
+
+extern int
+_Py_call_instrumentation_instruction(
+ PyThreadState *tstate, _PyInterpreterFrame* frame, _Py_CODEUNIT *instr);
+
+_Py_CODEUNIT *
+_Py_call_instrumentation_jump(
+ PyThreadState *tstate, int event,
+ _PyInterpreterFrame *frame, _Py_CODEUNIT *instr, _Py_CODEUNIT *target);
+
+extern int
+_Py_call_instrumentation_arg(PyThreadState *tstate, int event,
+ _PyInterpreterFrame *frame, _Py_CODEUNIT *instr, PyObject *arg);
+
+extern int
+_Py_call_instrumentation_2args(PyThreadState *tstate, int event,
+ _PyInterpreterFrame *frame, _Py_CODEUNIT *instr, PyObject *arg0, PyObject *arg1);
+
+extern void
+_Py_call_instrumentation_exc2(PyThreadState *tstate, int event,
+ _PyInterpreterFrame *frame, _Py_CODEUNIT *instr, PyObject *arg0, PyObject *arg1);
+
+extern int
+_Py_Instrumentation_GetLine(PyCodeObject *code, int index);
+
+extern PyObject _PyInstrumentation_MISSING;
+extern PyObject _PyInstrumentation_DISABLE;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_INSTRUMENT_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_interp.h b/contrib/tools/python3/src/Include/internal/pycore_interp.h
index 02d25d67c7..37cc88ed08 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_interp.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_interp.h
@@ -10,61 +10,58 @@ extern "C" {
#include <stdbool.h>
-#include "pycore_atomic.h" // _Py_atomic_address
#include "pycore_ast_state.h" // struct ast_state
+#include "pycore_atexit.h" // struct atexit_state
+#include "pycore_atomic.h" // _Py_atomic_address
+#include "pycore_ceval_state.h" // struct _ceval_state
#include "pycore_code.h" // struct callable_cache
#include "pycore_context.h" // struct _Py_context_state
-#include "pycore_dict.h" // struct _Py_dict_state
+#include "pycore_dict_state.h" // struct _Py_dict_state
+#include "pycore_dtoa.h" // struct _dtoa_state
#include "pycore_exceptions.h" // struct _Py_exc_state
#include "pycore_floatobject.h" // struct _Py_float_state
+#include "pycore_function.h" // FUNC_MAX_WATCHERS
#include "pycore_genobject.h" // struct _Py_async_gen_state
-#include "pycore_gil.h" // struct _gil_runtime_state
#include "pycore_gc.h" // struct _gc_runtime_state
+#include "pycore_global_objects.h" // struct _Py_interp_static_objects
+#include "pycore_import.h" // struct _import_state
+#include "pycore_instruments.h" // _PY_MONITORING_EVENTS
#include "pycore_list.h" // struct _Py_list_state
+#include "pycore_object_state.h" // struct _py_object_state
+#include "pycore_obmalloc.h" // struct obmalloc_state
#include "pycore_tuple.h" // struct _Py_tuple_state
#include "pycore_typeobject.h" // struct type_cache
#include "pycore_unicodeobject.h" // struct _Py_unicode_state
#include "pycore_warnings.h" // struct _warnings_runtime_state
-struct _pending_calls {
- PyThread_type_lock lock;
- /* Request for running pending calls. */
- _Py_atomic_int calls_to_do;
- /* Request for looking at the `async_exc` field of the current
- thread state.
- Guarded by the GIL. */
- int async_exc;
-#define NPENDINGCALLS 32
- struct {
- int (*func)(void *);
- void *arg;
- } calls[NPENDINGCALLS];
- int first;
- int last;
-};
-struct _ceval_state {
- int recursion_limit;
- /* This single variable consolidates all requests to break out of
- the fast path in the eval loop. */
- _Py_atomic_int eval_breaker;
- /* Request for dropping the GIL */
- _Py_atomic_int gil_drop_request;
- struct _pending_calls pending;
+struct _Py_long_state {
+ int max_str_digits;
};
-// atexit state
-typedef struct {
- PyObject *func;
- PyObject *args;
- PyObject *kwargs;
-} atexit_callback;
+/* cross-interpreter data registry */
+
+/* For now we use a global registry of shareable classes. An
+ alternative would be to add a tp_* slot for a class's
+ crossinterpdatafunc. It would be simpler and more efficient. */
+
+struct _xidregitem;
+
+struct _xidregitem {
+ struct _xidregitem *prev;
+ struct _xidregitem *next;
+ /* This can be a dangling pointer, but only if weakref is set. */
+ PyTypeObject *cls;
+ /* This is NULL for builtin types. */
+ PyObject *weakref;
+ size_t refcount;
+ crossinterpdatafunc getdata;
+};
-struct atexit_state {
- atexit_callback **callbacks;
- int ncallbacks;
- int callback_len;
+struct _xidregistry {
+ PyThread_type_lock mutex;
+ struct _xidregitem *head;
};
@@ -73,12 +70,26 @@ struct atexit_state {
/* PyInterpreterState holds the global state for one of the runtime's
interpreters. Typically the initial (main) interpreter is the only one.
- The PyInterpreterState typedef is in Include/pystate.h.
+ The PyInterpreterState typedef is in Include/pytypedefs.h.
*/
struct _is {
PyInterpreterState *next;
+ int64_t id;
+ int64_t id_refcount;
+ int requires_idref;
+ PyThread_type_lock id_mutex;
+
+ /* Has been initialized to a safe state.
+
+ In order to be effective, this must be set to 0 during or right
+ after allocation. */
+ int _initialized;
+ int finalizing;
+
+ uint64_t monitoring_version;
+ uint64_t last_restart_version;
struct pythreads {
uint64_t next_unique_id;
/* The linked list of threads, newest first. */
@@ -97,36 +108,44 @@ struct _is {
Get runtime from tstate: tstate->interp->runtime. */
struct pyruntimestate *runtime;
- int64_t id;
- int64_t id_refcount;
- int requires_idref;
- PyThread_type_lock id_mutex;
+ /* Set by Py_EndInterpreter().
- /* Has been initialized to a safe state.
+ Use _PyInterpreterState_GetFinalizing()
+ and _PyInterpreterState_SetFinalizing()
+ to access it, don't access it directly. */
+ _Py_atomic_address _finalizing;
- In order to be effective, this must be set to 0 during or right
- after allocation. */
- int _initialized;
- int finalizing;
+ struct _gc_runtime_state gc;
- /* Was this interpreter statically allocated? */
- bool _static;
+ /* The following fields are here to avoid allocation during init.
+ The data is exposed through PyInterpreterState pointer fields.
+ These fields should not be accessed directly outside of init.
- struct _ceval_state ceval;
- struct _gc_runtime_state gc;
+ All other PyInterpreterState pointer fields are populated when
+ needed and default to NULL.
+
+ For now there are some exceptions to that rule, which require
+ allocation during init. These will be addressed on a case-by-case
+ basis. Also see _PyRuntimeState regarding the various mutex fields.
+ */
- // sys.modules dictionary
- PyObject *modules;
- PyObject *modules_by_index;
// Dictionary of the sys module
PyObject *sysdict;
+
// Dictionary of the builtins module
PyObject *builtins;
- // importlib module
- PyObject *importlib;
- // override for config->use_frozen_modules (for tests)
- // (-1: "off", 1: "on", 0: no override)
- int override_frozen_modules;
+
+ struct _ceval_state ceval;
+
+ struct _import_state imports;
+
+ /* The per-interpreter GIL, which might not be used. */
+ struct _gil_runtime_state _gil;
+
+ /* ---------- IMPORTANT ---------------------------
+ The fields above this line are declared as early as
+ possible to facilitate out-of-process observability
+ tools. */
PyObject *codec_search_path;
PyObject *codec_search_cache;
@@ -134,17 +153,19 @@ struct _is {
int codecs_initialized;
PyConfig config;
-#ifdef HAVE_DLOPEN
- int dlopenflags;
-#endif
+ unsigned long feature_flags;
PyObject *dict; /* Stores per-interpreter state */
+ PyObject *sysdict_copy;
PyObject *builtins_copy;
- PyObject *import_func;
// Initialized to _PyEval_EvalFrameDefault().
_PyFrameEvalFunction eval_frame;
+ PyFunction_WatchCallback func_watchers[FUNC_MAX_WATCHERS];
+ // One bit is set for each non-NULL entry in func_watchers
+ uint8_t active_func_watchers;
+
Py_ssize_t co_extra_user_count;
freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS];
@@ -157,10 +178,20 @@ struct _is {
struct _warnings_runtime_state warnings;
struct atexit_state atexit;
+ struct _obmalloc_state obmalloc;
+
PyObject *audit_hooks;
+ PyType_WatchCallback type_watchers[TYPE_MAX_WATCHERS];
+ PyCode_WatchCallback code_watchers[CODE_MAX_WATCHERS];
+ // One bit is set for each non-NULL entry in code_watchers
+ uint8_t active_code_watchers;
+ struct _py_object_state object_state;
struct _Py_unicode_state unicode;
struct _Py_float_state float_state;
+ struct _Py_long_state long_state;
+ struct _dtoa_state dtoa;
+ struct _py_func_state func_state;
/* Using a cache is very effective since typically only a single slice is
created and then deleted again. */
PySliceObject *slice_cache;
@@ -173,47 +204,64 @@ struct _is {
struct _Py_exc_state exc_state;
struct ast_state ast;
- struct type_cache type_cache;
+ struct types_state types;
struct callable_cache callable_cache;
-
- int int_max_str_digits;
-
- /* The following fields are here to avoid allocation during init.
- The data is exposed through PyInterpreterState pointer fields.
- These fields should not be accessed directly outside of init.
-
- All other PyInterpreterState pointer fields are populated when
- needed and default to NULL.
-
- For now there are some exceptions to that rule, which require
- allocation during init. These will be addressed on a case-by-case
- basis. Also see _PyRuntimeState regarding the various mutex fields.
- */
-
- /* the initial PyInterpreterState.threads.head */
+ PyCodeObject *interpreter_trampoline;
+
+ _Py_GlobalMonitors monitors;
+ bool f_opcode_trace_set;
+ bool sys_profile_initialized;
+ bool sys_trace_initialized;
+ Py_ssize_t sys_profiling_threads; /* Count of threads with c_profilefunc set */
+ Py_ssize_t sys_tracing_threads; /* Count of threads with c_tracefunc set */
+ PyObject *monitoring_callables[PY_MONITORING_TOOL_IDS][_PY_MONITORING_EVENTS];
+ PyObject *monitoring_tool_names[PY_MONITORING_TOOL_IDS];
+
+ struct _Py_interp_cached_objects cached_objects;
+ struct _Py_interp_static_objects static_objects;
+
+ // XXX Remove this field once we have a tp_* slot.
+ struct _xidregistry xidregistry;
+ /* The thread currently executing in the __main__ module, if any. */
+ PyThreadState *threads_main;
+ /* The ID of the OS thread in which we are finalizing.
+ We use _Py_atomic_address instead of adding a new _Py_atomic_ulong. */
+ _Py_atomic_address _finalizing_id;
+
+ /* the initial PyInterpreterState.threads.head */
PyThreadState _initial_thread;
};
/* other API */
-extern void _PyInterpreterState_ClearModules(PyInterpreterState *interp);
extern void _PyInterpreterState_Clear(PyThreadState *tstate);
-/* cross-interpreter data registry */
+static inline PyThreadState*
+_PyInterpreterState_GetFinalizing(PyInterpreterState *interp) {
+ return (PyThreadState*)_Py_atomic_load_relaxed(&interp->_finalizing);
+}
-/* For now we use a global registry of shareable classes. An
- alternative would be to add a tp_* slot for a class's
- crossinterpdatafunc. It would be simpler and more efficient. */
+static inline unsigned long
+_PyInterpreterState_GetFinalizingID(PyInterpreterState *interp) {
+ return (unsigned long)_Py_atomic_load_relaxed(&interp->_finalizing_id);
+}
-struct _xidregitem;
+static inline void
+_PyInterpreterState_SetFinalizing(PyInterpreterState *interp, PyThreadState *tstate) {
+ _Py_atomic_store_relaxed(&interp->_finalizing, (uintptr_t)tstate);
+ if (tstate == NULL) {
+ _Py_atomic_store_relaxed(&interp->_finalizing_id, 0);
+ }
+ else {
+ // XXX Re-enable this assert once gh-109860 is fixed.
+ //assert(tstate->thread_id == PyThread_get_thread_ident());
+ _Py_atomic_store_relaxed(&interp->_finalizing_id,
+ (uintptr_t)tstate->thread_id);
+ }
+}
-struct _xidregitem {
- PyTypeObject *cls;
- crossinterpdatafunc getdata;
- struct _xidregitem *next;
-};
PyAPI_FUNC(PyInterpreterState*) _PyInterpreterState_LookUpID(int64_t);
diff --git a/contrib/tools/python3/src/Include/internal/pycore_intrinsics.h b/contrib/tools/python3/src/Include/internal/pycore_intrinsics.h
new file mode 100644
index 0000000000..39f15681b7
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_intrinsics.h
@@ -0,0 +1,32 @@
+// Auto-generated by Tools/build/generate_opcode_h.py from Lib/opcode.py
+
+/* Unary Functions: */
+#define INTRINSIC_1_INVALID 0
+#define INTRINSIC_PRINT 1
+#define INTRINSIC_IMPORT_STAR 2
+#define INTRINSIC_STOPITERATION_ERROR 3
+#define INTRINSIC_ASYNC_GEN_WRAP 4
+#define INTRINSIC_UNARY_POSITIVE 5
+#define INTRINSIC_LIST_TO_TUPLE 6
+#define INTRINSIC_TYPEVAR 7
+#define INTRINSIC_PARAMSPEC 8
+#define INTRINSIC_TYPEVARTUPLE 9
+#define INTRINSIC_SUBSCRIPT_GENERIC 10
+#define INTRINSIC_TYPEALIAS 11
+
+#define MAX_INTRINSIC_1 11
+
+
+/* Binary Functions: */
+#define INTRINSIC_2_INVALID 0
+#define INTRINSIC_PREP_RERAISE_STAR 1
+#define INTRINSIC_TYPEVAR_WITH_BOUND 2
+#define INTRINSIC_TYPEVAR_WITH_CONSTRAINTS 3
+#define INTRINSIC_SET_FUNCTION_TYPE_PARAMS 4
+
+#define MAX_INTRINSIC_2 4
+
+typedef PyObject *(*instrinsic_func1)(PyThreadState* tstate, PyObject *value);
+typedef PyObject *(*instrinsic_func2)(PyThreadState* tstate, PyObject *value1, PyObject *value2);
+extern const instrinsic_func1 _PyIntrinsics_UnaryFunctions[];
+extern const instrinsic_func2 _PyIntrinsics_BinaryFunctions[];
diff --git a/contrib/tools/python3/src/Include/internal/pycore_list.h b/contrib/tools/python3/src/Include/internal/pycore_list.h
index 860dce1fd5..2fcbe12cd6 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_list.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_list.h
@@ -35,7 +35,7 @@ struct _Py_list_state {
#endif
};
-#define _PyList_ITEMS(op) (_PyList_CAST(op)->ob_item)
+#define _PyList_ITEMS(op) _Py_RVALUE(_PyList_CAST(op)->ob_item)
extern int
_PyList_AppendTakeRefListResize(PyListObject *self, PyObject *newitem);
@@ -56,6 +56,27 @@ _PyList_AppendTakeRef(PyListObject *self, PyObject *newitem)
return _PyList_AppendTakeRefListResize(self, newitem);
}
+// Repeat the bytes of a buffer in place
+static inline void
+_Py_memory_repeat(char* dest, Py_ssize_t len_dest, Py_ssize_t len_src)
+{
+ assert(len_src > 0);
+ Py_ssize_t copied = len_src;
+ while (copied < len_dest) {
+ Py_ssize_t bytes_to_copy = Py_MIN(copied, len_dest - copied);
+ memcpy(dest + copied, dest, bytes_to_copy);
+ copied += bytes_to_copy;
+ }
+}
+
+typedef struct {
+ PyObject_HEAD
+ Py_ssize_t it_index;
+ PyListObject *it_seq; /* Set to NULL when iterator is exhausted */
+} _PyListIterObject;
+
+extern PyObject *_PyList_FromArraySteal(PyObject *const *src, Py_ssize_t n);
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_long.h b/contrib/tools/python3/src/Include/internal/pycore_long.h
index 0f466eb60f..64c00cb147 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_long.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_long.h
@@ -108,6 +108,150 @@ PyAPI_FUNC(char*) _PyLong_FormatBytesWriter(
int base,
int alternate);
+/* Long value tag bits:
+ * 0-1: Sign bits value = (1-sign), ie. negative=2, positive=0, zero=1.
+ * 2: Reserved for immortality bit
+ * 3+ Unsigned digit count
+ */
+#define SIGN_MASK 3
+#define SIGN_ZERO 1
+#define SIGN_NEGATIVE 2
+#define NON_SIZE_BITS 3
+
+/* The functions _PyLong_IsCompact and _PyLong_CompactValue are defined
+ * in Include/cpython/longobject.h, since they need to be inline.
+ *
+ * "Compact" values have at least one bit to spare,
+ * so that addition and subtraction can be performed on the values
+ * without risk of overflow.
+ *
+ * The inline functions need tag bits.
+ * For readability, rather than do `#define SIGN_MASK _PyLong_SIGN_MASK`
+ * we define them to the numbers in both places and then assert that
+ * they're the same.
+ */
+static_assert(SIGN_MASK == _PyLong_SIGN_MASK, "SIGN_MASK does not match _PyLong_SIGN_MASK");
+static_assert(NON_SIZE_BITS == _PyLong_NON_SIZE_BITS, "NON_SIZE_BITS does not match _PyLong_NON_SIZE_BITS");
+
+/* All *compact" values are guaranteed to fit into
+ * a Py_ssize_t with at least one bit to spare.
+ * In other words, for 64 bit machines, compact
+ * will be signed 63 (or fewer) bit values
+ */
+
+/* Return 1 if the argument is compact int */
+static inline int
+_PyLong_IsNonNegativeCompact(const PyLongObject* op) {
+ assert(PyLong_Check(op));
+ return op->long_value.lv_tag <= (1 << NON_SIZE_BITS);
+}
+
+
+static inline int
+_PyLong_BothAreCompact(const PyLongObject* a, const PyLongObject* b) {
+ assert(PyLong_Check(a));
+ assert(PyLong_Check(b));
+ return (a->long_value.lv_tag | b->long_value.lv_tag) < (2 << NON_SIZE_BITS);
+}
+
+static inline bool
+_PyLong_IsZero(const PyLongObject *op)
+{
+ return (op->long_value.lv_tag & SIGN_MASK) == SIGN_ZERO;
+}
+
+static inline bool
+_PyLong_IsNegative(const PyLongObject *op)
+{
+ return (op->long_value.lv_tag & SIGN_MASK) == SIGN_NEGATIVE;
+}
+
+static inline bool
+_PyLong_IsPositive(const PyLongObject *op)
+{
+ return (op->long_value.lv_tag & SIGN_MASK) == 0;
+}
+
+static inline Py_ssize_t
+_PyLong_DigitCount(const PyLongObject *op)
+{
+ assert(PyLong_Check(op));
+ return op->long_value.lv_tag >> NON_SIZE_BITS;
+}
+
+/* Equivalent to _PyLong_DigitCount(op) * _PyLong_NonCompactSign(op) */
+static inline Py_ssize_t
+_PyLong_SignedDigitCount(const PyLongObject *op)
+{
+ assert(PyLong_Check(op));
+ Py_ssize_t sign = 1 - (op->long_value.lv_tag & SIGN_MASK);
+ return sign * (Py_ssize_t)(op->long_value.lv_tag >> NON_SIZE_BITS);
+}
+
+static inline int
+_PyLong_CompactSign(const PyLongObject *op)
+{
+ assert(PyLong_Check(op));
+ assert(_PyLong_IsCompact(op));
+ return 1 - (op->long_value.lv_tag & SIGN_MASK);
+}
+
+static inline int
+_PyLong_NonCompactSign(const PyLongObject *op)
+{
+ assert(PyLong_Check(op));
+ assert(!_PyLong_IsCompact(op));
+ return 1 - (op->long_value.lv_tag & SIGN_MASK);
+}
+
+/* Do a and b have the same sign? */
+static inline int
+_PyLong_SameSign(const PyLongObject *a, const PyLongObject *b)
+{
+ return (a->long_value.lv_tag & SIGN_MASK) == (b->long_value.lv_tag & SIGN_MASK);
+}
+
+#define TAG_FROM_SIGN_AND_SIZE(sign, size) ((1 - (sign)) | ((size) << NON_SIZE_BITS))
+
+static inline void
+_PyLong_SetSignAndDigitCount(PyLongObject *op, int sign, Py_ssize_t size)
+{
+ assert(size >= 0);
+ assert(-1 <= sign && sign <= 1);
+ assert(sign != 0 || size == 0);
+ op->long_value.lv_tag = TAG_FROM_SIGN_AND_SIZE(sign, (size_t)size);
+}
+
+static inline void
+_PyLong_SetDigitCount(PyLongObject *op, Py_ssize_t size)
+{
+ assert(size >= 0);
+ op->long_value.lv_tag = (((size_t)size) << NON_SIZE_BITS) | (op->long_value.lv_tag & SIGN_MASK);
+}
+
+#define NON_SIZE_MASK ~((1 << NON_SIZE_BITS) - 1)
+
+static inline void
+_PyLong_FlipSign(PyLongObject *op) {
+ unsigned int flipped_sign = 2 - (op->long_value.lv_tag & SIGN_MASK);
+ op->long_value.lv_tag &= NON_SIZE_MASK;
+ op->long_value.lv_tag |= flipped_sign;
+}
+
+#define _PyLong_DIGIT_INIT(val) \
+ { \
+ .ob_base = _PyObject_HEAD_INIT(&PyLong_Type) \
+ .long_value = { \
+ .lv_tag = TAG_FROM_SIGN_AND_SIZE( \
+ (val) == 0 ? 0 : ((val) < 0 ? -1 : 1), \
+ (val) == 0 ? 0 : 1), \
+ { ((val) >= 0 ? (val) : -(val)) }, \
+ } \
+ }
+
+#define _PyLong_FALSE_TAG TAG_FROM_SIGN_AND_SIZE(0, 0)
+#define _PyLong_TRUE_TAG TAG_FROM_SIGN_AND_SIZE(1, 1)
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_memoryobject.h b/contrib/tools/python3/src/Include/internal/pycore_memoryobject.h
new file mode 100644
index 0000000000..fe19e3f961
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_memoryobject.h
@@ -0,0 +1,18 @@
+#ifndef Py_INTERNAL_MEMORYOBJECT_H
+#define Py_INTERNAL_MEMORYOBJECT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+PyObject *
+_PyMemoryView_FromBufferProc(PyObject *v, int flags,
+ getbufferproc bufferproc);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_MEMORYOBJECT_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_moduleobject.h b/contrib/tools/python3/src/Include/internal/pycore_moduleobject.h
index 76361b8dff..15a1bcb6ae 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_moduleobject.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_moduleobject.h
@@ -36,6 +36,9 @@ static inline PyObject* _PyModule_GetDict(PyObject *mod) {
return dict;
}
+PyObject* _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress);
+PyObject* _Py_module_getattro(PyModuleObject *m, PyObject *name);
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_object.h b/contrib/tools/python3/src/Include/internal/pycore_object.h
index f022f82469..7a2f13a21b 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_object.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_object.h
@@ -14,28 +14,92 @@ extern "C" {
#include "pycore_pystate.h" // _PyInterpreterState_GET()
#include "pycore_runtime.h" // _PyRuntime
-#define _PyObject_IMMORTAL_INIT(type) \
- { \
- .ob_refcnt = 999999999, \
- .ob_type = type, \
- }
-#define _PyVarObject_IMMORTAL_INIT(type, size) \
- { \
- .ob_base = _PyObject_IMMORTAL_INIT(type), \
- .ob_size = size, \
- }
+/* We need to maintain an internal copy of Py{Var}Object_HEAD_INIT to avoid
+ designated initializer conflicts in C++20. If we use the deinition in
+ object.h, we will be mixing designated and non-designated initializers in
+ pycore objects which is forbiddent in C++20. However, if we then use
+ designated initializers in object.h then Extensions without designated break.
+ Furthermore, we can't use designated initializers in Extensions since these
+ are not supported pre-C++20. Thus, keeping an internal copy here is the most
+ backwards compatible solution */
+#define _PyObject_HEAD_INIT(type) \
+ { \
+ _PyObject_EXTRA_INIT \
+ .ob_refcnt = _Py_IMMORTAL_REFCNT, \
+ .ob_type = (type) \
+ },
+#define _PyVarObject_HEAD_INIT(type, size) \
+ { \
+ .ob_base = _PyObject_HEAD_INIT(type) \
+ .ob_size = size \
+ },
PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalRefcountErrorFunc(
const char *func,
const char *message);
-#define _Py_FatalRefcountError(message) _Py_FatalRefcountErrorFunc(__func__, message)
+#define _Py_FatalRefcountError(message) \
+ _Py_FatalRefcountErrorFunc(__func__, (message))
+
+
+#ifdef Py_REF_DEBUG
+/* The symbol is only exposed in the API for the sake of extensions
+ built against the pre-3.12 stable ABI. */
+PyAPI_DATA(Py_ssize_t) _Py_RefTotal;
+
+extern void _Py_AddRefTotal(PyInterpreterState *, Py_ssize_t);
+extern void _Py_IncRefTotal(PyInterpreterState *);
+extern void _Py_DecRefTotal(PyInterpreterState *);
+
+# define _Py_DEC_REFTOTAL(interp) \
+ interp->object_state.reftotal--
+#endif
+
+// Increment reference count by n
+static inline void _Py_RefcntAdd(PyObject* op, Py_ssize_t n)
+{
+ if (_Py_IsImmortal(op)) {
+ return;
+ }
+#ifdef Py_REF_DEBUG
+ _Py_AddRefTotal(_PyInterpreterState_GET(), n);
+#endif
+ op->ob_refcnt += n;
+}
+#define _Py_RefcntAdd(op, n) _Py_RefcntAdd(_PyObject_CAST(op), n)
+
+static inline void _Py_SetImmortal(PyObject *op)
+{
+ if (op) {
+ op->ob_refcnt = _Py_IMMORTAL_REFCNT;
+ }
+}
+#define _Py_SetImmortal(op) _Py_SetImmortal(_PyObject_CAST(op))
+
+/* _Py_ClearImmortal() should only be used during runtime finalization. */
+static inline void _Py_ClearImmortal(PyObject *op)
+{
+ if (op) {
+ assert(op->ob_refcnt == _Py_IMMORTAL_REFCNT);
+ op->ob_refcnt = 1;
+ Py_DECREF(op);
+ }
+}
+#define _Py_ClearImmortal(op) \
+ do { \
+ _Py_ClearImmortal(_PyObject_CAST(op)); \
+ op = NULL; \
+ } while (0)
static inline void
_Py_DECREF_SPECIALIZED(PyObject *op, const destructor destruct)
{
+ if (_Py_IsImmortal(op)) {
+ return;
+ }
+ _Py_DECREF_STAT_INC();
#ifdef Py_REF_DEBUG
- _Py_RefTotal--;
+ _Py_DEC_REFTOTAL(_PyInterpreterState_GET());
#endif
if (--op->ob_refcnt != 0) {
assert(op->ob_refcnt > 0);
@@ -51,8 +115,12 @@ _Py_DECREF_SPECIALIZED(PyObject *op, const destructor destruct)
static inline void
_Py_DECREF_NO_DEALLOC(PyObject *op)
{
+ if (_Py_IsImmortal(op)) {
+ return;
+ }
+ _Py_DECREF_STAT_INC();
#ifdef Py_REF_DEBUG
- _Py_RefTotal--;
+ _Py_DEC_REFTOTAL(_PyInterpreterState_GET());
#endif
op->ob_refcnt--;
#ifdef Py_DEBUG
@@ -62,6 +130,11 @@ _Py_DECREF_NO_DEALLOC(PyObject *op)
#endif
}
+#ifdef Py_REF_DEBUG
+# undef _Py_DEC_REFTOTAL
+#endif
+
+
PyAPI_FUNC(int) _PyType_CheckConsistency(PyTypeObject *type);
PyAPI_FUNC(int) _PyDict_CheckConsistency(PyObject *mp, int check_content);
@@ -79,6 +152,7 @@ _PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
extern void _PyType_InitCache(PyInterpreterState *interp);
+extern void _PyObject_InitState(PyInterpreterState *interp);
/* Inline functions trading binary compatibility for speed:
_PyObject_Init() is the fast version of PyObject_Init(), and
@@ -100,8 +174,9 @@ static inline void
_PyObject_InitVar(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size)
{
assert(op != NULL);
- Py_SET_SIZE(op, size);
+ assert(typeobj != &PyLong_Type);
_PyObject_Init((PyObject *)op, typeobj);
+ Py_SET_SIZE(op, size);
}
@@ -190,22 +265,64 @@ static inline void _PyObject_GC_UNTRACK(
#endif
#ifdef Py_REF_DEBUG
+extern void _PyInterpreterState_FinalizeRefTotal(PyInterpreterState *);
+extern void _Py_FinalizeRefTotal(_PyRuntimeState *);
extern void _PyDebug_PrintTotalRefs(void);
#endif
#ifdef Py_TRACE_REFS
extern void _Py_AddToAllObjects(PyObject *op, int force);
-extern void _Py_PrintReferences(FILE *);
-extern void _Py_PrintReferenceAddresses(FILE *);
+extern void _Py_PrintReferences(PyInterpreterState *, FILE *);
+extern void _Py_PrintReferenceAddresses(PyInterpreterState *, FILE *);
#endif
+
+/* Return the *address* of the object's weaklist. The address may be
+ * dereferenced to get the current head of the weaklist. This is useful
+ * for iterating over the linked list of weakrefs, especially when the
+ * list is being modified externally (e.g. refs getting removed).
+ *
+ * The returned pointer should not be used to change the head of the list
+ * nor should it be used to add, remove, or swap any refs in the list.
+ * That is the sole responsibility of the code in weakrefobject.c.
+ */
static inline PyObject **
_PyObject_GET_WEAKREFS_LISTPTR(PyObject *op)
{
+ if (PyType_Check(op) &&
+ ((PyTypeObject *)op)->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
+ PyInterpreterState *interp = _PyInterpreterState_GET();
+ static_builtin_state *state = _PyStaticType_GetState(
+ interp, (PyTypeObject *)op);
+ return _PyStaticType_GET_WEAKREFS_LISTPTR(state);
+ }
+ // Essentially _PyObject_GET_WEAKREFS_LISTPTR_FROM_OFFSET():
Py_ssize_t offset = Py_TYPE(op)->tp_weaklistoffset;
return (PyObject **)((char *)op + offset);
}
+/* This is a special case of _PyObject_GET_WEAKREFS_LISTPTR().
+ * Only the most fundamental lookup path is used.
+ * Consequently, static types should not be used.
+ *
+ * For static builtin types the returned pointer will always point
+ * to a NULL tp_weaklist. This is fine for any deallocation cases,
+ * since static types are never deallocated and static builtin types
+ * are only finalized at the end of runtime finalization.
+ *
+ * If the weaklist for static types is actually needed then use
+ * _PyObject_GET_WEAKREFS_LISTPTR().
+ */
+static inline PyWeakReference **
+_PyObject_GET_WEAKREFS_LISTPTR_FROM_OFFSET(PyObject *op)
+{
+ assert(!PyType_Check(op) ||
+ ((PyTypeObject *)op)->tp_flags & Py_TPFLAGS_HEAPTYPE);
+ Py_ssize_t offset = Py_TYPE(op)->tp_weaklistoffset;
+ return (PyWeakReference **)((char *)op + offset);
+}
+
+
// Fast inlined version of PyObject_IS_GC()
static inline int
_PyObject_IS_GC(PyObject *obj)
@@ -222,7 +339,7 @@ static inline size_t
_PyType_PreHeaderSize(PyTypeObject *tp)
{
return _PyType_IS_GC(tp) * sizeof(PyGC_Head) +
- _PyType_HasFeature(tp, Py_TPFLAGS_MANAGED_DICT) * 2 * sizeof(PyObject *);
+ _PyType_HasFeature(tp, Py_TPFLAGS_PREHEADER) * 2 * sizeof(PyObject *);
}
void _PyObject_GC_Link(PyObject *op);
@@ -233,13 +350,9 @@ extern int _Py_CheckSlotResult(
const char *slot_name,
int success);
-// PyType_Ready() must be called if _PyType_IsReady() is false.
-// See also the Py_TPFLAGS_READY flag.
-#define _PyType_IsReady(type) ((type)->tp_dict != NULL)
-
// Test if a type supports weak references
static inline int _PyType_SUPPORTS_WEAKREFS(PyTypeObject *type) {
- return (type->tp_weaklistoffset > 0);
+ return (type->tp_weaklistoffset != 0);
}
extern PyObject* _PyType_AllocNoTrack(PyTypeObject *type, Py_ssize_t nitems);
@@ -250,30 +363,50 @@ extern int _PyObject_StoreInstanceAttribute(PyObject *obj, PyDictValues *values,
PyObject * _PyObject_GetInstanceAttribute(PyObject *obj, PyDictValues *values,
PyObject *name);
-static inline PyDictValues **_PyObject_ValuesPointer(PyObject *obj)
+typedef union {
+ PyObject *dict;
+ /* Use a char* to generate a warning if directly assigning a PyDictValues */
+ char *values;
+} PyDictOrValues;
+
+static inline PyDictOrValues *
+_PyObject_DictOrValuesPointer(PyObject *obj)
{
assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
- return ((PyDictValues **)obj)-4;
+ return ((PyDictOrValues *)obj)-3;
}
-static inline PyObject **_PyObject_ManagedDictPointer(PyObject *obj)
+static inline int
+_PyDictOrValues_IsValues(PyDictOrValues dorv)
{
- assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
- return ((PyObject **)obj)-3;
+ return ((uintptr_t)dorv.values) & 1;
}
-#define MANAGED_DICT_OFFSET (((int)sizeof(PyObject *))*-3)
+static inline PyDictValues *
+_PyDictOrValues_GetValues(PyDictOrValues dorv)
+{
+ assert(_PyDictOrValues_IsValues(dorv));
+ return (PyDictValues *)(dorv.values + 1);
+}
-extern PyObject ** _PyObject_DictPointer(PyObject *);
-extern int _PyObject_VisitInstanceAttributes(PyObject *self, visitproc visit, void *arg);
-extern void _PyObject_ClearInstanceAttributes(PyObject *self);
-extern void _PyObject_FreeInstanceAttributes(PyObject *self);
-extern int _PyObject_IsInstanceDictEmpty(PyObject *);
-extern PyObject* _PyType_GetSubclasses(PyTypeObject *);
+static inline PyObject *
+_PyDictOrValues_GetDict(PyDictOrValues dorv)
+{
+ assert(!_PyDictOrValues_IsValues(dorv));
+ return dorv.dict;
+}
-// Access macro to the members which are floating "behind" the object
-#define _PyHeapType_GET_MEMBERS(etype) \
- ((PyMemberDef *)(((char *)etype) + Py_TYPE(etype)->tp_basicsize))
+static inline void
+_PyDictOrValues_SetValues(PyDictOrValues *ptr, PyDictValues *values)
+{
+ ptr->values = ((char *)values) - 1;
+}
+
+#define MANAGED_WEAKREF_OFFSET (((Py_ssize_t)sizeof(PyObject *))*-4)
+
+extern PyObject ** _PyObject_ComputedDictPointer(PyObject *);
+extern void _PyObject_FreeInstanceAttributes(PyObject *obj);
+extern int _PyObject_IsInstanceDictEmpty(PyObject *);
PyAPI_FUNC(PyObject *) _PyObject_LookupSpecial(PyObject *, PyObject *);
@@ -289,12 +422,12 @@ PyAPI_FUNC(PyObject *) _PyObject_LookupSpecial(PyObject *, PyObject *);
* match.
*
* Third party code unintentionally rely on problematic fpcasts. The call
- * trampoline mitigates common occurences of bad fpcasts on Emscripten.
+ * trampoline mitigates common occurrences of bad fpcasts on Emscripten.
*/
#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE)
#define _PyCFunction_TrampolineCall(meth, self, args) \
_PyCFunctionWithKeywords_TrampolineCall( \
- (*(PyCFunctionWithKeywords)(void(*)(void))meth), self, args, NULL)
+ (*(PyCFunctionWithKeywords)(void(*)(void))(meth)), (self), (args), NULL)
extern PyObject* _PyCFunctionWithKeywords_TrampolineCall(
PyCFunctionWithKeywords meth, PyObject *, PyObject *, PyObject *);
#else
diff --git a/contrib/tools/python3/src/Include/internal/pycore_object_state.h b/contrib/tools/python3/src/Include/internal/pycore_object_state.h
new file mode 100644
index 0000000000..65feb5af96
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_object_state.h
@@ -0,0 +1,36 @@
+#ifndef Py_INTERNAL_OBJECT_STATE_H
+#define Py_INTERNAL_OBJECT_STATE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+struct _py_object_runtime_state {
+#ifdef Py_REF_DEBUG
+ Py_ssize_t interpreter_leaks;
+#endif
+ int _not_used;
+};
+
+struct _py_object_state {
+#ifdef Py_REF_DEBUG
+ Py_ssize_t reftotal;
+#endif
+#ifdef Py_TRACE_REFS
+ /* Head of circular doubly-linked list of all objects. These are linked
+ * together via the _ob_prev and _ob_next members of a PyObject, which
+ * exist only in a Py_TRACE_REFS build.
+ */
+ PyObject refchain;
+#endif
+ int _not_used;
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_OBJECT_STATE_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_obmalloc.h b/contrib/tools/python3/src/Include/internal/pycore_obmalloc.h
new file mode 100644
index 0000000000..b1c00654ac
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_obmalloc.h
@@ -0,0 +1,700 @@
+#ifndef Py_INTERNAL_OBMALLOC_H
+#define Py_INTERNAL_OBMALLOC_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+
+typedef unsigned int pymem_uint; /* assuming >= 16 bits */
+
+#undef uint
+#define uint pymem_uint
+
+
+/* An object allocator for Python.
+
+ Here is an introduction to the layers of the Python memory architecture,
+ showing where the object allocator is actually used (layer +2), It is
+ called for every object allocation and deallocation (PyObject_New/Del),
+ unless the object-specific allocators implement a proprietary allocation
+ scheme (ex.: ints use a simple free list). This is also the place where
+ the cyclic garbage collector operates selectively on container objects.
+
+
+ Object-specific allocators
+ _____ ______ ______ ________
+ [ int ] [ dict ] [ list ] ... [ string ] Python core |
++3 | <----- Object-specific memory -----> | <-- Non-object memory --> |
+ _______________________________ | |
+ [ Python's object allocator ] | |
++2 | ####### Object memory ####### | <------ Internal buffers ------> |
+ ______________________________________________________________ |
+ [ Python's raw memory allocator (PyMem_ API) ] |
++1 | <----- Python memory (under PyMem manager's control) ------> | |
+ __________________________________________________________________
+ [ Underlying general-purpose allocator (ex: C library malloc) ]
+ 0 | <------ Virtual memory allocated for the python process -------> |
+
+ =========================================================================
+ _______________________________________________________________________
+ [ OS-specific Virtual Memory Manager (VMM) ]
+-1 | <--- Kernel dynamic storage allocation & management (page-based) ---> |
+ __________________________________ __________________________________
+ [ ] [ ]
+-2 | <-- Physical memory: ROM/RAM --> | | <-- Secondary storage (swap) --> |
+
+*/
+/*==========================================================================*/
+
+/* A fast, special-purpose memory allocator for small blocks, to be used
+ on top of a general-purpose malloc -- heavily based on previous art. */
+
+/* Vladimir Marangozov -- August 2000 */
+
+/*
+ * "Memory management is where the rubber meets the road -- if we do the wrong
+ * thing at any level, the results will not be good. And if we don't make the
+ * levels work well together, we are in serious trouble." (1)
+ *
+ * (1) Paul R. Wilson, Mark S. Johnstone, Michael Neely, and David Boles,
+ * "Dynamic Storage Allocation: A Survey and Critical Review",
+ * in Proc. 1995 Int'l. Workshop on Memory Management, September 1995.
+ */
+
+/* #undef WITH_MEMORY_LIMITS */ /* disable mem limit checks */
+
+/*==========================================================================*/
+
+/*
+ * Allocation strategy abstract:
+ *
+ * For small requests, the allocator sub-allocates <Big> blocks of memory.
+ * Requests greater than SMALL_REQUEST_THRESHOLD bytes are routed to the
+ * system's allocator.
+ *
+ * Small requests are grouped in size classes spaced 8 bytes apart, due
+ * to the required valid alignment of the returned address. Requests of
+ * a particular size are serviced from memory pools of 4K (one VMM page).
+ * Pools are fragmented on demand and contain free lists of blocks of one
+ * particular size class. In other words, there is a fixed-size allocator
+ * for each size class. Free pools are shared by the different allocators
+ * thus minimizing the space reserved for a particular size class.
+ *
+ * This allocation strategy is a variant of what is known as "simple
+ * segregated storage based on array of free lists". The main drawback of
+ * simple segregated storage is that we might end up with lot of reserved
+ * memory for the different free lists, which degenerate in time. To avoid
+ * this, we partition each free list in pools and we share dynamically the
+ * reserved space between all free lists. This technique is quite efficient
+ * for memory intensive programs which allocate mainly small-sized blocks.
+ *
+ * For small requests we have the following table:
+ *
+ * Request in bytes Size of allocated block Size class idx
+ * ----------------------------------------------------------------
+ * 1-8 8 0
+ * 9-16 16 1
+ * 17-24 24 2
+ * 25-32 32 3
+ * 33-40 40 4
+ * 41-48 48 5
+ * 49-56 56 6
+ * 57-64 64 7
+ * 65-72 72 8
+ * ... ... ...
+ * 497-504 504 62
+ * 505-512 512 63
+ *
+ * 0, SMALL_REQUEST_THRESHOLD + 1 and up: routed to the underlying
+ * allocator.
+ */
+
+/*==========================================================================*/
+
+/*
+ * -- Main tunable settings section --
+ */
+
+/*
+ * Alignment of addresses returned to the user. 8-bytes alignment works
+ * on most current architectures (with 32-bit or 64-bit address buses).
+ * The alignment value is also used for grouping small requests in size
+ * classes spaced ALIGNMENT bytes apart.
+ *
+ * You shouldn't change this unless you know what you are doing.
+ */
+
+#if SIZEOF_VOID_P > 4
+#define ALIGNMENT 16 /* must be 2^N */
+#define ALIGNMENT_SHIFT 4
+#else
+#define ALIGNMENT 8 /* must be 2^N */
+#define ALIGNMENT_SHIFT 3
+#endif
+
+/* Return the number of bytes in size class I, as a uint. */
+#define INDEX2SIZE(I) (((pymem_uint)(I) + 1) << ALIGNMENT_SHIFT)
+
+/*
+ * Max size threshold below which malloc requests are considered to be
+ * small enough in order to use preallocated memory pools. You can tune
+ * this value according to your application behaviour and memory needs.
+ *
+ * Note: a size threshold of 512 guarantees that newly created dictionaries
+ * will be allocated from preallocated memory pools on 64-bit.
+ *
+ * The following invariants must hold:
+ * 1) ALIGNMENT <= SMALL_REQUEST_THRESHOLD <= 512
+ * 2) SMALL_REQUEST_THRESHOLD is evenly divisible by ALIGNMENT
+ *
+ * Although not required, for better performance and space efficiency,
+ * it is recommended that SMALL_REQUEST_THRESHOLD is set to a power of 2.
+ */
+#define SMALL_REQUEST_THRESHOLD 512
+#define NB_SMALL_SIZE_CLASSES (SMALL_REQUEST_THRESHOLD / ALIGNMENT)
+
+/*
+ * The system's VMM page size can be obtained on most unices with a
+ * getpagesize() call or deduced from various header files. To make
+ * things simpler, we assume that it is 4K, which is OK for most systems.
+ * It is probably better if this is the native page size, but it doesn't
+ * have to be. In theory, if SYSTEM_PAGE_SIZE is larger than the native page
+ * size, then `POOL_ADDR(p)->arenaindex' could rarely cause a segmentation
+ * violation fault. 4K is apparently OK for all the platforms that python
+ * currently targets.
+ */
+#define SYSTEM_PAGE_SIZE (4 * 1024)
+
+/*
+ * Maximum amount of memory managed by the allocator for small requests.
+ */
+#ifdef WITH_MEMORY_LIMITS
+#ifndef SMALL_MEMORY_LIMIT
+#define SMALL_MEMORY_LIMIT (64 * 1024 * 1024) /* 64 MB -- more? */
+#endif
+#endif
+
+#if !defined(WITH_PYMALLOC_RADIX_TREE)
+/* Use radix-tree to track arena memory regions, for address_in_range().
+ * Enable by default since it allows larger pool sizes. Can be disabled
+ * using -DWITH_PYMALLOC_RADIX_TREE=0 */
+#define WITH_PYMALLOC_RADIX_TREE 1
+#endif
+
+#if SIZEOF_VOID_P > 4
+/* on 64-bit platforms use larger pools and arenas if we can */
+#define USE_LARGE_ARENAS
+#if WITH_PYMALLOC_RADIX_TREE
+/* large pools only supported if radix-tree is enabled */
+#define USE_LARGE_POOLS
+#endif
+#endif
+
+/*
+ * The allocator sub-allocates <Big> blocks of memory (called arenas) aligned
+ * on a page boundary. This is a reserved virtual address space for the
+ * current process (obtained through a malloc()/mmap() call). In no way this
+ * means that the memory arenas will be used entirely. A malloc(<Big>) is
+ * usually an address range reservation for <Big> bytes, unless all pages within
+ * this space are referenced subsequently. So malloc'ing big blocks and not
+ * using them does not mean "wasting memory". It's an addressable range
+ * wastage...
+ *
+ * Arenas are allocated with mmap() on systems supporting anonymous memory
+ * mappings to reduce heap fragmentation.
+ */
+#ifdef USE_LARGE_ARENAS
+#define ARENA_BITS 20 /* 1 MiB */
+#else
+#define ARENA_BITS 18 /* 256 KiB */
+#endif
+#define ARENA_SIZE (1 << ARENA_BITS)
+#define ARENA_SIZE_MASK (ARENA_SIZE - 1)
+
+#ifdef WITH_MEMORY_LIMITS
+#define MAX_ARENAS (SMALL_MEMORY_LIMIT / ARENA_SIZE)
+#endif
+
+/*
+ * Size of the pools used for small blocks. Must be a power of 2.
+ */
+#ifdef USE_LARGE_POOLS
+#define POOL_BITS 14 /* 16 KiB */
+#else
+#define POOL_BITS 12 /* 4 KiB */
+#endif
+#define POOL_SIZE (1 << POOL_BITS)
+#define POOL_SIZE_MASK (POOL_SIZE - 1)
+
+#if !WITH_PYMALLOC_RADIX_TREE
+#if POOL_SIZE != SYSTEM_PAGE_SIZE
+# error "pool size must be equal to system page size"
+#endif
+#endif
+
+#define MAX_POOLS_IN_ARENA (ARENA_SIZE / POOL_SIZE)
+#if MAX_POOLS_IN_ARENA * POOL_SIZE != ARENA_SIZE
+# error "arena size not an exact multiple of pool size"
+#endif
+
+/*
+ * -- End of tunable settings section --
+ */
+
+/*==========================================================================*/
+
+/* When you say memory, my mind reasons in terms of (pointers to) blocks */
+typedef uint8_t pymem_block;
+
+/* Pool for small blocks. */
+struct pool_header {
+ union { pymem_block *_padding;
+ uint count; } ref; /* number of allocated blocks */
+ pymem_block *freeblock; /* pool's free list head */
+ struct pool_header *nextpool; /* next pool of this size class */
+ struct pool_header *prevpool; /* previous pool "" */
+ uint arenaindex; /* index into arenas of base adr */
+ uint szidx; /* block size class index */
+ uint nextoffset; /* bytes to virgin block */
+ uint maxnextoffset; /* largest valid nextoffset */
+};
+
+typedef struct pool_header *poolp;
+
+/* Record keeping for arenas. */
+struct arena_object {
+ /* The address of the arena, as returned by malloc. Note that 0
+ * will never be returned by a successful malloc, and is used
+ * here to mark an arena_object that doesn't correspond to an
+ * allocated arena.
+ */
+ uintptr_t address;
+
+ /* Pool-aligned pointer to the next pool to be carved off. */
+ pymem_block* pool_address;
+
+ /* The number of available pools in the arena: free pools + never-
+ * allocated pools.
+ */
+ uint nfreepools;
+
+ /* The total number of pools in the arena, whether or not available. */
+ uint ntotalpools;
+
+ /* Singly-linked list of available pools. */
+ struct pool_header* freepools;
+
+ /* Whenever this arena_object is not associated with an allocated
+ * arena, the nextarena member is used to link all unassociated
+ * arena_objects in the singly-linked `unused_arena_objects` list.
+ * The prevarena member is unused in this case.
+ *
+ * When this arena_object is associated with an allocated arena
+ * with at least one available pool, both members are used in the
+ * doubly-linked `usable_arenas` list, which is maintained in
+ * increasing order of `nfreepools` values.
+ *
+ * Else this arena_object is associated with an allocated arena
+ * all of whose pools are in use. `nextarena` and `prevarena`
+ * are both meaningless in this case.
+ */
+ struct arena_object* nextarena;
+ struct arena_object* prevarena;
+};
+
+#define POOL_OVERHEAD _Py_SIZE_ROUND_UP(sizeof(struct pool_header), ALIGNMENT)
+
+#define DUMMY_SIZE_IDX 0xffff /* size class of newly cached pools */
+
+/* Round pointer P down to the closest pool-aligned address <= P, as a poolp */
+#define POOL_ADDR(P) ((poolp)_Py_ALIGN_DOWN((P), POOL_SIZE))
+
+/* Return total number of blocks in pool of size index I, as a uint. */
+#define NUMBLOCKS(I) ((pymem_uint)(POOL_SIZE - POOL_OVERHEAD) / INDEX2SIZE(I))
+
+/*==========================================================================*/
+
+/*
+ * Pool table -- headed, circular, doubly-linked lists of partially used pools.
+
+This is involved. For an index i, usedpools[i+i] is the header for a list of
+all partially used pools holding small blocks with "size class idx" i. So
+usedpools[0] corresponds to blocks of size 8, usedpools[2] to blocks of size
+16, and so on: index 2*i <-> blocks of size (i+1)<<ALIGNMENT_SHIFT.
+
+Pools are carved off an arena's highwater mark (an arena_object's pool_address
+member) as needed. Once carved off, a pool is in one of three states forever
+after:
+
+used == partially used, neither empty nor full
+ At least one block in the pool is currently allocated, and at least one
+ block in the pool is not currently allocated (note this implies a pool
+ has room for at least two blocks).
+ This is a pool's initial state, as a pool is created only when malloc
+ needs space.
+ The pool holds blocks of a fixed size, and is in the circular list headed
+ at usedpools[i] (see above). It's linked to the other used pools of the
+ same size class via the pool_header's nextpool and prevpool members.
+ If all but one block is currently allocated, a malloc can cause a
+ transition to the full state. If all but one block is not currently
+ allocated, a free can cause a transition to the empty state.
+
+full == all the pool's blocks are currently allocated
+ On transition to full, a pool is unlinked from its usedpools[] list.
+ It's not linked to from anything then anymore, and its nextpool and
+ prevpool members are meaningless until it transitions back to used.
+ A free of a block in a full pool puts the pool back in the used state.
+ Then it's linked in at the front of the appropriate usedpools[] list, so
+ that the next allocation for its size class will reuse the freed block.
+
+empty == all the pool's blocks are currently available for allocation
+ On transition to empty, a pool is unlinked from its usedpools[] list,
+ and linked to the front of its arena_object's singly-linked freepools list,
+ via its nextpool member. The prevpool member has no meaning in this case.
+ Empty pools have no inherent size class: the next time a malloc finds
+ an empty list in usedpools[], it takes the first pool off of freepools.
+ If the size class needed happens to be the same as the size class the pool
+ last had, some pool initialization can be skipped.
+
+
+Block Management
+
+Blocks within pools are again carved out as needed. pool->freeblock points to
+the start of a singly-linked list of free blocks within the pool. When a
+block is freed, it's inserted at the front of its pool's freeblock list. Note
+that the available blocks in a pool are *not* linked all together when a pool
+is initialized. Instead only "the first two" (lowest addresses) blocks are
+set up, returning the first such block, and setting pool->freeblock to a
+one-block list holding the second such block. This is consistent with that
+pymalloc strives at all levels (arena, pool, and block) never to touch a piece
+of memory until it's actually needed.
+
+So long as a pool is in the used state, we're certain there *is* a block
+available for allocating, and pool->freeblock is not NULL. If pool->freeblock
+points to the end of the free list before we've carved the entire pool into
+blocks, that means we simply haven't yet gotten to one of the higher-address
+blocks. The offset from the pool_header to the start of "the next" virgin
+block is stored in the pool_header nextoffset member, and the largest value
+of nextoffset that makes sense is stored in the maxnextoffset member when a
+pool is initialized. All the blocks in a pool have been passed out at least
+once when and only when nextoffset > maxnextoffset.
+
+
+Major obscurity: While the usedpools vector is declared to have poolp
+entries, it doesn't really. It really contains two pointers per (conceptual)
+poolp entry, the nextpool and prevpool members of a pool_header. The
+excruciating initialization code below fools C so that
+
+ usedpool[i+i]
+
+"acts like" a genuine poolp, but only so long as you only reference its
+nextpool and prevpool members. The "- 2*sizeof(pymem_block *)" gibberish is
+compensating for that a pool_header's nextpool and prevpool members
+immediately follow a pool_header's first two members:
+
+ union { pymem_block *_padding;
+ uint count; } ref;
+ pymem_block *freeblock;
+
+each of which consume sizeof(pymem_block *) bytes. So what usedpools[i+i] really
+contains is a fudged-up pointer p such that *if* C believes it's a poolp
+pointer, then p->nextpool and p->prevpool are both p (meaning that the headed
+circular list is empty).
+
+It's unclear why the usedpools setup is so convoluted. It could be to
+minimize the amount of cache required to hold this heavily-referenced table
+(which only *needs* the two interpool pointer members of a pool_header). OTOH,
+referencing code has to remember to "double the index" and doing so isn't
+free, usedpools[0] isn't a strictly legal pointer, and we're crucially relying
+on that C doesn't insert any padding anywhere in a pool_header at or before
+the prevpool member.
+**************************************************************************** */
+
+#define OBMALLOC_USED_POOLS_SIZE (2 * ((NB_SMALL_SIZE_CLASSES + 7) / 8) * 8)
+
+struct _obmalloc_pools {
+ poolp used[OBMALLOC_USED_POOLS_SIZE];
+};
+
+
+/*==========================================================================
+Arena management.
+
+`arenas` is a vector of arena_objects. It contains maxarenas entries, some of
+which may not be currently used (== they're arena_objects that aren't
+currently associated with an allocated arena). Note that arenas proper are
+separately malloc'ed.
+
+Prior to Python 2.5, arenas were never free()'ed. Starting with Python 2.5,
+we do try to free() arenas, and use some mild heuristic strategies to increase
+the likelihood that arenas eventually can be freed.
+
+unused_arena_objects
+
+ This is a singly-linked list of the arena_objects that are currently not
+ being used (no arena is associated with them). Objects are taken off the
+ head of the list in new_arena(), and are pushed on the head of the list in
+ PyObject_Free() when the arena is empty. Key invariant: an arena_object
+ is on this list if and only if its .address member is 0.
+
+usable_arenas
+
+ This is a doubly-linked list of the arena_objects associated with arenas
+ that have pools available. These pools are either waiting to be reused,
+ or have not been used before. The list is sorted to have the most-
+ allocated arenas first (ascending order based on the nfreepools member).
+ This means that the next allocation will come from a heavily used arena,
+ which gives the nearly empty arenas a chance to be returned to the system.
+ In my unscientific tests this dramatically improved the number of arenas
+ that could be freed.
+
+Note that an arena_object associated with an arena all of whose pools are
+currently in use isn't on either list.
+
+Changed in Python 3.8: keeping usable_arenas sorted by number of free pools
+used to be done by one-at-a-time linear search when an arena's number of
+free pools changed. That could, overall, consume time quadratic in the
+number of arenas. That didn't really matter when there were only a few
+hundred arenas (typical!), but could be a timing disaster when there were
+hundreds of thousands. See bpo-37029.
+
+Now we have a vector of "search fingers" to eliminate the need to search:
+nfp2lasta[nfp] returns the last ("rightmost") arena in usable_arenas
+with nfp free pools. This is NULL if and only if there is no arena with
+nfp free pools in usable_arenas.
+*/
+
+/* How many arena_objects do we initially allocate?
+ * 16 = can allocate 16 arenas = 16 * ARENA_SIZE = 4MB before growing the
+ * `arenas` vector.
+ */
+#define INITIAL_ARENA_OBJECTS 16
+
+struct _obmalloc_mgmt {
+ /* Array of objects used to track chunks of memory (arenas). */
+ struct arena_object* arenas;
+ /* Number of slots currently allocated in the `arenas` vector. */
+ uint maxarenas;
+
+ /* The head of the singly-linked, NULL-terminated list of available
+ * arena_objects.
+ */
+ struct arena_object* unused_arena_objects;
+
+ /* The head of the doubly-linked, NULL-terminated at each end, list of
+ * arena_objects associated with arenas that have pools available.
+ */
+ struct arena_object* usable_arenas;
+
+ /* nfp2lasta[nfp] is the last arena in usable_arenas with nfp free pools */
+ struct arena_object* nfp2lasta[MAX_POOLS_IN_ARENA + 1];
+
+ /* Number of arenas allocated that haven't been free()'d. */
+ size_t narenas_currently_allocated;
+
+ /* Total number of times malloc() called to allocate an arena. */
+ size_t ntimes_arena_allocated;
+ /* High water mark (max value ever seen) for narenas_currently_allocated. */
+ size_t narenas_highwater;
+
+ Py_ssize_t raw_allocated_blocks;
+};
+
+
+#if WITH_PYMALLOC_RADIX_TREE
+/*==========================================================================*/
+/* radix tree for tracking arena usage. If enabled, used to implement
+ address_in_range().
+
+ memory address bit allocation for keys
+
+ 64-bit pointers, IGNORE_BITS=0 and 2^20 arena size:
+ 15 -> MAP_TOP_BITS
+ 15 -> MAP_MID_BITS
+ 14 -> MAP_BOT_BITS
+ 20 -> ideal aligned arena
+ ----
+ 64
+
+ 64-bit pointers, IGNORE_BITS=16, and 2^20 arena size:
+ 16 -> IGNORE_BITS
+ 10 -> MAP_TOP_BITS
+ 10 -> MAP_MID_BITS
+ 8 -> MAP_BOT_BITS
+ 20 -> ideal aligned arena
+ ----
+ 64
+
+ 32-bit pointers and 2^18 arena size:
+ 14 -> MAP_BOT_BITS
+ 18 -> ideal aligned arena
+ ----
+ 32
+
+*/
+
+#if SIZEOF_VOID_P == 8
+
+/* number of bits in a pointer */
+#define POINTER_BITS 64
+
+/* High bits of memory addresses that will be ignored when indexing into the
+ * radix tree. Setting this to zero is the safe default. For most 64-bit
+ * machines, setting this to 16 would be safe. The kernel would not give
+ * user-space virtual memory addresses that have significant information in
+ * those high bits. The main advantage to setting IGNORE_BITS > 0 is that less
+ * virtual memory will be used for the top and middle radix tree arrays. Those
+ * arrays are allocated in the BSS segment and so will typically consume real
+ * memory only if actually accessed.
+ */
+#define IGNORE_BITS 0
+
+/* use the top and mid layers of the radix tree */
+#define USE_INTERIOR_NODES
+
+#elif SIZEOF_VOID_P == 4
+
+#define POINTER_BITS 32
+#define IGNORE_BITS 0
+
+#else
+
+ /* Currently this code works for 64-bit or 32-bit pointers only. */
+#error "obmalloc radix tree requires 64-bit or 32-bit pointers."
+
+#endif /* SIZEOF_VOID_P */
+
+/* arena_coverage_t members require this to be true */
+#if ARENA_BITS >= 32
+# error "arena size must be < 2^32"
+#endif
+
+/* the lower bits of the address that are not ignored */
+#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
+
+#ifdef USE_INTERIOR_NODES
+/* number of bits used for MAP_TOP and MAP_MID nodes */
+#define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
+#else
+#define INTERIOR_BITS 0
+#endif
+
+#define MAP_TOP_BITS INTERIOR_BITS
+#define MAP_TOP_LENGTH (1 << MAP_TOP_BITS)
+#define MAP_TOP_MASK (MAP_TOP_LENGTH - 1)
+
+#define MAP_MID_BITS INTERIOR_BITS
+#define MAP_MID_LENGTH (1 << MAP_MID_BITS)
+#define MAP_MID_MASK (MAP_MID_LENGTH - 1)
+
+#define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
+#define MAP_BOT_LENGTH (1 << MAP_BOT_BITS)
+#define MAP_BOT_MASK (MAP_BOT_LENGTH - 1)
+
+#define MAP_BOT_SHIFT ARENA_BITS
+#define MAP_MID_SHIFT (MAP_BOT_BITS + MAP_BOT_SHIFT)
+#define MAP_TOP_SHIFT (MAP_MID_BITS + MAP_MID_SHIFT)
+
+#define AS_UINT(p) ((uintptr_t)(p))
+#define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK)
+#define MAP_MID_INDEX(p) ((AS_UINT(p) >> MAP_MID_SHIFT) & MAP_MID_MASK)
+#define MAP_TOP_INDEX(p) ((AS_UINT(p) >> MAP_TOP_SHIFT) & MAP_TOP_MASK)
+
+#if IGNORE_BITS > 0
+/* Return the ignored part of the pointer address. Those bits should be same
+ * for all valid pointers if IGNORE_BITS is set correctly.
+ */
+#define HIGH_BITS(p) (AS_UINT(p) >> ADDRESS_BITS)
+#else
+#define HIGH_BITS(p) 0
+#endif
+
+
+/* This is the leaf of the radix tree. See arena_map_mark_used() for the
+ * meaning of these members. */
+typedef struct {
+ int32_t tail_hi;
+ int32_t tail_lo;
+} arena_coverage_t;
+
+typedef struct arena_map_bot {
+ /* The members tail_hi and tail_lo are accessed together. So, it
+ * better to have them as an array of structs, rather than two
+ * arrays.
+ */
+ arena_coverage_t arenas[MAP_BOT_LENGTH];
+} arena_map_bot_t;
+
+#ifdef USE_INTERIOR_NODES
+typedef struct arena_map_mid {
+ struct arena_map_bot *ptrs[MAP_MID_LENGTH];
+} arena_map_mid_t;
+
+typedef struct arena_map_top {
+ struct arena_map_mid *ptrs[MAP_TOP_LENGTH];
+} arena_map_top_t;
+#endif
+
+struct _obmalloc_usage {
+ /* The root of radix tree. Note that by initializing like this, the memory
+ * should be in the BSS. The OS will only memory map pages as the MAP_MID
+ * nodes get used (OS pages are demand loaded as needed).
+ */
+#ifdef USE_INTERIOR_NODES
+ arena_map_top_t arena_map_root;
+ /* accounting for number of used interior nodes */
+ int arena_map_mid_count;
+ int arena_map_bot_count;
+#else
+ arena_map_bot_t arena_map_root;
+#endif
+};
+
+#endif /* WITH_PYMALLOC_RADIX_TREE */
+
+
+struct _obmalloc_global_state {
+ int dump_debug_stats;
+ Py_ssize_t interpreter_leaks;
+};
+
+struct _obmalloc_state {
+ struct _obmalloc_pools pools;
+ struct _obmalloc_mgmt mgmt;
+#if WITH_PYMALLOC_RADIX_TREE
+ struct _obmalloc_usage usage;
+#endif
+};
+
+
+#undef uint
+
+
+/* Allocate memory directly from the O/S virtual memory system,
+ * where supported. Otherwise fallback on malloc */
+void *_PyObject_VirtualAlloc(size_t size);
+void _PyObject_VirtualFree(void *, size_t size);
+
+
+/* This function returns the number of allocated memory blocks, regardless of size */
+extern Py_ssize_t _Py_GetGlobalAllocatedBlocks(void);
+#define _Py_GetAllocatedBlocks() \
+ _Py_GetGlobalAllocatedBlocks()
+extern Py_ssize_t _PyInterpreterState_GetAllocatedBlocks(PyInterpreterState *);
+extern void _PyInterpreterState_FinalizeAllocatedBlocks(PyInterpreterState *);
+
+
+#ifdef WITH_PYMALLOC
+// Export the symbol for the 3rd party guppy3 project
+PyAPI_FUNC(int) _PyObject_DebugMallocStats(FILE *out);
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif // !Py_INTERNAL_OBMALLOC_H
diff --git a/contrib/tools/python3/src/Include/internal/pycore_obmalloc_init.h b/contrib/tools/python3/src/Include/internal/pycore_obmalloc_init.h
new file mode 100644
index 0000000000..8ee72ff2d4
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_obmalloc_init.h
@@ -0,0 +1,73 @@
+#ifndef Py_INTERNAL_OBMALLOC_INIT_H
+#define Py_INTERNAL_OBMALLOC_INIT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+
+/****************************************************/
+/* the default object allocator's state initializer */
+
+#define PTA(pools, x) \
+ ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
+#define PT(p, x) PTA(p, x), PTA(p, x)
+
+#define PT_8(p, start) \
+ PT(p, start), \
+ PT(p, start+1), \
+ PT(p, start+2), \
+ PT(p, start+3), \
+ PT(p, start+4), \
+ PT(p, start+5), \
+ PT(p, start+6), \
+ PT(p, start+7)
+
+#if NB_SMALL_SIZE_CLASSES <= 8
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0) }
+#elif NB_SMALL_SIZE_CLASSES <= 16
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8) }
+#elif NB_SMALL_SIZE_CLASSES <= 24
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16) }
+#elif NB_SMALL_SIZE_CLASSES <= 32
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24) }
+#elif NB_SMALL_SIZE_CLASSES <= 40
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32) }
+#elif NB_SMALL_SIZE_CLASSES <= 48
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32), PT_8(p, 40) }
+#elif NB_SMALL_SIZE_CLASSES <= 56
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32), PT_8(p, 40), PT_8(p, 48) }
+#elif NB_SMALL_SIZE_CLASSES <= 64
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32), PT_8(p, 40), PT_8(p, 48), PT_8(p, 56) }
+#else
+# error "NB_SMALL_SIZE_CLASSES should be less than 64"
+#endif
+
+#define _obmalloc_global_state_INIT \
+ { \
+ .dump_debug_stats = -1, \
+ }
+
+#define _obmalloc_state_INIT(obmalloc) \
+ { \
+ .pools = { \
+ .used = _obmalloc_pools_INIT(obmalloc.pools), \
+ }, \
+ }
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif // !Py_INTERNAL_OBMALLOC_INIT_H
diff --git a/contrib/tools/python3/src/Include/internal/pycore_opcode.h b/contrib/tools/python3/src/Include/internal/pycore_opcode.h
index eadcba1add..15d9650383 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_opcode.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_opcode.h
@@ -1,4 +1,4 @@
-// Auto-generated by Tools/scripts/generate_opcode_h.py from Lib/opcode.py
+// Auto-generated by Tools/build/generate_opcode_h.py from Lib/opcode.py
#ifndef Py_INTERNAL_OPCODE_H
#define Py_INTERNAL_OPCODE_H
@@ -12,52 +12,44 @@ extern "C" {
#include "opcode.h"
+extern const uint32_t _PyOpcode_Jump[9];
+
extern const uint8_t _PyOpcode_Caches[256];
extern const uint8_t _PyOpcode_Deopt[256];
#ifdef NEED_OPCODE_TABLES
-static const uint32_t _PyOpcode_RelativeJump[8] = {
+const uint32_t _PyOpcode_Jump[9] = {
0U,
0U,
536870912U,
- 135118848U,
+ 135020544U,
4163U,
- 122880U,
- 0U,
- 0U,
-};
-static const uint32_t _PyOpcode_Jump[8] = {
0U,
0U,
- 536870912U,
- 135118848U,
- 4163U,
- 122880U,
- 0U,
0U,
+ 48U,
};
const uint8_t _PyOpcode_Caches[256] = {
- [BINARY_SUBSCR] = 4,
+ [BINARY_SUBSCR] = 1,
[STORE_SUBSCR] = 1,
[UNPACK_SEQUENCE] = 1,
+ [FOR_ITER] = 1,
[STORE_ATTR] = 4,
- [LOAD_ATTR] = 4,
- [COMPARE_OP] = 2,
- [LOAD_GLOBAL] = 5,
+ [LOAD_ATTR] = 9,
+ [COMPARE_OP] = 1,
+ [LOAD_GLOBAL] = 4,
[BINARY_OP] = 1,
- [LOAD_METHOD] = 10,
- [PRECALL] = 1,
- [CALL] = 4,
+ [SEND] = 1,
+ [LOAD_SUPER_ATTR] = 1,
+ [CALL] = 3,
};
const uint8_t _PyOpcode_Deopt[256] = {
- [ASYNC_GEN_WRAP] = ASYNC_GEN_WRAP,
[BEFORE_ASYNC_WITH] = BEFORE_ASYNC_WITH,
[BEFORE_WITH] = BEFORE_WITH,
[BINARY_OP] = BINARY_OP,
- [BINARY_OP_ADAPTIVE] = BINARY_OP,
[BINARY_OP_ADD_FLOAT] = BINARY_OP,
[BINARY_OP_ADD_INT] = BINARY_OP,
[BINARY_OP_ADD_UNICODE] = BINARY_OP,
@@ -66,8 +58,8 @@ const uint8_t _PyOpcode_Deopt[256] = {
[BINARY_OP_MULTIPLY_INT] = BINARY_OP,
[BINARY_OP_SUBTRACT_FLOAT] = BINARY_OP,
[BINARY_OP_SUBTRACT_INT] = BINARY_OP,
+ [BINARY_SLICE] = BINARY_SLICE,
[BINARY_SUBSCR] = BINARY_SUBSCR,
- [BINARY_SUBSCR_ADAPTIVE] = BINARY_SUBSCR,
[BINARY_SUBSCR_DICT] = BINARY_SUBSCR,
[BINARY_SUBSCR_GETITEM] = BINARY_SUBSCR,
[BINARY_SUBSCR_LIST_INT] = BINARY_SUBSCR,
@@ -81,17 +73,33 @@ const uint8_t _PyOpcode_Deopt[256] = {
[BUILD_TUPLE] = BUILD_TUPLE,
[CACHE] = CACHE,
[CALL] = CALL,
- [CALL_ADAPTIVE] = CALL,
+ [CALL_BOUND_METHOD_EXACT_ARGS] = CALL,
+ [CALL_BUILTIN_CLASS] = CALL,
+ [CALL_BUILTIN_FAST_WITH_KEYWORDS] = CALL,
[CALL_FUNCTION_EX] = CALL_FUNCTION_EX,
+ [CALL_INTRINSIC_1] = CALL_INTRINSIC_1,
+ [CALL_INTRINSIC_2] = CALL_INTRINSIC_2,
+ [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = CALL,
+ [CALL_NO_KW_BUILTIN_FAST] = CALL,
+ [CALL_NO_KW_BUILTIN_O] = CALL,
+ [CALL_NO_KW_ISINSTANCE] = CALL,
+ [CALL_NO_KW_LEN] = CALL,
+ [CALL_NO_KW_LIST_APPEND] = CALL,
+ [CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = CALL,
+ [CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = CALL,
+ [CALL_NO_KW_METHOD_DESCRIPTOR_O] = CALL,
+ [CALL_NO_KW_STR_1] = CALL,
+ [CALL_NO_KW_TUPLE_1] = CALL,
+ [CALL_NO_KW_TYPE_1] = CALL,
[CALL_PY_EXACT_ARGS] = CALL,
[CALL_PY_WITH_DEFAULTS] = CALL,
[CHECK_EG_MATCH] = CHECK_EG_MATCH,
[CHECK_EXC_MATCH] = CHECK_EXC_MATCH,
+ [CLEANUP_THROW] = CLEANUP_THROW,
[COMPARE_OP] = COMPARE_OP,
- [COMPARE_OP_ADAPTIVE] = COMPARE_OP,
- [COMPARE_OP_FLOAT_JUMP] = COMPARE_OP,
- [COMPARE_OP_INT_JUMP] = COMPARE_OP,
- [COMPARE_OP_STR_JUMP] = COMPARE_OP,
+ [COMPARE_OP_FLOAT] = COMPARE_OP,
+ [COMPARE_OP_INT] = COMPARE_OP,
+ [COMPARE_OP_STR] = COMPARE_OP,
[CONTAINS_OP] = CONTAINS_OP,
[COPY] = COPY,
[COPY_FREE_VARS] = COPY_FREE_VARS,
@@ -104,10 +112,15 @@ const uint8_t _PyOpcode_Deopt[256] = {
[DICT_MERGE] = DICT_MERGE,
[DICT_UPDATE] = DICT_UPDATE,
[END_ASYNC_FOR] = END_ASYNC_FOR,
+ [END_FOR] = END_FOR,
+ [END_SEND] = END_SEND,
[EXTENDED_ARG] = EXTENDED_ARG,
- [EXTENDED_ARG_QUICK] = EXTENDED_ARG,
[FORMAT_VALUE] = FORMAT_VALUE,
[FOR_ITER] = FOR_ITER,
+ [FOR_ITER_GEN] = FOR_ITER,
+ [FOR_ITER_LIST] = FOR_ITER,
+ [FOR_ITER_RANGE] = FOR_ITER,
+ [FOR_ITER_TUPLE] = FOR_ITER,
[GET_AITER] = GET_AITER,
[GET_ANEXT] = GET_ANEXT,
[GET_AWAITABLE] = GET_AWAITABLE,
@@ -116,46 +129,64 @@ const uint8_t _PyOpcode_Deopt[256] = {
[GET_YIELD_FROM_ITER] = GET_YIELD_FROM_ITER,
[IMPORT_FROM] = IMPORT_FROM,
[IMPORT_NAME] = IMPORT_NAME,
- [IMPORT_STAR] = IMPORT_STAR,
+ [INSTRUMENTED_CALL] = INSTRUMENTED_CALL,
+ [INSTRUMENTED_CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX,
+ [INSTRUMENTED_END_FOR] = INSTRUMENTED_END_FOR,
+ [INSTRUMENTED_END_SEND] = INSTRUMENTED_END_SEND,
+ [INSTRUMENTED_FOR_ITER] = INSTRUMENTED_FOR_ITER,
+ [INSTRUMENTED_INSTRUCTION] = INSTRUMENTED_INSTRUCTION,
+ [INSTRUMENTED_JUMP_BACKWARD] = INSTRUMENTED_JUMP_BACKWARD,
+ [INSTRUMENTED_JUMP_FORWARD] = INSTRUMENTED_JUMP_FORWARD,
+ [INSTRUMENTED_LINE] = INSTRUMENTED_LINE,
+ [INSTRUMENTED_LOAD_SUPER_ATTR] = INSTRUMENTED_LOAD_SUPER_ATTR,
+ [INSTRUMENTED_POP_JUMP_IF_FALSE] = INSTRUMENTED_POP_JUMP_IF_FALSE,
+ [INSTRUMENTED_POP_JUMP_IF_NONE] = INSTRUMENTED_POP_JUMP_IF_NONE,
+ [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
+ [INSTRUMENTED_POP_JUMP_IF_TRUE] = INSTRUMENTED_POP_JUMP_IF_TRUE,
+ [INSTRUMENTED_RESUME] = INSTRUMENTED_RESUME,
+ [INSTRUMENTED_RETURN_CONST] = INSTRUMENTED_RETURN_CONST,
+ [INSTRUMENTED_RETURN_VALUE] = INSTRUMENTED_RETURN_VALUE,
+ [INSTRUMENTED_YIELD_VALUE] = INSTRUMENTED_YIELD_VALUE,
+ [INTERPRETER_EXIT] = INTERPRETER_EXIT,
[IS_OP] = IS_OP,
[JUMP_BACKWARD] = JUMP_BACKWARD,
[JUMP_BACKWARD_NO_INTERRUPT] = JUMP_BACKWARD_NO_INTERRUPT,
- [JUMP_BACKWARD_QUICK] = JUMP_BACKWARD,
[JUMP_FORWARD] = JUMP_FORWARD,
- [JUMP_IF_FALSE_OR_POP] = JUMP_IF_FALSE_OR_POP,
- [JUMP_IF_TRUE_OR_POP] = JUMP_IF_TRUE_OR_POP,
[KW_NAMES] = KW_NAMES,
[LIST_APPEND] = LIST_APPEND,
[LIST_EXTEND] = LIST_EXTEND,
- [LIST_TO_TUPLE] = LIST_TO_TUPLE,
[LOAD_ASSERTION_ERROR] = LOAD_ASSERTION_ERROR,
[LOAD_ATTR] = LOAD_ATTR,
- [LOAD_ATTR_ADAPTIVE] = LOAD_ATTR,
+ [LOAD_ATTR_CLASS] = LOAD_ATTR,
+ [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = LOAD_ATTR,
[LOAD_ATTR_INSTANCE_VALUE] = LOAD_ATTR,
+ [LOAD_ATTR_METHOD_LAZY_DICT] = LOAD_ATTR,
+ [LOAD_ATTR_METHOD_NO_DICT] = LOAD_ATTR,
+ [LOAD_ATTR_METHOD_WITH_VALUES] = LOAD_ATTR,
[LOAD_ATTR_MODULE] = LOAD_ATTR,
+ [LOAD_ATTR_PROPERTY] = LOAD_ATTR,
[LOAD_ATTR_SLOT] = LOAD_ATTR,
[LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
[LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
- [LOAD_CLASSDEREF] = LOAD_CLASSDEREF,
[LOAD_CLOSURE] = LOAD_CLOSURE,
[LOAD_CONST] = LOAD_CONST,
[LOAD_CONST__LOAD_FAST] = LOAD_CONST,
[LOAD_DEREF] = LOAD_DEREF,
[LOAD_FAST] = LOAD_FAST,
+ [LOAD_FAST_AND_CLEAR] = LOAD_FAST_AND_CLEAR,
+ [LOAD_FAST_CHECK] = LOAD_FAST_CHECK,
[LOAD_FAST__LOAD_CONST] = LOAD_FAST,
[LOAD_FAST__LOAD_FAST] = LOAD_FAST,
+ [LOAD_FROM_DICT_OR_DEREF] = LOAD_FROM_DICT_OR_DEREF,
+ [LOAD_FROM_DICT_OR_GLOBALS] = LOAD_FROM_DICT_OR_GLOBALS,
[LOAD_GLOBAL] = LOAD_GLOBAL,
- [LOAD_GLOBAL_ADAPTIVE] = LOAD_GLOBAL,
[LOAD_GLOBAL_BUILTIN] = LOAD_GLOBAL,
[LOAD_GLOBAL_MODULE] = LOAD_GLOBAL,
- [LOAD_METHOD] = LOAD_METHOD,
- [LOAD_METHOD_ADAPTIVE] = LOAD_METHOD,
- [LOAD_METHOD_CLASS] = LOAD_METHOD,
- [LOAD_METHOD_MODULE] = LOAD_METHOD,
- [LOAD_METHOD_NO_DICT] = LOAD_METHOD,
- [LOAD_METHOD_WITH_DICT] = LOAD_METHOD,
- [LOAD_METHOD_WITH_VALUES] = LOAD_METHOD,
+ [LOAD_LOCALS] = LOAD_LOCALS,
[LOAD_NAME] = LOAD_NAME,
+ [LOAD_SUPER_ATTR] = LOAD_SUPER_ATTR,
+ [LOAD_SUPER_ATTR_ATTR] = LOAD_SUPER_ATTR,
+ [LOAD_SUPER_ATTR_METHOD] = LOAD_SUPER_ATTR,
[MAKE_CELL] = MAKE_CELL,
[MAKE_FUNCTION] = MAKE_FUNCTION,
[MAP_ADD] = MAP_ADD,
@@ -165,49 +196,26 @@ const uint8_t _PyOpcode_Deopt[256] = {
[MATCH_SEQUENCE] = MATCH_SEQUENCE,
[NOP] = NOP,
[POP_EXCEPT] = POP_EXCEPT,
- [POP_JUMP_BACKWARD_IF_FALSE] = POP_JUMP_BACKWARD_IF_FALSE,
- [POP_JUMP_BACKWARD_IF_NONE] = POP_JUMP_BACKWARD_IF_NONE,
- [POP_JUMP_BACKWARD_IF_NOT_NONE] = POP_JUMP_BACKWARD_IF_NOT_NONE,
- [POP_JUMP_BACKWARD_IF_TRUE] = POP_JUMP_BACKWARD_IF_TRUE,
- [POP_JUMP_FORWARD_IF_FALSE] = POP_JUMP_FORWARD_IF_FALSE,
- [POP_JUMP_FORWARD_IF_NONE] = POP_JUMP_FORWARD_IF_NONE,
- [POP_JUMP_FORWARD_IF_NOT_NONE] = POP_JUMP_FORWARD_IF_NOT_NONE,
- [POP_JUMP_FORWARD_IF_TRUE] = POP_JUMP_FORWARD_IF_TRUE,
+ [POP_JUMP_IF_FALSE] = POP_JUMP_IF_FALSE,
+ [POP_JUMP_IF_NONE] = POP_JUMP_IF_NONE,
+ [POP_JUMP_IF_NOT_NONE] = POP_JUMP_IF_NOT_NONE,
+ [POP_JUMP_IF_TRUE] = POP_JUMP_IF_TRUE,
[POP_TOP] = POP_TOP,
- [PRECALL] = PRECALL,
- [PRECALL_ADAPTIVE] = PRECALL,
- [PRECALL_BOUND_METHOD] = PRECALL,
- [PRECALL_BUILTIN_CLASS] = PRECALL,
- [PRECALL_BUILTIN_FAST_WITH_KEYWORDS] = PRECALL,
- [PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = PRECALL,
- [PRECALL_NO_KW_BUILTIN_FAST] = PRECALL,
- [PRECALL_NO_KW_BUILTIN_O] = PRECALL,
- [PRECALL_NO_KW_ISINSTANCE] = PRECALL,
- [PRECALL_NO_KW_LEN] = PRECALL,
- [PRECALL_NO_KW_LIST_APPEND] = PRECALL,
- [PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST] = PRECALL,
- [PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = PRECALL,
- [PRECALL_NO_KW_METHOD_DESCRIPTOR_O] = PRECALL,
- [PRECALL_NO_KW_STR_1] = PRECALL,
- [PRECALL_NO_KW_TUPLE_1] = PRECALL,
- [PRECALL_NO_KW_TYPE_1] = PRECALL,
- [PRECALL_PYFUNC] = PRECALL,
- [PREP_RERAISE_STAR] = PREP_RERAISE_STAR,
- [PRINT_EXPR] = PRINT_EXPR,
[PUSH_EXC_INFO] = PUSH_EXC_INFO,
[PUSH_NULL] = PUSH_NULL,
[RAISE_VARARGS] = RAISE_VARARGS,
[RERAISE] = RERAISE,
+ [RESERVED] = RESERVED,
[RESUME] = RESUME,
- [RESUME_QUICK] = RESUME,
+ [RETURN_CONST] = RETURN_CONST,
[RETURN_GENERATOR] = RETURN_GENERATOR,
[RETURN_VALUE] = RETURN_VALUE,
[SEND] = SEND,
+ [SEND_GEN] = SEND,
[SETUP_ANNOTATIONS] = SETUP_ANNOTATIONS,
[SET_ADD] = SET_ADD,
[SET_UPDATE] = SET_UPDATE,
[STORE_ATTR] = STORE_ATTR,
- [STORE_ATTR_ADAPTIVE] = STORE_ATTR,
[STORE_ATTR_INSTANCE_VALUE] = STORE_ATTR,
[STORE_ATTR_SLOT] = STORE_ATTR,
[STORE_ATTR_WITH_HINT] = STORE_ATTR,
@@ -217,18 +225,16 @@ const uint8_t _PyOpcode_Deopt[256] = {
[STORE_FAST__STORE_FAST] = STORE_FAST,
[STORE_GLOBAL] = STORE_GLOBAL,
[STORE_NAME] = STORE_NAME,
+ [STORE_SLICE] = STORE_SLICE,
[STORE_SUBSCR] = STORE_SUBSCR,
- [STORE_SUBSCR_ADAPTIVE] = STORE_SUBSCR,
[STORE_SUBSCR_DICT] = STORE_SUBSCR,
[STORE_SUBSCR_LIST_INT] = STORE_SUBSCR,
[SWAP] = SWAP,
[UNARY_INVERT] = UNARY_INVERT,
[UNARY_NEGATIVE] = UNARY_NEGATIVE,
[UNARY_NOT] = UNARY_NOT,
- [UNARY_POSITIVE] = UNARY_POSITIVE,
[UNPACK_EX] = UNPACK_EX,
[UNPACK_SEQUENCE] = UNPACK_SEQUENCE,
- [UNPACK_SEQUENCE_ADAPTIVE] = UNPACK_SEQUENCE,
[UNPACK_SEQUENCE_LIST] = UNPACK_SEQUENCE,
[UNPACK_SEQUENCE_TUPLE] = UNPACK_SEQUENCE,
[UNPACK_SEQUENCE_TWO_TUPLE] = UNPACK_SEQUENCE,
@@ -238,96 +244,96 @@ const uint8_t _PyOpcode_Deopt[256] = {
#endif // NEED_OPCODE_TABLES
#ifdef Py_DEBUG
-static const char *const _PyOpcode_OpName[256] = {
+static const char *const _PyOpcode_OpName[267] = {
[CACHE] = "CACHE",
[POP_TOP] = "POP_TOP",
[PUSH_NULL] = "PUSH_NULL",
- [BINARY_OP_ADAPTIVE] = "BINARY_OP_ADAPTIVE",
+ [INTERPRETER_EXIT] = "INTERPRETER_EXIT",
+ [END_FOR] = "END_FOR",
+ [END_SEND] = "END_SEND",
[BINARY_OP_ADD_FLOAT] = "BINARY_OP_ADD_FLOAT",
[BINARY_OP_ADD_INT] = "BINARY_OP_ADD_INT",
[BINARY_OP_ADD_UNICODE] = "BINARY_OP_ADD_UNICODE",
- [BINARY_OP_INPLACE_ADD_UNICODE] = "BINARY_OP_INPLACE_ADD_UNICODE",
- [BINARY_OP_MULTIPLY_FLOAT] = "BINARY_OP_MULTIPLY_FLOAT",
[NOP] = "NOP",
- [UNARY_POSITIVE] = "UNARY_POSITIVE",
+ [BINARY_OP_INPLACE_ADD_UNICODE] = "BINARY_OP_INPLACE_ADD_UNICODE",
[UNARY_NEGATIVE] = "UNARY_NEGATIVE",
[UNARY_NOT] = "UNARY_NOT",
+ [BINARY_OP_MULTIPLY_FLOAT] = "BINARY_OP_MULTIPLY_FLOAT",
[BINARY_OP_MULTIPLY_INT] = "BINARY_OP_MULTIPLY_INT",
- [BINARY_OP_SUBTRACT_FLOAT] = "BINARY_OP_SUBTRACT_FLOAT",
[UNARY_INVERT] = "UNARY_INVERT",
+ [BINARY_OP_SUBTRACT_FLOAT] = "BINARY_OP_SUBTRACT_FLOAT",
+ [RESERVED] = "RESERVED",
[BINARY_OP_SUBTRACT_INT] = "BINARY_OP_SUBTRACT_INT",
- [BINARY_SUBSCR_ADAPTIVE] = "BINARY_SUBSCR_ADAPTIVE",
[BINARY_SUBSCR_DICT] = "BINARY_SUBSCR_DICT",
[BINARY_SUBSCR_GETITEM] = "BINARY_SUBSCR_GETITEM",
[BINARY_SUBSCR_LIST_INT] = "BINARY_SUBSCR_LIST_INT",
[BINARY_SUBSCR_TUPLE_INT] = "BINARY_SUBSCR_TUPLE_INT",
- [CALL_ADAPTIVE] = "CALL_ADAPTIVE",
[CALL_PY_EXACT_ARGS] = "CALL_PY_EXACT_ARGS",
[CALL_PY_WITH_DEFAULTS] = "CALL_PY_WITH_DEFAULTS",
[BINARY_SUBSCR] = "BINARY_SUBSCR",
- [COMPARE_OP_ADAPTIVE] = "COMPARE_OP_ADAPTIVE",
- [COMPARE_OP_FLOAT_JUMP] = "COMPARE_OP_FLOAT_JUMP",
- [COMPARE_OP_INT_JUMP] = "COMPARE_OP_INT_JUMP",
- [COMPARE_OP_STR_JUMP] = "COMPARE_OP_STR_JUMP",
+ [BINARY_SLICE] = "BINARY_SLICE",
+ [STORE_SLICE] = "STORE_SLICE",
+ [CALL_BOUND_METHOD_EXACT_ARGS] = "CALL_BOUND_METHOD_EXACT_ARGS",
+ [CALL_BUILTIN_CLASS] = "CALL_BUILTIN_CLASS",
[GET_LEN] = "GET_LEN",
[MATCH_MAPPING] = "MATCH_MAPPING",
[MATCH_SEQUENCE] = "MATCH_SEQUENCE",
[MATCH_KEYS] = "MATCH_KEYS",
- [EXTENDED_ARG_QUICK] = "EXTENDED_ARG_QUICK",
+ [CALL_BUILTIN_FAST_WITH_KEYWORDS] = "CALL_BUILTIN_FAST_WITH_KEYWORDS",
[PUSH_EXC_INFO] = "PUSH_EXC_INFO",
[CHECK_EXC_MATCH] = "CHECK_EXC_MATCH",
[CHECK_EG_MATCH] = "CHECK_EG_MATCH",
- [JUMP_BACKWARD_QUICK] = "JUMP_BACKWARD_QUICK",
- [LOAD_ATTR_ADAPTIVE] = "LOAD_ATTR_ADAPTIVE",
- [LOAD_ATTR_INSTANCE_VALUE] = "LOAD_ATTR_INSTANCE_VALUE",
- [LOAD_ATTR_MODULE] = "LOAD_ATTR_MODULE",
- [LOAD_ATTR_SLOT] = "LOAD_ATTR_SLOT",
- [LOAD_ATTR_WITH_HINT] = "LOAD_ATTR_WITH_HINT",
- [LOAD_CONST__LOAD_FAST] = "LOAD_CONST__LOAD_FAST",
- [LOAD_FAST__LOAD_CONST] = "LOAD_FAST__LOAD_CONST",
- [LOAD_FAST__LOAD_FAST] = "LOAD_FAST__LOAD_FAST",
- [LOAD_GLOBAL_ADAPTIVE] = "LOAD_GLOBAL_ADAPTIVE",
- [LOAD_GLOBAL_BUILTIN] = "LOAD_GLOBAL_BUILTIN",
+ [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS",
+ [CALL_NO_KW_BUILTIN_FAST] = "CALL_NO_KW_BUILTIN_FAST",
+ [CALL_NO_KW_BUILTIN_O] = "CALL_NO_KW_BUILTIN_O",
+ [CALL_NO_KW_ISINSTANCE] = "CALL_NO_KW_ISINSTANCE",
+ [CALL_NO_KW_LEN] = "CALL_NO_KW_LEN",
+ [CALL_NO_KW_LIST_APPEND] = "CALL_NO_KW_LIST_APPEND",
+ [CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = "CALL_NO_KW_METHOD_DESCRIPTOR_FAST",
+ [CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = "CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS",
+ [CALL_NO_KW_METHOD_DESCRIPTOR_O] = "CALL_NO_KW_METHOD_DESCRIPTOR_O",
+ [CALL_NO_KW_STR_1] = "CALL_NO_KW_STR_1",
+ [CALL_NO_KW_TUPLE_1] = "CALL_NO_KW_TUPLE_1",
[WITH_EXCEPT_START] = "WITH_EXCEPT_START",
[GET_AITER] = "GET_AITER",
[GET_ANEXT] = "GET_ANEXT",
[BEFORE_ASYNC_WITH] = "BEFORE_ASYNC_WITH",
[BEFORE_WITH] = "BEFORE_WITH",
[END_ASYNC_FOR] = "END_ASYNC_FOR",
- [LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE",
- [LOAD_METHOD_ADAPTIVE] = "LOAD_METHOD_ADAPTIVE",
- [LOAD_METHOD_CLASS] = "LOAD_METHOD_CLASS",
- [LOAD_METHOD_MODULE] = "LOAD_METHOD_MODULE",
- [LOAD_METHOD_NO_DICT] = "LOAD_METHOD_NO_DICT",
+ [CLEANUP_THROW] = "CLEANUP_THROW",
+ [CALL_NO_KW_TYPE_1] = "CALL_NO_KW_TYPE_1",
+ [COMPARE_OP_FLOAT] = "COMPARE_OP_FLOAT",
+ [COMPARE_OP_INT] = "COMPARE_OP_INT",
+ [COMPARE_OP_STR] = "COMPARE_OP_STR",
[STORE_SUBSCR] = "STORE_SUBSCR",
[DELETE_SUBSCR] = "DELETE_SUBSCR",
- [LOAD_METHOD_WITH_DICT] = "LOAD_METHOD_WITH_DICT",
- [LOAD_METHOD_WITH_VALUES] = "LOAD_METHOD_WITH_VALUES",
- [PRECALL_ADAPTIVE] = "PRECALL_ADAPTIVE",
- [PRECALL_BOUND_METHOD] = "PRECALL_BOUND_METHOD",
- [PRECALL_BUILTIN_CLASS] = "PRECALL_BUILTIN_CLASS",
- [PRECALL_BUILTIN_FAST_WITH_KEYWORDS] = "PRECALL_BUILTIN_FAST_WITH_KEYWORDS",
+ [FOR_ITER_LIST] = "FOR_ITER_LIST",
+ [FOR_ITER_TUPLE] = "FOR_ITER_TUPLE",
+ [FOR_ITER_RANGE] = "FOR_ITER_RANGE",
+ [FOR_ITER_GEN] = "FOR_ITER_GEN",
+ [LOAD_SUPER_ATTR_ATTR] = "LOAD_SUPER_ATTR_ATTR",
+ [LOAD_SUPER_ATTR_METHOD] = "LOAD_SUPER_ATTR_METHOD",
[GET_ITER] = "GET_ITER",
[GET_YIELD_FROM_ITER] = "GET_YIELD_FROM_ITER",
- [PRINT_EXPR] = "PRINT_EXPR",
+ [LOAD_ATTR_CLASS] = "LOAD_ATTR_CLASS",
[LOAD_BUILD_CLASS] = "LOAD_BUILD_CLASS",
- [PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS",
- [PRECALL_NO_KW_BUILTIN_FAST] = "PRECALL_NO_KW_BUILTIN_FAST",
+ [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = "LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN",
+ [LOAD_ATTR_INSTANCE_VALUE] = "LOAD_ATTR_INSTANCE_VALUE",
[LOAD_ASSERTION_ERROR] = "LOAD_ASSERTION_ERROR",
[RETURN_GENERATOR] = "RETURN_GENERATOR",
- [PRECALL_NO_KW_BUILTIN_O] = "PRECALL_NO_KW_BUILTIN_O",
- [PRECALL_NO_KW_ISINSTANCE] = "PRECALL_NO_KW_ISINSTANCE",
- [PRECALL_NO_KW_LEN] = "PRECALL_NO_KW_LEN",
- [PRECALL_NO_KW_LIST_APPEND] = "PRECALL_NO_KW_LIST_APPEND",
- [PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST] = "PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST",
- [PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = "PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS",
- [LIST_TO_TUPLE] = "LIST_TO_TUPLE",
+ [LOAD_ATTR_MODULE] = "LOAD_ATTR_MODULE",
+ [LOAD_ATTR_PROPERTY] = "LOAD_ATTR_PROPERTY",
+ [LOAD_ATTR_SLOT] = "LOAD_ATTR_SLOT",
+ [LOAD_ATTR_WITH_HINT] = "LOAD_ATTR_WITH_HINT",
+ [LOAD_ATTR_METHOD_LAZY_DICT] = "LOAD_ATTR_METHOD_LAZY_DICT",
+ [LOAD_ATTR_METHOD_NO_DICT] = "LOAD_ATTR_METHOD_NO_DICT",
+ [LOAD_ATTR_METHOD_WITH_VALUES] = "LOAD_ATTR_METHOD_WITH_VALUES",
[RETURN_VALUE] = "RETURN_VALUE",
- [IMPORT_STAR] = "IMPORT_STAR",
+ [LOAD_CONST__LOAD_FAST] = "LOAD_CONST__LOAD_FAST",
[SETUP_ANNOTATIONS] = "SETUP_ANNOTATIONS",
- [YIELD_VALUE] = "YIELD_VALUE",
- [ASYNC_GEN_WRAP] = "ASYNC_GEN_WRAP",
- [PREP_RERAISE_STAR] = "PREP_RERAISE_STAR",
+ [LOAD_FAST__LOAD_CONST] = "LOAD_FAST__LOAD_CONST",
+ [LOAD_LOCALS] = "LOAD_LOCALS",
+ [LOAD_FAST__LOAD_FAST] = "LOAD_FAST__LOAD_FAST",
[POP_EXCEPT] = "POP_EXCEPT",
[STORE_NAME] = "STORE_NAME",
[DELETE_NAME] = "DELETE_NAME",
@@ -350,25 +356,25 @@ static const char *const _PyOpcode_OpName[256] = {
[IMPORT_NAME] = "IMPORT_NAME",
[IMPORT_FROM] = "IMPORT_FROM",
[JUMP_FORWARD] = "JUMP_FORWARD",
- [JUMP_IF_FALSE_OR_POP] = "JUMP_IF_FALSE_OR_POP",
- [JUMP_IF_TRUE_OR_POP] = "JUMP_IF_TRUE_OR_POP",
- [PRECALL_NO_KW_METHOD_DESCRIPTOR_O] = "PRECALL_NO_KW_METHOD_DESCRIPTOR_O",
- [POP_JUMP_FORWARD_IF_FALSE] = "POP_JUMP_FORWARD_IF_FALSE",
- [POP_JUMP_FORWARD_IF_TRUE] = "POP_JUMP_FORWARD_IF_TRUE",
+ [LOAD_GLOBAL_BUILTIN] = "LOAD_GLOBAL_BUILTIN",
+ [LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE",
+ [STORE_ATTR_INSTANCE_VALUE] = "STORE_ATTR_INSTANCE_VALUE",
+ [POP_JUMP_IF_FALSE] = "POP_JUMP_IF_FALSE",
+ [POP_JUMP_IF_TRUE] = "POP_JUMP_IF_TRUE",
[LOAD_GLOBAL] = "LOAD_GLOBAL",
[IS_OP] = "IS_OP",
[CONTAINS_OP] = "CONTAINS_OP",
[RERAISE] = "RERAISE",
[COPY] = "COPY",
- [PRECALL_NO_KW_STR_1] = "PRECALL_NO_KW_STR_1",
+ [RETURN_CONST] = "RETURN_CONST",
[BINARY_OP] = "BINARY_OP",
[SEND] = "SEND",
[LOAD_FAST] = "LOAD_FAST",
[STORE_FAST] = "STORE_FAST",
[DELETE_FAST] = "DELETE_FAST",
- [PRECALL_NO_KW_TUPLE_1] = "PRECALL_NO_KW_TUPLE_1",
- [POP_JUMP_FORWARD_IF_NOT_NONE] = "POP_JUMP_FORWARD_IF_NOT_NONE",
- [POP_JUMP_FORWARD_IF_NONE] = "POP_JUMP_FORWARD_IF_NONE",
+ [LOAD_FAST_CHECK] = "LOAD_FAST_CHECK",
+ [POP_JUMP_IF_NOT_NONE] = "POP_JUMP_IF_NOT_NONE",
+ [POP_JUMP_IF_NONE] = "POP_JUMP_IF_NONE",
[RAISE_VARARGS] = "RAISE_VARARGS",
[GET_AWAITABLE] = "GET_AWAITABLE",
[MAKE_FUNCTION] = "MAKE_FUNCTION",
@@ -380,46 +386,46 @@ static const char *const _PyOpcode_OpName[256] = {
[STORE_DEREF] = "STORE_DEREF",
[DELETE_DEREF] = "DELETE_DEREF",
[JUMP_BACKWARD] = "JUMP_BACKWARD",
- [PRECALL_NO_KW_TYPE_1] = "PRECALL_NO_KW_TYPE_1",
+ [LOAD_SUPER_ATTR] = "LOAD_SUPER_ATTR",
[CALL_FUNCTION_EX] = "CALL_FUNCTION_EX",
- [PRECALL_PYFUNC] = "PRECALL_PYFUNC",
+ [LOAD_FAST_AND_CLEAR] = "LOAD_FAST_AND_CLEAR",
[EXTENDED_ARG] = "EXTENDED_ARG",
[LIST_APPEND] = "LIST_APPEND",
[SET_ADD] = "SET_ADD",
[MAP_ADD] = "MAP_ADD",
- [LOAD_CLASSDEREF] = "LOAD_CLASSDEREF",
+ [STORE_ATTR_SLOT] = "STORE_ATTR_SLOT",
[COPY_FREE_VARS] = "COPY_FREE_VARS",
- [RESUME_QUICK] = "RESUME_QUICK",
+ [YIELD_VALUE] = "YIELD_VALUE",
[RESUME] = "RESUME",
[MATCH_CLASS] = "MATCH_CLASS",
- [STORE_ATTR_ADAPTIVE] = "STORE_ATTR_ADAPTIVE",
- [STORE_ATTR_INSTANCE_VALUE] = "STORE_ATTR_INSTANCE_VALUE",
+ [STORE_ATTR_WITH_HINT] = "STORE_ATTR_WITH_HINT",
+ [STORE_FAST__LOAD_FAST] = "STORE_FAST__LOAD_FAST",
[FORMAT_VALUE] = "FORMAT_VALUE",
[BUILD_CONST_KEY_MAP] = "BUILD_CONST_KEY_MAP",
[BUILD_STRING] = "BUILD_STRING",
- [STORE_ATTR_SLOT] = "STORE_ATTR_SLOT",
- [STORE_ATTR_WITH_HINT] = "STORE_ATTR_WITH_HINT",
- [LOAD_METHOD] = "LOAD_METHOD",
- [STORE_FAST__LOAD_FAST] = "STORE_FAST__LOAD_FAST",
- [LIST_EXTEND] = "LIST_EXTEND",
- [SET_UPDATE] = "SET_UPDATE",
- [DICT_MERGE] = "DICT_MERGE",
- [DICT_UPDATE] = "DICT_UPDATE",
- [PRECALL] = "PRECALL",
[STORE_FAST__STORE_FAST] = "STORE_FAST__STORE_FAST",
- [STORE_SUBSCR_ADAPTIVE] = "STORE_SUBSCR_ADAPTIVE",
[STORE_SUBSCR_DICT] = "STORE_SUBSCR_DICT",
[STORE_SUBSCR_LIST_INT] = "STORE_SUBSCR_LIST_INT",
- [CALL] = "CALL",
- [KW_NAMES] = "KW_NAMES",
- [POP_JUMP_BACKWARD_IF_NOT_NONE] = "POP_JUMP_BACKWARD_IF_NOT_NONE",
- [POP_JUMP_BACKWARD_IF_NONE] = "POP_JUMP_BACKWARD_IF_NONE",
- [POP_JUMP_BACKWARD_IF_FALSE] = "POP_JUMP_BACKWARD_IF_FALSE",
- [POP_JUMP_BACKWARD_IF_TRUE] = "POP_JUMP_BACKWARD_IF_TRUE",
- [UNPACK_SEQUENCE_ADAPTIVE] = "UNPACK_SEQUENCE_ADAPTIVE",
[UNPACK_SEQUENCE_LIST] = "UNPACK_SEQUENCE_LIST",
+ [LIST_EXTEND] = "LIST_EXTEND",
+ [SET_UPDATE] = "SET_UPDATE",
+ [DICT_MERGE] = "DICT_MERGE",
+ [DICT_UPDATE] = "DICT_UPDATE",
[UNPACK_SEQUENCE_TUPLE] = "UNPACK_SEQUENCE_TUPLE",
[UNPACK_SEQUENCE_TWO_TUPLE] = "UNPACK_SEQUENCE_TWO_TUPLE",
+ [SEND_GEN] = "SEND_GEN",
+ [169] = "<169>",
+ [170] = "<170>",
+ [CALL] = "CALL",
+ [KW_NAMES] = "KW_NAMES",
+ [CALL_INTRINSIC_1] = "CALL_INTRINSIC_1",
+ [CALL_INTRINSIC_2] = "CALL_INTRINSIC_2",
+ [LOAD_FROM_DICT_OR_GLOBALS] = "LOAD_FROM_DICT_OR_GLOBALS",
+ [LOAD_FROM_DICT_OR_DEREF] = "LOAD_FROM_DICT_OR_DEREF",
+ [177] = "<177>",
+ [178] = "<178>",
+ [179] = "<179>",
+ [180] = "<180>",
[181] = "<181>",
[182] = "<182>",
[183] = "<183>",
@@ -476,29 +482,46 @@ static const char *const _PyOpcode_OpName[256] = {
[234] = "<234>",
[235] = "<235>",
[236] = "<236>",
- [237] = "<237>",
- [238] = "<238>",
- [239] = "<239>",
- [240] = "<240>",
- [241] = "<241>",
- [242] = "<242>",
- [243] = "<243>",
- [244] = "<244>",
- [245] = "<245>",
- [246] = "<246>",
- [247] = "<247>",
- [248] = "<248>",
- [249] = "<249>",
- [250] = "<250>",
- [251] = "<251>",
- [252] = "<252>",
- [253] = "<253>",
- [254] = "<254>",
- [DO_TRACING] = "DO_TRACING",
+ [INSTRUMENTED_LOAD_SUPER_ATTR] = "INSTRUMENTED_LOAD_SUPER_ATTR",
+ [INSTRUMENTED_POP_JUMP_IF_NONE] = "INSTRUMENTED_POP_JUMP_IF_NONE",
+ [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = "INSTRUMENTED_POP_JUMP_IF_NOT_NONE",
+ [INSTRUMENTED_RESUME] = "INSTRUMENTED_RESUME",
+ [INSTRUMENTED_CALL] = "INSTRUMENTED_CALL",
+ [INSTRUMENTED_RETURN_VALUE] = "INSTRUMENTED_RETURN_VALUE",
+ [INSTRUMENTED_YIELD_VALUE] = "INSTRUMENTED_YIELD_VALUE",
+ [INSTRUMENTED_CALL_FUNCTION_EX] = "INSTRUMENTED_CALL_FUNCTION_EX",
+ [INSTRUMENTED_JUMP_FORWARD] = "INSTRUMENTED_JUMP_FORWARD",
+ [INSTRUMENTED_JUMP_BACKWARD] = "INSTRUMENTED_JUMP_BACKWARD",
+ [INSTRUMENTED_RETURN_CONST] = "INSTRUMENTED_RETURN_CONST",
+ [INSTRUMENTED_FOR_ITER] = "INSTRUMENTED_FOR_ITER",
+ [INSTRUMENTED_POP_JUMP_IF_FALSE] = "INSTRUMENTED_POP_JUMP_IF_FALSE",
+ [INSTRUMENTED_POP_JUMP_IF_TRUE] = "INSTRUMENTED_POP_JUMP_IF_TRUE",
+ [INSTRUMENTED_END_FOR] = "INSTRUMENTED_END_FOR",
+ [INSTRUMENTED_END_SEND] = "INSTRUMENTED_END_SEND",
+ [INSTRUMENTED_INSTRUCTION] = "INSTRUMENTED_INSTRUCTION",
+ [INSTRUMENTED_LINE] = "INSTRUMENTED_LINE",
+ [255] = "<255>",
+ [SETUP_FINALLY] = "SETUP_FINALLY",
+ [SETUP_CLEANUP] = "SETUP_CLEANUP",
+ [SETUP_WITH] = "SETUP_WITH",
+ [POP_BLOCK] = "POP_BLOCK",
+ [JUMP] = "JUMP",
+ [JUMP_NO_INTERRUPT] = "JUMP_NO_INTERRUPT",
+ [LOAD_METHOD] = "LOAD_METHOD",
+ [LOAD_SUPER_METHOD] = "LOAD_SUPER_METHOD",
+ [LOAD_ZERO_SUPER_METHOD] = "LOAD_ZERO_SUPER_METHOD",
+ [LOAD_ZERO_SUPER_ATTR] = "LOAD_ZERO_SUPER_ATTR",
+ [STORE_FAST_MAYBE_NULL] = "STORE_FAST_MAYBE_NULL",
};
#endif
#define EXTRA_CASES \
+ case 169: \
+ case 170: \
+ case 177: \
+ case 178: \
+ case 179: \
+ case 180: \
case 181: \
case 182: \
case 183: \
@@ -555,24 +578,7 @@ static const char *const _PyOpcode_OpName[256] = {
case 234: \
case 235: \
case 236: \
- case 237: \
- case 238: \
- case 239: \
- case 240: \
- case 241: \
- case 242: \
- case 243: \
- case 244: \
- case 245: \
- case 246: \
- case 247: \
- case 248: \
- case 249: \
- case 250: \
- case 251: \
- case 252: \
- case 253: \
- case 254: \
+ case 255: \
;
#ifdef __cplusplus
diff --git a/contrib/tools/python3/src/Include/internal/pycore_opcode_utils.h b/contrib/tools/python3/src/Include/internal/pycore_opcode_utils.h
new file mode 100644
index 0000000000..1d5ff98829
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_opcode_utils.h
@@ -0,0 +1,92 @@
+#ifndef Py_INTERNAL_OPCODE_UTILS_H
+#define Py_INTERNAL_OPCODE_UTILS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+#include "pycore_opcode.h" // _PyOpcode_Jump
+
+
+#define MAX_REAL_OPCODE 254
+
+#define IS_WITHIN_OPCODE_RANGE(opcode) \
+ (((opcode) >= 0 && (opcode) <= MAX_REAL_OPCODE) || \
+ IS_PSEUDO_OPCODE(opcode))
+
+#define IS_JUMP_OPCODE(opcode) \
+ is_bit_set_in_table(_PyOpcode_Jump, opcode)
+
+#define IS_BLOCK_PUSH_OPCODE(opcode) \
+ ((opcode) == SETUP_FINALLY || \
+ (opcode) == SETUP_WITH || \
+ (opcode) == SETUP_CLEANUP)
+
+#define HAS_TARGET(opcode) \
+ (IS_JUMP_OPCODE(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
+
+/* opcodes that must be last in the basicblock */
+#define IS_TERMINATOR_OPCODE(opcode) \
+ (IS_JUMP_OPCODE(opcode) || IS_SCOPE_EXIT_OPCODE(opcode))
+
+/* opcodes which are not emitted in codegen stage, only by the assembler */
+#define IS_ASSEMBLER_OPCODE(opcode) \
+ ((opcode) == JUMP_FORWARD || \
+ (opcode) == JUMP_BACKWARD || \
+ (opcode) == JUMP_BACKWARD_NO_INTERRUPT)
+
+#define IS_BACKWARDS_JUMP_OPCODE(opcode) \
+ ((opcode) == JUMP_BACKWARD || \
+ (opcode) == JUMP_BACKWARD_NO_INTERRUPT)
+
+#define IS_UNCONDITIONAL_JUMP_OPCODE(opcode) \
+ ((opcode) == JUMP || \
+ (opcode) == JUMP_NO_INTERRUPT || \
+ (opcode) == JUMP_FORWARD || \
+ (opcode) == JUMP_BACKWARD || \
+ (opcode) == JUMP_BACKWARD_NO_INTERRUPT)
+
+#define IS_SCOPE_EXIT_OPCODE(opcode) \
+ ((opcode) == RETURN_VALUE || \
+ (opcode) == RETURN_CONST || \
+ (opcode) == RAISE_VARARGS || \
+ (opcode) == RERAISE)
+
+#define IS_SUPERINSTRUCTION_OPCODE(opcode) \
+ ((opcode) == LOAD_FAST__LOAD_FAST || \
+ (opcode) == LOAD_FAST__LOAD_CONST || \
+ (opcode) == LOAD_CONST__LOAD_FAST || \
+ (opcode) == STORE_FAST__LOAD_FAST || \
+ (opcode) == STORE_FAST__STORE_FAST)
+
+
+#define LOG_BITS_PER_INT 5
+#define MASK_LOW_LOG_BITS 31
+
+static inline int
+is_bit_set_in_table(const uint32_t *table, int bitindex) {
+ /* Is the relevant bit set in the relevant word? */
+ /* 512 bits fit into 9 32-bits words.
+ * Word is indexed by (bitindex>>ln(size of int in bits)).
+ * Bit within word is the low bits of bitindex.
+ */
+ if (bitindex >= 0 && bitindex < 512) {
+ uint32_t word = table[bitindex >> LOG_BITS_PER_INT];
+ return (word >> (bitindex & MASK_LOW_LOG_BITS)) & 1;
+ }
+ else {
+ return 0;
+ }
+}
+
+#undef LOG_BITS_PER_INT
+#undef MASK_LOW_LOG_BITS
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_OPCODE_UTILS_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_parser.h b/contrib/tools/python3/src/Include/internal/pycore_parser.h
index e2de24e2ca..dd51b92801 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_parser.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_parser.h
@@ -8,12 +8,46 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
+
+#include "pycore_ast.h" // struct _expr
+#include "pycore_global_strings.h" // _Py_DECLARE_STR()
+#include "pycore_pyarena.h" // PyArena
+
+
+#ifdef Py_DEBUG
+#define _PYPEGEN_NSTATISTICS 2000
+#endif
+
+struct _parser_runtime_state {
+#ifdef Py_DEBUG
+ long memo_statistics[_PYPEGEN_NSTATISTICS];
+#else
+ int _not_used;
+#endif
+ struct _expr dummy_name;
+};
+
+_Py_DECLARE_STR(empty, "")
+#define _parser_runtime_state_INIT \
+ { \
+ .dummy_name = { \
+ .kind = Name_kind, \
+ .v.Name.id = &_Py_STR(empty), \
+ .v.Name.ctx = Load, \
+ .lineno = 1, \
+ .col_offset = 0, \
+ .end_lineno = 1, \
+ .end_col_offset = 0, \
+ }, \
+ }
+
extern struct _mod* _PyParser_ASTFromString(
const char *str,
PyObject* filename,
int mode,
PyCompilerFlags *flags,
PyArena *arena);
+
extern struct _mod* _PyParser_ASTFromFile(
FILE *fp,
PyObject *filename_ob,
@@ -25,6 +59,7 @@ extern struct _mod* _PyParser_ASTFromFile(
int *errcode,
PyArena *arena);
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_pyerrors.h b/contrib/tools/python3/src/Include/internal/pycore_pyerrors.h
index 66f37942ef..4620a26964 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_pyerrors.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_pyerrors.h
@@ -20,7 +20,10 @@ extern void _PyErr_FiniTypes(PyInterpreterState *);
static inline PyObject* _PyErr_Occurred(PyThreadState *tstate)
{
assert(tstate != NULL);
- return tstate->curexc_type;
+ if (tstate->current_exception == NULL) {
+ return NULL;
+ }
+ return (PyObject *)Py_TYPE(tstate->current_exception);
}
static inline void _PyErr_ClearExcState(_PyErr_StackItem *exc_state)
@@ -37,10 +40,16 @@ PyAPI_FUNC(void) _PyErr_Fetch(
PyObject **value,
PyObject **traceback);
+extern PyObject *
+_PyErr_GetRaisedException(PyThreadState *tstate);
+
PyAPI_FUNC(int) _PyErr_ExceptionMatches(
PyThreadState *tstate,
PyObject *exc);
+void
+_PyErr_SetRaisedException(PyThreadState *tstate, PyObject *exc);
+
PyAPI_FUNC(void) _PyErr_Restore(
PyThreadState *tstate,
PyObject *type,
@@ -100,6 +109,8 @@ extern PyObject* _Py_Offer_Suggestions(PyObject* exception);
PyAPI_FUNC(Py_ssize_t) _Py_UTF8_Edit_Cost(PyObject *str_a, PyObject *str_b,
Py_ssize_t max_cost);
+void _PyErr_FormatNote(const char *format, ...);
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_pyhash.h b/contrib/tools/python3/src/Include/internal/pycore_pyhash.h
index a229f8d8b7..34dfa53771 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_pyhash.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_pyhash.h
@@ -5,6 +5,36 @@
# error "this header requires Py_BUILD_CORE define"
#endif
-uint64_t _Py_KeyedHash(uint64_t, const char *, Py_ssize_t);
+struct pyhash_runtime_state {
+ struct {
+#ifndef MS_WINDOWS
+ int fd;
+ dev_t st_dev;
+ ino_t st_ino;
+#else
+ // This is a placeholder so the struct isn't empty on Windows.
+ int _not_used;
+#endif
+ } urandom_cache;
+};
+
+#ifndef MS_WINDOWS
+# define _py_urandom_cache_INIT \
+ { \
+ .fd = -1, \
+ }
+#else
+# define _py_urandom_cache_INIT {0}
#endif
+
+#define pyhash_state_INIT \
+ { \
+ .urandom_cache = _py_urandom_cache_INIT, \
+ }
+
+
+uint64_t _Py_KeyedHash(uint64_t, const char *, Py_ssize_t);
+
+
+#endif // Py_INTERNAL_HASH_H
diff --git a/contrib/tools/python3/src/Include/internal/pycore_pylifecycle.h b/contrib/tools/python3/src/Include/internal/pycore_pylifecycle.h
index b4718b8ade..7cd998a704 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_pylifecycle.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_pylifecycle.h
@@ -14,10 +14,6 @@ extern "C" {
struct _PyArgv;
struct pyruntimestate;
-/* True if the main interpreter thread exited due to an unhandled
- * KeyboardInterrupt exception, suggesting the user pressed ^C. */
-PyAPI_DATA(int) _Py_UnhandledKeyboardInterrupt;
-
extern int _Py_SetFileSystemEncoding(
const char *encoding,
const char *errors);
@@ -33,8 +29,8 @@ PyAPI_FUNC(int) _Py_IsLocaleCoercionTarget(const char *ctype_loc);
/* Various one-time initializers */
+extern void _Py_InitVersion(void);
extern PyStatus _PyFaulthandler_Init(int enable);
-extern int _PyTraceMalloc_Init(int enable);
extern PyObject * _PyBuiltin_Init(PyInterpreterState *interp);
extern PyStatus _PySys_Create(
PyThreadState *tstate,
@@ -42,11 +38,11 @@ extern PyStatus _PySys_Create(
extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options);
extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config);
extern int _PySys_UpdateConfig(PyThreadState *tstate);
-extern void _PySys_Fini(PyInterpreterState *interp);
+extern void _PySys_FiniTypes(PyInterpreterState *interp);
extern int _PyBuiltins_AddExceptions(PyObject * bltinmod);
extern PyStatus _Py_HashRandomization_Init(const PyConfig *);
-extern PyStatus _PyImportZip_Init(PyThreadState *tstate);
+extern PyStatus _PyTime_Init(void);
extern PyStatus _PyGC_Init(PyInterpreterState *interp);
extern PyStatus _PyAtExit_Init(PyInterpreterState *interp);
extern int _Py_Deepfreeze_Init(void);
@@ -56,8 +52,6 @@ extern int _Py_Deepfreeze_Init(void);
extern int _PySignal_Init(int install_signal_handlers);
extern void _PySignal_Fini(void);
-extern void _PyImport_Fini(void);
-extern void _PyImport_Fini2(void);
extern void _PyGC_Fini(PyInterpreterState *interp);
extern void _Py_HashRandomization_Fini(void);
extern void _PyFaulthandler_Fini(void);
@@ -69,8 +63,9 @@ extern void _PyAtExit_Fini(PyInterpreterState *interp);
extern void _PyThread_FiniType(PyInterpreterState *interp);
extern void _Py_Deepfreeze_Fini(void);
extern void _PyArg_Fini(void);
+extern void _Py_FinalizeAllocatedBlocks(_PyRuntimeState *);
-extern PyStatus _PyGILState_Init(_PyRuntimeState *runtime);
+extern PyStatus _PyGILState_Init(PyInterpreterState *interp);
extern PyStatus _PyGILState_SetTstate(PyThreadState *tstate);
extern void _PyGILState_Fini(PyInterpreterState *interp);
@@ -92,6 +87,7 @@ PyAPI_FUNC(PyObject*) _PyErr_WriteUnraisableDefaultHook(PyObject *unraisable);
PyAPI_FUNC(void) _PyErr_Print(PyThreadState *tstate);
PyAPI_FUNC(void) _PyErr_Display(PyObject *file, PyObject *exception,
PyObject *value, PyObject *tb);
+PyAPI_FUNC(void) _PyErr_DisplayException(PyObject *file, PyObject *exc);
PyAPI_FUNC(void) _PyThreadState_DeleteCurrent(PyThreadState *tstate);
diff --git a/contrib/tools/python3/src/Include/internal/pycore_pymath.h b/contrib/tools/python3/src/Include/internal/pycore_pymath.h
index 5c6aee2a23..7a4e1c1eb7 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_pymath.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_pymath.h
@@ -56,25 +56,6 @@ static inline void _Py_ADJUST_ERANGE2(double x, double y)
}
}
-// Return whether integral type *type* is signed or not.
-#define _Py_IntegralTypeSigned(type) \
- ((type)(-1) < 0)
-
-// Return the maximum value of integral type *type*.
-#define _Py_IntegralTypeMax(type) \
- ((_Py_IntegralTypeSigned(type)) ? (((((type)1 << (sizeof(type)*CHAR_BIT - 2)) - 1) << 1) + 1) : ~(type)0)
-
-// Return the minimum value of integral type *type*.
-#define _Py_IntegralTypeMin(type) \
- ((_Py_IntegralTypeSigned(type)) ? -_Py_IntegralTypeMax(type) - 1 : 0)
-
-// Check whether *v* is in the range of integral type *type*. This is most
-// useful if *v* is floating-point, since demoting a floating-point *v* to an
-// integral type that cannot represent *v*'s integral part is undefined
-// behavior.
-#define _Py_InIntegralTypeRange(type, v) \
- (_Py_IntegralTypeMin(type) <= v && v <= _Py_IntegralTypeMax(type))
-
//--- HAVE_PY_SET_53BIT_PRECISION macro ------------------------------------
//
diff --git a/contrib/tools/python3/src/Include/internal/pycore_pymem.h b/contrib/tools/python3/src/Include/internal/pycore_pymem.h
index b9eea9d4b3..81a707a0a5 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_pymem.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_pymem.h
@@ -11,6 +11,28 @@ extern "C" {
#include "pymem.h" // PyMemAllocatorName
+typedef struct {
+ /* We tag each block with an API ID in order to tag API violations */
+ char api_id;
+ PyMemAllocatorEx alloc;
+} debug_alloc_api_t;
+
+struct _pymem_allocators {
+ PyThread_type_lock mutex;
+ struct {
+ PyMemAllocatorEx raw;
+ PyMemAllocatorEx mem;
+ PyMemAllocatorEx obj;
+ } standard;
+ struct {
+ debug_alloc_api_t raw;
+ debug_alloc_api_t mem;
+ debug_alloc_api_t obj;
+ } debug;
+ PyObjectArenaAllocator obj_arena;
+};
+
+
/* Set the memory allocator of the specified domain to the default.
Save the old allocator into *old_alloc if it's non-NULL.
Return on success, or return -1 if the domain is unknown. */
@@ -69,46 +91,8 @@ PyAPI_FUNC(int) _PyMem_GetAllocatorName(
PYMEM_ALLOCATOR_NOT_SET does nothing. */
PyAPI_FUNC(int) _PyMem_SetupAllocators(PyMemAllocatorName allocator);
-struct _PyTraceMalloc_Config {
- /* Module initialized?
- Variable protected by the GIL */
- enum {
- TRACEMALLOC_NOT_INITIALIZED,
- TRACEMALLOC_INITIALIZED,
- TRACEMALLOC_FINALIZED
- } initialized;
-
- /* Is tracemalloc tracing memory allocations?
- Variable protected by the GIL */
- int tracing;
-
- /* limit of the number of frames in a traceback, 1 by default.
- Variable protected by the GIL. */
- int max_nframe;
-};
-
-#define _PyTraceMalloc_Config_INIT \
- {.initialized = TRACEMALLOC_NOT_INITIALIZED, \
- .tracing = 0, \
- .max_nframe = 1}
-
-PyAPI_DATA(struct _PyTraceMalloc_Config) _Py_tracemalloc_config;
-
-/* Allocate memory directly from the O/S virtual memory system,
- * where supported. Otherwise fallback on malloc */
-void *_PyObject_VirtualAlloc(size_t size);
-void _PyObject_VirtualFree(void *, size_t size);
-
-/* This function returns the number of allocated memory blocks, regardless of size */
-PyAPI_FUNC(Py_ssize_t) _Py_GetAllocatedBlocks(void);
-
-/* Macros */
-#ifdef WITH_PYMALLOC
-// Export the symbol for the 3rd party guppy3 project
-PyAPI_FUNC(int) _PyObject_DebugMallocStats(FILE *out);
-#endif
#ifdef __cplusplus
}
#endif
-#endif // !Py_INTERNAL_PYMEM_H
+#endif /* !Py_INTERNAL_PYMEM_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_pymem_init.h b/contrib/tools/python3/src/Include/internal/pycore_pymem_init.h
new file mode 100644
index 0000000000..78232738cb
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_pymem_init.h
@@ -0,0 +1,85 @@
+#ifndef Py_INTERNAL_PYMEM_INIT_H
+#define Py_INTERNAL_PYMEM_INIT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+#include "pycore_pymem.h"
+
+
+/********************************/
+/* the allocators' initializers */
+
+extern void * _PyMem_RawMalloc(void *, size_t);
+extern void * _PyMem_RawCalloc(void *, size_t, size_t);
+extern void * _PyMem_RawRealloc(void *, void *, size_t);
+extern void _PyMem_RawFree(void *, void *);
+#define PYRAW_ALLOC {NULL, _PyMem_RawMalloc, _PyMem_RawCalloc, _PyMem_RawRealloc, _PyMem_RawFree}
+
+#ifdef WITH_PYMALLOC
+extern void* _PyObject_Malloc(void *, size_t);
+extern void* _PyObject_Calloc(void *, size_t, size_t);
+extern void _PyObject_Free(void *, void *);
+extern void* _PyObject_Realloc(void *, void *, size_t);
+# define PYOBJ_ALLOC {NULL, _PyObject_Malloc, _PyObject_Calloc, _PyObject_Realloc, _PyObject_Free}
+#else
+# define PYOBJ_ALLOC PYRAW_ALLOC
+#endif // WITH_PYMALLOC
+
+#define PYMEM_ALLOC PYOBJ_ALLOC
+
+extern void* _PyMem_DebugRawMalloc(void *, size_t);
+extern void* _PyMem_DebugRawCalloc(void *, size_t, size_t);
+extern void* _PyMem_DebugRawRealloc(void *, void *, size_t);
+extern void _PyMem_DebugRawFree(void *, void *);
+
+extern void* _PyMem_DebugMalloc(void *, size_t);
+extern void* _PyMem_DebugCalloc(void *, size_t, size_t);
+extern void* _PyMem_DebugRealloc(void *, void *, size_t);
+extern void _PyMem_DebugFree(void *, void *);
+
+#define PYDBGRAW_ALLOC(runtime) \
+ {&(runtime).allocators.debug.raw, _PyMem_DebugRawMalloc, _PyMem_DebugRawCalloc, _PyMem_DebugRawRealloc, _PyMem_DebugRawFree}
+#define PYDBGMEM_ALLOC(runtime) \
+ {&(runtime).allocators.debug.mem, _PyMem_DebugMalloc, _PyMem_DebugCalloc, _PyMem_DebugRealloc, _PyMem_DebugFree}
+#define PYDBGOBJ_ALLOC(runtime) \
+ {&(runtime).allocators.debug.obj, _PyMem_DebugMalloc, _PyMem_DebugCalloc, _PyMem_DebugRealloc, _PyMem_DebugFree}
+
+extern void * _PyMem_ArenaAlloc(void *, size_t);
+extern void _PyMem_ArenaFree(void *, void *, size_t);
+
+#ifdef Py_DEBUG
+# define _pymem_allocators_standard_INIT(runtime) \
+ { \
+ PYDBGRAW_ALLOC(runtime), \
+ PYDBGMEM_ALLOC(runtime), \
+ PYDBGOBJ_ALLOC(runtime), \
+ }
+#else
+# define _pymem_allocators_standard_INIT(runtime) \
+ { \
+ PYRAW_ALLOC, \
+ PYMEM_ALLOC, \
+ PYOBJ_ALLOC, \
+ }
+#endif
+
+#define _pymem_allocators_debug_INIT \
+ { \
+ {'r', PYRAW_ALLOC}, \
+ {'m', PYMEM_ALLOC}, \
+ {'o', PYOBJ_ALLOC}, \
+ }
+
+# define _pymem_allocators_obj_arena_INIT \
+ { NULL, _PyMem_ArenaAlloc, _PyMem_ArenaFree }
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif // !Py_INTERNAL_PYMEM_INIT_H
diff --git a/contrib/tools/python3/src/Include/internal/pycore_pystate.h b/contrib/tools/python3/src/Include/internal/pycore_pystate.h
index 7c5aba12d5..fba08ae552 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_pystate.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_pystate.h
@@ -33,6 +33,22 @@ _Py_IsMainInterpreter(PyInterpreterState *interp)
return (interp == _PyInterpreterState_Main());
}
+static inline int
+_Py_IsMainInterpreterFinalizing(PyInterpreterState *interp)
+{
+ /* bpo-39877: Access _PyRuntime directly rather than using
+ tstate->interp->runtime to support calls from Python daemon threads.
+ After Py_Finalize() has been called, tstate can be a dangling pointer:
+ point to PyThreadState freed memory. */
+ return (_PyRuntimeState_GetFinalizing(&_PyRuntime) != NULL &&
+ interp == &_PyRuntime._main_interpreter);
+}
+
+// Export for _xxsubinterpreters module.
+PyAPI_FUNC(int) _PyInterpreterState_SetRunningMain(PyInterpreterState *);
+PyAPI_FUNC(void) _PyInterpreterState_SetNotRunningMain(PyInterpreterState *);
+PyAPI_FUNC(int) _PyInterpreterState_IsRunningMain(PyInterpreterState *);
+
static inline const PyConfig *
_Py_GetMainConfig(void)
@@ -53,34 +69,23 @@ _Py_ThreadCanHandleSignals(PyInterpreterState *interp)
}
-/* Only execute pending calls on the main thread. */
-static inline int
-_Py_ThreadCanHandlePendingCalls(void)
-{
- return _Py_IsMainThread();
-}
+/* Variable and static inline functions for in-line access to current thread
+ and interpreter state */
+#if defined(HAVE_THREAD_LOCAL) && !defined(Py_BUILD_CORE_MODULE)
+extern _Py_thread_local PyThreadState *_Py_tss_tstate;
+#endif
+PyAPI_DATA(PyThreadState *) _PyThreadState_GetCurrent(void);
#ifndef NDEBUG
extern int _PyThreadState_CheckConsistency(PyThreadState *tstate);
#endif
-int _PyThreadState_MustExit(PyThreadState *tstate);
-
-/* Variable and macro for in-line access to current thread
- and interpreter state */
-
-static inline PyThreadState*
-_PyRuntimeState_GetThreadState(_PyRuntimeState *runtime)
-{
- return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->gilstate.tstate_current);
-}
+extern int _PyThreadState_MustExit(PyThreadState *tstate);
/* Get the current Python thread state.
- Efficient macro reading directly the 'gilstate.tstate_current' atomic
- variable. The macro is unsafe: it does not check for error and it can
- return NULL.
+ This function is unsafe: it does not check for error and it can return NULL.
The caller must hold the GIL.
@@ -88,27 +93,33 @@ _PyRuntimeState_GetThreadState(_PyRuntimeState *runtime)
static inline PyThreadState*
_PyThreadState_GET(void)
{
- return _PyRuntimeState_GetThreadState(&_PyRuntime);
+#if defined(HAVE_THREAD_LOCAL) && !defined(Py_BUILD_CORE_MODULE)
+ return _Py_tss_tstate;
+#else
+ return _PyThreadState_GetCurrent();
+#endif
}
-PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalError_TstateNULL(const char *func);
static inline void
_Py_EnsureFuncTstateNotNULL(const char *func, PyThreadState *tstate)
{
if (tstate == NULL) {
- _Py_FatalError_TstateNULL(func);
+ _Py_FatalErrorFunc(func,
+ "the function must be called with the GIL held, "
+ "after Python initialization and before Python finalization, "
+ "but the GIL is released (the current Python thread state is NULL)");
}
}
// Call Py_FatalError() if tstate is NULL
#define _Py_EnsureTstateNotNULL(tstate) \
- _Py_EnsureFuncTstateNotNULL(__func__, tstate)
+ _Py_EnsureFuncTstateNotNULL(__func__, (tstate))
/* Get the current interpreter state.
- The macro is unsafe: it does not check for error and it can return NULL.
+ The function is unsafe: it does not check for error and it can return NULL.
The caller must hold the GIL.
@@ -125,39 +136,29 @@ static inline PyInterpreterState* _PyInterpreterState_GET(void) {
// PyThreadState functions
-PyAPI_FUNC(void) _PyThreadState_SetCurrent(PyThreadState *tstate);
+PyAPI_FUNC(PyThreadState *) _PyThreadState_New(PyInterpreterState *interp);
+PyAPI_FUNC(void) _PyThreadState_Bind(PyThreadState *tstate);
// We keep this around exclusively for stable ABI compatibility.
PyAPI_FUNC(void) _PyThreadState_Init(
PyThreadState *tstate);
-PyAPI_FUNC(void) _PyThreadState_DeleteExcept(
- _PyRuntimeState *runtime,
- PyThreadState *tstate);
-
-
-static inline void
-_PyThreadState_UpdateTracingState(PyThreadState *tstate)
-{
- bool use_tracing =
- (tstate->tracing == 0) &&
- (tstate->c_tracefunc != NULL || tstate->c_profilefunc != NULL);
- tstate->cframe->use_tracing = (use_tracing ? 255 : 0);
-}
+PyAPI_FUNC(void) _PyThreadState_DeleteExcept(PyThreadState *tstate);
/* Other */
PyAPI_FUNC(PyThreadState *) _PyThreadState_Swap(
- struct _gilstate_runtime_state *gilstate,
+ _PyRuntimeState *runtime,
PyThreadState *newts);
PyAPI_FUNC(PyStatus) _PyInterpreterState_Enable(_PyRuntimeState *runtime);
#ifdef HAVE_FORK
extern PyStatus _PyInterpreterState_DeleteExceptMain(_PyRuntimeState *runtime);
-extern PyStatus _PyGILState_Reinit(_PyRuntimeState *runtime);
extern void _PySignal_AfterFork(void);
#endif
+PyAPI_FUNC(int) _PyCrossInterpreterData_ReleaseAndRawFree(_PyCrossInterpreterData *);
+
PyAPI_FUNC(int) _PyState_AddModule(
PyThreadState *tstate,
@@ -167,6 +168,12 @@ PyAPI_FUNC(int) _PyState_AddModule(
PyAPI_FUNC(int) _PyOS_InterruptOccurred(PyThreadState *tstate);
+#define HEAD_LOCK(runtime) \
+ PyThread_acquire_lock((runtime)->interpreters.mutex, WAIT_LOCK)
+#define HEAD_UNLOCK(runtime) \
+ PyThread_release_lock((runtime)->interpreters.mutex)
+
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_pythread.h b/contrib/tools/python3/src/Include/internal/pycore_pythread.h
new file mode 100644
index 0000000000..f53921494c
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_pythread.h
@@ -0,0 +1,81 @@
+#ifndef Py_INTERNAL_PYTHREAD_H
+#define Py_INTERNAL_PYTHREAD_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+
+#ifndef _POSIX_THREADS
+/* This means pthreads are not implemented in libc headers, hence the macro
+ not present in unistd.h. But they still can be implemented as an external
+ library (e.g. gnu pth in pthread emulation) */
+# ifdef HAVE_PTHREAD_H
+# include <pthread.h> /* _POSIX_THREADS */
+# endif
+# ifndef _POSIX_THREADS
+/* Check if we're running on HP-UX and _SC_THREADS is defined. If so, then
+ enough of the Posix threads package is implemented to support python
+ threads.
+
+ This is valid for HP-UX 11.23 running on an ia64 system. If needed, add
+ a check of __ia64 to verify that we're running on an ia64 system instead
+ of a pa-risc system.
+*/
+# ifdef __hpux
+# ifdef _SC_THREADS
+# define _POSIX_THREADS
+# endif
+# endif
+# endif /* _POSIX_THREADS */
+#endif /* _POSIX_THREADS */
+
+#if defined(_POSIX_THREADS) || defined(HAVE_PTHREAD_STUBS)
+# define _USE_PTHREADS
+#endif
+
+#if defined(_USE_PTHREADS) && defined(HAVE_PTHREAD_CONDATTR_SETCLOCK) && defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
+// monotonic is supported statically. It doesn't mean it works on runtime.
+# define CONDATTR_MONOTONIC
+#endif
+
+
+#if defined(HAVE_PTHREAD_STUBS)
+// pthread_key
+struct py_stub_tls_entry {
+ bool in_use;
+ void *value;
+};
+#endif
+
+struct _pythread_runtime_state {
+ int initialized;
+
+#ifdef _USE_PTHREADS
+ // This matches when thread_pthread.h is used.
+ struct {
+ /* NULL when pthread_condattr_setclock(CLOCK_MONOTONIC) is not supported. */
+ pthread_condattr_t *ptr;
+# ifdef CONDATTR_MONOTONIC
+ /* The value to which condattr_monotonic is set. */
+ pthread_condattr_t val;
+# endif
+ } _condattr_monotonic;
+
+#endif // USE_PTHREADS
+
+#if defined(HAVE_PTHREAD_STUBS)
+ struct {
+ struct py_stub_tls_entry tls_entries[PTHREAD_KEYS_MAX];
+ } stubs;
+#endif
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_PYTHREAD_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_range.h b/contrib/tools/python3/src/Include/internal/pycore_range.h
new file mode 100644
index 0000000000..bf045ec4fd
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_range.h
@@ -0,0 +1,21 @@
+#ifndef Py_INTERNAL_RANGE_H
+#define Py_INTERNAL_RANGE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+typedef struct {
+ PyObject_HEAD
+ long start;
+ long step;
+ long len;
+} _PyRangeIterObject;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_RANGE_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_runtime.h b/contrib/tools/python3/src/Include/internal/pycore_runtime.h
index ae63ae74af..99c4b0760b 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_runtime.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_runtime.h
@@ -8,22 +8,28 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
+#include "pycore_atexit.h" // struct atexit_runtime_state
#include "pycore_atomic.h" /* _Py_atomic_address */
-#include "pycore_gil.h" // struct _gil_runtime_state
+#include "pycore_ceval_state.h" // struct _ceval_runtime_state
+#include "pycore_floatobject.h" // struct _Py_float_runtime_state
+#include "pycore_faulthandler.h" // struct _faulthandler_runtime_state
#include "pycore_global_objects.h" // struct _Py_global_objects
+#include "pycore_import.h" // struct _import_runtime_state
#include "pycore_interp.h" // PyInterpreterState
+#include "pycore_object_state.h" // struct _py_object_runtime_state
+#include "pycore_parser.h" // struct _parser_runtime_state
+#include "pycore_pymem.h" // struct _pymem_allocators
+#include "pycore_pyhash.h" // struct pyhash_runtime_state
+#include "pycore_pythread.h" // struct _pythread_runtime_state
+#include "pycore_signal.h" // struct _signals_runtime_state
+#include "pycore_time.h" // struct _time_runtime_state
+#include "pycore_tracemalloc.h" // struct _tracemalloc_runtime_state
+#include "pycore_typeobject.h" // struct types_runtime_state
#include "pycore_unicodeobject.h" // struct _Py_unicode_runtime_ids
-
-/* ceval state */
-
-struct _ceval_runtime_state {
- /* Request for checking signals. It is shared by all interpreters (see
- bpo-40513). Any thread of any interpreter can receive a signal, but only
- the main thread of the main interpreter can handle signals: see
- _Py_ThreadCanHandleSignals(). */
- _Py_atomic_int signals_pending;
- struct _gil_runtime_state gil;
+struct _getargs_runtime_state {
+ PyThread_type_lock mutex;
+ struct _PyArg_Parser *static_parsers;
};
/* GIL state */
@@ -32,15 +38,11 @@ struct _gilstate_runtime_state {
/* bpo-26558: Flag to disable PyGILState_Check().
If set to non-zero, PyGILState_Check() always return 1. */
int check_enabled;
- /* Assuming the current thread holds the GIL, this is the
- PyThreadState for the current thread. */
- _Py_atomic_address tstate_current;
/* The single PyInterpreterState used by this process'
GILState implementation
*/
/* TODO: Given interp_main, it may be possible to kill this ref */
PyInterpreterState *autoInterpreterState;
- Py_tss_t autoTSSkey;
};
/* Runtime audit hook state */
@@ -90,8 +92,8 @@ typedef struct pyruntimestate {
in the operation of the runtime. It is also often the only
interpreter. */
PyInterpreterState *main;
- /* _next_interp_id is an auto-numbered sequence of small
- integers. It gets initialized in _PyInterpreterState_Init(),
+ /* next_id is an auto-numbered sequence of small
+ integers. It gets initialized in _PyInterpreterState_Enable(),
which is called in Py_Initialize(), and used in
PyInterpreterState_New(). A negative interpreter ID
indicates an error occurred. The main interpreter will
@@ -100,20 +102,43 @@ typedef struct pyruntimestate {
using a Python int. */
int64_t next_id;
} interpreters;
- // XXX Remove this field once we have a tp_* slot.
- struct _xidregistry {
- PyThread_type_lock mutex;
- struct _xidregitem *head;
- } xidregistry;
unsigned long main_thread;
-#define NEXITFUNCS 32
- void (*exitfuncs[NEXITFUNCS])(void);
- int nexitfuncs;
+ /* ---------- IMPORTANT ---------------------------
+ The fields above this line are declared as early as
+ possible to facilitate out-of-process observability
+ tools. */
+
+ // XXX Remove this field once we have a tp_* slot.
+ struct _xidregistry xidregistry;
+
+ struct _pymem_allocators allocators;
+ struct _obmalloc_global_state obmalloc;
+ struct pyhash_runtime_state pyhash_state;
+ struct _time_runtime_state time;
+ struct _pythread_runtime_state threads;
+ struct _signals_runtime_state signals;
+
+ /* Used for the thread state bound to the current thread. */
+ Py_tss_t autoTSSkey;
+
+ /* Used instead of PyThreadState.trash when there is not current tstate. */
+ Py_tss_t trashTSSkey;
+
+ PyWideStringList orig_argv;
+
+ struct _parser_runtime_state parser;
+
+ struct _atexit_runtime_state atexit;
+ struct _import_runtime_state imports;
struct _ceval_runtime_state ceval;
struct _gilstate_runtime_state gilstate;
+ struct _getargs_runtime_state getargs;
+ struct _fileutils_state fileutils;
+ struct _faulthandler_runtime_state faulthandler;
+ struct _tracemalloc_runtime_state tracemalloc;
PyPreConfig preconfig;
@@ -121,12 +146,27 @@ typedef struct pyruntimestate {
// is called multiple times.
Py_OpenCodeHookFunction open_code_hook;
void *open_code_userdata;
- _Py_AuditHookEntry *audit_hook_head;
+ struct {
+ PyThread_type_lock mutex;
+ _Py_AuditHookEntry *head;
+ } audit_hooks;
- struct _Py_unicode_runtime_ids unicode_ids;
+ struct _py_object_runtime_state object_state;
+ struct _Py_float_runtime_state float_state;
+ struct _Py_unicode_runtime_state unicode_state;
+ struct _types_runtime_state types;
/* All the objects that are shared by the runtime's interpreters. */
- struct _Py_global_objects global_objects;
+ struct _Py_static_objects static_objects;
+ struct _Py_cached_objects cached_objects;
+
+ /* The ID of the OS thread in which we are finalizing.
+ We use _Py_atomic_address instead of adding a new _Py_atomic_ulong. */
+ _Py_atomic_address _finalizing_id;
+ /* The value to use for sys.path[0] in new subinterpreters.
+ Normally this would be part of the PyConfig struct. However,
+ we cannot add it there in 3.12 since that's an ABI change. */
+ wchar_t *sys_path_0;
/* The following fields are here to avoid allocation during init.
The data is exposed through _PyRuntimeState pointer fields.
@@ -170,9 +210,23 @@ _PyRuntimeState_GetFinalizing(_PyRuntimeState *runtime) {
return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->_finalizing);
}
+static inline unsigned long
+_PyRuntimeState_GetFinalizingID(_PyRuntimeState *runtime) {
+ return (unsigned long)_Py_atomic_load_relaxed(&runtime->_finalizing_id);
+}
+
static inline void
_PyRuntimeState_SetFinalizing(_PyRuntimeState *runtime, PyThreadState *tstate) {
_Py_atomic_store_relaxed(&runtime->_finalizing, (uintptr_t)tstate);
+ if (tstate == NULL) {
+ _Py_atomic_store_relaxed(&runtime->_finalizing_id, 0);
+ }
+ else {
+ // XXX Re-enable this assert once gh-109860 is fixed.
+ //assert(tstate->thread_id == PyThread_get_thread_ident());
+ _Py_atomic_store_relaxed(&runtime->_finalizing_id,
+ (uintptr_t)tstate->thread_id);
+ }
}
#ifdef __cplusplus
diff --git a/contrib/tools/python3/src/Include/internal/pycore_runtime_init.h b/contrib/tools/python3/src/Include/internal/pycore_runtime_init.h
index 13eae1e4c8..e5f9e17eff 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_runtime_init.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_runtime_init.h
@@ -8,48 +8,87 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
+#include "pycore_long.h"
#include "pycore_object.h"
+#include "pycore_parser.h"
+#include "pycore_pymem_init.h"
+#include "pycore_obmalloc_init.h"
+
+
+extern PyTypeObject _PyExc_MemoryError;
/* The static initializers defined here should only be used
in the runtime init code (in pystate.c and pylifecycle.c). */
-#define _PyRuntimeState_INIT \
+#define _PyRuntimeState_INIT(runtime) \
{ \
- .gilstate = { \
- .check_enabled = 1, \
- /* A TSS key must be initialized with Py_tss_NEEDS_INIT \
- in accordance with the specification. */ \
- .autoTSSkey = Py_tss_NEEDS_INIT, \
+ .allocators = { \
+ .standard = _pymem_allocators_standard_INIT(runtime), \
+ .debug = _pymem_allocators_debug_INIT, \
+ .obj_arena = _pymem_allocators_obj_arena_INIT, \
}, \
+ .obmalloc = _obmalloc_global_state_INIT, \
+ .pyhash_state = pyhash_state_INIT, \
+ .signals = _signals_RUNTIME_INIT, \
.interpreters = { \
/* This prevents interpreters from getting created \
until _PyInterpreterState_Enable() is called. */ \
.next_id = -1, \
}, \
- .global_objects = _Py_global_objects_INIT, \
- ._main_interpreter = _PyInterpreterState_INIT, \
+ /* A TSS key must be initialized with Py_tss_NEEDS_INIT \
+ in accordance with the specification. */ \
+ .autoTSSkey = Py_tss_NEEDS_INIT, \
+ .parser = _parser_runtime_state_INIT, \
+ .ceval = { \
+ .perf = _PyEval_RUNTIME_PERF_INIT, \
+ }, \
+ .gilstate = { \
+ .check_enabled = 1, \
+ }, \
+ .fileutils = { \
+ .force_ascii = -1, \
+ }, \
+ .faulthandler = _faulthandler_runtime_state_INIT, \
+ .tracemalloc = _tracemalloc_runtime_state_INIT, \
+ .float_state = { \
+ .float_format = _py_float_format_unknown, \
+ .double_format = _py_float_format_unknown, \
+ }, \
+ .types = { \
+ .next_version_tag = 1, \
+ }, \
+ .static_objects = { \
+ .singletons = { \
+ .small_ints = _Py_small_ints_INIT, \
+ .bytes_empty = _PyBytes_SIMPLE_INIT(0, 0), \
+ .bytes_characters = _Py_bytes_characters_INIT, \
+ .strings = { \
+ .literals = _Py_str_literals_INIT, \
+ .identifiers = _Py_str_identifiers_INIT, \
+ .ascii = _Py_str_ascii_INIT, \
+ .latin1 = _Py_str_latin1_INIT, \
+ }, \
+ .tuple_empty = { \
+ .ob_base = _PyVarObject_HEAD_INIT(&PyTuple_Type, 0) \
+ }, \
+ .hamt_bitmap_node_empty = { \
+ .ob_base = _PyVarObject_HEAD_INIT(&_PyHamt_BitmapNode_Type, 0) \
+ }, \
+ .context_token_missing = { \
+ .ob_base = _PyObject_HEAD_INIT(&_PyContextTokenMissing_Type) \
+ }, \
+ }, \
+ }, \
+ ._main_interpreter = _PyInterpreterState_INIT(runtime._main_interpreter), \
}
-#ifdef HAVE_DLOPEN
-# include <dlfcn.h>
-# if HAVE_DECL_RTLD_NOW
-# define _Py_DLOPEN_FLAGS RTLD_NOW
-# else
-# define _Py_DLOPEN_FLAGS RTLD_LAZY
-# endif
-# define DLOPENFLAGS_INIT .dlopenflags = _Py_DLOPEN_FLAGS,
-#else
-# define _Py_DLOPEN_FLAGS 0
-# define DLOPENFLAGS_INIT
-#endif
-
-#define _PyInterpreterState_INIT \
+#define _PyInterpreterState_INIT(INTERP) \
{ \
- ._static = 1, \
.id_refcount = -1, \
- DLOPENFLAGS_INIT \
+ .imports = IMPORTS_INIT, \
+ .obmalloc = _obmalloc_state_INIT(INTERP.obmalloc), \
.ceval = { \
.recursion_limit = Py_DEFAULT_RECURSION_LIMIT, \
}, \
@@ -62,1193 +101,93 @@ extern "C" {
{ .threshold = 10, }, \
}, \
}, \
+ .object_state = _py_object_state_INIT(INTERP), \
+ .dtoa = _dtoa_state_INIT(&(INTERP)), \
+ .dict_state = _dict_state_INIT, \
+ .func_state = { \
+ .next_version = 1, \
+ }, \
+ .types = { \
+ .next_version_tag = _Py_TYPE_BASE_VERSION_TAG, \
+ }, \
+ .static_objects = { \
+ .singletons = { \
+ ._not_used = 1, \
+ .hamt_empty = { \
+ .ob_base = _PyObject_HEAD_INIT(&_PyHamt_Type) \
+ .h_root = (PyHamtNode*)&_Py_SINGLETON(hamt_bitmap_node_empty), \
+ }, \
+ .last_resort_memory_error = { \
+ _PyObject_HEAD_INIT(&_PyExc_MemoryError) \
+ .args = (PyObject*)&_Py_SINGLETON(tuple_empty) \
+ }, \
+ }, \
+ }, \
._initial_thread = _PyThreadState_INIT, \
}
#define _PyThreadState_INIT \
{ \
- ._static = 1, \
- .recursion_limit = Py_DEFAULT_RECURSION_LIMIT, \
+ .py_recursion_limit = Py_DEFAULT_RECURSION_LIMIT, \
.context_ver = 1, \
}
-
-// global objects
-
-#define _PyLong_DIGIT_INIT(val) \
+#ifdef Py_TRACE_REFS
+# define _py_object_state_INIT(INTERP) \
{ \
- _PyVarObject_IMMORTAL_INIT(&PyLong_Type, \
- ((val) == 0 ? 0 : ((val) > 0 ? 1 : -1))), \
- .ob_digit = { ((val) >= 0 ? (val) : -(val)) }, \
+ .refchain = {&INTERP.object_state.refchain, &INTERP.object_state.refchain}, \
}
+#else
+# define _py_object_state_INIT(INTERP) \
+ { 0 }
+#endif
+
+
+// global objects
#define _PyBytes_SIMPLE_INIT(CH, LEN) \
{ \
- _PyVarObject_IMMORTAL_INIT(&PyBytes_Type, LEN), \
+ _PyVarObject_HEAD_INIT(&PyBytes_Type, (LEN)) \
.ob_shash = -1, \
- .ob_sval = { CH }, \
+ .ob_sval = { (CH) }, \
}
#define _PyBytes_CHAR_INIT(CH) \
{ \
- _PyBytes_SIMPLE_INIT(CH, 1) \
+ _PyBytes_SIMPLE_INIT((CH), 1) \
}
#define _PyUnicode_ASCII_BASE_INIT(LITERAL, ASCII) \
{ \
- .ob_base = _PyObject_IMMORTAL_INIT(&PyUnicode_Type), \
+ .ob_base = _PyObject_HEAD_INIT(&PyUnicode_Type) \
.length = sizeof(LITERAL) - 1, \
.hash = -1, \
.state = { \
.kind = 1, \
.compact = 1, \
- .ascii = ASCII, \
- .ready = 1, \
+ .ascii = (ASCII), \
+ .statically_allocated = 1, \
}, \
}
#define _PyASCIIObject_INIT(LITERAL) \
{ \
- ._ascii = _PyUnicode_ASCII_BASE_INIT(LITERAL, 1), \
- ._data = LITERAL \
+ ._ascii = _PyUnicode_ASCII_BASE_INIT((LITERAL), 1), \
+ ._data = (LITERAL) \
}
#define INIT_STR(NAME, LITERAL) \
- ._ ## NAME = _PyASCIIObject_INIT(LITERAL)
+ ._py_ ## NAME = _PyASCIIObject_INIT(LITERAL)
#define INIT_ID(NAME) \
- ._ ## NAME = _PyASCIIObject_INIT(#NAME)
-#define _PyUnicode_LATIN1_INIT(LITERAL) \
+ ._py_ ## NAME = _PyASCIIObject_INIT(#NAME)
+#define _PyUnicode_LATIN1_INIT(LITERAL, UTF8) \
{ \
._latin1 = { \
- ._base = _PyUnicode_ASCII_BASE_INIT(LITERAL, 0), \
+ ._base = _PyUnicode_ASCII_BASE_INIT((LITERAL), 0), \
+ .utf8 = (UTF8), \
+ .utf8_length = sizeof(UTF8) - 1, \
}, \
- ._data = LITERAL, \
+ ._data = (LITERAL), \
}
-/* The following is auto-generated by Tools/scripts/generate_global_objects.py. */
-#define _Py_global_objects_INIT { \
- .singletons = { \
- .small_ints = { \
- _PyLong_DIGIT_INIT(-5), \
- _PyLong_DIGIT_INIT(-4), \
- _PyLong_DIGIT_INIT(-3), \
- _PyLong_DIGIT_INIT(-2), \
- _PyLong_DIGIT_INIT(-1), \
- _PyLong_DIGIT_INIT(0), \
- _PyLong_DIGIT_INIT(1), \
- _PyLong_DIGIT_INIT(2), \
- _PyLong_DIGIT_INIT(3), \
- _PyLong_DIGIT_INIT(4), \
- _PyLong_DIGIT_INIT(5), \
- _PyLong_DIGIT_INIT(6), \
- _PyLong_DIGIT_INIT(7), \
- _PyLong_DIGIT_INIT(8), \
- _PyLong_DIGIT_INIT(9), \
- _PyLong_DIGIT_INIT(10), \
- _PyLong_DIGIT_INIT(11), \
- _PyLong_DIGIT_INIT(12), \
- _PyLong_DIGIT_INIT(13), \
- _PyLong_DIGIT_INIT(14), \
- _PyLong_DIGIT_INIT(15), \
- _PyLong_DIGIT_INIT(16), \
- _PyLong_DIGIT_INIT(17), \
- _PyLong_DIGIT_INIT(18), \
- _PyLong_DIGIT_INIT(19), \
- _PyLong_DIGIT_INIT(20), \
- _PyLong_DIGIT_INIT(21), \
- _PyLong_DIGIT_INIT(22), \
- _PyLong_DIGIT_INIT(23), \
- _PyLong_DIGIT_INIT(24), \
- _PyLong_DIGIT_INIT(25), \
- _PyLong_DIGIT_INIT(26), \
- _PyLong_DIGIT_INIT(27), \
- _PyLong_DIGIT_INIT(28), \
- _PyLong_DIGIT_INIT(29), \
- _PyLong_DIGIT_INIT(30), \
- _PyLong_DIGIT_INIT(31), \
- _PyLong_DIGIT_INIT(32), \
- _PyLong_DIGIT_INIT(33), \
- _PyLong_DIGIT_INIT(34), \
- _PyLong_DIGIT_INIT(35), \
- _PyLong_DIGIT_INIT(36), \
- _PyLong_DIGIT_INIT(37), \
- _PyLong_DIGIT_INIT(38), \
- _PyLong_DIGIT_INIT(39), \
- _PyLong_DIGIT_INIT(40), \
- _PyLong_DIGIT_INIT(41), \
- _PyLong_DIGIT_INIT(42), \
- _PyLong_DIGIT_INIT(43), \
- _PyLong_DIGIT_INIT(44), \
- _PyLong_DIGIT_INIT(45), \
- _PyLong_DIGIT_INIT(46), \
- _PyLong_DIGIT_INIT(47), \
- _PyLong_DIGIT_INIT(48), \
- _PyLong_DIGIT_INIT(49), \
- _PyLong_DIGIT_INIT(50), \
- _PyLong_DIGIT_INIT(51), \
- _PyLong_DIGIT_INIT(52), \
- _PyLong_DIGIT_INIT(53), \
- _PyLong_DIGIT_INIT(54), \
- _PyLong_DIGIT_INIT(55), \
- _PyLong_DIGIT_INIT(56), \
- _PyLong_DIGIT_INIT(57), \
- _PyLong_DIGIT_INIT(58), \
- _PyLong_DIGIT_INIT(59), \
- _PyLong_DIGIT_INIT(60), \
- _PyLong_DIGIT_INIT(61), \
- _PyLong_DIGIT_INIT(62), \
- _PyLong_DIGIT_INIT(63), \
- _PyLong_DIGIT_INIT(64), \
- _PyLong_DIGIT_INIT(65), \
- _PyLong_DIGIT_INIT(66), \
- _PyLong_DIGIT_INIT(67), \
- _PyLong_DIGIT_INIT(68), \
- _PyLong_DIGIT_INIT(69), \
- _PyLong_DIGIT_INIT(70), \
- _PyLong_DIGIT_INIT(71), \
- _PyLong_DIGIT_INIT(72), \
- _PyLong_DIGIT_INIT(73), \
- _PyLong_DIGIT_INIT(74), \
- _PyLong_DIGIT_INIT(75), \
- _PyLong_DIGIT_INIT(76), \
- _PyLong_DIGIT_INIT(77), \
- _PyLong_DIGIT_INIT(78), \
- _PyLong_DIGIT_INIT(79), \
- _PyLong_DIGIT_INIT(80), \
- _PyLong_DIGIT_INIT(81), \
- _PyLong_DIGIT_INIT(82), \
- _PyLong_DIGIT_INIT(83), \
- _PyLong_DIGIT_INIT(84), \
- _PyLong_DIGIT_INIT(85), \
- _PyLong_DIGIT_INIT(86), \
- _PyLong_DIGIT_INIT(87), \
- _PyLong_DIGIT_INIT(88), \
- _PyLong_DIGIT_INIT(89), \
- _PyLong_DIGIT_INIT(90), \
- _PyLong_DIGIT_INIT(91), \
- _PyLong_DIGIT_INIT(92), \
- _PyLong_DIGIT_INIT(93), \
- _PyLong_DIGIT_INIT(94), \
- _PyLong_DIGIT_INIT(95), \
- _PyLong_DIGIT_INIT(96), \
- _PyLong_DIGIT_INIT(97), \
- _PyLong_DIGIT_INIT(98), \
- _PyLong_DIGIT_INIT(99), \
- _PyLong_DIGIT_INIT(100), \
- _PyLong_DIGIT_INIT(101), \
- _PyLong_DIGIT_INIT(102), \
- _PyLong_DIGIT_INIT(103), \
- _PyLong_DIGIT_INIT(104), \
- _PyLong_DIGIT_INIT(105), \
- _PyLong_DIGIT_INIT(106), \
- _PyLong_DIGIT_INIT(107), \
- _PyLong_DIGIT_INIT(108), \
- _PyLong_DIGIT_INIT(109), \
- _PyLong_DIGIT_INIT(110), \
- _PyLong_DIGIT_INIT(111), \
- _PyLong_DIGIT_INIT(112), \
- _PyLong_DIGIT_INIT(113), \
- _PyLong_DIGIT_INIT(114), \
- _PyLong_DIGIT_INIT(115), \
- _PyLong_DIGIT_INIT(116), \
- _PyLong_DIGIT_INIT(117), \
- _PyLong_DIGIT_INIT(118), \
- _PyLong_DIGIT_INIT(119), \
- _PyLong_DIGIT_INIT(120), \
- _PyLong_DIGIT_INIT(121), \
- _PyLong_DIGIT_INIT(122), \
- _PyLong_DIGIT_INIT(123), \
- _PyLong_DIGIT_INIT(124), \
- _PyLong_DIGIT_INIT(125), \
- _PyLong_DIGIT_INIT(126), \
- _PyLong_DIGIT_INIT(127), \
- _PyLong_DIGIT_INIT(128), \
- _PyLong_DIGIT_INIT(129), \
- _PyLong_DIGIT_INIT(130), \
- _PyLong_DIGIT_INIT(131), \
- _PyLong_DIGIT_INIT(132), \
- _PyLong_DIGIT_INIT(133), \
- _PyLong_DIGIT_INIT(134), \
- _PyLong_DIGIT_INIT(135), \
- _PyLong_DIGIT_INIT(136), \
- _PyLong_DIGIT_INIT(137), \
- _PyLong_DIGIT_INIT(138), \
- _PyLong_DIGIT_INIT(139), \
- _PyLong_DIGIT_INIT(140), \
- _PyLong_DIGIT_INIT(141), \
- _PyLong_DIGIT_INIT(142), \
- _PyLong_DIGIT_INIT(143), \
- _PyLong_DIGIT_INIT(144), \
- _PyLong_DIGIT_INIT(145), \
- _PyLong_DIGIT_INIT(146), \
- _PyLong_DIGIT_INIT(147), \
- _PyLong_DIGIT_INIT(148), \
- _PyLong_DIGIT_INIT(149), \
- _PyLong_DIGIT_INIT(150), \
- _PyLong_DIGIT_INIT(151), \
- _PyLong_DIGIT_INIT(152), \
- _PyLong_DIGIT_INIT(153), \
- _PyLong_DIGIT_INIT(154), \
- _PyLong_DIGIT_INIT(155), \
- _PyLong_DIGIT_INIT(156), \
- _PyLong_DIGIT_INIT(157), \
- _PyLong_DIGIT_INIT(158), \
- _PyLong_DIGIT_INIT(159), \
- _PyLong_DIGIT_INIT(160), \
- _PyLong_DIGIT_INIT(161), \
- _PyLong_DIGIT_INIT(162), \
- _PyLong_DIGIT_INIT(163), \
- _PyLong_DIGIT_INIT(164), \
- _PyLong_DIGIT_INIT(165), \
- _PyLong_DIGIT_INIT(166), \
- _PyLong_DIGIT_INIT(167), \
- _PyLong_DIGIT_INIT(168), \
- _PyLong_DIGIT_INIT(169), \
- _PyLong_DIGIT_INIT(170), \
- _PyLong_DIGIT_INIT(171), \
- _PyLong_DIGIT_INIT(172), \
- _PyLong_DIGIT_INIT(173), \
- _PyLong_DIGIT_INIT(174), \
- _PyLong_DIGIT_INIT(175), \
- _PyLong_DIGIT_INIT(176), \
- _PyLong_DIGIT_INIT(177), \
- _PyLong_DIGIT_INIT(178), \
- _PyLong_DIGIT_INIT(179), \
- _PyLong_DIGIT_INIT(180), \
- _PyLong_DIGIT_INIT(181), \
- _PyLong_DIGIT_INIT(182), \
- _PyLong_DIGIT_INIT(183), \
- _PyLong_DIGIT_INIT(184), \
- _PyLong_DIGIT_INIT(185), \
- _PyLong_DIGIT_INIT(186), \
- _PyLong_DIGIT_INIT(187), \
- _PyLong_DIGIT_INIT(188), \
- _PyLong_DIGIT_INIT(189), \
- _PyLong_DIGIT_INIT(190), \
- _PyLong_DIGIT_INIT(191), \
- _PyLong_DIGIT_INIT(192), \
- _PyLong_DIGIT_INIT(193), \
- _PyLong_DIGIT_INIT(194), \
- _PyLong_DIGIT_INIT(195), \
- _PyLong_DIGIT_INIT(196), \
- _PyLong_DIGIT_INIT(197), \
- _PyLong_DIGIT_INIT(198), \
- _PyLong_DIGIT_INIT(199), \
- _PyLong_DIGIT_INIT(200), \
- _PyLong_DIGIT_INIT(201), \
- _PyLong_DIGIT_INIT(202), \
- _PyLong_DIGIT_INIT(203), \
- _PyLong_DIGIT_INIT(204), \
- _PyLong_DIGIT_INIT(205), \
- _PyLong_DIGIT_INIT(206), \
- _PyLong_DIGIT_INIT(207), \
- _PyLong_DIGIT_INIT(208), \
- _PyLong_DIGIT_INIT(209), \
- _PyLong_DIGIT_INIT(210), \
- _PyLong_DIGIT_INIT(211), \
- _PyLong_DIGIT_INIT(212), \
- _PyLong_DIGIT_INIT(213), \
- _PyLong_DIGIT_INIT(214), \
- _PyLong_DIGIT_INIT(215), \
- _PyLong_DIGIT_INIT(216), \
- _PyLong_DIGIT_INIT(217), \
- _PyLong_DIGIT_INIT(218), \
- _PyLong_DIGIT_INIT(219), \
- _PyLong_DIGIT_INIT(220), \
- _PyLong_DIGIT_INIT(221), \
- _PyLong_DIGIT_INIT(222), \
- _PyLong_DIGIT_INIT(223), \
- _PyLong_DIGIT_INIT(224), \
- _PyLong_DIGIT_INIT(225), \
- _PyLong_DIGIT_INIT(226), \
- _PyLong_DIGIT_INIT(227), \
- _PyLong_DIGIT_INIT(228), \
- _PyLong_DIGIT_INIT(229), \
- _PyLong_DIGIT_INIT(230), \
- _PyLong_DIGIT_INIT(231), \
- _PyLong_DIGIT_INIT(232), \
- _PyLong_DIGIT_INIT(233), \
- _PyLong_DIGIT_INIT(234), \
- _PyLong_DIGIT_INIT(235), \
- _PyLong_DIGIT_INIT(236), \
- _PyLong_DIGIT_INIT(237), \
- _PyLong_DIGIT_INIT(238), \
- _PyLong_DIGIT_INIT(239), \
- _PyLong_DIGIT_INIT(240), \
- _PyLong_DIGIT_INIT(241), \
- _PyLong_DIGIT_INIT(242), \
- _PyLong_DIGIT_INIT(243), \
- _PyLong_DIGIT_INIT(244), \
- _PyLong_DIGIT_INIT(245), \
- _PyLong_DIGIT_INIT(246), \
- _PyLong_DIGIT_INIT(247), \
- _PyLong_DIGIT_INIT(248), \
- _PyLong_DIGIT_INIT(249), \
- _PyLong_DIGIT_INIT(250), \
- _PyLong_DIGIT_INIT(251), \
- _PyLong_DIGIT_INIT(252), \
- _PyLong_DIGIT_INIT(253), \
- _PyLong_DIGIT_INIT(254), \
- _PyLong_DIGIT_INIT(255), \
- _PyLong_DIGIT_INIT(256), \
- }, \
- \
- .bytes_empty = _PyBytes_SIMPLE_INIT(0, 0), \
- .bytes_characters = { \
- _PyBytes_CHAR_INIT(0), \
- _PyBytes_CHAR_INIT(1), \
- _PyBytes_CHAR_INIT(2), \
- _PyBytes_CHAR_INIT(3), \
- _PyBytes_CHAR_INIT(4), \
- _PyBytes_CHAR_INIT(5), \
- _PyBytes_CHAR_INIT(6), \
- _PyBytes_CHAR_INIT(7), \
- _PyBytes_CHAR_INIT(8), \
- _PyBytes_CHAR_INIT(9), \
- _PyBytes_CHAR_INIT(10), \
- _PyBytes_CHAR_INIT(11), \
- _PyBytes_CHAR_INIT(12), \
- _PyBytes_CHAR_INIT(13), \
- _PyBytes_CHAR_INIT(14), \
- _PyBytes_CHAR_INIT(15), \
- _PyBytes_CHAR_INIT(16), \
- _PyBytes_CHAR_INIT(17), \
- _PyBytes_CHAR_INIT(18), \
- _PyBytes_CHAR_INIT(19), \
- _PyBytes_CHAR_INIT(20), \
- _PyBytes_CHAR_INIT(21), \
- _PyBytes_CHAR_INIT(22), \
- _PyBytes_CHAR_INIT(23), \
- _PyBytes_CHAR_INIT(24), \
- _PyBytes_CHAR_INIT(25), \
- _PyBytes_CHAR_INIT(26), \
- _PyBytes_CHAR_INIT(27), \
- _PyBytes_CHAR_INIT(28), \
- _PyBytes_CHAR_INIT(29), \
- _PyBytes_CHAR_INIT(30), \
- _PyBytes_CHAR_INIT(31), \
- _PyBytes_CHAR_INIT(32), \
- _PyBytes_CHAR_INIT(33), \
- _PyBytes_CHAR_INIT(34), \
- _PyBytes_CHAR_INIT(35), \
- _PyBytes_CHAR_INIT(36), \
- _PyBytes_CHAR_INIT(37), \
- _PyBytes_CHAR_INIT(38), \
- _PyBytes_CHAR_INIT(39), \
- _PyBytes_CHAR_INIT(40), \
- _PyBytes_CHAR_INIT(41), \
- _PyBytes_CHAR_INIT(42), \
- _PyBytes_CHAR_INIT(43), \
- _PyBytes_CHAR_INIT(44), \
- _PyBytes_CHAR_INIT(45), \
- _PyBytes_CHAR_INIT(46), \
- _PyBytes_CHAR_INIT(47), \
- _PyBytes_CHAR_INIT(48), \
- _PyBytes_CHAR_INIT(49), \
- _PyBytes_CHAR_INIT(50), \
- _PyBytes_CHAR_INIT(51), \
- _PyBytes_CHAR_INIT(52), \
- _PyBytes_CHAR_INIT(53), \
- _PyBytes_CHAR_INIT(54), \
- _PyBytes_CHAR_INIT(55), \
- _PyBytes_CHAR_INIT(56), \
- _PyBytes_CHAR_INIT(57), \
- _PyBytes_CHAR_INIT(58), \
- _PyBytes_CHAR_INIT(59), \
- _PyBytes_CHAR_INIT(60), \
- _PyBytes_CHAR_INIT(61), \
- _PyBytes_CHAR_INIT(62), \
- _PyBytes_CHAR_INIT(63), \
- _PyBytes_CHAR_INIT(64), \
- _PyBytes_CHAR_INIT(65), \
- _PyBytes_CHAR_INIT(66), \
- _PyBytes_CHAR_INIT(67), \
- _PyBytes_CHAR_INIT(68), \
- _PyBytes_CHAR_INIT(69), \
- _PyBytes_CHAR_INIT(70), \
- _PyBytes_CHAR_INIT(71), \
- _PyBytes_CHAR_INIT(72), \
- _PyBytes_CHAR_INIT(73), \
- _PyBytes_CHAR_INIT(74), \
- _PyBytes_CHAR_INIT(75), \
- _PyBytes_CHAR_INIT(76), \
- _PyBytes_CHAR_INIT(77), \
- _PyBytes_CHAR_INIT(78), \
- _PyBytes_CHAR_INIT(79), \
- _PyBytes_CHAR_INIT(80), \
- _PyBytes_CHAR_INIT(81), \
- _PyBytes_CHAR_INIT(82), \
- _PyBytes_CHAR_INIT(83), \
- _PyBytes_CHAR_INIT(84), \
- _PyBytes_CHAR_INIT(85), \
- _PyBytes_CHAR_INIT(86), \
- _PyBytes_CHAR_INIT(87), \
- _PyBytes_CHAR_INIT(88), \
- _PyBytes_CHAR_INIT(89), \
- _PyBytes_CHAR_INIT(90), \
- _PyBytes_CHAR_INIT(91), \
- _PyBytes_CHAR_INIT(92), \
- _PyBytes_CHAR_INIT(93), \
- _PyBytes_CHAR_INIT(94), \
- _PyBytes_CHAR_INIT(95), \
- _PyBytes_CHAR_INIT(96), \
- _PyBytes_CHAR_INIT(97), \
- _PyBytes_CHAR_INIT(98), \
- _PyBytes_CHAR_INIT(99), \
- _PyBytes_CHAR_INIT(100), \
- _PyBytes_CHAR_INIT(101), \
- _PyBytes_CHAR_INIT(102), \
- _PyBytes_CHAR_INIT(103), \
- _PyBytes_CHAR_INIT(104), \
- _PyBytes_CHAR_INIT(105), \
- _PyBytes_CHAR_INIT(106), \
- _PyBytes_CHAR_INIT(107), \
- _PyBytes_CHAR_INIT(108), \
- _PyBytes_CHAR_INIT(109), \
- _PyBytes_CHAR_INIT(110), \
- _PyBytes_CHAR_INIT(111), \
- _PyBytes_CHAR_INIT(112), \
- _PyBytes_CHAR_INIT(113), \
- _PyBytes_CHAR_INIT(114), \
- _PyBytes_CHAR_INIT(115), \
- _PyBytes_CHAR_INIT(116), \
- _PyBytes_CHAR_INIT(117), \
- _PyBytes_CHAR_INIT(118), \
- _PyBytes_CHAR_INIT(119), \
- _PyBytes_CHAR_INIT(120), \
- _PyBytes_CHAR_INIT(121), \
- _PyBytes_CHAR_INIT(122), \
- _PyBytes_CHAR_INIT(123), \
- _PyBytes_CHAR_INIT(124), \
- _PyBytes_CHAR_INIT(125), \
- _PyBytes_CHAR_INIT(126), \
- _PyBytes_CHAR_INIT(127), \
- _PyBytes_CHAR_INIT(128), \
- _PyBytes_CHAR_INIT(129), \
- _PyBytes_CHAR_INIT(130), \
- _PyBytes_CHAR_INIT(131), \
- _PyBytes_CHAR_INIT(132), \
- _PyBytes_CHAR_INIT(133), \
- _PyBytes_CHAR_INIT(134), \
- _PyBytes_CHAR_INIT(135), \
- _PyBytes_CHAR_INIT(136), \
- _PyBytes_CHAR_INIT(137), \
- _PyBytes_CHAR_INIT(138), \
- _PyBytes_CHAR_INIT(139), \
- _PyBytes_CHAR_INIT(140), \
- _PyBytes_CHAR_INIT(141), \
- _PyBytes_CHAR_INIT(142), \
- _PyBytes_CHAR_INIT(143), \
- _PyBytes_CHAR_INIT(144), \
- _PyBytes_CHAR_INIT(145), \
- _PyBytes_CHAR_INIT(146), \
- _PyBytes_CHAR_INIT(147), \
- _PyBytes_CHAR_INIT(148), \
- _PyBytes_CHAR_INIT(149), \
- _PyBytes_CHAR_INIT(150), \
- _PyBytes_CHAR_INIT(151), \
- _PyBytes_CHAR_INIT(152), \
- _PyBytes_CHAR_INIT(153), \
- _PyBytes_CHAR_INIT(154), \
- _PyBytes_CHAR_INIT(155), \
- _PyBytes_CHAR_INIT(156), \
- _PyBytes_CHAR_INIT(157), \
- _PyBytes_CHAR_INIT(158), \
- _PyBytes_CHAR_INIT(159), \
- _PyBytes_CHAR_INIT(160), \
- _PyBytes_CHAR_INIT(161), \
- _PyBytes_CHAR_INIT(162), \
- _PyBytes_CHAR_INIT(163), \
- _PyBytes_CHAR_INIT(164), \
- _PyBytes_CHAR_INIT(165), \
- _PyBytes_CHAR_INIT(166), \
- _PyBytes_CHAR_INIT(167), \
- _PyBytes_CHAR_INIT(168), \
- _PyBytes_CHAR_INIT(169), \
- _PyBytes_CHAR_INIT(170), \
- _PyBytes_CHAR_INIT(171), \
- _PyBytes_CHAR_INIT(172), \
- _PyBytes_CHAR_INIT(173), \
- _PyBytes_CHAR_INIT(174), \
- _PyBytes_CHAR_INIT(175), \
- _PyBytes_CHAR_INIT(176), \
- _PyBytes_CHAR_INIT(177), \
- _PyBytes_CHAR_INIT(178), \
- _PyBytes_CHAR_INIT(179), \
- _PyBytes_CHAR_INIT(180), \
- _PyBytes_CHAR_INIT(181), \
- _PyBytes_CHAR_INIT(182), \
- _PyBytes_CHAR_INIT(183), \
- _PyBytes_CHAR_INIT(184), \
- _PyBytes_CHAR_INIT(185), \
- _PyBytes_CHAR_INIT(186), \
- _PyBytes_CHAR_INIT(187), \
- _PyBytes_CHAR_INIT(188), \
- _PyBytes_CHAR_INIT(189), \
- _PyBytes_CHAR_INIT(190), \
- _PyBytes_CHAR_INIT(191), \
- _PyBytes_CHAR_INIT(192), \
- _PyBytes_CHAR_INIT(193), \
- _PyBytes_CHAR_INIT(194), \
- _PyBytes_CHAR_INIT(195), \
- _PyBytes_CHAR_INIT(196), \
- _PyBytes_CHAR_INIT(197), \
- _PyBytes_CHAR_INIT(198), \
- _PyBytes_CHAR_INIT(199), \
- _PyBytes_CHAR_INIT(200), \
- _PyBytes_CHAR_INIT(201), \
- _PyBytes_CHAR_INIT(202), \
- _PyBytes_CHAR_INIT(203), \
- _PyBytes_CHAR_INIT(204), \
- _PyBytes_CHAR_INIT(205), \
- _PyBytes_CHAR_INIT(206), \
- _PyBytes_CHAR_INIT(207), \
- _PyBytes_CHAR_INIT(208), \
- _PyBytes_CHAR_INIT(209), \
- _PyBytes_CHAR_INIT(210), \
- _PyBytes_CHAR_INIT(211), \
- _PyBytes_CHAR_INIT(212), \
- _PyBytes_CHAR_INIT(213), \
- _PyBytes_CHAR_INIT(214), \
- _PyBytes_CHAR_INIT(215), \
- _PyBytes_CHAR_INIT(216), \
- _PyBytes_CHAR_INIT(217), \
- _PyBytes_CHAR_INIT(218), \
- _PyBytes_CHAR_INIT(219), \
- _PyBytes_CHAR_INIT(220), \
- _PyBytes_CHAR_INIT(221), \
- _PyBytes_CHAR_INIT(222), \
- _PyBytes_CHAR_INIT(223), \
- _PyBytes_CHAR_INIT(224), \
- _PyBytes_CHAR_INIT(225), \
- _PyBytes_CHAR_INIT(226), \
- _PyBytes_CHAR_INIT(227), \
- _PyBytes_CHAR_INIT(228), \
- _PyBytes_CHAR_INIT(229), \
- _PyBytes_CHAR_INIT(230), \
- _PyBytes_CHAR_INIT(231), \
- _PyBytes_CHAR_INIT(232), \
- _PyBytes_CHAR_INIT(233), \
- _PyBytes_CHAR_INIT(234), \
- _PyBytes_CHAR_INIT(235), \
- _PyBytes_CHAR_INIT(236), \
- _PyBytes_CHAR_INIT(237), \
- _PyBytes_CHAR_INIT(238), \
- _PyBytes_CHAR_INIT(239), \
- _PyBytes_CHAR_INIT(240), \
- _PyBytes_CHAR_INIT(241), \
- _PyBytes_CHAR_INIT(242), \
- _PyBytes_CHAR_INIT(243), \
- _PyBytes_CHAR_INIT(244), \
- _PyBytes_CHAR_INIT(245), \
- _PyBytes_CHAR_INIT(246), \
- _PyBytes_CHAR_INIT(247), \
- _PyBytes_CHAR_INIT(248), \
- _PyBytes_CHAR_INIT(249), \
- _PyBytes_CHAR_INIT(250), \
- _PyBytes_CHAR_INIT(251), \
- _PyBytes_CHAR_INIT(252), \
- _PyBytes_CHAR_INIT(253), \
- _PyBytes_CHAR_INIT(254), \
- _PyBytes_CHAR_INIT(255), \
- }, \
- \
- .strings = { \
- .literals = { \
- INIT_STR(anon_dictcomp, "<dictcomp>"), \
- INIT_STR(anon_genexpr, "<genexpr>"), \
- INIT_STR(anon_lambda, "<lambda>"), \
- INIT_STR(anon_listcomp, "<listcomp>"), \
- INIT_STR(anon_module, "<module>"), \
- INIT_STR(anon_setcomp, "<setcomp>"), \
- INIT_STR(anon_string, "<string>"), \
- INIT_STR(anon_unknown, "<unknown>"), \
- INIT_STR(close_br, "}"), \
- INIT_STR(comma_sep, ", "), \
- INIT_STR(dbl_close_br, "}}"), \
- INIT_STR(dbl_open_br, "{{"), \
- INIT_STR(dbl_percent, "%%"), \
- INIT_STR(dot, "."), \
- INIT_STR(dot_locals, ".<locals>"), \
- INIT_STR(empty, ""), \
- INIT_STR(list_err, "list index out of range"), \
- INIT_STR(newline, "\n"), \
- INIT_STR(open_br, "{"), \
- INIT_STR(percent, "%"), \
- INIT_STR(utf_8, "utf-8"), \
- }, \
- .identifiers = { \
- INIT_ID(False), \
- INIT_ID(Py_Repr), \
- INIT_ID(TextIOWrapper), \
- INIT_ID(True), \
- INIT_ID(WarningMessage), \
- INIT_ID(_), \
- INIT_ID(__IOBase_closed), \
- INIT_ID(__abc_tpflags__), \
- INIT_ID(__abs__), \
- INIT_ID(__abstractmethods__), \
- INIT_ID(__add__), \
- INIT_ID(__aenter__), \
- INIT_ID(__aexit__), \
- INIT_ID(__aiter__), \
- INIT_ID(__all__), \
- INIT_ID(__and__), \
- INIT_ID(__anext__), \
- INIT_ID(__annotations__), \
- INIT_ID(__args__), \
- INIT_ID(__await__), \
- INIT_ID(__bases__), \
- INIT_ID(__bool__), \
- INIT_ID(__build_class__), \
- INIT_ID(__builtins__), \
- INIT_ID(__bytes__), \
- INIT_ID(__call__), \
- INIT_ID(__cantrace__), \
- INIT_ID(__class__), \
- INIT_ID(__class_getitem__), \
- INIT_ID(__classcell__), \
- INIT_ID(__complex__), \
- INIT_ID(__contains__), \
- INIT_ID(__copy__), \
- INIT_ID(__del__), \
- INIT_ID(__delattr__), \
- INIT_ID(__delete__), \
- INIT_ID(__delitem__), \
- INIT_ID(__dict__), \
- INIT_ID(__dir__), \
- INIT_ID(__divmod__), \
- INIT_ID(__doc__), \
- INIT_ID(__enter__), \
- INIT_ID(__eq__), \
- INIT_ID(__exit__), \
- INIT_ID(__file__), \
- INIT_ID(__float__), \
- INIT_ID(__floordiv__), \
- INIT_ID(__format__), \
- INIT_ID(__fspath__), \
- INIT_ID(__ge__), \
- INIT_ID(__get__), \
- INIT_ID(__getattr__), \
- INIT_ID(__getattribute__), \
- INIT_ID(__getinitargs__), \
- INIT_ID(__getitem__), \
- INIT_ID(__getnewargs__), \
- INIT_ID(__getnewargs_ex__), \
- INIT_ID(__getstate__), \
- INIT_ID(__gt__), \
- INIT_ID(__hash__), \
- INIT_ID(__iadd__), \
- INIT_ID(__iand__), \
- INIT_ID(__ifloordiv__), \
- INIT_ID(__ilshift__), \
- INIT_ID(__imatmul__), \
- INIT_ID(__imod__), \
- INIT_ID(__import__), \
- INIT_ID(__imul__), \
- INIT_ID(__index__), \
- INIT_ID(__init__), \
- INIT_ID(__init_subclass__), \
- INIT_ID(__instancecheck__), \
- INIT_ID(__int__), \
- INIT_ID(__invert__), \
- INIT_ID(__ior__), \
- INIT_ID(__ipow__), \
- INIT_ID(__irshift__), \
- INIT_ID(__isabstractmethod__), \
- INIT_ID(__isub__), \
- INIT_ID(__iter__), \
- INIT_ID(__itruediv__), \
- INIT_ID(__ixor__), \
- INIT_ID(__le__), \
- INIT_ID(__len__), \
- INIT_ID(__length_hint__), \
- INIT_ID(__lltrace__), \
- INIT_ID(__loader__), \
- INIT_ID(__lshift__), \
- INIT_ID(__lt__), \
- INIT_ID(__main__), \
- INIT_ID(__matmul__), \
- INIT_ID(__missing__), \
- INIT_ID(__mod__), \
- INIT_ID(__module__), \
- INIT_ID(__mro_entries__), \
- INIT_ID(__mul__), \
- INIT_ID(__name__), \
- INIT_ID(__ne__), \
- INIT_ID(__neg__), \
- INIT_ID(__new__), \
- INIT_ID(__newobj__), \
- INIT_ID(__newobj_ex__), \
- INIT_ID(__next__), \
- INIT_ID(__notes__), \
- INIT_ID(__or__), \
- INIT_ID(__orig_class__), \
- INIT_ID(__origin__), \
- INIT_ID(__package__), \
- INIT_ID(__parameters__), \
- INIT_ID(__path__), \
- INIT_ID(__pos__), \
- INIT_ID(__pow__), \
- INIT_ID(__prepare__), \
- INIT_ID(__qualname__), \
- INIT_ID(__radd__), \
- INIT_ID(__rand__), \
- INIT_ID(__rdivmod__), \
- INIT_ID(__reduce__), \
- INIT_ID(__reduce_ex__), \
- INIT_ID(__repr__), \
- INIT_ID(__reversed__), \
- INIT_ID(__rfloordiv__), \
- INIT_ID(__rlshift__), \
- INIT_ID(__rmatmul__), \
- INIT_ID(__rmod__), \
- INIT_ID(__rmul__), \
- INIT_ID(__ror__), \
- INIT_ID(__round__), \
- INIT_ID(__rpow__), \
- INIT_ID(__rrshift__), \
- INIT_ID(__rshift__), \
- INIT_ID(__rsub__), \
- INIT_ID(__rtruediv__), \
- INIT_ID(__rxor__), \
- INIT_ID(__set__), \
- INIT_ID(__set_name__), \
- INIT_ID(__setattr__), \
- INIT_ID(__setitem__), \
- INIT_ID(__setstate__), \
- INIT_ID(__sizeof__), \
- INIT_ID(__slotnames__), \
- INIT_ID(__slots__), \
- INIT_ID(__spec__), \
- INIT_ID(__str__), \
- INIT_ID(__sub__), \
- INIT_ID(__subclasscheck__), \
- INIT_ID(__subclasshook__), \
- INIT_ID(__truediv__), \
- INIT_ID(__trunc__), \
- INIT_ID(__typing_is_unpacked_typevartuple__), \
- INIT_ID(__typing_prepare_subst__), \
- INIT_ID(__typing_subst__), \
- INIT_ID(__typing_unpacked_tuple_args__), \
- INIT_ID(__warningregistry__), \
- INIT_ID(__weakref__), \
- INIT_ID(__xor__), \
- INIT_ID(_abc_impl), \
- INIT_ID(_annotation), \
- INIT_ID(_blksize), \
- INIT_ID(_bootstrap), \
- INIT_ID(_dealloc_warn), \
- INIT_ID(_finalizing), \
- INIT_ID(_find_and_load), \
- INIT_ID(_fix_up_module), \
- INIT_ID(_get_sourcefile), \
- INIT_ID(_handle_fromlist), \
- INIT_ID(_initializing), \
- INIT_ID(_is_text_encoding), \
- INIT_ID(_lock_unlock_module), \
- INIT_ID(_showwarnmsg), \
- INIT_ID(_shutdown), \
- INIT_ID(_slotnames), \
- INIT_ID(_strptime_time), \
- INIT_ID(_uninitialized_submodules), \
- INIT_ID(_warn_unawaited_coroutine), \
- INIT_ID(_xoptions), \
- INIT_ID(add), \
- INIT_ID(append), \
- INIT_ID(big), \
- INIT_ID(buffer), \
- INIT_ID(builtins), \
- INIT_ID(c_call), \
- INIT_ID(c_exception), \
- INIT_ID(c_return), \
- INIT_ID(call), \
- INIT_ID(clear), \
- INIT_ID(close), \
- INIT_ID(closed), \
- INIT_ID(code), \
- INIT_ID(copy), \
- INIT_ID(copyreg), \
- INIT_ID(decode), \
- INIT_ID(default), \
- INIT_ID(defaultaction), \
- INIT_ID(dictcomp), \
- INIT_ID(difference_update), \
- INIT_ID(dispatch_table), \
- INIT_ID(displayhook), \
- INIT_ID(enable), \
- INIT_ID(encode), \
- INIT_ID(encoding), \
- INIT_ID(end_lineno), \
- INIT_ID(end_offset), \
- INIT_ID(errors), \
- INIT_ID(excepthook), \
- INIT_ID(exception), \
- INIT_ID(extend), \
- INIT_ID(filename), \
- INIT_ID(fileno), \
- INIT_ID(fillvalue), \
- INIT_ID(filters), \
- INIT_ID(find_class), \
- INIT_ID(flush), \
- INIT_ID(genexpr), \
- INIT_ID(get), \
- INIT_ID(get_source), \
- INIT_ID(getattr), \
- INIT_ID(getstate), \
- INIT_ID(ignore), \
- INIT_ID(importlib), \
- INIT_ID(inf), \
- INIT_ID(intersection), \
- INIT_ID(isatty), \
- INIT_ID(isinstance), \
- INIT_ID(items), \
- INIT_ID(iter), \
- INIT_ID(join), \
- INIT_ID(keys), \
- INIT_ID(lambda), \
- INIT_ID(last_traceback), \
- INIT_ID(last_type), \
- INIT_ID(last_value), \
- INIT_ID(latin1), \
- INIT_ID(len), \
- INIT_ID(line), \
- INIT_ID(lineno), \
- INIT_ID(listcomp), \
- INIT_ID(little), \
- INIT_ID(locale), \
- INIT_ID(match), \
- INIT_ID(metaclass), \
- INIT_ID(mode), \
- INIT_ID(modules), \
- INIT_ID(mro), \
- INIT_ID(msg), \
- INIT_ID(n_fields), \
- INIT_ID(n_sequence_fields), \
- INIT_ID(n_unnamed_fields), \
- INIT_ID(name), \
- INIT_ID(newlines), \
- INIT_ID(next), \
- INIT_ID(obj), \
- INIT_ID(offset), \
- INIT_ID(onceregistry), \
- INIT_ID(opcode), \
- INIT_ID(open), \
- INIT_ID(parent), \
- INIT_ID(partial), \
- INIT_ID(path), \
- INIT_ID(peek), \
- INIT_ID(persistent_id), \
- INIT_ID(persistent_load), \
- INIT_ID(print_file_and_line), \
- INIT_ID(ps1), \
- INIT_ID(ps2), \
- INIT_ID(raw), \
- INIT_ID(read), \
- INIT_ID(read1), \
- INIT_ID(readable), \
- INIT_ID(readall), \
- INIT_ID(readinto), \
- INIT_ID(readinto1), \
- INIT_ID(readline), \
- INIT_ID(reducer_override), \
- INIT_ID(reload), \
- INIT_ID(replace), \
- INIT_ID(reset), \
- INIT_ID(return), \
- INIT_ID(reversed), \
- INIT_ID(seek), \
- INIT_ID(seekable), \
- INIT_ID(send), \
- INIT_ID(setcomp), \
- INIT_ID(setstate), \
- INIT_ID(sort), \
- INIT_ID(stderr), \
- INIT_ID(stdin), \
- INIT_ID(stdout), \
- INIT_ID(strict), \
- INIT_ID(symmetric_difference_update), \
- INIT_ID(tell), \
- INIT_ID(text), \
- INIT_ID(threading), \
- INIT_ID(throw), \
- INIT_ID(top), \
- INIT_ID(truncate), \
- INIT_ID(unraisablehook), \
- INIT_ID(values), \
- INIT_ID(version), \
- INIT_ID(warnings), \
- INIT_ID(warnoptions), \
- INIT_ID(writable), \
- INIT_ID(write), \
- INIT_ID(zipimporter), \
- }, \
- .ascii = { \
- _PyASCIIObject_INIT("\x00"), \
- _PyASCIIObject_INIT("\x01"), \
- _PyASCIIObject_INIT("\x02"), \
- _PyASCIIObject_INIT("\x03"), \
- _PyASCIIObject_INIT("\x04"), \
- _PyASCIIObject_INIT("\x05"), \
- _PyASCIIObject_INIT("\x06"), \
- _PyASCIIObject_INIT("\x07"), \
- _PyASCIIObject_INIT("\x08"), \
- _PyASCIIObject_INIT("\x09"), \
- _PyASCIIObject_INIT("\x0a"), \
- _PyASCIIObject_INIT("\x0b"), \
- _PyASCIIObject_INIT("\x0c"), \
- _PyASCIIObject_INIT("\x0d"), \
- _PyASCIIObject_INIT("\x0e"), \
- _PyASCIIObject_INIT("\x0f"), \
- _PyASCIIObject_INIT("\x10"), \
- _PyASCIIObject_INIT("\x11"), \
- _PyASCIIObject_INIT("\x12"), \
- _PyASCIIObject_INIT("\x13"), \
- _PyASCIIObject_INIT("\x14"), \
- _PyASCIIObject_INIT("\x15"), \
- _PyASCIIObject_INIT("\x16"), \
- _PyASCIIObject_INIT("\x17"), \
- _PyASCIIObject_INIT("\x18"), \
- _PyASCIIObject_INIT("\x19"), \
- _PyASCIIObject_INIT("\x1a"), \
- _PyASCIIObject_INIT("\x1b"), \
- _PyASCIIObject_INIT("\x1c"), \
- _PyASCIIObject_INIT("\x1d"), \
- _PyASCIIObject_INIT("\x1e"), \
- _PyASCIIObject_INIT("\x1f"), \
- _PyASCIIObject_INIT("\x20"), \
- _PyASCIIObject_INIT("\x21"), \
- _PyASCIIObject_INIT("\x22"), \
- _PyASCIIObject_INIT("\x23"), \
- _PyASCIIObject_INIT("\x24"), \
- _PyASCIIObject_INIT("\x25"), \
- _PyASCIIObject_INIT("\x26"), \
- _PyASCIIObject_INIT("\x27"), \
- _PyASCIIObject_INIT("\x28"), \
- _PyASCIIObject_INIT("\x29"), \
- _PyASCIIObject_INIT("\x2a"), \
- _PyASCIIObject_INIT("\x2b"), \
- _PyASCIIObject_INIT("\x2c"), \
- _PyASCIIObject_INIT("\x2d"), \
- _PyASCIIObject_INIT("\x2e"), \
- _PyASCIIObject_INIT("\x2f"), \
- _PyASCIIObject_INIT("\x30"), \
- _PyASCIIObject_INIT("\x31"), \
- _PyASCIIObject_INIT("\x32"), \
- _PyASCIIObject_INIT("\x33"), \
- _PyASCIIObject_INIT("\x34"), \
- _PyASCIIObject_INIT("\x35"), \
- _PyASCIIObject_INIT("\x36"), \
- _PyASCIIObject_INIT("\x37"), \
- _PyASCIIObject_INIT("\x38"), \
- _PyASCIIObject_INIT("\x39"), \
- _PyASCIIObject_INIT("\x3a"), \
- _PyASCIIObject_INIT("\x3b"), \
- _PyASCIIObject_INIT("\x3c"), \
- _PyASCIIObject_INIT("\x3d"), \
- _PyASCIIObject_INIT("\x3e"), \
- _PyASCIIObject_INIT("\x3f"), \
- _PyASCIIObject_INIT("\x40"), \
- _PyASCIIObject_INIT("\x41"), \
- _PyASCIIObject_INIT("\x42"), \
- _PyASCIIObject_INIT("\x43"), \
- _PyASCIIObject_INIT("\x44"), \
- _PyASCIIObject_INIT("\x45"), \
- _PyASCIIObject_INIT("\x46"), \
- _PyASCIIObject_INIT("\x47"), \
- _PyASCIIObject_INIT("\x48"), \
- _PyASCIIObject_INIT("\x49"), \
- _PyASCIIObject_INIT("\x4a"), \
- _PyASCIIObject_INIT("\x4b"), \
- _PyASCIIObject_INIT("\x4c"), \
- _PyASCIIObject_INIT("\x4d"), \
- _PyASCIIObject_INIT("\x4e"), \
- _PyASCIIObject_INIT("\x4f"), \
- _PyASCIIObject_INIT("\x50"), \
- _PyASCIIObject_INIT("\x51"), \
- _PyASCIIObject_INIT("\x52"), \
- _PyASCIIObject_INIT("\x53"), \
- _PyASCIIObject_INIT("\x54"), \
- _PyASCIIObject_INIT("\x55"), \
- _PyASCIIObject_INIT("\x56"), \
- _PyASCIIObject_INIT("\x57"), \
- _PyASCIIObject_INIT("\x58"), \
- _PyASCIIObject_INIT("\x59"), \
- _PyASCIIObject_INIT("\x5a"), \
- _PyASCIIObject_INIT("\x5b"), \
- _PyASCIIObject_INIT("\x5c"), \
- _PyASCIIObject_INIT("\x5d"), \
- _PyASCIIObject_INIT("\x5e"), \
- _PyASCIIObject_INIT("\x5f"), \
- _PyASCIIObject_INIT("\x60"), \
- _PyASCIIObject_INIT("\x61"), \
- _PyASCIIObject_INIT("\x62"), \
- _PyASCIIObject_INIT("\x63"), \
- _PyASCIIObject_INIT("\x64"), \
- _PyASCIIObject_INIT("\x65"), \
- _PyASCIIObject_INIT("\x66"), \
- _PyASCIIObject_INIT("\x67"), \
- _PyASCIIObject_INIT("\x68"), \
- _PyASCIIObject_INIT("\x69"), \
- _PyASCIIObject_INIT("\x6a"), \
- _PyASCIIObject_INIT("\x6b"), \
- _PyASCIIObject_INIT("\x6c"), \
- _PyASCIIObject_INIT("\x6d"), \
- _PyASCIIObject_INIT("\x6e"), \
- _PyASCIIObject_INIT("\x6f"), \
- _PyASCIIObject_INIT("\x70"), \
- _PyASCIIObject_INIT("\x71"), \
- _PyASCIIObject_INIT("\x72"), \
- _PyASCIIObject_INIT("\x73"), \
- _PyASCIIObject_INIT("\x74"), \
- _PyASCIIObject_INIT("\x75"), \
- _PyASCIIObject_INIT("\x76"), \
- _PyASCIIObject_INIT("\x77"), \
- _PyASCIIObject_INIT("\x78"), \
- _PyASCIIObject_INIT("\x79"), \
- _PyASCIIObject_INIT("\x7a"), \
- _PyASCIIObject_INIT("\x7b"), \
- _PyASCIIObject_INIT("\x7c"), \
- _PyASCIIObject_INIT("\x7d"), \
- _PyASCIIObject_INIT("\x7e"), \
- _PyASCIIObject_INIT("\x7f"), \
- }, \
- .latin1 = { \
- _PyUnicode_LATIN1_INIT("\x80"), \
- _PyUnicode_LATIN1_INIT("\x81"), \
- _PyUnicode_LATIN1_INIT("\x82"), \
- _PyUnicode_LATIN1_INIT("\x83"), \
- _PyUnicode_LATIN1_INIT("\x84"), \
- _PyUnicode_LATIN1_INIT("\x85"), \
- _PyUnicode_LATIN1_INIT("\x86"), \
- _PyUnicode_LATIN1_INIT("\x87"), \
- _PyUnicode_LATIN1_INIT("\x88"), \
- _PyUnicode_LATIN1_INIT("\x89"), \
- _PyUnicode_LATIN1_INIT("\x8a"), \
- _PyUnicode_LATIN1_INIT("\x8b"), \
- _PyUnicode_LATIN1_INIT("\x8c"), \
- _PyUnicode_LATIN1_INIT("\x8d"), \
- _PyUnicode_LATIN1_INIT("\x8e"), \
- _PyUnicode_LATIN1_INIT("\x8f"), \
- _PyUnicode_LATIN1_INIT("\x90"), \
- _PyUnicode_LATIN1_INIT("\x91"), \
- _PyUnicode_LATIN1_INIT("\x92"), \
- _PyUnicode_LATIN1_INIT("\x93"), \
- _PyUnicode_LATIN1_INIT("\x94"), \
- _PyUnicode_LATIN1_INIT("\x95"), \
- _PyUnicode_LATIN1_INIT("\x96"), \
- _PyUnicode_LATIN1_INIT("\x97"), \
- _PyUnicode_LATIN1_INIT("\x98"), \
- _PyUnicode_LATIN1_INIT("\x99"), \
- _PyUnicode_LATIN1_INIT("\x9a"), \
- _PyUnicode_LATIN1_INIT("\x9b"), \
- _PyUnicode_LATIN1_INIT("\x9c"), \
- _PyUnicode_LATIN1_INIT("\x9d"), \
- _PyUnicode_LATIN1_INIT("\x9e"), \
- _PyUnicode_LATIN1_INIT("\x9f"), \
- _PyUnicode_LATIN1_INIT("\xa0"), \
- _PyUnicode_LATIN1_INIT("\xa1"), \
- _PyUnicode_LATIN1_INIT("\xa2"), \
- _PyUnicode_LATIN1_INIT("\xa3"), \
- _PyUnicode_LATIN1_INIT("\xa4"), \
- _PyUnicode_LATIN1_INIT("\xa5"), \
- _PyUnicode_LATIN1_INIT("\xa6"), \
- _PyUnicode_LATIN1_INIT("\xa7"), \
- _PyUnicode_LATIN1_INIT("\xa8"), \
- _PyUnicode_LATIN1_INIT("\xa9"), \
- _PyUnicode_LATIN1_INIT("\xaa"), \
- _PyUnicode_LATIN1_INIT("\xab"), \
- _PyUnicode_LATIN1_INIT("\xac"), \
- _PyUnicode_LATIN1_INIT("\xad"), \
- _PyUnicode_LATIN1_INIT("\xae"), \
- _PyUnicode_LATIN1_INIT("\xaf"), \
- _PyUnicode_LATIN1_INIT("\xb0"), \
- _PyUnicode_LATIN1_INIT("\xb1"), \
- _PyUnicode_LATIN1_INIT("\xb2"), \
- _PyUnicode_LATIN1_INIT("\xb3"), \
- _PyUnicode_LATIN1_INIT("\xb4"), \
- _PyUnicode_LATIN1_INIT("\xb5"), \
- _PyUnicode_LATIN1_INIT("\xb6"), \
- _PyUnicode_LATIN1_INIT("\xb7"), \
- _PyUnicode_LATIN1_INIT("\xb8"), \
- _PyUnicode_LATIN1_INIT("\xb9"), \
- _PyUnicode_LATIN1_INIT("\xba"), \
- _PyUnicode_LATIN1_INIT("\xbb"), \
- _PyUnicode_LATIN1_INIT("\xbc"), \
- _PyUnicode_LATIN1_INIT("\xbd"), \
- _PyUnicode_LATIN1_INIT("\xbe"), \
- _PyUnicode_LATIN1_INIT("\xbf"), \
- _PyUnicode_LATIN1_INIT("\xc0"), \
- _PyUnicode_LATIN1_INIT("\xc1"), \
- _PyUnicode_LATIN1_INIT("\xc2"), \
- _PyUnicode_LATIN1_INIT("\xc3"), \
- _PyUnicode_LATIN1_INIT("\xc4"), \
- _PyUnicode_LATIN1_INIT("\xc5"), \
- _PyUnicode_LATIN1_INIT("\xc6"), \
- _PyUnicode_LATIN1_INIT("\xc7"), \
- _PyUnicode_LATIN1_INIT("\xc8"), \
- _PyUnicode_LATIN1_INIT("\xc9"), \
- _PyUnicode_LATIN1_INIT("\xca"), \
- _PyUnicode_LATIN1_INIT("\xcb"), \
- _PyUnicode_LATIN1_INIT("\xcc"), \
- _PyUnicode_LATIN1_INIT("\xcd"), \
- _PyUnicode_LATIN1_INIT("\xce"), \
- _PyUnicode_LATIN1_INIT("\xcf"), \
- _PyUnicode_LATIN1_INIT("\xd0"), \
- _PyUnicode_LATIN1_INIT("\xd1"), \
- _PyUnicode_LATIN1_INIT("\xd2"), \
- _PyUnicode_LATIN1_INIT("\xd3"), \
- _PyUnicode_LATIN1_INIT("\xd4"), \
- _PyUnicode_LATIN1_INIT("\xd5"), \
- _PyUnicode_LATIN1_INIT("\xd6"), \
- _PyUnicode_LATIN1_INIT("\xd7"), \
- _PyUnicode_LATIN1_INIT("\xd8"), \
- _PyUnicode_LATIN1_INIT("\xd9"), \
- _PyUnicode_LATIN1_INIT("\xda"), \
- _PyUnicode_LATIN1_INIT("\xdb"), \
- _PyUnicode_LATIN1_INIT("\xdc"), \
- _PyUnicode_LATIN1_INIT("\xdd"), \
- _PyUnicode_LATIN1_INIT("\xde"), \
- _PyUnicode_LATIN1_INIT("\xdf"), \
- _PyUnicode_LATIN1_INIT("\xe0"), \
- _PyUnicode_LATIN1_INIT("\xe1"), \
- _PyUnicode_LATIN1_INIT("\xe2"), \
- _PyUnicode_LATIN1_INIT("\xe3"), \
- _PyUnicode_LATIN1_INIT("\xe4"), \
- _PyUnicode_LATIN1_INIT("\xe5"), \
- _PyUnicode_LATIN1_INIT("\xe6"), \
- _PyUnicode_LATIN1_INIT("\xe7"), \
- _PyUnicode_LATIN1_INIT("\xe8"), \
- _PyUnicode_LATIN1_INIT("\xe9"), \
- _PyUnicode_LATIN1_INIT("\xea"), \
- _PyUnicode_LATIN1_INIT("\xeb"), \
- _PyUnicode_LATIN1_INIT("\xec"), \
- _PyUnicode_LATIN1_INIT("\xed"), \
- _PyUnicode_LATIN1_INIT("\xee"), \
- _PyUnicode_LATIN1_INIT("\xef"), \
- _PyUnicode_LATIN1_INIT("\xf0"), \
- _PyUnicode_LATIN1_INIT("\xf1"), \
- _PyUnicode_LATIN1_INIT("\xf2"), \
- _PyUnicode_LATIN1_INIT("\xf3"), \
- _PyUnicode_LATIN1_INIT("\xf4"), \
- _PyUnicode_LATIN1_INIT("\xf5"), \
- _PyUnicode_LATIN1_INIT("\xf6"), \
- _PyUnicode_LATIN1_INIT("\xf7"), \
- _PyUnicode_LATIN1_INIT("\xf8"), \
- _PyUnicode_LATIN1_INIT("\xf9"), \
- _PyUnicode_LATIN1_INIT("\xfa"), \
- _PyUnicode_LATIN1_INIT("\xfb"), \
- _PyUnicode_LATIN1_INIT("\xfc"), \
- _PyUnicode_LATIN1_INIT("\xfd"), \
- _PyUnicode_LATIN1_INIT("\xfe"), \
- _PyUnicode_LATIN1_INIT("\xff"), \
- }, \
- }, \
- \
- .tuple_empty = { \
- .ob_base = _PyVarObject_IMMORTAL_INIT(&PyTuple_Type, 0) \
- }, \
- }, \
-}
-/* End auto-generated code */
-
+#include "pycore_runtime_init_generated.h"
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/internal/pycore_runtime_init_generated.h b/contrib/tools/python3/src/Include/internal/pycore_runtime_init_generated.h
new file mode 100644
index 0000000000..07f237b290
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_runtime_init_generated.h
@@ -0,0 +1,1525 @@
+#ifndef Py_INTERNAL_RUNTIME_INIT_GENERATED_H
+#define Py_INTERNAL_RUNTIME_INIT_GENERATED_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+/* The following is auto-generated by Tools/build/generate_global_objects.py. */
+#define _Py_small_ints_INIT { \
+ _PyLong_DIGIT_INIT(-5), \
+ _PyLong_DIGIT_INIT(-4), \
+ _PyLong_DIGIT_INIT(-3), \
+ _PyLong_DIGIT_INIT(-2), \
+ _PyLong_DIGIT_INIT(-1), \
+ _PyLong_DIGIT_INIT(0), \
+ _PyLong_DIGIT_INIT(1), \
+ _PyLong_DIGIT_INIT(2), \
+ _PyLong_DIGIT_INIT(3), \
+ _PyLong_DIGIT_INIT(4), \
+ _PyLong_DIGIT_INIT(5), \
+ _PyLong_DIGIT_INIT(6), \
+ _PyLong_DIGIT_INIT(7), \
+ _PyLong_DIGIT_INIT(8), \
+ _PyLong_DIGIT_INIT(9), \
+ _PyLong_DIGIT_INIT(10), \
+ _PyLong_DIGIT_INIT(11), \
+ _PyLong_DIGIT_INIT(12), \
+ _PyLong_DIGIT_INIT(13), \
+ _PyLong_DIGIT_INIT(14), \
+ _PyLong_DIGIT_INIT(15), \
+ _PyLong_DIGIT_INIT(16), \
+ _PyLong_DIGIT_INIT(17), \
+ _PyLong_DIGIT_INIT(18), \
+ _PyLong_DIGIT_INIT(19), \
+ _PyLong_DIGIT_INIT(20), \
+ _PyLong_DIGIT_INIT(21), \
+ _PyLong_DIGIT_INIT(22), \
+ _PyLong_DIGIT_INIT(23), \
+ _PyLong_DIGIT_INIT(24), \
+ _PyLong_DIGIT_INIT(25), \
+ _PyLong_DIGIT_INIT(26), \
+ _PyLong_DIGIT_INIT(27), \
+ _PyLong_DIGIT_INIT(28), \
+ _PyLong_DIGIT_INIT(29), \
+ _PyLong_DIGIT_INIT(30), \
+ _PyLong_DIGIT_INIT(31), \
+ _PyLong_DIGIT_INIT(32), \
+ _PyLong_DIGIT_INIT(33), \
+ _PyLong_DIGIT_INIT(34), \
+ _PyLong_DIGIT_INIT(35), \
+ _PyLong_DIGIT_INIT(36), \
+ _PyLong_DIGIT_INIT(37), \
+ _PyLong_DIGIT_INIT(38), \
+ _PyLong_DIGIT_INIT(39), \
+ _PyLong_DIGIT_INIT(40), \
+ _PyLong_DIGIT_INIT(41), \
+ _PyLong_DIGIT_INIT(42), \
+ _PyLong_DIGIT_INIT(43), \
+ _PyLong_DIGIT_INIT(44), \
+ _PyLong_DIGIT_INIT(45), \
+ _PyLong_DIGIT_INIT(46), \
+ _PyLong_DIGIT_INIT(47), \
+ _PyLong_DIGIT_INIT(48), \
+ _PyLong_DIGIT_INIT(49), \
+ _PyLong_DIGIT_INIT(50), \
+ _PyLong_DIGIT_INIT(51), \
+ _PyLong_DIGIT_INIT(52), \
+ _PyLong_DIGIT_INIT(53), \
+ _PyLong_DIGIT_INIT(54), \
+ _PyLong_DIGIT_INIT(55), \
+ _PyLong_DIGIT_INIT(56), \
+ _PyLong_DIGIT_INIT(57), \
+ _PyLong_DIGIT_INIT(58), \
+ _PyLong_DIGIT_INIT(59), \
+ _PyLong_DIGIT_INIT(60), \
+ _PyLong_DIGIT_INIT(61), \
+ _PyLong_DIGIT_INIT(62), \
+ _PyLong_DIGIT_INIT(63), \
+ _PyLong_DIGIT_INIT(64), \
+ _PyLong_DIGIT_INIT(65), \
+ _PyLong_DIGIT_INIT(66), \
+ _PyLong_DIGIT_INIT(67), \
+ _PyLong_DIGIT_INIT(68), \
+ _PyLong_DIGIT_INIT(69), \
+ _PyLong_DIGIT_INIT(70), \
+ _PyLong_DIGIT_INIT(71), \
+ _PyLong_DIGIT_INIT(72), \
+ _PyLong_DIGIT_INIT(73), \
+ _PyLong_DIGIT_INIT(74), \
+ _PyLong_DIGIT_INIT(75), \
+ _PyLong_DIGIT_INIT(76), \
+ _PyLong_DIGIT_INIT(77), \
+ _PyLong_DIGIT_INIT(78), \
+ _PyLong_DIGIT_INIT(79), \
+ _PyLong_DIGIT_INIT(80), \
+ _PyLong_DIGIT_INIT(81), \
+ _PyLong_DIGIT_INIT(82), \
+ _PyLong_DIGIT_INIT(83), \
+ _PyLong_DIGIT_INIT(84), \
+ _PyLong_DIGIT_INIT(85), \
+ _PyLong_DIGIT_INIT(86), \
+ _PyLong_DIGIT_INIT(87), \
+ _PyLong_DIGIT_INIT(88), \
+ _PyLong_DIGIT_INIT(89), \
+ _PyLong_DIGIT_INIT(90), \
+ _PyLong_DIGIT_INIT(91), \
+ _PyLong_DIGIT_INIT(92), \
+ _PyLong_DIGIT_INIT(93), \
+ _PyLong_DIGIT_INIT(94), \
+ _PyLong_DIGIT_INIT(95), \
+ _PyLong_DIGIT_INIT(96), \
+ _PyLong_DIGIT_INIT(97), \
+ _PyLong_DIGIT_INIT(98), \
+ _PyLong_DIGIT_INIT(99), \
+ _PyLong_DIGIT_INIT(100), \
+ _PyLong_DIGIT_INIT(101), \
+ _PyLong_DIGIT_INIT(102), \
+ _PyLong_DIGIT_INIT(103), \
+ _PyLong_DIGIT_INIT(104), \
+ _PyLong_DIGIT_INIT(105), \
+ _PyLong_DIGIT_INIT(106), \
+ _PyLong_DIGIT_INIT(107), \
+ _PyLong_DIGIT_INIT(108), \
+ _PyLong_DIGIT_INIT(109), \
+ _PyLong_DIGIT_INIT(110), \
+ _PyLong_DIGIT_INIT(111), \
+ _PyLong_DIGIT_INIT(112), \
+ _PyLong_DIGIT_INIT(113), \
+ _PyLong_DIGIT_INIT(114), \
+ _PyLong_DIGIT_INIT(115), \
+ _PyLong_DIGIT_INIT(116), \
+ _PyLong_DIGIT_INIT(117), \
+ _PyLong_DIGIT_INIT(118), \
+ _PyLong_DIGIT_INIT(119), \
+ _PyLong_DIGIT_INIT(120), \
+ _PyLong_DIGIT_INIT(121), \
+ _PyLong_DIGIT_INIT(122), \
+ _PyLong_DIGIT_INIT(123), \
+ _PyLong_DIGIT_INIT(124), \
+ _PyLong_DIGIT_INIT(125), \
+ _PyLong_DIGIT_INIT(126), \
+ _PyLong_DIGIT_INIT(127), \
+ _PyLong_DIGIT_INIT(128), \
+ _PyLong_DIGIT_INIT(129), \
+ _PyLong_DIGIT_INIT(130), \
+ _PyLong_DIGIT_INIT(131), \
+ _PyLong_DIGIT_INIT(132), \
+ _PyLong_DIGIT_INIT(133), \
+ _PyLong_DIGIT_INIT(134), \
+ _PyLong_DIGIT_INIT(135), \
+ _PyLong_DIGIT_INIT(136), \
+ _PyLong_DIGIT_INIT(137), \
+ _PyLong_DIGIT_INIT(138), \
+ _PyLong_DIGIT_INIT(139), \
+ _PyLong_DIGIT_INIT(140), \
+ _PyLong_DIGIT_INIT(141), \
+ _PyLong_DIGIT_INIT(142), \
+ _PyLong_DIGIT_INIT(143), \
+ _PyLong_DIGIT_INIT(144), \
+ _PyLong_DIGIT_INIT(145), \
+ _PyLong_DIGIT_INIT(146), \
+ _PyLong_DIGIT_INIT(147), \
+ _PyLong_DIGIT_INIT(148), \
+ _PyLong_DIGIT_INIT(149), \
+ _PyLong_DIGIT_INIT(150), \
+ _PyLong_DIGIT_INIT(151), \
+ _PyLong_DIGIT_INIT(152), \
+ _PyLong_DIGIT_INIT(153), \
+ _PyLong_DIGIT_INIT(154), \
+ _PyLong_DIGIT_INIT(155), \
+ _PyLong_DIGIT_INIT(156), \
+ _PyLong_DIGIT_INIT(157), \
+ _PyLong_DIGIT_INIT(158), \
+ _PyLong_DIGIT_INIT(159), \
+ _PyLong_DIGIT_INIT(160), \
+ _PyLong_DIGIT_INIT(161), \
+ _PyLong_DIGIT_INIT(162), \
+ _PyLong_DIGIT_INIT(163), \
+ _PyLong_DIGIT_INIT(164), \
+ _PyLong_DIGIT_INIT(165), \
+ _PyLong_DIGIT_INIT(166), \
+ _PyLong_DIGIT_INIT(167), \
+ _PyLong_DIGIT_INIT(168), \
+ _PyLong_DIGIT_INIT(169), \
+ _PyLong_DIGIT_INIT(170), \
+ _PyLong_DIGIT_INIT(171), \
+ _PyLong_DIGIT_INIT(172), \
+ _PyLong_DIGIT_INIT(173), \
+ _PyLong_DIGIT_INIT(174), \
+ _PyLong_DIGIT_INIT(175), \
+ _PyLong_DIGIT_INIT(176), \
+ _PyLong_DIGIT_INIT(177), \
+ _PyLong_DIGIT_INIT(178), \
+ _PyLong_DIGIT_INIT(179), \
+ _PyLong_DIGIT_INIT(180), \
+ _PyLong_DIGIT_INIT(181), \
+ _PyLong_DIGIT_INIT(182), \
+ _PyLong_DIGIT_INIT(183), \
+ _PyLong_DIGIT_INIT(184), \
+ _PyLong_DIGIT_INIT(185), \
+ _PyLong_DIGIT_INIT(186), \
+ _PyLong_DIGIT_INIT(187), \
+ _PyLong_DIGIT_INIT(188), \
+ _PyLong_DIGIT_INIT(189), \
+ _PyLong_DIGIT_INIT(190), \
+ _PyLong_DIGIT_INIT(191), \
+ _PyLong_DIGIT_INIT(192), \
+ _PyLong_DIGIT_INIT(193), \
+ _PyLong_DIGIT_INIT(194), \
+ _PyLong_DIGIT_INIT(195), \
+ _PyLong_DIGIT_INIT(196), \
+ _PyLong_DIGIT_INIT(197), \
+ _PyLong_DIGIT_INIT(198), \
+ _PyLong_DIGIT_INIT(199), \
+ _PyLong_DIGIT_INIT(200), \
+ _PyLong_DIGIT_INIT(201), \
+ _PyLong_DIGIT_INIT(202), \
+ _PyLong_DIGIT_INIT(203), \
+ _PyLong_DIGIT_INIT(204), \
+ _PyLong_DIGIT_INIT(205), \
+ _PyLong_DIGIT_INIT(206), \
+ _PyLong_DIGIT_INIT(207), \
+ _PyLong_DIGIT_INIT(208), \
+ _PyLong_DIGIT_INIT(209), \
+ _PyLong_DIGIT_INIT(210), \
+ _PyLong_DIGIT_INIT(211), \
+ _PyLong_DIGIT_INIT(212), \
+ _PyLong_DIGIT_INIT(213), \
+ _PyLong_DIGIT_INIT(214), \
+ _PyLong_DIGIT_INIT(215), \
+ _PyLong_DIGIT_INIT(216), \
+ _PyLong_DIGIT_INIT(217), \
+ _PyLong_DIGIT_INIT(218), \
+ _PyLong_DIGIT_INIT(219), \
+ _PyLong_DIGIT_INIT(220), \
+ _PyLong_DIGIT_INIT(221), \
+ _PyLong_DIGIT_INIT(222), \
+ _PyLong_DIGIT_INIT(223), \
+ _PyLong_DIGIT_INIT(224), \
+ _PyLong_DIGIT_INIT(225), \
+ _PyLong_DIGIT_INIT(226), \
+ _PyLong_DIGIT_INIT(227), \
+ _PyLong_DIGIT_INIT(228), \
+ _PyLong_DIGIT_INIT(229), \
+ _PyLong_DIGIT_INIT(230), \
+ _PyLong_DIGIT_INIT(231), \
+ _PyLong_DIGIT_INIT(232), \
+ _PyLong_DIGIT_INIT(233), \
+ _PyLong_DIGIT_INIT(234), \
+ _PyLong_DIGIT_INIT(235), \
+ _PyLong_DIGIT_INIT(236), \
+ _PyLong_DIGIT_INIT(237), \
+ _PyLong_DIGIT_INIT(238), \
+ _PyLong_DIGIT_INIT(239), \
+ _PyLong_DIGIT_INIT(240), \
+ _PyLong_DIGIT_INIT(241), \
+ _PyLong_DIGIT_INIT(242), \
+ _PyLong_DIGIT_INIT(243), \
+ _PyLong_DIGIT_INIT(244), \
+ _PyLong_DIGIT_INIT(245), \
+ _PyLong_DIGIT_INIT(246), \
+ _PyLong_DIGIT_INIT(247), \
+ _PyLong_DIGIT_INIT(248), \
+ _PyLong_DIGIT_INIT(249), \
+ _PyLong_DIGIT_INIT(250), \
+ _PyLong_DIGIT_INIT(251), \
+ _PyLong_DIGIT_INIT(252), \
+ _PyLong_DIGIT_INIT(253), \
+ _PyLong_DIGIT_INIT(254), \
+ _PyLong_DIGIT_INIT(255), \
+ _PyLong_DIGIT_INIT(256), \
+}
+
+#define _Py_bytes_characters_INIT { \
+ _PyBytes_CHAR_INIT(0), \
+ _PyBytes_CHAR_INIT(1), \
+ _PyBytes_CHAR_INIT(2), \
+ _PyBytes_CHAR_INIT(3), \
+ _PyBytes_CHAR_INIT(4), \
+ _PyBytes_CHAR_INIT(5), \
+ _PyBytes_CHAR_INIT(6), \
+ _PyBytes_CHAR_INIT(7), \
+ _PyBytes_CHAR_INIT(8), \
+ _PyBytes_CHAR_INIT(9), \
+ _PyBytes_CHAR_INIT(10), \
+ _PyBytes_CHAR_INIT(11), \
+ _PyBytes_CHAR_INIT(12), \
+ _PyBytes_CHAR_INIT(13), \
+ _PyBytes_CHAR_INIT(14), \
+ _PyBytes_CHAR_INIT(15), \
+ _PyBytes_CHAR_INIT(16), \
+ _PyBytes_CHAR_INIT(17), \
+ _PyBytes_CHAR_INIT(18), \
+ _PyBytes_CHAR_INIT(19), \
+ _PyBytes_CHAR_INIT(20), \
+ _PyBytes_CHAR_INIT(21), \
+ _PyBytes_CHAR_INIT(22), \
+ _PyBytes_CHAR_INIT(23), \
+ _PyBytes_CHAR_INIT(24), \
+ _PyBytes_CHAR_INIT(25), \
+ _PyBytes_CHAR_INIT(26), \
+ _PyBytes_CHAR_INIT(27), \
+ _PyBytes_CHAR_INIT(28), \
+ _PyBytes_CHAR_INIT(29), \
+ _PyBytes_CHAR_INIT(30), \
+ _PyBytes_CHAR_INIT(31), \
+ _PyBytes_CHAR_INIT(32), \
+ _PyBytes_CHAR_INIT(33), \
+ _PyBytes_CHAR_INIT(34), \
+ _PyBytes_CHAR_INIT(35), \
+ _PyBytes_CHAR_INIT(36), \
+ _PyBytes_CHAR_INIT(37), \
+ _PyBytes_CHAR_INIT(38), \
+ _PyBytes_CHAR_INIT(39), \
+ _PyBytes_CHAR_INIT(40), \
+ _PyBytes_CHAR_INIT(41), \
+ _PyBytes_CHAR_INIT(42), \
+ _PyBytes_CHAR_INIT(43), \
+ _PyBytes_CHAR_INIT(44), \
+ _PyBytes_CHAR_INIT(45), \
+ _PyBytes_CHAR_INIT(46), \
+ _PyBytes_CHAR_INIT(47), \
+ _PyBytes_CHAR_INIT(48), \
+ _PyBytes_CHAR_INIT(49), \
+ _PyBytes_CHAR_INIT(50), \
+ _PyBytes_CHAR_INIT(51), \
+ _PyBytes_CHAR_INIT(52), \
+ _PyBytes_CHAR_INIT(53), \
+ _PyBytes_CHAR_INIT(54), \
+ _PyBytes_CHAR_INIT(55), \
+ _PyBytes_CHAR_INIT(56), \
+ _PyBytes_CHAR_INIT(57), \
+ _PyBytes_CHAR_INIT(58), \
+ _PyBytes_CHAR_INIT(59), \
+ _PyBytes_CHAR_INIT(60), \
+ _PyBytes_CHAR_INIT(61), \
+ _PyBytes_CHAR_INIT(62), \
+ _PyBytes_CHAR_INIT(63), \
+ _PyBytes_CHAR_INIT(64), \
+ _PyBytes_CHAR_INIT(65), \
+ _PyBytes_CHAR_INIT(66), \
+ _PyBytes_CHAR_INIT(67), \
+ _PyBytes_CHAR_INIT(68), \
+ _PyBytes_CHAR_INIT(69), \
+ _PyBytes_CHAR_INIT(70), \
+ _PyBytes_CHAR_INIT(71), \
+ _PyBytes_CHAR_INIT(72), \
+ _PyBytes_CHAR_INIT(73), \
+ _PyBytes_CHAR_INIT(74), \
+ _PyBytes_CHAR_INIT(75), \
+ _PyBytes_CHAR_INIT(76), \
+ _PyBytes_CHAR_INIT(77), \
+ _PyBytes_CHAR_INIT(78), \
+ _PyBytes_CHAR_INIT(79), \
+ _PyBytes_CHAR_INIT(80), \
+ _PyBytes_CHAR_INIT(81), \
+ _PyBytes_CHAR_INIT(82), \
+ _PyBytes_CHAR_INIT(83), \
+ _PyBytes_CHAR_INIT(84), \
+ _PyBytes_CHAR_INIT(85), \
+ _PyBytes_CHAR_INIT(86), \
+ _PyBytes_CHAR_INIT(87), \
+ _PyBytes_CHAR_INIT(88), \
+ _PyBytes_CHAR_INIT(89), \
+ _PyBytes_CHAR_INIT(90), \
+ _PyBytes_CHAR_INIT(91), \
+ _PyBytes_CHAR_INIT(92), \
+ _PyBytes_CHAR_INIT(93), \
+ _PyBytes_CHAR_INIT(94), \
+ _PyBytes_CHAR_INIT(95), \
+ _PyBytes_CHAR_INIT(96), \
+ _PyBytes_CHAR_INIT(97), \
+ _PyBytes_CHAR_INIT(98), \
+ _PyBytes_CHAR_INIT(99), \
+ _PyBytes_CHAR_INIT(100), \
+ _PyBytes_CHAR_INIT(101), \
+ _PyBytes_CHAR_INIT(102), \
+ _PyBytes_CHAR_INIT(103), \
+ _PyBytes_CHAR_INIT(104), \
+ _PyBytes_CHAR_INIT(105), \
+ _PyBytes_CHAR_INIT(106), \
+ _PyBytes_CHAR_INIT(107), \
+ _PyBytes_CHAR_INIT(108), \
+ _PyBytes_CHAR_INIT(109), \
+ _PyBytes_CHAR_INIT(110), \
+ _PyBytes_CHAR_INIT(111), \
+ _PyBytes_CHAR_INIT(112), \
+ _PyBytes_CHAR_INIT(113), \
+ _PyBytes_CHAR_INIT(114), \
+ _PyBytes_CHAR_INIT(115), \
+ _PyBytes_CHAR_INIT(116), \
+ _PyBytes_CHAR_INIT(117), \
+ _PyBytes_CHAR_INIT(118), \
+ _PyBytes_CHAR_INIT(119), \
+ _PyBytes_CHAR_INIT(120), \
+ _PyBytes_CHAR_INIT(121), \
+ _PyBytes_CHAR_INIT(122), \
+ _PyBytes_CHAR_INIT(123), \
+ _PyBytes_CHAR_INIT(124), \
+ _PyBytes_CHAR_INIT(125), \
+ _PyBytes_CHAR_INIT(126), \
+ _PyBytes_CHAR_INIT(127), \
+ _PyBytes_CHAR_INIT(128), \
+ _PyBytes_CHAR_INIT(129), \
+ _PyBytes_CHAR_INIT(130), \
+ _PyBytes_CHAR_INIT(131), \
+ _PyBytes_CHAR_INIT(132), \
+ _PyBytes_CHAR_INIT(133), \
+ _PyBytes_CHAR_INIT(134), \
+ _PyBytes_CHAR_INIT(135), \
+ _PyBytes_CHAR_INIT(136), \
+ _PyBytes_CHAR_INIT(137), \
+ _PyBytes_CHAR_INIT(138), \
+ _PyBytes_CHAR_INIT(139), \
+ _PyBytes_CHAR_INIT(140), \
+ _PyBytes_CHAR_INIT(141), \
+ _PyBytes_CHAR_INIT(142), \
+ _PyBytes_CHAR_INIT(143), \
+ _PyBytes_CHAR_INIT(144), \
+ _PyBytes_CHAR_INIT(145), \
+ _PyBytes_CHAR_INIT(146), \
+ _PyBytes_CHAR_INIT(147), \
+ _PyBytes_CHAR_INIT(148), \
+ _PyBytes_CHAR_INIT(149), \
+ _PyBytes_CHAR_INIT(150), \
+ _PyBytes_CHAR_INIT(151), \
+ _PyBytes_CHAR_INIT(152), \
+ _PyBytes_CHAR_INIT(153), \
+ _PyBytes_CHAR_INIT(154), \
+ _PyBytes_CHAR_INIT(155), \
+ _PyBytes_CHAR_INIT(156), \
+ _PyBytes_CHAR_INIT(157), \
+ _PyBytes_CHAR_INIT(158), \
+ _PyBytes_CHAR_INIT(159), \
+ _PyBytes_CHAR_INIT(160), \
+ _PyBytes_CHAR_INIT(161), \
+ _PyBytes_CHAR_INIT(162), \
+ _PyBytes_CHAR_INIT(163), \
+ _PyBytes_CHAR_INIT(164), \
+ _PyBytes_CHAR_INIT(165), \
+ _PyBytes_CHAR_INIT(166), \
+ _PyBytes_CHAR_INIT(167), \
+ _PyBytes_CHAR_INIT(168), \
+ _PyBytes_CHAR_INIT(169), \
+ _PyBytes_CHAR_INIT(170), \
+ _PyBytes_CHAR_INIT(171), \
+ _PyBytes_CHAR_INIT(172), \
+ _PyBytes_CHAR_INIT(173), \
+ _PyBytes_CHAR_INIT(174), \
+ _PyBytes_CHAR_INIT(175), \
+ _PyBytes_CHAR_INIT(176), \
+ _PyBytes_CHAR_INIT(177), \
+ _PyBytes_CHAR_INIT(178), \
+ _PyBytes_CHAR_INIT(179), \
+ _PyBytes_CHAR_INIT(180), \
+ _PyBytes_CHAR_INIT(181), \
+ _PyBytes_CHAR_INIT(182), \
+ _PyBytes_CHAR_INIT(183), \
+ _PyBytes_CHAR_INIT(184), \
+ _PyBytes_CHAR_INIT(185), \
+ _PyBytes_CHAR_INIT(186), \
+ _PyBytes_CHAR_INIT(187), \
+ _PyBytes_CHAR_INIT(188), \
+ _PyBytes_CHAR_INIT(189), \
+ _PyBytes_CHAR_INIT(190), \
+ _PyBytes_CHAR_INIT(191), \
+ _PyBytes_CHAR_INIT(192), \
+ _PyBytes_CHAR_INIT(193), \
+ _PyBytes_CHAR_INIT(194), \
+ _PyBytes_CHAR_INIT(195), \
+ _PyBytes_CHAR_INIT(196), \
+ _PyBytes_CHAR_INIT(197), \
+ _PyBytes_CHAR_INIT(198), \
+ _PyBytes_CHAR_INIT(199), \
+ _PyBytes_CHAR_INIT(200), \
+ _PyBytes_CHAR_INIT(201), \
+ _PyBytes_CHAR_INIT(202), \
+ _PyBytes_CHAR_INIT(203), \
+ _PyBytes_CHAR_INIT(204), \
+ _PyBytes_CHAR_INIT(205), \
+ _PyBytes_CHAR_INIT(206), \
+ _PyBytes_CHAR_INIT(207), \
+ _PyBytes_CHAR_INIT(208), \
+ _PyBytes_CHAR_INIT(209), \
+ _PyBytes_CHAR_INIT(210), \
+ _PyBytes_CHAR_INIT(211), \
+ _PyBytes_CHAR_INIT(212), \
+ _PyBytes_CHAR_INIT(213), \
+ _PyBytes_CHAR_INIT(214), \
+ _PyBytes_CHAR_INIT(215), \
+ _PyBytes_CHAR_INIT(216), \
+ _PyBytes_CHAR_INIT(217), \
+ _PyBytes_CHAR_INIT(218), \
+ _PyBytes_CHAR_INIT(219), \
+ _PyBytes_CHAR_INIT(220), \
+ _PyBytes_CHAR_INIT(221), \
+ _PyBytes_CHAR_INIT(222), \
+ _PyBytes_CHAR_INIT(223), \
+ _PyBytes_CHAR_INIT(224), \
+ _PyBytes_CHAR_INIT(225), \
+ _PyBytes_CHAR_INIT(226), \
+ _PyBytes_CHAR_INIT(227), \
+ _PyBytes_CHAR_INIT(228), \
+ _PyBytes_CHAR_INIT(229), \
+ _PyBytes_CHAR_INIT(230), \
+ _PyBytes_CHAR_INIT(231), \
+ _PyBytes_CHAR_INIT(232), \
+ _PyBytes_CHAR_INIT(233), \
+ _PyBytes_CHAR_INIT(234), \
+ _PyBytes_CHAR_INIT(235), \
+ _PyBytes_CHAR_INIT(236), \
+ _PyBytes_CHAR_INIT(237), \
+ _PyBytes_CHAR_INIT(238), \
+ _PyBytes_CHAR_INIT(239), \
+ _PyBytes_CHAR_INIT(240), \
+ _PyBytes_CHAR_INIT(241), \
+ _PyBytes_CHAR_INIT(242), \
+ _PyBytes_CHAR_INIT(243), \
+ _PyBytes_CHAR_INIT(244), \
+ _PyBytes_CHAR_INIT(245), \
+ _PyBytes_CHAR_INIT(246), \
+ _PyBytes_CHAR_INIT(247), \
+ _PyBytes_CHAR_INIT(248), \
+ _PyBytes_CHAR_INIT(249), \
+ _PyBytes_CHAR_INIT(250), \
+ _PyBytes_CHAR_INIT(251), \
+ _PyBytes_CHAR_INIT(252), \
+ _PyBytes_CHAR_INIT(253), \
+ _PyBytes_CHAR_INIT(254), \
+ _PyBytes_CHAR_INIT(255), \
+}
+
+#define _Py_str_literals_INIT { \
+ INIT_STR(anon_dictcomp, "<dictcomp>"), \
+ INIT_STR(anon_genexpr, "<genexpr>"), \
+ INIT_STR(anon_lambda, "<lambda>"), \
+ INIT_STR(anon_listcomp, "<listcomp>"), \
+ INIT_STR(anon_module, "<module>"), \
+ INIT_STR(anon_setcomp, "<setcomp>"), \
+ INIT_STR(anon_string, "<string>"), \
+ INIT_STR(anon_unknown, "<unknown>"), \
+ INIT_STR(close_br, "}"), \
+ INIT_STR(dbl_close_br, "}}"), \
+ INIT_STR(dbl_open_br, "{{"), \
+ INIT_STR(dbl_percent, "%%"), \
+ INIT_STR(defaults, ".defaults"), \
+ INIT_STR(dot, "."), \
+ INIT_STR(dot_locals, ".<locals>"), \
+ INIT_STR(empty, ""), \
+ INIT_STR(generic_base, ".generic_base"), \
+ INIT_STR(json_decoder, "json.decoder"), \
+ INIT_STR(kwdefaults, ".kwdefaults"), \
+ INIT_STR(list_err, "list index out of range"), \
+ INIT_STR(newline, "\n"), \
+ INIT_STR(open_br, "{"), \
+ INIT_STR(percent, "%"), \
+ INIT_STR(shim_name, "<shim>"), \
+ INIT_STR(type_params, ".type_params"), \
+ INIT_STR(utf_8, "utf-8"), \
+}
+
+#define _Py_str_identifiers_INIT { \
+ INIT_ID(CANCELLED), \
+ INIT_ID(FINISHED), \
+ INIT_ID(False), \
+ INIT_ID(JSONDecodeError), \
+ INIT_ID(PENDING), \
+ INIT_ID(Py_Repr), \
+ INIT_ID(TextIOWrapper), \
+ INIT_ID(True), \
+ INIT_ID(WarningMessage), \
+ INIT_ID(_), \
+ INIT_ID(_WindowsConsoleIO), \
+ INIT_ID(__IOBase_closed), \
+ INIT_ID(__abc_tpflags__), \
+ INIT_ID(__abs__), \
+ INIT_ID(__abstractmethods__), \
+ INIT_ID(__add__), \
+ INIT_ID(__aenter__), \
+ INIT_ID(__aexit__), \
+ INIT_ID(__aiter__), \
+ INIT_ID(__all__), \
+ INIT_ID(__and__), \
+ INIT_ID(__anext__), \
+ INIT_ID(__annotations__), \
+ INIT_ID(__args__), \
+ INIT_ID(__asyncio_running_event_loop__), \
+ INIT_ID(__await__), \
+ INIT_ID(__bases__), \
+ INIT_ID(__bool__), \
+ INIT_ID(__buffer__), \
+ INIT_ID(__build_class__), \
+ INIT_ID(__builtins__), \
+ INIT_ID(__bytes__), \
+ INIT_ID(__call__), \
+ INIT_ID(__cantrace__), \
+ INIT_ID(__class__), \
+ INIT_ID(__class_getitem__), \
+ INIT_ID(__classcell__), \
+ INIT_ID(__classdict__), \
+ INIT_ID(__classdictcell__), \
+ INIT_ID(__complex__), \
+ INIT_ID(__contains__), \
+ INIT_ID(__copy__), \
+ INIT_ID(__ctypes_from_outparam__), \
+ INIT_ID(__del__), \
+ INIT_ID(__delattr__), \
+ INIT_ID(__delete__), \
+ INIT_ID(__delitem__), \
+ INIT_ID(__dict__), \
+ INIT_ID(__dictoffset__), \
+ INIT_ID(__dir__), \
+ INIT_ID(__divmod__), \
+ INIT_ID(__doc__), \
+ INIT_ID(__enter__), \
+ INIT_ID(__eq__), \
+ INIT_ID(__exit__), \
+ INIT_ID(__file__), \
+ INIT_ID(__float__), \
+ INIT_ID(__floordiv__), \
+ INIT_ID(__format__), \
+ INIT_ID(__fspath__), \
+ INIT_ID(__ge__), \
+ INIT_ID(__get__), \
+ INIT_ID(__getattr__), \
+ INIT_ID(__getattribute__), \
+ INIT_ID(__getinitargs__), \
+ INIT_ID(__getitem__), \
+ INIT_ID(__getnewargs__), \
+ INIT_ID(__getnewargs_ex__), \
+ INIT_ID(__getstate__), \
+ INIT_ID(__gt__), \
+ INIT_ID(__hash__), \
+ INIT_ID(__iadd__), \
+ INIT_ID(__iand__), \
+ INIT_ID(__ifloordiv__), \
+ INIT_ID(__ilshift__), \
+ INIT_ID(__imatmul__), \
+ INIT_ID(__imod__), \
+ INIT_ID(__import__), \
+ INIT_ID(__imul__), \
+ INIT_ID(__index__), \
+ INIT_ID(__init__), \
+ INIT_ID(__init_subclass__), \
+ INIT_ID(__instancecheck__), \
+ INIT_ID(__int__), \
+ INIT_ID(__invert__), \
+ INIT_ID(__ior__), \
+ INIT_ID(__ipow__), \
+ INIT_ID(__irshift__), \
+ INIT_ID(__isabstractmethod__), \
+ INIT_ID(__isub__), \
+ INIT_ID(__iter__), \
+ INIT_ID(__itruediv__), \
+ INIT_ID(__ixor__), \
+ INIT_ID(__le__), \
+ INIT_ID(__len__), \
+ INIT_ID(__length_hint__), \
+ INIT_ID(__lltrace__), \
+ INIT_ID(__loader__), \
+ INIT_ID(__lshift__), \
+ INIT_ID(__lt__), \
+ INIT_ID(__main__), \
+ INIT_ID(__matmul__), \
+ INIT_ID(__missing__), \
+ INIT_ID(__mod__), \
+ INIT_ID(__module__), \
+ INIT_ID(__mro_entries__), \
+ INIT_ID(__mul__), \
+ INIT_ID(__name__), \
+ INIT_ID(__ne__), \
+ INIT_ID(__neg__), \
+ INIT_ID(__new__), \
+ INIT_ID(__newobj__), \
+ INIT_ID(__newobj_ex__), \
+ INIT_ID(__next__), \
+ INIT_ID(__notes__), \
+ INIT_ID(__or__), \
+ INIT_ID(__orig_class__), \
+ INIT_ID(__origin__), \
+ INIT_ID(__package__), \
+ INIT_ID(__parameters__), \
+ INIT_ID(__path__), \
+ INIT_ID(__pos__), \
+ INIT_ID(__pow__), \
+ INIT_ID(__prepare__), \
+ INIT_ID(__qualname__), \
+ INIT_ID(__radd__), \
+ INIT_ID(__rand__), \
+ INIT_ID(__rdivmod__), \
+ INIT_ID(__reduce__), \
+ INIT_ID(__reduce_ex__), \
+ INIT_ID(__release_buffer__), \
+ INIT_ID(__repr__), \
+ INIT_ID(__reversed__), \
+ INIT_ID(__rfloordiv__), \
+ INIT_ID(__rlshift__), \
+ INIT_ID(__rmatmul__), \
+ INIT_ID(__rmod__), \
+ INIT_ID(__rmul__), \
+ INIT_ID(__ror__), \
+ INIT_ID(__round__), \
+ INIT_ID(__rpow__), \
+ INIT_ID(__rrshift__), \
+ INIT_ID(__rshift__), \
+ INIT_ID(__rsub__), \
+ INIT_ID(__rtruediv__), \
+ INIT_ID(__rxor__), \
+ INIT_ID(__set__), \
+ INIT_ID(__set_name__), \
+ INIT_ID(__setattr__), \
+ INIT_ID(__setitem__), \
+ INIT_ID(__setstate__), \
+ INIT_ID(__sizeof__), \
+ INIT_ID(__slotnames__), \
+ INIT_ID(__slots__), \
+ INIT_ID(__spec__), \
+ INIT_ID(__str__), \
+ INIT_ID(__sub__), \
+ INIT_ID(__subclasscheck__), \
+ INIT_ID(__subclasshook__), \
+ INIT_ID(__truediv__), \
+ INIT_ID(__trunc__), \
+ INIT_ID(__type_params__), \
+ INIT_ID(__typing_is_unpacked_typevartuple__), \
+ INIT_ID(__typing_prepare_subst__), \
+ INIT_ID(__typing_subst__), \
+ INIT_ID(__typing_unpacked_tuple_args__), \
+ INIT_ID(__warningregistry__), \
+ INIT_ID(__weaklistoffset__), \
+ INIT_ID(__weakref__), \
+ INIT_ID(__xor__), \
+ INIT_ID(_abc_impl), \
+ INIT_ID(_abstract_), \
+ INIT_ID(_active), \
+ INIT_ID(_annotation), \
+ INIT_ID(_anonymous_), \
+ INIT_ID(_argtypes_), \
+ INIT_ID(_as_parameter_), \
+ INIT_ID(_asyncio_future_blocking), \
+ INIT_ID(_blksize), \
+ INIT_ID(_bootstrap), \
+ INIT_ID(_check_retval_), \
+ INIT_ID(_dealloc_warn), \
+ INIT_ID(_feature_version), \
+ INIT_ID(_fields_), \
+ INIT_ID(_finalizing), \
+ INIT_ID(_find_and_load), \
+ INIT_ID(_fix_up_module), \
+ INIT_ID(_flags_), \
+ INIT_ID(_get_sourcefile), \
+ INIT_ID(_handle_fromlist), \
+ INIT_ID(_initializing), \
+ INIT_ID(_io), \
+ INIT_ID(_is_text_encoding), \
+ INIT_ID(_length_), \
+ INIT_ID(_limbo), \
+ INIT_ID(_lock_unlock_module), \
+ INIT_ID(_loop), \
+ INIT_ID(_needs_com_addref_), \
+ INIT_ID(_pack_), \
+ INIT_ID(_restype_), \
+ INIT_ID(_showwarnmsg), \
+ INIT_ID(_shutdown), \
+ INIT_ID(_slotnames), \
+ INIT_ID(_strptime_datetime), \
+ INIT_ID(_swappedbytes_), \
+ INIT_ID(_type_), \
+ INIT_ID(_uninitialized_submodules), \
+ INIT_ID(_warn_unawaited_coroutine), \
+ INIT_ID(_xoptions), \
+ INIT_ID(a), \
+ INIT_ID(abs_tol), \
+ INIT_ID(access), \
+ INIT_ID(add), \
+ INIT_ID(add_done_callback), \
+ INIT_ID(after_in_child), \
+ INIT_ID(after_in_parent), \
+ INIT_ID(aggregate_class), \
+ INIT_ID(alias), \
+ INIT_ID(append), \
+ INIT_ID(arg), \
+ INIT_ID(argdefs), \
+ INIT_ID(args), \
+ INIT_ID(arguments), \
+ INIT_ID(argv), \
+ INIT_ID(as_integer_ratio), \
+ INIT_ID(ast), \
+ INIT_ID(attribute), \
+ INIT_ID(authorizer_callback), \
+ INIT_ID(autocommit), \
+ INIT_ID(b), \
+ INIT_ID(backtick), \
+ INIT_ID(base), \
+ INIT_ID(before), \
+ INIT_ID(big), \
+ INIT_ID(binary_form), \
+ INIT_ID(block), \
+ INIT_ID(bound), \
+ INIT_ID(buffer), \
+ INIT_ID(buffer_callback), \
+ INIT_ID(buffer_size), \
+ INIT_ID(buffering), \
+ INIT_ID(buffers), \
+ INIT_ID(bufsize), \
+ INIT_ID(builtins), \
+ INIT_ID(byteorder), \
+ INIT_ID(bytes), \
+ INIT_ID(bytes_per_sep), \
+ INIT_ID(c), \
+ INIT_ID(c_call), \
+ INIT_ID(c_exception), \
+ INIT_ID(c_return), \
+ INIT_ID(cached_statements), \
+ INIT_ID(cadata), \
+ INIT_ID(cafile), \
+ INIT_ID(call), \
+ INIT_ID(call_exception_handler), \
+ INIT_ID(call_soon), \
+ INIT_ID(cancel), \
+ INIT_ID(capath), \
+ INIT_ID(category), \
+ INIT_ID(cb_type), \
+ INIT_ID(certfile), \
+ INIT_ID(check_same_thread), \
+ INIT_ID(clear), \
+ INIT_ID(close), \
+ INIT_ID(closed), \
+ INIT_ID(closefd), \
+ INIT_ID(closure), \
+ INIT_ID(co_argcount), \
+ INIT_ID(co_cellvars), \
+ INIT_ID(co_code), \
+ INIT_ID(co_consts), \
+ INIT_ID(co_exceptiontable), \
+ INIT_ID(co_filename), \
+ INIT_ID(co_firstlineno), \
+ INIT_ID(co_flags), \
+ INIT_ID(co_freevars), \
+ INIT_ID(co_kwonlyargcount), \
+ INIT_ID(co_linetable), \
+ INIT_ID(co_name), \
+ INIT_ID(co_names), \
+ INIT_ID(co_nlocals), \
+ INIT_ID(co_posonlyargcount), \
+ INIT_ID(co_qualname), \
+ INIT_ID(co_stacksize), \
+ INIT_ID(co_varnames), \
+ INIT_ID(code), \
+ INIT_ID(command), \
+ INIT_ID(comment_factory), \
+ INIT_ID(compile_mode), \
+ INIT_ID(consts), \
+ INIT_ID(context), \
+ INIT_ID(contravariant), \
+ INIT_ID(cookie), \
+ INIT_ID(copy), \
+ INIT_ID(copyreg), \
+ INIT_ID(coro), \
+ INIT_ID(count), \
+ INIT_ID(covariant), \
+ INIT_ID(cwd), \
+ INIT_ID(d), \
+ INIT_ID(data), \
+ INIT_ID(database), \
+ INIT_ID(decode), \
+ INIT_ID(decoder), \
+ INIT_ID(default), \
+ INIT_ID(defaultaction), \
+ INIT_ID(delete), \
+ INIT_ID(depth), \
+ INIT_ID(detect_types), \
+ INIT_ID(deterministic), \
+ INIT_ID(device), \
+ INIT_ID(dict), \
+ INIT_ID(dictcomp), \
+ INIT_ID(difference_update), \
+ INIT_ID(digest), \
+ INIT_ID(digest_size), \
+ INIT_ID(digestmod), \
+ INIT_ID(dir_fd), \
+ INIT_ID(discard), \
+ INIT_ID(dispatch_table), \
+ INIT_ID(displayhook), \
+ INIT_ID(dklen), \
+ INIT_ID(doc), \
+ INIT_ID(dont_inherit), \
+ INIT_ID(dst), \
+ INIT_ID(dst_dir_fd), \
+ INIT_ID(duration), \
+ INIT_ID(e), \
+ INIT_ID(eager_start), \
+ INIT_ID(effective_ids), \
+ INIT_ID(element_factory), \
+ INIT_ID(encode), \
+ INIT_ID(encoding), \
+ INIT_ID(end), \
+ INIT_ID(end_lineno), \
+ INIT_ID(end_offset), \
+ INIT_ID(endpos), \
+ INIT_ID(entrypoint), \
+ INIT_ID(env), \
+ INIT_ID(errors), \
+ INIT_ID(event), \
+ INIT_ID(eventmask), \
+ INIT_ID(exc_type), \
+ INIT_ID(exc_value), \
+ INIT_ID(excepthook), \
+ INIT_ID(exception), \
+ INIT_ID(existing_file_name), \
+ INIT_ID(exp), \
+ INIT_ID(extend), \
+ INIT_ID(extra_tokens), \
+ INIT_ID(facility), \
+ INIT_ID(factory), \
+ INIT_ID(false), \
+ INIT_ID(family), \
+ INIT_ID(fanout), \
+ INIT_ID(fd), \
+ INIT_ID(fd2), \
+ INIT_ID(fdel), \
+ INIT_ID(fget), \
+ INIT_ID(file), \
+ INIT_ID(file_actions), \
+ INIT_ID(filename), \
+ INIT_ID(fileno), \
+ INIT_ID(filepath), \
+ INIT_ID(fillvalue), \
+ INIT_ID(filters), \
+ INIT_ID(final), \
+ INIT_ID(find_class), \
+ INIT_ID(fix_imports), \
+ INIT_ID(flags), \
+ INIT_ID(flush), \
+ INIT_ID(follow_symlinks), \
+ INIT_ID(format), \
+ INIT_ID(frequency), \
+ INIT_ID(from_param), \
+ INIT_ID(fromlist), \
+ INIT_ID(fromtimestamp), \
+ INIT_ID(fromutc), \
+ INIT_ID(fset), \
+ INIT_ID(func), \
+ INIT_ID(future), \
+ INIT_ID(generation), \
+ INIT_ID(genexpr), \
+ INIT_ID(get), \
+ INIT_ID(get_debug), \
+ INIT_ID(get_event_loop), \
+ INIT_ID(get_loop), \
+ INIT_ID(get_source), \
+ INIT_ID(getattr), \
+ INIT_ID(getstate), \
+ INIT_ID(gid), \
+ INIT_ID(globals), \
+ INIT_ID(groupindex), \
+ INIT_ID(groups), \
+ INIT_ID(handle), \
+ INIT_ID(hash_name), \
+ INIT_ID(header), \
+ INIT_ID(headers), \
+ INIT_ID(hi), \
+ INIT_ID(hook), \
+ INIT_ID(id), \
+ INIT_ID(ident), \
+ INIT_ID(ignore), \
+ INIT_ID(imag), \
+ INIT_ID(importlib), \
+ INIT_ID(in_fd), \
+ INIT_ID(incoming), \
+ INIT_ID(indexgroup), \
+ INIT_ID(inf), \
+ INIT_ID(infer_variance), \
+ INIT_ID(inheritable), \
+ INIT_ID(initial), \
+ INIT_ID(initial_bytes), \
+ INIT_ID(initial_value), \
+ INIT_ID(initval), \
+ INIT_ID(inner_size), \
+ INIT_ID(input), \
+ INIT_ID(insert_comments), \
+ INIT_ID(insert_pis), \
+ INIT_ID(instructions), \
+ INIT_ID(intern), \
+ INIT_ID(intersection), \
+ INIT_ID(is_running), \
+ INIT_ID(isatty), \
+ INIT_ID(isinstance), \
+ INIT_ID(isoformat), \
+ INIT_ID(isolation_level), \
+ INIT_ID(istext), \
+ INIT_ID(item), \
+ INIT_ID(items), \
+ INIT_ID(iter), \
+ INIT_ID(iterable), \
+ INIT_ID(iterations), \
+ INIT_ID(join), \
+ INIT_ID(jump), \
+ INIT_ID(keepends), \
+ INIT_ID(key), \
+ INIT_ID(keyfile), \
+ INIT_ID(keys), \
+ INIT_ID(kind), \
+ INIT_ID(kw), \
+ INIT_ID(kw1), \
+ INIT_ID(kw2), \
+ INIT_ID(lambda), \
+ INIT_ID(last), \
+ INIT_ID(last_exc), \
+ INIT_ID(last_node), \
+ INIT_ID(last_traceback), \
+ INIT_ID(last_type), \
+ INIT_ID(last_value), \
+ INIT_ID(latin1), \
+ INIT_ID(leaf_size), \
+ INIT_ID(len), \
+ INIT_ID(length), \
+ INIT_ID(level), \
+ INIT_ID(limit), \
+ INIT_ID(line), \
+ INIT_ID(line_buffering), \
+ INIT_ID(lineno), \
+ INIT_ID(listcomp), \
+ INIT_ID(little), \
+ INIT_ID(lo), \
+ INIT_ID(locale), \
+ INIT_ID(locals), \
+ INIT_ID(logoption), \
+ INIT_ID(loop), \
+ INIT_ID(mapping), \
+ INIT_ID(match), \
+ INIT_ID(max_length), \
+ INIT_ID(maxdigits), \
+ INIT_ID(maxevents), \
+ INIT_ID(maxmem), \
+ INIT_ID(maxsplit), \
+ INIT_ID(maxvalue), \
+ INIT_ID(memLevel), \
+ INIT_ID(memlimit), \
+ INIT_ID(message), \
+ INIT_ID(metaclass), \
+ INIT_ID(metadata), \
+ INIT_ID(method), \
+ INIT_ID(mod), \
+ INIT_ID(mode), \
+ INIT_ID(module), \
+ INIT_ID(module_globals), \
+ INIT_ID(modules), \
+ INIT_ID(mro), \
+ INIT_ID(msg), \
+ INIT_ID(mycmp), \
+ INIT_ID(n), \
+ INIT_ID(n_arg), \
+ INIT_ID(n_fields), \
+ INIT_ID(n_sequence_fields), \
+ INIT_ID(n_unnamed_fields), \
+ INIT_ID(name), \
+ INIT_ID(name_from), \
+ INIT_ID(namespace_separator), \
+ INIT_ID(namespaces), \
+ INIT_ID(narg), \
+ INIT_ID(ndigits), \
+ INIT_ID(new_file_name), \
+ INIT_ID(new_limit), \
+ INIT_ID(newline), \
+ INIT_ID(newlines), \
+ INIT_ID(next), \
+ INIT_ID(nlocals), \
+ INIT_ID(node_depth), \
+ INIT_ID(node_offset), \
+ INIT_ID(ns), \
+ INIT_ID(nstype), \
+ INIT_ID(nt), \
+ INIT_ID(null), \
+ INIT_ID(number), \
+ INIT_ID(obj), \
+ INIT_ID(object), \
+ INIT_ID(offset), \
+ INIT_ID(offset_dst), \
+ INIT_ID(offset_src), \
+ INIT_ID(on_type_read), \
+ INIT_ID(onceregistry), \
+ INIT_ID(only_keys), \
+ INIT_ID(oparg), \
+ INIT_ID(opcode), \
+ INIT_ID(open), \
+ INIT_ID(opener), \
+ INIT_ID(operation), \
+ INIT_ID(optimize), \
+ INIT_ID(options), \
+ INIT_ID(order), \
+ INIT_ID(origin), \
+ INIT_ID(out_fd), \
+ INIT_ID(outgoing), \
+ INIT_ID(overlapped), \
+ INIT_ID(owner), \
+ INIT_ID(p), \
+ INIT_ID(pages), \
+ INIT_ID(parent), \
+ INIT_ID(password), \
+ INIT_ID(path), \
+ INIT_ID(pattern), \
+ INIT_ID(peek), \
+ INIT_ID(persistent_id), \
+ INIT_ID(persistent_load), \
+ INIT_ID(person), \
+ INIT_ID(pi_factory), \
+ INIT_ID(pid), \
+ INIT_ID(policy), \
+ INIT_ID(pos), \
+ INIT_ID(pos1), \
+ INIT_ID(pos2), \
+ INIT_ID(posix), \
+ INIT_ID(print_file_and_line), \
+ INIT_ID(priority), \
+ INIT_ID(progress), \
+ INIT_ID(progress_handler), \
+ INIT_ID(progress_routine), \
+ INIT_ID(proto), \
+ INIT_ID(protocol), \
+ INIT_ID(ps1), \
+ INIT_ID(ps2), \
+ INIT_ID(query), \
+ INIT_ID(quotetabs), \
+ INIT_ID(r), \
+ INIT_ID(raw), \
+ INIT_ID(read), \
+ INIT_ID(read1), \
+ INIT_ID(readable), \
+ INIT_ID(readall), \
+ INIT_ID(readinto), \
+ INIT_ID(readinto1), \
+ INIT_ID(readline), \
+ INIT_ID(readonly), \
+ INIT_ID(real), \
+ INIT_ID(reducer_override), \
+ INIT_ID(registry), \
+ INIT_ID(rel_tol), \
+ INIT_ID(release), \
+ INIT_ID(reload), \
+ INIT_ID(repl), \
+ INIT_ID(replace), \
+ INIT_ID(reserved), \
+ INIT_ID(reset), \
+ INIT_ID(resetids), \
+ INIT_ID(return), \
+ INIT_ID(reverse), \
+ INIT_ID(reversed), \
+ INIT_ID(s), \
+ INIT_ID(salt), \
+ INIT_ID(sched_priority), \
+ INIT_ID(scheduler), \
+ INIT_ID(seek), \
+ INIT_ID(seekable), \
+ INIT_ID(selectors), \
+ INIT_ID(self), \
+ INIT_ID(send), \
+ INIT_ID(sep), \
+ INIT_ID(sequence), \
+ INIT_ID(server_hostname), \
+ INIT_ID(server_side), \
+ INIT_ID(session), \
+ INIT_ID(setcomp), \
+ INIT_ID(setpgroup), \
+ INIT_ID(setsid), \
+ INIT_ID(setsigdef), \
+ INIT_ID(setsigmask), \
+ INIT_ID(setstate), \
+ INIT_ID(shape), \
+ INIT_ID(show_cmd), \
+ INIT_ID(signed), \
+ INIT_ID(size), \
+ INIT_ID(sizehint), \
+ INIT_ID(skip_file_prefixes), \
+ INIT_ID(sleep), \
+ INIT_ID(sock), \
+ INIT_ID(sort), \
+ INIT_ID(sound), \
+ INIT_ID(source), \
+ INIT_ID(source_traceback), \
+ INIT_ID(src), \
+ INIT_ID(src_dir_fd), \
+ INIT_ID(stacklevel), \
+ INIT_ID(start), \
+ INIT_ID(statement), \
+ INIT_ID(status), \
+ INIT_ID(stderr), \
+ INIT_ID(stdin), \
+ INIT_ID(stdout), \
+ INIT_ID(step), \
+ INIT_ID(steps), \
+ INIT_ID(store_name), \
+ INIT_ID(strategy), \
+ INIT_ID(strftime), \
+ INIT_ID(strict), \
+ INIT_ID(strict_mode), \
+ INIT_ID(string), \
+ INIT_ID(sub_key), \
+ INIT_ID(symmetric_difference_update), \
+ INIT_ID(tabsize), \
+ INIT_ID(tag), \
+ INIT_ID(target), \
+ INIT_ID(target_is_directory), \
+ INIT_ID(task), \
+ INIT_ID(tb_frame), \
+ INIT_ID(tb_lasti), \
+ INIT_ID(tb_lineno), \
+ INIT_ID(tb_next), \
+ INIT_ID(tell), \
+ INIT_ID(template), \
+ INIT_ID(term), \
+ INIT_ID(text), \
+ INIT_ID(threading), \
+ INIT_ID(throw), \
+ INIT_ID(timeout), \
+ INIT_ID(times), \
+ INIT_ID(timetuple), \
+ INIT_ID(top), \
+ INIT_ID(trace_callback), \
+ INIT_ID(traceback), \
+ INIT_ID(trailers), \
+ INIT_ID(translate), \
+ INIT_ID(true), \
+ INIT_ID(truncate), \
+ INIT_ID(twice), \
+ INIT_ID(txt), \
+ INIT_ID(type), \
+ INIT_ID(type_params), \
+ INIT_ID(tz), \
+ INIT_ID(tzname), \
+ INIT_ID(uid), \
+ INIT_ID(unlink), \
+ INIT_ID(unraisablehook), \
+ INIT_ID(uri), \
+ INIT_ID(usedforsecurity), \
+ INIT_ID(value), \
+ INIT_ID(values), \
+ INIT_ID(version), \
+ INIT_ID(volume), \
+ INIT_ID(warnings), \
+ INIT_ID(warnoptions), \
+ INIT_ID(wbits), \
+ INIT_ID(week), \
+ INIT_ID(weekday), \
+ INIT_ID(which), \
+ INIT_ID(who), \
+ INIT_ID(withdata), \
+ INIT_ID(writable), \
+ INIT_ID(write), \
+ INIT_ID(write_through), \
+ INIT_ID(x), \
+ INIT_ID(year), \
+ INIT_ID(zdict), \
+}
+
+#define _Py_str_ascii_INIT { \
+ _PyASCIIObject_INIT("\x00"), \
+ _PyASCIIObject_INIT("\x01"), \
+ _PyASCIIObject_INIT("\x02"), \
+ _PyASCIIObject_INIT("\x03"), \
+ _PyASCIIObject_INIT("\x04"), \
+ _PyASCIIObject_INIT("\x05"), \
+ _PyASCIIObject_INIT("\x06"), \
+ _PyASCIIObject_INIT("\x07"), \
+ _PyASCIIObject_INIT("\x08"), \
+ _PyASCIIObject_INIT("\x09"), \
+ _PyASCIIObject_INIT("\x0a"), \
+ _PyASCIIObject_INIT("\x0b"), \
+ _PyASCIIObject_INIT("\x0c"), \
+ _PyASCIIObject_INIT("\x0d"), \
+ _PyASCIIObject_INIT("\x0e"), \
+ _PyASCIIObject_INIT("\x0f"), \
+ _PyASCIIObject_INIT("\x10"), \
+ _PyASCIIObject_INIT("\x11"), \
+ _PyASCIIObject_INIT("\x12"), \
+ _PyASCIIObject_INIT("\x13"), \
+ _PyASCIIObject_INIT("\x14"), \
+ _PyASCIIObject_INIT("\x15"), \
+ _PyASCIIObject_INIT("\x16"), \
+ _PyASCIIObject_INIT("\x17"), \
+ _PyASCIIObject_INIT("\x18"), \
+ _PyASCIIObject_INIT("\x19"), \
+ _PyASCIIObject_INIT("\x1a"), \
+ _PyASCIIObject_INIT("\x1b"), \
+ _PyASCIIObject_INIT("\x1c"), \
+ _PyASCIIObject_INIT("\x1d"), \
+ _PyASCIIObject_INIT("\x1e"), \
+ _PyASCIIObject_INIT("\x1f"), \
+ _PyASCIIObject_INIT("\x20"), \
+ _PyASCIIObject_INIT("\x21"), \
+ _PyASCIIObject_INIT("\x22"), \
+ _PyASCIIObject_INIT("\x23"), \
+ _PyASCIIObject_INIT("\x24"), \
+ _PyASCIIObject_INIT("\x25"), \
+ _PyASCIIObject_INIT("\x26"), \
+ _PyASCIIObject_INIT("\x27"), \
+ _PyASCIIObject_INIT("\x28"), \
+ _PyASCIIObject_INIT("\x29"), \
+ _PyASCIIObject_INIT("\x2a"), \
+ _PyASCIIObject_INIT("\x2b"), \
+ _PyASCIIObject_INIT("\x2c"), \
+ _PyASCIIObject_INIT("\x2d"), \
+ _PyASCIIObject_INIT("\x2e"), \
+ _PyASCIIObject_INIT("\x2f"), \
+ _PyASCIIObject_INIT("\x30"), \
+ _PyASCIIObject_INIT("\x31"), \
+ _PyASCIIObject_INIT("\x32"), \
+ _PyASCIIObject_INIT("\x33"), \
+ _PyASCIIObject_INIT("\x34"), \
+ _PyASCIIObject_INIT("\x35"), \
+ _PyASCIIObject_INIT("\x36"), \
+ _PyASCIIObject_INIT("\x37"), \
+ _PyASCIIObject_INIT("\x38"), \
+ _PyASCIIObject_INIT("\x39"), \
+ _PyASCIIObject_INIT("\x3a"), \
+ _PyASCIIObject_INIT("\x3b"), \
+ _PyASCIIObject_INIT("\x3c"), \
+ _PyASCIIObject_INIT("\x3d"), \
+ _PyASCIIObject_INIT("\x3e"), \
+ _PyASCIIObject_INIT("\x3f"), \
+ _PyASCIIObject_INIT("\x40"), \
+ _PyASCIIObject_INIT("\x41"), \
+ _PyASCIIObject_INIT("\x42"), \
+ _PyASCIIObject_INIT("\x43"), \
+ _PyASCIIObject_INIT("\x44"), \
+ _PyASCIIObject_INIT("\x45"), \
+ _PyASCIIObject_INIT("\x46"), \
+ _PyASCIIObject_INIT("\x47"), \
+ _PyASCIIObject_INIT("\x48"), \
+ _PyASCIIObject_INIT("\x49"), \
+ _PyASCIIObject_INIT("\x4a"), \
+ _PyASCIIObject_INIT("\x4b"), \
+ _PyASCIIObject_INIT("\x4c"), \
+ _PyASCIIObject_INIT("\x4d"), \
+ _PyASCIIObject_INIT("\x4e"), \
+ _PyASCIIObject_INIT("\x4f"), \
+ _PyASCIIObject_INIT("\x50"), \
+ _PyASCIIObject_INIT("\x51"), \
+ _PyASCIIObject_INIT("\x52"), \
+ _PyASCIIObject_INIT("\x53"), \
+ _PyASCIIObject_INIT("\x54"), \
+ _PyASCIIObject_INIT("\x55"), \
+ _PyASCIIObject_INIT("\x56"), \
+ _PyASCIIObject_INIT("\x57"), \
+ _PyASCIIObject_INIT("\x58"), \
+ _PyASCIIObject_INIT("\x59"), \
+ _PyASCIIObject_INIT("\x5a"), \
+ _PyASCIIObject_INIT("\x5b"), \
+ _PyASCIIObject_INIT("\x5c"), \
+ _PyASCIIObject_INIT("\x5d"), \
+ _PyASCIIObject_INIT("\x5e"), \
+ _PyASCIIObject_INIT("\x5f"), \
+ _PyASCIIObject_INIT("\x60"), \
+ _PyASCIIObject_INIT("\x61"), \
+ _PyASCIIObject_INIT("\x62"), \
+ _PyASCIIObject_INIT("\x63"), \
+ _PyASCIIObject_INIT("\x64"), \
+ _PyASCIIObject_INIT("\x65"), \
+ _PyASCIIObject_INIT("\x66"), \
+ _PyASCIIObject_INIT("\x67"), \
+ _PyASCIIObject_INIT("\x68"), \
+ _PyASCIIObject_INIT("\x69"), \
+ _PyASCIIObject_INIT("\x6a"), \
+ _PyASCIIObject_INIT("\x6b"), \
+ _PyASCIIObject_INIT("\x6c"), \
+ _PyASCIIObject_INIT("\x6d"), \
+ _PyASCIIObject_INIT("\x6e"), \
+ _PyASCIIObject_INIT("\x6f"), \
+ _PyASCIIObject_INIT("\x70"), \
+ _PyASCIIObject_INIT("\x71"), \
+ _PyASCIIObject_INIT("\x72"), \
+ _PyASCIIObject_INIT("\x73"), \
+ _PyASCIIObject_INIT("\x74"), \
+ _PyASCIIObject_INIT("\x75"), \
+ _PyASCIIObject_INIT("\x76"), \
+ _PyASCIIObject_INIT("\x77"), \
+ _PyASCIIObject_INIT("\x78"), \
+ _PyASCIIObject_INIT("\x79"), \
+ _PyASCIIObject_INIT("\x7a"), \
+ _PyASCIIObject_INIT("\x7b"), \
+ _PyASCIIObject_INIT("\x7c"), \
+ _PyASCIIObject_INIT("\x7d"), \
+ _PyASCIIObject_INIT("\x7e"), \
+ _PyASCIIObject_INIT("\x7f"), \
+}
+
+#define _Py_str_latin1_INIT { \
+ _PyUnicode_LATIN1_INIT("\x80", "\xc2\x80"), \
+ _PyUnicode_LATIN1_INIT("\x81", "\xc2\x81"), \
+ _PyUnicode_LATIN1_INIT("\x82", "\xc2\x82"), \
+ _PyUnicode_LATIN1_INIT("\x83", "\xc2\x83"), \
+ _PyUnicode_LATIN1_INIT("\x84", "\xc2\x84"), \
+ _PyUnicode_LATIN1_INIT("\x85", "\xc2\x85"), \
+ _PyUnicode_LATIN1_INIT("\x86", "\xc2\x86"), \
+ _PyUnicode_LATIN1_INIT("\x87", "\xc2\x87"), \
+ _PyUnicode_LATIN1_INIT("\x88", "\xc2\x88"), \
+ _PyUnicode_LATIN1_INIT("\x89", "\xc2\x89"), \
+ _PyUnicode_LATIN1_INIT("\x8a", "\xc2\x8a"), \
+ _PyUnicode_LATIN1_INIT("\x8b", "\xc2\x8b"), \
+ _PyUnicode_LATIN1_INIT("\x8c", "\xc2\x8c"), \
+ _PyUnicode_LATIN1_INIT("\x8d", "\xc2\x8d"), \
+ _PyUnicode_LATIN1_INIT("\x8e", "\xc2\x8e"), \
+ _PyUnicode_LATIN1_INIT("\x8f", "\xc2\x8f"), \
+ _PyUnicode_LATIN1_INIT("\x90", "\xc2\x90"), \
+ _PyUnicode_LATIN1_INIT("\x91", "\xc2\x91"), \
+ _PyUnicode_LATIN1_INIT("\x92", "\xc2\x92"), \
+ _PyUnicode_LATIN1_INIT("\x93", "\xc2\x93"), \
+ _PyUnicode_LATIN1_INIT("\x94", "\xc2\x94"), \
+ _PyUnicode_LATIN1_INIT("\x95", "\xc2\x95"), \
+ _PyUnicode_LATIN1_INIT("\x96", "\xc2\x96"), \
+ _PyUnicode_LATIN1_INIT("\x97", "\xc2\x97"), \
+ _PyUnicode_LATIN1_INIT("\x98", "\xc2\x98"), \
+ _PyUnicode_LATIN1_INIT("\x99", "\xc2\x99"), \
+ _PyUnicode_LATIN1_INIT("\x9a", "\xc2\x9a"), \
+ _PyUnicode_LATIN1_INIT("\x9b", "\xc2\x9b"), \
+ _PyUnicode_LATIN1_INIT("\x9c", "\xc2\x9c"), \
+ _PyUnicode_LATIN1_INIT("\x9d", "\xc2\x9d"), \
+ _PyUnicode_LATIN1_INIT("\x9e", "\xc2\x9e"), \
+ _PyUnicode_LATIN1_INIT("\x9f", "\xc2\x9f"), \
+ _PyUnicode_LATIN1_INIT("\xa0", "\xc2\xa0"), \
+ _PyUnicode_LATIN1_INIT("\xa1", "\xc2\xa1"), \
+ _PyUnicode_LATIN1_INIT("\xa2", "\xc2\xa2"), \
+ _PyUnicode_LATIN1_INIT("\xa3", "\xc2\xa3"), \
+ _PyUnicode_LATIN1_INIT("\xa4", "\xc2\xa4"), \
+ _PyUnicode_LATIN1_INIT("\xa5", "\xc2\xa5"), \
+ _PyUnicode_LATIN1_INIT("\xa6", "\xc2\xa6"), \
+ _PyUnicode_LATIN1_INIT("\xa7", "\xc2\xa7"), \
+ _PyUnicode_LATIN1_INIT("\xa8", "\xc2\xa8"), \
+ _PyUnicode_LATIN1_INIT("\xa9", "\xc2\xa9"), \
+ _PyUnicode_LATIN1_INIT("\xaa", "\xc2\xaa"), \
+ _PyUnicode_LATIN1_INIT("\xab", "\xc2\xab"), \
+ _PyUnicode_LATIN1_INIT("\xac", "\xc2\xac"), \
+ _PyUnicode_LATIN1_INIT("\xad", "\xc2\xad"), \
+ _PyUnicode_LATIN1_INIT("\xae", "\xc2\xae"), \
+ _PyUnicode_LATIN1_INIT("\xaf", "\xc2\xaf"), \
+ _PyUnicode_LATIN1_INIT("\xb0", "\xc2\xb0"), \
+ _PyUnicode_LATIN1_INIT("\xb1", "\xc2\xb1"), \
+ _PyUnicode_LATIN1_INIT("\xb2", "\xc2\xb2"), \
+ _PyUnicode_LATIN1_INIT("\xb3", "\xc2\xb3"), \
+ _PyUnicode_LATIN1_INIT("\xb4", "\xc2\xb4"), \
+ _PyUnicode_LATIN1_INIT("\xb5", "\xc2\xb5"), \
+ _PyUnicode_LATIN1_INIT("\xb6", "\xc2\xb6"), \
+ _PyUnicode_LATIN1_INIT("\xb7", "\xc2\xb7"), \
+ _PyUnicode_LATIN1_INIT("\xb8", "\xc2\xb8"), \
+ _PyUnicode_LATIN1_INIT("\xb9", "\xc2\xb9"), \
+ _PyUnicode_LATIN1_INIT("\xba", "\xc2\xba"), \
+ _PyUnicode_LATIN1_INIT("\xbb", "\xc2\xbb"), \
+ _PyUnicode_LATIN1_INIT("\xbc", "\xc2\xbc"), \
+ _PyUnicode_LATIN1_INIT("\xbd", "\xc2\xbd"), \
+ _PyUnicode_LATIN1_INIT("\xbe", "\xc2\xbe"), \
+ _PyUnicode_LATIN1_INIT("\xbf", "\xc2\xbf"), \
+ _PyUnicode_LATIN1_INIT("\xc0", "\xc3\x80"), \
+ _PyUnicode_LATIN1_INIT("\xc1", "\xc3\x81"), \
+ _PyUnicode_LATIN1_INIT("\xc2", "\xc3\x82"), \
+ _PyUnicode_LATIN1_INIT("\xc3", "\xc3\x83"), \
+ _PyUnicode_LATIN1_INIT("\xc4", "\xc3\x84"), \
+ _PyUnicode_LATIN1_INIT("\xc5", "\xc3\x85"), \
+ _PyUnicode_LATIN1_INIT("\xc6", "\xc3\x86"), \
+ _PyUnicode_LATIN1_INIT("\xc7", "\xc3\x87"), \
+ _PyUnicode_LATIN1_INIT("\xc8", "\xc3\x88"), \
+ _PyUnicode_LATIN1_INIT("\xc9", "\xc3\x89"), \
+ _PyUnicode_LATIN1_INIT("\xca", "\xc3\x8a"), \
+ _PyUnicode_LATIN1_INIT("\xcb", "\xc3\x8b"), \
+ _PyUnicode_LATIN1_INIT("\xcc", "\xc3\x8c"), \
+ _PyUnicode_LATIN1_INIT("\xcd", "\xc3\x8d"), \
+ _PyUnicode_LATIN1_INIT("\xce", "\xc3\x8e"), \
+ _PyUnicode_LATIN1_INIT("\xcf", "\xc3\x8f"), \
+ _PyUnicode_LATIN1_INIT("\xd0", "\xc3\x90"), \
+ _PyUnicode_LATIN1_INIT("\xd1", "\xc3\x91"), \
+ _PyUnicode_LATIN1_INIT("\xd2", "\xc3\x92"), \
+ _PyUnicode_LATIN1_INIT("\xd3", "\xc3\x93"), \
+ _PyUnicode_LATIN1_INIT("\xd4", "\xc3\x94"), \
+ _PyUnicode_LATIN1_INIT("\xd5", "\xc3\x95"), \
+ _PyUnicode_LATIN1_INIT("\xd6", "\xc3\x96"), \
+ _PyUnicode_LATIN1_INIT("\xd7", "\xc3\x97"), \
+ _PyUnicode_LATIN1_INIT("\xd8", "\xc3\x98"), \
+ _PyUnicode_LATIN1_INIT("\xd9", "\xc3\x99"), \
+ _PyUnicode_LATIN1_INIT("\xda", "\xc3\x9a"), \
+ _PyUnicode_LATIN1_INIT("\xdb", "\xc3\x9b"), \
+ _PyUnicode_LATIN1_INIT("\xdc", "\xc3\x9c"), \
+ _PyUnicode_LATIN1_INIT("\xdd", "\xc3\x9d"), \
+ _PyUnicode_LATIN1_INIT("\xde", "\xc3\x9e"), \
+ _PyUnicode_LATIN1_INIT("\xdf", "\xc3\x9f"), \
+ _PyUnicode_LATIN1_INIT("\xe0", "\xc3\xa0"), \
+ _PyUnicode_LATIN1_INIT("\xe1", "\xc3\xa1"), \
+ _PyUnicode_LATIN1_INIT("\xe2", "\xc3\xa2"), \
+ _PyUnicode_LATIN1_INIT("\xe3", "\xc3\xa3"), \
+ _PyUnicode_LATIN1_INIT("\xe4", "\xc3\xa4"), \
+ _PyUnicode_LATIN1_INIT("\xe5", "\xc3\xa5"), \
+ _PyUnicode_LATIN1_INIT("\xe6", "\xc3\xa6"), \
+ _PyUnicode_LATIN1_INIT("\xe7", "\xc3\xa7"), \
+ _PyUnicode_LATIN1_INIT("\xe8", "\xc3\xa8"), \
+ _PyUnicode_LATIN1_INIT("\xe9", "\xc3\xa9"), \
+ _PyUnicode_LATIN1_INIT("\xea", "\xc3\xaa"), \
+ _PyUnicode_LATIN1_INIT("\xeb", "\xc3\xab"), \
+ _PyUnicode_LATIN1_INIT("\xec", "\xc3\xac"), \
+ _PyUnicode_LATIN1_INIT("\xed", "\xc3\xad"), \
+ _PyUnicode_LATIN1_INIT("\xee", "\xc3\xae"), \
+ _PyUnicode_LATIN1_INIT("\xef", "\xc3\xaf"), \
+ _PyUnicode_LATIN1_INIT("\xf0", "\xc3\xb0"), \
+ _PyUnicode_LATIN1_INIT("\xf1", "\xc3\xb1"), \
+ _PyUnicode_LATIN1_INIT("\xf2", "\xc3\xb2"), \
+ _PyUnicode_LATIN1_INIT("\xf3", "\xc3\xb3"), \
+ _PyUnicode_LATIN1_INIT("\xf4", "\xc3\xb4"), \
+ _PyUnicode_LATIN1_INIT("\xf5", "\xc3\xb5"), \
+ _PyUnicode_LATIN1_INIT("\xf6", "\xc3\xb6"), \
+ _PyUnicode_LATIN1_INIT("\xf7", "\xc3\xb7"), \
+ _PyUnicode_LATIN1_INIT("\xf8", "\xc3\xb8"), \
+ _PyUnicode_LATIN1_INIT("\xf9", "\xc3\xb9"), \
+ _PyUnicode_LATIN1_INIT("\xfa", "\xc3\xba"), \
+ _PyUnicode_LATIN1_INIT("\xfb", "\xc3\xbb"), \
+ _PyUnicode_LATIN1_INIT("\xfc", "\xc3\xbc"), \
+ _PyUnicode_LATIN1_INIT("\xfd", "\xc3\xbd"), \
+ _PyUnicode_LATIN1_INIT("\xfe", "\xc3\xbe"), \
+ _PyUnicode_LATIN1_INIT("\xff", "\xc3\xbf"), \
+}
+/* End auto-generated code */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_RUNTIME_INIT_GENERATED_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_signal.h b/contrib/tools/python3/src/Include/internal/pycore_signal.h
index b921dd170e..ca3f69d09f 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_signal.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_signal.h
@@ -10,8 +10,11 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
+#include "pycore_atomic.h" // _Py_atomic_address
+
#include <signal.h> // NSIG
+
#ifdef _SIG_MAXSIG
// gh-91145: On FreeBSD, <signal.h> defines NSIG as 32: it doesn't include
// realtime signals: [SIGRTMIN,SIGRTMAX]. Use _SIG_MAXSIG instead. For
@@ -29,6 +32,66 @@ extern "C" {
# define Py_NSIG 64 // Use a reasonable default value
#endif
+#define INVALID_FD (-1)
+
+struct _signals_runtime_state {
+ volatile struct {
+ _Py_atomic_int tripped;
+ /* func is atomic to ensure that PyErr_SetInterrupt is async-signal-safe
+ * (even though it would probably be otherwise, anyway).
+ */
+ _Py_atomic_address func;
+ } handlers[Py_NSIG];
+
+ volatile struct {
+#ifdef MS_WINDOWS
+ /* This would be "SOCKET fd" if <winsock2.h> were always included.
+ It isn't so we must cast to SOCKET where appropriate. */
+ volatile int fd;
+#elif defined(__VXWORKS__)
+ int fd;
+#else
+ sig_atomic_t fd;
+#endif
+
+ int warn_on_full_buffer;
+#ifdef MS_WINDOWS
+ int use_send;
+#endif
+ } wakeup;
+
+ /* Speed up sigcheck() when none tripped */
+ _Py_atomic_int is_tripped;
+
+ /* These objects necessarily belong to the main interpreter. */
+ PyObject *default_handler;
+ PyObject *ignore_handler;
+
+#ifdef MS_WINDOWS
+ /* This would be "HANDLE sigint_event" if <windows.h> were always included.
+ It isn't so we must cast to HANDLE everywhere "sigint_event" is used. */
+ void *sigint_event;
+#endif
+
+ /* True if the main interpreter thread exited due to an unhandled
+ * KeyboardInterrupt exception, suggesting the user pressed ^C. */
+ int unhandled_keyboard_interrupt;
+};
+
+#ifdef MS_WINDOWS
+# define _signals_WAKEUP_INIT \
+ {.fd = INVALID_FD, .warn_on_full_buffer = 1, .use_send = 0}
+#else
+# define _signals_WAKEUP_INIT \
+ {.fd = INVALID_FD, .warn_on_full_buffer = 1}
+#endif
+
+#define _signals_RUNTIME_INIT \
+ { \
+ .wakeup = _signals_WAKEUP_INIT, \
+ }
+
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_sliceobject.h b/contrib/tools/python3/src/Include/internal/pycore_sliceobject.h
index e81834c041..98665c3859 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_sliceobject.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_sliceobject.h
@@ -13,6 +13,8 @@ extern "C" {
extern void _PySlice_Fini(PyInterpreterState *);
+extern PyObject *
+_PyBuildSlice_ConsumeRefs(PyObject *start, PyObject *stop);
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/internal/pycore_structseq.h b/contrib/tools/python3/src/Include/internal/pycore_structseq.h
index 0199c790e2..6f5dfc1270 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_structseq.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_structseq.h
@@ -15,12 +15,23 @@ PyAPI_FUNC(PyTypeObject *) _PyStructSequence_NewType(
PyStructSequence_Desc *desc,
unsigned long tp_flags);
-PyAPI_FUNC(int) _PyStructSequence_InitType(
+extern int _PyStructSequence_InitBuiltinWithFlags(
+ PyInterpreterState *interp,
PyTypeObject *type,
PyStructSequence_Desc *desc,
unsigned long tp_flags);
-extern void _PyStructSequence_FiniType(PyTypeObject *type);
+static inline int
+_PyStructSequence_InitBuiltin(PyInterpreterState *interp,
+ PyTypeObject *type,
+ PyStructSequence_Desc *desc)
+{
+ return _PyStructSequence_InitBuiltinWithFlags(interp, type, desc, 0);
+}
+
+extern void _PyStructSequence_FiniBuiltin(
+ PyInterpreterState *interp,
+ PyTypeObject *type);
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/internal/pycore_symtable.h b/contrib/tools/python3/src/Include/internal/pycore_symtable.h
index 28935f4ed5..c8e0578a23 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_symtable.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_symtable.h
@@ -10,8 +10,17 @@ extern "C" {
struct _mod; // Type defined in pycore_ast.h
-typedef enum _block_type { FunctionBlock, ClassBlock, ModuleBlock, AnnotationBlock }
- _Py_block_ty;
+typedef enum _block_type {
+ FunctionBlock, ClassBlock, ModuleBlock,
+ // Used for annotations if 'from __future__ import annotations' is active.
+ // Annotation blocks cannot bind names and are not evaluated.
+ AnnotationBlock,
+ // Used for generics and type aliases. These work mostly like functions
+ // (see PEP 695 for details). The three different blocks function identically;
+ // they are different enum entries only so that error messages can be more
+ // precise.
+ TypeVarBoundBlock, TypeAliasBlock, TypeParamBlock
+} _Py_block_ty;
typedef enum _comprehension_type {
NoComprehension = 0,
@@ -49,7 +58,7 @@ typedef struct _symtable_entry {
PyObject *ste_varnames; /* list of function parameters */
PyObject *ste_children; /* list of child blocks */
PyObject *ste_directives;/* locations of global and nonlocal statements */
- _Py_block_ty ste_type; /* module, class or function */
+ _Py_block_ty ste_type;
int ste_nested; /* true if block is nested */
unsigned ste_free : 1; /* true if block has free variables */
unsigned ste_child_free : 1; /* true if a child block has free vars,
@@ -64,7 +73,12 @@ typedef struct _symtable_entry {
unsigned ste_needs_class_closure : 1; /* for class scopes, true if a
closure over __class__
should be created */
+ unsigned ste_needs_classdict : 1; /* for class scopes, true if a closure
+ over the class dict should be created */
+ unsigned ste_comp_inlined : 1; /* true if this comprehension is inlined */
unsigned ste_comp_iter_target : 1; /* true if visiting comprehension target */
+ unsigned ste_can_see_class_scope : 1; /* true if this block can see names bound in an
+ enclosing class scope */
int ste_comp_iter_expr; /* non-zero if visiting a comprehension range expression */
int ste_lineno; /* first line of block */
int ste_col_offset; /* offset of first line of block */
@@ -77,10 +91,11 @@ typedef struct _symtable_entry {
extern PyTypeObject PySTEntry_Type;
-#define PySTEntry_Check(op) Py_IS_TYPE(op, &PySTEntry_Type)
+#define PySTEntry_Check(op) Py_IS_TYPE((op), &PySTEntry_Type)
extern long _PyST_GetSymbol(PySTEntryObject *, PyObject *);
extern int _PyST_GetScope(PySTEntryObject *, PyObject *);
+extern int _PyST_IsFunctionLike(PySTEntryObject *);
extern struct symtable* _PySymtable_Build(
struct _mod *mod,
@@ -90,6 +105,8 @@ PyAPI_FUNC(PySTEntryObject *) PySymtable_Lookup(struct symtable *, void *);
extern void _PySymtable_Free(struct symtable *);
+extern PyObject* _Py_Mangle(PyObject *p, PyObject *name);
+
/* Flags for def-use information */
#define DEF_GLOBAL 1 /* global stmt */
@@ -102,14 +119,16 @@ extern void _PySymtable_Free(struct symtable *);
#define DEF_IMPORT 2<<6 /* assignment occurred via import */
#define DEF_ANNOT 2<<7 /* this name is annotated */
#define DEF_COMP_ITER 2<<8 /* this name is a comprehension iteration variable */
+#define DEF_TYPE_PARAM 2<<9 /* this name is a type parameter */
+#define DEF_COMP_CELL 2<<10 /* this name is a cell in an inlined comprehension */
#define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
/* GLOBAL_EXPLICIT and GLOBAL_IMPLICIT are used internally by the symbol
table. GLOBAL is returned from PyST_GetScope() for either of them.
- It is stored in ste_symbols at bits 12-15.
+ It is stored in ste_symbols at bits 13-16.
*/
-#define SCOPE_OFFSET 11
+#define SCOPE_OFFSET 12
#define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
#define LOCAL 1
@@ -128,6 +147,11 @@ extern struct symtable* _Py_SymtableStringObjectFlags(
int start,
PyCompilerFlags *flags);
+int _PyFuture_FromAST(
+ struct _mod * mod,
+ PyObject *filename,
+ PyFutureFeatures* futures);
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_sysmodule.h b/contrib/tools/python3/src/Include/internal/pycore_sysmodule.h
index 10d092cdc3..b4b1febafa 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_sysmodule.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_sysmodule.h
@@ -20,6 +20,9 @@ extern void _PySys_ClearAuditHooks(PyThreadState *tstate);
PyAPI_FUNC(int) _PySys_SetAttr(PyObject *, PyObject *);
+extern int _PySys_ClearAttrString(PyInterpreterState *interp,
+ const char *name, int verbose);
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_time.h b/contrib/tools/python3/src/Include/internal/pycore_time.h
new file mode 100644
index 0000000000..949170c449
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_time.h
@@ -0,0 +1,25 @@
+#ifndef Py_INTERNAL_TIME_H
+#define Py_INTERNAL_TIME_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+
+struct _time_runtime_state {
+#ifdef HAVE_TIMES
+ int ticks_per_second_initialized;
+ long ticks_per_second;
+#else
+ int _not_used;
+#endif
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_TIME_H */
diff --git a/contrib/tools/python3/src/Include/token.h b/contrib/tools/python3/src/Include/internal/pycore_token.h
index eb1b9ea47b..c02e637fee 100644
--- a/contrib/tools/python3/src/Include/token.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_token.h
@@ -1,13 +1,16 @@
-/* Auto-generated by Tools/scripts/generate_token.py */
+/* Auto-generated by Tools/build/generate_token.py */
/* Token types */
-#ifndef Py_LIMITED_API
-#ifndef Py_TOKEN_H
-#define Py_TOKEN_H
+#ifndef Py_INTERNAL_TOKEN_H
+#define Py_INTERNAL_TOKEN_H
#ifdef __cplusplus
extern "C" {
#endif
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
#undef TILDE /* Prevent clash of our definition with system macro. Ex AIX, ioctl.h */
#define ENDMARKER 0
@@ -64,14 +67,20 @@ extern "C" {
#define RARROW 51
#define ELLIPSIS 52
#define COLONEQUAL 53
-#define OP 54
-#define AWAIT 55
-#define ASYNC 56
-#define TYPE_IGNORE 57
-#define TYPE_COMMENT 58
-#define SOFT_KEYWORD 59
-#define ERRORTOKEN 60
-#define N_TOKENS 64
+#define EXCLAMATION 54
+#define OP 55
+#define AWAIT 56
+#define ASYNC 57
+#define TYPE_IGNORE 58
+#define TYPE_COMMENT 59
+#define SOFT_KEYWORD 60
+#define FSTRING_START 61
+#define FSTRING_MIDDLE 62
+#define FSTRING_END 63
+#define COMMENT 64
+#define NL 65
+#define ERRORTOKEN 66
+#define N_TOKENS 68
#define NT_OFFSET 256
/* Special definitions for cooperation with parser */
@@ -83,15 +92,17 @@ extern "C" {
(x) == NEWLINE || \
(x) == INDENT || \
(x) == DEDENT)
+#define ISSTRINGLIT(x) ((x) == STRING || \
+ (x) == FSTRING_MIDDLE)
+// Symbols exported for test_peg_generator
PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */
-PyAPI_FUNC(int) PyToken_OneChar(int);
-PyAPI_FUNC(int) PyToken_TwoChars(int, int);
-PyAPI_FUNC(int) PyToken_ThreeChars(int, int, int);
+PyAPI_FUNC(int) _PyToken_OneChar(int);
+PyAPI_FUNC(int) _PyToken_TwoChars(int, int);
+PyAPI_FUNC(int) _PyToken_ThreeChars(int, int, int);
#ifdef __cplusplus
}
#endif
-#endif /* !Py_TOKEN_H */
-#endif /* Py_LIMITED_API */
+#endif // !Py_INTERNAL_TOKEN_H
diff --git a/contrib/tools/python3/src/Include/internal/pycore_tracemalloc.h b/contrib/tools/python3/src/Include/internal/pycore_tracemalloc.h
new file mode 100644
index 0000000000..d086adc61c
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_tracemalloc.h
@@ -0,0 +1,123 @@
+#ifndef Py_INTERNAL_TRACEMALLOC_H
+#define Py_INTERNAL_TRACEMALLOC_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+#include "pycore_hashtable.h" // _Py_hashtable_t
+
+
+/* Trace memory blocks allocated by PyMem_RawMalloc() */
+#define TRACE_RAW_MALLOC
+
+
+struct _PyTraceMalloc_Config {
+ /* Module initialized?
+ Variable protected by the GIL */
+ enum {
+ TRACEMALLOC_NOT_INITIALIZED,
+ TRACEMALLOC_INITIALIZED,
+ TRACEMALLOC_FINALIZED
+ } initialized;
+
+ /* Is tracemalloc tracing memory allocations?
+ Variable protected by the GIL */
+ int tracing;
+
+ /* limit of the number of frames in a traceback, 1 by default.
+ Variable protected by the GIL. */
+ int max_nframe;
+};
+
+
+/* Pack the frame_t structure to reduce the memory footprint on 64-bit
+ architectures: 12 bytes instead of 16. */
+#if defined(_MSC_VER)
+#pragma pack(push, 4)
+#endif
+
+struct
+#ifdef __GNUC__
+__attribute__((packed))
+#endif
+tracemalloc_frame {
+ /* filename cannot be NULL: "<unknown>" is used if the Python frame
+ filename is NULL */
+ PyObject *filename;
+ unsigned int lineno;
+};
+#ifdef _MSC_VER
+#pragma pack(pop)
+#endif
+
+struct tracemalloc_traceback {
+ Py_uhash_t hash;
+ /* Number of frames stored */
+ uint16_t nframe;
+ /* Total number of frames the traceback had */
+ uint16_t total_nframe;
+ struct tracemalloc_frame frames[1];
+};
+
+
+struct _tracemalloc_runtime_state {
+ struct _PyTraceMalloc_Config config;
+
+ /* Protected by the GIL */
+ struct {
+ PyMemAllocatorEx mem;
+ PyMemAllocatorEx raw;
+ PyMemAllocatorEx obj;
+ } allocators;
+
+#if defined(TRACE_RAW_MALLOC)
+ PyThread_type_lock tables_lock;
+#endif
+ /* Size in bytes of currently traced memory.
+ Protected by TABLES_LOCK(). */
+ size_t traced_memory;
+ /* Peak size in bytes of traced memory.
+ Protected by TABLES_LOCK(). */
+ size_t peak_traced_memory;
+ /* Hash table used as a set to intern filenames:
+ PyObject* => PyObject*.
+ Protected by the GIL */
+ _Py_hashtable_t *filenames;
+ /* Buffer to store a new traceback in traceback_new().
+ Protected by the GIL. */
+ struct tracemalloc_traceback *traceback;
+ /* Hash table used as a set to intern tracebacks:
+ traceback_t* => traceback_t*
+ Protected by the GIL */
+ _Py_hashtable_t *tracebacks;
+ /* pointer (void*) => trace (trace_t*).
+ Protected by TABLES_LOCK(). */
+ _Py_hashtable_t *traces;
+ /* domain (unsigned int) => traces (_Py_hashtable_t).
+ Protected by TABLES_LOCK(). */
+ _Py_hashtable_t *domains;
+
+ struct tracemalloc_traceback empty_traceback;
+
+ Py_tss_t reentrant_key;
+};
+
+#define _tracemalloc_runtime_state_INIT \
+ { \
+ .config = { \
+ .initialized = TRACEMALLOC_NOT_INITIALIZED, \
+ .tracing = 0, \
+ .max_nframe = 1, \
+ }, \
+ .reentrant_key = Py_tss_NEEDS_INIT, \
+ }
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif // !Py_INTERNAL_TRACEMALLOC_H
diff --git a/contrib/tools/python3/src/Include/internal/pycore_tuple.h b/contrib/tools/python3/src/Include/internal/pycore_tuple.h
index 1efe4fa2bd..335edad897 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_tuple.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_tuple.h
@@ -14,7 +14,6 @@ extern "C" {
/* runtime lifecycle */
extern PyStatus _PyTuple_InitGlobalObjects(PyInterpreterState *);
-extern PyStatus _PyTuple_InitTypes(PyInterpreterState *);
extern void _PyTuple_Fini(PyInterpreterState *);
@@ -62,11 +61,18 @@ struct _Py_tuple_state {
#endif
};
-#define _PyTuple_ITEMS(op) (_PyTuple_CAST(op)->ob_item)
+#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
extern PyObject *_PyTuple_FromArray(PyObject *const *, Py_ssize_t);
extern PyObject *_PyTuple_FromArraySteal(PyObject *const *, Py_ssize_t);
+
+typedef struct {
+ PyObject_HEAD
+ Py_ssize_t it_index;
+ PyTupleObject *it_seq; /* Set to NULL when iterator is exhausted */
+} _PyTupleIterObject;
+
#ifdef __cplusplus
}
#endif
diff --git a/contrib/tools/python3/src/Include/internal/pycore_typeobject.h b/contrib/tools/python3/src/Include/internal/pycore_typeobject.h
index c480a3a57b..63f76fc55c 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_typeobject.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_typeobject.h
@@ -4,20 +4,25 @@
extern "C" {
#endif
+#include "pycore_moduleobject.h"
+
#ifndef Py_BUILD_CORE
# error "this header requires Py_BUILD_CORE define"
#endif
-/* runtime lifecycle */
+/* state */
-extern PyStatus _PyTypes_InitState(PyInterpreterState *);
-extern PyStatus _PyTypes_InitTypes(PyInterpreterState *);
-extern void _PyTypes_FiniTypes(PyInterpreterState *);
-extern void _PyTypes_Fini(PyInterpreterState *);
+#define _Py_TYPE_BASE_VERSION_TAG (2<<16)
+#define _Py_MAX_GLOBAL_TYPE_VERSION_TAG (_Py_TYPE_BASE_VERSION_TAG - 1)
+struct _types_runtime_state {
+ /* Used to set PyTypeObject.tp_version_tag for core static types. */
+ // bpo-42745: next_version_tag remains shared by all interpreters
+ // because of static types.
+ unsigned int next_version_tag;
+};
-/* other API */
// Type attribute lookup cache: speed up attribute and method lookups,
// see _PyType_Lookup().
@@ -28,21 +33,115 @@ struct type_cache_entry {
};
#define MCACHE_SIZE_EXP 12
-#define MCACHE_STATS 0
struct type_cache {
struct type_cache_entry hashtable[1 << MCACHE_SIZE_EXP];
-#if MCACHE_STATS
- size_t hits;
- size_t misses;
- size_t collisions;
-#endif
};
-extern PyStatus _PyTypes_InitSlotDefs(void);
+/* For now we hard-code this to a value for which we are confident
+ all the static builtin types will fit (for all builds). */
+#define _Py_MAX_STATIC_BUILTIN_TYPES 200
+
+typedef struct {
+ PyTypeObject *type;
+ int readying;
+ int ready;
+ // XXX tp_dict can probably be statically allocated,
+ // instead of dynamically and stored on the interpreter.
+ PyObject *tp_dict;
+ PyObject *tp_subclasses;
+ /* We never clean up weakrefs for static builtin types since
+ they will effectively never get triggered. However, there
+ are also some diagnostic uses for the list of weakrefs,
+ so we still keep it. */
+ PyObject *tp_weaklist;
+} static_builtin_state;
+
+struct types_state {
+ /* Used to set PyTypeObject.tp_version_tag.
+ It starts at _Py_MAX_GLOBAL_TYPE_VERSION_TAG + 1,
+ where all those lower numbers are used for core static types. */
+ unsigned int next_version_tag;
+
+ struct type_cache type_cache;
+ size_t num_builtins_initialized;
+ static_builtin_state builtins[_Py_MAX_STATIC_BUILTIN_TYPES];
+};
+
+
+/* runtime lifecycle */
+
+extern PyStatus _PyTypes_InitTypes(PyInterpreterState *);
+extern void _PyTypes_FiniTypes(PyInterpreterState *);
+extern void _PyTypes_Fini(PyInterpreterState *);
+
+
+/* other API */
+
+/* Length of array of slotdef pointers used to store slots with the
+ same __name__. There should be at most MAX_EQUIV-1 slotdef entries with
+ the same __name__, for any __name__. Since that's a static property, it is
+ appropriate to declare fixed-size arrays for this. */
+#define MAX_EQUIV 10
+
+typedef struct wrapperbase pytype_slotdef;
+
+
+static inline PyObject **
+_PyStaticType_GET_WEAKREFS_LISTPTR(static_builtin_state *state)
+{
+ assert(state != NULL);
+ return &state->tp_weaklist;
+}
+
+/* Like PyType_GetModuleState, but skips verification
+ * that type is a heap type with an associated module */
+static inline void *
+_PyType_GetModuleState(PyTypeObject *type)
+{
+ assert(PyType_Check(type));
+ assert(type->tp_flags & Py_TPFLAGS_HEAPTYPE);
+ PyHeapTypeObject *et = (PyHeapTypeObject *)type;
+ assert(et->ht_module);
+ PyModuleObject *mod = (PyModuleObject *)(et->ht_module);
+ assert(mod != NULL);
+ return mod->md_state;
+}
+
+
+extern int _PyStaticType_InitBuiltin(PyInterpreterState *, PyTypeObject *type);
+extern static_builtin_state * _PyStaticType_GetState(PyInterpreterState *, PyTypeObject *);
+extern void _PyStaticType_ClearWeakRefs(PyInterpreterState *, PyTypeObject *type);
+extern void _PyStaticType_Dealloc(PyInterpreterState *, PyTypeObject *);
+
+PyAPI_FUNC(PyObject *) _PyType_GetDict(PyTypeObject *);
+extern PyObject * _PyType_GetBases(PyTypeObject *type);
+extern PyObject * _PyType_GetMRO(PyTypeObject *type);
+extern PyObject* _PyType_GetSubclasses(PyTypeObject *);
+extern int _PyType_HasSubclasses(PyTypeObject *);
+
+// PyType_Ready() must be called if _PyType_IsReady() is false.
+// See also the Py_TPFLAGS_READY flag.
+static inline int
+_PyType_IsReady(PyTypeObject *type)
+{
+ return _PyType_GetDict(type) != NULL;
+}
+
+PyObject *
+_Py_type_getattro_impl(PyTypeObject *type, PyObject *name, int *suppress_missing_attribute);
+PyObject *
+_Py_type_getattro(PyTypeObject *type, PyObject *name);
+
+extern PyObject* _Py_BaseObject_RichCompare(PyObject* self, PyObject* other, int op);
+
+PyObject *_Py_slot_tp_getattro(PyObject *self, PyObject *name);
+PyObject *_Py_slot_tp_getattr_hook(PyObject *self, PyObject *name);
-extern void _PyStaticType_Dealloc(PyTypeObject *type);
+PyAPI_DATA(PyTypeObject) _PyBufferWrapper_Type;
+PyObject *
+_PySuper_Lookup(PyTypeObject *su_type, PyObject *su_obj, PyObject *name, int *meth_found);
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/internal/pycore_typevarobject.h b/contrib/tools/python3/src/Include/internal/pycore_typevarobject.h
new file mode 100644
index 0000000000..c9fa97d682
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_typevarobject.h
@@ -0,0 +1,24 @@
+#ifndef Py_INTERNAL_TYPEVAROBJECT_H
+#define Py_INTERNAL_TYPEVAROBJECT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+extern PyObject *_Py_make_typevar(PyObject *, PyObject *, PyObject *);
+extern PyObject *_Py_make_paramspec(PyThreadState *, PyObject *);
+extern PyObject *_Py_make_typevartuple(PyThreadState *, PyObject *);
+extern PyObject *_Py_make_typealias(PyThreadState *, PyObject *);
+extern PyObject *_Py_subscript_generic(PyThreadState *, PyObject *);
+extern int _Py_initialize_generic(PyInterpreterState *);
+extern void _Py_clear_generic_types(PyInterpreterState *);
+
+extern PyTypeObject _PyTypeAlias_Type;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_TYPEVAROBJECT_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_unicodeobject.h b/contrib/tools/python3/src/Include/internal/pycore_unicodeobject.h
index 4bee2419fb..1bb0f366e7 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_unicodeobject.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_unicodeobject.h
@@ -9,8 +9,10 @@ extern "C" {
#endif
#include "pycore_fileutils.h" // _Py_error_handler
+#include "pycore_ucnhash.h" // _PyUnicode_Name_CAPI
void _PyUnicode_ExactDealloc(PyObject *op);
+Py_ssize_t _PyUnicode_InternedSize(void);
/* runtime lifecycle */
@@ -19,7 +21,6 @@ extern PyStatus _PyUnicode_InitGlobalObjects(PyInterpreterState *);
extern PyStatus _PyUnicode_InitTypes(PyInterpreterState *);
extern void _PyUnicode_Fini(PyInterpreterState *);
extern void _PyUnicode_FiniTypes(PyInterpreterState *);
-extern void _PyStaticUnicode_Dealloc(PyObject *);
extern PyTypeObject _PyUnicodeASCIIIter_Type;
@@ -32,6 +33,10 @@ struct _Py_unicode_runtime_ids {
Py_ssize_t next_index;
};
+struct _Py_unicode_runtime_state {
+ struct _Py_unicode_runtime_ids ids;
+};
+
/* fs_codec.encoding is initialized to NULL.
Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */
struct _Py_unicode_fs_codec {
@@ -49,10 +54,13 @@ struct _Py_unicode_ids {
struct _Py_unicode_state {
struct _Py_unicode_fs_codec fs_codec;
+ _PyUnicode_Name_CAPI *ucnhash_capi;
+
// Unicode identifiers (_Py_Identifier): see _PyUnicode_FromId()
struct _Py_unicode_ids ids;
};
+extern void _PyUnicode_InternInPlace(PyInterpreterState *interp, PyObject **p);
extern void _PyUnicode_ClearInterned(PyInterpreterState *interp);
diff --git a/contrib/tools/python3/src/Include/internal/pycore_unicodeobject_generated.h b/contrib/tools/python3/src/Include/internal/pycore_unicodeobject_generated.h
new file mode 100644
index 0000000000..9b470094b7
--- /dev/null
+++ b/contrib/tools/python3/src/Include/internal/pycore_unicodeobject_generated.h
@@ -0,0 +1,2093 @@
+#ifndef Py_INTERNAL_UNICODEOBJECT_GENERATED_H
+#define Py_INTERNAL_UNICODEOBJECT_GENERATED_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+/* The following is auto-generated by Tools/build/generate_global_objects.py. */
+static inline void
+_PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
+ PyObject *string;
+ string = &_Py_ID(CANCELLED);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(FINISHED);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(False);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(JSONDecodeError);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(PENDING);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(Py_Repr);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(TextIOWrapper);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(True);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(WarningMessage);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_WindowsConsoleIO);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__IOBase_closed);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__abc_tpflags__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__abs__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__abstractmethods__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__add__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__aenter__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__aexit__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__aiter__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__all__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__and__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__anext__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__annotations__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__args__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__asyncio_running_event_loop__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__await__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__bases__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__bool__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__buffer__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__build_class__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__builtins__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__bytes__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__call__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__cantrace__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__class__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__class_getitem__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__classcell__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__classdict__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__classdictcell__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__complex__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__contains__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__copy__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__ctypes_from_outparam__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__del__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__delattr__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__delete__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__delitem__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__dict__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__dictoffset__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__dir__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__divmod__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__doc__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__enter__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__eq__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__exit__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__file__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__float__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__floordiv__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__format__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__fspath__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__ge__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__get__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__getattr__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__getattribute__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__getinitargs__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__getitem__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__getnewargs__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__getnewargs_ex__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__getstate__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__gt__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__hash__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__iadd__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__iand__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__ifloordiv__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__ilshift__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__imatmul__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__imod__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__import__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__imul__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__index__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__init__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__init_subclass__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__instancecheck__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__int__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__invert__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__ior__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__ipow__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__irshift__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__isabstractmethod__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__isub__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__iter__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__itruediv__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__ixor__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__le__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__len__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__length_hint__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__lltrace__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__loader__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__lshift__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__lt__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__main__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__matmul__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__missing__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__mod__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__module__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__mro_entries__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__mul__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__name__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__ne__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__neg__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__new__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__newobj__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__newobj_ex__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__next__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__notes__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__or__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__orig_class__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__origin__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__package__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__parameters__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__path__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__pos__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__pow__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__prepare__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__qualname__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__radd__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rand__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rdivmod__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__reduce__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__reduce_ex__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__release_buffer__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__repr__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__reversed__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rfloordiv__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rlshift__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rmatmul__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rmod__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rmul__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__ror__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__round__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rpow__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rrshift__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rshift__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rsub__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rtruediv__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__rxor__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__set__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__set_name__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__setattr__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__setitem__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__setstate__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__sizeof__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__slotnames__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__slots__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__spec__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__str__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__sub__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__subclasscheck__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__subclasshook__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__truediv__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__trunc__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__type_params__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__typing_is_unpacked_typevartuple__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__typing_prepare_subst__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__typing_subst__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__typing_unpacked_tuple_args__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__warningregistry__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__weaklistoffset__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__weakref__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(__xor__);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_abc_impl);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_abstract_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_active);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_annotation);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_anonymous_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_argtypes_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_as_parameter_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_asyncio_future_blocking);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_blksize);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_bootstrap);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_check_retval_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_dealloc_warn);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_feature_version);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_fields_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_finalizing);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_find_and_load);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_fix_up_module);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_flags_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_get_sourcefile);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_handle_fromlist);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_initializing);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_io);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_is_text_encoding);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_length_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_limbo);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_lock_unlock_module);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_loop);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_needs_com_addref_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_pack_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_restype_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_showwarnmsg);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_shutdown);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_slotnames);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_strptime_datetime);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_swappedbytes_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_type_);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_uninitialized_submodules);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_warn_unawaited_coroutine);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(_xoptions);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(a);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(abs_tol);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(access);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(add);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(add_done_callback);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(after_in_child);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(after_in_parent);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(aggregate_class);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(alias);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(append);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(arg);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(argdefs);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(args);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(arguments);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(argv);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(as_integer_ratio);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(ast);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(attribute);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(authorizer_callback);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(autocommit);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(b);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(backtick);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(base);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(before);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(big);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(binary_form);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(block);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(bound);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(buffer);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(buffer_callback);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(buffer_size);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(buffering);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(buffers);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(bufsize);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(builtins);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(byteorder);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(bytes);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(bytes_per_sep);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(c);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(c_call);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(c_exception);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(c_return);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(cached_statements);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(cadata);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(cafile);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(call);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(call_exception_handler);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(call_soon);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(cancel);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(capath);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(category);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(cb_type);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(certfile);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(check_same_thread);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(clear);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(close);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(closed);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(closefd);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(closure);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_argcount);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_cellvars);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_code);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_consts);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_exceptiontable);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_filename);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_firstlineno);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_flags);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_freevars);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_kwonlyargcount);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_linetable);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_name);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_names);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_nlocals);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_posonlyargcount);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_qualname);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_stacksize);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(co_varnames);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(code);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(command);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(comment_factory);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(compile_mode);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(consts);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(context);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(contravariant);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(cookie);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(copy);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(copyreg);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(coro);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(count);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(covariant);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(cwd);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(d);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(data);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(database);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(decode);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(decoder);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(default);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(defaultaction);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(delete);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(depth);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(detect_types);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(deterministic);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(device);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(dict);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(dictcomp);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(difference_update);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(digest);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(digest_size);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(digestmod);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(dir_fd);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(discard);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(dispatch_table);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(displayhook);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(dklen);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(doc);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(dont_inherit);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(dst);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(dst_dir_fd);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(duration);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(e);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(eager_start);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(effective_ids);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(element_factory);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(encode);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(encoding);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(end);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(end_lineno);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(end_offset);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(endpos);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(entrypoint);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(env);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(errors);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(event);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(eventmask);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(exc_type);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(exc_value);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(excepthook);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(exception);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(existing_file_name);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(exp);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(extend);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(extra_tokens);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(facility);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(factory);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(false);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(family);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fanout);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fd);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fd2);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fdel);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fget);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(file);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(file_actions);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(filename);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fileno);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(filepath);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fillvalue);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(filters);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(final);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(find_class);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fix_imports);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(flags);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(flush);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(follow_symlinks);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(format);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(frequency);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(from_param);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fromlist);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fromtimestamp);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fromutc);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(fset);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(func);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(future);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(generation);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(genexpr);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(get);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(get_debug);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(get_event_loop);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(get_loop);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(get_source);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(getattr);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(getstate);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(gid);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(globals);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(groupindex);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(groups);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(handle);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(hash_name);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(header);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(headers);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(hi);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(hook);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(id);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(ident);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(ignore);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(imag);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(importlib);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(in_fd);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(incoming);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(indexgroup);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(inf);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(infer_variance);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(inheritable);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(initial);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(initial_bytes);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(initial_value);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(initval);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(inner_size);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(input);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(insert_comments);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(insert_pis);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(instructions);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(intern);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(intersection);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(is_running);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(isatty);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(isinstance);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(isoformat);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(isolation_level);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(istext);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(item);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(items);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(iter);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(iterable);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(iterations);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(join);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(jump);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(keepends);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(key);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(keyfile);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(keys);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(kind);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(kw);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(kw1);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(kw2);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(lambda);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(last);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(last_exc);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(last_node);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(last_traceback);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(last_type);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(last_value);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(latin1);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(leaf_size);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(len);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(length);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(level);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(limit);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(line);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(line_buffering);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(lineno);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(listcomp);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(little);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(lo);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(locale);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(locals);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(logoption);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(loop);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(mapping);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(match);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(max_length);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(maxdigits);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(maxevents);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(maxmem);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(maxsplit);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(maxvalue);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(memLevel);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(memlimit);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(message);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(metaclass);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(metadata);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(method);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(mod);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(mode);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(module);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(module_globals);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(modules);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(mro);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(msg);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(mycmp);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(n);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(n_arg);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(n_fields);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(n_sequence_fields);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(n_unnamed_fields);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(name);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(name_from);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(namespace_separator);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(namespaces);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(narg);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(ndigits);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(new_file_name);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(new_limit);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(newline);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(newlines);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(next);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(nlocals);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(node_depth);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(node_offset);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(ns);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(nstype);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(nt);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(null);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(number);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(obj);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(object);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(offset);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(offset_dst);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(offset_src);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(on_type_read);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(onceregistry);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(only_keys);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(oparg);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(opcode);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(open);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(opener);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(operation);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(optimize);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(options);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(order);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(origin);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(out_fd);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(outgoing);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(overlapped);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(owner);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(p);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(pages);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(parent);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(password);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(path);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(pattern);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(peek);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(persistent_id);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(persistent_load);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(person);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(pi_factory);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(pid);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(policy);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(pos);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(pos1);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(pos2);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(posix);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(print_file_and_line);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(priority);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(progress);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(progress_handler);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(progress_routine);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(proto);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(protocol);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(ps1);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(ps2);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(query);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(quotetabs);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(r);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(raw);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(read);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(read1);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(readable);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(readall);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(readinto);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(readinto1);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(readline);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(readonly);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(real);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(reducer_override);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(registry);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(rel_tol);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(release);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(reload);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(repl);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(replace);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(reserved);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(reset);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(resetids);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(return);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(reverse);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(reversed);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(s);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(salt);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(sched_priority);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(scheduler);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(seek);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(seekable);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(selectors);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(self);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(send);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(sep);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(sequence);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(server_hostname);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(server_side);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(session);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(setcomp);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(setpgroup);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(setsid);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(setsigdef);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(setsigmask);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(setstate);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(shape);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(show_cmd);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(signed);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(size);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(sizehint);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(skip_file_prefixes);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(sleep);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(sock);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(sort);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(sound);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(source);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(source_traceback);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(src);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(src_dir_fd);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(stacklevel);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(start);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(statement);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(status);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(stderr);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(stdin);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(stdout);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(step);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(steps);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(store_name);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(strategy);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(strftime);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(strict);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(strict_mode);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(string);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(sub_key);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(symmetric_difference_update);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(tabsize);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(tag);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(target);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(target_is_directory);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(task);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(tb_frame);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(tb_lasti);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(tb_lineno);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(tb_next);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(tell);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(template);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(term);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(text);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(threading);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(throw);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(timeout);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(times);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(timetuple);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(top);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(trace_callback);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(traceback);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(trailers);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(translate);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(true);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(truncate);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(twice);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(txt);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(type);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(type_params);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(tz);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(tzname);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(uid);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(unlink);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(unraisablehook);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(uri);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(usedforsecurity);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(value);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(values);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(version);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(volume);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(warnings);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(warnoptions);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(wbits);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(week);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(weekday);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(which);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(who);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(withdata);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(writable);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(write);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(write_through);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(x);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(year);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+ string = &_Py_ID(zdict);
+ assert(_PyUnicode_CheckConsistency(string, 1));
+ _PyUnicode_InternInPlace(interp, &string);
+}
+/* End auto-generated code */
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_UNICODEOBJECT_GENERATED_H */
diff --git a/contrib/tools/python3/src/Include/internal/pycore_unionobject.h b/contrib/tools/python3/src/Include/internal/pycore_unionobject.h
index a9ed5651a4..87264635b6 100644
--- a/contrib/tools/python3/src/Include/internal/pycore_unionobject.h
+++ b/contrib/tools/python3/src/Include/internal/pycore_unionobject.h
@@ -9,10 +9,10 @@ extern "C" {
#endif
extern PyTypeObject _PyUnion_Type;
-#define _PyUnion_Check(op) Py_IS_TYPE(op, &_PyUnion_Type)
+#define _PyUnion_Check(op) Py_IS_TYPE((op), &_PyUnion_Type)
extern PyObject *_Py_union_type_or(PyObject *, PyObject *);
-#define _PyGenericAlias_Check(op) PyObject_TypeCheck(op, &Py_GenericAliasType)
+#define _PyGenericAlias_Check(op) PyObject_TypeCheck((op), &Py_GenericAliasType)
extern PyObject *_Py_subs_parameters(PyObject *, PyObject *, PyObject *, PyObject *);
extern PyObject *_Py_make_parameters(PyObject *);
extern PyObject *_Py_union_args(PyObject *self);
diff --git a/contrib/tools/python3/src/Include/interpreteridobject.h b/contrib/tools/python3/src/Include/interpreteridobject.h
new file mode 100644
index 0000000000..8432632f33
--- /dev/null
+++ b/contrib/tools/python3/src/Include/interpreteridobject.h
@@ -0,0 +1,17 @@
+#ifndef Py_INTERPRETERIDOBJECT_H
+#define Py_INTERPRETERIDOBJECT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_LIMITED_API
+# define Py_CPYTHON_INTERPRETERIDOBJECT_H
+# include "cpython/interpreteridobject.h"
+# undef Py_CPYTHON_INTERPRETERIDOBJECT_H
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERPRETERIDOBJECT_H */
diff --git a/contrib/tools/python3/src/Include/iterobject.h b/contrib/tools/python3/src/Include/iterobject.h
index 6454611aeb..fff30f7176 100644
--- a/contrib/tools/python3/src/Include/iterobject.h
+++ b/contrib/tools/python3/src/Include/iterobject.h
@@ -11,12 +11,12 @@ PyAPI_DATA(PyTypeObject) PyCallIter_Type;
extern PyTypeObject _PyAnextAwaitable_Type;
#endif
-#define PySeqIter_Check(op) Py_IS_TYPE(op, &PySeqIter_Type)
+#define PySeqIter_Check(op) Py_IS_TYPE((op), &PySeqIter_Type)
PyAPI_FUNC(PyObject *) PySeqIter_New(PyObject *);
-#define PyCallIter_Check(op) Py_IS_TYPE(op, &PyCallIter_Type)
+#define PyCallIter_Check(op) Py_IS_TYPE((op), &PyCallIter_Type)
PyAPI_FUNC(PyObject *) PyCallIter_New(PyObject *, PyObject *);
diff --git a/contrib/tools/python3/src/Include/listobject.h b/contrib/tools/python3/src/Include/listobject.h
index eff42c188f..6b7041ba0b 100644
--- a/contrib/tools/python3/src/Include/listobject.h
+++ b/contrib/tools/python3/src/Include/listobject.h
@@ -23,7 +23,7 @@ PyAPI_DATA(PyTypeObject) PyListRevIter_Type;
#define PyList_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
-#define PyList_CheckExact(op) Py_IS_TYPE(op, &PyList_Type)
+#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
PyAPI_FUNC(PyObject *) PyList_New(Py_ssize_t size);
PyAPI_FUNC(Py_ssize_t) PyList_Size(PyObject *);
diff --git a/contrib/tools/python3/src/Include/longobject.h b/contrib/tools/python3/src/Include/longobject.h
index 81ba1239a6..e090dd024a 100644
--- a/contrib/tools/python3/src/Include/longobject.h
+++ b/contrib/tools/python3/src/Include/longobject.h
@@ -7,11 +7,11 @@ extern "C" {
/* Long (arbitrary precision) integer object interface */
-PyAPI_DATA(PyTypeObject) PyLong_Type;
+// PyLong_Type is declared by object.h
#define PyLong_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
-#define PyLong_CheckExact(op) Py_IS_TYPE(op, &PyLong_Type)
+#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
PyAPI_FUNC(PyObject *) PyLong_FromLong(long);
PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long);
diff --git a/contrib/tools/python3/src/Include/memoryobject.h b/contrib/tools/python3/src/Include/memoryobject.h
index 154397ce1e..2c9146aa2b 100644
--- a/contrib/tools/python3/src/Include/memoryobject.h
+++ b/contrib/tools/python3/src/Include/memoryobject.h
@@ -6,19 +6,9 @@
extern "C" {
#endif
-#ifndef Py_LIMITED_API
-PyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type;
-#endif
PyAPI_DATA(PyTypeObject) PyMemoryView_Type;
-#define PyMemoryView_Check(op) Py_IS_TYPE(op, &PyMemoryView_Type)
-
-#ifndef Py_LIMITED_API
-/* Get a pointer to the memoryview's private copy of the exporter's buffer. */
-#define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view)
-/* Get a pointer to the exporting object (this may be NULL!). */
-#define PyMemoryView_GET_BASE(op) (((PyMemoryViewObject *)(op))->view.obj)
-#endif
+#define PyMemoryView_Check(op) Py_IS_TYPE((op), &PyMemoryView_Type)
PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
@@ -32,38 +22,10 @@ PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
int buffertype,
char order);
-
-/* The structs are declared here so that macros can work, but they shouldn't
- be considered public. Don't access their fields directly, use the macros
- and functions instead! */
#ifndef Py_LIMITED_API
-#define _Py_MANAGED_BUFFER_RELEASED 0x001 /* access to exporter blocked */
-#define _Py_MANAGED_BUFFER_FREE_FORMAT 0x002 /* free format */
-typedef struct {
- PyObject_HEAD
- int flags; /* state flags */
- Py_ssize_t exports; /* number of direct memoryview exports */
- Py_buffer master; /* snapshot buffer obtained from the original exporter */
-} _PyManagedBufferObject;
-
-
-/* memoryview state flags */
-#define _Py_MEMORYVIEW_RELEASED 0x001 /* access to master buffer blocked */
-#define _Py_MEMORYVIEW_C 0x002 /* C-contiguous layout */
-#define _Py_MEMORYVIEW_FORTRAN 0x004 /* Fortran contiguous layout */
-#define _Py_MEMORYVIEW_SCALAR 0x008 /* scalar: ndim = 0 */
-#define _Py_MEMORYVIEW_PIL 0x010 /* PIL-style layout */
-
-typedef struct {
- PyObject_VAR_HEAD
- _PyManagedBufferObject *mbuf; /* managed buffer */
- Py_hash_t hash; /* hash value for read-only views */
- int flags; /* state flags */
- Py_ssize_t exports; /* number of buffer re-exports */
- Py_buffer view; /* private copy of the exporter's view */
- PyObject *weakreflist;
- Py_ssize_t ob_array[1]; /* shape, strides, suboffsets */
-} PyMemoryViewObject;
+# define Py_CPYTHON_MEMORYOBJECT_H
+# include "cpython/memoryobject.h"
+# undef Py_CPYTHON_MEMORYOBJECT_H
#endif
#ifdef __cplusplus
diff --git a/contrib/tools/python3/src/Include/methodobject.h b/contrib/tools/python3/src/Include/methodobject.h
index c971d78a64..72af5ad933 100644
--- a/contrib/tools/python3/src/Include/methodobject.h
+++ b/contrib/tools/python3/src/Include/methodobject.h
@@ -13,8 +13,8 @@ extern "C" {
PyAPI_DATA(PyTypeObject) PyCFunction_Type;
-#define PyCFunction_CheckExact(op) Py_IS_TYPE(op, &PyCFunction_Type)
-#define PyCFunction_Check(op) PyObject_TypeCheck(op, &PyCFunction_Type)
+#define PyCFunction_CheckExact(op) Py_IS_TYPE((op), &PyCFunction_Type)
+#define PyCFunction_Check(op) PyObject_TypeCheck((op), &PyCFunction_Type)
typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
typedef PyObject *(*_PyCFunctionFast) (PyObject *, PyObject *const *, Py_ssize_t);
diff --git a/contrib/tools/python3/src/Include/modsupport.h b/contrib/tools/python3/src/Include/modsupport.h
index b3813a7e31..1592bd0db4 100644
--- a/contrib/tools/python3/src/Include/modsupport.h
+++ b/contrib/tools/python3/src/Include/modsupport.h
@@ -37,8 +37,6 @@ PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...);
PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...);
-#define ANY_VARARGS(n) (n == PY_SSIZE_T_MAX)
-
PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030a0000
@@ -60,8 +58,8 @@ PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char
PyAPI_FUNC(int) PyModule_AddType(PyObject *module, PyTypeObject *type);
#endif /* Py_LIMITED_API */
-#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c)
-#define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c)
+#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
+#define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant((m), #c, (c))
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* New in 3.5 */
@@ -136,10 +134,10 @@ PyAPI_FUNC(PyObject *) PyModule_Create2(PyModuleDef*, int apiver);
#ifdef Py_LIMITED_API
#define PyModule_Create(module) \
- PyModule_Create2(module, PYTHON_ABI_VERSION)
+ PyModule_Create2((module), PYTHON_ABI_VERSION)
#else
#define PyModule_Create(module) \
- PyModule_Create2(module, PYTHON_API_VERSION)
+ PyModule_Create2((module), PYTHON_API_VERSION)
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
@@ -150,10 +148,10 @@ PyAPI_FUNC(PyObject *) PyModule_FromDefAndSpec2(PyModuleDef *def,
#ifdef Py_LIMITED_API
#define PyModule_FromDefAndSpec(module, spec) \
- PyModule_FromDefAndSpec2(module, spec, PYTHON_ABI_VERSION)
+ PyModule_FromDefAndSpec2((module), (spec), PYTHON_ABI_VERSION)
#else
#define PyModule_FromDefAndSpec(module, spec) \
- PyModule_FromDefAndSpec2(module, spec, PYTHON_API_VERSION)
+ PyModule_FromDefAndSpec2((module), (spec), PYTHON_API_VERSION)
#endif /* Py_LIMITED_API */
#endif /* New in 3.5 */
diff --git a/contrib/tools/python3/src/Include/moduleobject.h b/contrib/tools/python3/src/Include/moduleobject.h
index 75abd2cf2b..354d133e45 100644
--- a/contrib/tools/python3/src/Include/moduleobject.h
+++ b/contrib/tools/python3/src/Include/moduleobject.h
@@ -9,8 +9,8 @@ extern "C" {
PyAPI_DATA(PyTypeObject) PyModule_Type;
-#define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type)
-#define PyModule_CheckExact(op) Py_IS_TYPE(op, &PyModule_Type)
+#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
+#define PyModule_CheckExact(op) Py_IS_TYPE((op), &PyModule_Type)
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(PyObject *) PyModule_NewObject(
@@ -43,8 +43,22 @@ PyAPI_DATA(PyTypeObject) PyModuleDef_Type;
typedef struct PyModuleDef_Base {
PyObject_HEAD
+ /* The function used to re-initialize the module.
+ This is only set for legacy (single-phase init) extension modules
+ and only used for those that support multiple initializations
+ (m_size >= 0).
+ It is set by _PyImport_LoadDynamicModuleWithSpec()
+ and _imp.create_builtin(). */
PyObject* (*m_init)(void);
+ /* The module's index into its interpreter's modules_by_index cache.
+ This is set for all extension modules but only used for legacy ones.
+ (See PyInterpreterState.modules_by_index for more info.)
+ It is set by PyModuleDef_Init(). */
Py_ssize_t m_index;
+ /* A copy of the module's __dict__ after the first time it was loaded.
+ This is only set/used for legacy modules that do not support
+ multiple initializations.
+ It is set by _PyImport_FixupExtensionObject(). */
PyObject* m_copy;
} PyModuleDef_Base;
@@ -64,13 +78,23 @@ struct PyModuleDef_Slot {
#define Py_mod_create 1
#define Py_mod_exec 2
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030c0000
+# define Py_mod_multiple_interpreters 3
+#endif
#ifndef Py_LIMITED_API
-#define _Py_mod_LAST_SLOT 2
+#define _Py_mod_LAST_SLOT 3
#endif
#endif /* New in 3.5 */
+/* for Py_mod_multiple_interpreters: */
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030c0000
+# define Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED ((void *)0)
+# define Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED ((void *)1)
+# define Py_MOD_PER_INTERPRETER_GIL_SUPPORTED ((void *)2)
+#endif
+
struct PyModuleDef {
PyModuleDef_Base m_base;
const char* m_name;
diff --git a/contrib/tools/python3/src/Include/object.h b/contrib/tools/python3/src/Include/object.h
index f2af428e2b..5c30c77bc2 100644
--- a/contrib/tools/python3/src/Include/object.h
+++ b/contrib/tools/python3/src/Include/object.h
@@ -51,6 +51,8 @@ A standard interface exists for objects that contain an array of items
whose size is determined when the object is allocated.
*/
+#include "pystats.h"
+
/* Py_DEBUG implies Py_REF_DEBUG. */
#if defined(Py_DEBUG) && !defined(Py_REF_DEBUG)
# define Py_REF_DEBUG
@@ -76,12 +78,76 @@ whose size is determined when the object is allocated.
/* PyObject_HEAD defines the initial segment of every PyObject. */
#define PyObject_HEAD PyObject ob_base;
-#define PyObject_HEAD_INIT(type) \
- { _PyObject_EXTRA_INIT \
- 1, type },
+/*
+Immortalization:
+
+The following indicates the immortalization strategy depending on the amount
+of available bits in the reference count field. All strategies are backwards
+compatible but the specific reference count value or immortalization check
+might change depending on the specializations for the underlying system.
+
+Proper deallocation of immortal instances requires distinguishing between
+statically allocated immortal instances vs those promoted by the runtime to be
+immortal. The latter should be the only instances that require
+cleanup during runtime finalization.
+*/
+
+#if SIZEOF_VOID_P > 4
+/*
+In 64+ bit systems, an object will be marked as immortal by setting all of the
+lower 32 bits of the reference count field, which is equal to: 0xFFFFFFFF
+
+Using the lower 32 bits makes the value backwards compatible by allowing
+C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely
+increase and decrease the objects reference count. The object would lose its
+immortality, but the execution would still be correct.
+
+Reference count increases will use saturated arithmetic, taking advantage of
+having all the lower 32 bits set, which will avoid the reference count to go
+beyond the refcount limit. Immortality checks for reference count decreases will
+be done by checking the bit sign flag in the lower 32 bits.
+*/
+#define _Py_IMMORTAL_REFCNT UINT_MAX
+
+#else
+/*
+In 32 bit systems, an object will be marked as immortal by setting all of the
+lower 30 bits of the reference count field, which is equal to: 0x3FFFFFFF
-#define PyVarObject_HEAD_INIT(type, size) \
- { PyObject_HEAD_INIT(type) size },
+Using the lower 30 bits makes the value backwards compatible by allowing
+C-Extensions without the updated checks in Py_INCREF and Py_DECREF to safely
+increase and decrease the objects reference count. The object would lose its
+immortality, but the execution would still be correct.
+
+Reference count increases and decreases will first go through an immortality
+check by comparing the reference count field to the immortality reference count.
+*/
+#define _Py_IMMORTAL_REFCNT (UINT_MAX >> 2)
+#endif
+
+// Make all internal uses of PyObject_HEAD_INIT immortal while preserving the
+// C-API expectation that the refcnt will be set to 1.
+#ifdef Py_BUILD_CORE
+#define PyObject_HEAD_INIT(type) \
+ { \
+ _PyObject_EXTRA_INIT \
+ { _Py_IMMORTAL_REFCNT }, \
+ (type) \
+ },
+#else
+#define PyObject_HEAD_INIT(type) \
+ { \
+ _PyObject_EXTRA_INIT \
+ { 1 }, \
+ (type) \
+ },
+#endif /* Py_BUILD_CORE */
+
+#define PyVarObject_HEAD_INIT(type, size) \
+ { \
+ PyObject_HEAD_INIT(type) \
+ (size) \
+ },
/* PyObject_VAR_HEAD defines the initial segment of all variable-size
* container objects. These end with a declaration of an array with 1
@@ -99,7 +165,28 @@ whose size is determined when the object is allocated.
*/
struct _object {
_PyObject_HEAD_EXTRA
- Py_ssize_t ob_refcnt;
+
+#if (defined(__GNUC__) || defined(__clang__)) \
+ && !(defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L)
+ // On C99 and older, anonymous union is a GCC and clang extension
+ __extension__
+#endif
+#ifdef _MSC_VER
+ // Ignore MSC warning C4201: "nonstandard extension used:
+ // nameless struct/union"
+ __pragma(warning(push))
+ __pragma(warning(disable: 4201))
+#endif
+ union {
+ Py_ssize_t ob_refcnt;
+#if SIZEOF_VOID_P > 4
+ PY_UINT32_T ob_refcnt_split[2];
+#endif
+ };
+#ifdef _MSC_VER
+ __pragma(warning(pop))
+#endif
+
PyTypeObject *ob_type;
};
@@ -136,8 +223,13 @@ static inline PyTypeObject* Py_TYPE(PyObject *ob) {
# define Py_TYPE(ob) Py_TYPE(_PyObject_CAST(ob))
#endif
+PyAPI_DATA(PyTypeObject) PyLong_Type;
+PyAPI_DATA(PyTypeObject) PyBool_Type;
+
// bpo-39573: The Py_SET_SIZE() function must be used to set an object size.
static inline Py_ssize_t Py_SIZE(PyObject *ob) {
+ assert(ob->ob_type != &PyLong_Type);
+ assert(ob->ob_type != &PyBool_Type);
PyVarObject *var_ob = _PyVarObject_CAST(ob);
return var_ob->ob_size;
}
@@ -145,20 +237,36 @@ static inline Py_ssize_t Py_SIZE(PyObject *ob) {
# define Py_SIZE(ob) Py_SIZE(_PyObject_CAST(ob))
#endif
+static inline Py_ALWAYS_INLINE int _Py_IsImmortal(PyObject *op)
+{
+#if SIZEOF_VOID_P > 4
+ return _Py_CAST(PY_INT32_T, op->ob_refcnt) < 0;
+#else
+ return op->ob_refcnt == _Py_IMMORTAL_REFCNT;
+#endif
+}
+#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
static inline int Py_IS_TYPE(PyObject *ob, PyTypeObject *type) {
return Py_TYPE(ob) == type;
}
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define Py_IS_TYPE(ob, type) Py_IS_TYPE(_PyObject_CAST(ob), type)
+# define Py_IS_TYPE(ob, type) Py_IS_TYPE(_PyObject_CAST(ob), (type))
#endif
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
+ // This immortal check is for code that is unaware of immortal objects.
+ // The runtime tracks these objects and we should avoid as much
+ // as possible having extensions inadvertently change the refcnt
+ // of an immortalized object.
+ if (_Py_IsImmortal(ob)) {
+ return;
+ }
ob->ob_refcnt = refcnt;
}
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), refcnt)
+# define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
#endif
@@ -169,12 +277,13 @@ static inline void Py_SET_TYPE(PyObject *ob, PyTypeObject *type) {
# define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
#endif
-
static inline void Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) {
+ assert(ob->ob_base.ob_type != &PyLong_Type);
+ assert(ob->ob_base.ob_type != &PyBool_Type);
ob->ob_size = size;
}
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define Py_SET_SIZE(ob, size) Py_SET_SIZE(_PyVarObject_CAST(ob), size)
+# define Py_SET_SIZE(ob, size) Py_SET_SIZE(_PyVarObject_CAST(ob), (size))
#endif
@@ -226,6 +335,11 @@ typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
typedef PyObject *(*newfunc)(PyTypeObject *, PyObject *, PyObject *);
typedef PyObject *(*allocfunc)(PyTypeObject *, Py_ssize_t);
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030c0000 // 3.12
+typedef PyObject *(*vectorcallfunc)(PyObject *callable, PyObject *const *args,
+ size_t nargsf, PyObject *kwnames);
+#endif
+
typedef struct{
int slot; /* slot id, see below */
void *pfunc; /* function pointer */
@@ -255,6 +369,11 @@ PyAPI_FUNC(void *) PyType_GetModuleState(PyTypeObject *);
PyAPI_FUNC(PyObject *) PyType_GetName(PyTypeObject *);
PyAPI_FUNC(PyObject *) PyType_GetQualName(PyTypeObject *);
#endif
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030C0000
+PyAPI_FUNC(PyObject *) PyType_FromMetaclass(PyTypeObject*, PyObject*, PyType_Spec*, PyObject*);
+PyAPI_FUNC(void *) PyObject_GetTypeData(PyObject *obj, PyTypeObject *cls);
+PyAPI_FUNC(Py_ssize_t) PyType_GetTypeDataSize(PyTypeObject *cls);
+#endif
/* Generic type check */
PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *);
@@ -263,7 +382,7 @@ static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
}
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-# define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), type)
+# define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
#endif
PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */
@@ -347,12 +466,21 @@ given type object has a specified feature.
#ifndef Py_LIMITED_API
+/* Track types initialized using _PyStaticType_InitBuiltin(). */
+#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
+
+/* Placement of weakref pointers are managed by the VM, not by the type.
+ * The VM will automatically set tp_weaklistoffset.
+ */
+#define Py_TPFLAGS_MANAGED_WEAKREF (1 << 3)
+
/* Placement of dict (and values) pointers are managed by the VM, not by the type.
- * The VM will automatically set tp_dictoffset. Should not be used for variable sized
- * classes, such as classes that extend tuple.
+ * The VM will automatically set tp_dictoffset.
*/
#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
+#define Py_TPFLAGS_PREHEADER (Py_TPFLAGS_MANAGED_WEAKREF | Py_TPFLAGS_MANAGED_DICT)
+
/* Set if instances of the type object are treated as sequences for pattern matching */
#define Py_TPFLAGS_SEQUENCE (1 << 5)
/* Set if instances of the type object are treated as mappings for pattern matching */
@@ -373,11 +501,13 @@ given type object has a specified feature.
#define Py_TPFLAGS_BASETYPE (1UL << 10)
/* Set if the type implements the vectorcall protocol (PEP 590) */
-#ifndef Py_LIMITED_API
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030C0000
#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
+#ifndef Py_LIMITED_API
// Backwards compatibility alias for API that was provisional in Python 3.8
#define _Py_TPFLAGS_HAVE_VECTORCALL Py_TPFLAGS_HAVE_VECTORCALL
#endif
+#endif
/* Set if the type is 'ready' -- fully initialized */
#define Py_TPFLAGS_READY (1UL << 12)
@@ -409,6 +539,9 @@ given type object has a specified feature.
// subject itself (rather than a mapped attribute on it):
#define _Py_TPFLAGS_MATCH_SELF (1UL << 22)
+/* Items (ob_size*tp_itemsize) are found at the end of an instance's memory */
+#define Py_TPFLAGS_ITEMS_AT_END (1UL << 23)
+
/* These flags are used to determine if a type is a subclass. */
#define Py_TPFLAGS_LONG_SUBCLASS (1UL << 24)
#define Py_TPFLAGS_LIST_SUBCLASS (1UL << 25)
@@ -468,11 +601,12 @@ decision that's up to the implementer of each new type so if you want,
you can count such references to the type object.)
*/
-#ifdef Py_REF_DEBUG
-PyAPI_DATA(Py_ssize_t) _Py_RefTotal;
+#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno,
PyObject *op);
-#endif /* Py_REF_DEBUG */
+PyAPI_FUNC(void) _Py_INCREF_IncRefTotal(void);
+PyAPI_FUNC(void) _Py_DECREF_DecRefTotal(void);
+#endif // Py_REF_DEBUG && !Py_LIMITED_API
PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
@@ -488,52 +622,86 @@ PyAPI_FUNC(void) Py_DecRef(PyObject *);
PyAPI_FUNC(void) _Py_IncRef(PyObject *);
PyAPI_FUNC(void) _Py_DecRef(PyObject *);
-static inline void Py_INCREF(PyObject *op)
+static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
{
-#if defined(Py_REF_DEBUG) && defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030A0000
- // Stable ABI for Python 3.10 built in debug mode.
+#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+ // Stable ABI implements Py_INCREF() as a function call on limited C API
+ // version 3.12 and newer, and on Python built in debug mode. _Py_IncRef()
+ // was added to Python 3.10.0a7, use Py_IncRef() on older Python versions.
+ // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
+# if Py_LIMITED_API+0 >= 0x030a00A7
_Py_IncRef(op);
+# else
+ Py_IncRef(op);
+# endif
#else
// Non-limited C API and limited C API for Python 3.9 and older access
// directly PyObject.ob_refcnt.
+#if SIZEOF_VOID_P > 4
+ // Portable saturated add, branching on the carry flag and set low bits
+ PY_UINT32_T cur_refcnt = op->ob_refcnt_split[PY_BIG_ENDIAN];
+ PY_UINT32_T new_refcnt = cur_refcnt + 1;
+ if (new_refcnt == 0) {
+ return;
+ }
+ op->ob_refcnt_split[PY_BIG_ENDIAN] = new_refcnt;
+#else
+ // Explicitly check immortality against the immortal value
+ if (_Py_IsImmortal(op)) {
+ return;
+ }
+ op->ob_refcnt++;
+#endif
+ _Py_INCREF_STAT_INC();
#ifdef Py_REF_DEBUG
- _Py_RefTotal++;
+ _Py_INCREF_IncRefTotal();
#endif
- op->ob_refcnt++;
#endif
}
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
# define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
#endif
-
-#if defined(Py_REF_DEBUG) && defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030A0000
-// Stable ABI for limited C API version 3.10 of Python debug build
+#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+// Stable ABI implements Py_DECREF() as a function call on limited C API
+// version 3.12 and newer, and on Python built in debug mode. _Py_DecRef() was
+// added to Python 3.10.0a7, use Py_DecRef() on older Python versions.
+// Py_DecRef() accepts NULL whereas _Py_IncRef() doesn't.
static inline void Py_DECREF(PyObject *op) {
+# if Py_LIMITED_API+0 >= 0x030a00A7
_Py_DecRef(op);
+# else
+ Py_DecRef(op);
+# endif
}
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
#elif defined(Py_REF_DEBUG)
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
{
- _Py_RefTotal--;
- if (--op->ob_refcnt != 0) {
- if (op->ob_refcnt < 0) {
- _Py_NegativeRefcount(filename, lineno, op);
- }
+ if (op->ob_refcnt <= 0) {
+ _Py_NegativeRefcount(filename, lineno, op);
}
- else {
+ if (_Py_IsImmortal(op)) {
+ return;
+ }
+ _Py_DECREF_STAT_INC();
+ _Py_DECREF_DecRefTotal();
+ if (--op->ob_refcnt == 0) {
_Py_Dealloc(op);
}
}
#define Py_DECREF(op) Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
#else
-static inline void Py_DECREF(PyObject *op)
+static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
{
// Non-limited C API and limited C API for Python 3.9 and older access
// directly PyObject.ob_refcnt.
+ if (_Py_IsImmortal(op)) {
+ return;
+ }
+ _Py_DECREF_STAT_INC();
if (--op->ob_refcnt == 0) {
_Py_Dealloc(op);
}
@@ -575,15 +743,44 @@ static inline void Py_DECREF(PyObject *op)
* one of those can't cause problems -- but in part that relies on that
* Python integers aren't currently weakly referencable. Best practice is
* to use Py_CLEAR() even if you can't think of a reason for why you need to.
+ *
+ * gh-98724: Use a temporary variable to only evaluate the macro argument once,
+ * to avoid the duplication of side effects if the argument has side effects.
+ *
+ * gh-99701: If the PyObject* type is used with casting arguments to PyObject*,
+ * the code can be miscompiled with strict aliasing because of type punning.
+ * With strict aliasing, a compiler considers that two pointers of different
+ * types cannot read or write the same memory which enables optimization
+ * opportunities.
+ *
+ * If available, use _Py_TYPEOF() to use the 'op' type for temporary variables,
+ * and so avoid type punning. Otherwise, use memcpy() which causes type erasure
+ * and so prevents the compiler to reuse an old cached 'op' value after
+ * Py_CLEAR().
*/
-#define Py_CLEAR(op) \
- do { \
- PyObject *_py_tmp = _PyObject_CAST(op); \
- if (_py_tmp != NULL) { \
- (op) = NULL; \
- Py_DECREF(_py_tmp); \
- } \
+#ifdef _Py_TYPEOF
+#define Py_CLEAR(op) \
+ do { \
+ _Py_TYPEOF(op)* _tmp_op_ptr = &(op); \
+ _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
+ if (_tmp_old_op != NULL) { \
+ *_tmp_op_ptr = _Py_NULL; \
+ Py_DECREF(_tmp_old_op); \
+ } \
} while (0)
+#else
+#define Py_CLEAR(op) \
+ do { \
+ PyObject **_tmp_op_ptr = _Py_CAST(PyObject**, &(op)); \
+ PyObject *_tmp_old_op = (*_tmp_op_ptr); \
+ if (_tmp_old_op != NULL) { \
+ PyObject *_null_ptr = _Py_NULL; \
+ memcpy(_tmp_op_ptr, &_null_ptr, sizeof(PyObject*)); \
+ Py_DECREF(_tmp_old_op); \
+ } \
+ } while (0)
+#endif
+
/* Function to use in case the object pointer can be NULL: */
static inline void Py_XINCREF(PyObject *op)
@@ -651,7 +848,7 @@ PyAPI_FUNC(int) Py_IsNone(PyObject *x);
#define Py_IsNone(x) Py_Is((x), Py_None)
/* Macro for returning Py_None from a function */
-#define Py_RETURN_NONE return Py_NewRef(Py_None)
+#define Py_RETURN_NONE return Py_None
/*
Py_NotImplemented is a singleton used to signal that an operation is
@@ -661,7 +858,7 @@ PyAPI_DATA(PyObject) _Py_NotImplementedStruct; /* Don't use this directly */
#define Py_NotImplemented (&_Py_NotImplementedStruct)
/* Macro for returning Py_NotImplemented from a function */
-#define Py_RETURN_NOTIMPLEMENTED return Py_NewRef(Py_NotImplemented)
+#define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
/* Rich comparison opcodes */
#define Py_LT 0
@@ -772,7 +969,7 @@ PyType_HasFeature(PyTypeObject *type, unsigned long feature)
return ((flags & feature) != 0);
}
-#define PyType_FastSubclass(type, flag) PyType_HasFeature(type, flag)
+#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
static inline int PyType_Check(PyObject *op) {
return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
diff --git a/contrib/tools/python3/src/Include/objimpl.h b/contrib/tools/python3/src/Include/objimpl.h
index 4fa670e71a..ef871c5ea9 100644
--- a/contrib/tools/python3/src/Include/objimpl.h
+++ b/contrib/tools/python3/src/Include/objimpl.h
@@ -135,14 +135,14 @@ PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t);
// Alias to PyObject_New(). In Python 3.8, PyObject_NEW() called directly
// PyObject_MALLOC() with _PyObject_SIZE().
-#define PyObject_NEW(type, typeobj) PyObject_New(type, typeobj)
+#define PyObject_NEW(type, typeobj) PyObject_New(type, (typeobj))
#define PyObject_NewVar(type, typeobj, n) \
( (type *) _PyObject_NewVar((typeobj), (n)) )
// Alias to PyObject_NewVar(). In Python 3.8, PyObject_NEW_VAR() called
// directly PyObject_MALLOC() with _PyObject_VAR_SIZE().
-#define PyObject_NEW_VAR(type, typeobj, n) PyObject_NewVar(type, typeobj, n)
+#define PyObject_NEW_VAR(type, typeobj, n) PyObject_NewVar(type, (typeobj), (n))
/*
@@ -157,6 +157,25 @@ PyAPI_FUNC(int) PyGC_Enable(void);
PyAPI_FUNC(int) PyGC_Disable(void);
PyAPI_FUNC(int) PyGC_IsEnabled(void);
+
+#if !defined(Py_LIMITED_API)
+/* Visit all live GC-capable objects, similar to gc.get_objects(None). The
+ * supplied callback is called on every such object with the void* arg set
+ * to the supplied arg. Returning 0 from the callback ends iteration, returning
+ * 1 allows iteration to continue. Returning any other value may result in
+ * undefined behaviour.
+ *
+ * If new objects are (de)allocated by the callback it is undefined if they
+ * will be visited.
+
+ * Garbage collection is disabled during operation. Explicitly running a
+ * collection in the callback may lead to undefined behaviour e.g. visiting the
+ * same objects multiple times or not at all.
+ */
+typedef int (*gcvisitobjects_t)(PyObject*, void*);
+PyAPI_FUNC(void) PyUnstable_GC_VisitObjects(gcvisitobjects_t callback, void* arg);
+#endif
+
/* Test if a type has a GC head */
#define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
diff --git a/contrib/tools/python3/src/Include/opcode.h b/contrib/tools/python3/src/Include/opcode.h
index 084d34b8c7..9806511ba4 100644
--- a/contrib/tools/python3/src/Include/opcode.h
+++ b/contrib/tools/python3/src/Include/opcode.h
@@ -1,4 +1,4 @@
-// Auto-generated by Tools/scripts/generate_opcode_h.py from Lib/opcode.py
+// Auto-generated by Tools/build/generate_opcode_h.py from Lib/opcode.py
#ifndef Py_OPCODE_H
#define Py_OPCODE_H
@@ -11,12 +11,17 @@ extern "C" {
#define CACHE 0
#define POP_TOP 1
#define PUSH_NULL 2
+#define INTERPRETER_EXIT 3
+#define END_FOR 4
+#define END_SEND 5
#define NOP 9
-#define UNARY_POSITIVE 10
#define UNARY_NEGATIVE 11
#define UNARY_NOT 12
#define UNARY_INVERT 15
+#define RESERVED 17
#define BINARY_SUBSCR 25
+#define BINARY_SLICE 26
+#define STORE_SLICE 27
#define GET_LEN 30
#define MATCH_MAPPING 31
#define MATCH_SEQUENCE 32
@@ -30,21 +35,17 @@ extern "C" {
#define BEFORE_ASYNC_WITH 52
#define BEFORE_WITH 53
#define END_ASYNC_FOR 54
+#define CLEANUP_THROW 55
#define STORE_SUBSCR 60
#define DELETE_SUBSCR 61
#define GET_ITER 68
#define GET_YIELD_FROM_ITER 69
-#define PRINT_EXPR 70
#define LOAD_BUILD_CLASS 71
#define LOAD_ASSERTION_ERROR 74
#define RETURN_GENERATOR 75
-#define LIST_TO_TUPLE 82
#define RETURN_VALUE 83
-#define IMPORT_STAR 84
#define SETUP_ANNOTATIONS 85
-#define YIELD_VALUE 86
-#define ASYNC_GEN_WRAP 87
-#define PREP_RERAISE_STAR 88
+#define LOAD_LOCALS 87
#define POP_EXCEPT 89
#define HAVE_ARGUMENT 90
#define STORE_NAME 90
@@ -68,22 +69,22 @@ extern "C" {
#define IMPORT_NAME 108
#define IMPORT_FROM 109
#define JUMP_FORWARD 110
-#define JUMP_IF_FALSE_OR_POP 111
-#define JUMP_IF_TRUE_OR_POP 112
-#define POP_JUMP_FORWARD_IF_FALSE 114
-#define POP_JUMP_FORWARD_IF_TRUE 115
+#define POP_JUMP_IF_FALSE 114
+#define POP_JUMP_IF_TRUE 115
#define LOAD_GLOBAL 116
#define IS_OP 117
#define CONTAINS_OP 118
#define RERAISE 119
#define COPY 120
+#define RETURN_CONST 121
#define BINARY_OP 122
#define SEND 123
#define LOAD_FAST 124
#define STORE_FAST 125
#define DELETE_FAST 126
-#define POP_JUMP_FORWARD_IF_NOT_NONE 128
-#define POP_JUMP_FORWARD_IF_NONE 129
+#define LOAD_FAST_CHECK 127
+#define POP_JUMP_IF_NOT_NONE 128
+#define POP_JUMP_IF_NONE 129
#define RAISE_VARARGS 130
#define GET_AWAITABLE 131
#define MAKE_FUNCTION 132
@@ -95,106 +96,141 @@ extern "C" {
#define STORE_DEREF 138
#define DELETE_DEREF 139
#define JUMP_BACKWARD 140
+#define LOAD_SUPER_ATTR 141
#define CALL_FUNCTION_EX 142
+#define LOAD_FAST_AND_CLEAR 143
#define EXTENDED_ARG 144
#define LIST_APPEND 145
#define SET_ADD 146
#define MAP_ADD 147
-#define LOAD_CLASSDEREF 148
#define COPY_FREE_VARS 149
+#define YIELD_VALUE 150
#define RESUME 151
#define MATCH_CLASS 152
#define FORMAT_VALUE 155
#define BUILD_CONST_KEY_MAP 156
#define BUILD_STRING 157
-#define LOAD_METHOD 160
#define LIST_EXTEND 162
#define SET_UPDATE 163
#define DICT_MERGE 164
#define DICT_UPDATE 165
-#define PRECALL 166
#define CALL 171
#define KW_NAMES 172
-#define POP_JUMP_BACKWARD_IF_NOT_NONE 173
-#define POP_JUMP_BACKWARD_IF_NONE 174
-#define POP_JUMP_BACKWARD_IF_FALSE 175
-#define POP_JUMP_BACKWARD_IF_TRUE 176
-#define BINARY_OP_ADAPTIVE 3
-#define BINARY_OP_ADD_FLOAT 4
-#define BINARY_OP_ADD_INT 5
-#define BINARY_OP_ADD_UNICODE 6
-#define BINARY_OP_INPLACE_ADD_UNICODE 7
-#define BINARY_OP_MULTIPLY_FLOAT 8
-#define BINARY_OP_MULTIPLY_INT 13
-#define BINARY_OP_SUBTRACT_FLOAT 14
-#define BINARY_OP_SUBTRACT_INT 16
-#define BINARY_SUBSCR_ADAPTIVE 17
-#define BINARY_SUBSCR_DICT 18
-#define BINARY_SUBSCR_GETITEM 19
-#define BINARY_SUBSCR_LIST_INT 20
-#define BINARY_SUBSCR_TUPLE_INT 21
-#define CALL_ADAPTIVE 22
+#define CALL_INTRINSIC_1 173
+#define CALL_INTRINSIC_2 174
+#define LOAD_FROM_DICT_OR_GLOBALS 175
+#define LOAD_FROM_DICT_OR_DEREF 176
+#define MIN_INSTRUMENTED_OPCODE 237
+#define INSTRUMENTED_LOAD_SUPER_ATTR 237
+#define INSTRUMENTED_POP_JUMP_IF_NONE 238
+#define INSTRUMENTED_POP_JUMP_IF_NOT_NONE 239
+#define INSTRUMENTED_RESUME 240
+#define INSTRUMENTED_CALL 241
+#define INSTRUMENTED_RETURN_VALUE 242
+#define INSTRUMENTED_YIELD_VALUE 243
+#define INSTRUMENTED_CALL_FUNCTION_EX 244
+#define INSTRUMENTED_JUMP_FORWARD 245
+#define INSTRUMENTED_JUMP_BACKWARD 246
+#define INSTRUMENTED_RETURN_CONST 247
+#define INSTRUMENTED_FOR_ITER 248
+#define INSTRUMENTED_POP_JUMP_IF_FALSE 249
+#define INSTRUMENTED_POP_JUMP_IF_TRUE 250
+#define INSTRUMENTED_END_FOR 251
+#define INSTRUMENTED_END_SEND 252
+#define INSTRUMENTED_INSTRUCTION 253
+#define INSTRUMENTED_LINE 254
+#define MIN_PSEUDO_OPCODE 256
+#define SETUP_FINALLY 256
+#define SETUP_CLEANUP 257
+#define SETUP_WITH 258
+#define POP_BLOCK 259
+#define JUMP 260
+#define JUMP_NO_INTERRUPT 261
+#define LOAD_METHOD 262
+#define LOAD_SUPER_METHOD 263
+#define LOAD_ZERO_SUPER_METHOD 264
+#define LOAD_ZERO_SUPER_ATTR 265
+#define STORE_FAST_MAYBE_NULL 266
+#define MAX_PSEUDO_OPCODE 266
+#define BINARY_OP_ADD_FLOAT 6
+#define BINARY_OP_ADD_INT 7
+#define BINARY_OP_ADD_UNICODE 8
+#define BINARY_OP_INPLACE_ADD_UNICODE 10
+#define BINARY_OP_MULTIPLY_FLOAT 13
+#define BINARY_OP_MULTIPLY_INT 14
+#define BINARY_OP_SUBTRACT_FLOAT 16
+#define BINARY_OP_SUBTRACT_INT 18
+#define BINARY_SUBSCR_DICT 19
+#define BINARY_SUBSCR_GETITEM 20
+#define BINARY_SUBSCR_LIST_INT 21
+#define BINARY_SUBSCR_TUPLE_INT 22
#define CALL_PY_EXACT_ARGS 23
#define CALL_PY_WITH_DEFAULTS 24
-#define COMPARE_OP_ADAPTIVE 26
-#define COMPARE_OP_FLOAT_JUMP 27
-#define COMPARE_OP_INT_JUMP 28
-#define COMPARE_OP_STR_JUMP 29
-#define EXTENDED_ARG_QUICK 34
-#define JUMP_BACKWARD_QUICK 38
-#define LOAD_ATTR_ADAPTIVE 39
-#define LOAD_ATTR_INSTANCE_VALUE 40
-#define LOAD_ATTR_MODULE 41
-#define LOAD_ATTR_SLOT 42
-#define LOAD_ATTR_WITH_HINT 43
-#define LOAD_CONST__LOAD_FAST 44
-#define LOAD_FAST__LOAD_CONST 45
-#define LOAD_FAST__LOAD_FAST 46
-#define LOAD_GLOBAL_ADAPTIVE 47
-#define LOAD_GLOBAL_BUILTIN 48
-#define LOAD_GLOBAL_MODULE 55
-#define LOAD_METHOD_ADAPTIVE 56
-#define LOAD_METHOD_CLASS 57
-#define LOAD_METHOD_MODULE 58
-#define LOAD_METHOD_NO_DICT 59
-#define LOAD_METHOD_WITH_DICT 62
-#define LOAD_METHOD_WITH_VALUES 63
-#define PRECALL_ADAPTIVE 64
-#define PRECALL_BOUND_METHOD 65
-#define PRECALL_BUILTIN_CLASS 66
-#define PRECALL_BUILTIN_FAST_WITH_KEYWORDS 67
-#define PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 72
-#define PRECALL_NO_KW_BUILTIN_FAST 73
-#define PRECALL_NO_KW_BUILTIN_O 76
-#define PRECALL_NO_KW_ISINSTANCE 77
-#define PRECALL_NO_KW_LEN 78
-#define PRECALL_NO_KW_LIST_APPEND 79
-#define PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST 80
-#define PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS 81
-#define PRECALL_NO_KW_METHOD_DESCRIPTOR_O 113
-#define PRECALL_NO_KW_STR_1 121
-#define PRECALL_NO_KW_TUPLE_1 127
-#define PRECALL_NO_KW_TYPE_1 141
-#define PRECALL_PYFUNC 143
-#define RESUME_QUICK 150
-#define STORE_ATTR_ADAPTIVE 153
-#define STORE_ATTR_INSTANCE_VALUE 154
-#define STORE_ATTR_SLOT 158
-#define STORE_ATTR_WITH_HINT 159
-#define STORE_FAST__LOAD_FAST 161
-#define STORE_FAST__STORE_FAST 167
-#define STORE_SUBSCR_ADAPTIVE 168
-#define STORE_SUBSCR_DICT 169
-#define STORE_SUBSCR_LIST_INT 170
-#define UNPACK_SEQUENCE_ADAPTIVE 177
-#define UNPACK_SEQUENCE_LIST 178
-#define UNPACK_SEQUENCE_TUPLE 179
-#define UNPACK_SEQUENCE_TWO_TUPLE 180
-#define DO_TRACING 255
+#define CALL_BOUND_METHOD_EXACT_ARGS 28
+#define CALL_BUILTIN_CLASS 29
+#define CALL_BUILTIN_FAST_WITH_KEYWORDS 34
+#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 38
+#define CALL_NO_KW_BUILTIN_FAST 39
+#define CALL_NO_KW_BUILTIN_O 40
+#define CALL_NO_KW_ISINSTANCE 41
+#define CALL_NO_KW_LEN 42
+#define CALL_NO_KW_LIST_APPEND 43
+#define CALL_NO_KW_METHOD_DESCRIPTOR_FAST 44
+#define CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS 45
+#define CALL_NO_KW_METHOD_DESCRIPTOR_O 46
+#define CALL_NO_KW_STR_1 47
+#define CALL_NO_KW_TUPLE_1 48
+#define CALL_NO_KW_TYPE_1 56
+#define COMPARE_OP_FLOAT 57
+#define COMPARE_OP_INT 58
+#define COMPARE_OP_STR 59
+#define FOR_ITER_LIST 62
+#define FOR_ITER_TUPLE 63
+#define FOR_ITER_RANGE 64
+#define FOR_ITER_GEN 65
+#define LOAD_SUPER_ATTR_ATTR 66
+#define LOAD_SUPER_ATTR_METHOD 67
+#define LOAD_ATTR_CLASS 70
+#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN 72
+#define LOAD_ATTR_INSTANCE_VALUE 73
+#define LOAD_ATTR_MODULE 76
+#define LOAD_ATTR_PROPERTY 77
+#define LOAD_ATTR_SLOT 78
+#define LOAD_ATTR_WITH_HINT 79
+#define LOAD_ATTR_METHOD_LAZY_DICT 80
+#define LOAD_ATTR_METHOD_NO_DICT 81
+#define LOAD_ATTR_METHOD_WITH_VALUES 82
+#define LOAD_CONST__LOAD_FAST 84
+#define LOAD_FAST__LOAD_CONST 86
+#define LOAD_FAST__LOAD_FAST 88
+#define LOAD_GLOBAL_BUILTIN 111
+#define LOAD_GLOBAL_MODULE 112
+#define STORE_ATTR_INSTANCE_VALUE 113
+#define STORE_ATTR_SLOT 148
+#define STORE_ATTR_WITH_HINT 153
+#define STORE_FAST__LOAD_FAST 154
+#define STORE_FAST__STORE_FAST 158
+#define STORE_SUBSCR_DICT 159
+#define STORE_SUBSCR_LIST_INT 160
+#define UNPACK_SEQUENCE_LIST 161
+#define UNPACK_SEQUENCE_TUPLE 166
+#define UNPACK_SEQUENCE_TWO_TUPLE 167
+#define SEND_GEN 168
+
+#define HAS_ARG(op) ((((op) >= HAVE_ARGUMENT) && (!IS_PSEUDO_OPCODE(op)))\
+ || ((op) == JUMP) \
+ || ((op) == JUMP_NO_INTERRUPT) \
+ || ((op) == LOAD_METHOD) \
+ || ((op) == LOAD_SUPER_METHOD) \
+ || ((op) == LOAD_ZERO_SUPER_METHOD) \
+ || ((op) == LOAD_ZERO_SUPER_ATTR) \
+ || ((op) == STORE_FAST_MAYBE_NULL) \
+ )
#define HAS_CONST(op) (false\
- || ((op) == 100) \
- || ((op) == 172) \
+ || ((op) == LOAD_CONST) \
+ || ((op) == RETURN_CONST) \
+ || ((op) == KW_NAMES) \
)
#define NB_ADD 0
@@ -224,11 +260,10 @@ extern "C" {
#define NB_INPLACE_TRUE_DIVIDE 24
#define NB_INPLACE_XOR 25
-#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
+/* Defined in Lib/opcode.py */
+#define ENABLE_SPECIALIZATION 1
-/* Reserve some bytecodes for internal use in the compiler.
- * The value of 240 is arbitrary. */
-#define IS_ARTIFICIAL(op) ((op) > 240)
+#define IS_PSEUDO_OPCODE(op) (((op) >= MIN_PSEUDO_OPCODE) && ((op) <= MAX_PSEUDO_OPCODE))
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/patchlevel.h b/contrib/tools/python3/src/Include/patchlevel.h
index a4cb683c47..e7316df367 100644
--- a/contrib/tools/python3/src/Include/patchlevel.h
+++ b/contrib/tools/python3/src/Include/patchlevel.h
@@ -17,13 +17,13 @@
/* Version parsed out into numeric values */
/*--start constants--*/
#define PY_MAJOR_VERSION 3
-#define PY_MINOR_VERSION 11
-#define PY_MICRO_VERSION 8
+#define PY_MINOR_VERSION 12
+#define PY_MICRO_VERSION 2
#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL
#define PY_RELEASE_SERIAL 0
/* Version as a string */
-#define PY_VERSION "3.11.8"
+#define PY_VERSION "3.12.2"
/*--end constants--*/
/* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2.
diff --git a/contrib/tools/python3/src/Include/pybuffer.h b/contrib/tools/python3/src/Include/pybuffer.h
index 6893505e66..ca1c6058d9 100644
--- a/contrib/tools/python3/src/Include/pybuffer.h
+++ b/contrib/tools/python3/src/Include/pybuffer.h
@@ -32,6 +32,9 @@ typedef struct {
void *internal;
} Py_buffer;
+typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
+typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
+
/* Return 1 if the getbuffer function is available, otherwise return 0. */
PyAPI_FUNC(int) PyObject_CheckBuffer(PyObject *obj);
@@ -101,7 +104,7 @@ PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view);
/* Maximum number of dimensions */
#define PyBUF_MAX_NDIM 64
-/* Flags for getting buffers */
+/* Flags for getting buffers. Keep these in sync with inspect.BufferFlags. */
#define PyBUF_SIMPLE 0
#define PyBUF_WRITABLE 0x0001
diff --git a/contrib/tools/python3/src/Include/pycapsule.h b/contrib/tools/python3/src/Include/pycapsule.h
index fb5d503fea..929a9a6852 100644
--- a/contrib/tools/python3/src/Include/pycapsule.h
+++ b/contrib/tools/python3/src/Include/pycapsule.h
@@ -22,7 +22,7 @@ PyAPI_DATA(PyTypeObject) PyCapsule_Type;
typedef void (*PyCapsule_Destructor)(PyObject *);
-#define PyCapsule_CheckExact(op) Py_IS_TYPE(op, &PyCapsule_Type)
+#define PyCapsule_CheckExact(op) Py_IS_TYPE((op), &PyCapsule_Type)
PyAPI_FUNC(PyObject *) PyCapsule_New(
diff --git a/contrib/tools/python3/src/Include/pyconfig-linux.h b/contrib/tools/python3/src/Include/pyconfig-linux.h
index c271f1bfb9..0cf6e48f50 100644
--- a/contrib/tools/python3/src/Include/pyconfig-linux.h
+++ b/contrib/tools/python3/src/Include/pyconfig-linux.h
@@ -20,6 +20,9 @@
/* The normal alignment of `long', in bytes. */
#define ALIGNOF_LONG 8
+/* The normal alignment of `max_align_t', in bytes. */
+#define ALIGNOF_MAX_ALIGN_T 16
+
/* The normal alignment of `size_t', in bytes. */
#define ALIGNOF_SIZE_T 8
@@ -303,6 +306,9 @@
/* Defined when any dynamic module loading is enabled. */
#define HAVE_DYNAMIC_LOADING 1
+/* Define to 1 if you have the <editline/readline.h> header file. */
+/* #undef HAVE_EDITLINE_READLINE_H */
+
/* Define to 1 if you have the <endian.h> header file. */
#define HAVE_ENDIAN_H 1
@@ -369,6 +375,15 @@
/* Define to 1 if you have the `fexecve' function. */
#define HAVE_FEXECVE 1
+/* Define if you have the 'ffi_closure_alloc' function. */
+#define HAVE_FFI_CLOSURE_ALLOC 1
+
+/* Define if you have the 'ffi_prep_cif_var' function. */
+#define HAVE_FFI_PREP_CIF_VAR 1
+
+/* Define if you have the 'ffi_prep_closure_loc' function. */
+#define HAVE_FFI_PREP_CLOSURE_LOC 1
+
/* Define to 1 if you have the `flock' function. */
#define HAVE_FLOCK 1
@@ -667,21 +682,12 @@
/* Define to 1 if you have the `dld' library (-ldld). */
/* #undef HAVE_LIBDLD */
-/* Define to 1 if you have the `gdbm_compat' library (-lgdbm_compat). */
-/* #undef HAVE_LIBGDBM_COMPAT */
-
/* Define to 1 if you have the `ieee' library (-lieee). */
/* #undef HAVE_LIBIEEE */
/* Define to 1 if you have the <libintl.h> header file. */
#define HAVE_LIBINTL_H 1
-/* Define to 1 if you have the `ndbm' library (-lndbm). */
-/* #undef HAVE_LIBNDBM */
-
-/* Define to build the readline module. */
-/* #undef HAVE_LIBREADLINE */
-
/* Define to 1 if you have the `resolv' library (-lresolv). */
/* #undef HAVE_LIBRESOLV */
@@ -721,6 +727,12 @@
/* Define if compiling using Linux 4.1 or later. */
#define HAVE_LINUX_CAN_RAW_JOIN_FILTERS 1
+/* Define to 1 if you have the <linux/fs.h> header file. */
+#define HAVE_LINUX_FS_H 1
+
+/* Define to 1 if you have the <linux/limits.h> header file. */
+#define HAVE_LINUX_LIMITS_H 1
+
/* Define to 1 if you have the <linux/memfd.h> header file. */
#define HAVE_LINUX_MEMFD_H 1
@@ -784,12 +796,12 @@
/* Define if you have the 'memfd_create' function. */
#define HAVE_MEMFD_CREATE 1
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
/* Define to 1 if you have the `memrchr' function. */
#define HAVE_MEMRCHR 1
+/* Define to 1 if you have the <minix/config.h> header file. */
+/* #undef HAVE_MINIX_CONFIG_H */
+
/* Define to 1 if you have the `mkdirat' function. */
#define HAVE_MKDIRAT 1
@@ -817,6 +829,9 @@
/* Define to 1 if you have the `nanosleep' function. */
#define HAVE_NANOSLEEP 1
+/* Define to 1 if you have the `ncursesw' library. */
+#define HAVE_NCURSESW 1
+
/* Define to 1 if you have the <ncurses.h> header file. */
#define HAVE_NCURSES_H 1
@@ -838,6 +853,9 @@
/* Define to 1 if you have the <netpacket/packet.h> header file. */
#define HAVE_NETPACKET_PACKET_H 1
+/* Define to 1 if you have the <net/ethernet.h> header file. */
+#define HAVE_NET_ETHERNET_H 1
+
/* Define to 1 if you have the <net/if.h> header file. */
#define HAVE_NET_IF_H 1
@@ -857,6 +875,9 @@
/* Define to 1 if you have the `openpty' function. */
/* #undef HAVE_OPENPTY */
+/* Define to 1 if you have the <panel.h> header file. */
+#define HAVE_PANEL_H 1
+
/* Define to 1 if you have the `pathconf' function. */
#define HAVE_PATHCONF 1
@@ -944,6 +965,9 @@
/* Define to 1 if you have the `pwritev2' function. */
/* #undef HAVE_PWRITEV2 */
+/* Define to 1 if you have the <readline/readline.h> header file. */
+/* #undef HAVE_READLINE_READLINE_H */
+
/* Define to 1 if you have the `readlink' function. */
#define HAVE_READLINK 1
@@ -968,6 +992,9 @@
/* Define if you can turn off readline's signal handling. */
/* #undef HAVE_RL_CATCH_SIGNAL */
+/* Define if readline supports rl_compdisp_func_t */
+/* #undef HAVE_RL_COMPDISP_FUNC_T */
+
/* Define if you have readline 2.2 */
/* #undef HAVE_RL_COMPLETION_APPEND_CHARACTER */
@@ -1055,6 +1082,9 @@
/* Define to 1 if you have the `setlocale' function. */
#define HAVE_SETLOCALE 1
+/* Define to 1 if you have the `setns' function. */
+#define HAVE_SETNS 1
+
/* Define to 1 if you have the `setpgid' function. */
#define HAVE_SETPGID 1
@@ -1169,13 +1199,12 @@
/* Define if you have struct stat.st_mtimensec */
/* #undef HAVE_STAT_TV_NSEC2 */
-/* Define if your compiler supports variable length function prototypes (e.g.
- void fprintf(FILE *, char *, ...);) *and* <stdarg.h> */
-#define HAVE_STDARG_PROTOTYPES 1
-
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
+/* Define to 1 if you have the <stdio.h> header file. */
+#define HAVE_STDIO_H 1
+
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
@@ -1429,6 +1458,9 @@
/* Define to 1 if you have the `unlinkat' function. */
#define HAVE_UNLINKAT 1
+/* Define to 1 if you have the `unshare' function. */
+#define HAVE_UNSHARE 1
+
/* Define if you have a useable wchar_t type defined in wchar.h; useable means
wchar_t must be an unsigned type with at least 16 bits. (see
Include/unicodeobject.h). */
@@ -1459,7 +1491,7 @@
#define HAVE_UUID_GENERATE_TIME_SAFE 1
/* Define to 1 if you have the <uuid.h> header file. */
-/* #undef HAVE_UUID_H */
+#define HAVE_UUID_H 1
/* Define to 1 if you have the <uuid/uuid.h> header file. */
/* #undef HAVE_UUID_UUID_H */
@@ -1555,13 +1587,13 @@
/* #undef PYLONG_BITS_IN_DIGIT */
/* enabled builtin hash modules */
-#define PY_BUILTIN_HASHLIB_HASHES "md5,sha1,sha256,sha512,sha3,blake2"
+#define PY_BUILTIN_HASHLIB_HASHES "md5,sha1,sha2,sha3,blake2"
/* Define if you want to coerce the C locale to a UTF-8 based locale */
#define PY_COERCE_C_LOCALE 1
-/* Define to printf format modifier for Py_ssize_t */
-#define PY_FORMAT_SIZE_T "z"
+/* Define to 1 if you have the perf trampoline. */
+/* #undef PY_HAVE_PERF_TRAMPOLINE */
/* Define to 1 to build the sqlite module with loadable extensions support. */
#define PY_SQLITE_ENABLE_LOAD_EXTENSION 1
@@ -1592,6 +1624,9 @@
/* Define if you want to enable internal statistics gathering. */
/* #undef Py_STATS */
+/* The version of SunOS/Solaris as reported by `uname -r' without the dot. */
+/* #undef Py_SUNOS_VERSION */
+
/* Define if you want to enable tracing references for debugging purpose */
/* #undef Py_TRACE_REFS */
@@ -1673,9 +1708,6 @@
/* Library needed by timemodule.c: librt may be needed for clock_gettime() */
/* #undef TIMEMODULE_LIB */
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
-
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
/* #undef TM_IN_SYS_TIME */
@@ -1686,21 +1718,87 @@
#ifndef _ALL_SOURCE
# define _ALL_SOURCE 1
#endif
+/* Enable general extensions on macOS. */
+#ifndef _DARWIN_C_SOURCE
+# define _DARWIN_C_SOURCE 1
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
-/* Enable threading extensions on Solaris. */
+/* Enable X/Open compliant socket functions that do not require linking
+ with -lxnet on HP-UX 11.11. */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# define _HPUX_ALT_XOPEN_SOCKET_API 1
+#endif
+/* Identify the host operating system as Minix.
+ This macro does not affect the system headers' behavior.
+ A future release of Autoconf may stop defining this macro. */
+#ifndef _MINIX
+/* # undef _MINIX */
+#endif
+/* Enable general extensions on NetBSD.
+ Enable NetBSD compatibility extensions on Minix. */
+#ifndef _NETBSD_SOURCE
+# define _NETBSD_SOURCE 1
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+ Oddly enough, this does nothing on OpenBSD. */
+#ifndef _OPENBSD_SOURCE
+# define _OPENBSD_SOURCE 1
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_SOURCE
+/* # undef _POSIX_SOURCE */
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_1_SOURCE
+/* # undef _POSIX_1_SOURCE */
+#endif
+/* Enable POSIX-compatible threading on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# define __STDC_WANT_IEC_60559_DFP_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
+#ifndef __STDC_WANT_LIB_EXT2__
+# define __STDC_WANT_LIB_EXT2__ 1
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009. */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# define __STDC_WANT_MATH_SPEC_FUNCS__ 1
+#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
-/* Enable general extensions on Solaris. */
-#ifndef __EXTENSIONS__
-# define __EXTENSIONS__ 1
+/* Enable X/Open extensions. Define to 500 only if necessary
+ to make mbstate_t available. */
+#ifndef _XOPEN_SOURCE
+# define _XOPEN_SOURCE 700
#endif
@@ -1722,7 +1820,7 @@
Dyld is necessary to support frameworks. */
/* #undef WITH_DYLD */
-/* Define to build the readline module against Editline. */
+/* Define to build the readline module against libedit. */
/* #undef WITH_EDITLINE */
/* Define if you want to compile in object freelists optimization */
@@ -1776,22 +1874,12 @@
/* This must be defined on AIX systems to enable large file support. */
/* #undef _LARGE_FILES */
-/* Define to 1 if on MINIX. */
-/* #undef _MINIX */
-
/* Define on NetBSD to activate all library features */
#define _NETBSD_SOURCE 1
-/* Define to 2 if the system does not provide POSIX.1 features except with
- this defined. */
-/* #undef _POSIX_1_SOURCE */
-
/* Define to activate features from IEEE Stds 1003.1-2008 */
#define _POSIX_C_SOURCE 200809L
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-/* #undef _POSIX_SOURCE */
-
/* Define if you have POSIX threads, and your system does not define that. */
/* #undef _POSIX_THREADS */
@@ -1834,7 +1922,7 @@
/* Define to `long int' if <sys/types.h> does not define. */
/* #undef off_t */
-/* Define to `int' if <sys/types.h> does not define. */
+/* Define as a signed integer type capable of holding a process identifier. */
/* #undef pid_t */
/* Define to empty if the keyword does not work. */
diff --git a/contrib/tools/python3/src/Include/pyconfig-osx-arm64.h b/contrib/tools/python3/src/Include/pyconfig-osx-arm64.h
index 442b75ef98..fb012fa4dd 100644
--- a/contrib/tools/python3/src/Include/pyconfig-osx-arm64.h
+++ b/contrib/tools/python3/src/Include/pyconfig-osx-arm64.h
@@ -20,6 +20,9 @@
/* The normal alignment of `long', in bytes. */
#define ALIGNOF_LONG 8
+/* The normal alignment of `max_align_t', in bytes. */
+#define ALIGNOF_MAX_ALIGN_T 8
+
/* The normal alignment of `size_t', in bytes. */
#define ALIGNOF_SIZE_T 8
@@ -198,7 +201,7 @@
#define HAVE_CURSES_IMMEDOK 1
/* Define if you have the 'is_pad' function. */
-/* #undef HAVE_CURSES_IS_PAD */
+#define HAVE_CURSES_IS_PAD 1
/* Define if you have the 'is_term_resized' function. */
#define HAVE_CURSES_IS_TERM_RESIZED 1
@@ -303,6 +306,9 @@
/* Defined when any dynamic module loading is enabled. */
#define HAVE_DYNAMIC_LOADING 1
+/* Define to 1 if you have the <editline/readline.h> header file. */
+/* #undef HAVE_EDITLINE_READLINE_H */
+
/* Define to 1 if you have the <endian.h> header file. */
/* #undef HAVE_ENDIAN_H */
@@ -369,6 +375,15 @@
/* Define to 1 if you have the `fexecve' function. */
/* #undef HAVE_FEXECVE */
+/* Define if you have the 'ffi_closure_alloc' function. */
+#define HAVE_FFI_CLOSURE_ALLOC 1
+
+/* Define if you have the 'ffi_prep_cif_var' function. */
+#define HAVE_FFI_PREP_CIF_VAR 1
+
+/* Define if you have the 'ffi_prep_closure_loc' function. */
+#define HAVE_FFI_PREP_CLOSURE_LOC 1
+
/* Define to 1 if you have the `flock' function. */
#define HAVE_FLOCK 1
@@ -665,21 +680,12 @@
/* Define to 1 if you have the `dld' library (-ldld). */
/* #undef HAVE_LIBDLD */
-/* Define to 1 if you have the `gdbm_compat' library (-lgdbm_compat). */
-/* #undef HAVE_LIBGDBM_COMPAT */
-
/* Define to 1 if you have the `ieee' library (-lieee). */
/* #undef HAVE_LIBIEEE */
/* Define to 1 if you have the <libintl.h> header file. */
/* #undef HAVE_LIBINTL_H */
-/* Define to 1 if you have the `ndbm' library (-lndbm). */
-/* #undef HAVE_LIBNDBM */
-
-/* Define to build the readline module. */
-/* #undef HAVE_LIBREADLINE */
-
/* Define to 1 if you have the `resolv' library (-lresolv). */
/* #undef HAVE_LIBRESOLV */
@@ -719,6 +725,12 @@
/* Define if compiling using Linux 4.1 or later. */
/* #undef HAVE_LINUX_CAN_RAW_JOIN_FILTERS */
+/* Define to 1 if you have the <linux/fs.h> header file. */
+/* #undef HAVE_LINUX_FS_H */
+
+/* Define to 1 if you have the <linux/limits.h> header file. */
+/* #undef HAVE_LINUX_LIMITS_H */
+
/* Define to 1 if you have the <linux/memfd.h> header file. */
/* #undef HAVE_LINUX_MEMFD_H */
@@ -782,12 +794,12 @@
/* Define if you have the 'memfd_create' function. */
/* #undef HAVE_MEMFD_CREATE */
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
/* Define to 1 if you have the `memrchr' function. */
/* #undef HAVE_MEMRCHR */
+/* Define to 1 if you have the <minix/config.h> header file. */
+/* #undef HAVE_MINIX_CONFIG_H */
+
/* Define to 1 if you have the `mkdirat' function. */
#define HAVE_MKDIRAT 1
@@ -815,6 +827,9 @@
/* Define to 1 if you have the `nanosleep' function. */
#define HAVE_NANOSLEEP 1
+/* Define to 1 if you have the `ncursesw' library. */
+#define HAVE_NCURSESW 1
+
/* Define to 1 if you have the <ncurses.h> header file. */
#define HAVE_NCURSES_H 1
@@ -836,6 +851,9 @@
/* Define to 1 if you have the <netpacket/packet.h> header file. */
/* #undef HAVE_NETPACKET_PACKET_H */
+/* Define to 1 if you have the <net/ethernet.h> header file. */
+#define HAVE_NET_ETHERNET_H 1
+
/* Define to 1 if you have the <net/if.h> header file. */
#define HAVE_NET_IF_H 1
@@ -855,6 +873,9 @@
/* Define to 1 if you have the `openpty' function. */
#define HAVE_OPENPTY 1
+/* Define to 1 if you have the <panel.h> header file. */
+#define HAVE_PANEL_H 1
+
/* Define to 1 if you have the `pathconf' function. */
#define HAVE_PATHCONF 1
@@ -942,6 +963,9 @@
/* Define to 1 if you have the `pwritev2' function. */
/* #undef HAVE_PWRITEV2 */
+/* Define to 1 if you have the <readline/readline.h> header file. */
+/* #undef HAVE_READLINE_READLINE_H */
+
/* Define to 1 if you have the `readlink' function. */
#define HAVE_READLINK 1
@@ -966,6 +990,9 @@
/* Define if you can turn off readline's signal handling. */
/* #undef HAVE_RL_CATCH_SIGNAL */
+/* Define if readline supports rl_compdisp_func_t */
+/* #undef HAVE_RL_COMPDISP_FUNC_T */
+
/* Define if you have readline 2.2 */
/* #undef HAVE_RL_COMPLETION_APPEND_CHARACTER */
@@ -1053,6 +1080,9 @@
/* Define to 1 if you have the `setlocale' function. */
#define HAVE_SETLOCALE 1
+/* Define to 1 if you have the `setns' function. */
+/* #undef HAVE_SETNS */
+
/* Define to 1 if you have the `setpgid' function. */
#define HAVE_SETPGID 1
@@ -1167,13 +1197,12 @@
/* Define if you have struct stat.st_mtimensec */
#define HAVE_STAT_TV_NSEC2 1
-/* Define if your compiler supports variable length function prototypes (e.g.
- void fprintf(FILE *, char *, ...);) *and* <stdarg.h> */
-#define HAVE_STDARG_PROTOTYPES 1
-
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
+/* Define to 1 if you have the <stdio.h> header file. */
+#define HAVE_STDIO_H 1
+
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
@@ -1427,6 +1456,9 @@
/* Define to 1 if you have the `unlinkat' function. */
#define HAVE_UNLINKAT 1
+/* Define to 1 if you have the `unshare' function. */
+/* #undef HAVE_UNSHARE */
+
/* Define if you have a useable wchar_t type defined in wchar.h; useable means
wchar_t must be an unsigned type with at least 16 bits. (see
Include/unicodeobject.h). */
@@ -1506,7 +1538,7 @@
#define HAVE_ZLIB_COPY 1
/* Define to 1 if you have the <zlib.h> header file. */
-/* #undef HAVE_ZLIB_H */
+#define HAVE_ZLIB_H 1
/* Define to 1 if you have the `_getpty' function. */
/* #undef HAVE__GETPTY */
@@ -1553,13 +1585,13 @@
/* #undef PYLONG_BITS_IN_DIGIT */
/* enabled builtin hash modules */
-#define PY_BUILTIN_HASHLIB_HASHES "md5,sha1,sha256,sha512,sha3,blake2"
+#define PY_BUILTIN_HASHLIB_HASHES "md5,sha1,sha2,sha3,blake2"
/* Define if you want to coerce the C locale to a UTF-8 based locale */
#define PY_COERCE_C_LOCALE 1
-/* Define to printf format modifier for Py_ssize_t */
-#define PY_FORMAT_SIZE_T "z"
+/* Define to 1 if you have the perf trampoline. */
+/* #undef PY_HAVE_PERF_TRAMPOLINE */
/* Define to 1 to build the sqlite module with loadable extensions support. */
#define PY_SQLITE_ENABLE_LOAD_EXTENSION 1
@@ -1575,7 +1607,7 @@
/* #undef PY_SSL_DEFAULT_CIPHER_STRING */
/* PEP 11 Support tier (1, 2, 3 or 0 for unsupported) */
-#define PY_SUPPORT_TIER 1
+#define PY_SUPPORT_TIER 2
/* Define if you want to build an interpreter with many run-time checks. */
/* #undef Py_DEBUG */
@@ -1590,6 +1622,9 @@
/* Define if you want to enable internal statistics gathering. */
/* #undef Py_STATS */
+/* The version of SunOS/Solaris as reported by `uname -r' without the dot. */
+/* #undef Py_SUNOS_VERSION */
+
/* Define if you want to enable tracing references for debugging purpose */
/* #undef Py_TRACE_REFS */
@@ -1671,9 +1706,6 @@
/* Library needed by timemodule.c: librt may be needed for clock_gettime() */
/* #undef TIMEMODULE_LIB */
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
-
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
/* #undef TM_IN_SYS_TIME */
@@ -1684,21 +1716,87 @@
#ifndef _ALL_SOURCE
# define _ALL_SOURCE 1
#endif
+/* Enable general extensions on macOS. */
+#ifndef _DARWIN_C_SOURCE
+# define _DARWIN_C_SOURCE 1
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
-/* Enable threading extensions on Solaris. */
+/* Enable X/Open compliant socket functions that do not require linking
+ with -lxnet on HP-UX 11.11. */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# define _HPUX_ALT_XOPEN_SOCKET_API 1
+#endif
+/* Identify the host operating system as Minix.
+ This macro does not affect the system headers' behavior.
+ A future release of Autoconf may stop defining this macro. */
+#ifndef _MINIX
+/* # undef _MINIX */
+#endif
+/* Enable general extensions on NetBSD.
+ Enable NetBSD compatibility extensions on Minix. */
+#ifndef _NETBSD_SOURCE
+# define _NETBSD_SOURCE 1
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+ Oddly enough, this does nothing on OpenBSD. */
+#ifndef _OPENBSD_SOURCE
+# define _OPENBSD_SOURCE 1
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_SOURCE
+/* # undef _POSIX_SOURCE */
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_1_SOURCE
+/* # undef _POSIX_1_SOURCE */
+#endif
+/* Enable POSIX-compatible threading on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# define __STDC_WANT_IEC_60559_DFP_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
+#ifndef __STDC_WANT_LIB_EXT2__
+# define __STDC_WANT_LIB_EXT2__ 1
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009. */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# define __STDC_WANT_MATH_SPEC_FUNCS__ 1
+#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
-/* Enable general extensions on Solaris. */
-#ifndef __EXTENSIONS__
-# define __EXTENSIONS__ 1
+/* Enable X/Open extensions. Define to 500 only if necessary
+ to make mbstate_t available. */
+#ifndef _XOPEN_SOURCE
+/* # undef _XOPEN_SOURCE */
#endif
@@ -1720,7 +1818,7 @@
Dyld is necessary to support frameworks. */
#define WITH_DYLD 1
-/* Define to build the readline module against Editline. */
+/* Define to build the readline module against libedit. */
/* #undef WITH_EDITLINE */
/* Define if you want to compile in object freelists optimization */
@@ -1774,22 +1872,12 @@
/* This must be defined on AIX systems to enable large file support. */
/* #undef _LARGE_FILES */
-/* Define to 1 if on MINIX. */
-/* #undef _MINIX */
-
/* Define on NetBSD to activate all library features */
#define _NETBSD_SOURCE 1
-/* Define to 2 if the system does not provide POSIX.1 features except with
- this defined. */
-/* #undef _POSIX_1_SOURCE */
-
/* Define to activate features from IEEE Stds 1003.1-2008 */
/* #undef _POSIX_C_SOURCE */
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-/* #undef _POSIX_SOURCE */
-
/* Define if you have POSIX threads, and your system does not define that. */
/* #undef _POSIX_THREADS */
@@ -1832,7 +1920,7 @@
/* Define to `long int' if <sys/types.h> does not define. */
/* #undef off_t */
-/* Define to `int' if <sys/types.h> does not define. */
+/* Define as a signed integer type capable of holding a process identifier. */
/* #undef pid_t */
/* Define to empty if the keyword does not work. */
diff --git a/contrib/tools/python3/src/Include/pyconfig-osx.h b/contrib/tools/python3/src/Include/pyconfig-osx.h
index 4e4cafdc00..3181d1cec5 100644
--- a/contrib/tools/python3/src/Include/pyconfig-osx.h
+++ b/contrib/tools/python3/src/Include/pyconfig-osx.h
@@ -20,6 +20,9 @@
/* The normal alignment of `long', in bytes. */
#define ALIGNOF_LONG 8
+/* The normal alignment of `max_align_t', in bytes. */
+#define ALIGNOF_MAX_ALIGN_T 16
+
/* The normal alignment of `size_t', in bytes. */
#define ALIGNOF_SIZE_T 8
@@ -198,7 +201,7 @@
#define HAVE_CURSES_IMMEDOK 1
/* Define if you have the 'is_pad' function. */
-/* #undef HAVE_CURSES_IS_PAD */
+#define HAVE_CURSES_IS_PAD 1
/* Define if you have the 'is_term_resized' function. */
#define HAVE_CURSES_IS_TERM_RESIZED 1
@@ -303,6 +306,9 @@
/* Defined when any dynamic module loading is enabled. */
#define HAVE_DYNAMIC_LOADING 1
+/* Define to 1 if you have the <editline/readline.h> header file. */
+/* #undef HAVE_EDITLINE_READLINE_H */
+
/* Define to 1 if you have the <endian.h> header file. */
/* #undef HAVE_ENDIAN_H */
@@ -369,6 +375,15 @@
/* Define to 1 if you have the `fexecve' function. */
/* #undef HAVE_FEXECVE */
+/* Define if you have the 'ffi_closure_alloc' function. */
+#define HAVE_FFI_CLOSURE_ALLOC 1
+
+/* Define if you have the 'ffi_prep_cif_var' function. */
+#define HAVE_FFI_PREP_CIF_VAR 1
+
+/* Define if you have the 'ffi_prep_closure_loc' function. */
+#define HAVE_FFI_PREP_CLOSURE_LOC 1
+
/* Define to 1 if you have the `flock' function. */
#define HAVE_FLOCK 1
@@ -665,21 +680,12 @@
/* Define to 1 if you have the `dld' library (-ldld). */
/* #undef HAVE_LIBDLD */
-/* Define to 1 if you have the `gdbm_compat' library (-lgdbm_compat). */
-/* #undef HAVE_LIBGDBM_COMPAT */
-
/* Define to 1 if you have the `ieee' library (-lieee). */
/* #undef HAVE_LIBIEEE */
/* Define to 1 if you have the <libintl.h> header file. */
/* #undef HAVE_LIBINTL_H */
-/* Define to 1 if you have the `ndbm' library (-lndbm). */
-/* #undef HAVE_LIBNDBM */
-
-/* Define to build the readline module. */
-/* #undef HAVE_LIBREADLINE */
-
/* Define to 1 if you have the `resolv' library (-lresolv). */
/* #undef HAVE_LIBRESOLV */
@@ -719,6 +725,12 @@
/* Define if compiling using Linux 4.1 or later. */
/* #undef HAVE_LINUX_CAN_RAW_JOIN_FILTERS */
+/* Define to 1 if you have the <linux/fs.h> header file. */
+/* #undef HAVE_LINUX_FS_H */
+
+/* Define to 1 if you have the <linux/limits.h> header file. */
+/* #undef HAVE_LINUX_LIMITS_H */
+
/* Define to 1 if you have the <linux/memfd.h> header file. */
/* #undef HAVE_LINUX_MEMFD_H */
@@ -782,12 +794,12 @@
/* Define if you have the 'memfd_create' function. */
/* #undef HAVE_MEMFD_CREATE */
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
/* Define to 1 if you have the `memrchr' function. */
/* #undef HAVE_MEMRCHR */
+/* Define to 1 if you have the <minix/config.h> header file. */
+/* #undef HAVE_MINIX_CONFIG_H */
+
/* Define to 1 if you have the `mkdirat' function. */
#define HAVE_MKDIRAT 1
@@ -815,6 +827,9 @@
/* Define to 1 if you have the `nanosleep' function. */
#define HAVE_NANOSLEEP 1
+/* Define to 1 if you have the `ncursesw' library. */
+#define HAVE_NCURSESW 1
+
/* Define to 1 if you have the <ncurses.h> header file. */
#define HAVE_NCURSES_H 1
@@ -836,6 +851,9 @@
/* Define to 1 if you have the <netpacket/packet.h> header file. */
/* #undef HAVE_NETPACKET_PACKET_H */
+/* Define to 1 if you have the <net/ethernet.h> header file. */
+#define HAVE_NET_ETHERNET_H 1
+
/* Define to 1 if you have the <net/if.h> header file. */
#define HAVE_NET_IF_H 1
@@ -855,6 +873,9 @@
/* Define to 1 if you have the `openpty' function. */
#define HAVE_OPENPTY 1
+/* Define to 1 if you have the <panel.h> header file. */
+#define HAVE_PANEL_H 1
+
/* Define to 1 if you have the `pathconf' function. */
#define HAVE_PATHCONF 1
@@ -942,6 +963,9 @@
/* Define to 1 if you have the `pwritev2' function. */
/* #undef HAVE_PWRITEV2 */
+/* Define to 1 if you have the <readline/readline.h> header file. */
+/* #undef HAVE_READLINE_READLINE_H */
+
/* Define to 1 if you have the `readlink' function. */
#define HAVE_READLINK 1
@@ -966,6 +990,9 @@
/* Define if you can turn off readline's signal handling. */
/* #undef HAVE_RL_CATCH_SIGNAL */
+/* Define if readline supports rl_compdisp_func_t */
+/* #undef HAVE_RL_COMPDISP_FUNC_T */
+
/* Define if you have readline 2.2 */
/* #undef HAVE_RL_COMPLETION_APPEND_CHARACTER */
@@ -1053,6 +1080,9 @@
/* Define to 1 if you have the `setlocale' function. */
#define HAVE_SETLOCALE 1
+/* Define to 1 if you have the `setns' function. */
+/* #undef HAVE_SETNS */
+
/* Define to 1 if you have the `setpgid' function. */
#define HAVE_SETPGID 1
@@ -1167,13 +1197,12 @@
/* Define if you have struct stat.st_mtimensec */
#define HAVE_STAT_TV_NSEC2 1
-/* Define if your compiler supports variable length function prototypes (e.g.
- void fprintf(FILE *, char *, ...);) *and* <stdarg.h> */
-#define HAVE_STDARG_PROTOTYPES 1
-
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
+/* Define to 1 if you have the <stdio.h> header file. */
+#define HAVE_STDIO_H 1
+
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
@@ -1427,6 +1456,9 @@
/* Define to 1 if you have the `unlinkat' function. */
#define HAVE_UNLINKAT 1
+/* Define to 1 if you have the `unshare' function. */
+/* #undef HAVE_UNSHARE */
+
/* Define if you have a useable wchar_t type defined in wchar.h; useable means
wchar_t must be an unsigned type with at least 16 bits. (see
Include/unicodeobject.h). */
@@ -1506,7 +1538,7 @@
#define HAVE_ZLIB_COPY 1
/* Define to 1 if you have the <zlib.h> header file. */
-/* #undef HAVE_ZLIB_H */
+#define HAVE_ZLIB_H 1
/* Define to 1 if you have the `_getpty' function. */
/* #undef HAVE__GETPTY */
@@ -1553,13 +1585,13 @@
/* #undef PYLONG_BITS_IN_DIGIT */
/* enabled builtin hash modules */
-#define PY_BUILTIN_HASHLIB_HASHES "md5,sha1,sha256,sha512,sha3,blake2"
+#define PY_BUILTIN_HASHLIB_HASHES "md5,sha1,sha2,sha3,blake2"
/* Define if you want to coerce the C locale to a UTF-8 based locale */
#define PY_COERCE_C_LOCALE 1
-/* Define to printf format modifier for Py_ssize_t */
-#define PY_FORMAT_SIZE_T "z"
+/* Define to 1 if you have the perf trampoline. */
+/* #undef PY_HAVE_PERF_TRAMPOLINE */
/* Define to 1 to build the sqlite module with loadable extensions support. */
#define PY_SQLITE_ENABLE_LOAD_EXTENSION 1
@@ -1590,6 +1622,9 @@
/* Define if you want to enable internal statistics gathering. */
/* #undef Py_STATS */
+/* The version of SunOS/Solaris as reported by `uname -r' without the dot. */
+/* #undef Py_SUNOS_VERSION */
+
/* Define if you want to enable tracing references for debugging purpose */
/* #undef Py_TRACE_REFS */
@@ -1671,9 +1706,6 @@
/* Library needed by timemodule.c: librt may be needed for clock_gettime() */
/* #undef TIMEMODULE_LIB */
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
-
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
/* #undef TM_IN_SYS_TIME */
@@ -1684,21 +1716,87 @@
#ifndef _ALL_SOURCE
# define _ALL_SOURCE 1
#endif
+/* Enable general extensions on macOS. */
+#ifndef _DARWIN_C_SOURCE
+# define _DARWIN_C_SOURCE 1
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
-/* Enable threading extensions on Solaris. */
+/* Enable X/Open compliant socket functions that do not require linking
+ with -lxnet on HP-UX 11.11. */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# define _HPUX_ALT_XOPEN_SOCKET_API 1
+#endif
+/* Identify the host operating system as Minix.
+ This macro does not affect the system headers' behavior.
+ A future release of Autoconf may stop defining this macro. */
+#ifndef _MINIX
+/* # undef _MINIX */
+#endif
+/* Enable general extensions on NetBSD.
+ Enable NetBSD compatibility extensions on Minix. */
+#ifndef _NETBSD_SOURCE
+# define _NETBSD_SOURCE 1
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+ Oddly enough, this does nothing on OpenBSD. */
+#ifndef _OPENBSD_SOURCE
+# define _OPENBSD_SOURCE 1
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_SOURCE
+/* # undef _POSIX_SOURCE */
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_1_SOURCE
+/* # undef _POSIX_1_SOURCE */
+#endif
+/* Enable POSIX-compatible threading on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# define __STDC_WANT_IEC_60559_DFP_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
+#ifndef __STDC_WANT_LIB_EXT2__
+# define __STDC_WANT_LIB_EXT2__ 1
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009. */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# define __STDC_WANT_MATH_SPEC_FUNCS__ 1
+#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
-/* Enable general extensions on Solaris. */
-#ifndef __EXTENSIONS__
-# define __EXTENSIONS__ 1
+/* Enable X/Open extensions. Define to 500 only if necessary
+ to make mbstate_t available. */
+#ifndef _XOPEN_SOURCE
+/* # undef _XOPEN_SOURCE */
#endif
@@ -1720,7 +1818,7 @@
Dyld is necessary to support frameworks. */
#define WITH_DYLD 1
-/* Define to build the readline module against Editline. */
+/* Define to build the readline module against libedit. */
/* #undef WITH_EDITLINE */
/* Define if you want to compile in object freelists optimization */
@@ -1774,22 +1872,12 @@
/* This must be defined on AIX systems to enable large file support. */
/* #undef _LARGE_FILES */
-/* Define to 1 if on MINIX. */
-/* #undef _MINIX */
-
/* Define on NetBSD to activate all library features */
#define _NETBSD_SOURCE 1
-/* Define to 2 if the system does not provide POSIX.1 features except with
- this defined. */
-/* #undef _POSIX_1_SOURCE */
-
/* Define to activate features from IEEE Stds 1003.1-2008 */
/* #undef _POSIX_C_SOURCE */
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-/* #undef _POSIX_SOURCE */
-
/* Define if you have POSIX threads, and your system does not define that. */
/* #undef _POSIX_THREADS */
@@ -1832,7 +1920,7 @@
/* Define to `long int' if <sys/types.h> does not define. */
/* #undef off_t */
-/* Define to `int' if <sys/types.h> does not define. */
+/* Define as a signed integer type capable of holding a process identifier. */
/* #undef pid_t */
/* Define to empty if the keyword does not work. */
diff --git a/contrib/tools/python3/src/Include/pyconfig.h b/contrib/tools/python3/src/Include/pyconfig.h
index 1887b6a010..0fa2d6916e 100644
--- a/contrib/tools/python3/src/Include/pyconfig.h
+++ b/contrib/tools/python3/src/Include/pyconfig.h
@@ -34,7 +34,8 @@
#endif
#if defined(_MSC_VER)
-#define NTDDI_VERSION 0x06010000
+#define NTDDI_VERSION 0x06020000
+#define _WIN32_WINNT 0x0602
#define Py_NO_ENABLE_SHARED
#include "../PC/pyconfig.h"
#endif
diff --git a/contrib/tools/python3/src/Include/pydtrace.h b/contrib/tools/python3/src/Include/pydtrace.h
index 6aac3d3c70..6b172d8a25 100644
--- a/contrib/tools/python3/src/Include/pydtrace.h
+++ b/contrib/tools/python3/src/Include/pydtrace.h
@@ -12,7 +12,7 @@ extern "C" {
/* pydtrace_probes.h, on systems with DTrace, is auto-generated to include
`PyDTrace_{PROBE}` and `PyDTrace_{PROBE}_ENABLED()` macros for every probe
- defined in pydtrace_provider.d.
+ defined in pydtrace.d.
Calling these functions must be guarded by a `PyDTrace_{PROBE}_ENABLED()`
check to minimize performance impact when probing is off. For example:
diff --git a/contrib/tools/python3/src/Include/pyerrors.h b/contrib/tools/python3/src/Include/pyerrors.h
index 34e3de3328..d089fa7177 100644
--- a/contrib/tools/python3/src/Include/pyerrors.h
+++ b/contrib/tools/python3/src/Include/pyerrors.h
@@ -18,6 +18,8 @@ PyAPI_FUNC(PyObject *) PyErr_Occurred(void);
PyAPI_FUNC(void) PyErr_Clear(void);
PyAPI_FUNC(void) PyErr_Fetch(PyObject **, PyObject **, PyObject **);
PyAPI_FUNC(void) PyErr_Restore(PyObject *, PyObject *, PyObject *);
+PyAPI_FUNC(PyObject *) PyErr_GetRaisedException(void);
+PyAPI_FUNC(void) PyErr_SetRaisedException(PyObject *);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030b0000
PyAPI_FUNC(PyObject*) PyErr_GetHandledException(void);
PyAPI_FUNC(void) PyErr_SetHandledException(PyObject *);
@@ -51,6 +53,10 @@ PyAPI_FUNC(void) PyException_SetCause(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyException_GetContext(PyObject *);
PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *);
+
+PyAPI_FUNC(PyObject *) PyException_GetArgs(PyObject *);
+PyAPI_FUNC(void) PyException_SetArgs(PyObject *, PyObject *);
+
/* */
#define PyExceptionClass_Check(x) \
@@ -62,10 +68,10 @@ PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *);
PyAPI_FUNC(const char *) PyExceptionClass_Name(PyObject *);
-#define PyExceptionInstance_Class(x) ((PyObject*)Py_TYPE(x))
+#define PyExceptionInstance_Class(x) _PyObject_CAST(Py_TYPE(x))
#define _PyBaseExceptionGroup_Check(x) \
- PyObject_TypeCheck(x, (PyTypeObject *)PyExc_BaseExceptionGroup)
+ PyObject_TypeCheck((x), (PyTypeObject *)PyExc_BaseExceptionGroup)
/* Predefined exceptions */
diff --git a/contrib/tools/python3/src/Include/pymacconfig.h b/contrib/tools/python3/src/Include/pymacconfig.h
index 9dde11bd58..61f08e368e 100644
--- a/contrib/tools/python3/src/Include/pymacconfig.h
+++ b/contrib/tools/python3/src/Include/pymacconfig.h
@@ -10,7 +10,9 @@
#if defined(__APPLE__)
+# undef ALIGNOF_MAX_ALIGN_T
# undef SIZEOF_LONG
+# undef SIZEOF_LONG_DOUBLE
# undef SIZEOF_PTHREAD_T
# undef SIZEOF_SIZE_T
# undef SIZEOF_TIME_T
@@ -23,6 +25,7 @@
# undef DOUBLE_IS_BIG_ENDIAN_IEEE754
# undef DOUBLE_IS_LITTLE_ENDIAN_IEEE754
# undef HAVE_GCC_ASM_FOR_X87
+# undef HAVE_GCC_ASM_FOR_X64
# undef VA_LIST_IS_ARRAY
# if defined(__LP64__) && defined(__x86_64__)
@@ -80,22 +83,16 @@
#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754
#endif /* __BIG_ENDIAN */
-#ifdef __i386__
+#if defined(__i386__) || defined(__x86_64__)
# define HAVE_GCC_ASM_FOR_X87
+# define ALIGNOF_MAX_ALIGN_T 16
+# define HAVE_GCC_ASM_FOR_X64 1
+# define SIZEOF_LONG_DOUBLE 16
+#else
+# define ALIGNOF_MAX_ALIGN_T 8
+# define SIZEOF_LONG_DOUBLE 8
#endif
- /*
- * The definition in pyconfig.h is only valid on the OS release
- * where configure ran on and not necessarily for all systems where
- * the executable can be used on.
- *
- * Specifically: OSX 10.4 has limited supported for '%zd', while
- * 10.5 has full support for '%zd'. A binary built on 10.5 won't
- * work properly on 10.4 unless we suppress the definition
- * of PY_FORMAT_SIZE_T
- */
-#undef PY_FORMAT_SIZE_T
-
#endif /* defined(_APPLE__) */
diff --git a/contrib/tools/python3/src/Include/pymacro.h b/contrib/tools/python3/src/Include/pymacro.h
index 5840966b5f..342d2a7b84 100644
--- a/contrib/tools/python3/src/Include/pymacro.h
+++ b/contrib/tools/python3/src/Include/pymacro.h
@@ -155,4 +155,9 @@
// For example, "int x; _Py_RVALUE(x) = 1;" fails with a compiler error.
#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
+// Return non-zero if the type is signed, return zero if it's unsigned.
+// Use "<= 0" rather than "< 0" to prevent the compiler warning:
+// "comparison of unsigned expression in '< 0' is always false".
+#define _Py_IS_TYPE_SIGNED(type) ((type)(-1) <= 0)
+
#endif /* Py_PYMACRO_H */
diff --git a/contrib/tools/python3/src/Include/pymath.h b/contrib/tools/python3/src/Include/pymath.h
index 772b67e497..4c1e3d9984 100644
--- a/contrib/tools/python3/src/Include/pymath.h
+++ b/contrib/tools/python3/src/Include/pymath.h
@@ -39,27 +39,24 @@
// Return 1 if float or double arg is neither infinite nor NAN, else 0.
#define Py_IS_FINITE(X) isfinite(X)
-/* HUGE_VAL is supposed to expand to a positive double infinity. Python
- * uses Py_HUGE_VAL instead because some platforms are broken in this
- * respect. We used to embed code in pyport.h to try to worm around that,
- * but different platforms are broken in conflicting ways. If you're on
- * a platform where HUGE_VAL is defined incorrectly, fiddle your Python
- * config to #define Py_HUGE_VAL to something that works on your platform.
+// Py_INFINITY: Value that evaluates to a positive double infinity.
+#ifndef Py_INFINITY
+# define Py_INFINITY ((double)INFINITY)
+#endif
+
+/* Py_HUGE_VAL should always be the same as Py_INFINITY. But historically
+ * this was not reliable and Python did not require IEEE floats and C99
+ * conformity. Prefer Py_INFINITY for new code.
*/
#ifndef Py_HUGE_VAL
# define Py_HUGE_VAL HUGE_VAL
#endif
-// Py_NAN: Value that evaluates to a quiet Not-a-Number (NaN).
+/* Py_NAN: Value that evaluates to a quiet Not-a-Number (NaN). The sign is
+ * undefined and normally not relevant, but e.g. fixed for float("nan").
+ */
#if !defined(Py_NAN)
-# if _Py__has_builtin(__builtin_nan)
- // Built-in implementation of the ISO C99 function nan(): quiet NaN.
-# define Py_NAN (__builtin_nan(""))
-#else
- // Use C99 NAN constant: quiet Not-A-Number.
- // NAN is a float, Py_NAN is a double: cast to double.
# define Py_NAN ((double)NAN)
-# endif
#endif
#endif /* Py_PYMATH_H */
diff --git a/contrib/tools/python3/src/Include/pymem.h b/contrib/tools/python3/src/Include/pymem.h
index c15ad10dfc..e882645757 100644
--- a/contrib/tools/python3/src/Include/pymem.h
+++ b/contrib/tools/python3/src/Include/pymem.h
@@ -82,13 +82,13 @@ PyAPI_FUNC(void) PyMem_Free(void *ptr);
// Deprecated aliases only kept for backward compatibility.
// PyMem_Del and PyMem_DEL are defined with no parameter to be able to use
// them as function pointers (ex: dealloc = PyMem_Del).
-#define PyMem_MALLOC(n) PyMem_Malloc(n)
-#define PyMem_NEW(type, n) PyMem_New(type, n)
-#define PyMem_REALLOC(p, n) PyMem_Realloc(p, n)
-#define PyMem_RESIZE(p, type, n) PyMem_Resize(p, type, n)
-#define PyMem_FREE(p) PyMem_Free(p)
-#define PyMem_Del PyMem_Free
-#define PyMem_DEL PyMem_Free
+#define PyMem_MALLOC(n) PyMem_Malloc((n))
+#define PyMem_NEW(type, n) PyMem_New(type, (n))
+#define PyMem_REALLOC(p, n) PyMem_Realloc((p), (n))
+#define PyMem_RESIZE(p, type, n) PyMem_Resize((p), type, (n))
+#define PyMem_FREE(p) PyMem_Free((p))
+#define PyMem_Del(p) PyMem_Free((p))
+#define PyMem_DEL(p) PyMem_Free((p))
#ifndef Py_LIMITED_API
diff --git a/contrib/tools/python3/src/Include/pyport.h b/contrib/tools/python3/src/Include/pyport.h
index b3b8b6f09a..35eca7234c 100644
--- a/contrib/tools/python3/src/Include/pyport.h
+++ b/contrib/tools/python3/src/Include/pyport.h
@@ -153,32 +153,10 @@ typedef Py_ssize_t Py_ssize_clean_t;
/* Largest possible value of size_t. */
#define PY_SIZE_MAX SIZE_MAX
-/* Macro kept for backward compatibility: use "z" in new code.
+/* Macro kept for backward compatibility: use directly "z" in new code.
*
- * PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf
- * format to convert an argument with the width of a size_t or Py_ssize_t.
- * C99 introduced "z" for this purpose, but old MSVCs had not supported it.
- * Since MSVC supports "z" since (at least) 2015, we can just use "z"
- * for new code.
- *
- * These "high level" Python format functions interpret "z" correctly on
- * all platforms (Python interprets the format string itself, and does whatever
- * the platform C requires to convert a size_t/Py_ssize_t argument):
- *
- * PyBytes_FromFormat
- * PyErr_Format
- * PyBytes_FromFormatV
- * PyUnicode_FromFormatV
- *
- * Lower-level uses require that you interpolate the correct format modifier
- * yourself (e.g., calling printf, fprintf, sprintf, PyOS_snprintf); for
- * example,
- *
- * Py_ssize_t index;
- * fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index);
- *
- * That will expand to %zd or to something else correct for a Py_ssize_t on
- * the platform.
+ * PY_FORMAT_SIZE_T is a modifier for use in a printf format to convert an
+ * argument with the width of a size_t or Py_ssize_t: "z" (C99).
*/
#ifndef PY_FORMAT_SIZE_T
# define PY_FORMAT_SIZE_T "z"
@@ -206,7 +184,6 @@ typedef Py_ssize_t Py_ssize_clean_t;
# define Py_LOCAL_INLINE(type) static inline type
#endif
-// bpo-28126: Py_MEMCPY is kept for backwards compatibility,
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
# define Py_MEMCPY memcpy
#endif
@@ -269,6 +246,10 @@ typedef Py_ssize_t Py_ssize_clean_t;
#define S_ISCHR(x) (((x) & S_IFMT) == S_IFCHR)
#endif
+#ifndef S_ISLNK
+#define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK)
+#endif
+
#ifdef __cplusplus
/* Move this down here since some C++ #include's don't like to be included
inside an extern "C" */
@@ -341,6 +322,15 @@ extern "C" {
#define Py_DEPRECATED(VERSION_UNUSED)
#endif
+// _Py_DEPRECATED_EXTERNALLY(version)
+// Deprecated outside CPython core.
+#ifdef Py_BUILD_CORE
+#define _Py_DEPRECATED_EXTERNALLY(VERSION_UNUSED)
+#else
+#define _Py_DEPRECATED_EXTERNALLY(version) Py_DEPRECATED(version)
+#endif
+
+
#if defined(__clang__)
#define _Py_COMP_DIAG_PUSH _Pragma("clang diagnostic push")
#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS \
@@ -667,6 +657,27 @@ extern char * _getpty(int *, int, mode_t, int);
# define WITH_THREAD
#endif
+#ifdef WITH_THREAD
+# ifdef Py_BUILD_CORE
+# ifdef HAVE_THREAD_LOCAL
+# error "HAVE_THREAD_LOCAL is already defined"
+# endif
+# define HAVE_THREAD_LOCAL 1
+# ifdef thread_local
+# define _Py_thread_local thread_local
+# elif __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__)
+# define _Py_thread_local _Thread_local
+# elif defined(_MSC_VER) /* AKA NT_THREADS */
+# define _Py_thread_local __declspec(thread)
+# elif defined(__GNUC__) /* includes clang */
+# define _Py_thread_local __thread
+# else
+ // fall back to the PyThread_tss_*() API, or ignore.
+# undef HAVE_THREAD_LOCAL
+# endif
+# endif
+#endif
+
/* Check that ALT_SOABI is consistent with Py_TRACE_REFS:
./configure --with-trace-refs should must be used to define Py_TRACE_REFS */
#if defined(ALT_SOABI) && defined(Py_TRACE_REFS)
@@ -715,6 +726,15 @@ extern char * _getpty(int *, int, mode_t, int);
# define _Py__has_builtin(x) 0
#endif
+// _Py_TYPEOF(expr) gets the type of an expression.
+//
+// Example: _Py_TYPEOF(x) x_copy = (x);
+//
+// The macro is only defined if GCC or clang compiler is used.
+#if defined(__GNUC__) || defined(__clang__)
+# define _Py_TYPEOF(expr) __typeof__(expr)
+#endif
+
/* A convenient way for code to know if sanitizers are enabled. */
#if defined(__has_feature)
@@ -734,4 +754,21 @@ extern char * _getpty(int *, int, mode_t, int);
# endif
#endif
+
+/* AIX has __bool__ redefined in it's system header file. */
+#if defined(_AIX) && defined(__bool__)
+#undef __bool__
+#endif
+
+// Make sure we have maximum alignment, even if the current compiler
+// does not support max_align_t. Note that:
+// - Autoconf reports alignment of unknown types to 0.
+// - 'long double' has maximum alignment on *most* platforms,
+// looks like the best we can do for pre-C11 compilers.
+// - The value is tested, see test_alignof_max_align_t
+#if !defined(ALIGNOF_MAX_ALIGN_T) || ALIGNOF_MAX_ALIGN_T == 0
+# undef ALIGNOF_MAX_ALIGN_T
+# define ALIGNOF_MAX_ALIGN_T _Alignof(long double)
+#endif
+
#endif /* Py_PYPORT_H */
diff --git a/contrib/tools/python3/src/Include/pystats.h b/contrib/tools/python3/src/Include/pystats.h
new file mode 100644
index 0000000000..4b961bad2a
--- /dev/null
+++ b/contrib/tools/python3/src/Include/pystats.h
@@ -0,0 +1,110 @@
+
+
+#ifndef Py_PYSTATS_H
+#define Py_PYSTATS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef Py_STATS
+
+#define SPECIALIZATION_FAILURE_KINDS 36
+
+/* Stats for determining who is calling PyEval_EvalFrame */
+#define EVAL_CALL_TOTAL 0
+#define EVAL_CALL_VECTOR 1
+#define EVAL_CALL_GENERATOR 2
+#define EVAL_CALL_LEGACY 3
+#define EVAL_CALL_FUNCTION_VECTORCALL 4
+#define EVAL_CALL_BUILD_CLASS 5
+#define EVAL_CALL_SLOT 6
+#define EVAL_CALL_FUNCTION_EX 7
+#define EVAL_CALL_API 8
+#define EVAL_CALL_METHOD 9
+
+#define EVAL_CALL_KINDS 10
+
+typedef struct _specialization_stats {
+ uint64_t success;
+ uint64_t failure;
+ uint64_t hit;
+ uint64_t deferred;
+ uint64_t miss;
+ uint64_t deopt;
+ uint64_t failure_kinds[SPECIALIZATION_FAILURE_KINDS];
+} SpecializationStats;
+
+typedef struct _opcode_stats {
+ SpecializationStats specialization;
+ uint64_t execution_count;
+ uint64_t pair_count[256];
+} OpcodeStats;
+
+typedef struct _call_stats {
+ uint64_t inlined_py_calls;
+ uint64_t pyeval_calls;
+ uint64_t frames_pushed;
+ uint64_t frame_objects_created;
+ uint64_t eval_calls[EVAL_CALL_KINDS];
+} CallStats;
+
+typedef struct _object_stats {
+ uint64_t increfs;
+ uint64_t decrefs;
+ uint64_t interpreter_increfs;
+ uint64_t interpreter_decrefs;
+ uint64_t allocations;
+ uint64_t allocations512;
+ uint64_t allocations4k;
+ uint64_t allocations_big;
+ uint64_t frees;
+ uint64_t to_freelist;
+ uint64_t from_freelist;
+ uint64_t new_values;
+ uint64_t dict_materialized_on_request;
+ uint64_t dict_materialized_new_key;
+ uint64_t dict_materialized_too_big;
+ uint64_t dict_materialized_str_subclass;
+ uint64_t type_cache_hits;
+ uint64_t type_cache_misses;
+ uint64_t type_cache_dunder_hits;
+ uint64_t type_cache_dunder_misses;
+ uint64_t type_cache_collisions;
+} ObjectStats;
+
+typedef struct _stats {
+ OpcodeStats opcode_stats[256];
+ CallStats call_stats;
+ ObjectStats object_stats;
+} PyStats;
+
+
+PyAPI_DATA(PyStats) _py_stats_struct;
+PyAPI_DATA(PyStats *) _py_stats;
+
+extern void _Py_StatsClear(void);
+extern void _Py_PrintSpecializationStats(int to_file);
+
+#ifdef _PY_INTERPRETER
+
+#define _Py_INCREF_STAT_INC() do { if (_py_stats) _py_stats->object_stats.interpreter_increfs++; } while (0)
+#define _Py_DECREF_STAT_INC() do { if (_py_stats) _py_stats->object_stats.interpreter_decrefs++; } while (0)
+
+#else
+
+#define _Py_INCREF_STAT_INC() do { if (_py_stats) _py_stats->object_stats.increfs++; } while (0)
+#define _Py_DECREF_STAT_INC() do { if (_py_stats) _py_stats->object_stats.decrefs++; } while (0)
+
+#endif
+
+#else
+
+#define _Py_INCREF_STAT_INC() ((void)0)
+#define _Py_DECREF_STAT_INC() ((void)0)
+
+#endif // !Py_STATS
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_PYSTATs_H */
diff --git a/contrib/tools/python3/src/Include/pythonrun.h b/contrib/tools/python3/src/Include/pythonrun.h
index 1b208b734a..154c7450cb 100644
--- a/contrib/tools/python3/src/Include/pythonrun.h
+++ b/contrib/tools/python3/src/Include/pythonrun.h
@@ -13,6 +13,10 @@ PyAPI_FUNC(void) PyErr_Print(void);
PyAPI_FUNC(void) PyErr_PrintEx(int);
PyAPI_FUNC(void) PyErr_Display(PyObject *, PyObject *, PyObject *);
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030C0000
+PyAPI_FUNC(void) PyErr_DisplayException(PyObject *);
+#endif
+
/* Stuff with no proper home (yet) */
PyAPI_DATA(int) (*PyOS_InputHook)(void);
diff --git a/contrib/tools/python3/src/Include/pythread.h b/contrib/tools/python3/src/Include/pythread.h
index a48329085f..63714437c4 100644
--- a/contrib/tools/python3/src/Include/pythread.h
+++ b/contrib/tools/python3/src/Include/pythread.h
@@ -20,7 +20,9 @@ PyAPI_FUNC(unsigned long) PyThread_start_new_thread(void (*)(void *), void *);
PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void);
PyAPI_FUNC(unsigned long) PyThread_get_thread_ident(void);
-#if defined(__APPLE__) || defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(_WIN32) || defined(_AIX)
+#if (defined(__APPLE__) || defined(__linux__) || defined(_WIN32) \
+ || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) \
+ || defined(__DragonFly__) || defined(_AIX))
#define PY_HAVE_THREAD_NATIVE_ID
PyAPI_FUNC(unsigned long) PyThread_get_thread_native_id(void);
#endif
diff --git a/contrib/tools/python3/src/Include/rangeobject.h b/contrib/tools/python3/src/Include/rangeobject.h
index d6af8473f9..d46ce7cd41 100644
--- a/contrib/tools/python3/src/Include/rangeobject.h
+++ b/contrib/tools/python3/src/Include/rangeobject.h
@@ -19,7 +19,7 @@ PyAPI_DATA(PyTypeObject) PyRange_Type;
PyAPI_DATA(PyTypeObject) PyRangeIter_Type;
PyAPI_DATA(PyTypeObject) PyLongRangeIter_Type;
-#define PyRange_Check(op) Py_IS_TYPE(op, &PyRange_Type)
+#define PyRange_Check(op) Py_IS_TYPE((op), &PyRange_Type)
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/setobject.h b/contrib/tools/python3/src/Include/setobject.h
index fdad70644c..62c9e6b13f 100644
--- a/contrib/tools/python3/src/Include/setobject.h
+++ b/contrib/tools/python3/src/Include/setobject.h
@@ -20,21 +20,21 @@ PyAPI_FUNC(int) PySet_Discard(PyObject *set, PyObject *key);
PyAPI_FUNC(PyObject *) PySet_Pop(PyObject *set);
PyAPI_FUNC(Py_ssize_t) PySet_Size(PyObject *anyset);
-#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE(ob, &PyFrozenSet_Type)
+#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE((ob), &PyFrozenSet_Type)
#define PyFrozenSet_Check(ob) \
- (Py_IS_TYPE(ob, &PyFrozenSet_Type) || \
+ (Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
#define PyAnySet_CheckExact(ob) \
- (Py_IS_TYPE(ob, &PySet_Type) || Py_IS_TYPE(ob, &PyFrozenSet_Type))
+ (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type))
#define PyAnySet_Check(ob) \
- (Py_IS_TYPE(ob, &PySet_Type) || Py_IS_TYPE(ob, &PyFrozenSet_Type) || \
+ (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
#define PySet_CheckExact(op) Py_IS_TYPE(op, &PySet_Type)
#define PySet_Check(ob) \
- (Py_IS_TYPE(ob, &PySet_Type) || \
+ (Py_IS_TYPE((ob), &PySet_Type) || \
PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
#ifndef Py_LIMITED_API
diff --git a/contrib/tools/python3/src/Include/sliceobject.h b/contrib/tools/python3/src/Include/sliceobject.h
index 2c889508b4..c13863f27c 100644
--- a/contrib/tools/python3/src/Include/sliceobject.h
+++ b/contrib/tools/python3/src/Include/sliceobject.h
@@ -28,7 +28,7 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PySlice_Type;
PyAPI_DATA(PyTypeObject) PyEllipsis_Type;
-#define PySlice_Check(op) Py_IS_TYPE(op, &PySlice_Type)
+#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop,
PyObject* step);
diff --git a/contrib/tools/python3/src/Include/structmember.h b/contrib/tools/python3/src/Include/structmember.h
index 65a777d5f5..f6e8fd8298 100644
--- a/contrib/tools/python3/src/Include/structmember.h
+++ b/contrib/tools/python3/src/Include/structmember.h
@@ -5,69 +5,50 @@ extern "C" {
#endif
-/* Interface to map C struct members to Python object attributes */
-
-#include <stddef.h> /* For offsetof */
-
-/* An array of PyMemberDef structures defines the name, type and offset
- of selected members of a C structure. These can be read by
- PyMember_GetOne() and set by PyMember_SetOne() (except if their READONLY
- flag is set). The array must be terminated with an entry whose name
- pointer is NULL. */
-
-struct PyMemberDef {
- const char *name;
- int type;
- Py_ssize_t offset;
- int flags;
- const char *doc;
-};
+/* Interface to map C struct members to Python object attributes
+ *
+ * This header is deprecated: new code should not use stuff from here.
+ * New definitions are in descrobject.h.
+ *
+ * However, there's nothing wrong with old code continuing to use it,
+ * and there's not much mainenance overhead in maintaining a few aliases.
+ * So, don't be too eager to convert old code.
+ *
+ * It uses names not prefixed with Py_.
+ * It is also *not* included from Python.h and must be included individually.
+ */
+
+#include <stddef.h> /* For offsetof (not always provided by Python.h) */
/* Types */
-#define T_SHORT 0
-#define T_INT 1
-#define T_LONG 2
-#define T_FLOAT 3
-#define T_DOUBLE 4
-#define T_STRING 5
-#define T_OBJECT 6
-/* XXX the ordering here is weird for binary compatibility */
-#define T_CHAR 7 /* 1-character string */
-#define T_BYTE 8 /* 8-bit signed int */
-/* unsigned variants: */
-#define T_UBYTE 9
-#define T_USHORT 10
-#define T_UINT 11
-#define T_ULONG 12
-
-/* Added by Jack: strings contained in the structure */
-#define T_STRING_INPLACE 13
-
-/* Added by Lillo: bools contained in the structure (assumed char) */
-#define T_BOOL 14
-
-#define T_OBJECT_EX 16 /* Like T_OBJECT, but raises AttributeError
- when the value is NULL, instead of
- converting to None. */
-#define T_LONGLONG 17
-#define T_ULONGLONG 18
-
-#define T_PYSSIZET 19 /* Py_ssize_t */
-#define T_NONE 20 /* Value is always None */
-
+#define T_SHORT Py_T_SHORT
+#define T_INT Py_T_INT
+#define T_LONG Py_T_LONG
+#define T_FLOAT Py_T_FLOAT
+#define T_DOUBLE Py_T_DOUBLE
+#define T_STRING Py_T_STRING
+#define T_OBJECT _Py_T_OBJECT
+#define T_CHAR Py_T_CHAR
+#define T_BYTE Py_T_BYTE
+#define T_UBYTE Py_T_UBYTE
+#define T_USHORT Py_T_USHORT
+#define T_UINT Py_T_UINT
+#define T_ULONG Py_T_ULONG
+#define T_STRING_INPLACE Py_T_STRING_INPLACE
+#define T_BOOL Py_T_BOOL
+#define T_OBJECT_EX Py_T_OBJECT_EX
+#define T_LONGLONG Py_T_LONGLONG
+#define T_ULONGLONG Py_T_ULONGLONG
+#define T_PYSSIZET Py_T_PYSSIZET
+#define T_NONE _Py_T_NONE
/* Flags */
-#define READONLY 1
-#define READ_RESTRICTED 2
-#define PY_WRITE_RESTRICTED 4
+#define READONLY Py_READONLY
+#define PY_AUDIT_READ Py_AUDIT_READ
+#define READ_RESTRICTED Py_AUDIT_READ
+#define PY_WRITE_RESTRICTED _Py_WRITE_RESTRICTED
#define RESTRICTED (READ_RESTRICTED | PY_WRITE_RESTRICTED)
-#define PY_AUDIT_READ READ_RESTRICTED
-
-/* Current API, use this */
-PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, PyMemberDef *);
-PyAPI_FUNC(int) PyMember_SetOne(char *, PyMemberDef *, PyObject *);
-
#ifdef __cplusplus
}
diff --git a/contrib/tools/python3/src/Include/structseq.h b/contrib/tools/python3/src/Include/structseq.h
index 4f5c09f7ba..9687115561 100644
--- a/contrib/tools/python3/src/Include/structseq.h
+++ b/contrib/tools/python3/src/Include/structseq.h
@@ -35,9 +35,9 @@ PyAPI_FUNC(PyObject *) PyStructSequence_New(PyTypeObject* type);
typedef PyTupleObject PyStructSequence;
/* Macro, *only* to be used to fill in brand new objects */
-#define PyStructSequence_SET_ITEM(op, i, v) PyTuple_SET_ITEM(op, i, v)
+#define PyStructSequence_SET_ITEM(op, i, v) PyTuple_SET_ITEM((op), (i), (v))
-#define PyStructSequence_GET_ITEM(op, i) PyTuple_GET_ITEM(op, i)
+#define PyStructSequence_GET_ITEM(op, i) PyTuple_GET_ITEM((op), (i))
#endif
PyAPI_FUNC(void) PyStructSequence_SetItem(PyObject*, Py_ssize_t, PyObject*);
diff --git a/contrib/tools/python3/src/Include/sysmodule.h b/contrib/tools/python3/src/Include/sysmodule.h
index b5087119b1..96f883870b 100644
--- a/contrib/tools/python3/src/Include/sysmodule.h
+++ b/contrib/tools/python3/src/Include/sysmodule.h
@@ -29,6 +29,19 @@ Py_DEPRECATED(3.11) PyAPI_FUNC(int) PySys_HasWarnOptions(void);
Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_AddXOption(const wchar_t *);
PyAPI_FUNC(PyObject *) PySys_GetXOptions(void);
+#if !defined(Py_LIMITED_API)
+typedef struct {
+ FILE* perf_map;
+ PyThread_type_lock map_lock;
+} PerfMapState;
+
+PyAPI_FUNC(int) PyUnstable_PerfMapState_Init(void);
+
+PyAPI_FUNC(int) PyUnstable_WritePerfMapEntry(const void *code_addr, unsigned int code_size, const char *entry_name);
+
+PyAPI_FUNC(void) PyUnstable_PerfMapState_Fini(void);
+#endif
+
#ifndef Py_LIMITED_API
# define Py_CPYTHON_SYSMODULE_H
# include "cpython/sysmodule.h"
diff --git a/contrib/tools/python3/src/Include/traceback.h b/contrib/tools/python3/src/Include/traceback.h
index 2dfa2ada4f..2b40cc9fc3 100644
--- a/contrib/tools/python3/src/Include/traceback.h
+++ b/contrib/tools/python3/src/Include/traceback.h
@@ -11,7 +11,7 @@ PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *);
/* Reveal traceback type so we can typecheck traceback objects */
PyAPI_DATA(PyTypeObject) PyTraceBack_Type;
-#define PyTraceBack_Check(v) Py_IS_TYPE(v, &PyTraceBack_Type)
+#define PyTraceBack_Check(v) Py_IS_TYPE((v), &PyTraceBack_Type)
#ifndef Py_LIMITED_API
diff --git a/contrib/tools/python3/src/Include/tracemalloc.h b/contrib/tools/python3/src/Include/tracemalloc.h
index bd14217c19..580027a8e3 100644
--- a/contrib/tools/python3/src/Include/tracemalloc.h
+++ b/contrib/tools/python3/src/Include/tracemalloc.h
@@ -33,6 +33,40 @@ PyAPI_FUNC(int) PyTraceMalloc_Untrack(
PyAPI_FUNC(PyObject*) _PyTraceMalloc_GetTraceback(
unsigned int domain,
uintptr_t ptr);
+
+/* Return non-zero if tracemalloc is tracing */
+PyAPI_FUNC(int) _PyTraceMalloc_IsTracing(void);
+
+/* Clear the tracemalloc traces */
+PyAPI_FUNC(void) _PyTraceMalloc_ClearTraces(void);
+
+/* Clear the tracemalloc traces */
+PyAPI_FUNC(PyObject *) _PyTraceMalloc_GetTraces(void);
+
+/* Clear tracemalloc traceback for an object */
+PyAPI_FUNC(PyObject *) _PyTraceMalloc_GetObjectTraceback(PyObject *obj);
+
+/* Initialize tracemalloc */
+PyAPI_FUNC(int) _PyTraceMalloc_Init(void);
+
+/* Start tracemalloc */
+PyAPI_FUNC(int) _PyTraceMalloc_Start(int max_nframe);
+
+/* Stop tracemalloc */
+PyAPI_FUNC(void) _PyTraceMalloc_Stop(void);
+
+/* Get the tracemalloc traceback limit */
+PyAPI_FUNC(int) _PyTraceMalloc_GetTracebackLimit(void);
+
+/* Get the memory usage of tracemalloc in bytes */
+PyAPI_FUNC(size_t) _PyTraceMalloc_GetMemory(void);
+
+/* Get the current size and peak size of traced memory blocks as a 2-tuple */
+PyAPI_FUNC(PyObject *) _PyTraceMalloc_GetTracedMemory(void);
+
+/* Set the peak size of traced memory blocks to the current size */
+PyAPI_FUNC(void) _PyTraceMalloc_ResetPeak(void);
+
#endif
#endif /* !Py_TRACEMALLOC_H */
diff --git a/contrib/tools/python3/src/Include/tupleobject.h b/contrib/tools/python3/src/Include/tupleobject.h
index dc68e3fc5c..1f9ab54be6 100644
--- a/contrib/tools/python3/src/Include/tupleobject.h
+++ b/contrib/tools/python3/src/Include/tupleobject.h
@@ -25,7 +25,7 @@ PyAPI_DATA(PyTypeObject) PyTupleIter_Type;
#define PyTuple_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
-#define PyTuple_CheckExact(op) Py_IS_TYPE(op, &PyTuple_Type)
+#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size);
PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *);
diff --git a/contrib/tools/python3/src/Include/unicodeobject.h b/contrib/tools/python3/src/Include/unicodeobject.h
index 1d2f546085..5839c747a2 100644
--- a/contrib/tools/python3/src/Include/unicodeobject.h
+++ b/contrib/tools/python3/src/Include/unicodeobject.h
@@ -113,7 +113,7 @@ PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type;
#define PyUnicode_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
-#define PyUnicode_CheckExact(op) Py_IS_TYPE(op, &PyUnicode_Type)
+#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
/* --- Constants ---------------------------------------------------------- */
@@ -171,13 +171,6 @@ PyAPI_FUNC(Py_ssize_t) PyUnicode_GetLength(
);
#endif
-/* Get the number of Py_UNICODE units in the
- string representation. */
-
-Py_DEPRECATED(3.3) PyAPI_FUNC(Py_ssize_t) PyUnicode_GetSize(
- PyObject *unicode /* Unicode object */
- );
-
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
/* Read a character from the string. */
@@ -198,9 +191,7 @@ PyAPI_FUNC(int) PyUnicode_WriteChar(
);
#endif
-/* Resize a Unicode object. The length is the number of characters, except
- if the kind of the string is PyUnicode_WCHAR_KIND: in this case, the length
- is the number of Py_UNICODE characters.
+/* Resize a Unicode object. The length is the number of codepoints.
*unicode is modified to point to the new (resized) object and 0
returned on success.
@@ -265,10 +256,6 @@ PyAPI_FUNC(PyObject *) PyUnicode_InternFromString(
const char *u /* UTF-8 encoded string */
);
-// PyUnicode_InternImmortal() is deprecated since Python 3.10
-// and will be removed in Python 3.12. Use PyUnicode_InternInPlace() instead.
-Py_DEPRECATED(3.10) PyAPI_FUNC(void) PyUnicode_InternImmortal(PyObject **);
-
/* --- wchar_t support for platforms which support it --------------------- */
#ifdef HAVE_WCHAR_H
@@ -639,7 +626,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsLatin1String(
/* --- ASCII Codecs -------------------------------------------------------
- Only 7-bit ASCII data is excepted. All other codes generate errors.
+ Only 7-bit ASCII data is expected. All other codes generate errors.
*/
@@ -768,38 +755,22 @@ PyAPI_FUNC(int) PyUnicode_FSConverter(PyObject*, void*);
PyAPI_FUNC(int) PyUnicode_FSDecoder(PyObject*, void*);
-/* Decode a null-terminated string using Py_FileSystemDefaultEncoding
- and the "surrogateescape" error handler.
-
- If Py_FileSystemDefaultEncoding is not set, fall back to the locale
- encoding.
-
- Use PyUnicode_DecodeFSDefaultAndSize() if the string length is known.
-*/
+/* Decode a null-terminated string from the Python filesystem encoding
+ and error handler.
+ If the string length is known, use PyUnicode_DecodeFSDefaultAndSize(). */
PyAPI_FUNC(PyObject*) PyUnicode_DecodeFSDefault(
const char *s /* encoded string */
);
-/* Decode a string using Py_FileSystemDefaultEncoding
- and the "surrogateescape" error handler.
-
- If Py_FileSystemDefaultEncoding is not set, fall back to the locale
- encoding.
-*/
-
+/* Decode a string from the Python filesystem encoding and error handler. */
PyAPI_FUNC(PyObject*) PyUnicode_DecodeFSDefaultAndSize(
const char *s, /* encoded string */
Py_ssize_t size /* size */
);
-/* Encode a Unicode object to Py_FileSystemDefaultEncoding with the
- "surrogateescape" error handler, and return bytes.
-
- If Py_FileSystemDefaultEncoding is not set, fall back to the locale
- encoding.
-*/
-
+/* Encode a Unicode object to the Python filesystem encoding and error handler.
+ Return bytes. */
PyAPI_FUNC(PyObject*) PyUnicode_EncodeFSDefault(
PyObject *unicode
);
diff --git a/contrib/tools/python3/src/Include/weakrefobject.h b/contrib/tools/python3/src/Include/weakrefobject.h
index f071e9c759..8e1fa1b928 100644
--- a/contrib/tools/python3/src/Include/weakrefobject.h
+++ b/contrib/tools/python3/src/Include/weakrefobject.h
@@ -12,12 +12,12 @@ PyAPI_DATA(PyTypeObject) _PyWeakref_RefType;
PyAPI_DATA(PyTypeObject) _PyWeakref_ProxyType;
PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType;
-#define PyWeakref_CheckRef(op) PyObject_TypeCheck(op, &_PyWeakref_RefType)
+#define PyWeakref_CheckRef(op) PyObject_TypeCheck((op), &_PyWeakref_RefType)
#define PyWeakref_CheckRefExact(op) \
- Py_IS_TYPE(op, &_PyWeakref_RefType)
+ Py_IS_TYPE((op), &_PyWeakref_RefType)
#define PyWeakref_CheckProxy(op) \
- (Py_IS_TYPE(op, &_PyWeakref_ProxyType) || \
- Py_IS_TYPE(op, &_PyWeakref_CallableProxyType))
+ (Py_IS_TYPE((op), &_PyWeakref_ProxyType) \
+ || Py_IS_TYPE((op), &_PyWeakref_CallableProxyType))
#define PyWeakref_Check(op) \
(PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))