gh-105481: the ENABLE_SPECIALIZATION flag does not need to be generated by the build script, or exposed in opcode.py (#107534)

This commit is contained in:
Irit Katriel 2023-08-01 18:05:00 +01:00 committed by GitHub
parent 49f238e78c
commit 6ef8f8ca88
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 21 additions and 12 deletions

View file

@ -117,6 +117,13 @@ and only logged in :ref:`Python Development Mode <devmode>` or on :ref:`Python
built on debug mode <debug-build>`.
(Contributed by Victor Stinner in :gh:`62948`.)
opcode
------
* Move ``opcode.ENABLE_SPECIALIZATION`` to ``_opcode.ENABLE_SPECIALIZATION``.
This field was added in 3.12, it was never documented and is not intended for
external usage. (Contributed by Irit Katriel in :gh:`105481`.)
pathlib
-------

View file

@ -229,6 +229,8 @@ extern void _PyLineTable_InitAddressRange(
extern int _PyLineTable_NextAddressRange(PyCodeAddressRange *range);
extern int _PyLineTable_PreviousAddressRange(PyCodeAddressRange *range);
#define ENABLE_SPECIALIZATION 1
/* Specialization functions */
extern void _Py_Specialize_LoadSuperAttr(PyObject *global_super, PyObject *cls,

2
Include/opcode.h generated
View file

@ -256,8 +256,6 @@ extern "C" {
#define NB_INPLACE_TRUE_DIVIDE 24
#define NB_INPLACE_XOR 25
/* Defined in Lib/opcode.py */
#define ENABLE_SPECIALIZATION 1
#ifdef __cplusplus
}

View file

@ -19,9 +19,6 @@ if sys.version_info[:2] >= (3, 13):
cmp_op = ('<', '<=', '==', '!=', '>', '>=')
ENABLE_SPECIALIZATION = True
def is_pseudo(op):
return op >= MIN_PSEUDO_OPCODE and op <= MAX_PSEUDO_OPCODE

View file

@ -6,7 +6,7 @@ if __name__ != 'test.support':
import contextlib
import functools
import getpass
import opcode
import _opcode
import os
import re
import stat
@ -1092,7 +1092,7 @@ def requires_limited_api(test):
def requires_specialization(test):
return unittest.skipUnless(
opcode.ENABLE_SPECIALIZATION, "requires specialization")(test)
_opcode.ENABLE_SPECIALIZATION, "requires specialization")(test)
def _filter_suite(suite, pred):
"""Recursively filter test cases in a suite based on a predicate."""

View file

@ -0,0 +1 @@
:data:`opcode.ENABLE_SPECIALIZATION` (which was added in 3.12 but never documented or intended for external usage) is moved to :data:`_opcode.ENABLE_SPECIALIZATION` where tests can access it.

View file

@ -292,7 +292,16 @@ opcode_functions[] = {
{NULL, NULL, 0, NULL}
};
int
_opcode_exec(PyObject *m) {
if (PyModule_AddIntMacro(m, ENABLE_SPECIALIZATION) < 0) {
return -1;
}
return 0;
}
static PyModuleDef_Slot module_slots[] = {
{Py_mod_exec, _opcode_exec},
{Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
{0, NULL}
};

View file

@ -73,7 +73,6 @@ def main(opcode_py,
opname = opcode['opname']
is_pseudo = opcode['is_pseudo']
ENABLE_SPECIALIZATION = opcode["ENABLE_SPECIALIZATION"]
MIN_PSEUDO_OPCODE = opcode["MIN_PSEUDO_OPCODE"]
MAX_PSEUDO_OPCODE = opcode["MAX_PSEUDO_OPCODE"]
MIN_INSTRUMENTED_OPCODE = opcode["MIN_INSTRUMENTED_OPCODE"]
@ -141,10 +140,6 @@ def main(opcode_py,
for i, (op, _) in enumerate(opcode["_nb_ops"]):
fobj.write(DEFINE.format(op, i))
fobj.write("\n")
fobj.write("/* Defined in Lib/opcode.py */\n")
fobj.write(f"#define ENABLE_SPECIALIZATION {int(ENABLE_SPECIALIZATION)}")
iobj.write("\n")
iobj.write(f"\nextern const char *const _PyOpcode_OpName[{NUM_OPCODES}];\n")
iobj.write("\n#ifdef NEED_OPCODE_TABLES\n")