Skip to content

Commit aea38e0

Browse files
committed
Generate integers for 15- and 30-bit digits
This fixes the x86 build
1 parent b52ad63 commit aea38e0

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

Tools/scripts/deepfreeze.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -280,14 +280,7 @@ def generate_tuple(self, name: str, t: tuple[object, ...]) -> str:
280280
self.write(item + ",")
281281
return f"& {name}._object.ob_base.ob_base"
282282

283-
def generate_int(self, name: str, i: int) -> str:
284-
maxint = sys.maxsize
285-
if maxint == 2**31 - 1:
286-
digit = 2**15
287-
elif maxint == 2**63 - 1:
288-
digit = 2**30
289-
else:
290-
assert False, f"What int size is this system?!? {maxint=}"
283+
def _generate_int_for_bits(self, name: str, i: int, digit: int) -> None:
291284
sign = -1 if i < 0 else 0 if i == 0 else +1
292285
i = abs(i)
293286
digits: list[int] = []
@@ -304,6 +297,20 @@ def generate_int(self, name: str, i: int) -> str:
304297
if digits:
305298
ds = ", ".join(map(str, digits))
306299
self.write(f".ob_digit = {{ {ds} }},")
300+
301+
def generate_int(self, name: str, i: int) -> str:
302+
if abs(i) < 2**15:
303+
self._generate_int_for_bits(name, i, 2**15)
304+
else:
305+
connective = "if"
306+
for bits_in_digit in 15, 30:
307+
self.write(f"#{connective} PYLONG_BITS_IN_DIGIT == {bits_in_digit}")
308+
self._generate_int_for_bits(name, i, 2**bits_in_digit)
309+
connective = "elif"
310+
self.write("#else")
311+
self.write('#error "PYLONG_BITS_IN_DIGIT should be 15 or 30"')
312+
self.write("#endif")
313+
# If neither clause applies, it won't compile
307314
return f"& {name}.ob_base.ob_base"
308315

309316
def generate_float(self, name: str, x: float) -> str:

0 commit comments

Comments
 (0)