diff options
author | Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com> | 2022-07-08 23:17:37 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-08 10:47:37 -0700 |
commit | 9dff9f48144cf5d8bc1e6605f258973200c6b8c8 (patch) | |
tree | f5c278b5a4b4256b19eb53aaac4873fe258d225c /Tools/scripts | |
parent | be862b4e55cfe3413752aba2437f9086b5315d08 (diff) | |
download | cpython-git-9dff9f48144cf5d8bc1e6605f258973200c6b8c8.tar.gz |
GH-90699: Intern statically allocated strings (GH-93597)
This is similar to how strings are interned for deepfreeze.
Diffstat (limited to 'Tools/scripts')
-rw-r--r-- | Tools/scripts/generate_global_objects.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/Tools/scripts/generate_global_objects.py b/Tools/scripts/generate_global_objects.py index c26491b1d0..27e3530f38 100644 --- a/Tools/scripts/generate_global_objects.py +++ b/Tools/scripts/generate_global_objects.py @@ -284,6 +284,15 @@ def generate_runtime_init(identifiers, strings): printer.write('') with printer.block('.tuple_empty =', ','): printer.write('.ob_base = _PyVarObject_IMMORTAL_INIT(&PyTuple_Type, 0)') + printer.write('') + printer.write("static inline void") + with printer.block("_PyUnicode_InitStaticStrings(void)"): + 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(END) printer.write(after) @@ -314,7 +323,4 @@ def main() -> None: if __name__ == '__main__': - import argparse - parser = argparse.ArgumentParser() - args = parser.parse_args() - main(**vars(args)) + main() |