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]