Skip to content

Commit

Permalink
gh-105481: the ENABLE_SPECIALIZATION flag does not need to be generat…
Browse files Browse the repository at this point in the history
…ed by the build script, or exposed in opcode.py (#107534)
  • Loading branch information
iritkatriel committed Aug 1, 2023
1 parent 49f238e commit 6ef8f8c
Show file tree
Hide file tree
Showing 8 changed files with 21 additions and 12 deletions.
7 changes: 7 additions & 0 deletions Doc/whatsnew/3.13.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
-------

Expand Down
2 changes: 2 additions & 0 deletions Include/internal/pycore_code.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 0 additions & 2 deletions Include/opcode.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions Lib/opcode.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@

cmp_op = ('<', '<=', '==', '!=', '>', '>=')


ENABLE_SPECIALIZATION = True

def is_pseudo(op):
return op >= MIN_PSEUDO_OPCODE and op <= MAX_PSEUDO_OPCODE

Expand Down
4 changes: 2 additions & 2 deletions Lib/test/support/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import contextlib
import functools
import getpass
import opcode
import _opcode
import os
import re
import stat
Expand Down Expand Up @@ -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."""
Expand Down
Original file line number Diff line number Diff line change
@@ -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.
9 changes: 9 additions & 0 deletions Modules/_opcode.c
Original file line number Diff line number Diff line change
Expand Up @@ -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}
};
Expand Down
5 changes: 0 additions & 5 deletions Tools/build/generate_opcode_h.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand Down Expand Up @@ -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")
Expand Down

0 comments on commit 6ef8f8c

Please sign in to comment.