Skip to content

Commit

Permalink
bpo-46443: deepfreeze: use small ints and singleton zero bytes (GH-30715
Browse files Browse the repository at this point in the history
)
  • Loading branch information
kumaraditya303 authored Jan 20, 2022
1 parent 263c0dd commit 194ecc6
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Deepfreeze now uses cached small integers as it saves some space for common small integers.
5 changes: 5 additions & 0 deletions Tools/scripts/deepfreeze.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ def __init__(self, file: TextIO):
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
Expand Down Expand Up @@ -148,6 +149,8 @@ def field(self, obj: object, name: str) -> None:
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"):
Expand Down Expand Up @@ -313,6 +316,8 @@ def _generate_int_for_bits(self, name: str, i: int, digit: int) -> None:
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:
Expand Down

0 comments on commit 194ecc6

Please sign in to comment.