From 194ecc6d44adc1fb39a56ca696418368b69432ce Mon Sep 17 00:00:00 2001 From: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com> Date: Thu, 20 Jan 2022 11:43:21 +0530 Subject: bpo-46443: deepfreeze: use small ints and singleton zero bytes (GH-30715) --- Misc/NEWS.d/next/Build/2022-01-20-05-27-07.bpo-46443.udCVII.rst | 1 + Tools/scripts/deepfreeze.py | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 Misc/NEWS.d/next/Build/2022-01-20-05-27-07.bpo-46443.udCVII.rst diff --git a/Misc/NEWS.d/next/Build/2022-01-20-05-27-07.bpo-46443.udCVII.rst b/Misc/NEWS.d/next/Build/2022-01-20-05-27-07.bpo-46443.udCVII.rst new file mode 100644 index 0000000..8e3fa19 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2022-01-20-05-27-07.bpo-46443.udCVII.rst @@ -0,0 +1 @@ +Deepfreeze now uses cached small integers as it saves some space for common small integers. \ No newline at end of file diff --git a/Tools/scripts/deepfreeze.py b/Tools/scripts/deepfreeze.py index 002d680..49638b8 100644 --- a/Tools/scripts/deepfreeze.py +++ b/Tools/scripts/deepfreeze.py @@ -113,6 +113,7 @@ class Printer: self.write('#include "Python.h"') self.write('#include "internal/pycore_gc.h"') self.write('#include "internal/pycore_code.h"') + self.write('#include "internal/pycore_long.h"') self.write("") @contextlib.contextmanager @@ -148,6 +149,8 @@ class Printer: self.write(f".{name} = {getattr(obj, name)},") def generate_bytes(self, name: str, b: bytes) -> str: + if b == b"": + return "(PyObject *)&_Py_SINGLETON(bytes_empty)" self.write("static") with self.indent(): with self.block("struct"): @@ -313,6 +316,8 @@ class Printer: self.write(f".ob_digit = {{ {ds} }},") def generate_int(self, name: str, i: int) -> str: + if -5 <= i <= 256: + return f"(PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + {i}]" if abs(i) < 2**15: self._generate_int_for_bits(name, i, 2**15) else: -- cgit v0.12