summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2025-01-06 17:54:47 (GMT)
committerGitHub <noreply@github.com>2025-01-06 17:54:47 (GMT)
commitf826beca0cedb8e4b92896544c75fd0d9dcb0446 (patch)
tree87630b6e28e141a0e687e04d2f66d8e4cde21b99 /Include
parentb9c693dcca01537eee1ef716ffebc632be37594b (diff)
downloadcpython-f826beca0cedb8e4b92896544c75fd0d9dcb0446.zip
cpython-f826beca0cedb8e4b92896544c75fd0d9dcb0446.tar.gz
cpython-f826beca0cedb8e4b92896544c75fd0d9dcb0446.tar.bz2
GH-128375: Better instrument for `FOR_ITER` (GH-128445)
Diffstat (limited to 'Include')
-rw-r--r--Include/internal/pycore_instruments.h4
-rw-r--r--Include/internal/pycore_magic_number.h3
-rw-r--r--Include/internal/pycore_opcode_metadata.h39
-rw-r--r--Include/internal/pycore_uop_ids.h1
-rw-r--r--Include/internal/pycore_uop_metadata.h4
-rw-r--r--Include/opcode_ids.h182
6 files changed, 132 insertions, 101 deletions
diff --git a/Include/internal/pycore_instruments.h b/Include/internal/pycore_instruments.h
index 4e5b374..92d8f05 100644
--- a/Include/internal/pycore_instruments.h
+++ b/Include/internal/pycore_instruments.h
@@ -48,8 +48,8 @@ _Py_call_instrumentation_instruction(
_Py_CODEUNIT *
_Py_call_instrumentation_jump(
- PyThreadState *tstate, int event,
- _PyInterpreterFrame *frame, _Py_CODEUNIT *instr, _Py_CODEUNIT *target);
+ _Py_CODEUNIT *instr, PyThreadState *tstate, int event,
+ _PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNIT *dest);
extern int
_Py_call_instrumentation_arg(PyThreadState *tstate, int event,
diff --git a/Include/internal/pycore_magic_number.h b/Include/internal/pycore_magic_number.h
index ec3685d..f9f71d7 100644
--- a/Include/internal/pycore_magic_number.h
+++ b/Include/internal/pycore_magic_number.h
@@ -264,6 +264,7 @@ Known values:
Python 3.14a2 3609 (Add LOAD_SMALL_INT and LOAD_CONST_IMMORTAL instructions, remove RETURN_CONST)
Python 3.14a4 3610 (Add VALUE_WITH_FAKE_GLOBALS format to annotationlib)
Python 3.14a4 3611 (Add NOT_TAKEN instruction)
+ Python 3.14a4 3612 (Add POP_ITER and INSTRUMENTED_POP_ITER)
Python 3.15 will start with 3650
@@ -276,7 +277,7 @@ PC/launcher.c must also be updated.
*/
-#define PYC_MAGIC_NUMBER 3611
+#define PYC_MAGIC_NUMBER 3612
/* 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 5fb2368..90d5e27 100644
--- a/Include/internal/pycore_opcode_metadata.h
+++ b/Include/internal/pycore_opcode_metadata.h
@@ -245,6 +245,8 @@ int _PyOpcode_num_popped(int opcode, int oparg) {
return 0;
case INSTRUMENTED_NOT_TAKEN:
return 0;
+ case INSTRUMENTED_POP_ITER:
+ return 1;
case INSTRUMENTED_POP_JUMP_IF_FALSE:
return 0;
case INSTRUMENTED_POP_JUMP_IF_NONE:
@@ -375,6 +377,8 @@ int _PyOpcode_num_popped(int opcode, int oparg) {
return 0;
case POP_EXCEPT:
return 1;
+ case POP_ITER:
+ return 1;
case POP_JUMP_IF_FALSE:
return 1;
case POP_JUMP_IF_NONE:
@@ -708,6 +712,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg) {
return 0;
case INSTRUMENTED_NOT_TAKEN:
return 0;
+ case INSTRUMENTED_POP_ITER:
+ return 0;
case INSTRUMENTED_POP_JUMP_IF_FALSE:
return 0;
case INSTRUMENTED_POP_JUMP_IF_NONE:
@@ -838,6 +844,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg) {
return 0;
case POP_EXCEPT:
return 0;
+ case POP_ITER:
+ return 0;
case POP_JUMP_IF_FALSE:
return 0;
case POP_JUMP_IF_NONE:
@@ -1399,6 +1407,10 @@ int _PyOpcode_max_stack_effect(int opcode, int oparg, int *effect) {
*effect = 0;
return 0;
}
+ case INSTRUMENTED_POP_ITER: {
+ *effect = -1;
+ return 0;
+ }
case INSTRUMENTED_POP_JUMP_IF_FALSE: {
*effect = 0;
return 0;
@@ -1659,6 +1671,10 @@ int _PyOpcode_max_stack_effect(int opcode, int oparg, int *effect) {
*effect = -1;
return 0;
}
+ case POP_ITER: {
+ *effect = -1;
+ return 0;
+ }
case POP_JUMP_IF_FALSE: {
*effect = -1;
return 0;
@@ -1921,6 +1937,7 @@ enum InstructionFormat {
#define HAS_PASSTHROUGH_FLAG (4096)
#define HAS_OPARG_AND_1_FLAG (8192)
#define HAS_ERROR_NO_POP_FLAG (16384)
+#define HAS_NO_SAVE_IP_FLAG (32768)
#define OPCODE_HAS_ARG(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ARG_FLAG))
#define OPCODE_HAS_CONST(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_CONST_FLAG))
#define OPCODE_HAS_NAME(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_NAME_FLAG))
@@ -1936,6 +1953,7 @@ enum InstructionFormat {
#define OPCODE_HAS_PASSTHROUGH(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PASSTHROUGH_FLAG))
#define OPCODE_HAS_OPARG_AND_1(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_OPARG_AND_1_FLAG))
#define OPCODE_HAS_ERROR_NO_POP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ERROR_NO_POP_FLAG))
+#define OPCODE_HAS_NO_SAVE_IP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_NO_SAVE_IP_FLAG))
#define OPARG_FULL 0
#define OPARG_CACHE_1 1
@@ -1948,8 +1966,8 @@ enum InstructionFormat {
struct opcode_metadata {
uint8_t valid_entry;
- int8_t instr_format;
- int16_t flags;
+ uint8_t instr_format;
+ uint16_t flags;
};
extern const struct opcode_metadata _PyOpcode_opcode_metadata[266];
@@ -2028,7 +2046,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[266] = {
[DICT_MERGE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[DICT_UPDATE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[END_ASYNC_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
- [END_FOR] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
+ [END_FOR] = { true, INSTR_FMT_IX, HAS_NO_SAVE_IP_FLAG },
[END_SEND] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
[ENTER_EXECUTOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
[EXIT_INIT_CHECK] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
@@ -2051,15 +2069,16 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[266] = {
[INSTRUMENTED_CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
[INSTRUMENTED_CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, 0 },
[INSTRUMENTED_CALL_KW] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
- [INSTRUMENTED_END_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
+ [INSTRUMENTED_END_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_NO_SAVE_IP_FLAG },
[INSTRUMENTED_END_SEND] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
- [INSTRUMENTED_FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
+ [INSTRUMENTED_FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
[INSTRUMENTED_INSTRUCTION] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[INSTRUMENTED_JUMP_BACKWARD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
[INSTRUMENTED_JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
[INSTRUMENTED_LINE] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG },
[INSTRUMENTED_LOAD_SUPER_ATTR] = { true, INSTR_FMT_IXC, 0 },
[INSTRUMENTED_NOT_TAKEN] = { true, INSTR_FMT_IX, 0 },
+ [INSTRUMENTED_POP_ITER] = { true, INSTR_FMT_IX, 0 },
[INSTRUMENTED_POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
[INSTRUMENTED_POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
[INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
@@ -2119,6 +2138,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[266] = {
[NOP] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
[NOT_TAKEN] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
[POP_EXCEPT] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG },
+ [POP_ITER] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
[POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
[POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
[POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
@@ -2261,7 +2281,7 @@ _PyOpcode_macro_expansion[256] = {
[DELETE_SUBSCR] = { .nuops = 1, .uops = { { _DELETE_SUBSCR, 0, 0 } } },
[DICT_MERGE] = { .nuops = 1, .uops = { { _DICT_MERGE, 0, 0 } } },
[DICT_UPDATE] = { .nuops = 1, .uops = { { _DICT_UPDATE, 0, 0 } } },
- [END_FOR] = { .nuops = 1, .uops = { { _POP_TOP, 0, 0 } } },
+ [END_FOR] = { .nuops = 1, .uops = { { _END_FOR, 0, 0 } } },
[END_SEND] = { .nuops = 1, .uops = { { _END_SEND, 0, 0 } } },
[EXIT_INIT_CHECK] = { .nuops = 1, .uops = { { _EXIT_INIT_CHECK, 0, 0 } } },
[FORMAT_SIMPLE] = { .nuops = 1, .uops = { { _FORMAT_SIMPLE, 0, 0 } } },
@@ -2324,6 +2344,7 @@ _PyOpcode_macro_expansion[256] = {
[NOP] = { .nuops = 1, .uops = { { _NOP, 0, 0 } } },
[NOT_TAKEN] = { .nuops = 1, .uops = { { _NOP, 0, 0 } } },
[POP_EXCEPT] = { .nuops = 1, .uops = { { _POP_EXCEPT, 0, 0 } } },
+ [POP_ITER] = { .nuops = 1, .uops = { { _POP_TOP, 0, 0 } } },
[POP_JUMP_IF_FALSE] = { .nuops = 1, .uops = { { _POP_JUMP_IF_FALSE, 9, 1 } } },
[POP_JUMP_IF_NONE] = { .nuops = 2, .uops = { { _IS_NONE, 0, 0 }, { _POP_JUMP_IF_TRUE, 9, 1 } } },
[POP_JUMP_IF_NOT_NONE] = { .nuops = 2, .uops = { { _IS_NONE, 0, 0 }, { _POP_JUMP_IF_FALSE, 9, 1 } } },
@@ -2482,6 +2503,7 @@ const char *_PyOpcode_OpName[266] = {
[INSTRUMENTED_LINE] = "INSTRUMENTED_LINE",
[INSTRUMENTED_LOAD_SUPER_ATTR] = "INSTRUMENTED_LOAD_SUPER_ATTR",
[INSTRUMENTED_NOT_TAKEN] = "INSTRUMENTED_NOT_TAKEN",
+ [INSTRUMENTED_POP_ITER] = "INSTRUMENTED_POP_ITER",
[INSTRUMENTED_POP_JUMP_IF_FALSE] = "INSTRUMENTED_POP_JUMP_IF_FALSE",
[INSTRUMENTED_POP_JUMP_IF_NONE] = "INSTRUMENTED_POP_JUMP_IF_NONE",
[INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = "INSTRUMENTED_POP_JUMP_IF_NOT_NONE",
@@ -2547,6 +2569,7 @@ const char *_PyOpcode_OpName[266] = {
[NOT_TAKEN] = "NOT_TAKEN",
[POP_BLOCK] = "POP_BLOCK",
[POP_EXCEPT] = "POP_EXCEPT",
+ [POP_ITER] = "POP_ITER",
[POP_JUMP_IF_FALSE] = "POP_JUMP_IF_FALSE",
[POP_JUMP_IF_NONE] = "POP_JUMP_IF_NONE",
[POP_JUMP_IF_NOT_NONE] = "POP_JUMP_IF_NOT_NONE",
@@ -2740,6 +2763,7 @@ const uint8_t _PyOpcode_Deopt[256] = {
[INSTRUMENTED_LINE] = INSTRUMENTED_LINE,
[INSTRUMENTED_LOAD_SUPER_ATTR] = INSTRUMENTED_LOAD_SUPER_ATTR,
[INSTRUMENTED_NOT_TAKEN] = INSTRUMENTED_NOT_TAKEN,
+ [INSTRUMENTED_POP_ITER] = INSTRUMENTED_POP_ITER,
[INSTRUMENTED_POP_JUMP_IF_FALSE] = INSTRUMENTED_POP_JUMP_IF_FALSE,
[INSTRUMENTED_POP_JUMP_IF_NONE] = INSTRUMENTED_POP_JUMP_IF_NONE,
[INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
@@ -2799,6 +2823,7 @@ const uint8_t _PyOpcode_Deopt[256] = {
[NOP] = NOP,
[NOT_TAKEN] = NOT_TAKEN,
[POP_EXCEPT] = POP_EXCEPT,
+ [POP_ITER] = POP_ITER,
[POP_JUMP_IF_FALSE] = POP_JUMP_IF_FALSE,
[POP_JUMP_IF_NONE] = POP_JUMP_IF_NONE,
[POP_JUMP_IF_NOT_NONE] = POP_JUMP_IF_NOT_NONE,
@@ -2856,7 +2881,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
#endif // NEED_OPCODE_METADATA
#define EXTRA_CASES \
- case 117: \
case 118: \
case 119: \
case 120: \
@@ -2895,7 +2919,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
case 232: \
case 233: \
case 234: \
- case 235: \
;
struct pseudo_targets {
uint8_t as_sequence;
diff --git a/Include/internal/pycore_uop_ids.h b/Include/internal/pycore_uop_ids.h
index 92515b4..21690a2 100644
--- a/Include/internal/pycore_uop_ids.h
+++ b/Include/internal/pycore_uop_ids.h
@@ -101,6 +101,7 @@ extern "C" {
#define _DO_CALL_FUNCTION_EX 358
#define _DO_CALL_KW 359
#define _DYNAMIC_EXIT 360
+#define _END_FOR END_FOR
#define _END_SEND END_SEND
#define _ERROR_POP_N 361
#define _EXIT_INIT_CHECK EXIT_INIT_CHECK
diff --git a/Include/internal/pycore_uop_metadata.h b/Include/internal/pycore_uop_metadata.h
index 73fc29e..83e578c 100644
--- a/Include/internal/pycore_uop_metadata.h
+++ b/Include/internal/pycore_uop_metadata.h
@@ -55,6 +55,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
[_STORE_FAST_STORE_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG,
[_POP_TOP] = HAS_PURE_FLAG,
[_PUSH_NULL] = HAS_PURE_FLAG,
+ [_END_FOR] = HAS_NO_SAVE_IP_FLAG,
[_END_SEND] = HAS_PURE_FLAG,
[_UNARY_NEGATIVE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
[_UNARY_NOT] = HAS_PURE_FLAG,
@@ -391,6 +392,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_ID+1] = {
[_DICT_MERGE] = "_DICT_MERGE",
[_DICT_UPDATE] = "_DICT_UPDATE",
[_DYNAMIC_EXIT] = "_DYNAMIC_EXIT",
+ [_END_FOR] = "_END_FOR",
[_END_SEND] = "_END_SEND",
[_ERROR_POP_N] = "_ERROR_POP_N",
[_EXIT_INIT_CHECK] = "_EXIT_INIT_CHECK",
@@ -655,6 +657,8 @@ int _PyUop_num_popped(int opcode, int oparg)
return 1;
case _PUSH_NULL:
return 0;
+ case _END_FOR:
+ return 1;
case _END_SEND:
return 2;
case _UNARY_NEGATIVE:
diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h
index 3cd189b..09e261f 100644
--- a/Include/opcode_ids.h
+++ b/Include/opcode_ids.h
@@ -40,93 +40,94 @@ extern "C" {
#define NOP 27
#define NOT_TAKEN 28
#define POP_EXCEPT 29
-#define POP_TOP 30
-#define PUSH_EXC_INFO 31
-#define PUSH_NULL 32
-#define RETURN_GENERATOR 33
-#define RETURN_VALUE 34
-#define SETUP_ANNOTATIONS 35
-#define STORE_SLICE 36
-#define STORE_SUBSCR 37
-#define TO_BOOL 38
-#define UNARY_INVERT 39
-#define UNARY_NEGATIVE 40
-#define UNARY_NOT 41
-#define WITH_EXCEPT_START 42
-#define BINARY_OP 43
-#define BUILD_LIST 44
-#define BUILD_MAP 45
-#define BUILD_SET 46
-#define BUILD_SLICE 47
-#define BUILD_STRING 48
-#define BUILD_TUPLE 49
-#define CALL 50
-#define CALL_FUNCTION_EX 51
-#define CALL_INTRINSIC_1 52
-#define CALL_INTRINSIC_2 53
-#define CALL_KW 54
-#define COMPARE_OP 55
-#define CONTAINS_OP 56
-#define CONVERT_VALUE 57
-#define COPY 58
-#define COPY_FREE_VARS 59
-#define DELETE_ATTR 60
-#define DELETE_DEREF 61
-#define DELETE_FAST 62
-#define DELETE_GLOBAL 63
-#define DELETE_NAME 64
-#define DICT_MERGE 65
-#define DICT_UPDATE 66
-#define EXTENDED_ARG 67
-#define FOR_ITER 68
-#define GET_AWAITABLE 69
-#define IMPORT_FROM 70
-#define IMPORT_NAME 71
-#define IS_OP 72
-#define JUMP_BACKWARD 73
-#define JUMP_BACKWARD_NO_INTERRUPT 74
-#define JUMP_FORWARD 75
-#define LIST_APPEND 76
-#define LIST_EXTEND 77
-#define LOAD_ATTR 78
-#define LOAD_COMMON_CONSTANT 79
-#define LOAD_CONST 80
-#define LOAD_DEREF 81
-#define LOAD_FAST 82
-#define LOAD_FAST_AND_CLEAR 83
-#define LOAD_FAST_CHECK 84
-#define LOAD_FAST_LOAD_FAST 85
-#define LOAD_FROM_DICT_OR_DEREF 86
-#define LOAD_FROM_DICT_OR_GLOBALS 87
-#define LOAD_GLOBAL 88
-#define LOAD_NAME 89
-#define LOAD_SMALL_INT 90
-#define LOAD_SPECIAL 91
-#define LOAD_SUPER_ATTR 92
-#define MAKE_CELL 93
-#define MAP_ADD 94
-#define MATCH_CLASS 95
-#define POP_JUMP_IF_FALSE 96
-#define POP_JUMP_IF_NONE 97
-#define POP_JUMP_IF_NOT_NONE 98
-#define POP_JUMP_IF_TRUE 99
-#define RAISE_VARARGS 100
-#define RERAISE 101
-#define SEND 102
-#define SET_ADD 103
-#define SET_FUNCTION_ATTRIBUTE 104
-#define SET_UPDATE 105
-#define STORE_ATTR 106
-#define STORE_DEREF 107
-#define STORE_FAST 108
-#define STORE_FAST_LOAD_FAST 109
-#define STORE_FAST_STORE_FAST 110
-#define STORE_GLOBAL 111
-#define STORE_NAME 112
-#define SWAP 113
-#define UNPACK_EX 114
-#define UNPACK_SEQUENCE 115
-#define YIELD_VALUE 116
+#define POP_ITER 30
+#define POP_TOP 31
+#define PUSH_EXC_INFO 32
+#define PUSH_NULL 33
+#define RETURN_GENERATOR 34
+#define RETURN_VALUE 35
+#define SETUP_ANNOTATIONS 36
+#define STORE_SLICE 37
+#define STORE_SUBSCR 38
+#define TO_BOOL 39
+#define UNARY_INVERT 40
+#define UNARY_NEGATIVE 41
+#define UNARY_NOT 42
+#define WITH_EXCEPT_START 43
+#define BINARY_OP 44
+#define BUILD_LIST 45
+#define BUILD_MAP 46
+#define BUILD_SET 47
+#define BUILD_SLICE 48
+#define BUILD_STRING 49
+#define BUILD_TUPLE 50
+#define CALL 51
+#define CALL_FUNCTION_EX 52
+#define CALL_INTRINSIC_1 53
+#define CALL_INTRINSIC_2 54
+#define CALL_KW 55
+#define COMPARE_OP 56
+#define CONTAINS_OP 57
+#define CONVERT_VALUE 58
+#define COPY 59
+#define COPY_FREE_VARS 60
+#define DELETE_ATTR 61
+#define DELETE_DEREF 62
+#define DELETE_FAST 63
+#define DELETE_GLOBAL 64
+#define DELETE_NAME 65
+#define DICT_MERGE 66
+#define DICT_UPDATE 67
+#define EXTENDED_ARG 68
+#define FOR_ITER 69
+#define GET_AWAITABLE 70
+#define IMPORT_FROM 71
+#define IMPORT_NAME 72
+#define IS_OP 73
+#define JUMP_BACKWARD 74
+#define JUMP_BACKWARD_NO_INTERRUPT 75
+#define JUMP_FORWARD 76
+#define LIST_APPEND 77
+#define LIST_EXTEND 78
+#define LOAD_ATTR 79
+#define LOAD_COMMON_CONSTANT 80
+#define LOAD_CONST 81
+#define LOAD_DEREF 82
+#define LOAD_FAST 83
+#define LOAD_FAST_AND_CLEAR 84
+#define LOAD_FAST_CHECK 85
+#define LOAD_FAST_LOAD_FAST 86
+#define LOAD_FROM_DICT_OR_DEREF 87
+#define LOAD_FROM_DICT_OR_GLOBALS 88
+#define LOAD_GLOBAL 89
+#define LOAD_NAME 90
+#define LOAD_SMALL_INT 91
+#define LOAD_SPECIAL 92
+#define LOAD_SUPER_ATTR 93
+#define MAKE_CELL 94
+#define MAP_ADD 95
+#define MATCH_CLASS 96
+#define POP_JUMP_IF_FALSE 97
+#define POP_JUMP_IF_NONE 98
+#define POP_JUMP_IF_NOT_NONE 99
+#define POP_JUMP_IF_TRUE 100
+#define RAISE_VARARGS 101
+#define RERAISE 102
+#define SEND 103
+#define SET_ADD 104
+#define SET_FUNCTION_ATTRIBUTE 105
+#define SET_UPDATE 106
+#define STORE_ATTR 107
+#define STORE_DEREF 108
+#define STORE_FAST 109
+#define STORE_FAST_LOAD_FAST 110
+#define STORE_FAST_STORE_FAST 111
+#define STORE_GLOBAL 112
+#define STORE_NAME 113
+#define SWAP 114
+#define UNPACK_EX 115
+#define UNPACK_SEQUENCE 116
+#define YIELD_VALUE 117
#define RESUME 149
#define BINARY_OP_ADD_FLOAT 150
#define BINARY_OP_ADD_INT 151
@@ -206,7 +207,8 @@ extern "C" {
#define UNPACK_SEQUENCE_LIST 225
#define UNPACK_SEQUENCE_TUPLE 226
#define UNPACK_SEQUENCE_TWO_TUPLE 227
-#define INSTRUMENTED_END_FOR 236
+#define INSTRUMENTED_END_FOR 235
+#define INSTRUMENTED_POP_ITER 236
#define INSTRUMENTED_END_SEND 237
#define INSTRUMENTED_LOAD_SUPER_ATTR 238
#define INSTRUMENTED_FOR_ITER 239
@@ -237,9 +239,9 @@ extern "C" {
#define SETUP_WITH 264
#define STORE_FAST_MAYBE_NULL 265
-#define HAVE_ARGUMENT 42
+#define HAVE_ARGUMENT 43
#define MIN_SPECIALIZED_OPCODE 150
-#define MIN_INSTRUMENTED_OPCODE 236
+#define MIN_INSTRUMENTED_OPCODE 235
#ifdef __cplusplus
}