https://github.com/python/cpython/commit/999ab8926bd344a3c7f73b130ac773e2462f8320
commit: 999ab8926bd344a3c7f73b130ac773e2462f8320
branch: main
author: Albert N <[email protected]>
committer: Eclips4 <[email protected]>
date: 2025-10-17T11:48:53+03:00
summary:

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

files:
A Tools/build/consts_getter.py
M .github/workflows/mypy.yml
M Tools/build/deepfreeze.py
M Tools/build/generate_global_objects.py
M Tools/build/mypy.ini

diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml
index 5d5d77f29f6eb1..fac0fa8aba3050 100644
--- a/.github/workflows/mypy.yml
+++ b/.github/workflows/mypy.yml
@@ -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"
diff --git a/Tools/build/consts_getter.py b/Tools/build/consts_getter.py
new file mode 100644
index 00000000000000..4cd454448ba2a4
--- /dev/null
+++ b/Tools/build/consts_getter.py
@@ -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
diff --git a/Tools/build/deepfreeze.py b/Tools/build/deepfreeze.py
index 2b9f03aebb6d7e..477c3d0f5b30d5 100644
--- a/Tools/build/deepfreeze.py
+++ b/Tools/build/deepfreeze.py
@@ -17,6 +17,7 @@
 import time
 import types
 
+import consts_getter
 import umarshal
 
 TYPE_CHECKING = False
@@ -362,7 +363,9 @@ 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:
+        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}"
diff --git a/Tools/build/generate_global_objects.py 
b/Tools/build/generate_global_objects.py
index 94905b3756d0d8..5b188e338bab36 100644
--- a/Tools/build/generate_global_objects.py
+++ b/Tools/build/generate_global_objects.py
@@ -3,6 +3,8 @@
 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')
diff --git a/Tools/build/mypy.ini b/Tools/build/mypy.ini
index 331bada6f47d2e..7d341afd1cd48b 100644
--- a/Tools/build/mypy.ini
+++ b/Tools/build/mypy.ini
@@ -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,

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to