gh-133059: Fix Tools/build/deepfreeze.py for new nsmallposints (#139906)

This commit is contained in:
Albert N
2025-10-17 11:48:53 +03:00
committed by GitHub
parent 869bb6948e
commit 999ab8926b
5 changed files with 29 additions and 15 deletions

View File

@@ -16,6 +16,7 @@ on:
- "Tools/build/check_extension_modules.py"
- "Tools/build/check_warnings.py"
- "Tools/build/compute-changes.py"
- "Tools/build/consts_getter.py"
- "Tools/build/deepfreeze.py"
- "Tools/build/generate-build-details.py"
- "Tools/build/generate_sbom.py"

View File

@@ -0,0 +1,20 @@
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
INTERNAL = ROOT / "Include" / "internal"
def get_nsmallnegints_and_nsmallposints() -> tuple[int, int]:
nsmallposints = None
nsmallnegints = None
with open(INTERNAL / "pycore_runtime_structs.h") as infile:
for line in infile:
if line.startswith("#define _PY_NSMALLPOSINTS"):
nsmallposints = int(line.split()[-1])
elif line.startswith("#define _PY_NSMALLNEGINTS"):
nsmallnegints = int(line.split()[-1])
break
else:
raise NotImplementedError
assert nsmallposints
assert nsmallnegints
return nsmallnegints, nsmallposints

View File

@@ -17,6 +17,7 @@ import re
import time
import types
import consts_getter
import umarshal
TYPE_CHECKING = False
@@ -362,7 +363,9 @@ class Printer:
self.write(f".ob_digit = {{ {ds} }},")
def generate_int(self, name: str, i: int) -> str:
if -5 <= i <= 256:
nsmallnegints, nsmallposints = consts_getter.get_nsmallnegints_and_nsmallposints()
if -nsmallnegints <= i <= nsmallposints:
return f"(PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + {i}]"
if i >= 0:
name = f"const_int_{i}"

View File

@@ -3,6 +3,8 @@ import io
import os.path
import re
import consts_getter
SCRIPT_NAME = 'Tools/build/generate_global_objects.py'
__file__ = os.path.abspath(__file__)
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
@@ -274,20 +276,7 @@ def generate_global_strings(identifiers, strings):
def generate_runtime_init(identifiers, strings):
# First get some info from the declarations.
nsmallposints = None
nsmallnegints = None
with open(os.path.join(INTERNAL, 'pycore_runtime_structs.h')) as infile:
for line in infile:
if line.startswith('#define _PY_NSMALLPOSINTS'):
nsmallposints = int(line.split()[-1])
elif line.startswith('#define _PY_NSMALLNEGINTS'):
nsmallnegints = int(line.split()[-1])
break
else:
raise NotImplementedError
assert nsmallposints
assert nsmallnegints
nsmallnegints, nsmallposints = consts_getter.get_nsmallnegints_and_nsmallposints()
# Then target the runtime initializer.
filename = os.path.join(INTERNAL, 'pycore_runtime_init_generated.h')

View File

@@ -6,6 +6,7 @@ files =
Tools/build/check_extension_modules.py,
Tools/build/check_warnings.py,
Tools/build/compute-changes.py,
Tools/build/consts_getter.py,
Tools/build/deepfreeze.py,
Tools/build/generate-build-details.py,
Tools/build/generate_sbom.py,