From bbb2f1bcc60b1675c51ad167820dd49b712144b7 Mon Sep 17 00:00:00 2001 From: Tomasz Pytel Date: Fri, 28 Feb 2025 08:32:47 -0500 Subject: [PATCH 1/5] gh-130574: renumber RESUME opcode from 149 to 128 --- Include/internal/pycore_magic_number.h | 3 ++- Include/internal/pycore_opcode_metadata.h | 2 +- Include/opcode_ids.h | 4 ++-- Lib/_opcode_metadata.py | 2 +- Lib/test/test_dis.py | 10 +++++----- Programs/test_frozenmain.h | 2 +- Python/opcode_targets.h | 4 ++-- Tools/build/deepfreeze.py | 2 +- Tools/cases_generator/analyzer.py | 4 ++-- 9 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Include/internal/pycore_magic_number.h b/Include/internal/pycore_magic_number.h index e97d066ebf8e5c..642f3bcec407ea 100644 --- a/Include/internal/pycore_magic_number.h +++ b/Include/internal/pycore_magic_number.h @@ -270,6 +270,7 @@ Known values: Python 3.14a5 3615 (CALL_FUNCTION_EX always take a kwargs argument) Python 3.14a5 3616 (Remove BINARY_SUBSCR and family. Make them BINARY_OPs) Python 3.14a6 3617 (Branch monitoring for async for loops) + Python 3.14a6 3618 (Renumber RESUME opcode from 149 to 128) Python 3.15 will start with 3650 @@ -282,7 +283,7 @@ PC/launcher.c must also be updated. */ -#define PYC_MAGIC_NUMBER 3617 +#define PYC_MAGIC_NUMBER 3618 /* This is equivalent to converting PYC_MAGIC_NUMBER to 2 bytes (little-endian) and then appending b'\r\n'. */ #define PYC_MAGIC_NUMBER_TOKEN \ diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 195ec832f73c62..8b27e0b0c38968 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -2939,7 +2939,6 @@ const uint8_t _PyOpcode_Deopt[256] = { case 125: \ case 126: \ case 127: \ - case 128: \ case 129: \ case 130: \ case 131: \ @@ -2960,6 +2959,7 @@ const uint8_t _PyOpcode_Deopt[256] = { case 146: \ case 147: \ case 148: \ + case 149: \ case 232: \ case 233: \ ; diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h index a634d5e5a229c8..be2e6f5b7dceb9 100644 --- a/Include/opcode_ids.h +++ b/Include/opcode_ids.h @@ -127,7 +127,7 @@ extern "C" { #define UNPACK_EX 114 #define UNPACK_SEQUENCE 115 #define YIELD_VALUE 116 -#define RESUME 149 +#define RESUME 128 #define BINARY_OP_ADD_FLOAT 150 #define BINARY_OP_ADD_INT 151 #define BINARY_OP_ADD_UNICODE 152 @@ -244,7 +244,7 @@ extern "C" { #define STORE_FAST_MAYBE_NULL 265 #define HAVE_ARGUMENT 43 -#define MIN_SPECIALIZED_OPCODE 150 +#define MIN_SPECIALIZED_OPCODE 129 #define MIN_INSTRUMENTED_OPCODE 234 #ifdef __cplusplus diff --git a/Lib/_opcode_metadata.py b/Lib/_opcode_metadata.py index 3dc69635cba39e..de4176107c585f 100644 --- a/Lib/_opcode_metadata.py +++ b/Lib/_opcode_metadata.py @@ -211,7 +211,7 @@ opmap = { 'CACHE': 0, 'RESERVED': 17, - 'RESUME': 149, + 'RESUME': 128, 'INSTRUMENTED_LINE': 254, 'ENTER_EXECUTOR': 255, 'BINARY_SLICE': 1, diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index 27350120d667c2..cb6242029ac86a 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -1708,7 +1708,7 @@ def _prepare_test_cases(): expected_opinfo_outer = [ Instruction(opname='MAKE_CELL', opcode=93, arg=0, argval='a', argrepr='a', offset=0, start_offset=0, starts_line=True, line_number=None, label=None, positions=None, cache_info=None), Instruction(opname='MAKE_CELL', opcode=93, arg=1, argval='b', argrepr='b', offset=2, start_offset=2, starts_line=False, line_number=None, label=None, positions=None, cache_info=None), - Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=4, start_offset=4, starts_line=True, line_number=1, label=None, positions=None, cache_info=None), + Instruction(opname='RESUME', opcode=128, arg=0, argval=0, argrepr='', offset=4, start_offset=4, starts_line=True, line_number=1, label=None, positions=None, cache_info=None), Instruction(opname='LOAD_CONST', opcode=80, arg=3, argval=(3, 4), argrepr='(3, 4)', offset=6, start_offset=6, starts_line=True, line_number=2, label=None, positions=None, cache_info=None), Instruction(opname='LOAD_FAST', opcode=82, arg=0, argval='a', argrepr='a', offset=8, start_offset=8, starts_line=False, line_number=2, label=None, positions=None, cache_info=None), Instruction(opname='LOAD_FAST', opcode=82, arg=1, argval='b', argrepr='b', offset=10, start_offset=10, starts_line=False, line_number=2, label=None, positions=None, cache_info=None), @@ -1736,7 +1736,7 @@ def _prepare_test_cases(): Instruction(opname='COPY_FREE_VARS', opcode=59, arg=2, argval=2, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=None, label=None, positions=None, cache_info=None), Instruction(opname='MAKE_CELL', opcode=93, arg=0, argval='c', argrepr='c', offset=2, start_offset=2, starts_line=False, line_number=None, label=None, positions=None, cache_info=None), Instruction(opname='MAKE_CELL', opcode=93, arg=1, argval='d', argrepr='d', offset=4, start_offset=4, starts_line=False, line_number=None, label=None, positions=None, cache_info=None), - Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=6, start_offset=6, starts_line=True, line_number=2, label=None, positions=None, cache_info=None), + Instruction(opname='RESUME', opcode=128, arg=0, argval=0, argrepr='', offset=6, start_offset=6, starts_line=True, line_number=2, label=None, positions=None, cache_info=None), Instruction(opname='LOAD_CONST', opcode=80, arg=1, argval=(5, 6), argrepr='(5, 6)', offset=8, start_offset=8, starts_line=True, line_number=3, label=None, positions=None, cache_info=None), Instruction(opname='LOAD_FAST', opcode=82, arg=3, argval='a', argrepr='a', offset=10, start_offset=10, starts_line=False, line_number=3, label=None, positions=None, cache_info=None), Instruction(opname='LOAD_FAST', opcode=82, arg=4, argval='b', argrepr='b', offset=12, start_offset=12, starts_line=False, line_number=3, label=None, positions=None, cache_info=None), @@ -1761,7 +1761,7 @@ def _prepare_test_cases(): expected_opinfo_inner = [ Instruction(opname='COPY_FREE_VARS', opcode=59, arg=4, argval=4, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=None, label=None, positions=None, cache_info=None), - Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=2, start_offset=2, starts_line=True, line_number=3, label=None, positions=None, cache_info=None), + Instruction(opname='RESUME', opcode=128, arg=0, argval=0, argrepr='', offset=2, start_offset=2, starts_line=True, line_number=3, label=None, positions=None, cache_info=None), Instruction(opname='LOAD_GLOBAL', opcode=88, arg=1, argval='print', argrepr='print + NULL', offset=4, start_offset=4, starts_line=True, line_number=4, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]), Instruction(opname='LOAD_DEREF', opcode=81, arg=2, argval='a', argrepr='a', offset=14, start_offset=14, starts_line=False, line_number=4, label=None, positions=None, cache_info=None), Instruction(opname='LOAD_DEREF', opcode=81, arg=3, argval='b', argrepr='b', offset=16, start_offset=16, starts_line=False, line_number=4, label=None, positions=None, cache_info=None), @@ -1775,7 +1775,7 @@ def _prepare_test_cases(): ] expected_opinfo_jumpy = [ - Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=1, label=None, positions=None, cache_info=None), + Instruction(opname='RESUME', opcode=128, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=1, label=None, positions=None, cache_info=None), Instruction(opname='LOAD_GLOBAL', opcode=88, arg=1, argval='range', argrepr='range + NULL', offset=2, start_offset=2, starts_line=True, line_number=3, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]), Instruction(opname='LOAD_SMALL_INT', opcode=90, arg=10, argval=10, argrepr='', offset=12, start_offset=12, starts_line=False, line_number=3, label=None, positions=None, cache_info=None), Instruction(opname='CALL', opcode=51, arg=1, argval=1, argrepr='', offset=14, start_offset=14, starts_line=False, line_number=3, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]), @@ -1908,7 +1908,7 @@ def _prepare_test_cases(): # One last piece of inspect fodder to check the default line number handling def simple(): pass expected_opinfo_simple = [ - Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=simple.__code__.co_firstlineno, label=None, positions=None), + Instruction(opname='RESUME', opcode=128, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=simple.__code__.co_firstlineno, label=None, positions=None), Instruction(opname='LOAD_CONST', opcode=80, arg=0, argval=None, argrepr='None', offset=2, start_offset=2, starts_line=False, line_number=simple.__code__.co_firstlineno, label=None), Instruction(opname='RETURN_VALUE', opcode=35, arg=None, argval=None, argrepr='', offset=4, start_offset=4, starts_line=False, line_number=simple.__code__.co_firstlineno, label=None), ] diff --git a/Programs/test_frozenmain.h b/Programs/test_frozenmain.h index 0fe8d3d3f7d8c6..9bcb4a4634782d 100644 --- a/Programs/test_frozenmain.h +++ b/Programs/test_frozenmain.h @@ -1,7 +1,7 @@ // Auto-generated by Programs/freeze_test_frozenmain.py unsigned char M_test_frozenmain[] = { 227,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0, - 0,0,0,0,0,243,184,0,0,0,149,0,90,0,80,0, + 0,0,0,0,0,243,184,0,0,0,128,0,90,0,80,0, 71,0,112,0,90,0,80,0,71,1,112,1,89,2,33,0, 80,1,51,1,0,0,0,0,0,0,31,0,89,2,33,0, 80,2,89,0,78,6,0,0,0,0,0,0,0,0,0,0, diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 0435d0841dbae1..ce25c54c3bdf48 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -128,6 +128,7 @@ static void *opcode_targets[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, + &&TARGET_RESUME, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, @@ -149,7 +150,6 @@ static void *opcode_targets[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, - &&TARGET_RESUME, &&TARGET_BINARY_OP_ADD_FLOAT, &&TARGET_BINARY_OP_ADD_INT, &&TARGET_BINARY_OP_ADD_UNICODE, @@ -736,7 +736,6 @@ static py_tail_call_funcptr INSTRUCTION_TABLE[256] = { [125] = _TAIL_CALL_UNKNOWN_OPCODE, [126] = _TAIL_CALL_UNKNOWN_OPCODE, [127] = _TAIL_CALL_UNKNOWN_OPCODE, - [128] = _TAIL_CALL_UNKNOWN_OPCODE, [129] = _TAIL_CALL_UNKNOWN_OPCODE, [130] = _TAIL_CALL_UNKNOWN_OPCODE, [131] = _TAIL_CALL_UNKNOWN_OPCODE, @@ -757,6 +756,7 @@ static py_tail_call_funcptr INSTRUCTION_TABLE[256] = { [146] = _TAIL_CALL_UNKNOWN_OPCODE, [147] = _TAIL_CALL_UNKNOWN_OPCODE, [148] = _TAIL_CALL_UNKNOWN_OPCODE, + [149] = _TAIL_CALL_UNKNOWN_OPCODE, [232] = _TAIL_CALL_UNKNOWN_OPCODE, [233] = _TAIL_CALL_UNKNOWN_OPCODE, }; diff --git a/Tools/build/deepfreeze.py b/Tools/build/deepfreeze.py index 05633e3f77af49..6ec7a97f70ebb3 100644 --- a/Tools/build/deepfreeze.py +++ b/Tools/build/deepfreeze.py @@ -22,7 +22,7 @@ verbose = False # This must be kept in sync with Tools/cases_generator/analyzer.py -RESUME = 149 +RESUME = 128 def isprintable(b: bytes) -> bool: return all(0x20 <= c < 0x7f for c in b) diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index 10db9acbb362c8..53795a642d32b1 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -1075,8 +1075,8 @@ def assign_opcodes( # This helps catch cases where we attempt to execute a cache. instmap["RESERVED"] = 17 - # 149 is RESUME - it is hard coded as such in Tools/build/deepfreeze.py - instmap["RESUME"] = 149 + # 128 is RESUME - it is hard coded as such in Tools/build/deepfreeze.py + instmap["RESUME"] = 128 # This is an historical oddity. instmap["BINARY_OP_INPLACE_ADD_UNICODE"] = 3 From 9c473bb6749e90af01cb788a9ccb42ed86d1255b Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Fri, 28 Feb 2025 13:34:52 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2025-02-28-13-34-51.gh-issue-130574.ujr3Vx.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2025-02-28-13-34-51.gh-issue-130574.ujr3Vx.rst diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-02-28-13-34-51.gh-issue-130574.ujr3Vx.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-02-28-13-34-51.gh-issue-130574.ujr3Vx.rst new file mode 100644 index 00000000000000..538e5d5dbab102 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-02-28-13-34-51.gh-issue-130574.ujr3Vx.rst @@ -0,0 +1 @@ +Renumber :opcode:RESUME from 149 to 128. From 6000e8871e19f30f51d0801512ae774c0d12f5ed Mon Sep 17 00:00:00 2001 From: Tomasz Pytel Date: Fri, 28 Feb 2025 08:39:03 -0500 Subject: [PATCH 3/5] fix news --- .../2025-02-28-13-34-51.gh-issue-130574.ujr3Vx.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-02-28-13-34-51.gh-issue-130574.ujr3Vx.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-02-28-13-34-51.gh-issue-130574.ujr3Vx.rst index 538e5d5dbab102..84afe7cfb2e7b6 100644 --- a/Misc/NEWS.d/next/Core_and_Builtins/2025-02-28-13-34-51.gh-issue-130574.ujr3Vx.rst +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-02-28-13-34-51.gh-issue-130574.ujr3Vx.rst @@ -1 +1 @@ -Renumber :opcode:RESUME from 149 to 128. +Renumber :opcode:`RESUME` from 149 to 128. From 3cde16ca1e60c27442d29dba44381b6c9c460163 Mon Sep 17 00:00:00 2001 From: Tomasz Pytel Date: Fri, 28 Feb 2025 09:39:59 -0500 Subject: [PATCH 4/5] set analyzer.py min_internal to RESUME+1 --- Tools/cases_generator/analyzer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py index 53795a642d32b1..c7deaed4d5dfd7 100644 --- a/Tools/cases_generator/analyzer.py +++ b/Tools/cases_generator/analyzer.py @@ -1106,7 +1106,7 @@ def assign_opcodes( # Specialized ops appear in their own section # Instrumented opcodes are at the end of the valid range - min_internal = 150 + min_internal = instmap["RESUME"] + 1 min_instrumented = 254 - (len(instrumented) - 1) assert min_internal + len(specialized) < min_instrumented From ba482a001982d80aeda603df1010eb7196b6054c Mon Sep 17 00:00:00 2001 From: Tomasz Pytel Date: Fri, 28 Feb 2025 10:37:06 -0500 Subject: [PATCH 5/5] updated rest of opcodes after min_internal change --- Include/internal/pycore_opcode_metadata.h | 42 +++--- Include/opcode_ids.h | 164 +++++++++++----------- Lib/_opcode_metadata.py | 164 +++++++++++----------- Lib/test/test_code.py | 10 +- Python/opcode_targets.h | 84 +++++------ 5 files changed, 232 insertions(+), 232 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 8b27e0b0c38968..96106db6594b0c 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -2939,27 +2939,27 @@ const uint8_t _PyOpcode_Deopt[256] = { case 125: \ case 126: \ case 127: \ - case 129: \ - case 130: \ - case 131: \ - case 132: \ - case 133: \ - case 134: \ - case 135: \ - case 136: \ - case 137: \ - case 138: \ - case 139: \ - case 140: \ - case 141: \ - case 142: \ - case 143: \ - case 144: \ - case 145: \ - case 146: \ - case 147: \ - case 148: \ - case 149: \ + case 211: \ + case 212: \ + case 213: \ + case 214: \ + case 215: \ + case 216: \ + case 217: \ + case 218: \ + case 219: \ + case 220: \ + case 221: \ + case 222: \ + case 223: \ + case 224: \ + case 225: \ + case 226: \ + case 227: \ + case 228: \ + case 229: \ + case 230: \ + case 231: \ case 232: \ case 233: \ ; diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h index be2e6f5b7dceb9..0a669f2daf49d8 100644 --- a/Include/opcode_ids.h +++ b/Include/opcode_ids.h @@ -128,88 +128,88 @@ extern "C" { #define UNPACK_SEQUENCE 115 #define YIELD_VALUE 116 #define RESUME 128 -#define BINARY_OP_ADD_FLOAT 150 -#define BINARY_OP_ADD_INT 151 -#define BINARY_OP_ADD_UNICODE 152 -#define BINARY_OP_EXTEND 153 -#define BINARY_OP_MULTIPLY_FLOAT 154 -#define BINARY_OP_MULTIPLY_INT 155 -#define BINARY_OP_SUBSCR_DICT 156 -#define BINARY_OP_SUBSCR_GETITEM 157 -#define BINARY_OP_SUBSCR_LIST_INT 158 -#define BINARY_OP_SUBSCR_STR_INT 159 -#define BINARY_OP_SUBSCR_TUPLE_INT 160 -#define BINARY_OP_SUBTRACT_FLOAT 161 -#define BINARY_OP_SUBTRACT_INT 162 -#define CALL_ALLOC_AND_ENTER_INIT 163 -#define CALL_BOUND_METHOD_EXACT_ARGS 164 -#define CALL_BOUND_METHOD_GENERAL 165 -#define CALL_BUILTIN_CLASS 166 -#define CALL_BUILTIN_FAST 167 -#define CALL_BUILTIN_FAST_WITH_KEYWORDS 168 -#define CALL_BUILTIN_O 169 -#define CALL_ISINSTANCE 170 -#define CALL_KW_BOUND_METHOD 171 -#define CALL_KW_NON_PY 172 -#define CALL_KW_PY 173 -#define CALL_LEN 174 -#define CALL_LIST_APPEND 175 -#define CALL_METHOD_DESCRIPTOR_FAST 176 -#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 177 -#define CALL_METHOD_DESCRIPTOR_NOARGS 178 -#define CALL_METHOD_DESCRIPTOR_O 179 -#define CALL_NON_PY_GENERAL 180 -#define CALL_PY_EXACT_ARGS 181 -#define CALL_PY_GENERAL 182 -#define CALL_STR_1 183 -#define CALL_TUPLE_1 184 -#define CALL_TYPE_1 185 -#define COMPARE_OP_FLOAT 186 -#define COMPARE_OP_INT 187 -#define COMPARE_OP_STR 188 -#define CONTAINS_OP_DICT 189 -#define CONTAINS_OP_SET 190 -#define FOR_ITER_GEN 191 -#define FOR_ITER_LIST 192 -#define FOR_ITER_RANGE 193 -#define FOR_ITER_TUPLE 194 -#define JUMP_BACKWARD_JIT 195 -#define JUMP_BACKWARD_NO_JIT 196 -#define LOAD_ATTR_CLASS 197 -#define LOAD_ATTR_CLASS_WITH_METACLASS_CHECK 198 -#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN 199 -#define LOAD_ATTR_INSTANCE_VALUE 200 -#define LOAD_ATTR_METHOD_LAZY_DICT 201 -#define LOAD_ATTR_METHOD_NO_DICT 202 -#define LOAD_ATTR_METHOD_WITH_VALUES 203 -#define LOAD_ATTR_MODULE 204 -#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT 205 -#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 206 -#define LOAD_ATTR_PROPERTY 207 -#define LOAD_ATTR_SLOT 208 -#define LOAD_ATTR_WITH_HINT 209 -#define LOAD_CONST_IMMORTAL 210 -#define LOAD_CONST_MORTAL 211 -#define LOAD_GLOBAL_BUILTIN 212 -#define LOAD_GLOBAL_MODULE 213 -#define LOAD_SUPER_ATTR_ATTR 214 -#define LOAD_SUPER_ATTR_METHOD 215 -#define RESUME_CHECK 216 -#define SEND_GEN 217 -#define STORE_ATTR_INSTANCE_VALUE 218 -#define STORE_ATTR_SLOT 219 -#define STORE_ATTR_WITH_HINT 220 -#define STORE_SUBSCR_DICT 221 -#define STORE_SUBSCR_LIST_INT 222 -#define TO_BOOL_ALWAYS_TRUE 223 -#define TO_BOOL_BOOL 224 -#define TO_BOOL_INT 225 -#define TO_BOOL_LIST 226 -#define TO_BOOL_NONE 227 -#define TO_BOOL_STR 228 -#define UNPACK_SEQUENCE_LIST 229 -#define UNPACK_SEQUENCE_TUPLE 230 -#define UNPACK_SEQUENCE_TWO_TUPLE 231 +#define BINARY_OP_ADD_FLOAT 129 +#define BINARY_OP_ADD_INT 130 +#define BINARY_OP_ADD_UNICODE 131 +#define BINARY_OP_EXTEND 132 +#define BINARY_OP_MULTIPLY_FLOAT 133 +#define BINARY_OP_MULTIPLY_INT 134 +#define BINARY_OP_SUBSCR_DICT 135 +#define BINARY_OP_SUBSCR_GETITEM 136 +#define BINARY_OP_SUBSCR_LIST_INT 137 +#define BINARY_OP_SUBSCR_STR_INT 138 +#define BINARY_OP_SUBSCR_TUPLE_INT 139 +#define BINARY_OP_SUBTRACT_FLOAT 140 +#define BINARY_OP_SUBTRACT_INT 141 +#define CALL_ALLOC_AND_ENTER_INIT 142 +#define CALL_BOUND_METHOD_EXACT_ARGS 143 +#define CALL_BOUND_METHOD_GENERAL 144 +#define CALL_BUILTIN_CLASS 145 +#define CALL_BUILTIN_FAST 146 +#define CALL_BUILTIN_FAST_WITH_KEYWORDS 147 +#define CALL_BUILTIN_O 148 +#define CALL_ISINSTANCE 149 +#define CALL_KW_BOUND_METHOD 150 +#define CALL_KW_NON_PY 151 +#define CALL_KW_PY 152 +#define CALL_LEN 153 +#define CALL_LIST_APPEND 154 +#define CALL_METHOD_DESCRIPTOR_FAST 155 +#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 156 +#define CALL_METHOD_DESCRIPTOR_NOARGS 157 +#define CALL_METHOD_DESCRIPTOR_O 158 +#define CALL_NON_PY_GENERAL 159 +#define CALL_PY_EXACT_ARGS 160 +#define CALL_PY_GENERAL 161 +#define CALL_STR_1 162 +#define CALL_TUPLE_1 163 +#define CALL_TYPE_1 164 +#define COMPARE_OP_FLOAT 165 +#define COMPARE_OP_INT 166 +#define COMPARE_OP_STR 167 +#define CONTAINS_OP_DICT 168 +#define CONTAINS_OP_SET 169 +#define FOR_ITER_GEN 170 +#define FOR_ITER_LIST 171 +#define FOR_ITER_RANGE 172 +#define FOR_ITER_TUPLE 173 +#define JUMP_BACKWARD_JIT 174 +#define JUMP_BACKWARD_NO_JIT 175 +#define LOAD_ATTR_CLASS 176 +#define LOAD_ATTR_CLASS_WITH_METACLASS_CHECK 177 +#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN 178 +#define LOAD_ATTR_INSTANCE_VALUE 179 +#define LOAD_ATTR_METHOD_LAZY_DICT 180 +#define LOAD_ATTR_METHOD_NO_DICT 181 +#define LOAD_ATTR_METHOD_WITH_VALUES 182 +#define LOAD_ATTR_MODULE 183 +#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT 184 +#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 185 +#define LOAD_ATTR_PROPERTY 186 +#define LOAD_ATTR_SLOT 187 +#define LOAD_ATTR_WITH_HINT 188 +#define LOAD_CONST_IMMORTAL 189 +#define LOAD_CONST_MORTAL 190 +#define LOAD_GLOBAL_BUILTIN 191 +#define LOAD_GLOBAL_MODULE 192 +#define LOAD_SUPER_ATTR_ATTR 193 +#define LOAD_SUPER_ATTR_METHOD 194 +#define RESUME_CHECK 195 +#define SEND_GEN 196 +#define STORE_ATTR_INSTANCE_VALUE 197 +#define STORE_ATTR_SLOT 198 +#define STORE_ATTR_WITH_HINT 199 +#define STORE_SUBSCR_DICT 200 +#define STORE_SUBSCR_LIST_INT 201 +#define TO_BOOL_ALWAYS_TRUE 202 +#define TO_BOOL_BOOL 203 +#define TO_BOOL_INT 204 +#define TO_BOOL_LIST 205 +#define TO_BOOL_NONE 206 +#define TO_BOOL_STR 207 +#define UNPACK_SEQUENCE_LIST 208 +#define UNPACK_SEQUENCE_TUPLE 209 +#define UNPACK_SEQUENCE_TWO_TUPLE 210 #define INSTRUMENTED_END_FOR 234 #define INSTRUMENTED_POP_ITER 235 #define INSTRUMENTED_END_SEND 236 diff --git a/Lib/_opcode_metadata.py b/Lib/_opcode_metadata.py index de4176107c585f..9e381f936e8820 100644 --- a/Lib/_opcode_metadata.py +++ b/Lib/_opcode_metadata.py @@ -123,89 +123,89 @@ } _specialized_opmap = { - 'BINARY_OP_ADD_FLOAT': 150, - 'BINARY_OP_ADD_INT': 151, - 'BINARY_OP_ADD_UNICODE': 152, - 'BINARY_OP_EXTEND': 153, + 'BINARY_OP_ADD_FLOAT': 129, + 'BINARY_OP_ADD_INT': 130, + 'BINARY_OP_ADD_UNICODE': 131, + 'BINARY_OP_EXTEND': 132, 'BINARY_OP_INPLACE_ADD_UNICODE': 3, - 'BINARY_OP_MULTIPLY_FLOAT': 154, - 'BINARY_OP_MULTIPLY_INT': 155, - 'BINARY_OP_SUBSCR_DICT': 156, - 'BINARY_OP_SUBSCR_GETITEM': 157, - 'BINARY_OP_SUBSCR_LIST_INT': 158, - 'BINARY_OP_SUBSCR_STR_INT': 159, - 'BINARY_OP_SUBSCR_TUPLE_INT': 160, - 'BINARY_OP_SUBTRACT_FLOAT': 161, - 'BINARY_OP_SUBTRACT_INT': 162, - 'CALL_ALLOC_AND_ENTER_INIT': 163, - 'CALL_BOUND_METHOD_EXACT_ARGS': 164, - 'CALL_BOUND_METHOD_GENERAL': 165, - 'CALL_BUILTIN_CLASS': 166, - 'CALL_BUILTIN_FAST': 167, - 'CALL_BUILTIN_FAST_WITH_KEYWORDS': 168, - 'CALL_BUILTIN_O': 169, - 'CALL_ISINSTANCE': 170, - 'CALL_KW_BOUND_METHOD': 171, - 'CALL_KW_NON_PY': 172, - 'CALL_KW_PY': 173, - 'CALL_LEN': 174, - 'CALL_LIST_APPEND': 175, - 'CALL_METHOD_DESCRIPTOR_FAST': 176, - 'CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS': 177, - 'CALL_METHOD_DESCRIPTOR_NOARGS': 178, - 'CALL_METHOD_DESCRIPTOR_O': 179, - 'CALL_NON_PY_GENERAL': 180, - 'CALL_PY_EXACT_ARGS': 181, - 'CALL_PY_GENERAL': 182, - 'CALL_STR_1': 183, - 'CALL_TUPLE_1': 184, - 'CALL_TYPE_1': 185, - 'COMPARE_OP_FLOAT': 186, - 'COMPARE_OP_INT': 187, - 'COMPARE_OP_STR': 188, - 'CONTAINS_OP_DICT': 189, - 'CONTAINS_OP_SET': 190, - 'FOR_ITER_GEN': 191, - 'FOR_ITER_LIST': 192, - 'FOR_ITER_RANGE': 193, - 'FOR_ITER_TUPLE': 194, - 'JUMP_BACKWARD_JIT': 195, - 'JUMP_BACKWARD_NO_JIT': 196, - 'LOAD_ATTR_CLASS': 197, - 'LOAD_ATTR_CLASS_WITH_METACLASS_CHECK': 198, - 'LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN': 199, - 'LOAD_ATTR_INSTANCE_VALUE': 200, - 'LOAD_ATTR_METHOD_LAZY_DICT': 201, - 'LOAD_ATTR_METHOD_NO_DICT': 202, - 'LOAD_ATTR_METHOD_WITH_VALUES': 203, - 'LOAD_ATTR_MODULE': 204, - 'LOAD_ATTR_NONDESCRIPTOR_NO_DICT': 205, - 'LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES': 206, - 'LOAD_ATTR_PROPERTY': 207, - 'LOAD_ATTR_SLOT': 208, - 'LOAD_ATTR_WITH_HINT': 209, - 'LOAD_CONST_IMMORTAL': 210, - 'LOAD_CONST_MORTAL': 211, - 'LOAD_GLOBAL_BUILTIN': 212, - 'LOAD_GLOBAL_MODULE': 213, - 'LOAD_SUPER_ATTR_ATTR': 214, - 'LOAD_SUPER_ATTR_METHOD': 215, - 'RESUME_CHECK': 216, - 'SEND_GEN': 217, - 'STORE_ATTR_INSTANCE_VALUE': 218, - 'STORE_ATTR_SLOT': 219, - 'STORE_ATTR_WITH_HINT': 220, - 'STORE_SUBSCR_DICT': 221, - 'STORE_SUBSCR_LIST_INT': 222, - 'TO_BOOL_ALWAYS_TRUE': 223, - 'TO_BOOL_BOOL': 224, - 'TO_BOOL_INT': 225, - 'TO_BOOL_LIST': 226, - 'TO_BOOL_NONE': 227, - 'TO_BOOL_STR': 228, - 'UNPACK_SEQUENCE_LIST': 229, - 'UNPACK_SEQUENCE_TUPLE': 230, - 'UNPACK_SEQUENCE_TWO_TUPLE': 231, + 'BINARY_OP_MULTIPLY_FLOAT': 133, + 'BINARY_OP_MULTIPLY_INT': 134, + 'BINARY_OP_SUBSCR_DICT': 135, + 'BINARY_OP_SUBSCR_GETITEM': 136, + 'BINARY_OP_SUBSCR_LIST_INT': 137, + 'BINARY_OP_SUBSCR_STR_INT': 138, + 'BINARY_OP_SUBSCR_TUPLE_INT': 139, + 'BINARY_OP_SUBTRACT_FLOAT': 140, + 'BINARY_OP_SUBTRACT_INT': 141, + 'CALL_ALLOC_AND_ENTER_INIT': 142, + 'CALL_BOUND_METHOD_EXACT_ARGS': 143, + 'CALL_BOUND_METHOD_GENERAL': 144, + 'CALL_BUILTIN_CLASS': 145, + 'CALL_BUILTIN_FAST': 146, + 'CALL_BUILTIN_FAST_WITH_KEYWORDS': 147, + 'CALL_BUILTIN_O': 148, + 'CALL_ISINSTANCE': 149, + 'CALL_KW_BOUND_METHOD': 150, + 'CALL_KW_NON_PY': 151, + 'CALL_KW_PY': 152, + 'CALL_LEN': 153, + 'CALL_LIST_APPEND': 154, + 'CALL_METHOD_DESCRIPTOR_FAST': 155, + 'CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS': 156, + 'CALL_METHOD_DESCRIPTOR_NOARGS': 157, + 'CALL_METHOD_DESCRIPTOR_O': 158, + 'CALL_NON_PY_GENERAL': 159, + 'CALL_PY_EXACT_ARGS': 160, + 'CALL_PY_GENERAL': 161, + 'CALL_STR_1': 162, + 'CALL_TUPLE_1': 163, + 'CALL_TYPE_1': 164, + 'COMPARE_OP_FLOAT': 165, + 'COMPARE_OP_INT': 166, + 'COMPARE_OP_STR': 167, + 'CONTAINS_OP_DICT': 168, + 'CONTAINS_OP_SET': 169, + 'FOR_ITER_GEN': 170, + 'FOR_ITER_LIST': 171, + 'FOR_ITER_RANGE': 172, + 'FOR_ITER_TUPLE': 173, + 'JUMP_BACKWARD_JIT': 174, + 'JUMP_BACKWARD_NO_JIT': 175, + 'LOAD_ATTR_CLASS': 176, + 'LOAD_ATTR_CLASS_WITH_METACLASS_CHECK': 177, + 'LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN': 178, + 'LOAD_ATTR_INSTANCE_VALUE': 179, + 'LOAD_ATTR_METHOD_LAZY_DICT': 180, + 'LOAD_ATTR_METHOD_NO_DICT': 181, + 'LOAD_ATTR_METHOD_WITH_VALUES': 182, + 'LOAD_ATTR_MODULE': 183, + 'LOAD_ATTR_NONDESCRIPTOR_NO_DICT': 184, + 'LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES': 185, + 'LOAD_ATTR_PROPERTY': 186, + 'LOAD_ATTR_SLOT': 187, + 'LOAD_ATTR_WITH_HINT': 188, + 'LOAD_CONST_IMMORTAL': 189, + 'LOAD_CONST_MORTAL': 190, + 'LOAD_GLOBAL_BUILTIN': 191, + 'LOAD_GLOBAL_MODULE': 192, + 'LOAD_SUPER_ATTR_ATTR': 193, + 'LOAD_SUPER_ATTR_METHOD': 194, + 'RESUME_CHECK': 195, + 'SEND_GEN': 196, + 'STORE_ATTR_INSTANCE_VALUE': 197, + 'STORE_ATTR_SLOT': 198, + 'STORE_ATTR_WITH_HINT': 199, + 'STORE_SUBSCR_DICT': 200, + 'STORE_SUBSCR_LIST_INT': 201, + 'TO_BOOL_ALWAYS_TRUE': 202, + 'TO_BOOL_BOOL': 203, + 'TO_BOOL_INT': 204, + 'TO_BOOL_LIST': 205, + 'TO_BOOL_NONE': 206, + 'TO_BOOL_STR': 207, + 'UNPACK_SEQUENCE_LIST': 208, + 'UNPACK_SEQUENCE_TUPLE': 209, + 'UNPACK_SEQUENCE_TWO_TUPLE': 210, } opmap = { diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py index 69c1ee0690d269..18bae3b06914db 100644 --- a/Lib/test/test_code.py +++ b/Lib/test/test_code.py @@ -429,14 +429,14 @@ def test_invalid_bytecode(self): def foo(): pass - # assert that opcode 135 is invalid - self.assertEqual(opname[135], '<135>') + # assert that opcode 127 is invalid + self.assertEqual(opname[127], '<127>') - # change first opcode to 0x87 (=135) + # change first opcode to 0x7f (=127) foo.__code__ = foo.__code__.replace( - co_code=b'\x87' + foo.__code__.co_code[1:]) + co_code=b'\x7f' + foo.__code__.co_code[1:]) - msg = "unknown opcode 135" + msg = "unknown opcode 127" with self.assertRaisesRegex(SystemError, msg): foo() diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index ce25c54c3bdf48..5208025cbf3edf 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -129,27 +129,6 @@ static void *opcode_targets[256] = { &&_unknown_opcode, &&_unknown_opcode, &&TARGET_RESUME, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, &&TARGET_BINARY_OP_ADD_FLOAT, &&TARGET_BINARY_OP_ADD_INT, &&TARGET_BINARY_OP_ADD_UNICODE, @@ -234,6 +213,27 @@ static void *opcode_targets[256] = { &&TARGET_UNPACK_SEQUENCE_TWO_TUPLE, &&_unknown_opcode, &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, + &&_unknown_opcode, &&TARGET_INSTRUMENTED_END_FOR, &&TARGET_INSTRUMENTED_POP_ITER, &&TARGET_INSTRUMENTED_END_SEND, @@ -736,27 +736,27 @@ static py_tail_call_funcptr INSTRUCTION_TABLE[256] = { [125] = _TAIL_CALL_UNKNOWN_OPCODE, [126] = _TAIL_CALL_UNKNOWN_OPCODE, [127] = _TAIL_CALL_UNKNOWN_OPCODE, - [129] = _TAIL_CALL_UNKNOWN_OPCODE, - [130] = _TAIL_CALL_UNKNOWN_OPCODE, - [131] = _TAIL_CALL_UNKNOWN_OPCODE, - [132] = _TAIL_CALL_UNKNOWN_OPCODE, - [133] = _TAIL_CALL_UNKNOWN_OPCODE, - [134] = _TAIL_CALL_UNKNOWN_OPCODE, - [135] = _TAIL_CALL_UNKNOWN_OPCODE, - [136] = _TAIL_CALL_UNKNOWN_OPCODE, - [137] = _TAIL_CALL_UNKNOWN_OPCODE, - [138] = _TAIL_CALL_UNKNOWN_OPCODE, - [139] = _TAIL_CALL_UNKNOWN_OPCODE, - [140] = _TAIL_CALL_UNKNOWN_OPCODE, - [141] = _TAIL_CALL_UNKNOWN_OPCODE, - [142] = _TAIL_CALL_UNKNOWN_OPCODE, - [143] = _TAIL_CALL_UNKNOWN_OPCODE, - [144] = _TAIL_CALL_UNKNOWN_OPCODE, - [145] = _TAIL_CALL_UNKNOWN_OPCODE, - [146] = _TAIL_CALL_UNKNOWN_OPCODE, - [147] = _TAIL_CALL_UNKNOWN_OPCODE, - [148] = _TAIL_CALL_UNKNOWN_OPCODE, - [149] = _TAIL_CALL_UNKNOWN_OPCODE, + [211] = _TAIL_CALL_UNKNOWN_OPCODE, + [212] = _TAIL_CALL_UNKNOWN_OPCODE, + [213] = _TAIL_CALL_UNKNOWN_OPCODE, + [214] = _TAIL_CALL_UNKNOWN_OPCODE, + [215] = _TAIL_CALL_UNKNOWN_OPCODE, + [216] = _TAIL_CALL_UNKNOWN_OPCODE, + [217] = _TAIL_CALL_UNKNOWN_OPCODE, + [218] = _TAIL_CALL_UNKNOWN_OPCODE, + [219] = _TAIL_CALL_UNKNOWN_OPCODE, + [220] = _TAIL_CALL_UNKNOWN_OPCODE, + [221] = _TAIL_CALL_UNKNOWN_OPCODE, + [222] = _TAIL_CALL_UNKNOWN_OPCODE, + [223] = _TAIL_CALL_UNKNOWN_OPCODE, + [224] = _TAIL_CALL_UNKNOWN_OPCODE, + [225] = _TAIL_CALL_UNKNOWN_OPCODE, + [226] = _TAIL_CALL_UNKNOWN_OPCODE, + [227] = _TAIL_CALL_UNKNOWN_OPCODE, + [228] = _TAIL_CALL_UNKNOWN_OPCODE, + [229] = _TAIL_CALL_UNKNOWN_OPCODE, + [230] = _TAIL_CALL_UNKNOWN_OPCODE, + [231] = _TAIL_CALL_UNKNOWN_OPCODE, [232] = _TAIL_CALL_UNKNOWN_OPCODE, [233] = _TAIL_CALL_UNKNOWN_OPCODE, };