mirror of https://github.com/python/cpython
81c72044a1
We're no longer using _Py_IDENTIFIER() (or _Py_static_string()) in any core CPython code. It is still used in a number of non-builtin stdlib modules. The replacement is: PyUnicodeObject (not pointer) fields under _PyRuntimeState, statically initialized as part of _PyRuntime. A new _Py_GET_GLOBAL_IDENTIFIER() macro facilitates lookup of the fields (along with _Py_GET_GLOBAL_STRING() for non-identifier strings). https://bugs.python.org/issue46541#msg411799 explains the rationale for this change. The core of the change is in: * (new) Include/internal/pycore_global_strings.h - the declarations for the global strings, along with the macros * Include/internal/pycore_runtime_init.h - added the static initializers for the global strings * Include/internal/pycore_global_objects.h - where the struct in pycore_global_strings.h is hooked into _PyRuntimeState * Tools/scripts/generate_global_objects.py - added generation of the global string declarations and static initializers I've also added a --check flag to generate_global_objects.py (along with make check-global-objects) to check for unused global strings. That check is added to the PR CI config. The remainder of this change updates the core code to use _Py_GET_GLOBAL_IDENTIFIER() instead of _Py_IDENTIFIER() and the related _Py*Id functions (likewise for _Py_GET_GLOBAL_STRING() instead of _Py_static_string()). This includes adding a few functions where there wasn't already an alternative to _Py*Id(), replacing the _Py_Identifier * parameter with PyObject *. The following are not changed (yet): * stop using _Py_IDENTIFIER() in the stdlib modules * (maybe) get rid of _Py_IDENTIFIER(), etc. entirely -- this may not be doable as at least one package on PyPI using this (private) API * (maybe) intern the strings during runtime init https://bugs.python.org/issue46541 |
||
---|---|---|
.. | ||
clinic | ||
stringlib | ||
README | ||
abstract.c | ||
accu.c | ||
boolobject.c | ||
bytearrayobject.c | ||
bytes_methods.c | ||
bytesobject.c | ||
call.c | ||
capsule.c | ||
cellobject.c | ||
classobject.c | ||
codeobject.c | ||
complexobject.c | ||
descrobject.c | ||
dictnotes.txt | ||
dictobject.c | ||
enumobject.c | ||
exception_handling_notes.txt | ||
exceptions.c | ||
fileobject.c | ||
floatobject.c | ||
frameobject.c | ||
funcobject.c | ||
genericaliasobject.c | ||
genobject.c | ||
interpreteridobject.c | ||
iterobject.c | ||
listobject.c | ||
listsort.txt | ||
lnotab_notes.txt | ||
longobject.c | ||
memoryobject.c | ||
methodobject.c | ||
moduleobject.c | ||
namespaceobject.c | ||
object.c | ||
obmalloc.c | ||
odictobject.c | ||
picklebufobject.c | ||
rangeobject.c | ||
setobject.c | ||
sliceobject.c | ||
structseq.c | ||
tupleobject.c | ||
typeobject.c | ||
typeslots.inc | ||
typeslots.py | ||
unicodectype.c | ||
unicodeobject.c | ||
unicodetype_db.h | ||
unionobject.c | ||
weakrefobject.c |
README
Source files for various builtin objects