Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions Tools/build/consts_getter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import os

SCRIPT_NAME = 'Tools/build/consts_getter.py'
__file__ = os.path.abspath(__file__)
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
INTERNAL = os.path.join(ROOT, 'Include', 'internal')

def get_nsmallnegints_and_nsmallposints():
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
return nsmallnegints, nsmallposints
5 changes: 4 additions & 1 deletion Tools/build/deepfreeze.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import time
import types

import consts_getter
import umarshal

TYPE_CHECKING = False
Expand Down Expand Up @@ -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}"
Expand Down
17 changes: 3 additions & 14 deletions Tools/build/generate_global_objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)))
Expand Down Expand Up @@ -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')
Expand Down
Loading