summaryrefslogtreecommitdiff
path: root/Tools/scripts
diff options
context:
space:
mode:
authorKumar Aditya <59607654+kumaraditya303@users.noreply.github.com>2022-07-08 23:17:37 +0530
committerGitHub <noreply@github.com>2022-07-08 10:47:37 -0700
commit9dff9f48144cf5d8bc1e6605f258973200c6b8c8 (patch)
treef5c278b5a4b4256b19eb53aaac4873fe258d225c /Tools/scripts
parentbe862b4e55cfe3413752aba2437f9086b5315d08 (diff)
downloadcpython-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.py14
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()