From fa1d9a080fa5f305242339f1b09b9e9a71ab9f54 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Tue, 28 Feb 2023 11:12:37 -0700 Subject: [PATCH 1/5] set_interned_dict() -> ensure_interned_dict(). --- Objects/unicodeobject.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 1ba30421c66dba..976f69db12ddd8 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -236,9 +236,29 @@ static inline PyObject *get_interned_dict(void) return _Py_CACHED_OBJECT(interned_strings); } -static inline void set_interned_dict(PyObject *dict) +static PyObject * +ensure_interned_dict() { - _Py_CACHED_OBJECT(interned_strings) = dict; + PyObject *interned = get_interned_dict(); + if (interned == NULL) { + interned = PyDict_New(); + if (interned == NULL) { + return NULL; + } + _Py_CACHED_OBJECT(interned_strings) = interned; + } + return interned; +} + +static void +clear_interned_dict(void) +{ + PyObject *interned = get_interned_dict(); + if (interned != NULL) { + PyDict_Clear(interned); + Py_DECREF(interned); + _Py_CACHED_OBJECT(interned_strings) = NULL; + } } #define _Py_RETURN_UNICODE_EMPTY() \ @@ -1528,7 +1548,6 @@ unicode_dealloc(PyObject *unicode) _Py_FatalRefcountError("deallocating an Unicode singleton"); } #endif - PyObject *interned = get_interned_dict(); if (PyUnicode_CHECK_INTERNED(unicode)) { /* Revive the dead object temporarily. PyDict_DelItem() removes two references (key and value) which were ignored by @@ -1537,6 +1556,8 @@ unicode_dealloc(PyObject *unicode) PyDict_DelItem(). */ assert(Py_REFCNT(unicode) == 0); Py_SET_REFCNT(unicode, 3); + PyObject *interned = get_interned_dict(); + assert(interned != NULL); if (PyDict_DelItem(interned, unicode) != 0) { _PyErr_WriteUnraisableMsg("deletion of interned string failed", NULL); @@ -14602,14 +14623,10 @@ PyUnicode_InternInPlace(PyObject **p) return; } - PyObject *interned = get_interned_dict(); + PyObject *interned = ensure_interned_dict(); if (interned == NULL) { - interned = PyDict_New(); - if (interned == NULL) { - PyErr_Clear(); /* Don't leave an exception */ - return; - } - set_interned_dict(interned); + PyErr_Clear(); /* Don't leave an exception */ + return; } PyObject *t = PyDict_SetDefault(interned, s, s); @@ -14694,9 +14711,7 @@ _PyUnicode_ClearInterned(PyInterpreterState *interp) total_length); #endif - PyDict_Clear(interned); - Py_DECREF(interned); - set_interned_dict(NULL); + clear_interned_dict(); } From 23e2211c679b8cfad23c4c61ad82b00e5a53d8d8 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Tue, 28 Feb 2023 11:24:35 -0700 Subject: [PATCH 2/5] Move the interned dict to PyInterpreterState. --- Include/internal/pycore_global_objects.h | 9 +---- Include/internal/pycore_runtime.h | 1 - Objects/unicodeobject.c | 50 +++++++++++------------- 3 files changed, 25 insertions(+), 35 deletions(-) diff --git a/Include/internal/pycore_global_objects.h b/Include/internal/pycore_global_objects.h index 30c7c4e3bbd067..607d829647c57a 100644 --- a/Include/internal/pycore_global_objects.h +++ b/Include/internal/pycore_global_objects.h @@ -23,13 +23,6 @@ extern "C" { // Only immutable objects should be considered runtime-global. // All others must be per-interpreter. -#define _Py_CACHED_OBJECT(NAME) \ - _PyRuntime.cached_objects.NAME - -struct _Py_cached_objects { - PyObject *interned_strings; -}; - #define _Py_GLOBAL_OBJECT(NAME) \ _PyRuntime.static_objects.NAME #define _Py_SINGLETON(NAME) \ @@ -65,6 +58,8 @@ struct _Py_static_objects { (interp)->cached_objects.NAME struct _Py_interp_cached_objects { + PyObject *interned_strings; + /* AST */ PyObject *str_replace_inf; diff --git a/Include/internal/pycore_runtime.h b/Include/internal/pycore_runtime.h index 2350eaab5976ca..a3be60ac321b49 100644 --- a/Include/internal/pycore_runtime.h +++ b/Include/internal/pycore_runtime.h @@ -165,7 +165,6 @@ typedef struct pyruntimestate { } types; /* All the objects that are shared by the runtime's interpreters. */ - struct _Py_cached_objects cached_objects; struct _Py_static_objects static_objects; /* The following fields are here to avoid allocation during init. diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 976f69db12ddd8..677f78330bcf5a 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -204,7 +204,7 @@ unicode_decode_utf8(const char *s, Py_ssize_t size, _Py_error_handler error_handler, const char *errors, Py_ssize_t *consumed); #ifdef Py_DEBUG -static inline int unicode_is_finalizing(void); +static inline int unicode_is_finalizing(PyInterpreterState *); static int unicode_is_singleton(PyObject *unicode); #endif @@ -231,33 +231,33 @@ static inline PyObject* unicode_new_empty(void) Another way to look at this is that to say that the actual reference count of a string is: s->ob_refcnt + (s->state ? 2 : 0) */ -static inline PyObject *get_interned_dict(void) +static inline PyObject *get_interned_dict(PyInterpreterState *interp) { - return _Py_CACHED_OBJECT(interned_strings); + return _Py_INTERP_CACHED_OBJECT(interp, interned_strings); } static PyObject * -ensure_interned_dict() +ensure_interned_dict(PyInterpreterState *interp) { - PyObject *interned = get_interned_dict(); + PyObject *interned = get_interned_dict(interp); if (interned == NULL) { interned = PyDict_New(); if (interned == NULL) { return NULL; } - _Py_CACHED_OBJECT(interned_strings) = interned; + _Py_INTERP_CACHED_OBJECT(interp, interned_strings) = interned; } return interned; } static void -clear_interned_dict(void) +clear_interned_dict(PyInterpreterState *interp) { - PyObject *interned = get_interned_dict(); + PyObject *interned = get_interned_dict(interp); if (interned != NULL) { PyDict_Clear(interned); Py_DECREF(interned); - _Py_CACHED_OBJECT(interned_strings) = NULL; + _Py_INTERP_CACHED_OBJECT(interp, interned_strings) = NULL; } } @@ -1543,8 +1543,9 @@ find_maxchar_surrogates(const wchar_t *begin, const wchar_t *end, static void unicode_dealloc(PyObject *unicode) { + PyInterpreterState *interp = _PyInterpreterState_GET(); #ifdef Py_DEBUG - if (!unicode_is_finalizing() && unicode_is_singleton(unicode)) { + if (!unicode_is_finalizing(interp) && unicode_is_singleton(unicode)) { _Py_FatalRefcountError("deallocating an Unicode singleton"); } #endif @@ -1556,7 +1557,7 @@ unicode_dealloc(PyObject *unicode) PyDict_DelItem(). */ assert(Py_REFCNT(unicode) == 0); Py_SET_REFCNT(unicode, 3); - PyObject *interned = get_interned_dict(); + PyObject *interned = get_interned_dict(interp); assert(interned != NULL); if (PyDict_DelItem(interned, unicode) != 0) { _PyErr_WriteUnraisableMsg("deletion of interned string failed", @@ -14623,7 +14624,8 @@ PyUnicode_InternInPlace(PyObject **p) return; } - PyObject *interned = ensure_interned_dict(); + PyInterpreterState *interp = _PyInterpreterState_GET(); + PyObject *interned = ensure_interned_dict(interp); if (interned == NULL) { PyErr_Clear(); /* Don't leave an exception */ return; @@ -14671,12 +14673,7 @@ PyUnicode_InternFromString(const char *cp) void _PyUnicode_ClearInterned(PyInterpreterState *interp) { - if (!_Py_IsMainInterpreter(interp)) { - // interned dict is shared by all interpreters - return; - } - - PyObject *interned = get_interned_dict(); + PyObject *interned = get_interned_dict(interp); if (interned == NULL) { return; } @@ -14711,7 +14708,7 @@ _PyUnicode_ClearInterned(PyInterpreterState *interp) total_length); #endif - clear_interned_dict(); + clear_interned_dict(interp); } @@ -15122,9 +15119,9 @@ _PyUnicode_EnableLegacyWindowsFSEncoding(void) #ifdef Py_DEBUG static inline int -unicode_is_finalizing(void) +unicode_is_finalizing(PyInterpreterState *interp) { - return (get_interned_dict() == NULL); + return (get_interned_dict(interp) == NULL); } #endif @@ -15147,14 +15144,13 @@ _PyUnicode_Fini(PyInterpreterState *interp) { struct _Py_unicode_state *state = &interp->unicode; - if (_Py_IsMainInterpreter(interp)) { - // _PyUnicode_ClearInterned() must be called before _PyUnicode_Fini() - assert(get_interned_dict() == NULL); - // bpo-47182: force a unicodedata CAPI capsule re-import on - // subsequent initialization of main interpreter. - } + // _PyUnicode_ClearInterned() must be called before _PyUnicode_Fini() + assert(get_interned_dict(interp) == NULL); _PyUnicode_FiniEncodings(&state->fs_codec); + + // bpo-47182: force a unicodedata CAPI capsule re-import on + // subsequent initialization of interpreter. interp->unicode.ucnhash_capi = NULL; unicode_clear_identifiers(state); From 969caba78edcd8af115e7b36eb4c5ee889176bce Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Tue, 28 Feb 2023 11:49:03 -0700 Subject: [PATCH 3/5] Intern the static strings for every interpreter. --- Include/internal/pycore_unicodeobject.h | 1 + .../internal/pycore_unicodeobject_generated.h | 1328 ++++++++--------- Objects/unicodeobject.c | 16 +- Tools/build/generate_global_objects.py | 4 +- 4 files changed, 676 insertions(+), 673 deletions(-) diff --git a/Include/internal/pycore_unicodeobject.h b/Include/internal/pycore_unicodeobject.h index 19faceebf1d8ee..ff97b9a623d210 100644 --- a/Include/internal/pycore_unicodeobject.h +++ b/Include/internal/pycore_unicodeobject.h @@ -59,6 +59,7 @@ struct _Py_unicode_state { struct _Py_unicode_ids ids; }; +extern void _PyUnicode_InternInPlace(PyInterpreterState *interp, PyObject **p); extern void _PyUnicode_ClearInterned(PyInterpreterState *interp); diff --git a/Include/internal/pycore_unicodeobject_generated.h b/Include/internal/pycore_unicodeobject_generated.h index b47d240e492ff9..0ed985a44bd314 100644 --- a/Include/internal/pycore_unicodeobject_generated.h +++ b/Include/internal/pycore_unicodeobject_generated.h @@ -10,1334 +10,1334 @@ extern "C" { /* The following is auto-generated by Tools/build/generate_global_objects.py. */ static inline void -_PyUnicode_InitStaticStrings(void) { +_PyUnicode_InitStaticStrings(PyInterpreterState *interp) { PyObject *string; string = &_Py_ID(CANCELLED); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(FINISHED); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(False); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(JSONDecodeError); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(PENDING); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(Py_Repr); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(TextIOWrapper); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(True); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(WarningMessage); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_WindowsConsoleIO); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__IOBase_closed); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__abc_tpflags__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__abs__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__abstractmethods__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__add__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__aenter__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__aexit__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__aiter__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__all__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__and__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__anext__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__annotations__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__args__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__asyncio_running_event_loop__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__await__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__bases__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__bool__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__build_class__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__builtins__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__bytes__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__call__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__cantrace__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__class__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__class_getitem__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__classcell__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__complex__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__contains__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__copy__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__ctypes_from_outparam__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__del__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__delattr__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__delete__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__delitem__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__dict__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__dictoffset__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__dir__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__divmod__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__doc__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__enter__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__eq__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__exit__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__file__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__float__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__floordiv__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__format__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__fspath__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__ge__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__get__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__getattr__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__getattribute__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__getinitargs__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__getitem__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__getnewargs__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__getnewargs_ex__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__getstate__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__gt__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__hash__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__iadd__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__iand__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__ifloordiv__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__ilshift__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__imatmul__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__imod__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__import__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__imul__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__index__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__init__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__init_subclass__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__instancecheck__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__int__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__invert__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__ior__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__ipow__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__irshift__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__isabstractmethod__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__isub__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__iter__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__itruediv__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__ixor__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__le__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__len__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__length_hint__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__lltrace__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__loader__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__lshift__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__lt__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__main__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__matmul__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__missing__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__mod__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__module__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__mro_entries__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__mul__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__name__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__ne__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__neg__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__new__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__newobj__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__newobj_ex__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__next__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__notes__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__or__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__orig_class__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__origin__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__package__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__parameters__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__path__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__pos__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__pow__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__prepare__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__qualname__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__radd__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rand__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rdivmod__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__reduce__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__reduce_ex__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__repr__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__reversed__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rfloordiv__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rlshift__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rmatmul__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rmod__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rmul__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__ror__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__round__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rpow__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rrshift__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rshift__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rsub__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rtruediv__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__rxor__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__set__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__set_name__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__setattr__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__setitem__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__setstate__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__sizeof__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__slotnames__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__slots__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__spec__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__str__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__sub__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__subclasscheck__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__subclasshook__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__truediv__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__trunc__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__typing_is_unpacked_typevartuple__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__typing_prepare_subst__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__typing_subst__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__typing_unpacked_tuple_args__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__warningregistry__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__weaklistoffset__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__weakref__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(__xor__); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_abc_impl); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_abstract_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_active); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_annotation); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_anonymous_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_argtypes_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_as_parameter_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_asyncio_future_blocking); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_blksize); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_bootstrap); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_check_retval_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_dealloc_warn); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_feature_version); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_fields_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_finalizing); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_find_and_load); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_fix_up_module); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_flags_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_get_sourcefile); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_handle_fromlist); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_initializing); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_io); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_is_text_encoding); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_length_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_limbo); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_lock_unlock_module); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_loop); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_needs_com_addref_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_pack_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_restype_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_showwarnmsg); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_shutdown); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_slotnames); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_strptime_datetime); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_swappedbytes_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_type_); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_uninitialized_submodules); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_warn_unawaited_coroutine); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(_xoptions); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(a); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(abs_tol); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(access); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(add); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(add_done_callback); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(after_in_child); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(after_in_parent); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(aggregate_class); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(append); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(argdefs); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(arguments); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(argv); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(as_integer_ratio); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(ast); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(attribute); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(authorizer_callback); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(autocommit); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(b); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(backtick); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(base); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(before); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(big); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(binary_form); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(block); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(buffer); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(buffer_callback); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(buffer_size); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(buffering); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(buffers); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(bufsize); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(builtins); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(byteorder); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(bytes); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(bytes_per_sep); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(c); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(c_call); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(c_exception); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(c_return); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(cached_statements); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(cadata); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(cafile); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(call); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(call_exception_handler); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(call_soon); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(cancel); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(capath); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(category); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(cb_type); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(certfile); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(check_same_thread); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(clear); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(close); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(closed); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(closefd); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(closure); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_argcount); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_cellvars); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_code); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_consts); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_exceptiontable); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_filename); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_firstlineno); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_flags); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_freevars); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_kwonlyargcount); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_linetable); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_name); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_names); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_nlocals); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_posonlyargcount); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_qualname); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_stacksize); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(co_varnames); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(code); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(command); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(comment_factory); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(consts); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(context); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(cookie); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(copy); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(copyreg); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(coro); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(count); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(cwd); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(d); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(data); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(database); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(decode); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(decoder); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(default); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(defaultaction); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(delete); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(depth); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(detect_types); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(deterministic); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(device); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(dict); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(dictcomp); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(difference_update); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(digest); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(digest_size); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(digestmod); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(dir_fd); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(discard); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(dispatch_table); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(displayhook); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(dklen); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(doc); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(dont_inherit); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(dst); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(dst_dir_fd); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(duration); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(e); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(effective_ids); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(element_factory); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(encode); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(encoding); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(end); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(end_lineno); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(end_offset); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(endpos); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(env); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(errors); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(event); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(eventmask); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(exc_type); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(exc_value); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(excepthook); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(exception); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(exp); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(extend); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(facility); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(factory); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(false); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(family); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fanout); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fd); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fd2); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fdel); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fget); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(file); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(file_actions); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(filename); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fileno); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(filepath); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fillvalue); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(filters); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(final); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(find_class); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fix_imports); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(flags); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(flush); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(follow_symlinks); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(format); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(frequency); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(from_param); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fromlist); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fromtimestamp); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fromutc); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(fset); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(func); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(future); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(generation); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(genexpr); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(get); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(get_debug); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(get_event_loop); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(get_loop); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(get_source); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(getattr); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(getstate); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(gid); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(globals); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(groupindex); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(groups); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(handle); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(hash_name); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(header); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(headers); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(hi); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(hook); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(id); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(ident); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(ignore); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(imag); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(importlib); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(in_fd); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(incoming); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(indexgroup); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(inf); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(inheritable); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(initial); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(initial_bytes); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(initial_value); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(initval); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(inner_size); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(input); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(insert_comments); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(insert_pis); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(instructions); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(intern); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(intersection); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(isatty); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(isinstance); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(isoformat); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(isolation_level); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(istext); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(item); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(items); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(iter); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(iterable); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(iterations); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(join); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(jump); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(keepends); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(key); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(keyfile); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(keys); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(kind); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(kw); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(kw1); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(kw2); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(lambda); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(last); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(last_node); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(last_traceback); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(last_type); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(last_value); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(latin1); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(leaf_size); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(len); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(length); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(level); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(limit); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(line); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(line_buffering); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(lineno); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(listcomp); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(little); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(lo); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(locale); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(locals); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(logoption); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(loop); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(mapping); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(match); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(max_length); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(maxdigits); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(maxevents); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(maxmem); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(maxsplit); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(maxvalue); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(memLevel); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(memlimit); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(message); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(metaclass); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(method); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(mod); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(mode); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(module); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(module_globals); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(modules); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(mro); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(msg); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(mycmp); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(n); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(n_arg); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(n_fields); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(n_sequence_fields); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(n_unnamed_fields); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(name); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(name_from); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(namespace_separator); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(namespaces); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(narg); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(ndigits); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(new_limit); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(newline); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(newlines); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(next); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(node_depth); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(node_offset); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(ns); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(nstype); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(nt); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(null); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(number); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(obj); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(object); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(offset); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(offset_dst); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(offset_src); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(on_type_read); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(onceregistry); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(only_keys); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(oparg); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(opcode); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(open); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(opener); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(operation); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(optimize); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(options); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(order); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(out_fd); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(outgoing); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(overlapped); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(owner); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(p); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(pages); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(parent); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(password); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(path); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(pattern); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(peek); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(persistent_id); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(persistent_load); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(person); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(pi_factory); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(pid); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(policy); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(pos); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(pos1); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(pos2); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(posix); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(print_file_and_line); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(priority); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(progress); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(progress_handler); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(proto); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(protocol); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(ps1); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(ps2); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(query); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(quotetabs); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(r); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(raw); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(read); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(read1); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(readable); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(readall); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(readinto); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(readinto1); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(readline); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(readonly); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(real); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(reducer_override); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(registry); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(rel_tol); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(reload); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(repl); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(replace); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(reserved); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(reset); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(resetids); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(return); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(reverse); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(reversed); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(s); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(salt); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(sched_priority); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(scheduler); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(seek); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(seekable); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(selectors); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(self); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(send); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(sep); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(sequence); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(server_hostname); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(server_side); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(session); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(setcomp); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(setpgroup); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(setsid); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(setsigdef); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(setsigmask); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(setstate); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(shape); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(show_cmd); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(signed); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(size); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(sizehint); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(skip_file_prefixes); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(sleep); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(sock); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(sort); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(sound); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(source); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(source_traceback); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(src); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(src_dir_fd); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(stacklevel); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(start); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(statement); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(status); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(stderr); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(stdin); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(stdout); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(step); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(store_name); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(strategy); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(strftime); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(strict); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(strict_mode); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(string); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(sub_key); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(symmetric_difference_update); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(tabsize); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(tag); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(target); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(target_is_directory); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(task); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(tb_frame); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(tb_lasti); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(tb_lineno); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(tb_next); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(tell); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(template); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(term); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(text); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(threading); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(throw); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(timeout); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(times); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(timetuple); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(top); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(trace_callback); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(traceback); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(trailers); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(translate); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(true); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(truncate); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(twice); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(txt); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(type); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(tz); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(tzname); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(uid); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(unlink); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(unraisablehook); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(uri); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(usedforsecurity); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(value); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(values); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(version); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(warnings); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(warnoptions); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(wbits); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(week); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(weekday); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(which); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(who); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(withdata); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(writable); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(write); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(write_through); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(x); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(year); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); string = &_Py_ID(zdict); - PyUnicode_InternInPlace(&string); + _PyUnicode_InternInPlace(interp, &string); } /* End auto-generated code */ #ifdef __cplusplus diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 677f78330bcf5a..d71573aeb4df8f 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -14554,17 +14554,13 @@ _PyUnicode_InitState(PyInterpreterState *interp) PyStatus _PyUnicode_InitGlobalObjects(PyInterpreterState *interp) { - if (!_Py_IsMainInterpreter(interp)) { - return _PyStatus_OK(); - } - /* Intern statically allocated string identifiers and deepfreeze strings. * This must be done before any module initialization so that statically * allocated string identifiers are used instead of heap allocated strings. * Deepfreeze uses the interned identifiers if present to save space * else generates them and they are interned to speed up dict lookups. */ - _PyUnicode_InitStaticStrings(); + _PyUnicode_InitStaticStrings(interp); #ifdef Py_DEBUG assert(_PyUnicode_CheckConsistency(&_Py_STR(empty), 1)); @@ -14602,7 +14598,7 @@ _PyUnicode_InitTypes(PyInterpreterState *interp) void -PyUnicode_InternInPlace(PyObject **p) +_PyUnicode_InternInPlace(PyInterpreterState *interp, PyObject **p) { PyObject *s = *p; #ifdef Py_DEBUG @@ -14624,7 +14620,6 @@ PyUnicode_InternInPlace(PyObject **p) return; } - PyInterpreterState *interp = _PyInterpreterState_GET(); PyObject *interned = ensure_interned_dict(interp); if (interned == NULL) { PyErr_Clear(); /* Don't leave an exception */ @@ -14649,6 +14644,13 @@ PyUnicode_InternInPlace(PyObject **p) _PyUnicode_STATE(s).interned = 1; } +void +PyUnicode_InternInPlace(PyObject **p) +{ + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternInPlace(interp, p); +} + // Function kept for the stable ABI. PyAPI_FUNC(void) PyUnicode_InternImmortal(PyObject **); void diff --git a/Tools/build/generate_global_objects.py b/Tools/build/generate_global_objects.py index 9ceae89878cda8..dadf4ebb457eed 100644 --- a/Tools/build/generate_global_objects.py +++ b/Tools/build/generate_global_objects.py @@ -354,13 +354,13 @@ def generate_static_strings_initializer(identifiers, strings): printer.write(before) printer.write(START) printer.write("static inline void") - with printer.block("_PyUnicode_InitStaticStrings(void)"): + with printer.block("_PyUnicode_InitStaticStrings(PyInterpreterState *interp)"): printer.write(f'PyObject *string;') for i in sorted(identifiers): # This use of _Py_ID() is ignored by iter_global_strings() # since iter_files() ignores .h files. printer.write(f'string = &_Py_ID({i});') - printer.write(f'PyUnicode_InternInPlace(&string);') + printer.write(f'_PyUnicode_InternInPlace(interp, &string);') # XXX What about "strings"? printer.write(END) printer.write(after) From 2e8773b021fb0af96e5544e5acf835d9844e2999 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Mon, 27 Mar 2023 16:23:13 -0600 Subject: [PATCH 4/5] Revert "gh-100227: Make the Global Interned Dict Safe for Isolated Interpreters (gh-102925)" This reverts commit 87be8d95228ee95de9045cf2952311d20dc5de45. --- Include/internal/pycore_global_objects.h | 4 - Include/internal/pycore_pystate.h | 5 - Include/internal/pycore_runtime_init.h | 3 - Include/internal/pycore_unicodeobject.h | 1 - Objects/unicodeobject.c | 13 +- Python/pylifecycle.c | 4 - Python/pystate.c | 204 +++-------------------- 7 files changed, 30 insertions(+), 204 deletions(-) diff --git a/Include/internal/pycore_global_objects.h b/Include/internal/pycore_global_objects.h index 858321d67df481..9957da1fc5f22a 100644 --- a/Include/internal/pycore_global_objects.h +++ b/Include/internal/pycore_global_objects.h @@ -28,10 +28,6 @@ extern "C" { struct _Py_cached_objects { PyObject *interned_strings; - /* A thread state tied to the main interpreter, - used exclusively for when a global object (e.g. interned strings) - is resized (i.e. deallocated + allocated) from an arbitrary thread. */ - PyThreadState main_tstate; }; #define _Py_GLOBAL_OBJECT(NAME) \ diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index f159b516e66b18..7046ec8d9adaaf 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -127,11 +127,6 @@ PyAPI_FUNC(void) _PyThreadState_Init( PyThreadState *tstate); PyAPI_FUNC(void) _PyThreadState_DeleteExcept(PyThreadState *tstate); -extern void _PyThreadState_InitDetached(PyThreadState *, PyInterpreterState *); -extern void _PyThreadState_ClearDetached(PyThreadState *); - -extern PyObject * _Py_AddToGlobalDict(PyObject *, PyObject *, PyObject *); - static inline void _PyThreadState_UpdateTracingState(PyThreadState *tstate) diff --git a/Include/internal/pycore_runtime_init.h b/Include/internal/pycore_runtime_init.h index fd358b2da6ccff..7cfa7c0c02494a 100644 --- a/Include/internal/pycore_runtime_init.h +++ b/Include/internal/pycore_runtime_init.h @@ -59,9 +59,6 @@ extern PyTypeObject _PyExc_MemoryError; .types = { \ .next_version_tag = 1, \ }, \ - .cached_objects = { \ - .main_tstate = _PyThreadState_INIT, \ - }, \ .static_objects = { \ .singletons = { \ .small_ints = _Py_small_ints_INIT, \ diff --git a/Include/internal/pycore_unicodeobject.h b/Include/internal/pycore_unicodeobject.h index ed4feb603d6f38..19faceebf1d8ee 100644 --- a/Include/internal/pycore_unicodeobject.h +++ b/Include/internal/pycore_unicodeobject.h @@ -34,7 +34,6 @@ struct _Py_unicode_runtime_ids { struct _Py_unicode_runtime_state { struct _Py_unicode_runtime_ids ids; - /* The interned dict is at _PyRuntime.cached_objects.interned_strings. */ }; /* fs_codec.encoding is initialized to NULL. diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 891a65576ee29b..b9fb53147b9b51 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -14609,11 +14609,16 @@ PyUnicode_InternInPlace(PyObject **p) } PyObject *interned = get_interned_dict(); - PyObject *t = _Py_AddToGlobalDict(interned, s, s); + assert(interned != NULL); + + PyObject *t = PyDict_SetDefault(interned, s, s); + if (t == NULL) { + PyErr_Clear(); + return; + } + if (t != s) { - if (t != NULL) { - Py_SETREF(*p, Py_NewRef(t)); - } + Py_SETREF(*p, Py_NewRef(t)); return; } diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 5d7f8621833040..8110d94ba17526 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -636,8 +636,6 @@ pycore_create_interpreter(_PyRuntimeState *runtime, return status; } - _PyThreadState_InitDetached(&runtime->cached_objects.main_tstate, interp); - *tstate_p = tstate; return _PyStatus_OK(); } @@ -1934,8 +1932,6 @@ Py_FinalizeEx(void) // XXX Do this sooner during finalization. // XXX Ensure finalizer errors are handled properly. - _PyThreadState_ClearDetached(&runtime->cached_objects.main_tstate); - finalize_interp_clear(tstate); finalize_interp_delete(tstate->interp); diff --git a/Python/pystate.c b/Python/pystate.c index 394b12d24065f2..b17efdbefd124c 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -565,124 +565,6 @@ _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime) #endif -//--------------- -// global objects -//--------------- - -/* The global objects thread state is meant to be used in a very limited - way and should not be used to actually run any Python code. */ - -static PyThreadState * -bind_global_objects_state(_PyRuntimeState *runtime) -{ - PyThreadState *main_tstate = &runtime->cached_objects.main_tstate; - - bind_tstate(main_tstate); - /* Unlike _PyThreadState_Bind(), we do not modify gilstate TSS. */ - - return main_tstate; -} - -static void -unbind_global_objects_state(_PyRuntimeState *runtime) -{ - PyThreadState *main_tstate = &runtime->cached_objects.main_tstate; - assert(tstate_is_alive(main_tstate)); - assert(!main_tstate->_status.active); - assert(gilstate_tss_get(runtime) != main_tstate); - - unbind_tstate(main_tstate); - - /* This thread state may be bound/unbound repeatedly, - so we must erase evidence that it was ever bound (or unbound). */ - main_tstate->_status.bound = 0; - main_tstate->_status.unbound = 0; - - /* We must fully unlink the thread state from any OS thread, - to allow it to be bound more than once. */ - main_tstate->thread_id = 0; -#ifdef PY_HAVE_THREAD_NATIVE_ID - main_tstate->native_thread_id = 0; -#endif -} - -static inline void -acquire_global_objects_lock(_PyRuntimeState *runtime) -{ - /* For now we can rely on the GIL, so we don't actually - acquire a global lock here. */ - assert(current_fast_get(runtime) != NULL); -} - -static inline void -release_global_objects_lock(_PyRuntimeState *runtime) -{ - /* For now we can rely on the GIL, so we don't actually - release a global lock here. */ - assert(current_fast_get(runtime) != NULL); -} - -PyObject * -_Py_AddToGlobalDict(PyObject *dict, PyObject *key, PyObject *value) -{ - assert(dict != NULL); - assert(PyDict_CheckExact(dict)); - - /* All global objects are stored in _PyRuntime - and owned by the main interpreter. */ - _PyRuntimeState *runtime = &_PyRuntime; - PyThreadState *curts = current_fast_get(runtime); - PyInterpreterState *interp = curts->interp; - assert(interp != NULL); // The GIL must be held. - - /* Due to interpreter isolation we must hold a global lock, - starting at this point and ending before we return. - Note that the operations in this function are very fucused - and we should not expect any reentrancy. */ - acquire_global_objects_lock(runtime); - - /* Swap to the main interpreter, if necessary. */ - PyThreadState *oldts = NULL; - if (!_Py_IsMainInterpreter(interp)) { - PyThreadState *main_tstate = bind_global_objects_state(runtime); - - oldts = _PyThreadState_Swap(runtime, main_tstate); - assert(oldts != NULL); - assert(!_Py_IsMainInterpreter(oldts->interp)); - - /* The limitations of the global objects thread state apply - from this point to the point we swap back to oldts. */ - } - - /* This might trigger a resize, which is why we must "acquire" - the global object state. Also note that PyDict_SetDefault() - must be compatible with our reentrancy and global objects state - constraints. */ - PyObject *actual = PyDict_SetDefault(dict, key, value); - if (actual == NULL) { - /* Raising an exception from one interpreter in another - is problematic, so we clear it and let the caller deal - with the returned NULL. */ - assert(PyErr_ExceptionMatches(PyExc_MemoryError)); - PyErr_Clear(); - } - - /* Swap back, it it wasn't in the main interpreter already. */ - if (oldts != NULL) { - // The returned tstate should be _PyRuntime.cached_objects.main_tstate. - _PyThreadState_Swap(runtime, oldts); - - unbind_global_objects_state(runtime); - } - - release_global_objects_lock(runtime); - - // XXX Immortalize the key and value. - - return actual; -} - - /*************************************/ /* the per-interpreter runtime state */ /*************************************/ @@ -1335,7 +1217,8 @@ free_threadstate(PyThreadState *tstate) static void init_threadstate(PyThreadState *tstate, - PyInterpreterState *interp, uint64_t id) + PyInterpreterState *interp, uint64_t id, + PyThreadState *next) { if (tstate->_status.initialized) { Py_FatalError("thread state already initialized"); @@ -1344,13 +1227,18 @@ init_threadstate(PyThreadState *tstate, assert(interp != NULL); tstate->interp = interp; - // next/prev are set in add_threadstate(). - assert(tstate->next == NULL); - assert(tstate->prev == NULL); - assert(id > 0); tstate->id = id; + assert(interp->threads.head == tstate); + assert((next != NULL && id != 1) || (next == NULL && id == 1)); + if (next != NULL) { + assert(next->prev == NULL || next->prev == tstate); + next->prev = tstate; + } + tstate->next = next; + assert(tstate->prev == NULL); + // thread_id and native_thread_id are set in bind_tstate(). tstate->py_recursion_limit = interp->ceval.recursion_limit, @@ -1371,22 +1259,6 @@ init_threadstate(PyThreadState *tstate, tstate->_status.initialized = 1; } -static void -add_threadstate(PyInterpreterState *interp, PyThreadState *tstate, - PyThreadState *next) -{ - assert(interp->threads.head != tstate); - assert((next != NULL && tstate->id != 1) || - (next == NULL && tstate->id == 1)); - if (next != NULL) { - assert(next->prev == NULL || next->prev == tstate); - next->prev = tstate; - } - tstate->next = next; - assert(tstate->prev == NULL); - interp->threads.head = tstate; -} - static PyThreadState * new_threadstate(PyInterpreterState *interp) { @@ -1426,9 +1298,9 @@ new_threadstate(PyInterpreterState *interp) &initial._main_interpreter._initial_thread, sizeof(*tstate)); } + interp->threads.head = tstate; - init_threadstate(tstate, interp, id); - add_threadstate(interp, tstate, old_head); + init_threadstate(tstate, interp, id, old_head); HEAD_UNLOCK(runtime); if (!used_newtstate) { @@ -1475,33 +1347,6 @@ _PyThreadState_Init(PyThreadState *tstate) Py_FatalError("_PyThreadState_Init() is for internal use only"); } -void -_PyThreadState_InitDetached(PyThreadState *tstate, PyInterpreterState *interp) -{ - _PyRuntimeState *runtime = interp->runtime; - - HEAD_LOCK(runtime); - interp->threads.next_unique_id += 1; - uint64_t id = interp->threads.next_unique_id; - HEAD_UNLOCK(runtime); - - init_threadstate(tstate, interp, id); - // We do not call add_threadstate(). -} - - -static void -clear_datastack(PyThreadState *tstate) -{ - _PyStackChunk *chunk = tstate->datastack_chunk; - tstate->datastack_chunk = NULL; - while (chunk != NULL) { - _PyStackChunk *prev = chunk->previous; - _PyObject_VirtualFree(chunk, chunk->size); - chunk = prev; - } -} - void PyThreadState_Clear(PyThreadState *tstate) { @@ -1576,6 +1421,7 @@ PyThreadState_Clear(PyThreadState *tstate) // XXX Do it as early in the function as possible. } + /* Common code for PyThreadState_Delete() and PyThreadState_DeleteCurrent() */ static void tstate_delete_common(PyThreadState *tstate) @@ -1608,25 +1454,17 @@ tstate_delete_common(PyThreadState *tstate) unbind_tstate(tstate); // XXX Move to PyThreadState_Clear()? - clear_datastack(tstate); + _PyStackChunk *chunk = tstate->datastack_chunk; + tstate->datastack_chunk = NULL; + while (chunk != NULL) { + _PyStackChunk *prev = chunk->previous; + _PyObject_VirtualFree(chunk, chunk->size); + chunk = prev; + } tstate->_status.finalized = 1; } -void -_PyThreadState_ClearDetached(PyThreadState *tstate) -{ - assert(!tstate->_status.bound); - assert(!tstate->_status.bound_gilstate); - assert(tstate->datastack_chunk == NULL); - assert(tstate->thread_id == 0); - assert(tstate->native_thread_id == 0); - assert(tstate->next == NULL); - assert(tstate->prev == NULL); - - PyThreadState_Clear(tstate); - clear_datastack(tstate); -} static void zapthreads(PyInterpreterState *interp) From 408ee56a97e291c8e5678e59fc0c26896d92c80e Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Mon, 27 Mar 2023 16:37:25 -0600 Subject: [PATCH 5/5] Fix unicode_is_finalizing(). --- Objects/unicodeobject.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index d71573aeb4df8f..212a91144041d2 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -204,7 +204,7 @@ unicode_decode_utf8(const char *s, Py_ssize_t size, _Py_error_handler error_handler, const char *errors, Py_ssize_t *consumed); #ifdef Py_DEBUG -static inline int unicode_is_finalizing(PyInterpreterState *); +static inline int unicode_is_finalizing(void); static int unicode_is_singleton(PyObject *unicode); #endif @@ -1545,7 +1545,7 @@ unicode_dealloc(PyObject *unicode) { PyInterpreterState *interp = _PyInterpreterState_GET(); #ifdef Py_DEBUG - if (!unicode_is_finalizing(interp) && unicode_is_singleton(unicode)) { + if (!unicode_is_finalizing() && unicode_is_singleton(unicode)) { _Py_FatalRefcountError("deallocating an Unicode singleton"); } #endif @@ -15121,9 +15121,9 @@ _PyUnicode_EnableLegacyWindowsFSEncoding(void) #ifdef Py_DEBUG static inline int -unicode_is_finalizing(PyInterpreterState *interp) +unicode_is_finalizing(void) { - return (get_interned_dict(interp) == NULL); + return (get_interned_dict(_PyInterpreterState_Main()) == NULL); } #endif