[Python-checkins] gh-105481: the ENABLE_SPECIALIZATION flag does not need to be generated by the build script, or exposed in opcode.py (#107534)
iritkatriel
webhook-mailer at python.org
Tue Aug 1 13:05:04 EDT 2023
https://github.com/python/cpython/commit/6ef8f8ca88b925685c6af83a9f0a899e565e1e33
commit: 6ef8f8ca88b925685c6af83a9f0a899e565e1e33
branch: main
author: Irit Katriel <1055913+iritkatriel at users.noreply.github.com>
committer: iritkatriel <1055913+iritkatriel at users.noreply.github.com>
date: 2023-08-01T17:05:00Z
summary:
gh-105481: the ENABLE_SPECIALIZATION flag does not need to be generated by the build script, or exposed in opcode.py (#107534)
files:
A Misc/NEWS.d/next/Library/2023-08-01-15-17-20.gh-issue-105481.vMbmj_.rst
M Doc/whatsnew/3.13.rst
M Include/internal/pycore_code.h
M Include/opcode.h
M Lib/opcode.py
M Lib/test/support/__init__.py
M Modules/_opcode.c
M Tools/build/generate_opcode_h.py
diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst
index 8fb4e6cfdf14c..22c1e03470f5d 100644
--- a/Doc/whatsnew/3.13.rst
+++ b/Doc/whatsnew/3.13.rst
@@ -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
-------
diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h
index bcdf8645c8557..ee1b85187cbab 100644
--- a/Include/internal/pycore_code.h
+++ b/Include/internal/pycore_code.h
@@ -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,
diff --git a/Include/opcode.h b/Include/opcode.h
index 697520937d905..eb4bb85e5b667 100644
--- a/Include/opcode.h
+++ b/Include/opcode.h
@@ -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
}
diff --git a/Lib/opcode.py b/Lib/opcode.py
index bed922399821a..51432ab1fab3f 100644
--- a/Lib/opcode.py
+++ b/Lib/opcode.py
@@ -19,9 +19,6 @@
cmp_op = ('<', '<=', '==', '!=', '>', '>=')
-
-ENABLE_SPECIALIZATION = True
-
def is_pseudo(op):
return op >= MIN_PSEUDO_OPCODE and op <= MAX_PSEUDO_OPCODE
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 3b332f49951f0..2a59911e54d6b 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -6,7 +6,7 @@
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."""
diff --git a/Misc/NEWS.d/next/Library/2023-08-01-15-17-20.gh-issue-105481.vMbmj_.rst b/Misc/NEWS.d/next/Library/2023-08-01-15-17-20.gh-issue-105481.vMbmj_.rst
new file mode 100644
index 0000000000000..153c18a6f0095
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-08-01-15-17-20.gh-issue-105481.vMbmj_.rst
@@ -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.
diff --git a/Modules/_opcode.c b/Modules/_opcode.c
index b8d95a048ec2c..ad0fa736f8276 100644
--- a/Modules/_opcode.c
+++ b/Modules/_opcode.c
@@ -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}
};
diff --git a/Tools/build/generate_opcode_h.py b/Tools/build/generate_opcode_h.py
index 19e5eab822a23..2259dad77869f 100644
--- a/Tools/build/generate_opcode_h.py
+++ b/Tools/build/generate_opcode_h.py
@@ -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")
More information about the Python-checkins
mailing list