mirror of
https://github.com/python/cpython
synced 2026-09-27 03:08:16 +03:00
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 | ||
| deepfreeze | ||
| frozen_modules | ||
| _warnings.c | ||
| adaptive.md | ||
| asdl.c | ||
| ast.c | ||
| ast_opt.c | ||
| ast_unparse.c | ||
| bltinmodule.c | ||
| bootstrap_hash.c | ||
| ceval.c | ||
| ceval_gil.h | ||
| codecs.c | ||
| compile.c | ||
| condvar.h | ||
| context.c | ||
| dtoa.c | ||
| dup2.c | ||
| dynamic_annotations.c | ||
| dynload_hpux.c | ||
| dynload_shlib.c | ||
| dynload_stub.c | ||
| dynload_win.c | ||
| errors.c | ||
| fileutils.c | ||
| formatter_unicode.c | ||
| frame.c | ||
| frozen.c | ||
| frozenmain.c | ||
| future.c | ||
| getargs.c | ||
| getcompiler.c | ||
| getcopyright.c | ||
| getopt.c | ||
| getplatform.c | ||
| getversion.c | ||
| hamt.c | ||
| hashtable.c | ||
| import.c | ||
| importdl.c | ||
| importdl.h | ||
| initconfig.c | ||
| makeopcodetargets.py | ||
| marshal.c | ||
| modsupport.c | ||
| mysnprintf.c | ||
| mystrtoul.c | ||
| opcode_targets.h | ||
| pathconfig.c | ||
| preconfig.c | ||
| pyarena.c | ||
| pyctype.c | ||
| pyfpe.c | ||
| pyhash.c | ||
| pylifecycle.c | ||
| pymath.c | ||
| pystate.c | ||
| pystrcmp.c | ||
| pystrhex.c | ||
| pystrtod.c | ||
| Python-ast.c | ||
| Python-tokenize.c | ||
| pythonrun.c | ||
| pytime.c | ||
| README | ||
| specialize.c | ||
| stdlib_module_names.h | ||
| structmember.c | ||
| suggestions.c | ||
| symtable.c | ||
| sysmodule.c | ||
| thread.c | ||
| thread_nt.h | ||
| thread_pthread.h | ||
| traceback.c | ||
| wordcode_helpers.h | ||
Miscellaneous source files for the main Python shared library