]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-145668: Add FOR_ITER specialization for virtual iterators. Specialize GET_ITER...
authorMark Shannon <Mark.Shannon@arm.com>
Thu, 16 Apr 2026 14:22:22 +0000 (15:22 +0100)
committerGitHub <noreply@github.com>
Thu, 16 Apr 2026 14:22:22 +0000 (15:22 +0100)
* Add FOR_ITER_VIRTUAL to specialize FOR_ITER for virtual iterators
* Add GET_ITER_SELF to specialize GET_ITER for iterators (including generators)
* Add GET_ITER_VIRTUAL to specialize GET_ITER for iterables as virtual iterators
* Add new (internal) _tp_iteritem function slot to PyTypeObject
* Put limited RESUME at start of genexpr for free-threading. Fix up exception handling in genexpr

37 files changed:
Include/cpython/object.h
Include/internal/pycore_code.h
Include/internal/pycore_magic_number.h
Include/internal/pycore_opcode_metadata.h
Include/internal/pycore_opcode_utils.h
Include/internal/pycore_uop_ids.h
Include/internal/pycore_uop_metadata.h
Include/object.h
Include/opcode_ids.h
Lib/_opcode_metadata.py
Lib/opcode.py
Lib/test/test_capi/test_opt.py
Lib/test/test_dis.py
Lib/test/test_monitoring.py
Lib/test/test_opcache.py
Lib/test/test_sys.py
Modules/_testinternalcapi/test_cases.c.h
Modules/_testinternalcapi/test_targets.h
Objects/bytesobject.c
Objects/codeobject.c
Objects/listobject.c
Objects/tupleobject.c
Objects/unicodeobject.c
Programs/test_frozenmain.h
Python/bytecodes.c
Python/ceval.c
Python/codegen.c
Python/executor_cases.c.h
Python/flowgraph.c
Python/generated_cases.c.h
Python/opcode_targets.h
Python/optimizer.c
Python/optimizer_bytecodes.c
Python/optimizer_cases.c.h
Python/record_functions.c.h
Python/specialize.c
Tools/cases_generator/parser.py

index 80d30c7765fdb000318deadc5f40e4fa485c23a7..0b50d2a9dd8698faaa1c619966c46fbbdf1fbcd6 100644 (file)
@@ -230,6 +230,8 @@ struct _typeobject {
     destructor tp_finalize;
     vectorcallfunc tp_vectorcall;
 
+    /* Below here all fields are internal to the VM */
+
     /* bitset of which type-watchers care about this type */
     unsigned char tp_watched;
 
@@ -239,6 +241,7 @@ struct _typeobject {
      * Otherwise, limited to MAX_VERSIONS_PER_CLASS (defined elsewhere).
      */
     uint16_t tp_versions_used;
+    _Py_iteritemfunc _tp_iteritem; /* Virtual iterator next function */
 };
 
 #define _Py_ATTR_CACHE_UNUSED (30000)  // (see tp_versions_used)
index b73dbe123838a4334b10215123e29929cedc7386..4584f1bde7974e819e04a4b0bd89ccba0a5a88a5 100644 (file)
@@ -141,6 +141,12 @@ typedef struct {
 
 #define INLINE_CACHE_ENTRIES_FOR_ITER CACHE_ENTRIES(_PyForIterCache)
 
+typedef struct {
+    _Py_BackoffCounter counter;
+} _PyGetIterCache;
+
+#define INLINE_CACHE_ENTRIES_GET_ITER CACHE_ENTRIES(_PyGetIterCache)
+
 typedef struct {
     _Py_BackoffCounter counter;
 } _PySendCache;
@@ -324,6 +330,7 @@ PyAPI_FUNC(void) _Py_Specialize_ContainsOp(_PyStackRef value, _Py_CODEUNIT *inst
 PyAPI_FUNC(void) _Py_GatherStats_GetIter(_PyStackRef iterable);
 PyAPI_FUNC(void) _Py_Specialize_CallFunctionEx(_PyStackRef func_st, _Py_CODEUNIT *instr);
 PyAPI_FUNC(void) _Py_Specialize_Resume(_Py_CODEUNIT *instr, PyThreadState *tstate, _PyInterpreterFrame *frame);
+PyAPI_FUNC(void) _Py_Specialize_GetIter(_PyStackRef iterable, _Py_CODEUNIT *instr);
 
 // Utility functions for reading/writing 32/64-bit values in the inline caches.
 // Great care should be taken to ensure that these functions remain correct and
index c6a2e72fe7b0db7f49958d66c77ec26b764970a1..fd918e13f2d1c72c2a5414321dcaabdc16f49a7f 100644 (file)
@@ -295,6 +295,7 @@ Known values:
     Python 3.15a8 3662 (Add counter to RESUME)
     Python 3.15a8 3663 (Merge GET_ITER and GET_YIELD_FROM_ITER. Modify SEND to make it a bit more like FOR_ITER)
     Python 3.15a8 3664 (Fix __qualname__ for __annotate__ functions)
+    Python 3.15a8 3665 (Add FOR_ITER_VIRTUAL and GET_ITER specializations)
 
 
     Python 3.16 will start with 3700
@@ -308,7 +309,7 @@ PC/launcher.c must also be updated.
 
 */
 
-#define PYC_MAGIC_NUMBER 3664
+#define PYC_MAGIC_NUMBER 3665
 /* This is equivalent to converting PYC_MAGIC_NUMBER to 2 bytes
    (little-endian) and then appending b'\r\n'. */
 #define PYC_MAGIC_NUMBER_TOKEN \
index 0752f191d9434e7202683cefc7aa146a3e7cd5f7..230335ead3a3b684313b7c86955a8df839998c59 100644 (file)
@@ -220,6 +220,8 @@ int _PyOpcode_num_popped(int opcode, int oparg)  {
             return 2;
         case FOR_ITER_TUPLE:
             return 2;
+        case FOR_ITER_VIRTUAL:
+            return 2;
         case GET_AITER:
             return 1;
         case GET_ANEXT:
@@ -228,6 +230,10 @@ int _PyOpcode_num_popped(int opcode, int oparg)  {
             return 1;
         case GET_ITER:
             return 1;
+        case GET_ITER_SELF:
+            return 1;
+        case GET_ITER_VIRTUAL:
+            return 1;
         case GET_LEN:
             return 1;
         case IMPORT_FROM:
@@ -711,6 +717,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg)  {
             return 3;
         case FOR_ITER_TUPLE:
             return 3;
+        case FOR_ITER_VIRTUAL:
+            return 3;
         case GET_AITER:
             return 1;
         case GET_ANEXT:
@@ -719,6 +727,10 @@ int _PyOpcode_num_pushed(int opcode, int oparg)  {
             return 1;
         case GET_ITER:
             return 2;
+        case GET_ITER_SELF:
+            return 2;
+        case GET_ITER_VIRTUAL:
+            return 2;
         case GET_LEN:
             return 2;
         case IMPORT_FROM:
@@ -1183,10 +1195,13 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = {
     [FOR_ITER_LIST] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ESCAPES_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG },
     [FOR_ITER_RANGE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG },
     [FOR_ITER_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG },
+    [FOR_ITER_VIRTUAL] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG | HAS_UNPREDICTABLE_JUMP_FLAG },
     [GET_AITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
     [GET_ANEXT] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
     [GET_AWAITABLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
-    [GET_ITER] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
+    [GET_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_RECORDS_VALUE_FLAG },
+    [GET_ITER_SELF] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_RECORDS_VALUE_FLAG },
+    [GET_ITER_VIRTUAL] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_RECORDS_VALUE_FLAG },
     [GET_LEN] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
     [IMPORT_FROM] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
     [IMPORT_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
@@ -1428,10 +1443,13 @@ _PyOpcode_macro_expansion[256] = {
     [FOR_ITER_LIST] = { .nuops = 3, .uops = { { _ITER_CHECK_LIST, OPARG_SIMPLE, 1 }, { _ITER_JUMP_LIST, OPARG_REPLACED, 1 }, { _ITER_NEXT_LIST, OPARG_REPLACED, 1 } } },
     [FOR_ITER_RANGE] = { .nuops = 3, .uops = { { _ITER_CHECK_RANGE, OPARG_SIMPLE, 1 }, { _ITER_JUMP_RANGE, OPARG_REPLACED, 1 }, { _ITER_NEXT_RANGE, OPARG_SIMPLE, 1 } } },
     [FOR_ITER_TUPLE] = { .nuops = 3, .uops = { { _ITER_CHECK_TUPLE, OPARG_SIMPLE, 1 }, { _ITER_JUMP_TUPLE, OPARG_REPLACED, 1 }, { _ITER_NEXT_TUPLE, OPARG_SIMPLE, 1 } } },
+    [FOR_ITER_VIRTUAL] = { .nuops = 2, .uops = { { _GUARD_NOS_ITER_VIRTUAL, OPARG_SIMPLE, 1 }, { _FOR_ITER_VIRTUAL, OPARG_REPLACED, 1 } } },
     [GET_AITER] = { .nuops = 1, .uops = { { _GET_AITER, OPARG_SIMPLE, 0 } } },
     [GET_ANEXT] = { .nuops = 1, .uops = { { _GET_ANEXT, OPARG_SIMPLE, 0 } } },
     [GET_AWAITABLE] = { .nuops = 1, .uops = { { _GET_AWAITABLE, OPARG_SIMPLE, 0 } } },
-    [GET_ITER] = { .nuops = 1, .uops = { { _GET_ITER, OPARG_SIMPLE, 0 } } },
+    [GET_ITER] = { .nuops = 2, .uops = { { _RECORD_TOS_TYPE, OPARG_SIMPLE, 0 }, { _GET_ITER, OPARG_SIMPLE, 0 } } },
+    [GET_ITER_SELF] = { .nuops = 3, .uops = { { _RECORD_TOS_TYPE, OPARG_SIMPLE, 0 }, { _GUARD_ITERATOR, OPARG_SIMPLE, 1 }, { _PUSH_NULL, OPARG_SIMPLE, 1 } } },
+    [GET_ITER_VIRTUAL] = { .nuops = 3, .uops = { { _RECORD_TOS_TYPE, OPARG_SIMPLE, 0 }, { _GUARD_ITER_VIRTUAL, OPARG_SIMPLE, 1 }, { _PUSH_TAGGED_ZERO, OPARG_SIMPLE, 1 } } },
     [GET_LEN] = { .nuops = 1, .uops = { { _GET_LEN, OPARG_SIMPLE, 0 } } },
     [IMPORT_FROM] = { .nuops = 1, .uops = { { _IMPORT_FROM, OPARG_SIMPLE, 0 } } },
     [IMPORT_NAME] = { .nuops = 1, .uops = { { _IMPORT_NAME, OPARG_SIMPLE, 0 } } },
@@ -1631,10 +1649,13 @@ const char *_PyOpcode_OpName[267] = {
     [FOR_ITER_LIST] = "FOR_ITER_LIST",
     [FOR_ITER_RANGE] = "FOR_ITER_RANGE",
     [FOR_ITER_TUPLE] = "FOR_ITER_TUPLE",
+    [FOR_ITER_VIRTUAL] = "FOR_ITER_VIRTUAL",
     [GET_AITER] = "GET_AITER",
     [GET_ANEXT] = "GET_ANEXT",
     [GET_AWAITABLE] = "GET_AWAITABLE",
     [GET_ITER] = "GET_ITER",
+    [GET_ITER_SELF] = "GET_ITER_SELF",
+    [GET_ITER_VIRTUAL] = "GET_ITER_VIRTUAL",
     [GET_LEN] = "GET_LEN",
     [IMPORT_FROM] = "IMPORT_FROM",
     [IMPORT_NAME] = "IMPORT_NAME",
@@ -1801,6 +1822,7 @@ const uint8_t _PyOpcode_Caches[256] = {
     [POP_JUMP_IF_FALSE] = 1,
     [POP_JUMP_IF_NONE] = 1,
     [POP_JUMP_IF_NOT_NONE] = 1,
+    [GET_ITER] = 1,
     [FOR_ITER] = 1,
     [CALL] = 3,
     [CALL_KW] = 3,
@@ -1820,9 +1842,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
     [125] = 125,
     [126] = 126,
     [127] = 127,
-    [214] = 214,
-    [215] = 215,
-    [216] = 216,
     [217] = 217,
     [218] = 218,
     [219] = 219,
@@ -1930,10 +1949,13 @@ const uint8_t _PyOpcode_Deopt[256] = {
     [FOR_ITER_LIST] = FOR_ITER,
     [FOR_ITER_RANGE] = FOR_ITER,
     [FOR_ITER_TUPLE] = FOR_ITER,
+    [FOR_ITER_VIRTUAL] = FOR_ITER,
     [GET_AITER] = GET_AITER,
     [GET_ANEXT] = GET_ANEXT,
     [GET_AWAITABLE] = GET_AWAITABLE,
     [GET_ITER] = GET_ITER,
+    [GET_ITER_SELF] = GET_ITER,
+    [GET_ITER_VIRTUAL] = GET_ITER,
     [GET_LEN] = GET_LEN,
     [IMPORT_FROM] = IMPORT_FROM,
     [IMPORT_NAME] = IMPORT_NAME,
@@ -2081,9 +2103,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
     case 125: \
     case 126: \
     case 127: \
-    case 214: \
-    case 215: \
-    case 216: \
     case 217: \
     case 218: \
     case 219: \
index 69178381993fba1eb2902ffa92ad7a4dfcf8b625..1e71784c809d2db2076e3a897040db29e89f1637 100644 (file)
@@ -82,9 +82,10 @@ extern "C" {
 #define RESUME_AFTER_YIELD 1
 #define RESUME_AFTER_YIELD_FROM 2
 #define RESUME_AFTER_AWAIT 3
+#define RESUME_AT_GEN_EXPR_START 4
 
-#define RESUME_OPARG_LOCATION_MASK 0x3
-#define RESUME_OPARG_DEPTH1_MASK 0x4
+#define RESUME_OPARG_LOCATION_MASK 0x7
+#define RESUME_OPARG_DEPTH1_MASK 0x8
 
 #define GET_ITER_YIELD_FROM 1
 #define GET_ITER_YIELD_FROM_NO_CHECK 2
index 65933e70b61cd2b4496c791eef4efc204d5083e2..6b96f9bc78e8fef267acc1c1e60a36c8d396ab14 100644 (file)
@@ -145,98 +145,105 @@ extern "C" {
 #define _FOR_ITER 410
 #define _FOR_ITER_GEN_FRAME 411
 #define _FOR_ITER_TIER_TWO 412
+#define _FOR_ITER_VIRTUAL 413
+#define _FOR_ITER_VIRTUAL_TIER_TWO 414
 #define _GET_AITER GET_AITER
 #define _GET_ANEXT GET_ANEXT
 #define _GET_AWAITABLE GET_AWAITABLE
-#define _GET_ITER GET_ITER
+#define _GET_ITER 415
+#define _GET_ITER_TRAD 416
 #define _GET_LEN GET_LEN
-#define _GUARD_BINARY_OP_EXTEND 413
-#define _GUARD_BINARY_OP_EXTEND_LHS 414
-#define _GUARD_BINARY_OP_EXTEND_RHS 415
-#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS 416
-#define _GUARD_BIT_IS_SET_POP 417
-#define _GUARD_BIT_IS_SET_POP_4 418
-#define _GUARD_BIT_IS_SET_POP_5 419
-#define _GUARD_BIT_IS_SET_POP_6 420
-#define _GUARD_BIT_IS_SET_POP_7 421
-#define _GUARD_BIT_IS_UNSET_POP 422
-#define _GUARD_BIT_IS_UNSET_POP_4 423
-#define _GUARD_BIT_IS_UNSET_POP_5 424
-#define _GUARD_BIT_IS_UNSET_POP_6 425
-#define _GUARD_BIT_IS_UNSET_POP_7 426
-#define _GUARD_CALLABLE_BUILTIN_CLASS 427
-#define _GUARD_CALLABLE_BUILTIN_FAST 428
-#define _GUARD_CALLABLE_BUILTIN_FAST_WITH_KEYWORDS 429
-#define _GUARD_CALLABLE_BUILTIN_O 430
-#define _GUARD_CALLABLE_ISINSTANCE 431
-#define _GUARD_CALLABLE_LEN 432
-#define _GUARD_CALLABLE_LIST_APPEND 433
-#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST 434
-#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 435
-#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_NOARGS 436
-#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_O 437
-#define _GUARD_CALLABLE_STR_1 438
-#define _GUARD_CALLABLE_TUPLE_1 439
-#define _GUARD_CALLABLE_TYPE_1 440
-#define _GUARD_CODE_VERSION_RETURN_GENERATOR 441
-#define _GUARD_CODE_VERSION_RETURN_VALUE 442
-#define _GUARD_CODE_VERSION_YIELD_VALUE 443
-#define _GUARD_CODE_VERSION__PUSH_FRAME 444
-#define _GUARD_DORV_NO_DICT 445
-#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 446
-#define _GUARD_GLOBALS_VERSION 447
-#define _GUARD_IP_RETURN_GENERATOR 448
-#define _GUARD_IP_RETURN_VALUE 449
-#define _GUARD_IP_YIELD_VALUE 450
-#define _GUARD_IP__PUSH_FRAME 451
-#define _GUARD_IS_FALSE_POP 452
-#define _GUARD_IS_NONE_POP 453
-#define _GUARD_IS_NOT_NONE_POP 454
-#define _GUARD_IS_TRUE_POP 455
-#define _GUARD_KEYS_VERSION 456
-#define _GUARD_LOAD_SUPER_ATTR_METHOD 457
-#define _GUARD_NOS_ANY_DICT 458
-#define _GUARD_NOS_COMPACT_ASCII 459
-#define _GUARD_NOS_DICT 460
-#define _GUARD_NOS_FLOAT 461
-#define _GUARD_NOS_INT 462
-#define _GUARD_NOS_LIST 463
-#define _GUARD_NOS_NOT_NULL 464
-#define _GUARD_NOS_NULL 465
-#define _GUARD_NOS_OVERFLOWED 466
-#define _GUARD_NOS_TUPLE 467
-#define _GUARD_NOS_TYPE_VERSION 468
-#define _GUARD_NOS_UNICODE 469
-#define _GUARD_NOT_EXHAUSTED_LIST 470
-#define _GUARD_NOT_EXHAUSTED_RANGE 471
-#define _GUARD_NOT_EXHAUSTED_TUPLE 472
-#define _GUARD_THIRD_NULL 473
-#define _GUARD_TOS_ANY_DICT 474
-#define _GUARD_TOS_ANY_SET 475
-#define _GUARD_TOS_DICT 476
-#define _GUARD_TOS_FLOAT 477
-#define _GUARD_TOS_FROZENDICT 478
-#define _GUARD_TOS_FROZENSET 479
-#define _GUARD_TOS_INT 480
-#define _GUARD_TOS_LIST 481
-#define _GUARD_TOS_OVERFLOWED 482
-#define _GUARD_TOS_SET 483
-#define _GUARD_TOS_SLICE 484
-#define _GUARD_TOS_TUPLE 485
-#define _GUARD_TOS_UNICODE 486
-#define _GUARD_TYPE_VERSION 487
-#define _GUARD_TYPE_VERSION_LOCKED 488
-#define _HANDLE_PENDING_AND_DEOPT 489
+#define _GUARD_BINARY_OP_EXTEND 417
+#define _GUARD_BINARY_OP_EXTEND_LHS 418
+#define _GUARD_BINARY_OP_EXTEND_RHS 419
+#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS 420
+#define _GUARD_BIT_IS_SET_POP 421
+#define _GUARD_BIT_IS_SET_POP_4 422
+#define _GUARD_BIT_IS_SET_POP_5 423
+#define _GUARD_BIT_IS_SET_POP_6 424
+#define _GUARD_BIT_IS_SET_POP_7 425
+#define _GUARD_BIT_IS_UNSET_POP 426
+#define _GUARD_BIT_IS_UNSET_POP_4 427
+#define _GUARD_BIT_IS_UNSET_POP_5 428
+#define _GUARD_BIT_IS_UNSET_POP_6 429
+#define _GUARD_BIT_IS_UNSET_POP_7 430
+#define _GUARD_CALLABLE_BUILTIN_CLASS 431
+#define _GUARD_CALLABLE_BUILTIN_FAST 432
+#define _GUARD_CALLABLE_BUILTIN_FAST_WITH_KEYWORDS 433
+#define _GUARD_CALLABLE_BUILTIN_O 434
+#define _GUARD_CALLABLE_ISINSTANCE 435
+#define _GUARD_CALLABLE_LEN 436
+#define _GUARD_CALLABLE_LIST_APPEND 437
+#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST 438
+#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 439
+#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_NOARGS 440
+#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_O 441
+#define _GUARD_CALLABLE_STR_1 442
+#define _GUARD_CALLABLE_TUPLE_1 443
+#define _GUARD_CALLABLE_TYPE_1 444
+#define _GUARD_CODE_VERSION_RETURN_GENERATOR 445
+#define _GUARD_CODE_VERSION_RETURN_VALUE 446
+#define _GUARD_CODE_VERSION_YIELD_VALUE 447
+#define _GUARD_CODE_VERSION__PUSH_FRAME 448
+#define _GUARD_DORV_NO_DICT 449
+#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 450
+#define _GUARD_GLOBALS_VERSION 451
+#define _GUARD_IP_RETURN_GENERATOR 452
+#define _GUARD_IP_RETURN_VALUE 453
+#define _GUARD_IP_YIELD_VALUE 454
+#define _GUARD_IP__PUSH_FRAME 455
+#define _GUARD_IS_FALSE_POP 456
+#define _GUARD_IS_NONE_POP 457
+#define _GUARD_IS_NOT_NONE_POP 458
+#define _GUARD_IS_TRUE_POP 459
+#define _GUARD_ITERATOR 460
+#define _GUARD_ITER_VIRTUAL 461
+#define _GUARD_KEYS_VERSION 462
+#define _GUARD_LOAD_SUPER_ATTR_METHOD 463
+#define _GUARD_NOS_ANY_DICT 464
+#define _GUARD_NOS_COMPACT_ASCII 465
+#define _GUARD_NOS_DICT 466
+#define _GUARD_NOS_FLOAT 467
+#define _GUARD_NOS_INT 468
+#define _GUARD_NOS_ITER_VIRTUAL 469
+#define _GUARD_NOS_LIST 470
+#define _GUARD_NOS_NOT_NULL 471
+#define _GUARD_NOS_NULL 472
+#define _GUARD_NOS_OVERFLOWED 473
+#define _GUARD_NOS_TUPLE 474
+#define _GUARD_NOS_TYPE_VERSION 475
+#define _GUARD_NOS_UNICODE 476
+#define _GUARD_NOT_EXHAUSTED_LIST 477
+#define _GUARD_NOT_EXHAUSTED_RANGE 478
+#define _GUARD_NOT_EXHAUSTED_TUPLE 479
+#define _GUARD_THIRD_NULL 480
+#define _GUARD_TOS_ANY_DICT 481
+#define _GUARD_TOS_ANY_SET 482
+#define _GUARD_TOS_DICT 483
+#define _GUARD_TOS_FLOAT 484
+#define _GUARD_TOS_FROZENDICT 485
+#define _GUARD_TOS_FROZENSET 486
+#define _GUARD_TOS_INT 487
+#define _GUARD_TOS_LIST 488
+#define _GUARD_TOS_OVERFLOWED 489
+#define _GUARD_TOS_SET 490
+#define _GUARD_TOS_SLICE 491
+#define _GUARD_TOS_TUPLE 492
+#define _GUARD_TOS_UNICODE 493
+#define _GUARD_TYPE 494
+#define _GUARD_TYPE_VERSION 495
+#define _GUARD_TYPE_VERSION_LOCKED 496
+#define _HANDLE_PENDING_AND_DEOPT 497
 #define _IMPORT_FROM IMPORT_FROM
 #define _IMPORT_NAME IMPORT_NAME
-#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS 490
-#define _INIT_CALL_PY_EXACT_ARGS 491
-#define _INIT_CALL_PY_EXACT_ARGS_0 492
-#define _INIT_CALL_PY_EXACT_ARGS_1 493
-#define _INIT_CALL_PY_EXACT_ARGS_2 494
-#define _INIT_CALL_PY_EXACT_ARGS_3 495
-#define _INIT_CALL_PY_EXACT_ARGS_4 496
-#define _INSERT_NULL 497
+#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS 498
+#define _INIT_CALL_PY_EXACT_ARGS 499
+#define _INIT_CALL_PY_EXACT_ARGS_0 500
+#define _INIT_CALL_PY_EXACT_ARGS_1 501
+#define _INIT_CALL_PY_EXACT_ARGS_2 502
+#define _INIT_CALL_PY_EXACT_ARGS_3 503
+#define _INIT_CALL_PY_EXACT_ARGS_4 504
+#define _INSERT_NULL 505
 #define _INSTRUMENTED_FOR_ITER INSTRUMENTED_FOR_ITER
 #define _INSTRUMENTED_INSTRUCTION INSTRUMENTED_INSTRUCTION
 #define _INSTRUMENTED_JUMP_FORWARD INSTRUMENTED_JUMP_FORWARD
@@ -246,1144 +253,1167 @@ extern "C" {
 #define _INSTRUMENTED_POP_JUMP_IF_NONE INSTRUMENTED_POP_JUMP_IF_NONE
 #define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE INSTRUMENTED_POP_JUMP_IF_NOT_NONE
 #define _INSTRUMENTED_POP_JUMP_IF_TRUE INSTRUMENTED_POP_JUMP_IF_TRUE
-#define _IS_NONE 498
-#define _IS_OP 499
-#define _ITER_CHECK_LIST 500
-#define _ITER_CHECK_RANGE 501
-#define _ITER_CHECK_TUPLE 502
-#define _ITER_JUMP_LIST 503
-#define _ITER_JUMP_RANGE 504
-#define _ITER_JUMP_TUPLE 505
-#define _ITER_NEXT_LIST 506
-#define _ITER_NEXT_LIST_TIER_TWO 507
-#define _ITER_NEXT_RANGE 508
-#define _ITER_NEXT_TUPLE 509
+#define _IS_NONE 506
+#define _IS_OP 507
+#define _ITER_CHECK_LIST 508
+#define _ITER_CHECK_RANGE 509
+#define _ITER_CHECK_TUPLE 510
+#define _ITER_JUMP_LIST 511
+#define _ITER_JUMP_RANGE 512
+#define _ITER_JUMP_TUPLE 513
+#define _ITER_NEXT_LIST 514
+#define _ITER_NEXT_LIST_TIER_TWO 515
+#define _ITER_NEXT_RANGE 516
+#define _ITER_NEXT_TUPLE 517
 #define _JUMP_BACKWARD_NO_INTERRUPT JUMP_BACKWARD_NO_INTERRUPT
-#define _JUMP_TO_TOP 510
+#define _JUMP_TO_TOP 518
 #define _LIST_APPEND LIST_APPEND
-#define _LIST_EXTEND 511
-#define _LOAD_ATTR 512
-#define _LOAD_ATTR_CLASS 513
-#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_FRAME 514
-#define _LOAD_ATTR_INSTANCE_VALUE 515
-#define _LOAD_ATTR_METHOD_LAZY_DICT 516
-#define _LOAD_ATTR_METHOD_NO_DICT 517
-#define _LOAD_ATTR_METHOD_WITH_VALUES 518
-#define _LOAD_ATTR_MODULE 519
-#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT 520
-#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 521
-#define _LOAD_ATTR_PROPERTY_FRAME 522
-#define _LOAD_ATTR_SLOT 523
-#define _LOAD_ATTR_WITH_HINT 524
+#define _LIST_EXTEND 519
+#define _LOAD_ATTR 520
+#define _LOAD_ATTR_CLASS 521
+#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_FRAME 522
+#define _LOAD_ATTR_INSTANCE_VALUE 523
+#define _LOAD_ATTR_METHOD_LAZY_DICT 524
+#define _LOAD_ATTR_METHOD_NO_DICT 525
+#define _LOAD_ATTR_METHOD_WITH_VALUES 526
+#define _LOAD_ATTR_MODULE 527
+#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT 528
+#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 529
+#define _LOAD_ATTR_PROPERTY_FRAME 530
+#define _LOAD_ATTR_SLOT 531
+#define _LOAD_ATTR_WITH_HINT 532
 #define _LOAD_BUILD_CLASS LOAD_BUILD_CLASS
-#define _LOAD_BYTECODE 525
+#define _LOAD_BYTECODE 533
 #define _LOAD_COMMON_CONSTANT LOAD_COMMON_CONSTANT
 #define _LOAD_CONST LOAD_CONST
-#define _LOAD_CONST_INLINE 526
-#define _LOAD_CONST_INLINE_BORROW 527
+#define _LOAD_CONST_INLINE 534
+#define _LOAD_CONST_INLINE_BORROW 535
 #define _LOAD_DEREF LOAD_DEREF
-#define _LOAD_FAST 528
-#define _LOAD_FAST_0 529
-#define _LOAD_FAST_1 530
-#define _LOAD_FAST_2 531
-#define _LOAD_FAST_3 532
-#define _LOAD_FAST_4 533
-#define _LOAD_FAST_5 534
-#define _LOAD_FAST_6 535
-#define _LOAD_FAST_7 536
+#define _LOAD_FAST 536
+#define _LOAD_FAST_0 537
+#define _LOAD_FAST_1 538
+#define _LOAD_FAST_2 539
+#define _LOAD_FAST_3 540
+#define _LOAD_FAST_4 541
+#define _LOAD_FAST_5 542
+#define _LOAD_FAST_6 543
+#define _LOAD_FAST_7 544
 #define _LOAD_FAST_AND_CLEAR LOAD_FAST_AND_CLEAR
-#define _LOAD_FAST_BORROW 537
-#define _LOAD_FAST_BORROW_0 538
-#define _LOAD_FAST_BORROW_1 539
-#define _LOAD_FAST_BORROW_2 540
-#define _LOAD_FAST_BORROW_3 541
-#define _LOAD_FAST_BORROW_4 542
-#define _LOAD_FAST_BORROW_5 543
-#define _LOAD_FAST_BORROW_6 544
-#define _LOAD_FAST_BORROW_7 545
+#define _LOAD_FAST_BORROW 545
+#define _LOAD_FAST_BORROW_0 546
+#define _LOAD_FAST_BORROW_1 547
+#define _LOAD_FAST_BORROW_2 548
+#define _LOAD_FAST_BORROW_3 549
+#define _LOAD_FAST_BORROW_4 550
+#define _LOAD_FAST_BORROW_5 551
+#define _LOAD_FAST_BORROW_6 552
+#define _LOAD_FAST_BORROW_7 553
 #define _LOAD_FAST_CHECK LOAD_FAST_CHECK
 #define _LOAD_FROM_DICT_OR_DEREF LOAD_FROM_DICT_OR_DEREF
 #define _LOAD_FROM_DICT_OR_GLOBALS LOAD_FROM_DICT_OR_GLOBALS
-#define _LOAD_GLOBAL 546
-#define _LOAD_GLOBAL_BUILTINS 547
-#define _LOAD_GLOBAL_MODULE 548
+#define _LOAD_GLOBAL 554
+#define _LOAD_GLOBAL_BUILTINS 555
+#define _LOAD_GLOBAL_MODULE 556
 #define _LOAD_LOCALS LOAD_LOCALS
 #define _LOAD_NAME LOAD_NAME
-#define _LOAD_SMALL_INT 549
-#define _LOAD_SMALL_INT_0 550
-#define _LOAD_SMALL_INT_1 551
-#define _LOAD_SMALL_INT_2 552
-#define _LOAD_SMALL_INT_3 553
-#define _LOAD_SPECIAL 554
+#define _LOAD_SMALL_INT 557
+#define _LOAD_SMALL_INT_0 558
+#define _LOAD_SMALL_INT_1 559
+#define _LOAD_SMALL_INT_2 560
+#define _LOAD_SMALL_INT_3 561
+#define _LOAD_SPECIAL 562
 #define _LOAD_SUPER_ATTR_ATTR LOAD_SUPER_ATTR_ATTR
-#define _LOAD_SUPER_ATTR_METHOD 555
-#define _LOCK_OBJECT 556
-#define _MAKE_CALLARGS_A_TUPLE 557
+#define _LOAD_SUPER_ATTR_METHOD 563
+#define _LOCK_OBJECT 564
+#define _MAKE_CALLARGS_A_TUPLE 565
 #define _MAKE_CELL MAKE_CELL
-#define _MAKE_FUNCTION 558
-#define _MAKE_HEAP_SAFE 559
-#define _MAKE_WARM 560
+#define _MAKE_FUNCTION 566
+#define _MAKE_HEAP_SAFE 567
+#define _MAKE_WARM 568
 #define _MAP_ADD MAP_ADD
-#define _MATCH_CLASS 561
+#define _MATCH_CLASS 569
 #define _MATCH_KEYS MATCH_KEYS
 #define _MATCH_MAPPING MATCH_MAPPING
 #define _MATCH_SEQUENCE MATCH_SEQUENCE
-#define _MAYBE_EXPAND_METHOD 562
-#define _MAYBE_EXPAND_METHOD_KW 563
-#define _MONITOR_CALL 564
-#define _MONITOR_CALL_KW 565
-#define _MONITOR_JUMP_BACKWARD 566
-#define _MONITOR_RESUME 567
+#define _MAYBE_EXPAND_METHOD 570
+#define _MAYBE_EXPAND_METHOD_KW 571
+#define _MONITOR_CALL 572
+#define _MONITOR_CALL_KW 573
+#define _MONITOR_JUMP_BACKWARD 574
+#define _MONITOR_RESUME 575
 #define _NOP NOP
 #define _POP_EXCEPT POP_EXCEPT
 #define _POP_ITER POP_ITER
-#define _POP_JUMP_IF_FALSE 568
-#define _POP_JUMP_IF_TRUE 569
+#define _POP_JUMP_IF_FALSE 576
+#define _POP_JUMP_IF_TRUE 577
 #define _POP_TOP POP_TOP
-#define _POP_TOP_FLOAT 570
-#define _POP_TOP_INT 571
-#define _POP_TOP_NOP 572
-#define _POP_TOP_OPARG 573
-#define _POP_TOP_UNICODE 574
+#define _POP_TOP_FLOAT 578
+#define _POP_TOP_INT 579
+#define _POP_TOP_NOP 580
+#define _POP_TOP_OPARG 581
+#define _POP_TOP_UNICODE 582
 #define _PUSH_EXC_INFO PUSH_EXC_INFO
-#define _PUSH_FRAME 575
+#define _PUSH_FRAME 583
 #define _PUSH_NULL PUSH_NULL
-#define _PUSH_NULL_CONDITIONAL 576
-#define _PY_FRAME_EX 577
-#define _PY_FRAME_GENERAL 578
-#define _PY_FRAME_KW 579
-#define _RECORD_3OS_GEN_FUNC 580
-#define _RECORD_4OS 581
-#define _RECORD_BOUND_METHOD 582
-#define _RECORD_CALLABLE 583
-#define _RECORD_CALLABLE_KW 584
-#define _RECORD_CODE 585
-#define _RECORD_NOS 586
-#define _RECORD_NOS_GEN_FUNC 587
-#define _RECORD_NOS_TYPE 588
-#define _RECORD_TOS 589
-#define _RECORD_TOS_TYPE 590
-#define _REPLACE_WITH_TRUE 591
-#define _RESUME_CHECK 592
+#define _PUSH_NULL_CONDITIONAL 584
+#define _PUSH_TAGGED_ZERO 585
+#define _PY_FRAME_EX 586
+#define _PY_FRAME_GENERAL 587
+#define _PY_FRAME_KW 588
+#define _RECORD_3OS_GEN_FUNC 589
+#define _RECORD_4OS 590
+#define _RECORD_BOUND_METHOD 591
+#define _RECORD_CALLABLE 592
+#define _RECORD_CALLABLE_KW 593
+#define _RECORD_CODE 594
+#define _RECORD_NOS 595
+#define _RECORD_NOS_GEN_FUNC 596
+#define _RECORD_NOS_TYPE 597
+#define _RECORD_TOS 598
+#define _RECORD_TOS_TYPE 599
+#define _REPLACE_WITH_TRUE 600
+#define _RESUME_CHECK 601
 #define _RETURN_GENERATOR RETURN_GENERATOR
-#define _RETURN_VALUE 593
-#define _SAVE_RETURN_OFFSET 594
-#define _SEND 595
-#define _SEND_GEN_FRAME 596
+#define _RETURN_VALUE 602
+#define _SAVE_RETURN_OFFSET 603
+#define _SEND 604
+#define _SEND_GEN_FRAME 605
 #define _SETUP_ANNOTATIONS SETUP_ANNOTATIONS
 #define _SET_ADD SET_ADD
 #define _SET_FUNCTION_ATTRIBUTE SET_FUNCTION_ATTRIBUTE
-#define _SET_UPDATE 597
-#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW 598
-#define _SPILL_OR_RELOAD 599
-#define _START_EXECUTOR 600
-#define _STORE_ATTR 601
-#define _STORE_ATTR_INSTANCE_VALUE 602
-#define _STORE_ATTR_SLOT 603
-#define _STORE_ATTR_WITH_HINT 604
+#define _SET_UPDATE 606
+#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW 607
+#define _SPILL_OR_RELOAD 608
+#define _START_EXECUTOR 609
+#define _STORE_ATTR 610
+#define _STORE_ATTR_INSTANCE_VALUE 611
+#define _STORE_ATTR_SLOT 612
+#define _STORE_ATTR_WITH_HINT 613
 #define _STORE_DEREF STORE_DEREF
 #define _STORE_GLOBAL STORE_GLOBAL
 #define _STORE_NAME STORE_NAME
-#define _STORE_SLICE 605
-#define _STORE_SUBSCR 606
-#define _STORE_SUBSCR_DICT 607
-#define _STORE_SUBSCR_DICT_KNOWN_HASH 608
-#define _STORE_SUBSCR_LIST_INT 609
-#define _SWAP 610
-#define _SWAP_2 611
-#define _SWAP_3 612
-#define _SWAP_FAST 613
-#define _SWAP_FAST_0 614
-#define _SWAP_FAST_1 615
-#define _SWAP_FAST_2 616
-#define _SWAP_FAST_3 617
-#define _SWAP_FAST_4 618
-#define _SWAP_FAST_5 619
-#define _SWAP_FAST_6 620
-#define _SWAP_FAST_7 621
-#define _TIER2_RESUME_CHECK 622
-#define _TO_BOOL 623
+#define _STORE_SLICE 614
+#define _STORE_SUBSCR 615
+#define _STORE_SUBSCR_DICT 616
+#define _STORE_SUBSCR_DICT_KNOWN_HASH 617
+#define _STORE_SUBSCR_LIST_INT 618
+#define _SWAP 619
+#define _SWAP_2 620
+#define _SWAP_3 621
+#define _SWAP_FAST 622
+#define _SWAP_FAST_0 623
+#define _SWAP_FAST_1 624
+#define _SWAP_FAST_2 625
+#define _SWAP_FAST_3 626
+#define _SWAP_FAST_4 627
+#define _SWAP_FAST_5 628
+#define _SWAP_FAST_6 629
+#define _SWAP_FAST_7 630
+#define _TIER2_RESUME_CHECK 631
+#define _TO_BOOL 632
 #define _TO_BOOL_BOOL TO_BOOL_BOOL
-#define _TO_BOOL_INT 624
-#define _TO_BOOL_LIST 625
+#define _TO_BOOL_INT 633
+#define _TO_BOOL_LIST 634
 #define _TO_BOOL_NONE TO_BOOL_NONE
-#define _TO_BOOL_STR 626
+#define _TO_BOOL_STR 635
 #define _TRACE_RECORD TRACE_RECORD
-#define _UNARY_INVERT 627
-#define _UNARY_NEGATIVE 628
-#define _UNARY_NEGATIVE_FLOAT_INPLACE 629
+#define _UNARY_INVERT 636
+#define _UNARY_NEGATIVE 637
+#define _UNARY_NEGATIVE_FLOAT_INPLACE 638
 #define _UNARY_NOT UNARY_NOT
 #define _UNPACK_EX UNPACK_EX
-#define _UNPACK_SEQUENCE 630
-#define _UNPACK_SEQUENCE_LIST 631
-#define _UNPACK_SEQUENCE_TUPLE 632
-#define _UNPACK_SEQUENCE_TWO_TUPLE 633
-#define _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE 634
-#define _UNPACK_SEQUENCE_UNIQUE_TUPLE 635
-#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE 636
+#define _UNPACK_SEQUENCE 639
+#define _UNPACK_SEQUENCE_LIST 640
+#define _UNPACK_SEQUENCE_TUPLE 641
+#define _UNPACK_SEQUENCE_TWO_TUPLE 642
+#define _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE 643
+#define _UNPACK_SEQUENCE_UNIQUE_TUPLE 644
+#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE 645
 #define _WITH_EXCEPT_START WITH_EXCEPT_START
-#define _YIELD_VALUE 637
-#define MAX_UOP_ID 637
-#define _ALLOCATE_OBJECT_r00 638
-#define _BINARY_OP_r23 639
-#define _BINARY_OP_ADD_FLOAT_r03 640
-#define _BINARY_OP_ADD_FLOAT_r13 641
-#define _BINARY_OP_ADD_FLOAT_r23 642
-#define _BINARY_OP_ADD_FLOAT_INPLACE_r03 643
-#define _BINARY_OP_ADD_FLOAT_INPLACE_r13 644
-#define _BINARY_OP_ADD_FLOAT_INPLACE_r23 645
-#define _BINARY_OP_ADD_FLOAT_INPLACE_RIGHT_r03 646
-#define _BINARY_OP_ADD_FLOAT_INPLACE_RIGHT_r13 647
-#define _BINARY_OP_ADD_FLOAT_INPLACE_RIGHT_r23 648
-#define _BINARY_OP_ADD_INT_r03 649
-#define _BINARY_OP_ADD_INT_r13 650
-#define _BINARY_OP_ADD_INT_r23 651
-#define _BINARY_OP_ADD_INT_INPLACE_r03 652
-#define _BINARY_OP_ADD_INT_INPLACE_r13 653
-#define _BINARY_OP_ADD_INT_INPLACE_r23 654
-#define _BINARY_OP_ADD_INT_INPLACE_RIGHT_r03 655
-#define _BINARY_OP_ADD_INT_INPLACE_RIGHT_r13 656
-#define _BINARY_OP_ADD_INT_INPLACE_RIGHT_r23 657
-#define _BINARY_OP_ADD_UNICODE_r03 658
-#define _BINARY_OP_ADD_UNICODE_r13 659
-#define _BINARY_OP_ADD_UNICODE_r23 660
-#define _BINARY_OP_EXTEND_r23 661
-#define _BINARY_OP_INPLACE_ADD_UNICODE_r21 662
-#define _BINARY_OP_MULTIPLY_FLOAT_r03 663
-#define _BINARY_OP_MULTIPLY_FLOAT_r13 664
-#define _BINARY_OP_MULTIPLY_FLOAT_r23 665
-#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_r03 666
-#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_r13 667
-#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_r23 668
-#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_RIGHT_r03 669
-#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_RIGHT_r13 670
-#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_RIGHT_r23 671
-#define _BINARY_OP_MULTIPLY_INT_r03 672
-#define _BINARY_OP_MULTIPLY_INT_r13 673
-#define _BINARY_OP_MULTIPLY_INT_r23 674
-#define _BINARY_OP_MULTIPLY_INT_INPLACE_r03 675
-#define _BINARY_OP_MULTIPLY_INT_INPLACE_r13 676
-#define _BINARY_OP_MULTIPLY_INT_INPLACE_r23 677
-#define _BINARY_OP_MULTIPLY_INT_INPLACE_RIGHT_r03 678
-#define _BINARY_OP_MULTIPLY_INT_INPLACE_RIGHT_r13 679
-#define _BINARY_OP_MULTIPLY_INT_INPLACE_RIGHT_r23 680
-#define _BINARY_OP_SUBSCR_CHECK_FUNC_r23 681
-#define _BINARY_OP_SUBSCR_DICT_r23 682
-#define _BINARY_OP_SUBSCR_DICT_KNOWN_HASH_r23 683
-#define _BINARY_OP_SUBSCR_INIT_CALL_r01 684
-#define _BINARY_OP_SUBSCR_INIT_CALL_r11 685
-#define _BINARY_OP_SUBSCR_INIT_CALL_r21 686
-#define _BINARY_OP_SUBSCR_INIT_CALL_r31 687
-#define _BINARY_OP_SUBSCR_LIST_INT_r23 688
-#define _BINARY_OP_SUBSCR_LIST_SLICE_r23 689
-#define _BINARY_OP_SUBSCR_STR_INT_r23 690
-#define _BINARY_OP_SUBSCR_TUPLE_INT_r03 691
-#define _BINARY_OP_SUBSCR_TUPLE_INT_r13 692
-#define _BINARY_OP_SUBSCR_TUPLE_INT_r23 693
-#define _BINARY_OP_SUBSCR_USTR_INT_r23 694
-#define _BINARY_OP_SUBTRACT_FLOAT_r03 695
-#define _BINARY_OP_SUBTRACT_FLOAT_r13 696
-#define _BINARY_OP_SUBTRACT_FLOAT_r23 697
-#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_r03 698
-#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_r13 699
-#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_r23 700
-#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_RIGHT_r03 701
-#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_RIGHT_r13 702
-#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_RIGHT_r23 703
-#define _BINARY_OP_SUBTRACT_INT_r03 704
-#define _BINARY_OP_SUBTRACT_INT_r13 705
-#define _BINARY_OP_SUBTRACT_INT_r23 706
-#define _BINARY_OP_SUBTRACT_INT_INPLACE_r03 707
-#define _BINARY_OP_SUBTRACT_INT_INPLACE_r13 708
-#define _BINARY_OP_SUBTRACT_INT_INPLACE_r23 709
-#define _BINARY_OP_SUBTRACT_INT_INPLACE_RIGHT_r03 710
-#define _BINARY_OP_SUBTRACT_INT_INPLACE_RIGHT_r13 711
-#define _BINARY_OP_SUBTRACT_INT_INPLACE_RIGHT_r23 712
-#define _BINARY_OP_TRUEDIV_FLOAT_r23 713
-#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_r03 714
-#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_r13 715
-#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_r23 716
-#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_RIGHT_r03 717
-#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_RIGHT_r13 718
-#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_RIGHT_r23 719
-#define _BINARY_SLICE_r31 720
-#define _BUILD_INTERPOLATION_r01 721
-#define _BUILD_LIST_r01 722
-#define _BUILD_MAP_r01 723
-#define _BUILD_SET_r01 724
-#define _BUILD_SLICE_r01 725
-#define _BUILD_STRING_r01 726
-#define _BUILD_TEMPLATE_r21 727
-#define _BUILD_TUPLE_r01 728
-#define _CALL_BUILTIN_CLASS_r00 729
-#define _CALL_BUILTIN_FAST_r00 730
-#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00 731
-#define _CALL_BUILTIN_O_r03 732
-#define _CALL_FUNCTION_EX_NON_PY_GENERAL_r31 733
-#define _CALL_INTRINSIC_1_r12 734
-#define _CALL_INTRINSIC_2_r23 735
-#define _CALL_ISINSTANCE_r31 736
-#define _CALL_KW_NON_PY_r11 737
-#define _CALL_LEN_r33 738
-#define _CALL_LIST_APPEND_r03 739
-#define _CALL_LIST_APPEND_r13 740
-#define _CALL_LIST_APPEND_r23 741
-#define _CALL_LIST_APPEND_r33 742
-#define _CALL_METHOD_DESCRIPTOR_FAST_r00 743
-#define _CALL_METHOD_DESCRIPTOR_FAST_INLINE_r00 744
-#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00 745
-#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_INLINE_r00 746
-#define _CALL_METHOD_DESCRIPTOR_NOARGS_r03 747
-#define _CALL_METHOD_DESCRIPTOR_NOARGS_INLINE_r03 748
-#define _CALL_METHOD_DESCRIPTOR_O_r03 749
-#define _CALL_METHOD_DESCRIPTOR_O_INLINE_r03 750
-#define _CALL_NON_PY_GENERAL_r01 751
-#define _CALL_STR_1_r32 752
-#define _CALL_TUPLE_1_r32 753
-#define _CALL_TYPE_1_r02 754
-#define _CALL_TYPE_1_r12 755
-#define _CALL_TYPE_1_r22 756
-#define _CALL_TYPE_1_r32 757
-#define _CHECK_ATTR_CLASS_r01 758
-#define _CHECK_ATTR_CLASS_r11 759
-#define _CHECK_ATTR_CLASS_r22 760
-#define _CHECK_ATTR_CLASS_r33 761
-#define _CHECK_ATTR_METHOD_LAZY_DICT_r01 762
-#define _CHECK_ATTR_METHOD_LAZY_DICT_r11 763
-#define _CHECK_ATTR_METHOD_LAZY_DICT_r22 764
-#define _CHECK_ATTR_METHOD_LAZY_DICT_r33 765
-#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00 766
-#define _CHECK_EG_MATCH_r22 767
-#define _CHECK_EXC_MATCH_r22 768
-#define _CHECK_FUNCTION_EXACT_ARGS_r00 769
-#define _CHECK_FUNCTION_VERSION_r00 770
-#define _CHECK_FUNCTION_VERSION_INLINE_r00 771
-#define _CHECK_FUNCTION_VERSION_INLINE_r11 772
-#define _CHECK_FUNCTION_VERSION_INLINE_r22 773
-#define _CHECK_FUNCTION_VERSION_INLINE_r33 774
-#define _CHECK_FUNCTION_VERSION_KW_r11 775
-#define _CHECK_IS_NOT_PY_CALLABLE_r00 776
-#define _CHECK_IS_NOT_PY_CALLABLE_EX_r03 777
-#define _CHECK_IS_NOT_PY_CALLABLE_EX_r13 778
-#define _CHECK_IS_NOT_PY_CALLABLE_EX_r23 779
-#define _CHECK_IS_NOT_PY_CALLABLE_EX_r33 780
-#define _CHECK_IS_NOT_PY_CALLABLE_KW_r11 781
-#define _CHECK_IS_PY_CALLABLE_EX_r03 782
-#define _CHECK_IS_PY_CALLABLE_EX_r13 783
-#define _CHECK_IS_PY_CALLABLE_EX_r23 784
-#define _CHECK_IS_PY_CALLABLE_EX_r33 785
-#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r01 786
-#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r11 787
-#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r22 788
-#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 789
-#define _CHECK_METHOD_VERSION_r00 790
-#define _CHECK_METHOD_VERSION_KW_r11 791
-#define _CHECK_OBJECT_r00 792
-#define _CHECK_PEP_523_r00 793
-#define _CHECK_PEP_523_r11 794
-#define _CHECK_PEP_523_r22 795
-#define _CHECK_PEP_523_r33 796
-#define _CHECK_PERIODIC_r00 797
-#define _CHECK_PERIODIC_AT_END_r00 798
-#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00 799
-#define _CHECK_RECURSION_LIMIT_r00 800
-#define _CHECK_RECURSION_LIMIT_r11 801
-#define _CHECK_RECURSION_LIMIT_r22 802
-#define _CHECK_RECURSION_LIMIT_r33 803
-#define _CHECK_RECURSION_REMAINING_r00 804
-#define _CHECK_RECURSION_REMAINING_r11 805
-#define _CHECK_RECURSION_REMAINING_r22 806
-#define _CHECK_RECURSION_REMAINING_r33 807
-#define _CHECK_STACK_SPACE_r00 808
-#define _CHECK_STACK_SPACE_OPERAND_r00 809
-#define _CHECK_STACK_SPACE_OPERAND_r11 810
-#define _CHECK_STACK_SPACE_OPERAND_r22 811
-#define _CHECK_STACK_SPACE_OPERAND_r33 812
-#define _CHECK_VALIDITY_r00 813
-#define _CHECK_VALIDITY_r11 814
-#define _CHECK_VALIDITY_r22 815
-#define _CHECK_VALIDITY_r33 816
-#define _COLD_DYNAMIC_EXIT_r00 817
-#define _COLD_EXIT_r00 818
-#define _COMPARE_OP_r21 819
-#define _COMPARE_OP_FLOAT_r03 820
-#define _COMPARE_OP_FLOAT_r13 821
-#define _COMPARE_OP_FLOAT_r23 822
-#define _COMPARE_OP_INT_r23 823
-#define _COMPARE_OP_STR_r23 824
-#define _CONTAINS_OP_r23 825
-#define _CONTAINS_OP_DICT_r23 826
-#define _CONTAINS_OP_SET_r23 827
-#define _CONVERT_VALUE_r11 828
-#define _COPY_r01 829
-#define _COPY_1_r02 830
-#define _COPY_1_r12 831
-#define _COPY_1_r23 832
-#define _COPY_2_r03 833
-#define _COPY_2_r13 834
-#define _COPY_2_r23 835
-#define _COPY_3_r03 836
-#define _COPY_3_r13 837
-#define _COPY_3_r23 838
-#define _COPY_3_r33 839
-#define _COPY_FREE_VARS_r00 840
-#define _COPY_FREE_VARS_r11 841
-#define _COPY_FREE_VARS_r22 842
-#define _COPY_FREE_VARS_r33 843
-#define _CREATE_INIT_FRAME_r01 844
-#define _DELETE_ATTR_r10 845
-#define _DELETE_DEREF_r00 846
-#define _DELETE_FAST_r00 847
-#define _DELETE_GLOBAL_r00 848
-#define _DELETE_NAME_r00 849
-#define _DELETE_SUBSCR_r20 850
-#define _DEOPT_r00 851
-#define _DEOPT_r10 852
-#define _DEOPT_r20 853
-#define _DEOPT_r30 854
-#define _DICT_MERGE_r11 855
-#define _DICT_UPDATE_r11 856
-#define _DO_CALL_r01 857
-#define _DO_CALL_FUNCTION_EX_r31 858
-#define _DO_CALL_KW_r11 859
-#define _DYNAMIC_EXIT_r00 860
-#define _DYNAMIC_EXIT_r10 861
-#define _DYNAMIC_EXIT_r20 862
-#define _DYNAMIC_EXIT_r30 863
-#define _END_FOR_r10 864
-#define _END_SEND_r31 865
-#define _ERROR_POP_N_r00 866
-#define _EXIT_INIT_CHECK_r10 867
-#define _EXIT_TRACE_r00 868
-#define _EXIT_TRACE_r10 869
-#define _EXIT_TRACE_r20 870
-#define _EXIT_TRACE_r30 871
-#define _EXPAND_METHOD_r00 872
-#define _EXPAND_METHOD_KW_r11 873
-#define _FATAL_ERROR_r00 874
-#define _FATAL_ERROR_r11 875
-#define _FATAL_ERROR_r22 876
-#define _FATAL_ERROR_r33 877
-#define _FORMAT_SIMPLE_r11 878
-#define _FORMAT_WITH_SPEC_r21 879
-#define _FOR_ITER_r23 880
-#define _FOR_ITER_GEN_FRAME_r03 881
-#define _FOR_ITER_GEN_FRAME_r13 882
-#define _FOR_ITER_GEN_FRAME_r23 883
-#define _FOR_ITER_TIER_TWO_r23 884
-#define _GET_AITER_r11 885
-#define _GET_ANEXT_r12 886
-#define _GET_AWAITABLE_r11 887
-#define _GET_ITER_r12 888
-#define _GET_LEN_r12 889
-#define _GUARD_BINARY_OP_EXTEND_r22 890
-#define _GUARD_BINARY_OP_EXTEND_LHS_r02 891
-#define _GUARD_BINARY_OP_EXTEND_LHS_r12 892
-#define _GUARD_BINARY_OP_EXTEND_LHS_r22 893
-#define _GUARD_BINARY_OP_EXTEND_LHS_r33 894
-#define _GUARD_BINARY_OP_EXTEND_RHS_r02 895
-#define _GUARD_BINARY_OP_EXTEND_RHS_r12 896
-#define _GUARD_BINARY_OP_EXTEND_RHS_r22 897
-#define _GUARD_BINARY_OP_EXTEND_RHS_r33 898
-#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02 899
-#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12 900
-#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22 901
-#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33 902
-#define _GUARD_BIT_IS_SET_POP_r00 903
-#define _GUARD_BIT_IS_SET_POP_r10 904
-#define _GUARD_BIT_IS_SET_POP_r21 905
-#define _GUARD_BIT_IS_SET_POP_r32 906
-#define _GUARD_BIT_IS_SET_POP_4_r00 907
-#define _GUARD_BIT_IS_SET_POP_4_r10 908
-#define _GUARD_BIT_IS_SET_POP_4_r21 909
-#define _GUARD_BIT_IS_SET_POP_4_r32 910
-#define _GUARD_BIT_IS_SET_POP_5_r00 911
-#define _GUARD_BIT_IS_SET_POP_5_r10 912
-#define _GUARD_BIT_IS_SET_POP_5_r21 913
-#define _GUARD_BIT_IS_SET_POP_5_r32 914
-#define _GUARD_BIT_IS_SET_POP_6_r00 915
-#define _GUARD_BIT_IS_SET_POP_6_r10 916
-#define _GUARD_BIT_IS_SET_POP_6_r21 917
-#define _GUARD_BIT_IS_SET_POP_6_r32 918
-#define _GUARD_BIT_IS_SET_POP_7_r00 919
-#define _GUARD_BIT_IS_SET_POP_7_r10 920
-#define _GUARD_BIT_IS_SET_POP_7_r21 921
-#define _GUARD_BIT_IS_SET_POP_7_r32 922
-#define _GUARD_BIT_IS_UNSET_POP_r00 923
-#define _GUARD_BIT_IS_UNSET_POP_r10 924
-#define _GUARD_BIT_IS_UNSET_POP_r21 925
-#define _GUARD_BIT_IS_UNSET_POP_r32 926
-#define _GUARD_BIT_IS_UNSET_POP_4_r00 927
-#define _GUARD_BIT_IS_UNSET_POP_4_r10 928
-#define _GUARD_BIT_IS_UNSET_POP_4_r21 929
-#define _GUARD_BIT_IS_UNSET_POP_4_r32 930
-#define _GUARD_BIT_IS_UNSET_POP_5_r00 931
-#define _GUARD_BIT_IS_UNSET_POP_5_r10 932
-#define _GUARD_BIT_IS_UNSET_POP_5_r21 933
-#define _GUARD_BIT_IS_UNSET_POP_5_r32 934
-#define _GUARD_BIT_IS_UNSET_POP_6_r00 935
-#define _GUARD_BIT_IS_UNSET_POP_6_r10 936
-#define _GUARD_BIT_IS_UNSET_POP_6_r21 937
-#define _GUARD_BIT_IS_UNSET_POP_6_r32 938
-#define _GUARD_BIT_IS_UNSET_POP_7_r00 939
-#define _GUARD_BIT_IS_UNSET_POP_7_r10 940
-#define _GUARD_BIT_IS_UNSET_POP_7_r21 941
-#define _GUARD_BIT_IS_UNSET_POP_7_r32 942
-#define _GUARD_CALLABLE_BUILTIN_CLASS_r00 943
-#define _GUARD_CALLABLE_BUILTIN_FAST_r00 944
-#define _GUARD_CALLABLE_BUILTIN_FAST_WITH_KEYWORDS_r00 945
-#define _GUARD_CALLABLE_BUILTIN_O_r00 946
-#define _GUARD_CALLABLE_ISINSTANCE_r03 947
-#define _GUARD_CALLABLE_ISINSTANCE_r13 948
-#define _GUARD_CALLABLE_ISINSTANCE_r23 949
-#define _GUARD_CALLABLE_ISINSTANCE_r33 950
-#define _GUARD_CALLABLE_LEN_r03 951
-#define _GUARD_CALLABLE_LEN_r13 952
-#define _GUARD_CALLABLE_LEN_r23 953
-#define _GUARD_CALLABLE_LEN_r33 954
-#define _GUARD_CALLABLE_LIST_APPEND_r03 955
-#define _GUARD_CALLABLE_LIST_APPEND_r13 956
-#define _GUARD_CALLABLE_LIST_APPEND_r23 957
-#define _GUARD_CALLABLE_LIST_APPEND_r33 958
-#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_r00 959
-#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00 960
-#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_NOARGS_r00 961
-#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_O_r00 962
-#define _GUARD_CALLABLE_STR_1_r03 963
-#define _GUARD_CALLABLE_STR_1_r13 964
-#define _GUARD_CALLABLE_STR_1_r23 965
-#define _GUARD_CALLABLE_STR_1_r33 966
-#define _GUARD_CALLABLE_TUPLE_1_r03 967
-#define _GUARD_CALLABLE_TUPLE_1_r13 968
-#define _GUARD_CALLABLE_TUPLE_1_r23 969
-#define _GUARD_CALLABLE_TUPLE_1_r33 970
-#define _GUARD_CALLABLE_TYPE_1_r03 971
-#define _GUARD_CALLABLE_TYPE_1_r13 972
-#define _GUARD_CALLABLE_TYPE_1_r23 973
-#define _GUARD_CALLABLE_TYPE_1_r33 974
-#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r00 975
-#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r11 976
-#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r22 977
-#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r33 978
-#define _GUARD_CODE_VERSION_RETURN_VALUE_r00 979
-#define _GUARD_CODE_VERSION_RETURN_VALUE_r11 980
-#define _GUARD_CODE_VERSION_RETURN_VALUE_r22 981
-#define _GUARD_CODE_VERSION_RETURN_VALUE_r33 982
-#define _GUARD_CODE_VERSION_YIELD_VALUE_r00 983
-#define _GUARD_CODE_VERSION_YIELD_VALUE_r11 984
-#define _GUARD_CODE_VERSION_YIELD_VALUE_r22 985
-#define _GUARD_CODE_VERSION_YIELD_VALUE_r33 986
-#define _GUARD_CODE_VERSION__PUSH_FRAME_r00 987
-#define _GUARD_CODE_VERSION__PUSH_FRAME_r11 988
-#define _GUARD_CODE_VERSION__PUSH_FRAME_r22 989
-#define _GUARD_CODE_VERSION__PUSH_FRAME_r33 990
-#define _GUARD_DORV_NO_DICT_r01 991
-#define _GUARD_DORV_NO_DICT_r11 992
-#define _GUARD_DORV_NO_DICT_r22 993
-#define _GUARD_DORV_NO_DICT_r33 994
-#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01 995
-#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 996
-#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 997
-#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 998
-#define _GUARD_GLOBALS_VERSION_r00 999
-#define _GUARD_GLOBALS_VERSION_r11 1000
-#define _GUARD_GLOBALS_VERSION_r22 1001
-#define _GUARD_GLOBALS_VERSION_r33 1002
-#define _GUARD_IP_RETURN_GENERATOR_r00 1003
-#define _GUARD_IP_RETURN_GENERATOR_r11 1004
-#define _GUARD_IP_RETURN_GENERATOR_r22 1005
-#define _GUARD_IP_RETURN_GENERATOR_r33 1006
-#define _GUARD_IP_RETURN_VALUE_r00 1007
-#define _GUARD_IP_RETURN_VALUE_r11 1008
-#define _GUARD_IP_RETURN_VALUE_r22 1009
-#define _GUARD_IP_RETURN_VALUE_r33 1010
-#define _GUARD_IP_YIELD_VALUE_r00 1011
-#define _GUARD_IP_YIELD_VALUE_r11 1012
-#define _GUARD_IP_YIELD_VALUE_r22 1013
-#define _GUARD_IP_YIELD_VALUE_r33 1014
-#define _GUARD_IP__PUSH_FRAME_r00 1015
-#define _GUARD_IP__PUSH_FRAME_r11 1016
-#define _GUARD_IP__PUSH_FRAME_r22 1017
-#define _GUARD_IP__PUSH_FRAME_r33 1018
-#define _GUARD_IS_FALSE_POP_r00 1019
-#define _GUARD_IS_FALSE_POP_r10 1020
-#define _GUARD_IS_FALSE_POP_r21 1021
-#define _GUARD_IS_FALSE_POP_r32 1022
-#define _GUARD_IS_NONE_POP_r00 1023
-#define _GUARD_IS_NONE_POP_r10 1024
-#define _GUARD_IS_NONE_POP_r21 1025
-#define _GUARD_IS_NONE_POP_r32 1026
-#define _GUARD_IS_NOT_NONE_POP_r10 1027
-#define _GUARD_IS_TRUE_POP_r00 1028
-#define _GUARD_IS_TRUE_POP_r10 1029
-#define _GUARD_IS_TRUE_POP_r21 1030
-#define _GUARD_IS_TRUE_POP_r32 1031
-#define _GUARD_KEYS_VERSION_r01 1032
-#define _GUARD_KEYS_VERSION_r11 1033
-#define _GUARD_KEYS_VERSION_r22 1034
-#define _GUARD_KEYS_VERSION_r33 1035
-#define _GUARD_LOAD_SUPER_ATTR_METHOD_r03 1036
-#define _GUARD_LOAD_SUPER_ATTR_METHOD_r13 1037
-#define _GUARD_LOAD_SUPER_ATTR_METHOD_r23 1038
-#define _GUARD_LOAD_SUPER_ATTR_METHOD_r33 1039
-#define _GUARD_NOS_ANY_DICT_r02 1040
-#define _GUARD_NOS_ANY_DICT_r12 1041
-#define _GUARD_NOS_ANY_DICT_r22 1042
-#define _GUARD_NOS_ANY_DICT_r33 1043
-#define _GUARD_NOS_COMPACT_ASCII_r02 1044
-#define _GUARD_NOS_COMPACT_ASCII_r12 1045
-#define _GUARD_NOS_COMPACT_ASCII_r22 1046
-#define _GUARD_NOS_COMPACT_ASCII_r33 1047
-#define _GUARD_NOS_DICT_r02 1048
-#define _GUARD_NOS_DICT_r12 1049
-#define _GUARD_NOS_DICT_r22 1050
-#define _GUARD_NOS_DICT_r33 1051
-#define _GUARD_NOS_FLOAT_r02 1052
-#define _GUARD_NOS_FLOAT_r12 1053
-#define _GUARD_NOS_FLOAT_r22 1054
-#define _GUARD_NOS_FLOAT_r33 1055
-#define _GUARD_NOS_INT_r02 1056
-#define _GUARD_NOS_INT_r12 1057
-#define _GUARD_NOS_INT_r22 1058
-#define _GUARD_NOS_INT_r33 1059
-#define _GUARD_NOS_LIST_r02 1060
-#define _GUARD_NOS_LIST_r12 1061
-#define _GUARD_NOS_LIST_r22 1062
-#define _GUARD_NOS_LIST_r33 1063
-#define _GUARD_NOS_NOT_NULL_r02 1064
-#define _GUARD_NOS_NOT_NULL_r12 1065
-#define _GUARD_NOS_NOT_NULL_r22 1066
-#define _GUARD_NOS_NOT_NULL_r33 1067
-#define _GUARD_NOS_NULL_r02 1068
-#define _GUARD_NOS_NULL_r12 1069
-#define _GUARD_NOS_NULL_r22 1070
-#define _GUARD_NOS_NULL_r33 1071
-#define _GUARD_NOS_OVERFLOWED_r02 1072
-#define _GUARD_NOS_OVERFLOWED_r12 1073
-#define _GUARD_NOS_OVERFLOWED_r22 1074
-#define _GUARD_NOS_OVERFLOWED_r33 1075
-#define _GUARD_NOS_TUPLE_r02 1076
-#define _GUARD_NOS_TUPLE_r12 1077
-#define _GUARD_NOS_TUPLE_r22 1078
-#define _GUARD_NOS_TUPLE_r33 1079
-#define _GUARD_NOS_TYPE_VERSION_r02 1080
-#define _GUARD_NOS_TYPE_VERSION_r12 1081
-#define _GUARD_NOS_TYPE_VERSION_r22 1082
-#define _GUARD_NOS_TYPE_VERSION_r33 1083
-#define _GUARD_NOS_UNICODE_r02 1084
-#define _GUARD_NOS_UNICODE_r12 1085
-#define _GUARD_NOS_UNICODE_r22 1086
-#define _GUARD_NOS_UNICODE_r33 1087
-#define _GUARD_NOT_EXHAUSTED_LIST_r02 1088
-#define _GUARD_NOT_EXHAUSTED_LIST_r12 1089
-#define _GUARD_NOT_EXHAUSTED_LIST_r22 1090
-#define _GUARD_NOT_EXHAUSTED_LIST_r33 1091
-#define _GUARD_NOT_EXHAUSTED_RANGE_r02 1092
-#define _GUARD_NOT_EXHAUSTED_RANGE_r12 1093
-#define _GUARD_NOT_EXHAUSTED_RANGE_r22 1094
-#define _GUARD_NOT_EXHAUSTED_RANGE_r33 1095
-#define _GUARD_NOT_EXHAUSTED_TUPLE_r02 1096
-#define _GUARD_NOT_EXHAUSTED_TUPLE_r12 1097
-#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 1098
-#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 1099
-#define _GUARD_THIRD_NULL_r03 1100
-#define _GUARD_THIRD_NULL_r13 1101
-#define _GUARD_THIRD_NULL_r23 1102
-#define _GUARD_THIRD_NULL_r33 1103
-#define _GUARD_TOS_ANY_DICT_r01 1104
-#define _GUARD_TOS_ANY_DICT_r11 1105
-#define _GUARD_TOS_ANY_DICT_r22 1106
-#define _GUARD_TOS_ANY_DICT_r33 1107
-#define _GUARD_TOS_ANY_SET_r01 1108
-#define _GUARD_TOS_ANY_SET_r11 1109
-#define _GUARD_TOS_ANY_SET_r22 1110
-#define _GUARD_TOS_ANY_SET_r33 1111
-#define _GUARD_TOS_DICT_r01 1112
-#define _GUARD_TOS_DICT_r11 1113
-#define _GUARD_TOS_DICT_r22 1114
-#define _GUARD_TOS_DICT_r33 1115
-#define _GUARD_TOS_FLOAT_r01 1116
-#define _GUARD_TOS_FLOAT_r11 1117
-#define _GUARD_TOS_FLOAT_r22 1118
-#define _GUARD_TOS_FLOAT_r33 1119
-#define _GUARD_TOS_FROZENDICT_r01 1120
-#define _GUARD_TOS_FROZENDICT_r11 1121
-#define _GUARD_TOS_FROZENDICT_r22 1122
-#define _GUARD_TOS_FROZENDICT_r33 1123
-#define _GUARD_TOS_FROZENSET_r01 1124
-#define _GUARD_TOS_FROZENSET_r11 1125
-#define _GUARD_TOS_FROZENSET_r22 1126
-#define _GUARD_TOS_FROZENSET_r33 1127
-#define _GUARD_TOS_INT_r01 1128
-#define _GUARD_TOS_INT_r11 1129
-#define _GUARD_TOS_INT_r22 1130
-#define _GUARD_TOS_INT_r33 1131
-#define _GUARD_TOS_LIST_r01 1132
-#define _GUARD_TOS_LIST_r11 1133
-#define _GUARD_TOS_LIST_r22 1134
-#define _GUARD_TOS_LIST_r33 1135
-#define _GUARD_TOS_OVERFLOWED_r01 1136
-#define _GUARD_TOS_OVERFLOWED_r11 1137
-#define _GUARD_TOS_OVERFLOWED_r22 1138
-#define _GUARD_TOS_OVERFLOWED_r33 1139
-#define _GUARD_TOS_SET_r01 1140
-#define _GUARD_TOS_SET_r11 1141
-#define _GUARD_TOS_SET_r22 1142
-#define _GUARD_TOS_SET_r33 1143
-#define _GUARD_TOS_SLICE_r01 1144
-#define _GUARD_TOS_SLICE_r11 1145
-#define _GUARD_TOS_SLICE_r22 1146
-#define _GUARD_TOS_SLICE_r33 1147
-#define _GUARD_TOS_TUPLE_r01 1148
-#define _GUARD_TOS_TUPLE_r11 1149
-#define _GUARD_TOS_TUPLE_r22 1150
-#define _GUARD_TOS_TUPLE_r33 1151
-#define _GUARD_TOS_UNICODE_r01 1152
-#define _GUARD_TOS_UNICODE_r11 1153
-#define _GUARD_TOS_UNICODE_r22 1154
-#define _GUARD_TOS_UNICODE_r33 1155
-#define _GUARD_TYPE_VERSION_r01 1156
-#define _GUARD_TYPE_VERSION_r11 1157
-#define _GUARD_TYPE_VERSION_r22 1158
-#define _GUARD_TYPE_VERSION_r33 1159
-#define _GUARD_TYPE_VERSION_LOCKED_r01 1160
-#define _GUARD_TYPE_VERSION_LOCKED_r11 1161
-#define _GUARD_TYPE_VERSION_LOCKED_r22 1162
-#define _GUARD_TYPE_VERSION_LOCKED_r33 1163
-#define _HANDLE_PENDING_AND_DEOPT_r00 1164
-#define _HANDLE_PENDING_AND_DEOPT_r10 1165
-#define _HANDLE_PENDING_AND_DEOPT_r20 1166
-#define _HANDLE_PENDING_AND_DEOPT_r30 1167
-#define _IMPORT_FROM_r12 1168
-#define _IMPORT_NAME_r21 1169
-#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 1170
-#define _INIT_CALL_PY_EXACT_ARGS_r01 1171
-#define _INIT_CALL_PY_EXACT_ARGS_0_r01 1172
-#define _INIT_CALL_PY_EXACT_ARGS_1_r01 1173
-#define _INIT_CALL_PY_EXACT_ARGS_2_r01 1174
-#define _INIT_CALL_PY_EXACT_ARGS_3_r01 1175
-#define _INIT_CALL_PY_EXACT_ARGS_4_r01 1176
-#define _INSERT_NULL_r10 1177
-#define _INSTRUMENTED_FOR_ITER_r23 1178
-#define _INSTRUMENTED_INSTRUCTION_r00 1179
-#define _INSTRUMENTED_JUMP_FORWARD_r00 1180
-#define _INSTRUMENTED_JUMP_FORWARD_r11 1181
-#define _INSTRUMENTED_JUMP_FORWARD_r22 1182
-#define _INSTRUMENTED_JUMP_FORWARD_r33 1183
-#define _INSTRUMENTED_LINE_r00 1184
-#define _INSTRUMENTED_NOT_TAKEN_r00 1185
-#define _INSTRUMENTED_NOT_TAKEN_r11 1186
-#define _INSTRUMENTED_NOT_TAKEN_r22 1187
-#define _INSTRUMENTED_NOT_TAKEN_r33 1188
-#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r00 1189
-#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 1190
-#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 1191
-#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 1192
-#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 1193
-#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 1194
-#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r00 1195
-#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 1196
-#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 1197
-#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 1198
-#define _IS_NONE_r11 1199
-#define _IS_OP_r03 1200
-#define _IS_OP_r13 1201
-#define _IS_OP_r23 1202
-#define _ITER_CHECK_LIST_r02 1203
-#define _ITER_CHECK_LIST_r12 1204
-#define _ITER_CHECK_LIST_r22 1205
-#define _ITER_CHECK_LIST_r33 1206
-#define _ITER_CHECK_RANGE_r02 1207
-#define _ITER_CHECK_RANGE_r12 1208
-#define _ITER_CHECK_RANGE_r22 1209
-#define _ITER_CHECK_RANGE_r33 1210
-#define _ITER_CHECK_TUPLE_r02 1211
-#define _ITER_CHECK_TUPLE_r12 1212
-#define _ITER_CHECK_TUPLE_r22 1213
-#define _ITER_CHECK_TUPLE_r33 1214
-#define _ITER_JUMP_LIST_r02 1215
-#define _ITER_JUMP_LIST_r12 1216
-#define _ITER_JUMP_LIST_r22 1217
-#define _ITER_JUMP_LIST_r33 1218
-#define _ITER_JUMP_RANGE_r02 1219
-#define _ITER_JUMP_RANGE_r12 1220
-#define _ITER_JUMP_RANGE_r22 1221
-#define _ITER_JUMP_RANGE_r33 1222
-#define _ITER_JUMP_TUPLE_r02 1223
-#define _ITER_JUMP_TUPLE_r12 1224
-#define _ITER_JUMP_TUPLE_r22 1225
-#define _ITER_JUMP_TUPLE_r33 1226
-#define _ITER_NEXT_LIST_r23 1227
-#define _ITER_NEXT_LIST_TIER_TWO_r23 1228
-#define _ITER_NEXT_RANGE_r03 1229
-#define _ITER_NEXT_RANGE_r13 1230
-#define _ITER_NEXT_RANGE_r23 1231
-#define _ITER_NEXT_TUPLE_r03 1232
-#define _ITER_NEXT_TUPLE_r13 1233
-#define _ITER_NEXT_TUPLE_r23 1234
-#define _JUMP_BACKWARD_NO_INTERRUPT_r00 1235
-#define _JUMP_BACKWARD_NO_INTERRUPT_r11 1236
-#define _JUMP_BACKWARD_NO_INTERRUPT_r22 1237
-#define _JUMP_BACKWARD_NO_INTERRUPT_r33 1238
-#define _JUMP_TO_TOP_r00 1239
-#define _LIST_APPEND_r10 1240
-#define _LIST_EXTEND_r11 1241
-#define _LOAD_ATTR_r10 1242
-#define _LOAD_ATTR_CLASS_r11 1243
-#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_FRAME_r11 1244
-#define _LOAD_ATTR_INSTANCE_VALUE_r02 1245
-#define _LOAD_ATTR_INSTANCE_VALUE_r12 1246
-#define _LOAD_ATTR_INSTANCE_VALUE_r23 1247
-#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 1248
-#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 1249
-#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 1250
-#define _LOAD_ATTR_METHOD_NO_DICT_r02 1251
-#define _LOAD_ATTR_METHOD_NO_DICT_r12 1252
-#define _LOAD_ATTR_METHOD_NO_DICT_r23 1253
-#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 1254
-#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 1255
-#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 1256
-#define _LOAD_ATTR_MODULE_r12 1257
-#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1258
-#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1259
-#define _LOAD_ATTR_PROPERTY_FRAME_r01 1260
-#define _LOAD_ATTR_PROPERTY_FRAME_r11 1261
-#define _LOAD_ATTR_PROPERTY_FRAME_r22 1262
-#define _LOAD_ATTR_PROPERTY_FRAME_r33 1263
-#define _LOAD_ATTR_SLOT_r02 1264
-#define _LOAD_ATTR_SLOT_r12 1265
-#define _LOAD_ATTR_SLOT_r23 1266
-#define _LOAD_ATTR_WITH_HINT_r12 1267
-#define _LOAD_BUILD_CLASS_r01 1268
-#define _LOAD_BYTECODE_r00 1269
-#define _LOAD_COMMON_CONSTANT_r01 1270
-#define _LOAD_COMMON_CONSTANT_r12 1271
-#define _LOAD_COMMON_CONSTANT_r23 1272
-#define _LOAD_CONST_r01 1273
-#define _LOAD_CONST_r12 1274
-#define _LOAD_CONST_r23 1275
-#define _LOAD_CONST_INLINE_r01 1276
-#define _LOAD_CONST_INLINE_r12 1277
-#define _LOAD_CONST_INLINE_r23 1278
-#define _LOAD_CONST_INLINE_BORROW_r01 1279
-#define _LOAD_CONST_INLINE_BORROW_r12 1280
-#define _LOAD_CONST_INLINE_BORROW_r23 1281
-#define _LOAD_DEREF_r01 1282
-#define _LOAD_FAST_r01 1283
-#define _LOAD_FAST_r12 1284
-#define _LOAD_FAST_r23 1285
-#define _LOAD_FAST_0_r01 1286
-#define _LOAD_FAST_0_r12 1287
-#define _LOAD_FAST_0_r23 1288
-#define _LOAD_FAST_1_r01 1289
-#define _LOAD_FAST_1_r12 1290
-#define _LOAD_FAST_1_r23 1291
-#define _LOAD_FAST_2_r01 1292
-#define _LOAD_FAST_2_r12 1293
-#define _LOAD_FAST_2_r23 1294
-#define _LOAD_FAST_3_r01 1295
-#define _LOAD_FAST_3_r12 1296
-#define _LOAD_FAST_3_r23 1297
-#define _LOAD_FAST_4_r01 1298
-#define _LOAD_FAST_4_r12 1299
-#define _LOAD_FAST_4_r23 1300
-#define _LOAD_FAST_5_r01 1301
-#define _LOAD_FAST_5_r12 1302
-#define _LOAD_FAST_5_r23 1303
-#define _LOAD_FAST_6_r01 1304
-#define _LOAD_FAST_6_r12 1305
-#define _LOAD_FAST_6_r23 1306
-#define _LOAD_FAST_7_r01 1307
-#define _LOAD_FAST_7_r12 1308
-#define _LOAD_FAST_7_r23 1309
-#define _LOAD_FAST_AND_CLEAR_r01 1310
-#define _LOAD_FAST_AND_CLEAR_r12 1311
-#define _LOAD_FAST_AND_CLEAR_r23 1312
-#define _LOAD_FAST_BORROW_r01 1313
-#define _LOAD_FAST_BORROW_r12 1314
-#define _LOAD_FAST_BORROW_r23 1315
-#define _LOAD_FAST_BORROW_0_r01 1316
-#define _LOAD_FAST_BORROW_0_r12 1317
-#define _LOAD_FAST_BORROW_0_r23 1318
-#define _LOAD_FAST_BORROW_1_r01 1319
-#define _LOAD_FAST_BORROW_1_r12 1320
-#define _LOAD_FAST_BORROW_1_r23 1321
-#define _LOAD_FAST_BORROW_2_r01 1322
-#define _LOAD_FAST_BORROW_2_r12 1323
-#define _LOAD_FAST_BORROW_2_r23 1324
-#define _LOAD_FAST_BORROW_3_r01 1325
-#define _LOAD_FAST_BORROW_3_r12 1326
-#define _LOAD_FAST_BORROW_3_r23 1327
-#define _LOAD_FAST_BORROW_4_r01 1328
-#define _LOAD_FAST_BORROW_4_r12 1329
-#define _LOAD_FAST_BORROW_4_r23 1330
-#define _LOAD_FAST_BORROW_5_r01 1331
-#define _LOAD_FAST_BORROW_5_r12 1332
-#define _LOAD_FAST_BORROW_5_r23 1333
-#define _LOAD_FAST_BORROW_6_r01 1334
-#define _LOAD_FAST_BORROW_6_r12 1335
-#define _LOAD_FAST_BORROW_6_r23 1336
-#define _LOAD_FAST_BORROW_7_r01 1337
-#define _LOAD_FAST_BORROW_7_r12 1338
-#define _LOAD_FAST_BORROW_7_r23 1339
-#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1340
-#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1341
-#define _LOAD_FAST_CHECK_r01 1342
-#define _LOAD_FAST_CHECK_r12 1343
-#define _LOAD_FAST_CHECK_r23 1344
-#define _LOAD_FAST_LOAD_FAST_r02 1345
-#define _LOAD_FAST_LOAD_FAST_r13 1346
-#define _LOAD_FROM_DICT_OR_DEREF_r11 1347
-#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1348
-#define _LOAD_GLOBAL_r00 1349
-#define _LOAD_GLOBAL_BUILTINS_r01 1350
-#define _LOAD_GLOBAL_MODULE_r01 1351
-#define _LOAD_LOCALS_r01 1352
-#define _LOAD_LOCALS_r12 1353
-#define _LOAD_LOCALS_r23 1354
-#define _LOAD_NAME_r01 1355
-#define _LOAD_SMALL_INT_r01 1356
-#define _LOAD_SMALL_INT_r12 1357
-#define _LOAD_SMALL_INT_r23 1358
-#define _LOAD_SMALL_INT_0_r01 1359
-#define _LOAD_SMALL_INT_0_r12 1360
-#define _LOAD_SMALL_INT_0_r23 1361
-#define _LOAD_SMALL_INT_1_r01 1362
-#define _LOAD_SMALL_INT_1_r12 1363
-#define _LOAD_SMALL_INT_1_r23 1364
-#define _LOAD_SMALL_INT_2_r01 1365
-#define _LOAD_SMALL_INT_2_r12 1366
-#define _LOAD_SMALL_INT_2_r23 1367
-#define _LOAD_SMALL_INT_3_r01 1368
-#define _LOAD_SMALL_INT_3_r12 1369
-#define _LOAD_SMALL_INT_3_r23 1370
-#define _LOAD_SPECIAL_r00 1371
-#define _LOAD_SUPER_ATTR_ATTR_r31 1372
-#define _LOAD_SUPER_ATTR_METHOD_r32 1373
-#define _LOCK_OBJECT_r01 1374
-#define _LOCK_OBJECT_r11 1375
-#define _LOCK_OBJECT_r22 1376
-#define _LOCK_OBJECT_r33 1377
-#define _MAKE_CALLARGS_A_TUPLE_r33 1378
-#define _MAKE_CELL_r00 1379
-#define _MAKE_FUNCTION_r12 1380
-#define _MAKE_HEAP_SAFE_r01 1381
-#define _MAKE_HEAP_SAFE_r11 1382
-#define _MAKE_HEAP_SAFE_r22 1383
-#define _MAKE_HEAP_SAFE_r33 1384
-#define _MAKE_WARM_r00 1385
-#define _MAKE_WARM_r11 1386
-#define _MAKE_WARM_r22 1387
-#define _MAKE_WARM_r33 1388
-#define _MAP_ADD_r20 1389
-#define _MATCH_CLASS_r33 1390
-#define _MATCH_KEYS_r23 1391
-#define _MATCH_MAPPING_r02 1392
-#define _MATCH_MAPPING_r12 1393
-#define _MATCH_MAPPING_r23 1394
-#define _MATCH_SEQUENCE_r02 1395
-#define _MATCH_SEQUENCE_r12 1396
-#define _MATCH_SEQUENCE_r23 1397
-#define _MAYBE_EXPAND_METHOD_r00 1398
-#define _MAYBE_EXPAND_METHOD_KW_r11 1399
-#define _MONITOR_CALL_r00 1400
-#define _MONITOR_CALL_KW_r11 1401
-#define _MONITOR_JUMP_BACKWARD_r00 1402
-#define _MONITOR_JUMP_BACKWARD_r11 1403
-#define _MONITOR_JUMP_BACKWARD_r22 1404
-#define _MONITOR_JUMP_BACKWARD_r33 1405
-#define _MONITOR_RESUME_r00 1406
-#define _NOP_r00 1407
-#define _NOP_r11 1408
-#define _NOP_r22 1409
-#define _NOP_r33 1410
-#define _POP_EXCEPT_r10 1411
-#define _POP_ITER_r20 1412
-#define _POP_JUMP_IF_FALSE_r00 1413
-#define _POP_JUMP_IF_FALSE_r10 1414
-#define _POP_JUMP_IF_FALSE_r21 1415
-#define _POP_JUMP_IF_FALSE_r32 1416
-#define _POP_JUMP_IF_TRUE_r00 1417
-#define _POP_JUMP_IF_TRUE_r10 1418
-#define _POP_JUMP_IF_TRUE_r21 1419
-#define _POP_JUMP_IF_TRUE_r32 1420
-#define _POP_TOP_r10 1421
-#define _POP_TOP_FLOAT_r00 1422
-#define _POP_TOP_FLOAT_r10 1423
-#define _POP_TOP_FLOAT_r21 1424
-#define _POP_TOP_FLOAT_r32 1425
-#define _POP_TOP_INT_r00 1426
-#define _POP_TOP_INT_r10 1427
-#define _POP_TOP_INT_r21 1428
-#define _POP_TOP_INT_r32 1429
-#define _POP_TOP_NOP_r00 1430
-#define _POP_TOP_NOP_r10 1431
-#define _POP_TOP_NOP_r21 1432
-#define _POP_TOP_NOP_r32 1433
-#define _POP_TOP_OPARG_r00 1434
-#define _POP_TOP_UNICODE_r00 1435
-#define _POP_TOP_UNICODE_r10 1436
-#define _POP_TOP_UNICODE_r21 1437
-#define _POP_TOP_UNICODE_r32 1438
-#define _PUSH_EXC_INFO_r02 1439
-#define _PUSH_EXC_INFO_r12 1440
-#define _PUSH_EXC_INFO_r23 1441
-#define _PUSH_FRAME_r10 1442
-#define _PUSH_NULL_r01 1443
-#define _PUSH_NULL_r12 1444
-#define _PUSH_NULL_r23 1445
-#define _PUSH_NULL_CONDITIONAL_r00 1446
-#define _PY_FRAME_EX_r31 1447
-#define _PY_FRAME_GENERAL_r01 1448
-#define _PY_FRAME_KW_r11 1449
-#define _REPLACE_WITH_TRUE_r02 1450
-#define _REPLACE_WITH_TRUE_r12 1451
-#define _REPLACE_WITH_TRUE_r23 1452
-#define _RESUME_CHECK_r00 1453
-#define _RESUME_CHECK_r11 1454
-#define _RESUME_CHECK_r22 1455
-#define _RESUME_CHECK_r33 1456
-#define _RETURN_GENERATOR_r01 1457
-#define _RETURN_VALUE_r11 1458
-#define _SAVE_RETURN_OFFSET_r00 1459
-#define _SAVE_RETURN_OFFSET_r11 1460
-#define _SAVE_RETURN_OFFSET_r22 1461
-#define _SAVE_RETURN_OFFSET_r33 1462
-#define _SEND_r33 1463
-#define _SEND_GEN_FRAME_r33 1464
-#define _SETUP_ANNOTATIONS_r00 1465
-#define _SET_ADD_r10 1466
-#define _SET_FUNCTION_ATTRIBUTE_r01 1467
-#define _SET_FUNCTION_ATTRIBUTE_r11 1468
-#define _SET_FUNCTION_ATTRIBUTE_r21 1469
-#define _SET_FUNCTION_ATTRIBUTE_r32 1470
-#define _SET_IP_r00 1471
-#define _SET_IP_r11 1472
-#define _SET_IP_r22 1473
-#define _SET_IP_r33 1474
-#define _SET_UPDATE_r11 1475
-#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r03 1476
-#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r13 1477
-#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r23 1478
-#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r33 1479
-#define _SPILL_OR_RELOAD_r01 1480
-#define _SPILL_OR_RELOAD_r02 1481
-#define _SPILL_OR_RELOAD_r03 1482
-#define _SPILL_OR_RELOAD_r10 1483
-#define _SPILL_OR_RELOAD_r12 1484
-#define _SPILL_OR_RELOAD_r13 1485
-#define _SPILL_OR_RELOAD_r20 1486
-#define _SPILL_OR_RELOAD_r21 1487
-#define _SPILL_OR_RELOAD_r23 1488
-#define _SPILL_OR_RELOAD_r30 1489
-#define _SPILL_OR_RELOAD_r31 1490
-#define _SPILL_OR_RELOAD_r32 1491
-#define _START_EXECUTOR_r00 1492
-#define _STORE_ATTR_r20 1493
-#define _STORE_ATTR_INSTANCE_VALUE_r21 1494
-#define _STORE_ATTR_SLOT_r21 1495
-#define _STORE_ATTR_WITH_HINT_r21 1496
-#define _STORE_DEREF_r10 1497
-#define _STORE_FAST_LOAD_FAST_r11 1498
-#define _STORE_FAST_STORE_FAST_r20 1499
-#define _STORE_GLOBAL_r10 1500
-#define _STORE_NAME_r10 1501
-#define _STORE_SLICE_r30 1502
-#define _STORE_SUBSCR_r30 1503
-#define _STORE_SUBSCR_DICT_r31 1504
-#define _STORE_SUBSCR_DICT_KNOWN_HASH_r31 1505
-#define _STORE_SUBSCR_LIST_INT_r32 1506
-#define _SWAP_r11 1507
-#define _SWAP_2_r02 1508
-#define _SWAP_2_r12 1509
-#define _SWAP_2_r22 1510
-#define _SWAP_2_r33 1511
-#define _SWAP_3_r03 1512
-#define _SWAP_3_r13 1513
-#define _SWAP_3_r23 1514
-#define _SWAP_3_r33 1515
-#define _SWAP_FAST_r01 1516
-#define _SWAP_FAST_r11 1517
-#define _SWAP_FAST_r22 1518
-#define _SWAP_FAST_r33 1519
-#define _SWAP_FAST_0_r01 1520
-#define _SWAP_FAST_0_r11 1521
-#define _SWAP_FAST_0_r22 1522
-#define _SWAP_FAST_0_r33 1523
-#define _SWAP_FAST_1_r01 1524
-#define _SWAP_FAST_1_r11 1525
-#define _SWAP_FAST_1_r22 1526
-#define _SWAP_FAST_1_r33 1527
-#define _SWAP_FAST_2_r01 1528
-#define _SWAP_FAST_2_r11 1529
-#define _SWAP_FAST_2_r22 1530
-#define _SWAP_FAST_2_r33 1531
-#define _SWAP_FAST_3_r01 1532
-#define _SWAP_FAST_3_r11 1533
-#define _SWAP_FAST_3_r22 1534
-#define _SWAP_FAST_3_r33 1535
-#define _SWAP_FAST_4_r01 1536
-#define _SWAP_FAST_4_r11 1537
-#define _SWAP_FAST_4_r22 1538
-#define _SWAP_FAST_4_r33 1539
-#define _SWAP_FAST_5_r01 1540
-#define _SWAP_FAST_5_r11 1541
-#define _SWAP_FAST_5_r22 1542
-#define _SWAP_FAST_5_r33 1543
-#define _SWAP_FAST_6_r01 1544
-#define _SWAP_FAST_6_r11 1545
-#define _SWAP_FAST_6_r22 1546
-#define _SWAP_FAST_6_r33 1547
-#define _SWAP_FAST_7_r01 1548
-#define _SWAP_FAST_7_r11 1549
-#define _SWAP_FAST_7_r22 1550
-#define _SWAP_FAST_7_r33 1551
-#define _TIER2_RESUME_CHECK_r00 1552
-#define _TIER2_RESUME_CHECK_r11 1553
-#define _TIER2_RESUME_CHECK_r22 1554
-#define _TIER2_RESUME_CHECK_r33 1555
-#define _TO_BOOL_r11 1556
-#define _TO_BOOL_BOOL_r01 1557
-#define _TO_BOOL_BOOL_r11 1558
-#define _TO_BOOL_BOOL_r22 1559
-#define _TO_BOOL_BOOL_r33 1560
-#define _TO_BOOL_INT_r02 1561
-#define _TO_BOOL_INT_r12 1562
-#define _TO_BOOL_INT_r23 1563
-#define _TO_BOOL_LIST_r02 1564
-#define _TO_BOOL_LIST_r12 1565
-#define _TO_BOOL_LIST_r23 1566
-#define _TO_BOOL_NONE_r01 1567
-#define _TO_BOOL_NONE_r11 1568
-#define _TO_BOOL_NONE_r22 1569
-#define _TO_BOOL_NONE_r33 1570
-#define _TO_BOOL_STR_r02 1571
-#define _TO_BOOL_STR_r12 1572
-#define _TO_BOOL_STR_r23 1573
-#define _TRACE_RECORD_r00 1574
-#define _UNARY_INVERT_r12 1575
-#define _UNARY_NEGATIVE_r12 1576
-#define _UNARY_NEGATIVE_FLOAT_INPLACE_r02 1577
-#define _UNARY_NEGATIVE_FLOAT_INPLACE_r12 1578
-#define _UNARY_NEGATIVE_FLOAT_INPLACE_r23 1579
-#define _UNARY_NOT_r01 1580
-#define _UNARY_NOT_r11 1581
-#define _UNARY_NOT_r22 1582
-#define _UNARY_NOT_r33 1583
-#define _UNPACK_EX_r10 1584
-#define _UNPACK_SEQUENCE_r10 1585
-#define _UNPACK_SEQUENCE_LIST_r10 1586
-#define _UNPACK_SEQUENCE_TUPLE_r10 1587
-#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1588
-#define _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE_r03 1589
-#define _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE_r13 1590
-#define _UNPACK_SEQUENCE_UNIQUE_TUPLE_r10 1591
-#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r02 1592
-#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r12 1593
-#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r23 1594
-#define _WITH_EXCEPT_START_r33 1595
-#define _YIELD_VALUE_r11 1596
-#define MAX_UOP_REGS_ID 1596
+#define _YIELD_VALUE 646
+#define MAX_UOP_ID 646
+#define _ALLOCATE_OBJECT_r00 647
+#define _BINARY_OP_r23 648
+#define _BINARY_OP_ADD_FLOAT_r03 649
+#define _BINARY_OP_ADD_FLOAT_r13 650
+#define _BINARY_OP_ADD_FLOAT_r23 651
+#define _BINARY_OP_ADD_FLOAT_INPLACE_r03 652
+#define _BINARY_OP_ADD_FLOAT_INPLACE_r13 653
+#define _BINARY_OP_ADD_FLOAT_INPLACE_r23 654
+#define _BINARY_OP_ADD_FLOAT_INPLACE_RIGHT_r03 655
+#define _BINARY_OP_ADD_FLOAT_INPLACE_RIGHT_r13 656
+#define _BINARY_OP_ADD_FLOAT_INPLACE_RIGHT_r23 657
+#define _BINARY_OP_ADD_INT_r03 658
+#define _BINARY_OP_ADD_INT_r13 659
+#define _BINARY_OP_ADD_INT_r23 660
+#define _BINARY_OP_ADD_INT_INPLACE_r03 661
+#define _BINARY_OP_ADD_INT_INPLACE_r13 662
+#define _BINARY_OP_ADD_INT_INPLACE_r23 663
+#define _BINARY_OP_ADD_INT_INPLACE_RIGHT_r03 664
+#define _BINARY_OP_ADD_INT_INPLACE_RIGHT_r13 665
+#define _BINARY_OP_ADD_INT_INPLACE_RIGHT_r23 666
+#define _BINARY_OP_ADD_UNICODE_r03 667
+#define _BINARY_OP_ADD_UNICODE_r13 668
+#define _BINARY_OP_ADD_UNICODE_r23 669
+#define _BINARY_OP_EXTEND_r23 670
+#define _BINARY_OP_INPLACE_ADD_UNICODE_r21 671
+#define _BINARY_OP_MULTIPLY_FLOAT_r03 672
+#define _BINARY_OP_MULTIPLY_FLOAT_r13 673
+#define _BINARY_OP_MULTIPLY_FLOAT_r23 674
+#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_r03 675
+#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_r13 676
+#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_r23 677
+#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_RIGHT_r03 678
+#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_RIGHT_r13 679
+#define _BINARY_OP_MULTIPLY_FLOAT_INPLACE_RIGHT_r23 680
+#define _BINARY_OP_MULTIPLY_INT_r03 681
+#define _BINARY_OP_MULTIPLY_INT_r13 682
+#define _BINARY_OP_MULTIPLY_INT_r23 683
+#define _BINARY_OP_MULTIPLY_INT_INPLACE_r03 684
+#define _BINARY_OP_MULTIPLY_INT_INPLACE_r13 685
+#define _BINARY_OP_MULTIPLY_INT_INPLACE_r23 686
+#define _BINARY_OP_MULTIPLY_INT_INPLACE_RIGHT_r03 687
+#define _BINARY_OP_MULTIPLY_INT_INPLACE_RIGHT_r13 688
+#define _BINARY_OP_MULTIPLY_INT_INPLACE_RIGHT_r23 689
+#define _BINARY_OP_SUBSCR_CHECK_FUNC_r23 690
+#define _BINARY_OP_SUBSCR_DICT_r23 691
+#define _BINARY_OP_SUBSCR_DICT_KNOWN_HASH_r23 692
+#define _BINARY_OP_SUBSCR_INIT_CALL_r01 693
+#define _BINARY_OP_SUBSCR_INIT_CALL_r11 694
+#define _BINARY_OP_SUBSCR_INIT_CALL_r21 695
+#define _BINARY_OP_SUBSCR_INIT_CALL_r31 696
+#define _BINARY_OP_SUBSCR_LIST_INT_r23 697
+#define _BINARY_OP_SUBSCR_LIST_SLICE_r23 698
+#define _BINARY_OP_SUBSCR_STR_INT_r23 699
+#define _BINARY_OP_SUBSCR_TUPLE_INT_r03 700
+#define _BINARY_OP_SUBSCR_TUPLE_INT_r13 701
+#define _BINARY_OP_SUBSCR_TUPLE_INT_r23 702
+#define _BINARY_OP_SUBSCR_USTR_INT_r23 703
+#define _BINARY_OP_SUBTRACT_FLOAT_r03 704
+#define _BINARY_OP_SUBTRACT_FLOAT_r13 705
+#define _BINARY_OP_SUBTRACT_FLOAT_r23 706
+#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_r03 707
+#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_r13 708
+#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_r23 709
+#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_RIGHT_r03 710
+#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_RIGHT_r13 711
+#define _BINARY_OP_SUBTRACT_FLOAT_INPLACE_RIGHT_r23 712
+#define _BINARY_OP_SUBTRACT_INT_r03 713
+#define _BINARY_OP_SUBTRACT_INT_r13 714
+#define _BINARY_OP_SUBTRACT_INT_r23 715
+#define _BINARY_OP_SUBTRACT_INT_INPLACE_r03 716
+#define _BINARY_OP_SUBTRACT_INT_INPLACE_r13 717
+#define _BINARY_OP_SUBTRACT_INT_INPLACE_r23 718
+#define _BINARY_OP_SUBTRACT_INT_INPLACE_RIGHT_r03 719
+#define _BINARY_OP_SUBTRACT_INT_INPLACE_RIGHT_r13 720
+#define _BINARY_OP_SUBTRACT_INT_INPLACE_RIGHT_r23 721
+#define _BINARY_OP_TRUEDIV_FLOAT_r23 722
+#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_r03 723
+#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_r13 724
+#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_r23 725
+#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_RIGHT_r03 726
+#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_RIGHT_r13 727
+#define _BINARY_OP_TRUEDIV_FLOAT_INPLACE_RIGHT_r23 728
+#define _BINARY_SLICE_r31 729
+#define _BUILD_INTERPOLATION_r01 730
+#define _BUILD_LIST_r01 731
+#define _BUILD_MAP_r01 732
+#define _BUILD_SET_r01 733
+#define _BUILD_SLICE_r01 734
+#define _BUILD_STRING_r01 735
+#define _BUILD_TEMPLATE_r21 736
+#define _BUILD_TUPLE_r01 737
+#define _CALL_BUILTIN_CLASS_r00 738
+#define _CALL_BUILTIN_FAST_r00 739
+#define _CALL_BUILTIN_FAST_WITH_KEYWORDS_r00 740
+#define _CALL_BUILTIN_O_r03 741
+#define _CALL_FUNCTION_EX_NON_PY_GENERAL_r31 742
+#define _CALL_INTRINSIC_1_r12 743
+#define _CALL_INTRINSIC_2_r23 744
+#define _CALL_ISINSTANCE_r31 745
+#define _CALL_KW_NON_PY_r11 746
+#define _CALL_LEN_r33 747
+#define _CALL_LIST_APPEND_r03 748
+#define _CALL_LIST_APPEND_r13 749
+#define _CALL_LIST_APPEND_r23 750
+#define _CALL_LIST_APPEND_r33 751
+#define _CALL_METHOD_DESCRIPTOR_FAST_r00 752
+#define _CALL_METHOD_DESCRIPTOR_FAST_INLINE_r00 753
+#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00 754
+#define _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_INLINE_r00 755
+#define _CALL_METHOD_DESCRIPTOR_NOARGS_r03 756
+#define _CALL_METHOD_DESCRIPTOR_NOARGS_INLINE_r03 757
+#define _CALL_METHOD_DESCRIPTOR_O_r03 758
+#define _CALL_METHOD_DESCRIPTOR_O_INLINE_r03 759
+#define _CALL_NON_PY_GENERAL_r01 760
+#define _CALL_STR_1_r32 761
+#define _CALL_TUPLE_1_r32 762
+#define _CALL_TYPE_1_r02 763
+#define _CALL_TYPE_1_r12 764
+#define _CALL_TYPE_1_r22 765
+#define _CALL_TYPE_1_r32 766
+#define _CHECK_ATTR_CLASS_r01 767
+#define _CHECK_ATTR_CLASS_r11 768
+#define _CHECK_ATTR_CLASS_r22 769
+#define _CHECK_ATTR_CLASS_r33 770
+#define _CHECK_ATTR_METHOD_LAZY_DICT_r01 771
+#define _CHECK_ATTR_METHOD_LAZY_DICT_r11 772
+#define _CHECK_ATTR_METHOD_LAZY_DICT_r22 773
+#define _CHECK_ATTR_METHOD_LAZY_DICT_r33 774
+#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS_r00 775
+#define _CHECK_EG_MATCH_r22 776
+#define _CHECK_EXC_MATCH_r22 777
+#define _CHECK_FUNCTION_EXACT_ARGS_r00 778
+#define _CHECK_FUNCTION_VERSION_r00 779
+#define _CHECK_FUNCTION_VERSION_INLINE_r00 780
+#define _CHECK_FUNCTION_VERSION_INLINE_r11 781
+#define _CHECK_FUNCTION_VERSION_INLINE_r22 782
+#define _CHECK_FUNCTION_VERSION_INLINE_r33 783
+#define _CHECK_FUNCTION_VERSION_KW_r11 784
+#define _CHECK_IS_NOT_PY_CALLABLE_r00 785
+#define _CHECK_IS_NOT_PY_CALLABLE_EX_r03 786
+#define _CHECK_IS_NOT_PY_CALLABLE_EX_r13 787
+#define _CHECK_IS_NOT_PY_CALLABLE_EX_r23 788
+#define _CHECK_IS_NOT_PY_CALLABLE_EX_r33 789
+#define _CHECK_IS_NOT_PY_CALLABLE_KW_r11 790
+#define _CHECK_IS_PY_CALLABLE_EX_r03 791
+#define _CHECK_IS_PY_CALLABLE_EX_r13 792
+#define _CHECK_IS_PY_CALLABLE_EX_r23 793
+#define _CHECK_IS_PY_CALLABLE_EX_r33 794
+#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r01 795
+#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r11 796
+#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r22 797
+#define _CHECK_MANAGED_OBJECT_HAS_VALUES_r33 798
+#define _CHECK_METHOD_VERSION_r00 799
+#define _CHECK_METHOD_VERSION_KW_r11 800
+#define _CHECK_OBJECT_r00 801
+#define _CHECK_PEP_523_r00 802
+#define _CHECK_PEP_523_r11 803
+#define _CHECK_PEP_523_r22 804
+#define _CHECK_PEP_523_r33 805
+#define _CHECK_PERIODIC_r00 806
+#define _CHECK_PERIODIC_AT_END_r00 807
+#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM_r00 808
+#define _CHECK_RECURSION_LIMIT_r00 809
+#define _CHECK_RECURSION_LIMIT_r11 810
+#define _CHECK_RECURSION_LIMIT_r22 811
+#define _CHECK_RECURSION_LIMIT_r33 812
+#define _CHECK_RECURSION_REMAINING_r00 813
+#define _CHECK_RECURSION_REMAINING_r11 814
+#define _CHECK_RECURSION_REMAINING_r22 815
+#define _CHECK_RECURSION_REMAINING_r33 816
+#define _CHECK_STACK_SPACE_r00 817
+#define _CHECK_STACK_SPACE_OPERAND_r00 818
+#define _CHECK_STACK_SPACE_OPERAND_r11 819
+#define _CHECK_STACK_SPACE_OPERAND_r22 820
+#define _CHECK_STACK_SPACE_OPERAND_r33 821
+#define _CHECK_VALIDITY_r00 822
+#define _CHECK_VALIDITY_r11 823
+#define _CHECK_VALIDITY_r22 824
+#define _CHECK_VALIDITY_r33 825
+#define _COLD_DYNAMIC_EXIT_r00 826
+#define _COLD_EXIT_r00 827
+#define _COMPARE_OP_r21 828
+#define _COMPARE_OP_FLOAT_r03 829
+#define _COMPARE_OP_FLOAT_r13 830
+#define _COMPARE_OP_FLOAT_r23 831
+#define _COMPARE_OP_INT_r23 832
+#define _COMPARE_OP_STR_r23 833
+#define _CONTAINS_OP_r23 834
+#define _CONTAINS_OP_DICT_r23 835
+#define _CONTAINS_OP_SET_r23 836
+#define _CONVERT_VALUE_r11 837
+#define _COPY_r01 838
+#define _COPY_1_r02 839
+#define _COPY_1_r12 840
+#define _COPY_1_r23 841
+#define _COPY_2_r03 842
+#define _COPY_2_r13 843
+#define _COPY_2_r23 844
+#define _COPY_3_r03 845
+#define _COPY_3_r13 846
+#define _COPY_3_r23 847
+#define _COPY_3_r33 848
+#define _COPY_FREE_VARS_r00 849
+#define _COPY_FREE_VARS_r11 850
+#define _COPY_FREE_VARS_r22 851
+#define _COPY_FREE_VARS_r33 852
+#define _CREATE_INIT_FRAME_r01 853
+#define _DELETE_ATTR_r10 854
+#define _DELETE_DEREF_r00 855
+#define _DELETE_FAST_r00 856
+#define _DELETE_GLOBAL_r00 857
+#define _DELETE_NAME_r00 858
+#define _DELETE_SUBSCR_r20 859
+#define _DEOPT_r00 860
+#define _DEOPT_r10 861
+#define _DEOPT_r20 862
+#define _DEOPT_r30 863
+#define _DICT_MERGE_r11 864
+#define _DICT_UPDATE_r11 865
+#define _DO_CALL_r01 866
+#define _DO_CALL_FUNCTION_EX_r31 867
+#define _DO_CALL_KW_r11 868
+#define _DYNAMIC_EXIT_r00 869
+#define _DYNAMIC_EXIT_r10 870
+#define _DYNAMIC_EXIT_r20 871
+#define _DYNAMIC_EXIT_r30 872
+#define _END_FOR_r10 873
+#define _END_SEND_r31 874
+#define _ERROR_POP_N_r00 875
+#define _EXIT_INIT_CHECK_r10 876
+#define _EXIT_TRACE_r00 877
+#define _EXIT_TRACE_r10 878
+#define _EXIT_TRACE_r20 879
+#define _EXIT_TRACE_r30 880
+#define _EXPAND_METHOD_r00 881
+#define _EXPAND_METHOD_KW_r11 882
+#define _FATAL_ERROR_r00 883
+#define _FATAL_ERROR_r11 884
+#define _FATAL_ERROR_r22 885
+#define _FATAL_ERROR_r33 886
+#define _FORMAT_SIMPLE_r11 887
+#define _FORMAT_WITH_SPEC_r21 888
+#define _FOR_ITER_r23 889
+#define _FOR_ITER_GEN_FRAME_r03 890
+#define _FOR_ITER_GEN_FRAME_r13 891
+#define _FOR_ITER_GEN_FRAME_r23 892
+#define _FOR_ITER_TIER_TWO_r23 893
+#define _FOR_ITER_VIRTUAL_r23 894
+#define _FOR_ITER_VIRTUAL_TIER_TWO_r23 895
+#define _GET_AITER_r11 896
+#define _GET_ANEXT_r12 897
+#define _GET_AWAITABLE_r11 898
+#define _GET_ITER_r12 899
+#define _GET_ITER_TRAD_r12 900
+#define _GET_LEN_r12 901
+#define _GUARD_BINARY_OP_EXTEND_r22 902
+#define _GUARD_BINARY_OP_EXTEND_LHS_r02 903
+#define _GUARD_BINARY_OP_EXTEND_LHS_r12 904
+#define _GUARD_BINARY_OP_EXTEND_LHS_r22 905
+#define _GUARD_BINARY_OP_EXTEND_LHS_r33 906
+#define _GUARD_BINARY_OP_EXTEND_RHS_r02 907
+#define _GUARD_BINARY_OP_EXTEND_RHS_r12 908
+#define _GUARD_BINARY_OP_EXTEND_RHS_r22 909
+#define _GUARD_BINARY_OP_EXTEND_RHS_r33 910
+#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r02 911
+#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r12 912
+#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r22 913
+#define _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS_r33 914
+#define _GUARD_BIT_IS_SET_POP_r00 915
+#define _GUARD_BIT_IS_SET_POP_r10 916
+#define _GUARD_BIT_IS_SET_POP_r21 917
+#define _GUARD_BIT_IS_SET_POP_r32 918
+#define _GUARD_BIT_IS_SET_POP_4_r00 919
+#define _GUARD_BIT_IS_SET_POP_4_r10 920
+#define _GUARD_BIT_IS_SET_POP_4_r21 921
+#define _GUARD_BIT_IS_SET_POP_4_r32 922
+#define _GUARD_BIT_IS_SET_POP_5_r00 923
+#define _GUARD_BIT_IS_SET_POP_5_r10 924
+#define _GUARD_BIT_IS_SET_POP_5_r21 925
+#define _GUARD_BIT_IS_SET_POP_5_r32 926
+#define _GUARD_BIT_IS_SET_POP_6_r00 927
+#define _GUARD_BIT_IS_SET_POP_6_r10 928
+#define _GUARD_BIT_IS_SET_POP_6_r21 929
+#define _GUARD_BIT_IS_SET_POP_6_r32 930
+#define _GUARD_BIT_IS_SET_POP_7_r00 931
+#define _GUARD_BIT_IS_SET_POP_7_r10 932
+#define _GUARD_BIT_IS_SET_POP_7_r21 933
+#define _GUARD_BIT_IS_SET_POP_7_r32 934
+#define _GUARD_BIT_IS_UNSET_POP_r00 935
+#define _GUARD_BIT_IS_UNSET_POP_r10 936
+#define _GUARD_BIT_IS_UNSET_POP_r21 937
+#define _GUARD_BIT_IS_UNSET_POP_r32 938
+#define _GUARD_BIT_IS_UNSET_POP_4_r00 939
+#define _GUARD_BIT_IS_UNSET_POP_4_r10 940
+#define _GUARD_BIT_IS_UNSET_POP_4_r21 941
+#define _GUARD_BIT_IS_UNSET_POP_4_r32 942
+#define _GUARD_BIT_IS_UNSET_POP_5_r00 943
+#define _GUARD_BIT_IS_UNSET_POP_5_r10 944
+#define _GUARD_BIT_IS_UNSET_POP_5_r21 945
+#define _GUARD_BIT_IS_UNSET_POP_5_r32 946
+#define _GUARD_BIT_IS_UNSET_POP_6_r00 947
+#define _GUARD_BIT_IS_UNSET_POP_6_r10 948
+#define _GUARD_BIT_IS_UNSET_POP_6_r21 949
+#define _GUARD_BIT_IS_UNSET_POP_6_r32 950
+#define _GUARD_BIT_IS_UNSET_POP_7_r00 951
+#define _GUARD_BIT_IS_UNSET_POP_7_r10 952
+#define _GUARD_BIT_IS_UNSET_POP_7_r21 953
+#define _GUARD_BIT_IS_UNSET_POP_7_r32 954
+#define _GUARD_CALLABLE_BUILTIN_CLASS_r00 955
+#define _GUARD_CALLABLE_BUILTIN_FAST_r00 956
+#define _GUARD_CALLABLE_BUILTIN_FAST_WITH_KEYWORDS_r00 957
+#define _GUARD_CALLABLE_BUILTIN_O_r00 958
+#define _GUARD_CALLABLE_ISINSTANCE_r03 959
+#define _GUARD_CALLABLE_ISINSTANCE_r13 960
+#define _GUARD_CALLABLE_ISINSTANCE_r23 961
+#define _GUARD_CALLABLE_ISINSTANCE_r33 962
+#define _GUARD_CALLABLE_LEN_r03 963
+#define _GUARD_CALLABLE_LEN_r13 964
+#define _GUARD_CALLABLE_LEN_r23 965
+#define _GUARD_CALLABLE_LEN_r33 966
+#define _GUARD_CALLABLE_LIST_APPEND_r03 967
+#define _GUARD_CALLABLE_LIST_APPEND_r13 968
+#define _GUARD_CALLABLE_LIST_APPEND_r23 969
+#define _GUARD_CALLABLE_LIST_APPEND_r33 970
+#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_r00 971
+#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS_r00 972
+#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_NOARGS_r00 973
+#define _GUARD_CALLABLE_METHOD_DESCRIPTOR_O_r00 974
+#define _GUARD_CALLABLE_STR_1_r03 975
+#define _GUARD_CALLABLE_STR_1_r13 976
+#define _GUARD_CALLABLE_STR_1_r23 977
+#define _GUARD_CALLABLE_STR_1_r33 978
+#define _GUARD_CALLABLE_TUPLE_1_r03 979
+#define _GUARD_CALLABLE_TUPLE_1_r13 980
+#define _GUARD_CALLABLE_TUPLE_1_r23 981
+#define _GUARD_CALLABLE_TUPLE_1_r33 982
+#define _GUARD_CALLABLE_TYPE_1_r03 983
+#define _GUARD_CALLABLE_TYPE_1_r13 984
+#define _GUARD_CALLABLE_TYPE_1_r23 985
+#define _GUARD_CALLABLE_TYPE_1_r33 986
+#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r00 987
+#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r11 988
+#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r22 989
+#define _GUARD_CODE_VERSION_RETURN_GENERATOR_r33 990
+#define _GUARD_CODE_VERSION_RETURN_VALUE_r00 991
+#define _GUARD_CODE_VERSION_RETURN_VALUE_r11 992
+#define _GUARD_CODE_VERSION_RETURN_VALUE_r22 993
+#define _GUARD_CODE_VERSION_RETURN_VALUE_r33 994
+#define _GUARD_CODE_VERSION_YIELD_VALUE_r00 995
+#define _GUARD_CODE_VERSION_YIELD_VALUE_r11 996
+#define _GUARD_CODE_VERSION_YIELD_VALUE_r22 997
+#define _GUARD_CODE_VERSION_YIELD_VALUE_r33 998
+#define _GUARD_CODE_VERSION__PUSH_FRAME_r00 999
+#define _GUARD_CODE_VERSION__PUSH_FRAME_r11 1000
+#define _GUARD_CODE_VERSION__PUSH_FRAME_r22 1001
+#define _GUARD_CODE_VERSION__PUSH_FRAME_r33 1002
+#define _GUARD_DORV_NO_DICT_r01 1003
+#define _GUARD_DORV_NO_DICT_r11 1004
+#define _GUARD_DORV_NO_DICT_r22 1005
+#define _GUARD_DORV_NO_DICT_r33 1006
+#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r01 1007
+#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r11 1008
+#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r22 1009
+#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT_r33 1010
+#define _GUARD_GLOBALS_VERSION_r00 1011
+#define _GUARD_GLOBALS_VERSION_r11 1012
+#define _GUARD_GLOBALS_VERSION_r22 1013
+#define _GUARD_GLOBALS_VERSION_r33 1014
+#define _GUARD_IP_RETURN_GENERATOR_r00 1015
+#define _GUARD_IP_RETURN_GENERATOR_r11 1016
+#define _GUARD_IP_RETURN_GENERATOR_r22 1017
+#define _GUARD_IP_RETURN_GENERATOR_r33 1018
+#define _GUARD_IP_RETURN_VALUE_r00 1019
+#define _GUARD_IP_RETURN_VALUE_r11 1020
+#define _GUARD_IP_RETURN_VALUE_r22 1021
+#define _GUARD_IP_RETURN_VALUE_r33 1022
+#define _GUARD_IP_YIELD_VALUE_r00 1023
+#define _GUARD_IP_YIELD_VALUE_r11 1024
+#define _GUARD_IP_YIELD_VALUE_r22 1025
+#define _GUARD_IP_YIELD_VALUE_r33 1026
+#define _GUARD_IP__PUSH_FRAME_r00 1027
+#define _GUARD_IP__PUSH_FRAME_r11 1028
+#define _GUARD_IP__PUSH_FRAME_r22 1029
+#define _GUARD_IP__PUSH_FRAME_r33 1030
+#define _GUARD_IS_FALSE_POP_r00 1031
+#define _GUARD_IS_FALSE_POP_r10 1032
+#define _GUARD_IS_FALSE_POP_r21 1033
+#define _GUARD_IS_FALSE_POP_r32 1034
+#define _GUARD_IS_NONE_POP_r00 1035
+#define _GUARD_IS_NONE_POP_r10 1036
+#define _GUARD_IS_NONE_POP_r21 1037
+#define _GUARD_IS_NONE_POP_r32 1038
+#define _GUARD_IS_NOT_NONE_POP_r10 1039
+#define _GUARD_IS_TRUE_POP_r00 1040
+#define _GUARD_IS_TRUE_POP_r10 1041
+#define _GUARD_IS_TRUE_POP_r21 1042
+#define _GUARD_IS_TRUE_POP_r32 1043
+#define _GUARD_ITERATOR_r01 1044
+#define _GUARD_ITERATOR_r11 1045
+#define _GUARD_ITERATOR_r22 1046
+#define _GUARD_ITERATOR_r33 1047
+#define _GUARD_ITER_VIRTUAL_r01 1048
+#define _GUARD_ITER_VIRTUAL_r11 1049
+#define _GUARD_ITER_VIRTUAL_r22 1050
+#define _GUARD_ITER_VIRTUAL_r33 1051
+#define _GUARD_KEYS_VERSION_r01 1052
+#define _GUARD_KEYS_VERSION_r11 1053
+#define _GUARD_KEYS_VERSION_r22 1054
+#define _GUARD_KEYS_VERSION_r33 1055
+#define _GUARD_LOAD_SUPER_ATTR_METHOD_r03 1056
+#define _GUARD_LOAD_SUPER_ATTR_METHOD_r13 1057
+#define _GUARD_LOAD_SUPER_ATTR_METHOD_r23 1058
+#define _GUARD_LOAD_SUPER_ATTR_METHOD_r33 1059
+#define _GUARD_NOS_ANY_DICT_r02 1060
+#define _GUARD_NOS_ANY_DICT_r12 1061
+#define _GUARD_NOS_ANY_DICT_r22 1062
+#define _GUARD_NOS_ANY_DICT_r33 1063
+#define _GUARD_NOS_COMPACT_ASCII_r02 1064
+#define _GUARD_NOS_COMPACT_ASCII_r12 1065
+#define _GUARD_NOS_COMPACT_ASCII_r22 1066
+#define _GUARD_NOS_COMPACT_ASCII_r33 1067
+#define _GUARD_NOS_DICT_r02 1068
+#define _GUARD_NOS_DICT_r12 1069
+#define _GUARD_NOS_DICT_r22 1070
+#define _GUARD_NOS_DICT_r33 1071
+#define _GUARD_NOS_FLOAT_r02 1072
+#define _GUARD_NOS_FLOAT_r12 1073
+#define _GUARD_NOS_FLOAT_r22 1074
+#define _GUARD_NOS_FLOAT_r33 1075
+#define _GUARD_NOS_INT_r02 1076
+#define _GUARD_NOS_INT_r12 1077
+#define _GUARD_NOS_INT_r22 1078
+#define _GUARD_NOS_INT_r33 1079
+#define _GUARD_NOS_ITER_VIRTUAL_r02 1080
+#define _GUARD_NOS_ITER_VIRTUAL_r12 1081
+#define _GUARD_NOS_ITER_VIRTUAL_r22 1082
+#define _GUARD_NOS_ITER_VIRTUAL_r33 1083
+#define _GUARD_NOS_LIST_r02 1084
+#define _GUARD_NOS_LIST_r12 1085
+#define _GUARD_NOS_LIST_r22 1086
+#define _GUARD_NOS_LIST_r33 1087
+#define _GUARD_NOS_NOT_NULL_r02 1088
+#define _GUARD_NOS_NOT_NULL_r12 1089
+#define _GUARD_NOS_NOT_NULL_r22 1090
+#define _GUARD_NOS_NOT_NULL_r33 1091
+#define _GUARD_NOS_NULL_r02 1092
+#define _GUARD_NOS_NULL_r12 1093
+#define _GUARD_NOS_NULL_r22 1094
+#define _GUARD_NOS_NULL_r33 1095
+#define _GUARD_NOS_OVERFLOWED_r02 1096
+#define _GUARD_NOS_OVERFLOWED_r12 1097
+#define _GUARD_NOS_OVERFLOWED_r22 1098
+#define _GUARD_NOS_OVERFLOWED_r33 1099
+#define _GUARD_NOS_TUPLE_r02 1100
+#define _GUARD_NOS_TUPLE_r12 1101
+#define _GUARD_NOS_TUPLE_r22 1102
+#define _GUARD_NOS_TUPLE_r33 1103
+#define _GUARD_NOS_TYPE_VERSION_r02 1104
+#define _GUARD_NOS_TYPE_VERSION_r12 1105
+#define _GUARD_NOS_TYPE_VERSION_r22 1106
+#define _GUARD_NOS_TYPE_VERSION_r33 1107
+#define _GUARD_NOS_UNICODE_r02 1108
+#define _GUARD_NOS_UNICODE_r12 1109
+#define _GUARD_NOS_UNICODE_r22 1110
+#define _GUARD_NOS_UNICODE_r33 1111
+#define _GUARD_NOT_EXHAUSTED_LIST_r02 1112
+#define _GUARD_NOT_EXHAUSTED_LIST_r12 1113
+#define _GUARD_NOT_EXHAUSTED_LIST_r22 1114
+#define _GUARD_NOT_EXHAUSTED_LIST_r33 1115
+#define _GUARD_NOT_EXHAUSTED_RANGE_r02 1116
+#define _GUARD_NOT_EXHAUSTED_RANGE_r12 1117
+#define _GUARD_NOT_EXHAUSTED_RANGE_r22 1118
+#define _GUARD_NOT_EXHAUSTED_RANGE_r33 1119
+#define _GUARD_NOT_EXHAUSTED_TUPLE_r02 1120
+#define _GUARD_NOT_EXHAUSTED_TUPLE_r12 1121
+#define _GUARD_NOT_EXHAUSTED_TUPLE_r22 1122
+#define _GUARD_NOT_EXHAUSTED_TUPLE_r33 1123
+#define _GUARD_THIRD_NULL_r03 1124
+#define _GUARD_THIRD_NULL_r13 1125
+#define _GUARD_THIRD_NULL_r23 1126
+#define _GUARD_THIRD_NULL_r33 1127
+#define _GUARD_TOS_ANY_DICT_r01 1128
+#define _GUARD_TOS_ANY_DICT_r11 1129
+#define _GUARD_TOS_ANY_DICT_r22 1130
+#define _GUARD_TOS_ANY_DICT_r33 1131
+#define _GUARD_TOS_ANY_SET_r01 1132
+#define _GUARD_TOS_ANY_SET_r11 1133
+#define _GUARD_TOS_ANY_SET_r22 1134
+#define _GUARD_TOS_ANY_SET_r33 1135
+#define _GUARD_TOS_DICT_r01 1136
+#define _GUARD_TOS_DICT_r11 1137
+#define _GUARD_TOS_DICT_r22 1138
+#define _GUARD_TOS_DICT_r33 1139
+#define _GUARD_TOS_FLOAT_r01 1140
+#define _GUARD_TOS_FLOAT_r11 1141
+#define _GUARD_TOS_FLOAT_r22 1142
+#define _GUARD_TOS_FLOAT_r33 1143
+#define _GUARD_TOS_FROZENDICT_r01 1144
+#define _GUARD_TOS_FROZENDICT_r11 1145
+#define _GUARD_TOS_FROZENDICT_r22 1146
+#define _GUARD_TOS_FROZENDICT_r33 1147
+#define _GUARD_TOS_FROZENSET_r01 1148
+#define _GUARD_TOS_FROZENSET_r11 1149
+#define _GUARD_TOS_FROZENSET_r22 1150
+#define _GUARD_TOS_FROZENSET_r33 1151
+#define _GUARD_TOS_INT_r01 1152
+#define _GUARD_TOS_INT_r11 1153
+#define _GUARD_TOS_INT_r22 1154
+#define _GUARD_TOS_INT_r33 1155
+#define _GUARD_TOS_LIST_r01 1156
+#define _GUARD_TOS_LIST_r11 1157
+#define _GUARD_TOS_LIST_r22 1158
+#define _GUARD_TOS_LIST_r33 1159
+#define _GUARD_TOS_OVERFLOWED_r01 1160
+#define _GUARD_TOS_OVERFLOWED_r11 1161
+#define _GUARD_TOS_OVERFLOWED_r22 1162
+#define _GUARD_TOS_OVERFLOWED_r33 1163
+#define _GUARD_TOS_SET_r01 1164
+#define _GUARD_TOS_SET_r11 1165
+#define _GUARD_TOS_SET_r22 1166
+#define _GUARD_TOS_SET_r33 1167
+#define _GUARD_TOS_SLICE_r01 1168
+#define _GUARD_TOS_SLICE_r11 1169
+#define _GUARD_TOS_SLICE_r22 1170
+#define _GUARD_TOS_SLICE_r33 1171
+#define _GUARD_TOS_TUPLE_r01 1172
+#define _GUARD_TOS_TUPLE_r11 1173
+#define _GUARD_TOS_TUPLE_r22 1174
+#define _GUARD_TOS_TUPLE_r33 1175
+#define _GUARD_TOS_UNICODE_r01 1176
+#define _GUARD_TOS_UNICODE_r11 1177
+#define _GUARD_TOS_UNICODE_r22 1178
+#define _GUARD_TOS_UNICODE_r33 1179
+#define _GUARD_TYPE_r01 1180
+#define _GUARD_TYPE_r11 1181
+#define _GUARD_TYPE_r22 1182
+#define _GUARD_TYPE_r33 1183
+#define _GUARD_TYPE_VERSION_r01 1184
+#define _GUARD_TYPE_VERSION_r11 1185
+#define _GUARD_TYPE_VERSION_r22 1186
+#define _GUARD_TYPE_VERSION_r33 1187
+#define _GUARD_TYPE_VERSION_LOCKED_r01 1188
+#define _GUARD_TYPE_VERSION_LOCKED_r11 1189
+#define _GUARD_TYPE_VERSION_LOCKED_r22 1190
+#define _GUARD_TYPE_VERSION_LOCKED_r33 1191
+#define _HANDLE_PENDING_AND_DEOPT_r00 1192
+#define _HANDLE_PENDING_AND_DEOPT_r10 1193
+#define _HANDLE_PENDING_AND_DEOPT_r20 1194
+#define _HANDLE_PENDING_AND_DEOPT_r30 1195
+#define _IMPORT_FROM_r12 1196
+#define _IMPORT_NAME_r21 1197
+#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS_r00 1198
+#define _INIT_CALL_PY_EXACT_ARGS_r01 1199
+#define _INIT_CALL_PY_EXACT_ARGS_0_r01 1200
+#define _INIT_CALL_PY_EXACT_ARGS_1_r01 1201
+#define _INIT_CALL_PY_EXACT_ARGS_2_r01 1202
+#define _INIT_CALL_PY_EXACT_ARGS_3_r01 1203
+#define _INIT_CALL_PY_EXACT_ARGS_4_r01 1204
+#define _INSERT_NULL_r10 1205
+#define _INSTRUMENTED_FOR_ITER_r23 1206
+#define _INSTRUMENTED_INSTRUCTION_r00 1207
+#define _INSTRUMENTED_JUMP_FORWARD_r00 1208
+#define _INSTRUMENTED_JUMP_FORWARD_r11 1209
+#define _INSTRUMENTED_JUMP_FORWARD_r22 1210
+#define _INSTRUMENTED_JUMP_FORWARD_r33 1211
+#define _INSTRUMENTED_LINE_r00 1212
+#define _INSTRUMENTED_NOT_TAKEN_r00 1213
+#define _INSTRUMENTED_NOT_TAKEN_r11 1214
+#define _INSTRUMENTED_NOT_TAKEN_r22 1215
+#define _INSTRUMENTED_NOT_TAKEN_r33 1216
+#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r00 1217
+#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r10 1218
+#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r21 1219
+#define _INSTRUMENTED_POP_JUMP_IF_FALSE_r32 1220
+#define _INSTRUMENTED_POP_JUMP_IF_NONE_r10 1221
+#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE_r10 1222
+#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r00 1223
+#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r10 1224
+#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r21 1225
+#define _INSTRUMENTED_POP_JUMP_IF_TRUE_r32 1226
+#define _IS_NONE_r11 1227
+#define _IS_OP_r03 1228
+#define _IS_OP_r13 1229
+#define _IS_OP_r23 1230
+#define _ITER_CHECK_LIST_r02 1231
+#define _ITER_CHECK_LIST_r12 1232
+#define _ITER_CHECK_LIST_r22 1233
+#define _ITER_CHECK_LIST_r33 1234
+#define _ITER_CHECK_RANGE_r02 1235
+#define _ITER_CHECK_RANGE_r12 1236
+#define _ITER_CHECK_RANGE_r22 1237
+#define _ITER_CHECK_RANGE_r33 1238
+#define _ITER_CHECK_TUPLE_r02 1239
+#define _ITER_CHECK_TUPLE_r12 1240
+#define _ITER_CHECK_TUPLE_r22 1241
+#define _ITER_CHECK_TUPLE_r33 1242
+#define _ITER_JUMP_LIST_r02 1243
+#define _ITER_JUMP_LIST_r12 1244
+#define _ITER_JUMP_LIST_r22 1245
+#define _ITER_JUMP_LIST_r33 1246
+#define _ITER_JUMP_RANGE_r02 1247
+#define _ITER_JUMP_RANGE_r12 1248
+#define _ITER_JUMP_RANGE_r22 1249
+#define _ITER_JUMP_RANGE_r33 1250
+#define _ITER_JUMP_TUPLE_r02 1251
+#define _ITER_JUMP_TUPLE_r12 1252
+#define _ITER_JUMP_TUPLE_r22 1253
+#define _ITER_JUMP_TUPLE_r33 1254
+#define _ITER_NEXT_LIST_r23 1255
+#define _ITER_NEXT_LIST_TIER_TWO_r23 1256
+#define _ITER_NEXT_RANGE_r03 1257
+#define _ITER_NEXT_RANGE_r13 1258
+#define _ITER_NEXT_RANGE_r23 1259
+#define _ITER_NEXT_TUPLE_r03 1260
+#define _ITER_NEXT_TUPLE_r13 1261
+#define _ITER_NEXT_TUPLE_r23 1262
+#define _JUMP_BACKWARD_NO_INTERRUPT_r00 1263
+#define _JUMP_BACKWARD_NO_INTERRUPT_r11 1264
+#define _JUMP_BACKWARD_NO_INTERRUPT_r22 1265
+#define _JUMP_BACKWARD_NO_INTERRUPT_r33 1266
+#define _JUMP_TO_TOP_r00 1267
+#define _LIST_APPEND_r10 1268
+#define _LIST_EXTEND_r11 1269
+#define _LOAD_ATTR_r10 1270
+#define _LOAD_ATTR_CLASS_r11 1271
+#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_FRAME_r11 1272
+#define _LOAD_ATTR_INSTANCE_VALUE_r02 1273
+#define _LOAD_ATTR_INSTANCE_VALUE_r12 1274
+#define _LOAD_ATTR_INSTANCE_VALUE_r23 1275
+#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 1276
+#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 1277
+#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 1278
+#define _LOAD_ATTR_METHOD_NO_DICT_r02 1279
+#define _LOAD_ATTR_METHOD_NO_DICT_r12 1280
+#define _LOAD_ATTR_METHOD_NO_DICT_r23 1281
+#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 1282
+#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 1283
+#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 1284
+#define _LOAD_ATTR_MODULE_r12 1285
+#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1286
+#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1287
+#define _LOAD_ATTR_PROPERTY_FRAME_r01 1288
+#define _LOAD_ATTR_PROPERTY_FRAME_r11 1289
+#define _LOAD_ATTR_PROPERTY_FRAME_r22 1290
+#define _LOAD_ATTR_PROPERTY_FRAME_r33 1291
+#define _LOAD_ATTR_SLOT_r02 1292
+#define _LOAD_ATTR_SLOT_r12 1293
+#define _LOAD_ATTR_SLOT_r23 1294
+#define _LOAD_ATTR_WITH_HINT_r12 1295
+#define _LOAD_BUILD_CLASS_r01 1296
+#define _LOAD_BYTECODE_r00 1297
+#define _LOAD_COMMON_CONSTANT_r01 1298
+#define _LOAD_COMMON_CONSTANT_r12 1299
+#define _LOAD_COMMON_CONSTANT_r23 1300
+#define _LOAD_CONST_r01 1301
+#define _LOAD_CONST_r12 1302
+#define _LOAD_CONST_r23 1303
+#define _LOAD_CONST_INLINE_r01 1304
+#define _LOAD_CONST_INLINE_r12 1305
+#define _LOAD_CONST_INLINE_r23 1306
+#define _LOAD_CONST_INLINE_BORROW_r01 1307
+#define _LOAD_CONST_INLINE_BORROW_r12 1308
+#define _LOAD_CONST_INLINE_BORROW_r23 1309
+#define _LOAD_DEREF_r01 1310
+#define _LOAD_FAST_r01 1311
+#define _LOAD_FAST_r12 1312
+#define _LOAD_FAST_r23 1313
+#define _LOAD_FAST_0_r01 1314
+#define _LOAD_FAST_0_r12 1315
+#define _LOAD_FAST_0_r23 1316
+#define _LOAD_FAST_1_r01 1317
+#define _LOAD_FAST_1_r12 1318
+#define _LOAD_FAST_1_r23 1319
+#define _LOAD_FAST_2_r01 1320
+#define _LOAD_FAST_2_r12 1321
+#define _LOAD_FAST_2_r23 1322
+#define _LOAD_FAST_3_r01 1323
+#define _LOAD_FAST_3_r12 1324
+#define _LOAD_FAST_3_r23 1325
+#define _LOAD_FAST_4_r01 1326
+#define _LOAD_FAST_4_r12 1327
+#define _LOAD_FAST_4_r23 1328
+#define _LOAD_FAST_5_r01 1329
+#define _LOAD_FAST_5_r12 1330
+#define _LOAD_FAST_5_r23 1331
+#define _LOAD_FAST_6_r01 1332
+#define _LOAD_FAST_6_r12 1333
+#define _LOAD_FAST_6_r23 1334
+#define _LOAD_FAST_7_r01 1335
+#define _LOAD_FAST_7_r12 1336
+#define _LOAD_FAST_7_r23 1337
+#define _LOAD_FAST_AND_CLEAR_r01 1338
+#define _LOAD_FAST_AND_CLEAR_r12 1339
+#define _LOAD_FAST_AND_CLEAR_r23 1340
+#define _LOAD_FAST_BORROW_r01 1341
+#define _LOAD_FAST_BORROW_r12 1342
+#define _LOAD_FAST_BORROW_r23 1343
+#define _LOAD_FAST_BORROW_0_r01 1344
+#define _LOAD_FAST_BORROW_0_r12 1345
+#define _LOAD_FAST_BORROW_0_r23 1346
+#define _LOAD_FAST_BORROW_1_r01 1347
+#define _LOAD_FAST_BORROW_1_r12 1348
+#define _LOAD_FAST_BORROW_1_r23 1349
+#define _LOAD_FAST_BORROW_2_r01 1350
+#define _LOAD_FAST_BORROW_2_r12 1351
+#define _LOAD_FAST_BORROW_2_r23 1352
+#define _LOAD_FAST_BORROW_3_r01 1353
+#define _LOAD_FAST_BORROW_3_r12 1354
+#define _LOAD_FAST_BORROW_3_r23 1355
+#define _LOAD_FAST_BORROW_4_r01 1356
+#define _LOAD_FAST_BORROW_4_r12 1357
+#define _LOAD_FAST_BORROW_4_r23 1358
+#define _LOAD_FAST_BORROW_5_r01 1359
+#define _LOAD_FAST_BORROW_5_r12 1360
+#define _LOAD_FAST_BORROW_5_r23 1361
+#define _LOAD_FAST_BORROW_6_r01 1362
+#define _LOAD_FAST_BORROW_6_r12 1363
+#define _LOAD_FAST_BORROW_6_r23 1364
+#define _LOAD_FAST_BORROW_7_r01 1365
+#define _LOAD_FAST_BORROW_7_r12 1366
+#define _LOAD_FAST_BORROW_7_r23 1367
+#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1368
+#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1369
+#define _LOAD_FAST_CHECK_r01 1370
+#define _LOAD_FAST_CHECK_r12 1371
+#define _LOAD_FAST_CHECK_r23 1372
+#define _LOAD_FAST_LOAD_FAST_r02 1373
+#define _LOAD_FAST_LOAD_FAST_r13 1374
+#define _LOAD_FROM_DICT_OR_DEREF_r11 1375
+#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1376
+#define _LOAD_GLOBAL_r00 1377
+#define _LOAD_GLOBAL_BUILTINS_r01 1378
+#define _LOAD_GLOBAL_MODULE_r01 1379
+#define _LOAD_LOCALS_r01 1380
+#define _LOAD_LOCALS_r12 1381
+#define _LOAD_LOCALS_r23 1382
+#define _LOAD_NAME_r01 1383
+#define _LOAD_SMALL_INT_r01 1384
+#define _LOAD_SMALL_INT_r12 1385
+#define _LOAD_SMALL_INT_r23 1386
+#define _LOAD_SMALL_INT_0_r01 1387
+#define _LOAD_SMALL_INT_0_r12 1388
+#define _LOAD_SMALL_INT_0_r23 1389
+#define _LOAD_SMALL_INT_1_r01 1390
+#define _LOAD_SMALL_INT_1_r12 1391
+#define _LOAD_SMALL_INT_1_r23 1392
+#define _LOAD_SMALL_INT_2_r01 1393
+#define _LOAD_SMALL_INT_2_r12 1394
+#define _LOAD_SMALL_INT_2_r23 1395
+#define _LOAD_SMALL_INT_3_r01 1396
+#define _LOAD_SMALL_INT_3_r12 1397
+#define _LOAD_SMALL_INT_3_r23 1398
+#define _LOAD_SPECIAL_r00 1399
+#define _LOAD_SUPER_ATTR_ATTR_r31 1400
+#define _LOAD_SUPER_ATTR_METHOD_r32 1401
+#define _LOCK_OBJECT_r01 1402
+#define _LOCK_OBJECT_r11 1403
+#define _LOCK_OBJECT_r22 1404
+#define _LOCK_OBJECT_r33 1405
+#define _MAKE_CALLARGS_A_TUPLE_r33 1406
+#define _MAKE_CELL_r00 1407
+#define _MAKE_FUNCTION_r12 1408
+#define _MAKE_HEAP_SAFE_r01 1409
+#define _MAKE_HEAP_SAFE_r11 1410
+#define _MAKE_HEAP_SAFE_r22 1411
+#define _MAKE_HEAP_SAFE_r33 1412
+#define _MAKE_WARM_r00 1413
+#define _MAKE_WARM_r11 1414
+#define _MAKE_WARM_r22 1415
+#define _MAKE_WARM_r33 1416
+#define _MAP_ADD_r20 1417
+#define _MATCH_CLASS_r33 1418
+#define _MATCH_KEYS_r23 1419
+#define _MATCH_MAPPING_r02 1420
+#define _MATCH_MAPPING_r12 1421
+#define _MATCH_MAPPING_r23 1422
+#define _MATCH_SEQUENCE_r02 1423
+#define _MATCH_SEQUENCE_r12 1424
+#define _MATCH_SEQUENCE_r23 1425
+#define _MAYBE_EXPAND_METHOD_r00 1426
+#define _MAYBE_EXPAND_METHOD_KW_r11 1427
+#define _MONITOR_CALL_r00 1428
+#define _MONITOR_CALL_KW_r11 1429
+#define _MONITOR_JUMP_BACKWARD_r00 1430
+#define _MONITOR_JUMP_BACKWARD_r11 1431
+#define _MONITOR_JUMP_BACKWARD_r22 1432
+#define _MONITOR_JUMP_BACKWARD_r33 1433
+#define _MONITOR_RESUME_r00 1434
+#define _NOP_r00 1435
+#define _NOP_r11 1436
+#define _NOP_r22 1437
+#define _NOP_r33 1438
+#define _POP_EXCEPT_r10 1439
+#define _POP_ITER_r20 1440
+#define _POP_JUMP_IF_FALSE_r00 1441
+#define _POP_JUMP_IF_FALSE_r10 1442
+#define _POP_JUMP_IF_FALSE_r21 1443
+#define _POP_JUMP_IF_FALSE_r32 1444
+#define _POP_JUMP_IF_TRUE_r00 1445
+#define _POP_JUMP_IF_TRUE_r10 1446
+#define _POP_JUMP_IF_TRUE_r21 1447
+#define _POP_JUMP_IF_TRUE_r32 1448
+#define _POP_TOP_r10 1449
+#define _POP_TOP_FLOAT_r00 1450
+#define _POP_TOP_FLOAT_r10 1451
+#define _POP_TOP_FLOAT_r21 1452
+#define _POP_TOP_FLOAT_r32 1453
+#define _POP_TOP_INT_r00 1454
+#define _POP_TOP_INT_r10 1455
+#define _POP_TOP_INT_r21 1456
+#define _POP_TOP_INT_r32 1457
+#define _POP_TOP_NOP_r00 1458
+#define _POP_TOP_NOP_r10 1459
+#define _POP_TOP_NOP_r21 1460
+#define _POP_TOP_NOP_r32 1461
+#define _POP_TOP_OPARG_r00 1462
+#define _POP_TOP_UNICODE_r00 1463
+#define _POP_TOP_UNICODE_r10 1464
+#define _POP_TOP_UNICODE_r21 1465
+#define _POP_TOP_UNICODE_r32 1466
+#define _PUSH_EXC_INFO_r02 1467
+#define _PUSH_EXC_INFO_r12 1468
+#define _PUSH_EXC_INFO_r23 1469
+#define _PUSH_FRAME_r10 1470
+#define _PUSH_NULL_r01 1471
+#define _PUSH_NULL_r12 1472
+#define _PUSH_NULL_r23 1473
+#define _PUSH_NULL_CONDITIONAL_r00 1474
+#define _PUSH_TAGGED_ZERO_r01 1475
+#define _PUSH_TAGGED_ZERO_r12 1476
+#define _PUSH_TAGGED_ZERO_r23 1477
+#define _PY_FRAME_EX_r31 1478
+#define _PY_FRAME_GENERAL_r01 1479
+#define _PY_FRAME_KW_r11 1480
+#define _REPLACE_WITH_TRUE_r02 1481
+#define _REPLACE_WITH_TRUE_r12 1482
+#define _REPLACE_WITH_TRUE_r23 1483
+#define _RESUME_CHECK_r00 1484
+#define _RESUME_CHECK_r11 1485
+#define _RESUME_CHECK_r22 1486
+#define _RESUME_CHECK_r33 1487
+#define _RETURN_GENERATOR_r01 1488
+#define _RETURN_VALUE_r11 1489
+#define _SAVE_RETURN_OFFSET_r00 1490
+#define _SAVE_RETURN_OFFSET_r11 1491
+#define _SAVE_RETURN_OFFSET_r22 1492
+#define _SAVE_RETURN_OFFSET_r33 1493
+#define _SEND_r33 1494
+#define _SEND_GEN_FRAME_r33 1495
+#define _SETUP_ANNOTATIONS_r00 1496
+#define _SET_ADD_r10 1497
+#define _SET_FUNCTION_ATTRIBUTE_r01 1498
+#define _SET_FUNCTION_ATTRIBUTE_r11 1499
+#define _SET_FUNCTION_ATTRIBUTE_r21 1500
+#define _SET_FUNCTION_ATTRIBUTE_r32 1501
+#define _SET_IP_r00 1502
+#define _SET_IP_r11 1503
+#define _SET_IP_r22 1504
+#define _SET_IP_r33 1505
+#define _SET_UPDATE_r11 1506
+#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r03 1507
+#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r13 1508
+#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r23 1509
+#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r33 1510
+#define _SPILL_OR_RELOAD_r01 1511
+#define _SPILL_OR_RELOAD_r02 1512
+#define _SPILL_OR_RELOAD_r03 1513
+#define _SPILL_OR_RELOAD_r10 1514
+#define _SPILL_OR_RELOAD_r12 1515
+#define _SPILL_OR_RELOAD_r13 1516
+#define _SPILL_OR_RELOAD_r20 1517
+#define _SPILL_OR_RELOAD_r21 1518
+#define _SPILL_OR_RELOAD_r23 1519
+#define _SPILL_OR_RELOAD_r30 1520
+#define _SPILL_OR_RELOAD_r31 1521
+#define _SPILL_OR_RELOAD_r32 1522
+#define _START_EXECUTOR_r00 1523
+#define _STORE_ATTR_r20 1524
+#define _STORE_ATTR_INSTANCE_VALUE_r21 1525
+#define _STORE_ATTR_SLOT_r21 1526
+#define _STORE_ATTR_WITH_HINT_r21 1527
+#define _STORE_DEREF_r10 1528
+#define _STORE_FAST_LOAD_FAST_r11 1529
+#define _STORE_FAST_STORE_FAST_r20 1530
+#define _STORE_GLOBAL_r10 1531
+#define _STORE_NAME_r10 1532
+#define _STORE_SLICE_r30 1533
+#define _STORE_SUBSCR_r30 1534
+#define _STORE_SUBSCR_DICT_r31 1535
+#define _STORE_SUBSCR_DICT_KNOWN_HASH_r31 1536
+#define _STORE_SUBSCR_LIST_INT_r32 1537
+#define _SWAP_r11 1538
+#define _SWAP_2_r02 1539
+#define _SWAP_2_r12 1540
+#define _SWAP_2_r22 1541
+#define _SWAP_2_r33 1542
+#define _SWAP_3_r03 1543
+#define _SWAP_3_r13 1544
+#define _SWAP_3_r23 1545
+#define _SWAP_3_r33 1546
+#define _SWAP_FAST_r01 1547
+#define _SWAP_FAST_r11 1548
+#define _SWAP_FAST_r22 1549
+#define _SWAP_FAST_r33 1550
+#define _SWAP_FAST_0_r01 1551
+#define _SWAP_FAST_0_r11 1552
+#define _SWAP_FAST_0_r22 1553
+#define _SWAP_FAST_0_r33 1554
+#define _SWAP_FAST_1_r01 1555
+#define _SWAP_FAST_1_r11 1556
+#define _SWAP_FAST_1_r22 1557
+#define _SWAP_FAST_1_r33 1558
+#define _SWAP_FAST_2_r01 1559
+#define _SWAP_FAST_2_r11 1560
+#define _SWAP_FAST_2_r22 1561
+#define _SWAP_FAST_2_r33 1562
+#define _SWAP_FAST_3_r01 1563
+#define _SWAP_FAST_3_r11 1564
+#define _SWAP_FAST_3_r22 1565
+#define _SWAP_FAST_3_r33 1566
+#define _SWAP_FAST_4_r01 1567
+#define _SWAP_FAST_4_r11 1568
+#define _SWAP_FAST_4_r22 1569
+#define _SWAP_FAST_4_r33 1570
+#define _SWAP_FAST_5_r01 1571
+#define _SWAP_FAST_5_r11 1572
+#define _SWAP_FAST_5_r22 1573
+#define _SWAP_FAST_5_r33 1574
+#define _SWAP_FAST_6_r01 1575
+#define _SWAP_FAST_6_r11 1576
+#define _SWAP_FAST_6_r22 1577
+#define _SWAP_FAST_6_r33 1578
+#define _SWAP_FAST_7_r01 1579
+#define _SWAP_FAST_7_r11 1580
+#define _SWAP_FAST_7_r22 1581
+#define _SWAP_FAST_7_r33 1582
+#define _TIER2_RESUME_CHECK_r00 1583
+#define _TIER2_RESUME_CHECK_r11 1584
+#define _TIER2_RESUME_CHECK_r22 1585
+#define _TIER2_RESUME_CHECK_r33 1586
+#define _TO_BOOL_r11 1587
+#define _TO_BOOL_BOOL_r01 1588
+#define _TO_BOOL_BOOL_r11 1589
+#define _TO_BOOL_BOOL_r22 1590
+#define _TO_BOOL_BOOL_r33 1591
+#define _TO_BOOL_INT_r02 1592
+#define _TO_BOOL_INT_r12 1593
+#define _TO_BOOL_INT_r23 1594
+#define _TO_BOOL_LIST_r02 1595
+#define _TO_BOOL_LIST_r12 1596
+#define _TO_BOOL_LIST_r23 1597
+#define _TO_BOOL_NONE_r01 1598
+#define _TO_BOOL_NONE_r11 1599
+#define _TO_BOOL_NONE_r22 1600
+#define _TO_BOOL_NONE_r33 1601
+#define _TO_BOOL_STR_r02 1602
+#define _TO_BOOL_STR_r12 1603
+#define _TO_BOOL_STR_r23 1604
+#define _TRACE_RECORD_r00 1605
+#define _UNARY_INVERT_r12 1606
+#define _UNARY_NEGATIVE_r12 1607
+#define _UNARY_NEGATIVE_FLOAT_INPLACE_r02 1608
+#define _UNARY_NEGATIVE_FLOAT_INPLACE_r12 1609
+#define _UNARY_NEGATIVE_FLOAT_INPLACE_r23 1610
+#define _UNARY_NOT_r01 1611
+#define _UNARY_NOT_r11 1612
+#define _UNARY_NOT_r22 1613
+#define _UNARY_NOT_r33 1614
+#define _UNPACK_EX_r10 1615
+#define _UNPACK_SEQUENCE_r10 1616
+#define _UNPACK_SEQUENCE_LIST_r10 1617
+#define _UNPACK_SEQUENCE_TUPLE_r10 1618
+#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1619
+#define _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE_r03 1620
+#define _UNPACK_SEQUENCE_UNIQUE_THREE_TUPLE_r13 1621
+#define _UNPACK_SEQUENCE_UNIQUE_TUPLE_r10 1622
+#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r02 1623
+#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r12 1624
+#define _UNPACK_SEQUENCE_UNIQUE_TWO_TUPLE_r23 1625
+#define _WITH_EXCEPT_START_r33 1626
+#define _YIELD_VALUE_r11 1627
+#define MAX_UOP_REGS_ID 1627
 
 #ifdef __cplusplus
 }
index fbe9875ed8917782eda7b636345dcc98c817ff88..8465fd4345e9a53138399c79b492d7b2160320d6 100644 (file)
@@ -220,6 +220,7 @@ const uint32_t _PyUop_Flags[MAX_UOP_ID+1] = {
     [_LOAD_ATTR] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
     [_GUARD_TYPE_VERSION] = HAS_EXIT_FLAG,
     [_GUARD_TYPE_VERSION_LOCKED] = HAS_EXIT_FLAG,
+    [_GUARD_TYPE] = HAS_EXIT_FLAG,
     [_CHECK_MANAGED_OBJECT_HAS_VALUES] = HAS_EXIT_FLAG,
     [_LOAD_ATTR_INSTANCE_VALUE] = HAS_DEOPT_FLAG,
     [_LOAD_ATTR_MODULE] = HAS_EXIT_FLAG,
@@ -256,7 +257,13 @@ const uint32_t _PyUop_Flags[MAX_UOP_ID+1] = {
     [_MATCH_SEQUENCE] = 0,
     [_MATCH_KEYS] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
     [_GET_ITER] = HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
+    [_GUARD_ITERATOR] = HAS_EXIT_FLAG,
+    [_GUARD_ITER_VIRTUAL] = HAS_EXIT_FLAG,
+    [_PUSH_TAGGED_ZERO] = 0,
+    [_GET_ITER_TRAD] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
     [_FOR_ITER_TIER_TWO] = HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
+    [_GUARD_NOS_ITER_VIRTUAL] = HAS_EXIT_FLAG,
+    [_FOR_ITER_VIRTUAL_TIER_TWO] = HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
     [_ITER_CHECK_LIST] = HAS_EXIT_FLAG,
     [_GUARD_NOT_EXHAUSTED_LIST] = HAS_EXIT_FLAG,
     [_ITER_NEXT_LIST_TIER_TWO] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
@@ -2100,6 +2107,15 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = {
             { 3, 3, _GUARD_TYPE_VERSION_LOCKED_r33 },
         },
     },
+    [_GUARD_TYPE] = {
+        .best = { 0, 1, 2, 3 },
+        .entries = {
+            { 1, 0, _GUARD_TYPE_r01 },
+            { 1, 1, _GUARD_TYPE_r11 },
+            { 2, 2, _GUARD_TYPE_r22 },
+            { 3, 3, _GUARD_TYPE_r33 },
+        },
+    },
     [_CHECK_MANAGED_OBJECT_HAS_VALUES] = {
         .best = { 0, 1, 2, 3 },
         .entries = {
@@ -2424,6 +2440,42 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = {
             { -1, -1, -1 },
         },
     },
+    [_GUARD_ITERATOR] = {
+        .best = { 0, 1, 2, 3 },
+        .entries = {
+            { 1, 0, _GUARD_ITERATOR_r01 },
+            { 1, 1, _GUARD_ITERATOR_r11 },
+            { 2, 2, _GUARD_ITERATOR_r22 },
+            { 3, 3, _GUARD_ITERATOR_r33 },
+        },
+    },
+    [_GUARD_ITER_VIRTUAL] = {
+        .best = { 0, 1, 2, 3 },
+        .entries = {
+            { 1, 0, _GUARD_ITER_VIRTUAL_r01 },
+            { 1, 1, _GUARD_ITER_VIRTUAL_r11 },
+            { 2, 2, _GUARD_ITER_VIRTUAL_r22 },
+            { 3, 3, _GUARD_ITER_VIRTUAL_r33 },
+        },
+    },
+    [_PUSH_TAGGED_ZERO] = {
+        .best = { 0, 1, 2, 2 },
+        .entries = {
+            { 1, 0, _PUSH_TAGGED_ZERO_r01 },
+            { 2, 1, _PUSH_TAGGED_ZERO_r12 },
+            { 3, 2, _PUSH_TAGGED_ZERO_r23 },
+            { -1, -1, -1 },
+        },
+    },
+    [_GET_ITER_TRAD] = {
+        .best = { 1, 1, 1, 1 },
+        .entries = {
+            { -1, -1, -1 },
+            { 2, 1, _GET_ITER_TRAD_r12 },
+            { -1, -1, -1 },
+            { -1, -1, -1 },
+        },
+    },
     [_FOR_ITER_TIER_TWO] = {
         .best = { 2, 2, 2, 2 },
         .entries = {
@@ -2433,6 +2485,24 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = {
             { -1, -1, -1 },
         },
     },
+    [_GUARD_NOS_ITER_VIRTUAL] = {
+        .best = { 0, 1, 2, 3 },
+        .entries = {
+            { 2, 0, _GUARD_NOS_ITER_VIRTUAL_r02 },
+            { 2, 1, _GUARD_NOS_ITER_VIRTUAL_r12 },
+            { 2, 2, _GUARD_NOS_ITER_VIRTUAL_r22 },
+            { 3, 3, _GUARD_NOS_ITER_VIRTUAL_r33 },
+        },
+    },
+    [_FOR_ITER_VIRTUAL_TIER_TWO] = {
+        .best = { 2, 2, 2, 2 },
+        .entries = {
+            { -1, -1, -1 },
+            { -1, -1, -1 },
+            { 3, 2, _FOR_ITER_VIRTUAL_TIER_TWO_r23 },
+            { -1, -1, -1 },
+        },
+    },
     [_ITER_CHECK_LIST] = {
         .best = { 0, 1, 2, 3 },
         .entries = {
@@ -4239,6 +4309,10 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = {
     [_GUARD_TYPE_VERSION_LOCKED_r11] = _GUARD_TYPE_VERSION_LOCKED,
     [_GUARD_TYPE_VERSION_LOCKED_r22] = _GUARD_TYPE_VERSION_LOCKED,
     [_GUARD_TYPE_VERSION_LOCKED_r33] = _GUARD_TYPE_VERSION_LOCKED,
+    [_GUARD_TYPE_r01] = _GUARD_TYPE,
+    [_GUARD_TYPE_r11] = _GUARD_TYPE,
+    [_GUARD_TYPE_r22] = _GUARD_TYPE,
+    [_GUARD_TYPE_r33] = _GUARD_TYPE,
     [_CHECK_MANAGED_OBJECT_HAS_VALUES_r01] = _CHECK_MANAGED_OBJECT_HAS_VALUES,
     [_CHECK_MANAGED_OBJECT_HAS_VALUES_r11] = _CHECK_MANAGED_OBJECT_HAS_VALUES,
     [_CHECK_MANAGED_OBJECT_HAS_VALUES_r22] = _CHECK_MANAGED_OBJECT_HAS_VALUES,
@@ -4311,7 +4385,24 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = {
     [_MATCH_SEQUENCE_r23] = _MATCH_SEQUENCE,
     [_MATCH_KEYS_r23] = _MATCH_KEYS,
     [_GET_ITER_r12] = _GET_ITER,
+    [_GUARD_ITERATOR_r01] = _GUARD_ITERATOR,
+    [_GUARD_ITERATOR_r11] = _GUARD_ITERATOR,
+    [_GUARD_ITERATOR_r22] = _GUARD_ITERATOR,
+    [_GUARD_ITERATOR_r33] = _GUARD_ITERATOR,
+    [_GUARD_ITER_VIRTUAL_r01] = _GUARD_ITER_VIRTUAL,
+    [_GUARD_ITER_VIRTUAL_r11] = _GUARD_ITER_VIRTUAL,
+    [_GUARD_ITER_VIRTUAL_r22] = _GUARD_ITER_VIRTUAL,
+    [_GUARD_ITER_VIRTUAL_r33] = _GUARD_ITER_VIRTUAL,
+    [_PUSH_TAGGED_ZERO_r01] = _PUSH_TAGGED_ZERO,
+    [_PUSH_TAGGED_ZERO_r12] = _PUSH_TAGGED_ZERO,
+    [_PUSH_TAGGED_ZERO_r23] = _PUSH_TAGGED_ZERO,
+    [_GET_ITER_TRAD_r12] = _GET_ITER_TRAD,
     [_FOR_ITER_TIER_TWO_r23] = _FOR_ITER_TIER_TWO,
+    [_GUARD_NOS_ITER_VIRTUAL_r02] = _GUARD_NOS_ITER_VIRTUAL,
+    [_GUARD_NOS_ITER_VIRTUAL_r12] = _GUARD_NOS_ITER_VIRTUAL,
+    [_GUARD_NOS_ITER_VIRTUAL_r22] = _GUARD_NOS_ITER_VIRTUAL,
+    [_GUARD_NOS_ITER_VIRTUAL_r33] = _GUARD_NOS_ITER_VIRTUAL,
+    [_FOR_ITER_VIRTUAL_TIER_TWO_r23] = _FOR_ITER_VIRTUAL_TIER_TWO,
     [_ITER_CHECK_LIST_r02] = _ITER_CHECK_LIST,
     [_ITER_CHECK_LIST_r12] = _ITER_CHECK_LIST,
     [_ITER_CHECK_LIST_r22] = _ITER_CHECK_LIST,
@@ -5076,6 +5167,8 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
     [_FOR_ITER_GEN_FRAME_r23] = "_FOR_ITER_GEN_FRAME_r23",
     [_FOR_ITER_TIER_TWO] = "_FOR_ITER_TIER_TWO",
     [_FOR_ITER_TIER_TWO_r23] = "_FOR_ITER_TIER_TWO_r23",
+    [_FOR_ITER_VIRTUAL_TIER_TWO] = "_FOR_ITER_VIRTUAL_TIER_TWO",
+    [_FOR_ITER_VIRTUAL_TIER_TWO_r23] = "_FOR_ITER_VIRTUAL_TIER_TWO_r23",
     [_GET_AITER] = "_GET_AITER",
     [_GET_AITER_r11] = "_GET_AITER_r11",
     [_GET_ANEXT] = "_GET_ANEXT",
@@ -5084,6 +5177,8 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
     [_GET_AWAITABLE_r11] = "_GET_AWAITABLE_r11",
     [_GET_ITER] = "_GET_ITER",
     [_GET_ITER_r12] = "_GET_ITER_r12",
+    [_GET_ITER_TRAD] = "_GET_ITER_TRAD",
+    [_GET_ITER_TRAD_r12] = "_GET_ITER_TRAD_r12",
     [_GET_LEN] = "_GET_LEN",
     [_GET_LEN_r12] = "_GET_LEN_r12",
     [_GUARD_BINARY_OP_EXTEND] = "_GUARD_BINARY_OP_EXTEND",
@@ -5271,6 +5366,16 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
     [_GUARD_IS_TRUE_POP_r10] = "_GUARD_IS_TRUE_POP_r10",
     [_GUARD_IS_TRUE_POP_r21] = "_GUARD_IS_TRUE_POP_r21",
     [_GUARD_IS_TRUE_POP_r32] = "_GUARD_IS_TRUE_POP_r32",
+    [_GUARD_ITERATOR] = "_GUARD_ITERATOR",
+    [_GUARD_ITERATOR_r01] = "_GUARD_ITERATOR_r01",
+    [_GUARD_ITERATOR_r11] = "_GUARD_ITERATOR_r11",
+    [_GUARD_ITERATOR_r22] = "_GUARD_ITERATOR_r22",
+    [_GUARD_ITERATOR_r33] = "_GUARD_ITERATOR_r33",
+    [_GUARD_ITER_VIRTUAL] = "_GUARD_ITER_VIRTUAL",
+    [_GUARD_ITER_VIRTUAL_r01] = "_GUARD_ITER_VIRTUAL_r01",
+    [_GUARD_ITER_VIRTUAL_r11] = "_GUARD_ITER_VIRTUAL_r11",
+    [_GUARD_ITER_VIRTUAL_r22] = "_GUARD_ITER_VIRTUAL_r22",
+    [_GUARD_ITER_VIRTUAL_r33] = "_GUARD_ITER_VIRTUAL_r33",
     [_GUARD_KEYS_VERSION] = "_GUARD_KEYS_VERSION",
     [_GUARD_KEYS_VERSION_r01] = "_GUARD_KEYS_VERSION_r01",
     [_GUARD_KEYS_VERSION_r11] = "_GUARD_KEYS_VERSION_r11",
@@ -5306,6 +5411,11 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
     [_GUARD_NOS_INT_r12] = "_GUARD_NOS_INT_r12",
     [_GUARD_NOS_INT_r22] = "_GUARD_NOS_INT_r22",
     [_GUARD_NOS_INT_r33] = "_GUARD_NOS_INT_r33",
+    [_GUARD_NOS_ITER_VIRTUAL] = "_GUARD_NOS_ITER_VIRTUAL",
+    [_GUARD_NOS_ITER_VIRTUAL_r02] = "_GUARD_NOS_ITER_VIRTUAL_r02",
+    [_GUARD_NOS_ITER_VIRTUAL_r12] = "_GUARD_NOS_ITER_VIRTUAL_r12",
+    [_GUARD_NOS_ITER_VIRTUAL_r22] = "_GUARD_NOS_ITER_VIRTUAL_r22",
+    [_GUARD_NOS_ITER_VIRTUAL_r33] = "_GUARD_NOS_ITER_VIRTUAL_r33",
     [_GUARD_NOS_LIST] = "_GUARD_NOS_LIST",
     [_GUARD_NOS_LIST_r02] = "_GUARD_NOS_LIST_r02",
     [_GUARD_NOS_LIST_r12] = "_GUARD_NOS_LIST_r12",
@@ -5426,6 +5536,11 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
     [_GUARD_TOS_UNICODE_r11] = "_GUARD_TOS_UNICODE_r11",
     [_GUARD_TOS_UNICODE_r22] = "_GUARD_TOS_UNICODE_r22",
     [_GUARD_TOS_UNICODE_r33] = "_GUARD_TOS_UNICODE_r33",
+    [_GUARD_TYPE] = "_GUARD_TYPE",
+    [_GUARD_TYPE_r01] = "_GUARD_TYPE_r01",
+    [_GUARD_TYPE_r11] = "_GUARD_TYPE_r11",
+    [_GUARD_TYPE_r22] = "_GUARD_TYPE_r22",
+    [_GUARD_TYPE_r33] = "_GUARD_TYPE_r33",
     [_GUARD_TYPE_VERSION] = "_GUARD_TYPE_VERSION",
     [_GUARD_TYPE_VERSION_r01] = "_GUARD_TYPE_VERSION_r01",
     [_GUARD_TYPE_VERSION_r11] = "_GUARD_TYPE_VERSION_r11",
@@ -5761,6 +5876,10 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
     [_PUSH_NULL_r23] = "_PUSH_NULL_r23",
     [_PUSH_NULL_CONDITIONAL] = "_PUSH_NULL_CONDITIONAL",
     [_PUSH_NULL_CONDITIONAL_r00] = "_PUSH_NULL_CONDITIONAL_r00",
+    [_PUSH_TAGGED_ZERO] = "_PUSH_TAGGED_ZERO",
+    [_PUSH_TAGGED_ZERO_r01] = "_PUSH_TAGGED_ZERO_r01",
+    [_PUSH_TAGGED_ZERO_r12] = "_PUSH_TAGGED_ZERO_r12",
+    [_PUSH_TAGGED_ZERO_r23] = "_PUSH_TAGGED_ZERO_r23",
     [_PY_FRAME_EX] = "_PY_FRAME_EX",
     [_PY_FRAME_EX_r31] = "_PY_FRAME_EX_r31",
     [_PY_FRAME_GENERAL] = "_PY_FRAME_GENERAL",
@@ -6354,6 +6473,8 @@ int _PyUop_num_popped(int opcode, int oparg)
             return 0;
         case _GUARD_TYPE_VERSION_LOCKED:
             return 0;
+        case _GUARD_TYPE:
+            return 0;
         case _CHECK_MANAGED_OBJECT_HAS_VALUES:
             return 0;
         case _LOAD_ATTR_INSTANCE_VALUE:
@@ -6426,8 +6547,20 @@ int _PyUop_num_popped(int opcode, int oparg)
             return 0;
         case _GET_ITER:
             return 1;
+        case _GUARD_ITERATOR:
+            return 0;
+        case _GUARD_ITER_VIRTUAL:
+            return 0;
+        case _PUSH_TAGGED_ZERO:
+            return 0;
+        case _GET_ITER_TRAD:
+            return 1;
         case _FOR_ITER_TIER_TWO:
             return 0;
+        case _GUARD_NOS_ITER_VIRTUAL:
+            return 0;
+        case _FOR_ITER_VIRTUAL_TIER_TWO:
+            return 0;
         case _ITER_CHECK_LIST:
             return 0;
         case _GUARD_NOT_EXHAUSTED_LIST:
index e33f92295fb77111553130376a0adefec4eedf76..d51132be1a6656387aa8f8a08c80b24a05e50a48 100644 (file)
@@ -306,6 +306,11 @@ typedef Py_hash_t (*hashfunc)(PyObject *);
 typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int);
 typedef PyObject *(*getiterfunc) (PyObject *);
 typedef PyObject *(*iternextfunc) (PyObject *);
+typedef struct {
+    PyObject *object;
+    Py_ssize_t index;
+} _PyObjectIndexPair;
+typedef _PyObjectIndexPair (*_Py_iteritemfunc) (PyObject *, Py_ssize_t index);
 typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *);
 typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *);
 typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
index ac6d4d964d3b5e833f4dd614bd7e7d25d11bbe60..53a7eaf0de57ebf9b54d893c2184d04c50f68e9a 100644 (file)
@@ -180,42 +180,45 @@ extern "C" {
 #define FOR_ITER_LIST                          175
 #define FOR_ITER_RANGE                         176
 #define FOR_ITER_TUPLE                         177
-#define JUMP_BACKWARD_JIT                      178
-#define JUMP_BACKWARD_NO_JIT                   179
-#define LOAD_ATTR_CLASS                        180
-#define LOAD_ATTR_CLASS_WITH_METACLASS_CHECK   181
-#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN      182
-#define LOAD_ATTR_INSTANCE_VALUE               183
-#define LOAD_ATTR_METHOD_LAZY_DICT             184
-#define LOAD_ATTR_METHOD_NO_DICT               185
-#define LOAD_ATTR_METHOD_WITH_VALUES           186
-#define LOAD_ATTR_MODULE                       187
-#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT        188
-#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES    189
-#define LOAD_ATTR_PROPERTY                     190
-#define LOAD_ATTR_SLOT                         191
-#define LOAD_ATTR_WITH_HINT                    192
-#define LOAD_GLOBAL_BUILTIN                    193
-#define LOAD_GLOBAL_MODULE                     194
-#define LOAD_SUPER_ATTR_ATTR                   195
-#define LOAD_SUPER_ATTR_METHOD                 196
-#define RESUME_CHECK                           197
-#define RESUME_CHECK_JIT                       198
-#define SEND_GEN                               199
-#define STORE_ATTR_INSTANCE_VALUE              200
-#define STORE_ATTR_SLOT                        201
-#define STORE_ATTR_WITH_HINT                   202
-#define STORE_SUBSCR_DICT                      203
-#define STORE_SUBSCR_LIST_INT                  204
-#define TO_BOOL_ALWAYS_TRUE                    205
-#define TO_BOOL_BOOL                           206
-#define TO_BOOL_INT                            207
-#define TO_BOOL_LIST                           208
-#define TO_BOOL_NONE                           209
-#define TO_BOOL_STR                            210
-#define UNPACK_SEQUENCE_LIST                   211
-#define UNPACK_SEQUENCE_TUPLE                  212
-#define UNPACK_SEQUENCE_TWO_TUPLE              213
+#define FOR_ITER_VIRTUAL                       178
+#define GET_ITER_SELF                          179
+#define GET_ITER_VIRTUAL                       180
+#define JUMP_BACKWARD_JIT                      181
+#define JUMP_BACKWARD_NO_JIT                   182
+#define LOAD_ATTR_CLASS                        183
+#define LOAD_ATTR_CLASS_WITH_METACLASS_CHECK   184
+#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN      185
+#define LOAD_ATTR_INSTANCE_VALUE               186
+#define LOAD_ATTR_METHOD_LAZY_DICT             187
+#define LOAD_ATTR_METHOD_NO_DICT               188
+#define LOAD_ATTR_METHOD_WITH_VALUES           189
+#define LOAD_ATTR_MODULE                       190
+#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT        191
+#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES    192
+#define LOAD_ATTR_PROPERTY                     193
+#define LOAD_ATTR_SLOT                         194
+#define LOAD_ATTR_WITH_HINT                    195
+#define LOAD_GLOBAL_BUILTIN                    196
+#define LOAD_GLOBAL_MODULE                     197
+#define LOAD_SUPER_ATTR_ATTR                   198
+#define LOAD_SUPER_ATTR_METHOD                 199
+#define RESUME_CHECK                           200
+#define RESUME_CHECK_JIT                       201
+#define SEND_GEN                               202
+#define STORE_ATTR_INSTANCE_VALUE              203
+#define STORE_ATTR_SLOT                        204
+#define STORE_ATTR_WITH_HINT                   205
+#define STORE_SUBSCR_DICT                      206
+#define STORE_SUBSCR_LIST_INT                  207
+#define TO_BOOL_ALWAYS_TRUE                    208
+#define TO_BOOL_BOOL                           209
+#define TO_BOOL_INT                            210
+#define TO_BOOL_LIST                           211
+#define TO_BOOL_NONE                           212
+#define TO_BOOL_STR                            213
+#define UNPACK_SEQUENCE_LIST                   214
+#define UNPACK_SEQUENCE_TUPLE                  215
+#define UNPACK_SEQUENCE_TWO_TUPLE              216
 #define INSTRUMENTED_END_FOR                   233
 #define INSTRUMENTED_POP_ITER                  234
 #define INSTRUMENTED_END_SEND                  235
index f5954e4372a980a80456019f298e333a850a0e60..6b5357a31511905d1c1e978afe2bd5fc3d478d44 100644 (file)
@@ -86,11 +86,16 @@ _specializations = frozendict(
             "JUMP_BACKWARD_NO_JIT",
             "JUMP_BACKWARD_JIT",
     ),
+    GET_ITER=(
+            "GET_ITER_SELF",
+            "GET_ITER_VIRTUAL",
+    ),
     FOR_ITER=(
             "FOR_ITER_LIST",
             "FOR_ITER_TUPLE",
             "FOR_ITER_RANGE",
             "FOR_ITER_GEN",
+            "FOR_ITER_VIRTUAL",
     ),
     CALL=(
             "CALL_BOUND_METHOD_EXACT_ARGS",
@@ -176,42 +181,45 @@ _specialized_opmap = frozendict(
     FOR_ITER_LIST=175,
     FOR_ITER_RANGE=176,
     FOR_ITER_TUPLE=177,
-    JUMP_BACKWARD_JIT=178,
-    JUMP_BACKWARD_NO_JIT=179,
-    LOAD_ATTR_CLASS=180,
-    LOAD_ATTR_CLASS_WITH_METACLASS_CHECK=181,
-    LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN=182,
-    LOAD_ATTR_INSTANCE_VALUE=183,
-    LOAD_ATTR_METHOD_LAZY_DICT=184,
-    LOAD_ATTR_METHOD_NO_DICT=185,
-    LOAD_ATTR_METHOD_WITH_VALUES=186,
-    LOAD_ATTR_MODULE=187,
-    LOAD_ATTR_NONDESCRIPTOR_NO_DICT=188,
-    LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES=189,
-    LOAD_ATTR_PROPERTY=190,
-    LOAD_ATTR_SLOT=191,
-    LOAD_ATTR_WITH_HINT=192,
-    LOAD_GLOBAL_BUILTIN=193,
-    LOAD_GLOBAL_MODULE=194,
-    LOAD_SUPER_ATTR_ATTR=195,
-    LOAD_SUPER_ATTR_METHOD=196,
-    RESUME_CHECK=197,
-    RESUME_CHECK_JIT=198,
-    SEND_GEN=199,
-    STORE_ATTR_INSTANCE_VALUE=200,
-    STORE_ATTR_SLOT=201,
-    STORE_ATTR_WITH_HINT=202,
-    STORE_SUBSCR_DICT=203,
-    STORE_SUBSCR_LIST_INT=204,
-    TO_BOOL_ALWAYS_TRUE=205,
-    TO_BOOL_BOOL=206,
-    TO_BOOL_INT=207,
-    TO_BOOL_LIST=208,
-    TO_BOOL_NONE=209,
-    TO_BOOL_STR=210,
-    UNPACK_SEQUENCE_LIST=211,
-    UNPACK_SEQUENCE_TUPLE=212,
-    UNPACK_SEQUENCE_TWO_TUPLE=213,
+    FOR_ITER_VIRTUAL=178,
+    GET_ITER_SELF=179,
+    GET_ITER_VIRTUAL=180,
+    JUMP_BACKWARD_JIT=181,
+    JUMP_BACKWARD_NO_JIT=182,
+    LOAD_ATTR_CLASS=183,
+    LOAD_ATTR_CLASS_WITH_METACLASS_CHECK=184,
+    LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN=185,
+    LOAD_ATTR_INSTANCE_VALUE=186,
+    LOAD_ATTR_METHOD_LAZY_DICT=187,
+    LOAD_ATTR_METHOD_NO_DICT=188,
+    LOAD_ATTR_METHOD_WITH_VALUES=189,
+    LOAD_ATTR_MODULE=190,
+    LOAD_ATTR_NONDESCRIPTOR_NO_DICT=191,
+    LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES=192,
+    LOAD_ATTR_PROPERTY=193,
+    LOAD_ATTR_SLOT=194,
+    LOAD_ATTR_WITH_HINT=195,
+    LOAD_GLOBAL_BUILTIN=196,
+    LOAD_GLOBAL_MODULE=197,
+    LOAD_SUPER_ATTR_ATTR=198,
+    LOAD_SUPER_ATTR_METHOD=199,
+    RESUME_CHECK=200,
+    RESUME_CHECK_JIT=201,
+    SEND_GEN=202,
+    STORE_ATTR_INSTANCE_VALUE=203,
+    STORE_ATTR_SLOT=204,
+    STORE_ATTR_WITH_HINT=205,
+    STORE_SUBSCR_DICT=206,
+    STORE_SUBSCR_LIST_INT=207,
+    TO_BOOL_ALWAYS_TRUE=208,
+    TO_BOOL_BOOL=209,
+    TO_BOOL_INT=210,
+    TO_BOOL_LIST=211,
+    TO_BOOL_NONE=212,
+    TO_BOOL_STR=213,
+    UNPACK_SEQUENCE_LIST=214,
+    UNPACK_SEQUENCE_TUPLE=215,
+    UNPACK_SEQUENCE_TWO_TUPLE=216,
 )
 
 opmap = frozendict(
index d53b94d89b46f74daa733bb9035da9da1f5f52db..8466814d2257c39c83e02f4004849da461ea73c9 100644 (file)
@@ -69,6 +69,9 @@ _cache_format = frozendict(
     FOR_ITER=frozendict(
         counter=1,
     ),
+    GET_ITER=frozendict(
+        counter=1,
+    ),
     LOAD_SUPER_ATTR=frozendict(
         counter=1,
     ),
index ecaa5c3a4118e53256b8425a485e33e5a99cebe2..59266b000ed4dfaf9521cb0d956da0f4e397d73a 100644 (file)
@@ -371,6 +371,75 @@ class TestUops(unittest.TestCase):
         # look for indirect evidence: the += operator
         self.assertIn("_BINARY_OP_ADD_INT", uops)
 
+    def test_get_iter_list(self):
+        l = list(range(10))
+        def testfunc(n):
+            total = 0
+            while n:
+                n -= 1
+                total += n
+                for i in l:
+                    break
+            return total
+
+        total = testfunc(TIER2_THRESHOLD)
+        self.assertEqual(total, sum(range(TIER2_THRESHOLD)))
+        ex = get_first_executor(testfunc)
+        self.assertIsNotNone(ex)
+        uops = get_opnames(ex)
+        self.assertIn("_PUSH_TAGGED_ZERO", uops)
+        self.assertNotIn("_GET_ITER", uops)
+        self.assertNotIn("_GET_ITER_TRAD", uops)
+        self.assertNotIn("_GET_ITER_VIRTUAL", uops)
+        self.assertNotIn("_GET_ITER_SELF", uops)
+
+    def test_get_iter_gen(self):
+        def gen():
+            while True:
+                yield 1
+
+        def testfunc(n):
+            total = 0
+            while n:
+                n -= 1
+                total += n
+                for i in gen():
+                    break
+            return total
+
+        total = testfunc(TIER2_THRESHOLD)
+        self.assertEqual(total, sum(range(TIER2_THRESHOLD)))
+        ex = get_first_executor(testfunc)
+        self.assertIsNotNone(ex)
+        uops = get_opnames(ex)
+        self.assertIn("_PUSH_NULL", uops)
+        self.assertNotIn("_GET_ITER", uops)
+        self.assertNotIn("_GET_ITER_TRAD", uops)
+        self.assertNotIn("_GET_ITER_VIRTUAL", uops)
+        self.assertNotIn("_GET_ITER_SELF", uops)
+
+    def test_get_iter_trad(self):
+        d = {v:v for v in range(10)}
+        def testfunc(n):
+            total = 0
+            while n:
+                n -= 1
+                total += n
+                for i in d:
+                    break
+            return total
+
+        total = testfunc(TIER2_THRESHOLD)
+        self.assertEqual(total, sum(range(TIER2_THRESHOLD)))
+        ex = get_first_executor(testfunc)
+        self.assertIsNotNone(ex)
+        uops = get_opnames(ex)
+        self.assertIn("_GET_ITER_TRAD", uops)
+        self.assertNotIn("_GET_ITER", uops)
+        self.assertNotIn("_GET_ITER_VIRTUAL", uops)
+        self.assertNotIn("_GET_ITER_SELF", uops)
+
+
     def test_for_iter_range(self):
         def testfunc(n):
             total = 0
index f8bbcd35ca7c099b6abcc795200d67e2b6a4d40f..cc9bc918b616e2b2bbf90327d2a162e9aff6b3b7 100644 (file)
@@ -877,6 +877,7 @@ Disassembly of <code object foo at 0x..., file "%s", line %d>:
 dis_nested_2 = """%s
 Disassembly of <code object <genexpr> at 0x..., file "%s", line %d>:
   --           COPY_FREE_VARS           1
+               RESUME                   4
 
 %4d           LOAD_FAST                0 (.0)
                GET_ITER                 0
@@ -889,7 +890,7 @@ Disassembly of <code object <genexpr> at 0x..., file "%s", line %d>:
                LOAD_FAST_BORROW         1 (z)
                BINARY_OP                0 (+)
                YIELD_VALUE              0
-               RESUME                   5
+               RESUME                   9
                POP_TOP
                JUMP_BACKWARD           17 (to L2)
        L3:     END_FOR
@@ -936,7 +937,7 @@ dis_loop_test_quickened_code = """\
               LIST_EXTEND              1
               LOAD_SMALL_INT           3
               BINARY_OP                5 (*)
-              GET_ITER                 0
+              GET_ITER_VIRTUAL         0
       L1:     FOR_ITER_LIST           14 (to L2)
               STORE_FAST               0 (i)
 
@@ -1443,7 +1444,7 @@ class DisTests(DisTestBase):
                     caches = list(self.get_cached_values(quickened, adaptive))
                     for cache in caches:
                         self.assertRegex(cache, pattern)
-                    total_caches = 22
+                    total_caches = 23
                     empty_caches = 7
                     self.assertEqual(caches.count(""), empty_caches)
                     self.assertEqual(len(caches), total_caches)
@@ -1859,131 +1860,131 @@ expected_opinfo_jumpy = [
   make_inst(opname='LOAD_GLOBAL', arg=1, argval='range', argrepr='range + NULL', offset=4, start_offset=4, starts_line=True, line_number=3, 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')]),
   make_inst(opname='LOAD_SMALL_INT', arg=10, argval=10, argrepr='', offset=14, start_offset=14, starts_line=False, line_number=3),
   make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=16, start_offset=16, starts_line=False, line_number=3, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='GET_ITER', arg=0, argval=0, argrepr='', offset=24, start_offset=24, starts_line=False, line_number=3),
-  make_inst(opname='FOR_ITER', arg=33, argval=96, argrepr='to L4', offset=26, start_offset=26, starts_line=False, line_number=3, label=1, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='STORE_FAST', arg=0, argval='i', argrepr='i', offset=30, start_offset=30, starts_line=False, line_number=3),
-  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=32, start_offset=32, starts_line=True, line_number=4, 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')]),
-  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=42, start_offset=42, starts_line=False, line_number=4),
-  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=44, start_offset=44, starts_line=False, line_number=4, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=52, start_offset=52, starts_line=False, line_number=4),
-  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=54, start_offset=54, starts_line=True, line_number=5),
-  make_inst(opname='LOAD_SMALL_INT', arg=4, argval=4, argrepr='', offset=56, start_offset=56, starts_line=False, line_number=5),
-  make_inst(opname='COMPARE_OP', arg=18, argval='<', argrepr='bool(<)', offset=58, start_offset=58, starts_line=False, line_number=5, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='POP_JUMP_IF_FALSE', arg=3, argval=72, argrepr='to L2', offset=62, start_offset=62, starts_line=False, line_number=5, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=66, start_offset=66, starts_line=False, line_number=5),
-  make_inst(opname='JUMP_BACKWARD', arg=23, argval=26, argrepr='to L1', offset=68, start_offset=68, starts_line=True, line_number=6, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=72, start_offset=72, starts_line=True, line_number=7, label=2),
-  make_inst(opname='LOAD_SMALL_INT', arg=6, argval=6, argrepr='', offset=74, start_offset=74, starts_line=False, line_number=7),
-  make_inst(opname='COMPARE_OP', arg=148, argval='>', argrepr='bool(>)', offset=76, start_offset=76, starts_line=False, line_number=7, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='POP_JUMP_IF_TRUE', arg=3, argval=90, argrepr='to L3', offset=80, start_offset=80, starts_line=False, line_number=7, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=84, start_offset=84, starts_line=False, line_number=7),
-  make_inst(opname='JUMP_BACKWARD', arg=32, argval=26, argrepr='to L1', offset=86, start_offset=86, starts_line=False, line_number=7, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=90, start_offset=90, starts_line=True, line_number=8, label=3),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=92, start_offset=92, starts_line=False, line_number=8),
-  make_inst(opname='JUMP_FORWARD', arg=13, argval=122, argrepr='to L5', offset=94, start_offset=94, starts_line=False, line_number=8),
-  make_inst(opname='END_FOR', arg=None, argval=None, argrepr='', offset=96, start_offset=96, starts_line=True, line_number=3, label=4),
-  make_inst(opname='POP_ITER', arg=None, argval=None, argrepr='', offset=98, start_offset=98, starts_line=False, line_number=3),
-  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=100, start_offset=100, starts_line=True, line_number=10, 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')]),
-  make_inst(opname='LOAD_CONST', arg=1, argval='I can haz else clause?', argrepr="'I can haz else clause?'", offset=110, start_offset=110, starts_line=False, line_number=10),
-  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=112, start_offset=112, starts_line=False, line_number=10, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=120, start_offset=120, starts_line=False, line_number=10),
-  make_inst(opname='LOAD_FAST_CHECK', arg=0, argval='i', argrepr='i', offset=122, start_offset=122, starts_line=True, line_number=11, label=5),
-  make_inst(opname='TO_BOOL', arg=None, argval=None, argrepr='', offset=124, start_offset=124, starts_line=False, line_number=11, cache_info=[('counter', 1, b'\x00\x00'), ('version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_JUMP_IF_FALSE', arg=40, argval=216, argrepr='to L8', offset=132, start_offset=132, starts_line=False, line_number=11, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=136, start_offset=136, starts_line=False, line_number=11),
-  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=138, start_offset=138, starts_line=True, line_number=12, 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')]),
-  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=148, start_offset=148, starts_line=False, line_number=12),
-  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=150, start_offset=150, starts_line=False, line_number=12, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=158, start_offset=158, starts_line=False, line_number=12),
-  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=160, start_offset=160, starts_line=True, line_number=13),
-  make_inst(opname='LOAD_SMALL_INT', arg=1, argval=1, argrepr='', offset=162, start_offset=162, starts_line=False, line_number=13),
-  make_inst(opname='BINARY_OP', arg=23, argval=23, argrepr='-=', offset=164, start_offset=164, starts_line=False, line_number=13, cache_info=[('counter', 1, b'\x00\x00'), ('descr', 4, b'\x00\x00\x00\x00\x00\x00\x00\x00')]),
-  make_inst(opname='STORE_FAST', arg=0, argval='i', argrepr='i', offset=176, start_offset=176, starts_line=False, line_number=13),
-  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=178, start_offset=178, starts_line=True, line_number=14),
-  make_inst(opname='LOAD_SMALL_INT', arg=6, argval=6, argrepr='', offset=180, start_offset=180, starts_line=False, line_number=14),
-  make_inst(opname='COMPARE_OP', arg=148, argval='>', argrepr='bool(>)', offset=182, start_offset=182, starts_line=False, line_number=14, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='POP_JUMP_IF_FALSE', arg=3, argval=196, argrepr='to L6', offset=186, start_offset=186, starts_line=False, line_number=14, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=190, start_offset=190, starts_line=False, line_number=14),
-  make_inst(opname='JUMP_BACKWARD', arg=37, argval=122, argrepr='to L5', offset=192, start_offset=192, starts_line=True, line_number=15, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=196, start_offset=196, starts_line=True, line_number=16, label=6),
-  make_inst(opname='LOAD_SMALL_INT', arg=4, argval=4, argrepr='', offset=198, start_offset=198, starts_line=False, line_number=16),
-  make_inst(opname='COMPARE_OP', arg=18, argval='<', argrepr='bool(<)', offset=200, start_offset=200, starts_line=False, line_number=16, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='POP_JUMP_IF_TRUE', arg=3, argval=214, argrepr='to L7', offset=204, start_offset=204, starts_line=False, line_number=16, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=208, start_offset=208, starts_line=False, line_number=16),
-  make_inst(opname='JUMP_BACKWARD', arg=46, argval=122, argrepr='to L5', offset=210, start_offset=210, starts_line=False, line_number=16, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='JUMP_FORWARD', arg=11, argval=238, argrepr='to L9', offset=214, start_offset=214, starts_line=True, line_number=17, label=7),
-  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=216, start_offset=216, starts_line=True, line_number=19, label=8, 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')]),
-  make_inst(opname='LOAD_CONST', arg=2, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=226, start_offset=226, starts_line=False, line_number=19),
-  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=228, start_offset=228, starts_line=False, line_number=19, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=236, start_offset=236, starts_line=False, line_number=19),
-  make_inst(opname='NOP', arg=None, argval=None, argrepr='', offset=238, start_offset=238, starts_line=True, line_number=20, label=9),
-  make_inst(opname='LOAD_SMALL_INT', arg=1, argval=1, argrepr='', offset=240, start_offset=240, starts_line=True, line_number=21),
-  make_inst(opname='LOAD_SMALL_INT', arg=0, argval=0, argrepr='', offset=242, start_offset=242, starts_line=False, line_number=21),
-  make_inst(opname='BINARY_OP', arg=11, argval=11, argrepr='/', offset=244, start_offset=244, starts_line=False, line_number=21, cache_info=[('counter', 1, b'\x00\x00'), ('descr', 4, b'\x00\x00\x00\x00\x00\x00\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=256, start_offset=256, starts_line=False, line_number=21),
-  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=258, start_offset=258, starts_line=True, line_number=25),
-  make_inst(opname='COPY', arg=1, argval=1, argrepr='', offset=260, start_offset=260, starts_line=False, line_number=25),
-  make_inst(opname='LOAD_SPECIAL', arg=1, argval=1, argrepr='__exit__', offset=262, start_offset=262, starts_line=False, line_number=25),
-  make_inst(opname='SWAP', arg=2, argval=2, argrepr='', offset=264, start_offset=264, starts_line=False, line_number=25),
-  make_inst(opname='SWAP', arg=3, argval=3, argrepr='', offset=266, start_offset=266, starts_line=False, line_number=25),
-  make_inst(opname='LOAD_SPECIAL', arg=0, argval=0, argrepr='__enter__', offset=268, start_offset=268, starts_line=False, line_number=25),
-  make_inst(opname='CALL', arg=0, argval=0, argrepr='', offset=270, start_offset=270, starts_line=False, line_number=25, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='STORE_FAST', arg=1, argval='dodgy', argrepr='dodgy', offset=278, start_offset=278, starts_line=False, line_number=25),
-  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=280, start_offset=280, starts_line=True, line_number=26, 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')]),
-  make_inst(opname='LOAD_CONST', arg=3, argval='Never reach this', argrepr="'Never reach this'", offset=290, start_offset=290, starts_line=False, line_number=26),
-  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=292, start_offset=292, starts_line=False, line_number=26, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=300, start_offset=300, starts_line=False, line_number=26),
-  make_inst(opname='LOAD_CONST', arg=4, argval=None, argrepr='None', offset=302, start_offset=302, starts_line=True, line_number=25),
-  make_inst(opname='LOAD_CONST', arg=4, argval=None, argrepr='None', offset=304, start_offset=304, starts_line=False, line_number=25),
+  make_inst(opname='GET_ITER', arg=0, argval=0, argrepr='', offset=24, start_offset=24, starts_line=False, line_number=3, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='FOR_ITER', arg=33, argval=98, argrepr='to L4', offset=28, start_offset=28, starts_line=False, line_number=3, label=1, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='STORE_FAST', arg=0, argval='i', argrepr='i', offset=32, start_offset=32, starts_line=False, line_number=3),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=34, start_offset=34, starts_line=True, line_number=4, 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')]),
+  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=44, start_offset=44, starts_line=False, line_number=4),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=46, start_offset=46, starts_line=False, line_number=4, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=54, start_offset=54, starts_line=False, line_number=4),
+  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=56, start_offset=56, starts_line=True, line_number=5),
+  make_inst(opname='LOAD_SMALL_INT', arg=4, argval=4, argrepr='', offset=58, start_offset=58, starts_line=False, line_number=5),
+  make_inst(opname='COMPARE_OP', arg=18, argval='<', argrepr='bool(<)', offset=60, start_offset=60, starts_line=False, line_number=5, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_FALSE', arg=3, argval=74, argrepr='to L2', offset=64, start_offset=64, starts_line=False, line_number=5, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=68, start_offset=68, starts_line=False, line_number=5),
+  make_inst(opname='JUMP_BACKWARD', arg=23, argval=28, argrepr='to L1', offset=70, start_offset=70, starts_line=True, line_number=6, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=74, start_offset=74, starts_line=True, line_number=7, label=2),
+  make_inst(opname='LOAD_SMALL_INT', arg=6, argval=6, argrepr='', offset=76, start_offset=76, starts_line=False, line_number=7),
+  make_inst(opname='COMPARE_OP', arg=148, argval='>', argrepr='bool(>)', offset=78, start_offset=78, starts_line=False, line_number=7, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_TRUE', arg=3, argval=92, argrepr='to L3', offset=82, start_offset=82, starts_line=False, line_number=7, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=86, start_offset=86, starts_line=False, line_number=7),
+  make_inst(opname='JUMP_BACKWARD', arg=32, argval=28, argrepr='to L1', offset=88, start_offset=88, starts_line=False, line_number=7, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=92, start_offset=92, starts_line=True, line_number=8, label=3),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=94, start_offset=94, starts_line=False, line_number=8),
+  make_inst(opname='JUMP_FORWARD', arg=13, argval=124, argrepr='to L5', offset=96, start_offset=96, starts_line=False, line_number=8),
+  make_inst(opname='END_FOR', arg=None, argval=None, argrepr='', offset=98, start_offset=98, starts_line=True, line_number=3, label=4),
+  make_inst(opname='POP_ITER', arg=None, argval=None, argrepr='', offset=100, start_offset=100, starts_line=False, line_number=3),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=102, start_offset=102, starts_line=True, line_number=10, 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')]),
+  make_inst(opname='LOAD_CONST', arg=1, argval='I can haz else clause?', argrepr="'I can haz else clause?'", offset=112, start_offset=112, starts_line=False, line_number=10),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=114, start_offset=114, starts_line=False, line_number=10, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=122, start_offset=122, starts_line=False, line_number=10),
+  make_inst(opname='LOAD_FAST_CHECK', arg=0, argval='i', argrepr='i', offset=124, start_offset=124, starts_line=True, line_number=11, label=5),
+  make_inst(opname='TO_BOOL', arg=None, argval=None, argrepr='', offset=126, start_offset=126, starts_line=False, line_number=11, cache_info=[('counter', 1, b'\x00\x00'), ('version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_FALSE', arg=40, argval=218, argrepr='to L8', offset=134, start_offset=134, starts_line=False, line_number=11, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=138, start_offset=138, starts_line=False, line_number=11),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=140, start_offset=140, starts_line=True, line_number=12, 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')]),
+  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=150, start_offset=150, starts_line=False, line_number=12),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=152, start_offset=152, starts_line=False, line_number=12, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=160, start_offset=160, starts_line=False, line_number=12),
+  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=162, start_offset=162, starts_line=True, line_number=13),
+  make_inst(opname='LOAD_SMALL_INT', arg=1, argval=1, argrepr='', offset=164, start_offset=164, starts_line=False, line_number=13),
+  make_inst(opname='BINARY_OP', arg=23, argval=23, argrepr='-=', offset=166, start_offset=166, starts_line=False, line_number=13, cache_info=[('counter', 1, b'\x00\x00'), ('descr', 4, b'\x00\x00\x00\x00\x00\x00\x00\x00')]),
+  make_inst(opname='STORE_FAST', arg=0, argval='i', argrepr='i', offset=178, start_offset=178, starts_line=False, line_number=13),
+  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=180, start_offset=180, starts_line=True, line_number=14),
+  make_inst(opname='LOAD_SMALL_INT', arg=6, argval=6, argrepr='', offset=182, start_offset=182, starts_line=False, line_number=14),
+  make_inst(opname='COMPARE_OP', arg=148, argval='>', argrepr='bool(>)', offset=184, start_offset=184, starts_line=False, line_number=14, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_FALSE', arg=3, argval=198, argrepr='to L6', offset=188, start_offset=188, starts_line=False, line_number=14, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=192, start_offset=192, starts_line=False, line_number=14),
+  make_inst(opname='JUMP_BACKWARD', arg=37, argval=124, argrepr='to L5', offset=194, start_offset=194, starts_line=True, line_number=15, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=198, start_offset=198, starts_line=True, line_number=16, label=6),
+  make_inst(opname='LOAD_SMALL_INT', arg=4, argval=4, argrepr='', offset=200, start_offset=200, starts_line=False, line_number=16),
+  make_inst(opname='COMPARE_OP', arg=18, argval='<', argrepr='bool(<)', offset=202, start_offset=202, starts_line=False, line_number=16, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_TRUE', arg=3, argval=216, argrepr='to L7', offset=206, start_offset=206, starts_line=False, line_number=16, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=210, start_offset=210, starts_line=False, line_number=16),
+  make_inst(opname='JUMP_BACKWARD', arg=46, argval=124, argrepr='to L5', offset=212, start_offset=212, starts_line=False, line_number=16, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='JUMP_FORWARD', arg=11, argval=240, argrepr='to L9', offset=216, start_offset=216, starts_line=True, line_number=17, label=7),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=218, start_offset=218, starts_line=True, line_number=19, label=8, 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')]),
+  make_inst(opname='LOAD_CONST', arg=2, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=228, start_offset=228, starts_line=False, line_number=19),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=230, start_offset=230, starts_line=False, line_number=19, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=238, start_offset=238, starts_line=False, line_number=19),
+  make_inst(opname='NOP', arg=None, argval=None, argrepr='', offset=240, start_offset=240, starts_line=True, line_number=20, label=9),
+  make_inst(opname='LOAD_SMALL_INT', arg=1, argval=1, argrepr='', offset=242, start_offset=242, starts_line=True, line_number=21),
+  make_inst(opname='LOAD_SMALL_INT', arg=0, argval=0, argrepr='', offset=244, start_offset=244, starts_line=False, line_number=21),
+  make_inst(opname='BINARY_OP', arg=11, argval=11, argrepr='/', offset=246, start_offset=246, starts_line=False, line_number=21, cache_info=[('counter', 1, b'\x00\x00'), ('descr', 4, b'\x00\x00\x00\x00\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=258, start_offset=258, starts_line=False, line_number=21),
+  make_inst(opname='LOAD_FAST_BORROW', arg=0, argval='i', argrepr='i', offset=260, start_offset=260, starts_line=True, line_number=25),
+  make_inst(opname='COPY', arg=1, argval=1, argrepr='', offset=262, start_offset=262, starts_line=False, line_number=25),
+  make_inst(opname='LOAD_SPECIAL', arg=1, argval=1, argrepr='__exit__', offset=264, start_offset=264, starts_line=False, line_number=25),
+  make_inst(opname='SWAP', arg=2, argval=2, argrepr='', offset=266, start_offset=266, starts_line=False, line_number=25),
+  make_inst(opname='SWAP', arg=3, argval=3, argrepr='', offset=268, start_offset=268, starts_line=False, line_number=25),
+  make_inst(opname='LOAD_SPECIAL', arg=0, argval=0, argrepr='__enter__', offset=270, start_offset=270, starts_line=False, line_number=25),
+  make_inst(opname='CALL', arg=0, argval=0, argrepr='', offset=272, start_offset=272, starts_line=False, line_number=25, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='STORE_FAST', arg=1, argval='dodgy', argrepr='dodgy', offset=280, start_offset=280, starts_line=False, line_number=25),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=282, start_offset=282, starts_line=True, line_number=26, 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')]),
+  make_inst(opname='LOAD_CONST', arg=3, argval='Never reach this', argrepr="'Never reach this'", offset=292, start_offset=292, starts_line=False, line_number=26),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=294, start_offset=294, starts_line=False, line_number=26, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=302, start_offset=302, starts_line=False, line_number=26),
+  make_inst(opname='LOAD_CONST', arg=4, argval=None, argrepr='None', offset=304, start_offset=304, starts_line=True, line_number=25),
   make_inst(opname='LOAD_CONST', arg=4, argval=None, argrepr='None', offset=306, start_offset=306, starts_line=False, line_number=25),
-  make_inst(opname='CALL', arg=3, argval=3, argrepr='', offset=308, start_offset=308, starts_line=False, line_number=25, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=316, start_offset=316, starts_line=False, line_number=25),
-  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=318, start_offset=318, starts_line=True, line_number=28, label=10, 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')]),
-  make_inst(opname='LOAD_CONST', arg=6, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=328, start_offset=328, starts_line=False, line_number=28),
-  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=330, start_offset=330, starts_line=False, line_number=28, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=338, start_offset=338, starts_line=False, line_number=28),
-  make_inst(opname='LOAD_CONST', arg=4, argval=None, argrepr='None', offset=340, start_offset=340, starts_line=False, line_number=28),
-  make_inst(opname='RETURN_VALUE', arg=None, argval=None, argrepr='', offset=342, start_offset=342, starts_line=False, line_number=28),
-  make_inst(opname='PUSH_EXC_INFO', arg=None, argval=None, argrepr='', offset=344, start_offset=344, starts_line=True, line_number=25),
-  make_inst(opname='WITH_EXCEPT_START', arg=None, argval=None, argrepr='', offset=346, start_offset=346, starts_line=False, line_number=25),
-  make_inst(opname='TO_BOOL', arg=None, argval=None, argrepr='', offset=348, start_offset=348, starts_line=False, line_number=25, cache_info=[('counter', 1, b'\x00\x00'), ('version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_JUMP_IF_TRUE', arg=2, argval=364, argrepr='to L11', offset=356, start_offset=356, starts_line=False, line_number=25, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=360, start_offset=360, starts_line=False, line_number=25),
-  make_inst(opname='RERAISE', arg=2, argval=2, argrepr='', offset=362, start_offset=362, starts_line=False, line_number=25),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=364, start_offset=364, starts_line=False, line_number=25, label=11),
-  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', offset=366, start_offset=366, starts_line=False, line_number=25),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=368, start_offset=368, starts_line=False, line_number=25),
+  make_inst(opname='LOAD_CONST', arg=4, argval=None, argrepr='None', offset=308, start_offset=308, starts_line=False, line_number=25),
+  make_inst(opname='CALL', arg=3, argval=3, argrepr='', offset=310, start_offset=310, starts_line=False, line_number=25, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=318, start_offset=318, starts_line=False, line_number=25),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=320, start_offset=320, starts_line=True, line_number=28, label=10, 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')]),
+  make_inst(opname='LOAD_CONST', arg=6, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=330, start_offset=330, starts_line=False, line_number=28),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=332, start_offset=332, starts_line=False, line_number=28, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=340, start_offset=340, starts_line=False, line_number=28),
+  make_inst(opname='LOAD_CONST', arg=4, argval=None, argrepr='None', offset=342, start_offset=342, starts_line=False, line_number=28),
+  make_inst(opname='RETURN_VALUE', arg=None, argval=None, argrepr='', offset=344, start_offset=344, starts_line=False, line_number=28),
+  make_inst(opname='PUSH_EXC_INFO', arg=None, argval=None, argrepr='', offset=346, start_offset=346, starts_line=True, line_number=25),
+  make_inst(opname='WITH_EXCEPT_START', arg=None, argval=None, argrepr='', offset=348, start_offset=348, starts_line=False, line_number=25),
+  make_inst(opname='TO_BOOL', arg=None, argval=None, argrepr='', offset=350, start_offset=350, starts_line=False, line_number=25, cache_info=[('counter', 1, b'\x00\x00'), ('version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_JUMP_IF_TRUE', arg=2, argval=366, argrepr='to L11', offset=358, start_offset=358, starts_line=False, line_number=25, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=362, start_offset=362, starts_line=False, line_number=25),
+  make_inst(opname='RERAISE', arg=2, argval=2, argrepr='', offset=364, start_offset=364, starts_line=False, line_number=25),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=366, start_offset=366, starts_line=False, line_number=25, label=11),
+  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', offset=368, start_offset=368, starts_line=False, line_number=25),
   make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=370, start_offset=370, starts_line=False, line_number=25),
   make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=372, start_offset=372, starts_line=False, line_number=25),
-  make_inst(opname='JUMP_BACKWARD_NO_INTERRUPT', arg=29, argval=318, argrepr='to L10', offset=374, start_offset=374, starts_line=False, line_number=25),
-  make_inst(opname='COPY', arg=3, argval=3, argrepr='', offset=376, start_offset=376, starts_line=True, line_number=None),
-  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', offset=378, start_offset=378, starts_line=False, line_number=None),
-  make_inst(opname='RERAISE', arg=1, argval=1, argrepr='', offset=380, start_offset=380, starts_line=False, line_number=None),
-  make_inst(opname='PUSH_EXC_INFO', arg=None, argval=None, argrepr='', offset=382, start_offset=382, starts_line=False, line_number=None),
-  make_inst(opname='LOAD_GLOBAL', arg=4, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=384, start_offset=384, starts_line=True, line_number=22, 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')]),
-  make_inst(opname='CHECK_EXC_MATCH', arg=None, argval=None, argrepr='', offset=394, start_offset=394, starts_line=False, line_number=22),
-  make_inst(opname='POP_JUMP_IF_FALSE', arg=15, argval=430, argrepr='to L12', offset=396, start_offset=396, starts_line=False, line_number=22, cache_info=[('counter', 1, b'\x00\x00')]),
-  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=400, start_offset=400, starts_line=False, line_number=22),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=402, start_offset=402, starts_line=False, line_number=22),
-  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=404, start_offset=404, starts_line=True, line_number=23, 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')]),
-  make_inst(opname='LOAD_CONST', arg=5, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=414, start_offset=414, starts_line=False, line_number=23),
-  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=416, start_offset=416, starts_line=False, line_number=23, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=424, start_offset=424, starts_line=False, line_number=23),
-  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', offset=426, start_offset=426, starts_line=False, line_number=23),
-  make_inst(opname='JUMP_BACKWARD_NO_INTERRUPT', arg=56, argval=318, argrepr='to L10', offset=428, start_offset=428, starts_line=False, line_number=23),
-  make_inst(opname='RERAISE', arg=0, argval=0, argrepr='', offset=430, start_offset=430, starts_line=True, line_number=22, label=12),
-  make_inst(opname='COPY', arg=3, argval=3, argrepr='', offset=432, start_offset=432, starts_line=True, line_number=None),
-  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', offset=434, start_offset=434, starts_line=False, line_number=None),
-  make_inst(opname='RERAISE', arg=1, argval=1, argrepr='', offset=436, start_offset=436, starts_line=False, line_number=None),
-  make_inst(opname='PUSH_EXC_INFO', arg=None, argval=None, argrepr='', offset=438, start_offset=438, starts_line=False, line_number=None),
-  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=440, start_offset=440, starts_line=True, line_number=28, 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')]),
-  make_inst(opname='LOAD_CONST', arg=6, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=450, start_offset=450, starts_line=False, line_number=28),
-  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=452, start_offset=452, starts_line=False, line_number=28, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
-  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=460, start_offset=460, starts_line=False, line_number=28),
-  make_inst(opname='RERAISE', arg=0, argval=0, argrepr='', offset=462, start_offset=462, starts_line=False, line_number=28),
-  make_inst(opname='COPY', arg=3, argval=3, argrepr='', offset=464, start_offset=464, starts_line=True, line_number=None),
-  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', offset=466, start_offset=466, starts_line=False, line_number=None),
-  make_inst(opname='RERAISE', arg=1, argval=1, argrepr='', offset=468, start_offset=468, starts_line=False, line_number=None),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=374, start_offset=374, starts_line=False, line_number=25),
+  make_inst(opname='JUMP_BACKWARD_NO_INTERRUPT', arg=29, argval=320, argrepr='to L10', offset=376, start_offset=376, starts_line=False, line_number=25),
+  make_inst(opname='COPY', arg=3, argval=3, argrepr='', offset=378, start_offset=378, starts_line=True, line_number=None),
+  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', offset=380, start_offset=380, starts_line=False, line_number=None),
+  make_inst(opname='RERAISE', arg=1, argval=1, argrepr='', offset=382, start_offset=382, starts_line=False, line_number=None),
+  make_inst(opname='PUSH_EXC_INFO', arg=None, argval=None, argrepr='', offset=384, start_offset=384, starts_line=False, line_number=None),
+  make_inst(opname='LOAD_GLOBAL', arg=4, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=386, start_offset=386, starts_line=True, line_number=22, 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')]),
+  make_inst(opname='CHECK_EXC_MATCH', arg=None, argval=None, argrepr='', offset=396, start_offset=396, starts_line=False, line_number=22),
+  make_inst(opname='POP_JUMP_IF_FALSE', arg=15, argval=432, argrepr='to L12', offset=398, start_offset=398, starts_line=False, line_number=22, cache_info=[('counter', 1, b'\x00\x00')]),
+  make_inst(opname='NOT_TAKEN', arg=None, argval=None, argrepr='', offset=402, start_offset=402, starts_line=False, line_number=22),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=404, start_offset=404, starts_line=False, line_number=22),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=406, start_offset=406, starts_line=True, line_number=23, 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')]),
+  make_inst(opname='LOAD_CONST', arg=5, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=416, start_offset=416, starts_line=False, line_number=23),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=418, start_offset=418, starts_line=False, line_number=23, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=426, start_offset=426, starts_line=False, line_number=23),
+  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', offset=428, start_offset=428, starts_line=False, line_number=23),
+  make_inst(opname='JUMP_BACKWARD_NO_INTERRUPT', arg=56, argval=320, argrepr='to L10', offset=430, start_offset=430, starts_line=False, line_number=23),
+  make_inst(opname='RERAISE', arg=0, argval=0, argrepr='', offset=432, start_offset=432, starts_line=True, line_number=22, label=12),
+  make_inst(opname='COPY', arg=3, argval=3, argrepr='', offset=434, start_offset=434, starts_line=True, line_number=None),
+  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', offset=436, start_offset=436, starts_line=False, line_number=None),
+  make_inst(opname='RERAISE', arg=1, argval=1, argrepr='', offset=438, start_offset=438, starts_line=False, line_number=None),
+  make_inst(opname='PUSH_EXC_INFO', arg=None, argval=None, argrepr='', offset=440, start_offset=440, starts_line=False, line_number=None),
+  make_inst(opname='LOAD_GLOBAL', arg=3, argval='print', argrepr='print + NULL', offset=442, start_offset=442, starts_line=True, line_number=28, 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')]),
+  make_inst(opname='LOAD_CONST', arg=6, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=452, start_offset=452, starts_line=False, line_number=28),
+  make_inst(opname='CALL', arg=1, argval=1, argrepr='', offset=454, start_offset=454, starts_line=False, line_number=28, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
+  make_inst(opname='POP_TOP', arg=None, argval=None, argrepr='', offset=462, start_offset=462, starts_line=False, line_number=28),
+  make_inst(opname='RERAISE', arg=0, argval=0, argrepr='', offset=464, start_offset=464, starts_line=False, line_number=28),
+  make_inst(opname='COPY', arg=3, argval=3, argrepr='', offset=466, start_offset=466, starts_line=True, line_number=None),
+  make_inst(opname='POP_EXCEPT', arg=None, argval=None, argrepr='', offset=468, start_offset=468, starts_line=False, line_number=None),
+  make_inst(opname='RERAISE', arg=1, argval=1, argrepr='', offset=470, start_offset=470, starts_line=False, line_number=None),
 ]
 
 # One last piece of inspect fodder to check the default line number handling
index 116a8bac6fb7b8a4a7a3caa456243f410264df62..bc7af6e15380a440d32ea17fdd1869402ad6f899 100644 (file)
@@ -1612,11 +1612,11 @@ class TestBranchAndJumpEvents(CheckEvents):
             ('branch right', 'whilefunc', 1, 3)])
 
         self.check_events(func, recorders = BRANCH_OFFSET_RECORDERS, expected = [
-            ('branch left', 'func', 30, 34),
-            ('branch right', 'func', 46, 60),
-            ('branch left', 'func', 30, 34),
-            ('branch left', 'func', 46, 52),
-            ('branch right', 'func', 30, 72)])
+            ('branch left', 'func', 32, 36),
+            ('branch right', 'func', 48, 62),
+            ('branch left', 'func', 32, 36),
+            ('branch left', 'func', 48, 54),
+            ('branch right', 'func', 32, 74)])
 
     def test_except_star(self):
 
index a55ab611877634f32faa6f5854ad6048a8ac84b4..f5f408fcb4b311b04cd7f0b8087fc759c528b4cc 100644 (file)
@@ -1979,6 +1979,15 @@ class TestSpecializer(TestBase):
         self.assert_specialized(for_iter_tuple, "FOR_ITER_TUPLE")
         self.assert_no_opcode(for_iter_tuple, "FOR_ITER")
 
+        s = "abcdefghij"
+        def for_iter_str():
+            for i in s:
+                self.assertIn(i, s)
+
+        for_iter_str()
+        self.assert_specialized(for_iter_str, "FOR_ITER_VIRTUAL")
+        self.assert_no_opcode(for_iter_str, "FOR_ITER")
+
         r = range(10)
         def for_iter_range():
             for i in r:
@@ -1996,6 +2005,30 @@ class TestSpecializer(TestBase):
         self.assert_specialized(for_iter_generator, "FOR_ITER_GEN")
         self.assert_no_opcode(for_iter_generator, "FOR_ITER")
 
+    @cpython_only
+    @requires_specialization
+    def test_get_iter(self):
+        L = list(range(10))
+        def get_iter_list():
+            n = 10
+            while n:
+                n -= 1
+                for i in L:
+                    break
+        get_iter_list()
+        self.assert_specialized(get_iter_list, "GET_ITER_VIRTUAL")
+        self.assert_no_opcode(get_iter_list, "GET_ITER")
+
+        def get_iter_gen():
+            n = 10
+            while n:
+                n -= 1
+                for i in (i for i in range(10)):
+                    break
+        get_iter_gen()
+        self.assert_specialized(get_iter_gen, "GET_ITER_SELF")
+        self.assert_no_opcode(get_iter_gen, "GET_ITER")
+
     @cpython_only
     @requires_specialization
     def test_call_list_append(self):
index a729efee18c3a1372360f9667f94f1af38c081e8..34a773ee9376cdbb9be3c3729c8dbb6a8adabaca 100644 (file)
@@ -1798,7 +1798,7 @@ class SizeofTest(unittest.TestCase):
         check((1,2,3), vsize('') + self.P + 3*self.P)
         # type
         # static type: PyTypeObject
-        fmt = 'P2nPI13Pl4Pn9Pn12PIPc'
+        fmt = 'P2nPI13Pl4Pn9Pn12PI2Pc'
         s = vsize(fmt)
         check(int, s)
         typeid = 'n' if support.Py_GIL_DISABLED else ''
index 673c63f0c109aca51d3834cf2abc4d78629d8fd3..cd579491e4cd2e863eb9d4bf997015006c840823 100644 (file)
             DISPATCH();
         }
 
+        TARGET(FOR_ITER_VIRTUAL) {
+            #if _Py_TAIL_CALL_INTERP
+            int opcode = FOR_ITER_VIRTUAL;
+            (void)(opcode);
+            #endif
+            _Py_CODEUNIT* const this_instr = next_instr;
+            (void)this_instr;
+            frame->instr_ptr = next_instr;
+            next_instr += 2;
+            INSTRUCTION_STATS(FOR_ITER_VIRTUAL);
+            static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size");
+            _PyStackRef iter;
+            _PyStackRef null_or_index;
+            _PyStackRef next;
+            /* Skip 1 cache entry */
+            // _GUARD_NOS_ITER_VIRTUAL
+            {
+                iter = stack_pointer[-2];
+                PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+                if (Py_TYPE(iter_o)->_tp_iteritem == NULL) {
+                    UPDATE_MISS_STATS(FOR_ITER);
+                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
+                    JUMP_TO_PREDICTED(FOR_ITER);
+                }
+            }
+            // _FOR_ITER_VIRTUAL
+            {
+                null_or_index = stack_pointer[-1];
+                PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+                Py_ssize_t index = PyStackRef_UntagInt(null_or_index);
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                _PyObjectIndexPair next_index = Py_TYPE(iter_o)->_tp_iteritem(iter_o, index);
+                stack_pointer = _PyFrame_GetStackPointer(frame);
+                PyObject *next_o = next_index.object;
+                index = next_index.index;
+                if (next_o == NULL) {
+                    if (index < 0) {
+                        JUMP_TO_LABEL(error);
+                    }
+                    JUMPBY(oparg + 1);
+                    DISPATCH();
+                }
+                null_or_index = PyStackRef_TagInt(index);
+                next = PyStackRef_FromPyObjectSteal(next_o);
+            }
+            stack_pointer[-1] = null_or_index;
+            stack_pointer[0] = next;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            DISPATCH();
+        }
+
         TARGET(GET_AITER) {
             #if _Py_TAIL_CALL_INTERP
             int opcode = GET_AITER;
             (void)(opcode);
             #endif
             frame->instr_ptr = next_instr;
-            next_instr += 1;
+            next_instr += 2;
             INSTRUCTION_STATS(GET_ITER);
+            PREDICTED_GET_ITER:;
+            _Py_CODEUNIT* const this_instr = next_instr - 2;
+            (void)this_instr;
             _PyStackRef iterable;
             _PyStackRef iter;
             _PyStackRef index_or_null;
-            iterable = stack_pointer[-1];
-            #ifdef Py_STATS
-            _Py_GatherStats_GetIter(iterable);
-            #endif
-            _PyFrame_SetStackPointer(frame, stack_pointer);
-            _PyStackRef result = _PyEval_GetIter(iterable, &index_or_null, oparg);
-            stack_pointer = _PyFrame_GetStackPointer(frame);
-            if (PyStackRef_IsError(result)) {
-                JUMP_TO_LABEL(pop_1_error);
+            // _SPECIALIZE_GET_ITER
+            {
+                iterable = stack_pointer[-1];
+                uint16_t counter = read_u16(&this_instr[1].cache);
+                (void)counter;
+                #if ENABLE_SPECIALIZATION
+                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
+                    next_instr = this_instr;
+                    _PyFrame_SetStackPointer(frame, stack_pointer);
+                    _Py_Specialize_GetIter(iterable, next_instr);
+                    stack_pointer = _PyFrame_GetStackPointer(frame);
+                    DISPATCH_SAME_OPARG();
+                }
+                OPCODE_DEFERRED_INC(GET_ITER);
+                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
+                #endif  /* ENABLE_SPECIALIZATION */
+            }
+            // _GET_ITER
+            {
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                _PyStackRef result = _PyEval_GetIter(iterable, &index_or_null, oparg);
+                stack_pointer = _PyFrame_GetStackPointer(frame);
+                if (PyStackRef_IsError(result)) {
+                    JUMP_TO_LABEL(pop_1_error);
+                }
+                iter = result;
             }
-            iter = result;
             stack_pointer[-1] = iter;
             stack_pointer[0] = index_or_null;
             stack_pointer += 1;
             DISPATCH();
         }
 
+        TARGET(GET_ITER_SELF) {
+            #if _Py_TAIL_CALL_INTERP
+            int opcode = GET_ITER_SELF;
+            (void)(opcode);
+            #endif
+            _Py_CODEUNIT* const this_instr = next_instr;
+            (void)this_instr;
+            frame->instr_ptr = next_instr;
+            next_instr += 2;
+            INSTRUCTION_STATS(GET_ITER_SELF);
+            static_assert(INLINE_CACHE_ENTRIES_GET_ITER == 1, "incorrect cache size");
+            _PyStackRef iterable;
+            _PyStackRef res;
+            /* Skip 1 cache entry */
+            // _GUARD_ITERATOR
+            {
+                iterable = stack_pointer[-1];
+                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+                if (tp->tp_iter != PyObject_SelfIter) {
+                    UPDATE_MISS_STATS(GET_ITER);
+                    assert(_PyOpcode_Deopt[opcode] == (GET_ITER));
+                    JUMP_TO_PREDICTED(GET_ITER);
+                }
+                STAT_INC(GET_ITER, hit);
+            }
+            // _PUSH_NULL
+            {
+                res = PyStackRef_NULL;
+            }
+            stack_pointer[0] = res;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            DISPATCH();
+        }
+
+        TARGET(GET_ITER_VIRTUAL) {
+            #if _Py_TAIL_CALL_INTERP
+            int opcode = GET_ITER_VIRTUAL;
+            (void)(opcode);
+            #endif
+            _Py_CODEUNIT* const this_instr = next_instr;
+            (void)this_instr;
+            frame->instr_ptr = next_instr;
+            next_instr += 2;
+            INSTRUCTION_STATS(GET_ITER_VIRTUAL);
+            static_assert(INLINE_CACHE_ENTRIES_GET_ITER == 1, "incorrect cache size");
+            _PyStackRef iterable;
+            _PyStackRef zero;
+            /* Skip 1 cache entry */
+            // _GUARD_ITER_VIRTUAL
+            {
+                iterable = stack_pointer[-1];
+                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+                if (tp->_tp_iteritem == NULL) {
+                    UPDATE_MISS_STATS(GET_ITER);
+                    assert(_PyOpcode_Deopt[opcode] == (GET_ITER));
+                    JUMP_TO_PREDICTED(GET_ITER);
+                }
+                STAT_INC(GET_ITER, hit);
+            }
+            // _PUSH_TAGGED_ZERO
+            {
+                zero = PyStackRef_TagInt(0);
+            }
+            stack_pointer[0] = zero;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            DISPATCH();
+        }
+
         TARGET(GET_LEN) {
             #if _Py_TAIL_CALL_INTERP
             int opcode = GET_LEN;
index 48fe9c14f4e2dda5d9d5bac02f00c2d5b2bc0b22..d99b618c8393fcb6a9cb935947ce37634df4156f 100644 (file)
@@ -178,6 +178,9 @@ static void *opcode_targets_table[256] = {
     &&TARGET_FOR_ITER_LIST,
     &&TARGET_FOR_ITER_RANGE,
     &&TARGET_FOR_ITER_TUPLE,
+    &&TARGET_FOR_ITER_VIRTUAL,
+    &&TARGET_GET_ITER_SELF,
+    &&TARGET_GET_ITER_VIRTUAL,
     &&TARGET_JUMP_BACKWARD_JIT,
     &&TARGET_JUMP_BACKWARD_NO_JIT,
     &&TARGET_LOAD_ATTR_CLASS,
@@ -230,9 +233,6 @@ static void *opcode_targets_table[256] = {
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
     &&TARGET_INSTRUMENTED_END_FOR,
     &&TARGET_INSTRUMENTED_POP_ITER,
     &&TARGET_INSTRUMENTED_END_SEND,
@@ -473,9 +473,9 @@ static void *opcode_tracing_targets_table[256] = {
     &&TARGET_TRACE_RECORD,
     &&TARGET_TRACE_RECORD,
     &&TARGET_TRACE_RECORD,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
+    &&TARGET_TRACE_RECORD,
+    &&TARGET_TRACE_RECORD,
+    &&TARGET_TRACE_RECORD,
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
@@ -621,10 +621,13 @@ static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_GEN(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_LIST(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_RANGE(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_TUPLE(TAIL_CALL_PARAMS);
+static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_VIRTUAL(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AITER(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ANEXT(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AWAITABLE(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER(TAIL_CALL_PARAMS);
+static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER_SELF(TAIL_CALL_PARAMS);
+static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER_VIRTUAL(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_LEN(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_IMPORT_FROM(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_IMPORT_NAME(TAIL_CALL_PARAMS);
@@ -862,10 +865,13 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = {
     [FOR_ITER_LIST] = _TAIL_CALL_FOR_ITER_LIST,
     [FOR_ITER_RANGE] = _TAIL_CALL_FOR_ITER_RANGE,
     [FOR_ITER_TUPLE] = _TAIL_CALL_FOR_ITER_TUPLE,
+    [FOR_ITER_VIRTUAL] = _TAIL_CALL_FOR_ITER_VIRTUAL,
     [GET_AITER] = _TAIL_CALL_GET_AITER,
     [GET_ANEXT] = _TAIL_CALL_GET_ANEXT,
     [GET_AWAITABLE] = _TAIL_CALL_GET_AWAITABLE,
     [GET_ITER] = _TAIL_CALL_GET_ITER,
+    [GET_ITER_SELF] = _TAIL_CALL_GET_ITER_SELF,
+    [GET_ITER_VIRTUAL] = _TAIL_CALL_GET_ITER_VIRTUAL,
     [GET_LEN] = _TAIL_CALL_GET_LEN,
     [IMPORT_FROM] = _TAIL_CALL_IMPORT_FROM,
     [IMPORT_NAME] = _TAIL_CALL_IMPORT_NAME,
@@ -1008,9 +1014,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = {
     [125] = _TAIL_CALL_UNKNOWN_OPCODE,
     [126] = _TAIL_CALL_UNKNOWN_OPCODE,
     [127] = _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,
@@ -1120,10 +1123,13 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = {
     [FOR_ITER_LIST] = _TAIL_CALL_TRACE_RECORD,
     [FOR_ITER_RANGE] = _TAIL_CALL_TRACE_RECORD,
     [FOR_ITER_TUPLE] = _TAIL_CALL_TRACE_RECORD,
+    [FOR_ITER_VIRTUAL] = _TAIL_CALL_TRACE_RECORD,
     [GET_AITER] = _TAIL_CALL_TRACE_RECORD,
     [GET_ANEXT] = _TAIL_CALL_TRACE_RECORD,
     [GET_AWAITABLE] = _TAIL_CALL_TRACE_RECORD,
     [GET_ITER] = _TAIL_CALL_TRACE_RECORD,
+    [GET_ITER_SELF] = _TAIL_CALL_TRACE_RECORD,
+    [GET_ITER_VIRTUAL] = _TAIL_CALL_TRACE_RECORD,
     [GET_LEN] = _TAIL_CALL_TRACE_RECORD,
     [IMPORT_FROM] = _TAIL_CALL_TRACE_RECORD,
     [IMPORT_NAME] = _TAIL_CALL_TRACE_RECORD,
@@ -1266,9 +1272,6 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = {
     [125] = _TAIL_CALL_UNKNOWN_OPCODE,
     [126] = _TAIL_CALL_UNKNOWN_OPCODE,
     [127] = _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,
index 6c1dd5edb9ad1dbb140f7aa6ea9c7ca021040dab..8a9d1b133affb3ec03fc7ea098dd6058a6fa60cd 100644 (file)
@@ -3205,6 +3205,18 @@ Construct an immutable array of bytes from:\n\
 
 static PyObject *bytes_iter(PyObject *seq);
 
+
+static _PyObjectIndexPair
+bytes_iteritem(PyObject *obj, Py_ssize_t index)
+{
+    PyBytesObject *a = _PyBytes_CAST(obj);
+    if (index >= Py_SIZE(a)) {
+        return (_PyObjectIndexPair) { .object = NULL, .index = index };
+    }
+    PyObject *l = _PyLong_FromUnsignedChar((unsigned char)a->ob_sval[index]);
+    return (_PyObjectIndexPair) { .object = l, .index = index + 1 };
+}
+
 PyTypeObject PyBytes_Type = {
     PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "bytes",
@@ -3248,6 +3260,7 @@ PyTypeObject PyBytes_Type = {
     bytes_new,                                  /* tp_new */
     PyObject_Free,                              /* tp_free */
     .tp_version_tag = _Py_TYPE_VERSION_BYTES,
+    ._tp_iteritem = bytes_iteritem,
 };
 
 void
index f0be4a77b5468c00e18ef781576fe51d215dce82..2c3d6dc4b0feedb56da32c8723b3eb0017e3d65a 100644 (file)
@@ -574,8 +574,12 @@ init_code(PyCodeObject *co, struct _PyCodeConstructor *con)
     co->co_tlbc->entries[0] = co->co_code_adaptive;
 #endif
     int entry_point = 0;
-    while (entry_point < Py_SIZE(co) &&
-        _PyCode_CODE(co)[entry_point].op.code != RESUME) {
+    while (entry_point < Py_SIZE(co)) {
+        if (_PyCode_CODE(co)[entry_point].op.code == RESUME &&
+           (_PyCode_CODE(co)[entry_point].op.arg & RESUME_OPARG_LOCATION_MASK) != RESUME_AT_GEN_EXPR_START
+        ) {
+            break;
+        }
         entry_point++;
     }
     co->_co_firsttraceable = entry_point;
index 97869b17cde7a8d1ff8a01be418bf3ea33664738..685b30bb9eebd6faff05a7d2a3b57fc739673d11 100644 (file)
@@ -3913,6 +3913,13 @@ list_ass_subscript(PyObject *self, PyObject *item, PyObject *value)
     return res;
 }
 
+static _PyObjectIndexPair
+list_iteritem(PyObject *obj, Py_ssize_t index)
+{
+    PyObject *result = list_get_item_ref((PyListObject *)obj, index);
+    return (_PyObjectIndexPair) { .object = result, .index = index + 1 };
+}
+
 static PyMappingMethods list_as_mapping = {
     list_length,
     list_subscript,
@@ -3963,6 +3970,7 @@ PyTypeObject PyList_Type = {
     PyObject_GC_Del,                            /* tp_free */
     .tp_vectorcall = list_vectorcall,
     .tp_version_tag = _Py_TYPE_VERSION_LIST,
+    ._tp_iteritem = list_iteritem,
 };
 
 /*********************** List Iterator **************************/
index 07384acde32e52be27473e65a34654c7b6dcb7fc..7757a102677e2cb61185f714c9067c7cfee02616 100644 (file)
@@ -873,6 +873,17 @@ static PySequenceMethods tuple_as_sequence = {
     tuple_contains,                             /* sq_contains */
 };
 
+static _PyObjectIndexPair
+tuple_iteritem(PyObject *obj, Py_ssize_t index)
+{
+    if (index >= PyTuple_GET_SIZE(obj)) {
+        return (_PyObjectIndexPair) { .object = NULL, .index = index };
+    }
+    PyObject *result = PyTuple_GET_ITEM(obj, index);
+    Py_INCREF(result);
+    return (_PyObjectIndexPair) { .object = result, .index = index + 1 };
+}
+
 static PyObject*
 tuple_subscript(PyObject *op, PyObject* item)
 {
@@ -1000,6 +1011,7 @@ PyTypeObject PyTuple_Type = {
     PyObject_GC_Del,                            /* tp_free */
     .tp_vectorcall = tuple_vectorcall,
     .tp_version_tag = _Py_TYPE_VERSION_TUPLE,
+    ._tp_iteritem = tuple_iteritem,
 };
 
 /* The following function breaks the notion that tuples are immutable:
index a0a26a7512992962a9c209126b5f1701f1d13042..d2569132998accf028312db3ee6ec1188f71e713 100644 (file)
@@ -13982,6 +13982,20 @@ onError:
     return NULL;
 }
 
+static _PyObjectIndexPair
+unicode_iteritem(PyObject *obj, Py_ssize_t index)
+{
+    if (index >= PyUnicode_GET_LENGTH(obj)) {
+        return (_PyObjectIndexPair) { .object = NULL, .index = index };
+    }
+    const void *data = PyUnicode_DATA(obj);
+    int kind = PyUnicode_KIND(obj);
+    Py_UCS4 ch = PyUnicode_READ(kind, data, index);
+    PyObject *result = unicode_char(ch);
+    index = (result == NULL) ? -1 : index + 1;
+    return (_PyObjectIndexPair) { .object = result, .index = index };
+}
+
 void
 _PyUnicode_ExactDealloc(PyObject *op)
 {
@@ -14047,6 +14061,7 @@ PyTypeObject PyUnicode_Type = {
     unicode_new,                  /* tp_new */
     PyObject_Free,                /* tp_free */
     .tp_vectorcall = unicode_vectorcall,
+    ._tp_iteritem = unicode_iteritem,
 };
 
 /* Initialize the Unicode implementation */
index d550740b1105dd0cca81addd96ca378c8ecdf0b5..28e08e42f5c88fc0b22eca994a0b5ff9b8598c61 100644 (file)
@@ -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,186,0,0,0,128,0,0,0,93,0,
+    0,0,0,0,0,243,188,0,0,0,128,0,0,0,93,0,
     81,1,72,0,115,0,93,0,81,1,72,4,115,1,92,2,
     31,0,81,2,50,1,0,0,0,0,0,0,29,0,92,2,
     31,0,81,3,92,0,79,6,0,0,0,0,0,0,0,0,
@@ -9,31 +9,31 @@ unsigned char M_test_frozenmain[] = {
     0,0,29,0,92,1,79,8,0,0,0,0,0,0,0,0,
     0,0,0,0,0,0,0,0,0,0,31,0,50,0,0,0,
     0,0,0,0,81,4,42,26,0,0,0,0,0,0,0,0,
-    0,0,115,5,81,7,70,0,68,24,0,0,115,6,92,2,
-    31,0,81,5,92,6,12,0,81,6,92,5,92,6,42,26,
-    0,0,0,0,0,0,0,0,0,0,12,0,48,4,50,1,
-    0,0,0,0,0,0,29,0,74,26,0,0,9,0,28,0,
-    81,1,33,0,41,8,233,0,0,0,0,78,122,18,70,114,
-    111,122,101,110,32,72,101,108,108,111,32,87,111,114,108,100,
-    122,8,115,121,115,46,97,114,103,118,218,6,99,111,110,102,
-    105,103,122,7,99,111,110,102,105,103,32,122,2,58,32,41,
-    5,218,12,112,114,111,103,114,97,109,95,110,97,109,101,218,
-    10,101,120,101,99,117,116,97,98,108,101,218,15,117,115,101,
-    95,101,110,118,105,114,111,110,109,101,110,116,218,17,99,111,
-    110,102,105,103,117,114,101,95,99,95,115,116,100,105,111,218,
-    14,98,117,102,102,101,114,101,100,95,115,116,100,105,111,41,
-    7,218,3,115,121,115,218,17,95,116,101,115,116,105,110,116,
-    101,114,110,97,108,99,97,112,105,218,5,112,114,105,110,116,
-    218,4,97,114,103,118,218,11,103,101,116,95,99,111,110,102,
-    105,103,115,114,3,0,0,0,218,3,107,101,121,169,0,243,
-    0,0,0,0,218,18,116,101,115,116,95,102,114,111,122,101,
-    110,109,97,105,110,46,112,121,218,8,60,109,111,100,117,108,
-    101,62,114,18,0,0,0,1,0,0,0,115,94,0,0,0,
-    241,3,1,1,1,243,8,0,1,11,219,0,24,225,0,5,
-    208,6,26,212,0,27,217,0,5,128,106,144,35,151,40,145,
-    40,212,0,27,216,9,26,215,9,38,210,9,38,211,9,40,
-    168,24,213,9,50,128,6,243,2,6,12,2,128,67,241,14,
-    0,5,10,136,71,144,67,144,53,152,2,152,54,160,35,157,
-    59,152,45,208,10,40,214,4,41,243,15,6,12,2,114,16,
-    0,0,0,
+    0,0,115,5,81,7,70,0,0,0,68,24,0,0,115,6,
+    92,2,31,0,81,5,92,6,12,0,81,6,92,5,92,6,
+    42,26,0,0,0,0,0,0,0,0,0,0,12,0,48,4,
+    50,1,0,0,0,0,0,0,29,0,74,26,0,0,9,0,
+    28,0,81,1,33,0,41,8,233,0,0,0,0,78,122,18,
+    70,114,111,122,101,110,32,72,101,108,108,111,32,87,111,114,
+    108,100,122,8,115,121,115,46,97,114,103,118,218,6,99,111,
+    110,102,105,103,122,7,99,111,110,102,105,103,32,122,2,58,
+    32,41,5,218,12,112,114,111,103,114,97,109,95,110,97,109,
+    101,218,10,101,120,101,99,117,116,97,98,108,101,218,15,117,
+    115,101,95,101,110,118,105,114,111,110,109,101,110,116,218,17,
+    99,111,110,102,105,103,117,114,101,95,99,95,115,116,100,105,
+    111,218,14,98,117,102,102,101,114,101,100,95,115,116,100,105,
+    111,41,7,218,3,115,121,115,218,17,95,116,101,115,116,105,
+    110,116,101,114,110,97,108,99,97,112,105,218,5,112,114,105,
+    110,116,218,4,97,114,103,118,218,11,103,101,116,95,99,111,
+    110,102,105,103,115,114,3,0,0,0,218,3,107,101,121,169,
+    0,243,0,0,0,0,218,18,116,101,115,116,95,102,114,111,
+    122,101,110,109,97,105,110,46,112,121,218,8,60,109,111,100,
+    117,108,101,62,114,18,0,0,0,1,0,0,0,115,94,0,
+    0,0,241,3,1,1,1,243,8,0,1,11,219,0,24,225,
+    0,5,208,6,26,212,0,27,217,0,5,128,106,144,35,151,
+    40,145,40,212,0,27,216,9,26,215,9,38,210,9,38,211,
+    9,40,168,24,213,9,50,128,6,244,2,6,12,2,128,67,
+    241,14,0,5,10,136,71,144,67,144,53,152,2,152,54,160,
+    35,157,59,152,45,208,10,40,214,4,41,243,15,6,12,2,
+    114,16,0,0,0,
 };
index b562d51e4d564a7a3bef0109f7e5058754ba4fdd..7de889b93b71a77123c8428ac570e40fdd3c99f7 100644 (file)
@@ -199,7 +199,7 @@ dummy_func(
             }
         }
 
-        op(_LOAD_BYTECODE, (--)) {
+        replaced op(_LOAD_BYTECODE, (--)) {
             #ifdef Py_GIL_DISABLED
             if (frame->tlbc_index !=
                 ((_PyThreadStateImpl *)tstate)->tlbc_index) {
@@ -2820,6 +2820,11 @@ dummy_func(
             }
         }
 
+        op(_GUARD_TYPE, (type/4, owner -- owner)) {
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
+            EXIT_IF(tp != (PyTypeObject *)type);
+        }
+
         op(_CHECK_MANAGED_OBJECT_HAS_VALUES, (owner -- owner)) {
             PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
             assert(Py_TYPE(owner_o)->tp_dictoffset < 0);
@@ -3655,16 +3660,71 @@ dummy_func(
             values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o);
         }
 
-        inst(GET_ITER, (iterable -- iter, index_or_null)) {
-            #ifdef Py_STATS
-            _Py_GatherStats_GetIter(iterable);
-            #endif
+        family(GET_ITER, INLINE_CACHE_ENTRIES_GET_ITER) = {
+            GET_ITER_SELF,
+            GET_ITER_VIRTUAL,
+        };
+
+        specializing op(_SPECIALIZE_GET_ITER, (counter/1, iterable -- iterable)) {
+            #if ENABLE_SPECIALIZATION
+            if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
+                next_instr = this_instr;
+                _Py_Specialize_GetIter(iterable, next_instr);
+                DISPATCH_SAME_OPARG();
+            }
+            OPCODE_DEFERRED_INC(GET_ITER);
+            ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
+            #endif  /* ENABLE_SPECIALIZATION */
+        }
+
+        op(_GET_ITER, (iterable -- iter, index_or_null)) {
             _PyStackRef result = _PyEval_GetIter(iterable, &index_or_null, oparg);
             DEAD(iterable);
             ERROR_IF(PyStackRef_IsError(result));
             iter = result;
         }
 
+        macro(GET_ITER) =
+            _RECORD_TOS_TYPE +
+            _SPECIALIZE_GET_ITER +
+            _GET_ITER;
+
+        op(_GUARD_ITERATOR, (iterable -- iterable)) {
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+            EXIT_IF(tp->tp_iter != PyObject_SelfIter);
+            STAT_INC(GET_ITER, hit);
+        }
+
+        macro(GET_ITER_SELF) =
+            _RECORD_TOS_TYPE +
+            unused/1 +
+            _GUARD_ITERATOR +
+            PUSH_NULL;
+
+        op(_GUARD_ITER_VIRTUAL, (iterable -- iterable)) {
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+            EXIT_IF(tp->_tp_iteritem == NULL);
+            STAT_INC(GET_ITER, hit);
+        }
+
+        op(_PUSH_TAGGED_ZERO, ( -- zero)) {
+            zero = PyStackRef_TagInt(0);
+        }
+
+        macro(GET_ITER_VIRTUAL) =
+            _RECORD_TOS_TYPE +
+            unused/1 +
+            _GUARD_ITER_VIRTUAL +
+            _PUSH_TAGGED_ZERO;
+
+        op(_GET_ITER_TRAD, (iterable -- iter, index_or_null)) {
+            PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable));
+            PyStackRef_CLOSE(iterable);
+            ERROR_IF(iter_o == NULL);
+            iter = PyStackRef_FromPyObjectSteal(iter_o);
+            index_or_null = PyStackRef_NULL;
+        }
+
         // Most members of this family are "secretly" super-instructions.
         // When the loop is exhausted, they jump, and the jump target is
         // always END_FOR, which pops two values off the stack.
@@ -3676,6 +3736,7 @@ dummy_func(
             FOR_ITER_TUPLE,
             FOR_ITER_RANGE,
             FOR_ITER_GEN,
+            FOR_ITER_VIRTUAL,
         };
 
         specializing op(_SPECIALIZE_FOR_ITER, (counter/1, iter, null_or_index -- iter, null_or_index)) {
@@ -3703,6 +3764,8 @@ dummy_func(
             next = item;
         }
 
+        macro(FOR_ITER) = _SPECIALIZE_FOR_ITER + _FOR_ITER;
+
         op(_FOR_ITER_TIER_TWO, (iter, null_or_index -- iter, null_or_index, next)) {
             _PyStackRef item = _PyForIter_VirtualIteratorNext(tstate, frame, iter, &null_or_index);
             if (!PyStackRef_IsValid(item)) {
@@ -3716,9 +3779,51 @@ dummy_func(
             next = item;
         }
 
+        op(_GUARD_NOS_ITER_VIRTUAL, (iter, null_or_index -- iter, null_or_index)) {
+            PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+            EXIT_IF(Py_TYPE(iter_o)->_tp_iteritem == NULL);
+        }
 
-        macro(FOR_ITER) = _SPECIALIZE_FOR_ITER + _FOR_ITER;
+        replaced op(_FOR_ITER_VIRTUAL, (iter, null_or_index -- iter, null_or_index, next)) {
+            PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+            Py_ssize_t index = PyStackRef_UntagInt(null_or_index);
+            _PyObjectIndexPair next_index = Py_TYPE(iter_o)->_tp_iteritem(iter_o, index);
+            PyObject *next_o = next_index.object;
+            index = next_index.index;
+            if (next_o == NULL) {
+                if (index < 0) {
+                    ERROR_NO_POP();
+                }
+                // Jump forward by oparg and skip the following END_FOR
+                JUMPBY(oparg + 1);
+                DISPATCH();
+            }
+            null_or_index = PyStackRef_TagInt(index);
+            next = PyStackRef_FromPyObjectSteal(next_o);
+        }
 
+        macro(FOR_ITER_VIRTUAL) =
+            unused/1 +  // Skip over the counter
+            _GUARD_NOS_ITER_VIRTUAL +
+            _FOR_ITER_VIRTUAL;
+
+        op(_FOR_ITER_VIRTUAL_TIER_TWO, (iter, null_or_index -- iter, null_or_index, next)) {
+            PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+            Py_ssize_t index = PyStackRef_UntagInt(null_or_index);
+            _PyObjectIndexPair next_index = Py_TYPE(iter_o)->_tp_iteritem(iter_o, index);
+            PyObject *next_o = next_index.object;
+            index = next_index.index;
+            if (next_o == NULL) {
+                if (index < 0) {
+                    ERROR_NO_POP();
+                }
+                /* iterator ended normally */
+                /* The translator sets the deopt target just past the matching END_FOR */
+                EXIT_IF(true);
+            }
+            next = PyStackRef_FromPyObjectSteal(next_o);
+            null_or_index = PyStackRef_TagInt(index);
+        }
 
         inst(INSTRUMENTED_FOR_ITER, (unused/1, iter, null_or_index -- iter, null_or_index, next)) {
             _PyStackRef item = _PyForIter_VirtualIteratorNext(tstate, frame, iter, &null_or_index);
index ead0df31c44266a547583e9adc359f6a9b629823..03bc5229565966b58ff8612e1e45334f49a6a11a 100644 (file)
@@ -1115,7 +1115,7 @@ _PyStackRef
 _PyEval_GetIter(_PyStackRef iterable, _PyStackRef *index_or_null, int yield_from)
 {
     PyTypeObject *tp = PyStackRef_TYPE(iterable);
-    if (tp == &PyTuple_Type || tp == &PyList_Type) {
+    if (tp->_tp_iteritem != NULL) {
         /* Leave iterable on stack and pushed tagged 0 */
         *index_or_null = PyStackRef_TagInt(0);
         return iterable;
@@ -3697,36 +3697,24 @@ _PyEval_LoadName(PyThreadState *tstate, _PyInterpreterFrame *frame, PyObject *na
     return value;
 }
 
-static _PyStackRef
-foriter_next(PyObject *seq, _PyStackRef index)
-{
-    assert(PyStackRef_IsTaggedInt(index));
-    assert(PyTuple_CheckExact(seq) || PyList_CheckExact(seq));
-    intptr_t i = PyStackRef_UntagInt(index);
-    if (PyTuple_CheckExact(seq)) {
-        size_t size = PyTuple_GET_SIZE(seq);
-        if ((size_t)i >= size) {
-            return PyStackRef_NULL;
-        }
-        return PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq, i));
-    }
-    PyObject *item = _PyList_GetItemRef((PyListObject *)seq, i);
-    if (item == NULL) {
-        return PyStackRef_NULL;
-    }
-    return PyStackRef_FromPyObjectSteal(item);
-}
-
 _PyStackRef _PyForIter_VirtualIteratorNext(PyThreadState* tstate, _PyInterpreterFrame* frame, _PyStackRef iter, _PyStackRef* index_ptr)
 {
     PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
     _PyStackRef index = *index_ptr;
     if (PyStackRef_IsTaggedInt(index)) {
-        *index_ptr = PyStackRef_IncrementTaggedIntNoOverflow(index);
-        return foriter_next(iter_o, index);
-    }
-    PyObject *next_o = (*Py_TYPE(iter_o)->tp_iternext)(iter_o);
-    if (next_o == NULL) {
+        intptr_t i = PyStackRef_UntagInt(index);
+        assert(i >= 0);
+        _PyObjectIndexPair next_index = Py_TYPE(iter_o)->_tp_iteritem(iter_o, i);
+        i = next_index.index;
+        PyObject *next = next_index.object;
+        if (next == NULL) {
+            return i < 0 ? PyStackRef_ERROR : PyStackRef_NULL;
+        }
+        *index_ptr = PyStackRef_TagInt(i);
+        return PyStackRef_FromPyObjectSteal(next);
+    }
+    PyObject *next = (*Py_TYPE(iter_o)->tp_iternext)(iter_o);
+    if (next == NULL) {
         if (_PyErr_Occurred(tstate)) {
             if (_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
                 _PyEval_MonitorRaise(tstate, frame, frame->instr_ptr);
@@ -3738,7 +3726,7 @@ _PyStackRef _PyForIter_VirtualIteratorNext(PyThreadState* tstate, _PyInterpreter
         }
         return PyStackRef_NULL;
     }
-    return PyStackRef_FromPyObjectSteal(next_o);
+    return PyStackRef_FromPyObjectSteal(next);
 }
 
 /* Check if a 'cls' provides the given special method. */
index a0e5d9f659415eb0592e9d12805585a42462a060..389e7cf85d32bb4c8c7725c875b9daa1981537f3 100644 (file)
@@ -1224,12 +1224,17 @@ codegen_wrap_in_stopiteration_handler(compiler *c)
 {
     NEW_JUMP_TARGET_LABEL(c, handler);
 
-    /* Insert SETUP_CLEANUP just before RESUME */
+    /* Insert SETUP_CLEANUP just after the initial RETURN_GENERATOR; POP_TOP */
     instr_sequence *seq = INSTR_SEQUENCE(c);
     int resume = 0;
-    while (_PyInstructionSequence_GetInstruction(seq, resume).i_opcode != RESUME) {
+    while (_PyInstructionSequence_GetInstruction(seq, resume).i_opcode != RETURN_GENERATOR) {
         resume++;
+        assert(resume < seq->s_used);
     }
+    resume++;
+    assert(_PyInstructionSequence_GetInstruction(seq, resume).i_opcode == POP_TOP);
+    resume++;
+    assert(resume < seq->s_used);
     RETURN_IF_ERROR(
         _PyInstructionSequence_InsertInstruction(
             seq, resume,
@@ -4977,10 +4982,14 @@ codegen_comprehension(compiler *c, expr_ty e, int type,
             RETURN_IF_ERROR(
                 _PyInstructionSequence_InsertInstruction(
                     INSTR_SEQUENCE(c), 0,
-                    LOAD_FAST, 0, LOC(outermost->iter)));
+                    RESUME, RESUME_AT_GEN_EXPR_START, NO_LOCATION));
             RETURN_IF_ERROR(
                 _PyInstructionSequence_InsertInstruction(
                     INSTR_SEQUENCE(c), 1,
+                    LOAD_FAST, 0, LOC(outermost->iter)));
+            RETURN_IF_ERROR(
+                _PyInstructionSequence_InsertInstruction(
+                    INSTR_SEQUENCE(c), 2,
                     outermost->is_async ? GET_AITER : GET_ITER,
                     0, LOC(outermost->iter)));
             iter_state = ITERATOR_ON_STACK;
index f9e6161e927ba060f907b1ee2ba7570598d157f1..93d39bee1b9ff65c92ed0375b5cfaf04a6c39ec8 100644 (file)
@@ -93,7 +93,7 @@
             break;
         }
 
-        /* _LOAD_BYTECODE is not a viable micro-op for tier 2 because it uses the 'this_instr' variable */
+        /* _LOAD_BYTECODE is not a viable micro-op for tier 2 because it is replaced */
 
         case _RESUME_CHECK_r00: {
             CHECK_CURRENT_CACHED_VALUES(0);
             break;
         }
 
+        case _GUARD_TYPE_r01: {
+            CHECK_CURRENT_CACHED_VALUES(0);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef owner;
+            owner = stack_pointer[-1];
+            PyObject *type = (PyObject *)CURRENT_OPERAND0_64();
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
+            if (tp != (PyTypeObject *)type) {
+                UOP_STAT_INC(uopcode, miss);
+                SET_CURRENT_CACHED_VALUES(0);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache0 = owner;
+            SET_CURRENT_CACHED_VALUES(1);
+            stack_pointer += -1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_TYPE_r11: {
+            CHECK_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef owner;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            owner = _stack_item_0;
+            PyObject *type = (PyObject *)CURRENT_OPERAND0_64();
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
+            if (tp != (PyTypeObject *)type) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache0 = owner;
+                SET_CURRENT_CACHED_VALUES(1);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache0 = owner;
+            SET_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_TYPE_r22: {
+            CHECK_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef owner;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            owner = _stack_item_1;
+            PyObject *type = (PyObject *)CURRENT_OPERAND0_64();
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
+            if (tp != (PyTypeObject *)type) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache1 = owner;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(2);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache1 = owner;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_TYPE_r33: {
+            CHECK_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef owner;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            _PyStackRef _stack_item_2 = _tos_cache2;
+            owner = _stack_item_2;
+            PyObject *type = (PyObject *)CURRENT_OPERAND0_64();
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
+            if (tp != (PyTypeObject *)type) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache2 = owner;
+                _tos_cache1 = _stack_item_1;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(3);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache2 = owner;
+            _tos_cache1 = _stack_item_1;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
         case _CHECK_MANAGED_OBJECT_HAS_VALUES_r01: {
             CHECK_CURRENT_CACHED_VALUES(0);
             assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
             _PyStackRef _stack_item_0 = _tos_cache0;
             oparg = CURRENT_OPARG();
             iterable = _stack_item_0;
-            #ifdef Py_STATS
-            _Py_GatherStats_GetIter(iterable);
-            #endif
             stack_pointer[0] = iterable;
             stack_pointer += 1;
             ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
             break;
         }
 
+        case _GUARD_ITERATOR_r01: {
+            CHECK_CURRENT_CACHED_VALUES(0);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iterable;
+            iterable = stack_pointer[-1];
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+            if (tp->tp_iter != PyObject_SelfIter) {
+                UOP_STAT_INC(uopcode, miss);
+                SET_CURRENT_CACHED_VALUES(0);
+                JUMP_TO_JUMP_TARGET();
+            }
+            STAT_INC(GET_ITER, hit);
+            _tos_cache0 = iterable;
+            SET_CURRENT_CACHED_VALUES(1);
+            stack_pointer += -1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_ITERATOR_r11: {
+            CHECK_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iterable;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            iterable = _stack_item_0;
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+            if (tp->tp_iter != PyObject_SelfIter) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache0 = iterable;
+                SET_CURRENT_CACHED_VALUES(1);
+                JUMP_TO_JUMP_TARGET();
+            }
+            STAT_INC(GET_ITER, hit);
+            _tos_cache0 = iterable;
+            SET_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_ITERATOR_r22: {
+            CHECK_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iterable;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            iterable = _stack_item_1;
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+            if (tp->tp_iter != PyObject_SelfIter) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache1 = iterable;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(2);
+                JUMP_TO_JUMP_TARGET();
+            }
+            STAT_INC(GET_ITER, hit);
+            _tos_cache1 = iterable;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_ITERATOR_r33: {
+            CHECK_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iterable;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            _PyStackRef _stack_item_2 = _tos_cache2;
+            iterable = _stack_item_2;
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+            if (tp->tp_iter != PyObject_SelfIter) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache2 = iterable;
+                _tos_cache1 = _stack_item_1;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(3);
+                JUMP_TO_JUMP_TARGET();
+            }
+            STAT_INC(GET_ITER, hit);
+            _tos_cache2 = iterable;
+            _tos_cache1 = _stack_item_1;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_ITER_VIRTUAL_r01: {
+            CHECK_CURRENT_CACHED_VALUES(0);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iterable;
+            iterable = stack_pointer[-1];
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+            if (tp->_tp_iteritem == NULL) {
+                UOP_STAT_INC(uopcode, miss);
+                SET_CURRENT_CACHED_VALUES(0);
+                JUMP_TO_JUMP_TARGET();
+            }
+            STAT_INC(GET_ITER, hit);
+            _tos_cache0 = iterable;
+            SET_CURRENT_CACHED_VALUES(1);
+            stack_pointer += -1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_ITER_VIRTUAL_r11: {
+            CHECK_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iterable;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            iterable = _stack_item_0;
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+            if (tp->_tp_iteritem == NULL) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache0 = iterable;
+                SET_CURRENT_CACHED_VALUES(1);
+                JUMP_TO_JUMP_TARGET();
+            }
+            STAT_INC(GET_ITER, hit);
+            _tos_cache0 = iterable;
+            SET_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_ITER_VIRTUAL_r22: {
+            CHECK_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iterable;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            iterable = _stack_item_1;
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+            if (tp->_tp_iteritem == NULL) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache1 = iterable;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(2);
+                JUMP_TO_JUMP_TARGET();
+            }
+            STAT_INC(GET_ITER, hit);
+            _tos_cache1 = iterable;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_ITER_VIRTUAL_r33: {
+            CHECK_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iterable;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            _PyStackRef _stack_item_2 = _tos_cache2;
+            iterable = _stack_item_2;
+            PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+            if (tp->_tp_iteritem == NULL) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache2 = iterable;
+                _tos_cache1 = _stack_item_1;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(3);
+                JUMP_TO_JUMP_TARGET();
+            }
+            STAT_INC(GET_ITER, hit);
+            _tos_cache2 = iterable;
+            _tos_cache1 = _stack_item_1;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _PUSH_TAGGED_ZERO_r01: {
+            CHECK_CURRENT_CACHED_VALUES(0);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef zero;
+            zero = PyStackRef_TagInt(0);
+            _tos_cache0 = zero;
+            SET_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _PUSH_TAGGED_ZERO_r12: {
+            CHECK_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef zero;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            zero = PyStackRef_TagInt(0);
+            _tos_cache1 = zero;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _PUSH_TAGGED_ZERO_r23: {
+            CHECK_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef zero;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            zero = PyStackRef_TagInt(0);
+            _tos_cache2 = zero;
+            _tos_cache1 = _stack_item_1;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GET_ITER_TRAD_r12: {
+            CHECK_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iterable;
+            _PyStackRef iter;
+            _PyStackRef index_or_null;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            iterable = _stack_item_0;
+            stack_pointer[0] = iterable;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            _PyFrame_SetStackPointer(frame, stack_pointer);
+            PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable));
+            stack_pointer = _PyFrame_GetStackPointer(frame);
+            stack_pointer += -1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            _PyFrame_SetStackPointer(frame, stack_pointer);
+            PyStackRef_CLOSE(iterable);
+            stack_pointer = _PyFrame_GetStackPointer(frame);
+            if (iter_o == NULL) {
+                SET_CURRENT_CACHED_VALUES(0);
+                JUMP_TO_ERROR();
+            }
+            iter = PyStackRef_FromPyObjectSteal(iter_o);
+            index_or_null = PyStackRef_NULL;
+            _tos_cache1 = index_or_null;
+            _tos_cache0 = iter;
+            _tos_cache2 = PyStackRef_ZERO_BITS;
+            SET_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
         /* _FOR_ITER is not a viable micro-op for tier 2 because it is replaced */
 
         case _FOR_ITER_TIER_TWO_r23: {
             break;
         }
 
+        case _GUARD_NOS_ITER_VIRTUAL_r02: {
+            CHECK_CURRENT_CACHED_VALUES(0);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iter;
+            iter = stack_pointer[-2];
+            PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+            if (Py_TYPE(iter_o)->_tp_iteritem == NULL) {
+                UOP_STAT_INC(uopcode, miss);
+                SET_CURRENT_CACHED_VALUES(0);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache1 = stack_pointer[-1];
+            _tos_cache0 = iter;
+            SET_CURRENT_CACHED_VALUES(2);
+            stack_pointer += -2;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_NOS_ITER_VIRTUAL_r12: {
+            CHECK_CURRENT_CACHED_VALUES(1);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iter;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            iter = stack_pointer[-1];
+            PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+            if (Py_TYPE(iter_o)->_tp_iteritem == NULL) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(1);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache1 = _stack_item_0;
+            _tos_cache0 = iter;
+            SET_CURRENT_CACHED_VALUES(2);
+            stack_pointer += -1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_NOS_ITER_VIRTUAL_r22: {
+            CHECK_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iter;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            iter = _stack_item_0;
+            PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+            if (Py_TYPE(iter_o)->_tp_iteritem == NULL) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache1 = _stack_item_1;
+                _tos_cache0 = iter;
+                SET_CURRENT_CACHED_VALUES(2);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache1 = _stack_item_1;
+            _tos_cache0 = iter;
+            SET_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        case _GUARD_NOS_ITER_VIRTUAL_r33: {
+            CHECK_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef iter;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            _PyStackRef _stack_item_2 = _tos_cache2;
+            iter = _stack_item_1;
+            PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+            if (Py_TYPE(iter_o)->_tp_iteritem == NULL) {
+                UOP_STAT_INC(uopcode, miss);
+                _tos_cache2 = _stack_item_2;
+                _tos_cache1 = iter;
+                _tos_cache0 = _stack_item_0;
+                SET_CURRENT_CACHED_VALUES(3);
+                JUMP_TO_JUMP_TARGET();
+            }
+            _tos_cache2 = _stack_item_2;
+            _tos_cache1 = iter;
+            _tos_cache0 = _stack_item_0;
+            SET_CURRENT_CACHED_VALUES(3);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
+        /* _FOR_ITER_VIRTUAL is not a viable micro-op for tier 2 because it is replaced */
+
+        case _FOR_ITER_VIRTUAL_TIER_TWO_r23: {
+            CHECK_CURRENT_CACHED_VALUES(2);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            _PyStackRef null_or_index;
+            _PyStackRef iter;
+            _PyStackRef next;
+            _PyStackRef _stack_item_0 = _tos_cache0;
+            _PyStackRef _stack_item_1 = _tos_cache1;
+            null_or_index = _stack_item_1;
+            iter = _stack_item_0;
+            PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+            Py_ssize_t index = PyStackRef_UntagInt(null_or_index);
+            stack_pointer[0] = iter;
+            stack_pointer[1] = null_or_index;
+            stack_pointer += 2;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            _PyFrame_SetStackPointer(frame, stack_pointer);
+            _PyObjectIndexPair next_index = Py_TYPE(iter_o)->_tp_iteritem(iter_o, index);
+            stack_pointer = _PyFrame_GetStackPointer(frame);
+            PyObject *next_o = next_index.object;
+            index = next_index.index;
+            if (next_o == NULL) {
+                if (index < 0) {
+                    SET_CURRENT_CACHED_VALUES(0);
+                    JUMP_TO_ERROR();
+                }
+                if (true) {
+                    UOP_STAT_INC(uopcode, miss);
+                    _tos_cache1 = null_or_index;
+                    _tos_cache0 = iter;
+                    SET_CURRENT_CACHED_VALUES(2);
+                    stack_pointer += -2;
+                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+                    JUMP_TO_JUMP_TARGET();
+                }
+            }
+            next = PyStackRef_FromPyObjectSteal(next_o);
+            null_or_index = PyStackRef_TagInt(index);
+            _tos_cache2 = next;
+            _tos_cache1 = null_or_index;
+            _tos_cache0 = iter;
+            SET_CURRENT_CACHED_VALUES(3);
+            stack_pointer += -2;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
+            break;
+        }
+
         /* _INSTRUMENTED_FOR_ITER is not a viable micro-op for tier 2 because it is instrumented */
 
         case _ITER_CHECK_LIST_r02: {
index e988f4451007fb3462e6573a10462120de8518e6..c234fa3d8c38762f9fb830d6ca3947d54c81f595 100644 (file)
@@ -963,7 +963,7 @@ label_exception_targets(basicblock *entryblock) {
             }
             else if (instr->i_opcode == RESUME) {
                 instr->i_except = handler;
-                if (instr->i_oparg != RESUME_AT_FUNC_START) {
+                if (instr->i_oparg != RESUME_AT_FUNC_START && instr->i_oparg != RESUME_AT_GEN_EXPR_START) {
                     assert(last_yield_except_depth >= 0);
                     if (last_yield_except_depth == 1) {
                         instr->i_oparg |= RESUME_OPARG_DEPTH1_MASK;
index 8e8423c265f458b1ab16934c28ec475b31ec2940..e84886ed04020c990e49c4f34010434be29d9a9f 100644 (file)
             DISPATCH();
         }
 
+        TARGET(FOR_ITER_VIRTUAL) {
+            #if _Py_TAIL_CALL_INTERP
+            int opcode = FOR_ITER_VIRTUAL;
+            (void)(opcode);
+            #endif
+            _Py_CODEUNIT* const this_instr = next_instr;
+            (void)this_instr;
+            frame->instr_ptr = next_instr;
+            next_instr += 2;
+            INSTRUCTION_STATS(FOR_ITER_VIRTUAL);
+            static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size");
+            _PyStackRef iter;
+            _PyStackRef null_or_index;
+            _PyStackRef next;
+            /* Skip 1 cache entry */
+            // _GUARD_NOS_ITER_VIRTUAL
+            {
+                iter = stack_pointer[-2];
+                PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+                if (Py_TYPE(iter_o)->_tp_iteritem == NULL) {
+                    UPDATE_MISS_STATS(FOR_ITER);
+                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
+                    JUMP_TO_PREDICTED(FOR_ITER);
+                }
+            }
+            // _FOR_ITER_VIRTUAL
+            {
+                null_or_index = stack_pointer[-1];
+                PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
+                Py_ssize_t index = PyStackRef_UntagInt(null_or_index);
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                _PyObjectIndexPair next_index = Py_TYPE(iter_o)->_tp_iteritem(iter_o, index);
+                stack_pointer = _PyFrame_GetStackPointer(frame);
+                PyObject *next_o = next_index.object;
+                index = next_index.index;
+                if (next_o == NULL) {
+                    if (index < 0) {
+                        JUMP_TO_LABEL(error);
+                    }
+                    JUMPBY(oparg + 1);
+                    DISPATCH();
+                }
+                null_or_index = PyStackRef_TagInt(index);
+                next = PyStackRef_FromPyObjectSteal(next_o);
+            }
+            stack_pointer[-1] = null_or_index;
+            stack_pointer[0] = next;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            DISPATCH();
+        }
+
         TARGET(GET_AITER) {
             #if _Py_TAIL_CALL_INTERP
             int opcode = GET_AITER;
             (void)(opcode);
             #endif
             frame->instr_ptr = next_instr;
-            next_instr += 1;
+            next_instr += 2;
             INSTRUCTION_STATS(GET_ITER);
+            PREDICTED_GET_ITER:;
+            _Py_CODEUNIT* const this_instr = next_instr - 2;
+            (void)this_instr;
             _PyStackRef iterable;
             _PyStackRef iter;
             _PyStackRef index_or_null;
-            iterable = stack_pointer[-1];
-            #ifdef Py_STATS
-            _Py_GatherStats_GetIter(iterable);
-            #endif
-            _PyFrame_SetStackPointer(frame, stack_pointer);
-            _PyStackRef result = _PyEval_GetIter(iterable, &index_or_null, oparg);
-            stack_pointer = _PyFrame_GetStackPointer(frame);
-            if (PyStackRef_IsError(result)) {
-                JUMP_TO_LABEL(pop_1_error);
+            // _SPECIALIZE_GET_ITER
+            {
+                iterable = stack_pointer[-1];
+                uint16_t counter = read_u16(&this_instr[1].cache);
+                (void)counter;
+                #if ENABLE_SPECIALIZATION
+                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
+                    next_instr = this_instr;
+                    _PyFrame_SetStackPointer(frame, stack_pointer);
+                    _Py_Specialize_GetIter(iterable, next_instr);
+                    stack_pointer = _PyFrame_GetStackPointer(frame);
+                    DISPATCH_SAME_OPARG();
+                }
+                OPCODE_DEFERRED_INC(GET_ITER);
+                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
+                #endif  /* ENABLE_SPECIALIZATION */
+            }
+            // _GET_ITER
+            {
+                _PyFrame_SetStackPointer(frame, stack_pointer);
+                _PyStackRef result = _PyEval_GetIter(iterable, &index_or_null, oparg);
+                stack_pointer = _PyFrame_GetStackPointer(frame);
+                if (PyStackRef_IsError(result)) {
+                    JUMP_TO_LABEL(pop_1_error);
+                }
+                iter = result;
             }
-            iter = result;
             stack_pointer[-1] = iter;
             stack_pointer[0] = index_or_null;
             stack_pointer += 1;
             DISPATCH();
         }
 
+        TARGET(GET_ITER_SELF) {
+            #if _Py_TAIL_CALL_INTERP
+            int opcode = GET_ITER_SELF;
+            (void)(opcode);
+            #endif
+            _Py_CODEUNIT* const this_instr = next_instr;
+            (void)this_instr;
+            frame->instr_ptr = next_instr;
+            next_instr += 2;
+            INSTRUCTION_STATS(GET_ITER_SELF);
+            static_assert(INLINE_CACHE_ENTRIES_GET_ITER == 1, "incorrect cache size");
+            _PyStackRef iterable;
+            _PyStackRef res;
+            /* Skip 1 cache entry */
+            // _GUARD_ITERATOR
+            {
+                iterable = stack_pointer[-1];
+                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+                if (tp->tp_iter != PyObject_SelfIter) {
+                    UPDATE_MISS_STATS(GET_ITER);
+                    assert(_PyOpcode_Deopt[opcode] == (GET_ITER));
+                    JUMP_TO_PREDICTED(GET_ITER);
+                }
+                STAT_INC(GET_ITER, hit);
+            }
+            // _PUSH_NULL
+            {
+                res = PyStackRef_NULL;
+            }
+            stack_pointer[0] = res;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            DISPATCH();
+        }
+
+        TARGET(GET_ITER_VIRTUAL) {
+            #if _Py_TAIL_CALL_INTERP
+            int opcode = GET_ITER_VIRTUAL;
+            (void)(opcode);
+            #endif
+            _Py_CODEUNIT* const this_instr = next_instr;
+            (void)this_instr;
+            frame->instr_ptr = next_instr;
+            next_instr += 2;
+            INSTRUCTION_STATS(GET_ITER_VIRTUAL);
+            static_assert(INLINE_CACHE_ENTRIES_GET_ITER == 1, "incorrect cache size");
+            _PyStackRef iterable;
+            _PyStackRef zero;
+            /* Skip 1 cache entry */
+            // _GUARD_ITER_VIRTUAL
+            {
+                iterable = stack_pointer[-1];
+                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
+                if (tp->_tp_iteritem == NULL) {
+                    UPDATE_MISS_STATS(GET_ITER);
+                    assert(_PyOpcode_Deopt[opcode] == (GET_ITER));
+                    JUMP_TO_PREDICTED(GET_ITER);
+                }
+                STAT_INC(GET_ITER, hit);
+            }
+            // _PUSH_TAGGED_ZERO
+            {
+                zero = PyStackRef_TagInt(0);
+            }
+            stack_pointer[0] = zero;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            DISPATCH();
+        }
+
         TARGET(GET_LEN) {
             #if _Py_TAIL_CALL_INTERP
             int opcode = GET_LEN;
index 48fe9c14f4e2dda5d9d5bac02f00c2d5b2bc0b22..d99b618c8393fcb6a9cb935947ce37634df4156f 100644 (file)
@@ -178,6 +178,9 @@ static void *opcode_targets_table[256] = {
     &&TARGET_FOR_ITER_LIST,
     &&TARGET_FOR_ITER_RANGE,
     &&TARGET_FOR_ITER_TUPLE,
+    &&TARGET_FOR_ITER_VIRTUAL,
+    &&TARGET_GET_ITER_SELF,
+    &&TARGET_GET_ITER_VIRTUAL,
     &&TARGET_JUMP_BACKWARD_JIT,
     &&TARGET_JUMP_BACKWARD_NO_JIT,
     &&TARGET_LOAD_ATTR_CLASS,
@@ -230,9 +233,6 @@ static void *opcode_targets_table[256] = {
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
     &&TARGET_INSTRUMENTED_END_FOR,
     &&TARGET_INSTRUMENTED_POP_ITER,
     &&TARGET_INSTRUMENTED_END_SEND,
@@ -473,9 +473,9 @@ static void *opcode_tracing_targets_table[256] = {
     &&TARGET_TRACE_RECORD,
     &&TARGET_TRACE_RECORD,
     &&TARGET_TRACE_RECORD,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
-    &&_unknown_opcode,
+    &&TARGET_TRACE_RECORD,
+    &&TARGET_TRACE_RECORD,
+    &&TARGET_TRACE_RECORD,
     &&_unknown_opcode,
     &&_unknown_opcode,
     &&_unknown_opcode,
@@ -621,10 +621,13 @@ static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_GEN(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_LIST(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_RANGE(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_TUPLE(TAIL_CALL_PARAMS);
+static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_VIRTUAL(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AITER(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ANEXT(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AWAITABLE(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER(TAIL_CALL_PARAMS);
+static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER_SELF(TAIL_CALL_PARAMS);
+static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER_VIRTUAL(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_LEN(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_IMPORT_FROM(TAIL_CALL_PARAMS);
 static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_IMPORT_NAME(TAIL_CALL_PARAMS);
@@ -862,10 +865,13 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = {
     [FOR_ITER_LIST] = _TAIL_CALL_FOR_ITER_LIST,
     [FOR_ITER_RANGE] = _TAIL_CALL_FOR_ITER_RANGE,
     [FOR_ITER_TUPLE] = _TAIL_CALL_FOR_ITER_TUPLE,
+    [FOR_ITER_VIRTUAL] = _TAIL_CALL_FOR_ITER_VIRTUAL,
     [GET_AITER] = _TAIL_CALL_GET_AITER,
     [GET_ANEXT] = _TAIL_CALL_GET_ANEXT,
     [GET_AWAITABLE] = _TAIL_CALL_GET_AWAITABLE,
     [GET_ITER] = _TAIL_CALL_GET_ITER,
+    [GET_ITER_SELF] = _TAIL_CALL_GET_ITER_SELF,
+    [GET_ITER_VIRTUAL] = _TAIL_CALL_GET_ITER_VIRTUAL,
     [GET_LEN] = _TAIL_CALL_GET_LEN,
     [IMPORT_FROM] = _TAIL_CALL_IMPORT_FROM,
     [IMPORT_NAME] = _TAIL_CALL_IMPORT_NAME,
@@ -1008,9 +1014,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = {
     [125] = _TAIL_CALL_UNKNOWN_OPCODE,
     [126] = _TAIL_CALL_UNKNOWN_OPCODE,
     [127] = _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,
@@ -1120,10 +1123,13 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = {
     [FOR_ITER_LIST] = _TAIL_CALL_TRACE_RECORD,
     [FOR_ITER_RANGE] = _TAIL_CALL_TRACE_RECORD,
     [FOR_ITER_TUPLE] = _TAIL_CALL_TRACE_RECORD,
+    [FOR_ITER_VIRTUAL] = _TAIL_CALL_TRACE_RECORD,
     [GET_AITER] = _TAIL_CALL_TRACE_RECORD,
     [GET_ANEXT] = _TAIL_CALL_TRACE_RECORD,
     [GET_AWAITABLE] = _TAIL_CALL_TRACE_RECORD,
     [GET_ITER] = _TAIL_CALL_TRACE_RECORD,
+    [GET_ITER_SELF] = _TAIL_CALL_TRACE_RECORD,
+    [GET_ITER_VIRTUAL] = _TAIL_CALL_TRACE_RECORD,
     [GET_LEN] = _TAIL_CALL_TRACE_RECORD,
     [IMPORT_FROM] = _TAIL_CALL_TRACE_RECORD,
     [IMPORT_NAME] = _TAIL_CALL_TRACE_RECORD,
@@ -1266,9 +1272,6 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = {
     [125] = _TAIL_CALL_UNKNOWN_OPCODE,
     [126] = _TAIL_CALL_UNKNOWN_OPCODE,
     [127] = _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,
index 5d5aecda4e45e382929d549fb411abe73bcb0d90..60f3e541be25cfcc6baff4a1f50e1495dcaad581 100644 (file)
@@ -496,8 +496,10 @@ _PyUOp_Replacements[MAX_UOP_ID + 1] = {
     [_ITER_JUMP_LIST] = _GUARD_NOT_EXHAUSTED_LIST,
     [_ITER_JUMP_TUPLE] = _GUARD_NOT_EXHAUSTED_TUPLE,
     [_FOR_ITER] = _FOR_ITER_TIER_TWO,
+    [_FOR_ITER_VIRTUAL] = _FOR_ITER_VIRTUAL_TIER_TWO,
     [_ITER_NEXT_LIST] = _ITER_NEXT_LIST_TIER_TWO,
     [_CHECK_PERIODIC_AT_END] = _TIER2_RESUME_CHECK,
+    [_LOAD_BYTECODE] = _NOP,
 };
 
 static const uint8_t
index d3e69eafd8b623e17b196d4deec0d8cace5d138b..6e4882143fbe504ff4eb2df180ce185b13f46363 100644 (file)
@@ -1396,9 +1396,46 @@ dummy_func(void) {
     }
 
     op(_GET_ITER, (iterable -- iter, index_or_null)) {
-        if (sym_matches_type(iterable, &PyTuple_Type) || sym_matches_type(iterable, &PyList_Type)) {
+        bool is_coro = false;
+        bool is_trad = false; // has `tp_iter` slot
+        bool definite = true;
+        PyTypeObject *tp = sym_get_type(iterable);
+        if (tp == NULL) {
+            definite = false;
+            tp = sym_get_probable_type(iterable);
+        }
+        if (oparg == GET_ITER_YIELD_FROM_NO_CHECK) {
+            if (tp == &PyCoro_Type) {
+                if (!definite) {
+                    ADD_OP(_GUARD_TYPE, 0, (uintptr_t)tp);
+                    sym_set_type(iterable, tp);
+                }
+                ADD_OP(_PUSH_NULL, 0, 0);
+                is_coro = true;
+            }
+        }
+        if (tp != NULL &&
+            tp->_tp_iteritem == NULL &&
+            tp->tp_iter != NULL &&
+            tp->tp_iter != PyObject_SelfIter &&
+            tp->tp_flags & Py_TPFLAGS_IMMUTABLETYPE
+        ) {
+            assert(tp != &PyCoro_Type);
+            is_trad = true;
+            if (!definite) {
+                ADD_OP(_GUARD_TYPE, 0, (uintptr_t)tp);
+                sym_set_type(iterable, tp);
+            }
+            ADD_OP(_GET_ITER_TRAD, 0, 0);
+        }
+        if (is_coro) {
+            assert(!is_trad);
             iter = iterable;
-            index_or_null = sym_new_not_null(ctx);
+            index_or_null = sym_new_null(ctx);
+        }
+        else if (is_trad) {
+            iter = sym_new_not_null(ctx);
+            index_or_null = sym_new_null(ctx);
         }
         else {
             iter = sym_new_not_null(ctx);
@@ -1406,6 +1443,42 @@ dummy_func(void) {
         }
     }
 
+    op(_GUARD_ITERATOR, (iterable -- iterable)) {
+        bool definite = true;
+        PyTypeObject *tp = sym_get_type(iterable);
+        if (tp == NULL) {
+            definite = false;
+            tp = sym_get_probable_type(iterable);
+        }
+        if (tp != NULL && tp->tp_iter == PyObject_SelfIter) {
+            if (definite) {
+                ADD_OP(_NOP, 0, 0);
+            }
+            else {
+                ADD_OP(_GUARD_TYPE, 0, (uintptr_t)tp);
+                sym_set_type(iterable, tp);
+            }
+        }
+    }
+
+    op(_GUARD_ITER_VIRTUAL, (iterable -- iterable)) {
+        bool definite = true;
+        PyTypeObject *tp = sym_get_type(iterable);
+        if (tp == NULL) {
+            definite = false;
+            tp = sym_get_probable_type(iterable);
+        }
+        if (tp != NULL && tp->_tp_iteritem != NULL) {
+            if (definite) {
+                ADD_OP(_NOP, 0, 0);
+            }
+            else {
+                ADD_OP(_GUARD_TYPE, 0, (uintptr_t)tp);
+                sym_set_type(iterable, tp);
+            }
+        }
+    }
+
     op(_FOR_ITER_GEN_FRAME, (iter, unused -- iter, unused, gen_frame)) {
         _Py_UOpsAbstractFrame *new_frame = frame_new_from_symbol(ctx, iter, NULL, 0);
         if (new_frame == NULL) {
index b2b4147e11e72ff8ef01ebd9ef8a85bda1c1a915..c3c889e9de9a7e47fb232ac74929bce0da361b69 100644 (file)
             break;
         }
 
+        case _GUARD_TYPE: {
+            break;
+        }
+
         case _CHECK_MANAGED_OBJECT_HAS_VALUES: {
             break;
         }
             JitOptRef iter;
             JitOptRef index_or_null;
             iterable = stack_pointer[-1];
-            if (sym_matches_type(iterable, &PyTuple_Type) || sym_matches_type(iterable, &PyList_Type)) {
+            bool is_coro = false;
+            bool is_trad = false;
+            bool definite = true;
+            PyTypeObject *tp = sym_get_type(iterable);
+            if (tp == NULL) {
+                definite = false;
+                tp = sym_get_probable_type(iterable);
+            }
+            if (oparg == GET_ITER_YIELD_FROM_NO_CHECK) {
+                if (tp == &PyCoro_Type) {
+                    if (!definite) {
+                        ADD_OP(_GUARD_TYPE, 0, (uintptr_t)tp);
+                        sym_set_type(iterable, tp);
+                    }
+                    ADD_OP(_PUSH_NULL, 0, 0);
+                    is_coro = true;
+                }
+            }
+            if (tp != NULL &&
+                tp->_tp_iteritem == NULL &&
+                tp->tp_iter != NULL &&
+                tp->tp_iter != PyObject_SelfIter &&
+                tp->tp_flags & Py_TPFLAGS_IMMUTABLETYPE
+            ) {
+                assert(tp != &PyCoro_Type);
+                is_trad = true;
+                if (!definite) {
+                    ADD_OP(_GUARD_TYPE, 0, (uintptr_t)tp);
+                    sym_set_type(iterable, tp);
+                }
+                ADD_OP(_GET_ITER_TRAD, 0, 0);
+            }
+            if (is_coro) {
+                assert(!is_trad);
                 iter = iterable;
-                index_or_null = sym_new_not_null(ctx);
+                index_or_null = sym_new_null(ctx);
+            }
+            else if (is_trad) {
+                iter = sym_new_not_null(ctx);
+                index_or_null = sym_new_null(ctx);
             }
             else {
                 iter = sym_new_not_null(ctx);
             break;
         }
 
+        case _GUARD_ITERATOR: {
+            JitOptRef iterable;
+            iterable = stack_pointer[-1];
+            bool definite = true;
+            PyTypeObject *tp = sym_get_type(iterable);
+            if (tp == NULL) {
+                definite = false;
+                tp = sym_get_probable_type(iterable);
+            }
+            if (tp != NULL && tp->tp_iter == PyObject_SelfIter) {
+                if (definite) {
+                    ADD_OP(_NOP, 0, 0);
+                }
+                else {
+                    ADD_OP(_GUARD_TYPE, 0, (uintptr_t)tp);
+                    sym_set_type(iterable, tp);
+                }
+            }
+            break;
+        }
+
+        case _GUARD_ITER_VIRTUAL: {
+            JitOptRef iterable;
+            iterable = stack_pointer[-1];
+            bool definite = true;
+            PyTypeObject *tp = sym_get_type(iterable);
+            if (tp == NULL) {
+                definite = false;
+                tp = sym_get_probable_type(iterable);
+            }
+            if (tp != NULL && tp->_tp_iteritem != NULL) {
+                if (definite) {
+                    ADD_OP(_NOP, 0, 0);
+                }
+                else {
+                    ADD_OP(_GUARD_TYPE, 0, (uintptr_t)tp);
+                    sym_set_type(iterable, tp);
+                }
+            }
+            break;
+        }
+
+        case _PUSH_TAGGED_ZERO: {
+            JitOptRef zero;
+            zero = sym_new_not_null(ctx);
+            CHECK_STACK_BOUNDS(1);
+            stack_pointer[0] = zero;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            break;
+        }
+
+        case _GET_ITER_TRAD: {
+            JitOptRef iter;
+            JitOptRef index_or_null;
+            iter = sym_new_not_null(ctx);
+            index_or_null = sym_new_not_null(ctx);
+            CHECK_STACK_BOUNDS(1);
+            stack_pointer[-1] = iter;
+            stack_pointer[0] = index_or_null;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            break;
+        }
+
         /* _FOR_ITER is not a viable micro-op for tier 2 */
 
         case _FOR_ITER_TIER_TWO: {
             break;
         }
 
+        case _GUARD_NOS_ITER_VIRTUAL: {
+            break;
+        }
+
+        /* _FOR_ITER_VIRTUAL is not a viable micro-op for tier 2 */
+
+        case _FOR_ITER_VIRTUAL_TIER_TWO: {
+            JitOptRef next;
+            next = sym_new_not_null(ctx);
+            CHECK_STACK_BOUNDS(1);
+            stack_pointer[0] = next;
+            stack_pointer += 1;
+            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
+            break;
+        }
+
         /* _INSTRUMENTED_FOR_ITER is not a viable micro-op for tier 2 */
 
         case _ITER_CHECK_LIST: {
index bcf14e888271122ed338124071388af76fe65659..dff13bfb45e5b0a429bec14b7727ba300b24d6a3 100644 (file)
@@ -122,6 +122,9 @@ const _PyOpcodeRecordEntry _PyOpcode_RecordEntries[256] = {
         [STORE_ATTR_INSTANCE_VALUE] = {1, {_RECORD_TOS_TYPE_INDEX}},
         [STORE_ATTR_WITH_HINT] = {1, {_RECORD_TOS_TYPE_INDEX}},
         [STORE_ATTR_SLOT] = {1, {_RECORD_TOS_TYPE_INDEX}},
+        [GET_ITER] = {1, {_RECORD_TOS_TYPE_INDEX}},
+        [GET_ITER_SELF] = {1, {_RECORD_TOS_TYPE_INDEX}},
+        [GET_ITER_VIRTUAL] = {1, {_RECORD_TOS_TYPE_INDEX}},
         [FOR_ITER_GEN] = {1, {_RECORD_NOS_GEN_FUNC_INDEX}},
         [LOAD_SPECIAL] = {1, {_RECORD_TOS_TYPE_INDEX}},
         [LOAD_ATTR_METHOD_WITH_VALUES] = {1, {_RECORD_TOS_TYPE_INDEX}},
index b495a92f5bce83ab2d1102e75f665249ef87a1ab..cadd25314686d5efafc8d5772a81c70dcf5c8f43 100644 (file)
@@ -2715,20 +2715,24 @@ _Py_Specialize_ForIter(_PyStackRef iter, _PyStackRef null_or_index, _Py_CODEUNIT
         }
     }
     else {
-        if (tp == &PyList_Type) {
-#ifdef Py_GIL_DISABLED
-            // Only specialize for lists owned by this thread or shared
-            if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) {
-                goto failure;
+        if (tp->_tp_iteritem != NULL) {
+            if (tp == &PyList_Type) {
+    #ifdef Py_GIL_DISABLED
+                // Only specialize for lists owned by this thread or shared
+                if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) {
+                    goto failure;
+                }
+    #endif
+                specialize(instr, FOR_ITER_LIST);
+                return;
+            }
+            else if (tp == &PyTuple_Type) {
+                specialize(instr, FOR_ITER_TUPLE);
+                return;
             }
-#endif
-            specialize(instr, FOR_ITER_LIST);
-            return;
-        }
-        else if (tp == &PyTuple_Type) {
-            specialize(instr, FOR_ITER_TUPLE);
-            return;
         }
+        specialize(instr, FOR_ITER_VIRTUAL);
+        return;
     }
 failure:
     SPECIALIZATION_FAIL(FOR_ITER,
@@ -2923,6 +2927,23 @@ _Py_Specialize_ContainsOp(_PyStackRef value_st, _Py_CODEUNIT *instr)
     return;
 }
 
+void
+_Py_Specialize_GetIter(_PyStackRef iterable, _Py_CODEUNIT *instr)
+{
+    assert(ENABLE_SPECIALIZATION);
+    PyTypeObject *tp = PyStackRef_TYPE(iterable);
+    if (tp->_tp_iteritem != NULL) {
+        specialize(instr, GET_ITER_VIRTUAL);
+        return;
+    }
+    if (tp->tp_iter == PyObject_SelfIter) {
+        specialize(instr, GET_ITER_SELF);
+        return;
+    }
+    SPECIALIZATION_FAIL(GET_ITER,
+        tp == &PyCoro_Type ? SPEC_FAIL_ITER_COROUTINE : SPEC_FAIL_OTHER);
+    unspecialize(instr);
+}
 
 void
 _Py_Specialize_Resume(_Py_CODEUNIT *instr, PyThreadState *tstate, _PyInterpreterFrame *frame)
index 4ec46d8cac6e4b5304e3118831b30d8fec0769b0..ccf8bf649520ff6b2276c39a2c1efc5442710317 100644 (file)
@@ -70,7 +70,6 @@ def parse_files(filenames: list[str]) -> list[AstNode]:
             assert node is not None
             result.append(node)  # type: ignore[arg-type]
         if not psr.eof():
-            pprint.pprint(result)
             psr.backup()
             raise psr.make_syntax_error(
                 f"Extra stuff at the end of {filename}", psr.next(True)