File indexing completed on 2025-11-19 09:50:49
0001
0002
0003
0004
0005
0006 #ifndef Py_CORE_OPCODE_METADATA_H
0007 #define Py_CORE_OPCODE_METADATA_H
0008 #ifdef __cplusplus
0009 extern "C" {
0010 #endif
0011
0012 #ifndef Py_BUILD_CORE
0013 # error "this header requires Py_BUILD_CORE define"
0014 #endif
0015
0016 #include <stdbool.h> // bool
0017 #include "opcode_ids.h"
0018
0019
0020 #define IS_PSEUDO_INSTR(OP) ( \
0021 ((OP) == LOAD_CLOSURE) || \
0022 ((OP) == STORE_FAST_MAYBE_NULL) || \
0023 ((OP) == LOAD_SUPER_METHOD) || \
0024 ((OP) == LOAD_ZERO_SUPER_METHOD) || \
0025 ((OP) == LOAD_ZERO_SUPER_ATTR) || \
0026 ((OP) == LOAD_METHOD) || \
0027 ((OP) == JUMP) || \
0028 ((OP) == JUMP_NO_INTERRUPT) || \
0029 ((OP) == SETUP_FINALLY) || \
0030 ((OP) == SETUP_CLEANUP) || \
0031 ((OP) == SETUP_WITH) || \
0032 ((OP) == POP_BLOCK) || \
0033 0)
0034
0035 #include "pycore_uop_ids.h"
0036 extern int _PyOpcode_num_popped(int opcode, int oparg);
0037 #ifdef NEED_OPCODE_METADATA
0038 int _PyOpcode_num_popped(int opcode, int oparg) {
0039 switch(opcode) {
0040 case BEFORE_ASYNC_WITH:
0041 return 1;
0042 case BEFORE_WITH:
0043 return 1;
0044 case BINARY_OP:
0045 return 2;
0046 case BINARY_OP_ADD_FLOAT:
0047 return 2;
0048 case BINARY_OP_ADD_INT:
0049 return 2;
0050 case BINARY_OP_ADD_UNICODE:
0051 return 2;
0052 case BINARY_OP_INPLACE_ADD_UNICODE:
0053 return 2;
0054 case BINARY_OP_MULTIPLY_FLOAT:
0055 return 2;
0056 case BINARY_OP_MULTIPLY_INT:
0057 return 2;
0058 case BINARY_OP_SUBTRACT_FLOAT:
0059 return 2;
0060 case BINARY_OP_SUBTRACT_INT:
0061 return 2;
0062 case BINARY_SLICE:
0063 return 3;
0064 case BINARY_SUBSCR:
0065 return 2;
0066 case BINARY_SUBSCR_DICT:
0067 return 2;
0068 case BINARY_SUBSCR_GETITEM:
0069 return 2;
0070 case BINARY_SUBSCR_LIST_INT:
0071 return 2;
0072 case BINARY_SUBSCR_STR_INT:
0073 return 2;
0074 case BINARY_SUBSCR_TUPLE_INT:
0075 return 2;
0076 case BUILD_CONST_KEY_MAP:
0077 return 1 + oparg;
0078 case BUILD_LIST:
0079 return oparg;
0080 case BUILD_MAP:
0081 return oparg*2;
0082 case BUILD_SET:
0083 return oparg;
0084 case BUILD_SLICE:
0085 return 2 + ((oparg == 3) ? 1 : 0);
0086 case BUILD_STRING:
0087 return oparg;
0088 case BUILD_TUPLE:
0089 return oparg;
0090 case CACHE:
0091 return 0;
0092 case CALL:
0093 return 2 + oparg;
0094 case CALL_ALLOC_AND_ENTER_INIT:
0095 return 2 + oparg;
0096 case CALL_BOUND_METHOD_EXACT_ARGS:
0097 return 2 + oparg;
0098 case CALL_BOUND_METHOD_GENERAL:
0099 return 2 + oparg;
0100 case CALL_BUILTIN_CLASS:
0101 return 2 + oparg;
0102 case CALL_BUILTIN_FAST:
0103 return 2 + oparg;
0104 case CALL_BUILTIN_FAST_WITH_KEYWORDS:
0105 return 2 + oparg;
0106 case CALL_BUILTIN_O:
0107 return 2 + oparg;
0108 case CALL_FUNCTION_EX:
0109 return 3 + (oparg & 1);
0110 case CALL_INTRINSIC_1:
0111 return 1;
0112 case CALL_INTRINSIC_2:
0113 return 2;
0114 case CALL_ISINSTANCE:
0115 return 2 + oparg;
0116 case CALL_KW:
0117 return 3 + oparg;
0118 case CALL_LEN:
0119 return 2 + oparg;
0120 case CALL_LIST_APPEND:
0121 return 3;
0122 case CALL_METHOD_DESCRIPTOR_FAST:
0123 return 2 + oparg;
0124 case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS:
0125 return 2 + oparg;
0126 case CALL_METHOD_DESCRIPTOR_NOARGS:
0127 return 2 + oparg;
0128 case CALL_METHOD_DESCRIPTOR_O:
0129 return 2 + oparg;
0130 case CALL_NON_PY_GENERAL:
0131 return 2 + oparg;
0132 case CALL_PY_EXACT_ARGS:
0133 return 2 + oparg;
0134 case CALL_PY_GENERAL:
0135 return 2 + oparg;
0136 case CALL_STR_1:
0137 return 3;
0138 case CALL_TUPLE_1:
0139 return 3;
0140 case CALL_TYPE_1:
0141 return 3;
0142 case CHECK_EG_MATCH:
0143 return 2;
0144 case CHECK_EXC_MATCH:
0145 return 2;
0146 case CLEANUP_THROW:
0147 return 3;
0148 case COMPARE_OP:
0149 return 2;
0150 case COMPARE_OP_FLOAT:
0151 return 2;
0152 case COMPARE_OP_INT:
0153 return 2;
0154 case COMPARE_OP_STR:
0155 return 2;
0156 case CONTAINS_OP:
0157 return 2;
0158 case CONTAINS_OP_DICT:
0159 return 2;
0160 case CONTAINS_OP_SET:
0161 return 2;
0162 case CONVERT_VALUE:
0163 return 1;
0164 case COPY:
0165 return 1 + (oparg-1);
0166 case COPY_FREE_VARS:
0167 return 0;
0168 case DELETE_ATTR:
0169 return 1;
0170 case DELETE_DEREF:
0171 return 0;
0172 case DELETE_FAST:
0173 return 0;
0174 case DELETE_GLOBAL:
0175 return 0;
0176 case DELETE_NAME:
0177 return 0;
0178 case DELETE_SUBSCR:
0179 return 2;
0180 case DICT_MERGE:
0181 return 5 + (oparg - 1);
0182 case DICT_UPDATE:
0183 return 2 + (oparg - 1);
0184 case END_ASYNC_FOR:
0185 return 2;
0186 case END_FOR:
0187 return 1;
0188 case END_SEND:
0189 return 2;
0190 case ENTER_EXECUTOR:
0191 return 0;
0192 case EXIT_INIT_CHECK:
0193 return 1;
0194 case EXTENDED_ARG:
0195 return 0;
0196 case FORMAT_SIMPLE:
0197 return 1;
0198 case FORMAT_WITH_SPEC:
0199 return 2;
0200 case FOR_ITER:
0201 return 1;
0202 case FOR_ITER_GEN:
0203 return 1;
0204 case FOR_ITER_LIST:
0205 return 1;
0206 case FOR_ITER_RANGE:
0207 return 1;
0208 case FOR_ITER_TUPLE:
0209 return 1;
0210 case GET_AITER:
0211 return 1;
0212 case GET_ANEXT:
0213 return 1;
0214 case GET_AWAITABLE:
0215 return 1;
0216 case GET_ITER:
0217 return 1;
0218 case GET_LEN:
0219 return 1;
0220 case GET_YIELD_FROM_ITER:
0221 return 1;
0222 case IMPORT_FROM:
0223 return 1;
0224 case IMPORT_NAME:
0225 return 2;
0226 case INSTRUMENTED_CALL:
0227 return 0;
0228 case INSTRUMENTED_CALL_FUNCTION_EX:
0229 return 0;
0230 case INSTRUMENTED_CALL_KW:
0231 return 0;
0232 case INSTRUMENTED_END_FOR:
0233 return 2;
0234 case INSTRUMENTED_END_SEND:
0235 return 2;
0236 case INSTRUMENTED_FOR_ITER:
0237 return 0;
0238 case INSTRUMENTED_INSTRUCTION:
0239 return 0;
0240 case INSTRUMENTED_JUMP_BACKWARD:
0241 return 0;
0242 case INSTRUMENTED_JUMP_FORWARD:
0243 return 0;
0244 case INSTRUMENTED_LOAD_SUPER_ATTR:
0245 return 3;
0246 case INSTRUMENTED_POP_JUMP_IF_FALSE:
0247 return 0;
0248 case INSTRUMENTED_POP_JUMP_IF_NONE:
0249 return 0;
0250 case INSTRUMENTED_POP_JUMP_IF_NOT_NONE:
0251 return 0;
0252 case INSTRUMENTED_POP_JUMP_IF_TRUE:
0253 return 0;
0254 case INSTRUMENTED_RESUME:
0255 return 0;
0256 case INSTRUMENTED_RETURN_CONST:
0257 return 0;
0258 case INSTRUMENTED_RETURN_VALUE:
0259 return 1;
0260 case INSTRUMENTED_YIELD_VALUE:
0261 return 1;
0262 case INTERPRETER_EXIT:
0263 return 1;
0264 case IS_OP:
0265 return 2;
0266 case JUMP_BACKWARD:
0267 return 0;
0268 case JUMP_BACKWARD_NO_INTERRUPT:
0269 return 0;
0270 case JUMP_FORWARD:
0271 return 0;
0272 case LIST_APPEND:
0273 return 2 + (oparg-1);
0274 case LIST_EXTEND:
0275 return 2 + (oparg-1);
0276 case LOAD_ASSERTION_ERROR:
0277 return 0;
0278 case LOAD_ATTR:
0279 return 1;
0280 case LOAD_ATTR_CLASS:
0281 return 1;
0282 case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN:
0283 return 1;
0284 case LOAD_ATTR_INSTANCE_VALUE:
0285 return 1;
0286 case LOAD_ATTR_METHOD_LAZY_DICT:
0287 return 1;
0288 case LOAD_ATTR_METHOD_NO_DICT:
0289 return 1;
0290 case LOAD_ATTR_METHOD_WITH_VALUES:
0291 return 1;
0292 case LOAD_ATTR_MODULE:
0293 return 1;
0294 case LOAD_ATTR_NONDESCRIPTOR_NO_DICT:
0295 return 1;
0296 case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES:
0297 return 1;
0298 case LOAD_ATTR_PROPERTY:
0299 return 1;
0300 case LOAD_ATTR_SLOT:
0301 return 1;
0302 case LOAD_ATTR_WITH_HINT:
0303 return 1;
0304 case LOAD_BUILD_CLASS:
0305 return 0;
0306 case LOAD_CONST:
0307 return 0;
0308 case LOAD_DEREF:
0309 return 0;
0310 case LOAD_FAST:
0311 return 0;
0312 case LOAD_FAST_AND_CLEAR:
0313 return 0;
0314 case LOAD_FAST_CHECK:
0315 return 0;
0316 case LOAD_FAST_LOAD_FAST:
0317 return 0;
0318 case LOAD_FROM_DICT_OR_DEREF:
0319 return 1;
0320 case LOAD_FROM_DICT_OR_GLOBALS:
0321 return 1;
0322 case LOAD_GLOBAL:
0323 return 0;
0324 case LOAD_GLOBAL_BUILTIN:
0325 return 0;
0326 case LOAD_GLOBAL_MODULE:
0327 return 0;
0328 case LOAD_LOCALS:
0329 return 0;
0330 case LOAD_NAME:
0331 return 0;
0332 case LOAD_SUPER_ATTR:
0333 return 3;
0334 case LOAD_SUPER_ATTR_ATTR:
0335 return 3;
0336 case LOAD_SUPER_ATTR_METHOD:
0337 return 3;
0338 case MAKE_CELL:
0339 return 0;
0340 case MAKE_FUNCTION:
0341 return 1;
0342 case MAP_ADD:
0343 return 3 + (oparg - 1);
0344 case MATCH_CLASS:
0345 return 3;
0346 case MATCH_KEYS:
0347 return 2;
0348 case MATCH_MAPPING:
0349 return 1;
0350 case MATCH_SEQUENCE:
0351 return 1;
0352 case NOP:
0353 return 0;
0354 case POP_EXCEPT:
0355 return 1;
0356 case POP_JUMP_IF_FALSE:
0357 return 1;
0358 case POP_JUMP_IF_NONE:
0359 return 1;
0360 case POP_JUMP_IF_NOT_NONE:
0361 return 1;
0362 case POP_JUMP_IF_TRUE:
0363 return 1;
0364 case POP_TOP:
0365 return 1;
0366 case PUSH_EXC_INFO:
0367 return 1;
0368 case PUSH_NULL:
0369 return 0;
0370 case RAISE_VARARGS:
0371 return oparg;
0372 case RERAISE:
0373 return 1 + oparg;
0374 case RESERVED:
0375 return 0;
0376 case RESUME:
0377 return 0;
0378 case RESUME_CHECK:
0379 return 0;
0380 case RETURN_CONST:
0381 return 0;
0382 case RETURN_GENERATOR:
0383 return 0;
0384 case RETURN_VALUE:
0385 return 1;
0386 case SEND:
0387 return 2;
0388 case SEND_GEN:
0389 return 2;
0390 case SETUP_ANNOTATIONS:
0391 return 0;
0392 case SET_ADD:
0393 return 2 + (oparg-1);
0394 case SET_FUNCTION_ATTRIBUTE:
0395 return 2;
0396 case SET_UPDATE:
0397 return 2 + (oparg-1);
0398 case STORE_ATTR:
0399 return 2;
0400 case STORE_ATTR_INSTANCE_VALUE:
0401 return 2;
0402 case STORE_ATTR_SLOT:
0403 return 2;
0404 case STORE_ATTR_WITH_HINT:
0405 return 2;
0406 case STORE_DEREF:
0407 return 1;
0408 case STORE_FAST:
0409 return 1;
0410 case STORE_FAST_LOAD_FAST:
0411 return 1;
0412 case STORE_FAST_STORE_FAST:
0413 return 2;
0414 case STORE_GLOBAL:
0415 return 1;
0416 case STORE_NAME:
0417 return 1;
0418 case STORE_SLICE:
0419 return 4;
0420 case STORE_SUBSCR:
0421 return 3;
0422 case STORE_SUBSCR_DICT:
0423 return 3;
0424 case STORE_SUBSCR_LIST_INT:
0425 return 3;
0426 case SWAP:
0427 return 2 + (oparg-2);
0428 case TO_BOOL:
0429 return 1;
0430 case TO_BOOL_ALWAYS_TRUE:
0431 return 1;
0432 case TO_BOOL_BOOL:
0433 return 1;
0434 case TO_BOOL_INT:
0435 return 1;
0436 case TO_BOOL_LIST:
0437 return 1;
0438 case TO_BOOL_NONE:
0439 return 1;
0440 case TO_BOOL_STR:
0441 return 1;
0442 case UNARY_INVERT:
0443 return 1;
0444 case UNARY_NEGATIVE:
0445 return 1;
0446 case UNARY_NOT:
0447 return 1;
0448 case UNPACK_EX:
0449 return 1;
0450 case UNPACK_SEQUENCE:
0451 return 1;
0452 case UNPACK_SEQUENCE_LIST:
0453 return 1;
0454 case UNPACK_SEQUENCE_TUPLE:
0455 return 1;
0456 case UNPACK_SEQUENCE_TWO_TUPLE:
0457 return 1;
0458 case WITH_EXCEPT_START:
0459 return 4;
0460 case YIELD_VALUE:
0461 return 1;
0462 default:
0463 return -1;
0464 }
0465 }
0466
0467 #endif
0468
0469 extern int _PyOpcode_num_pushed(int opcode, int oparg);
0470 #ifdef NEED_OPCODE_METADATA
0471 int _PyOpcode_num_pushed(int opcode, int oparg) {
0472 switch(opcode) {
0473 case BEFORE_ASYNC_WITH:
0474 return 2;
0475 case BEFORE_WITH:
0476 return 2;
0477 case BINARY_OP:
0478 return 1;
0479 case BINARY_OP_ADD_FLOAT:
0480 return 1;
0481 case BINARY_OP_ADD_INT:
0482 return 1;
0483 case BINARY_OP_ADD_UNICODE:
0484 return 1;
0485 case BINARY_OP_INPLACE_ADD_UNICODE:
0486 return 0;
0487 case BINARY_OP_MULTIPLY_FLOAT:
0488 return 1;
0489 case BINARY_OP_MULTIPLY_INT:
0490 return 1;
0491 case BINARY_OP_SUBTRACT_FLOAT:
0492 return 1;
0493 case BINARY_OP_SUBTRACT_INT:
0494 return 1;
0495 case BINARY_SLICE:
0496 return 1;
0497 case BINARY_SUBSCR:
0498 return 1;
0499 case BINARY_SUBSCR_DICT:
0500 return 1;
0501 case BINARY_SUBSCR_GETITEM:
0502 return 1;
0503 case BINARY_SUBSCR_LIST_INT:
0504 return 1;
0505 case BINARY_SUBSCR_STR_INT:
0506 return 1;
0507 case BINARY_SUBSCR_TUPLE_INT:
0508 return 1;
0509 case BUILD_CONST_KEY_MAP:
0510 return 1;
0511 case BUILD_LIST:
0512 return 1;
0513 case BUILD_MAP:
0514 return 1;
0515 case BUILD_SET:
0516 return 1;
0517 case BUILD_SLICE:
0518 return 1;
0519 case BUILD_STRING:
0520 return 1;
0521 case BUILD_TUPLE:
0522 return 1;
0523 case CACHE:
0524 return 0;
0525 case CALL:
0526 return 1;
0527 case CALL_ALLOC_AND_ENTER_INIT:
0528 return 1;
0529 case CALL_BOUND_METHOD_EXACT_ARGS:
0530 return 0;
0531 case CALL_BOUND_METHOD_GENERAL:
0532 return 0;
0533 case CALL_BUILTIN_CLASS:
0534 return 1;
0535 case CALL_BUILTIN_FAST:
0536 return 1;
0537 case CALL_BUILTIN_FAST_WITH_KEYWORDS:
0538 return 1;
0539 case CALL_BUILTIN_O:
0540 return 1;
0541 case CALL_FUNCTION_EX:
0542 return 1;
0543 case CALL_INTRINSIC_1:
0544 return 1;
0545 case CALL_INTRINSIC_2:
0546 return 1;
0547 case CALL_ISINSTANCE:
0548 return 1;
0549 case CALL_KW:
0550 return 1;
0551 case CALL_LEN:
0552 return 1;
0553 case CALL_LIST_APPEND:
0554 return 1;
0555 case CALL_METHOD_DESCRIPTOR_FAST:
0556 return 1;
0557 case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS:
0558 return 1;
0559 case CALL_METHOD_DESCRIPTOR_NOARGS:
0560 return 1;
0561 case CALL_METHOD_DESCRIPTOR_O:
0562 return 1;
0563 case CALL_NON_PY_GENERAL:
0564 return 1;
0565 case CALL_PY_EXACT_ARGS:
0566 return 0;
0567 case CALL_PY_GENERAL:
0568 return 0;
0569 case CALL_STR_1:
0570 return 1;
0571 case CALL_TUPLE_1:
0572 return 1;
0573 case CALL_TYPE_1:
0574 return 1;
0575 case CHECK_EG_MATCH:
0576 return 2;
0577 case CHECK_EXC_MATCH:
0578 return 2;
0579 case CLEANUP_THROW:
0580 return 2;
0581 case COMPARE_OP:
0582 return 1;
0583 case COMPARE_OP_FLOAT:
0584 return 1;
0585 case COMPARE_OP_INT:
0586 return 1;
0587 case COMPARE_OP_STR:
0588 return 1;
0589 case CONTAINS_OP:
0590 return 1;
0591 case CONTAINS_OP_DICT:
0592 return 1;
0593 case CONTAINS_OP_SET:
0594 return 1;
0595 case CONVERT_VALUE:
0596 return 1;
0597 case COPY:
0598 return 2 + (oparg-1);
0599 case COPY_FREE_VARS:
0600 return 0;
0601 case DELETE_ATTR:
0602 return 0;
0603 case DELETE_DEREF:
0604 return 0;
0605 case DELETE_FAST:
0606 return 0;
0607 case DELETE_GLOBAL:
0608 return 0;
0609 case DELETE_NAME:
0610 return 0;
0611 case DELETE_SUBSCR:
0612 return 0;
0613 case DICT_MERGE:
0614 return 4 + (oparg - 1);
0615 case DICT_UPDATE:
0616 return 1 + (oparg - 1);
0617 case END_ASYNC_FOR:
0618 return 0;
0619 case END_FOR:
0620 return 0;
0621 case END_SEND:
0622 return 1;
0623 case ENTER_EXECUTOR:
0624 return 0;
0625 case EXIT_INIT_CHECK:
0626 return 0;
0627 case EXTENDED_ARG:
0628 return 0;
0629 case FORMAT_SIMPLE:
0630 return 1;
0631 case FORMAT_WITH_SPEC:
0632 return 1;
0633 case FOR_ITER:
0634 return 2;
0635 case FOR_ITER_GEN:
0636 return 1;
0637 case FOR_ITER_LIST:
0638 return 2;
0639 case FOR_ITER_RANGE:
0640 return 2;
0641 case FOR_ITER_TUPLE:
0642 return 2;
0643 case GET_AITER:
0644 return 1;
0645 case GET_ANEXT:
0646 return 2;
0647 case GET_AWAITABLE:
0648 return 1;
0649 case GET_ITER:
0650 return 1;
0651 case GET_LEN:
0652 return 2;
0653 case GET_YIELD_FROM_ITER:
0654 return 1;
0655 case IMPORT_FROM:
0656 return 2;
0657 case IMPORT_NAME:
0658 return 1;
0659 case INSTRUMENTED_CALL:
0660 return 0;
0661 case INSTRUMENTED_CALL_FUNCTION_EX:
0662 return 0;
0663 case INSTRUMENTED_CALL_KW:
0664 return 0;
0665 case INSTRUMENTED_END_FOR:
0666 return 1;
0667 case INSTRUMENTED_END_SEND:
0668 return 1;
0669 case INSTRUMENTED_FOR_ITER:
0670 return 0;
0671 case INSTRUMENTED_INSTRUCTION:
0672 return 0;
0673 case INSTRUMENTED_JUMP_BACKWARD:
0674 return 0;
0675 case INSTRUMENTED_JUMP_FORWARD:
0676 return 0;
0677 case INSTRUMENTED_LOAD_SUPER_ATTR:
0678 return 1 + (oparg & 1);
0679 case INSTRUMENTED_POP_JUMP_IF_FALSE:
0680 return 0;
0681 case INSTRUMENTED_POP_JUMP_IF_NONE:
0682 return 0;
0683 case INSTRUMENTED_POP_JUMP_IF_NOT_NONE:
0684 return 0;
0685 case INSTRUMENTED_POP_JUMP_IF_TRUE:
0686 return 0;
0687 case INSTRUMENTED_RESUME:
0688 return 0;
0689 case INSTRUMENTED_RETURN_CONST:
0690 return 0;
0691 case INSTRUMENTED_RETURN_VALUE:
0692 return 0;
0693 case INSTRUMENTED_YIELD_VALUE:
0694 return 1;
0695 case INTERPRETER_EXIT:
0696 return 0;
0697 case IS_OP:
0698 return 1;
0699 case JUMP_BACKWARD:
0700 return 0;
0701 case JUMP_BACKWARD_NO_INTERRUPT:
0702 return 0;
0703 case JUMP_FORWARD:
0704 return 0;
0705 case LIST_APPEND:
0706 return 1 + (oparg-1);
0707 case LIST_EXTEND:
0708 return 1 + (oparg-1);
0709 case LOAD_ASSERTION_ERROR:
0710 return 1;
0711 case LOAD_ATTR:
0712 return 1 + (oparg & 1);
0713 case LOAD_ATTR_CLASS:
0714 return 1 + (oparg & 1);
0715 case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN:
0716 return 1;
0717 case LOAD_ATTR_INSTANCE_VALUE:
0718 return 1 + (oparg & 1);
0719 case LOAD_ATTR_METHOD_LAZY_DICT:
0720 return 2;
0721 case LOAD_ATTR_METHOD_NO_DICT:
0722 return 2;
0723 case LOAD_ATTR_METHOD_WITH_VALUES:
0724 return 2;
0725 case LOAD_ATTR_MODULE:
0726 return 1 + (oparg & 1);
0727 case LOAD_ATTR_NONDESCRIPTOR_NO_DICT:
0728 return 1;
0729 case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES:
0730 return 1;
0731 case LOAD_ATTR_PROPERTY:
0732 return 1;
0733 case LOAD_ATTR_SLOT:
0734 return 1 + (oparg & 1);
0735 case LOAD_ATTR_WITH_HINT:
0736 return 1 + (oparg & 1);
0737 case LOAD_BUILD_CLASS:
0738 return 1;
0739 case LOAD_CONST:
0740 return 1;
0741 case LOAD_DEREF:
0742 return 1;
0743 case LOAD_FAST:
0744 return 1;
0745 case LOAD_FAST_AND_CLEAR:
0746 return 1;
0747 case LOAD_FAST_CHECK:
0748 return 1;
0749 case LOAD_FAST_LOAD_FAST:
0750 return 2;
0751 case LOAD_FROM_DICT_OR_DEREF:
0752 return 1;
0753 case LOAD_FROM_DICT_OR_GLOBALS:
0754 return 1;
0755 case LOAD_GLOBAL:
0756 return 1 + (oparg & 1);
0757 case LOAD_GLOBAL_BUILTIN:
0758 return 1 + (oparg & 1);
0759 case LOAD_GLOBAL_MODULE:
0760 return 1 + (oparg & 1);
0761 case LOAD_LOCALS:
0762 return 1;
0763 case LOAD_NAME:
0764 return 1;
0765 case LOAD_SUPER_ATTR:
0766 return 1 + (oparg & 1);
0767 case LOAD_SUPER_ATTR_ATTR:
0768 return 1;
0769 case LOAD_SUPER_ATTR_METHOD:
0770 return 2;
0771 case MAKE_CELL:
0772 return 0;
0773 case MAKE_FUNCTION:
0774 return 1;
0775 case MAP_ADD:
0776 return 1 + (oparg - 1);
0777 case MATCH_CLASS:
0778 return 1;
0779 case MATCH_KEYS:
0780 return 3;
0781 case MATCH_MAPPING:
0782 return 2;
0783 case MATCH_SEQUENCE:
0784 return 2;
0785 case NOP:
0786 return 0;
0787 case POP_EXCEPT:
0788 return 0;
0789 case POP_JUMP_IF_FALSE:
0790 return 0;
0791 case POP_JUMP_IF_NONE:
0792 return 0;
0793 case POP_JUMP_IF_NOT_NONE:
0794 return 0;
0795 case POP_JUMP_IF_TRUE:
0796 return 0;
0797 case POP_TOP:
0798 return 0;
0799 case PUSH_EXC_INFO:
0800 return 2;
0801 case PUSH_NULL:
0802 return 1;
0803 case RAISE_VARARGS:
0804 return 0;
0805 case RERAISE:
0806 return oparg;
0807 case RESERVED:
0808 return 0;
0809 case RESUME:
0810 return 0;
0811 case RESUME_CHECK:
0812 return 0;
0813 case RETURN_CONST:
0814 return 0;
0815 case RETURN_GENERATOR:
0816 return 1;
0817 case RETURN_VALUE:
0818 return 0;
0819 case SEND:
0820 return 2;
0821 case SEND_GEN:
0822 return 2;
0823 case SETUP_ANNOTATIONS:
0824 return 0;
0825 case SET_ADD:
0826 return 1 + (oparg-1);
0827 case SET_FUNCTION_ATTRIBUTE:
0828 return 1;
0829 case SET_UPDATE:
0830 return 1 + (oparg-1);
0831 case STORE_ATTR:
0832 return 0;
0833 case STORE_ATTR_INSTANCE_VALUE:
0834 return 0;
0835 case STORE_ATTR_SLOT:
0836 return 0;
0837 case STORE_ATTR_WITH_HINT:
0838 return 0;
0839 case STORE_DEREF:
0840 return 0;
0841 case STORE_FAST:
0842 return 0;
0843 case STORE_FAST_LOAD_FAST:
0844 return 1;
0845 case STORE_FAST_STORE_FAST:
0846 return 0;
0847 case STORE_GLOBAL:
0848 return 0;
0849 case STORE_NAME:
0850 return 0;
0851 case STORE_SLICE:
0852 return 0;
0853 case STORE_SUBSCR:
0854 return 0;
0855 case STORE_SUBSCR_DICT:
0856 return 0;
0857 case STORE_SUBSCR_LIST_INT:
0858 return 0;
0859 case SWAP:
0860 return 2 + (oparg-2);
0861 case TO_BOOL:
0862 return 1;
0863 case TO_BOOL_ALWAYS_TRUE:
0864 return 1;
0865 case TO_BOOL_BOOL:
0866 return 1;
0867 case TO_BOOL_INT:
0868 return 1;
0869 case TO_BOOL_LIST:
0870 return 1;
0871 case TO_BOOL_NONE:
0872 return 1;
0873 case TO_BOOL_STR:
0874 return 1;
0875 case UNARY_INVERT:
0876 return 1;
0877 case UNARY_NEGATIVE:
0878 return 1;
0879 case UNARY_NOT:
0880 return 1;
0881 case UNPACK_EX:
0882 return 1 + (oparg >> 8) + (oparg & 0xFF);
0883 case UNPACK_SEQUENCE:
0884 return oparg;
0885 case UNPACK_SEQUENCE_LIST:
0886 return oparg;
0887 case UNPACK_SEQUENCE_TUPLE:
0888 return oparg;
0889 case UNPACK_SEQUENCE_TWO_TUPLE:
0890 return 2;
0891 case WITH_EXCEPT_START:
0892 return 5;
0893 case YIELD_VALUE:
0894 return 1;
0895 default:
0896 return -1;
0897 }
0898 }
0899
0900 #endif
0901
0902 enum InstructionFormat {
0903 INSTR_FMT_IB = 1,
0904 INSTR_FMT_IBC = 2,
0905 INSTR_FMT_IBC00 = 3,
0906 INSTR_FMT_IBC000 = 4,
0907 INSTR_FMT_IBC00000000 = 5,
0908 INSTR_FMT_IX = 6,
0909 INSTR_FMT_IXC = 7,
0910 INSTR_FMT_IXC00 = 8,
0911 INSTR_FMT_IXC000 = 9,
0912 };
0913
0914 #define IS_VALID_OPCODE(OP) \
0915 (((OP) >= 0) && ((OP) < 268) && \
0916 (_PyOpcode_opcode_metadata[(OP)].valid_entry))
0917
0918 #define HAS_ARG_FLAG (1)
0919 #define HAS_CONST_FLAG (2)
0920 #define HAS_NAME_FLAG (4)
0921 #define HAS_JUMP_FLAG (8)
0922 #define HAS_FREE_FLAG (16)
0923 #define HAS_LOCAL_FLAG (32)
0924 #define HAS_EVAL_BREAK_FLAG (64)
0925 #define HAS_DEOPT_FLAG (128)
0926 #define HAS_ERROR_FLAG (256)
0927 #define HAS_ESCAPES_FLAG (512)
0928 #define HAS_EXIT_FLAG (1024)
0929 #define HAS_PURE_FLAG (2048)
0930 #define HAS_PASSTHROUGH_FLAG (4096)
0931 #define HAS_OPARG_AND_1_FLAG (8192)
0932 #define HAS_ERROR_NO_POP_FLAG (16384)
0933 #define OPCODE_HAS_ARG(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ARG_FLAG))
0934 #define OPCODE_HAS_CONST(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_CONST_FLAG))
0935 #define OPCODE_HAS_NAME(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_NAME_FLAG))
0936 #define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
0937 #define OPCODE_HAS_FREE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_FREE_FLAG))
0938 #define OPCODE_HAS_LOCAL(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_LOCAL_FLAG))
0939 #define OPCODE_HAS_EVAL_BREAK(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_EVAL_BREAK_FLAG))
0940 #define OPCODE_HAS_DEOPT(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_DEOPT_FLAG))
0941 #define OPCODE_HAS_ERROR(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ERROR_FLAG))
0942 #define OPCODE_HAS_ESCAPES(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ESCAPES_FLAG))
0943 #define OPCODE_HAS_EXIT(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_EXIT_FLAG))
0944 #define OPCODE_HAS_PURE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PURE_FLAG))
0945 #define OPCODE_HAS_PASSTHROUGH(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PASSTHROUGH_FLAG))
0946 #define OPCODE_HAS_OPARG_AND_1(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_OPARG_AND_1_FLAG))
0947 #define OPCODE_HAS_ERROR_NO_POP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ERROR_NO_POP_FLAG))
0948
0949 #define OPARG_FULL 0
0950 #define OPARG_CACHE_1 1
0951 #define OPARG_CACHE_2 2
0952 #define OPARG_CACHE_4 4
0953 #define OPARG_TOP 5
0954 #define OPARG_BOTTOM 6
0955 #define OPARG_SAVE_RETURN_OFFSET 7
0956 #define OPARG_REPLACED 9
0957
0958 struct opcode_metadata {
0959 uint8_t valid_entry;
0960 int8_t instr_format;
0961 int16_t flags;
0962 };
0963
0964 extern const struct opcode_metadata _PyOpcode_opcode_metadata[268];
0965 #ifdef NEED_OPCODE_METADATA
0966 const struct opcode_metadata _PyOpcode_opcode_metadata[268] = {
0967 [BEFORE_ASYNC_WITH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
0968 [BEFORE_WITH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
0969 [BINARY_OP] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
0970 [BINARY_OP_ADD_FLOAT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG },
0971 [BINARY_OP_ADD_INT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
0972 [BINARY_OP_ADD_UNICODE] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
0973 [BINARY_OP_INPLACE_ADD_UNICODE] = { true, INSTR_FMT_IXC, HAS_LOCAL_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
0974 [BINARY_OP_MULTIPLY_FLOAT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG },
0975 [BINARY_OP_MULTIPLY_INT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
0976 [BINARY_OP_SUBTRACT_FLOAT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG },
0977 [BINARY_OP_SUBTRACT_INT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
0978 [BINARY_SLICE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
0979 [BINARY_SUBSCR] = { true, INSTR_FMT_IXC, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
0980 [BINARY_SUBSCR_DICT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
0981 [BINARY_SUBSCR_GETITEM] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG },
0982 [BINARY_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG },
0983 [BINARY_SUBSCR_STR_INT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG },
0984 [BINARY_SUBSCR_TUPLE_INT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG },
0985 [BUILD_CONST_KEY_MAP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
0986 [BUILD_LIST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
0987 [BUILD_MAP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
0988 [BUILD_SET] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
0989 [BUILD_SLICE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
0990 [BUILD_STRING] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
0991 [BUILD_TUPLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
0992 [CACHE] = { true, INSTR_FMT_IX, 0 },
0993 [CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
0994 [CALL_ALLOC_AND_ENTER_INIT] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
0995 [CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
0996 [CALL_BOUND_METHOD_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
0997 [CALL_BUILTIN_CLASS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
0998 [CALL_BUILTIN_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
0999 [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1000 [CALL_BUILTIN_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1001 [CALL_FUNCTION_EX] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1002 [CALL_INTRINSIC_1] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1003 [CALL_INTRINSIC_2] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1004 [CALL_ISINSTANCE] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1005 [CALL_KW] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1006 [CALL_LEN] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1007 [CALL_LIST_APPEND] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG },
1008 [CALL_METHOD_DESCRIPTOR_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1009 [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1010 [CALL_METHOD_DESCRIPTOR_NOARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1011 [CALL_METHOD_DESCRIPTOR_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1012 [CALL_NON_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1013 [CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
1014 [CALL_PY_GENERAL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1015 [CALL_STR_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1016 [CALL_TUPLE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1017 [CALL_TYPE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
1018 [CHECK_EG_MATCH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1019 [CHECK_EXC_MATCH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1020 [CLEANUP_THROW] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1021 [COMPARE_OP] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1022 [COMPARE_OP_FLOAT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EXIT_FLAG },
1023 [COMPARE_OP_INT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
1024 [COMPARE_OP_STR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EXIT_FLAG },
1025 [CONTAINS_OP] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1026 [CONTAINS_OP_DICT] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1027 [CONTAINS_OP_SET] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1028 [CONVERT_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
1029 [COPY] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_PURE_FLAG },
1030 [COPY_FREE_VARS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
1031 [DELETE_ATTR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1032 [DELETE_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1033 [DELETE_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1034 [DELETE_GLOBAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1035 [DELETE_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1036 [DELETE_SUBSCR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1037 [DICT_MERGE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1038 [DICT_UPDATE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1039 [END_ASYNC_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1040 [END_FOR] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
1041 [END_SEND] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
1042 [ENTER_EXECUTOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
1043 [EXIT_INIT_CHECK] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1044 [EXTENDED_ARG] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
1045 [FORMAT_SIMPLE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1046 [FORMAT_WITH_SPEC] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1047 [FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1048 [FOR_ITER_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
1049 [FOR_ITER_LIST] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG },
1050 [FOR_ITER_RANGE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG },
1051 [FOR_ITER_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EXIT_FLAG },
1052 [GET_AITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1053 [GET_ANEXT] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1054 [GET_AWAITABLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1055 [GET_ITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1056 [GET_LEN] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1057 [GET_YIELD_FROM_ITER] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1058 [IMPORT_FROM] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1059 [IMPORT_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1060 [INSTRUMENTED_CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1061 [INSTRUMENTED_CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, 0 },
1062 [INSTRUMENTED_CALL_KW] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1063 [INSTRUMENTED_END_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG },
1064 [INSTRUMENTED_END_SEND] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG },
1065 [INSTRUMENTED_FOR_ITER] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1066 [INSTRUMENTED_INSTRUCTION] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1067 [INSTRUMENTED_JUMP_BACKWARD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG },
1068 [INSTRUMENTED_JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
1069 [INSTRUMENTED_LOAD_SUPER_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
1070 [INSTRUMENTED_POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
1071 [INSTRUMENTED_POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
1072 [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
1073 [INSTRUMENTED_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG },
1074 [INSTRUMENTED_RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1075 [INSTRUMENTED_RETURN_CONST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1076 [INSTRUMENTED_RETURN_VALUE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1077 [INSTRUMENTED_YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1078 [INTERPRETER_EXIT] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG },
1079 [IS_OP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
1080 [JUMP_BACKWARD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1081 [JUMP_BACKWARD_NO_INTERRUPT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
1082 [JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG },
1083 [LIST_APPEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
1084 [LIST_EXTEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1085 [LOAD_ASSERTION_ERROR] = { true, INSTR_FMT_IX, 0 },
1086 [LOAD_ATTR] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1087 [LOAD_ATTR_CLASS] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
1088 [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG },
1089 [LOAD_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
1090 [LOAD_ATTR_METHOD_LAZY_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
1091 [LOAD_ATTR_METHOD_NO_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG },
1092 [LOAD_ATTR_METHOD_WITH_VALUES] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
1093 [LOAD_ATTR_MODULE] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
1094 [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_EXIT_FLAG },
1095 [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
1096 [LOAD_ATTR_PROPERTY] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG },
1097 [LOAD_ATTR_SLOT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
1098 [LOAD_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
1099 [LOAD_BUILD_CLASS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1100 [LOAD_CONST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG | HAS_PURE_FLAG },
1101 [LOAD_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1102 [LOAD_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG },
1103 [LOAD_FAST_AND_CLEAR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
1104 [LOAD_FAST_CHECK] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1105 [LOAD_FAST_LOAD_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
1106 [LOAD_FROM_DICT_OR_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1107 [LOAD_FROM_DICT_OR_GLOBALS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1108 [LOAD_GLOBAL] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1109 [LOAD_GLOBAL_BUILTIN] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
1110 [LOAD_GLOBAL_MODULE] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
1111 [LOAD_LOCALS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1112 [LOAD_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1113 [LOAD_SUPER_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1114 [LOAD_SUPER_ATTR_ATTR] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1115 [LOAD_SUPER_ATTR_METHOD] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1116 [MAKE_CELL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG },
1117 [MAKE_FUNCTION] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1118 [MAP_ADD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1119 [MATCH_CLASS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1120 [MATCH_KEYS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1121 [MATCH_MAPPING] = { true, INSTR_FMT_IX, 0 },
1122 [MATCH_SEQUENCE] = { true, INSTR_FMT_IX, 0 },
1123 [NOP] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
1124 [POP_EXCEPT] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG },
1125 [POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
1126 [POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
1127 [POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
1128 [POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
1129 [POP_TOP] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
1130 [PUSH_EXC_INFO] = { true, INSTR_FMT_IX, 0 },
1131 [PUSH_NULL] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
1132 [RAISE_VARARGS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1133 [RERAISE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1134 [RESERVED] = { true, INSTR_FMT_IX, 0 },
1135 [RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1136 [RESUME_CHECK] = { true, INSTR_FMT_IX, HAS_DEOPT_FLAG },
1137 [RETURN_CONST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG },
1138 [RETURN_GENERATOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1139 [RETURN_VALUE] = { true, INSTR_FMT_IX, 0 },
1140 [SEND] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
1141 [SEND_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
1142 [SETUP_ANNOTATIONS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1143 [SET_ADD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1144 [SET_FUNCTION_ATTRIBUTE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ESCAPES_FLAG },
1145 [SET_UPDATE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1146 [STORE_ATTR] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1147 [STORE_ATTR_INSTANCE_VALUE] = { true, INSTR_FMT_IXC000, HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
1148 [STORE_ATTR_SLOT] = { true, INSTR_FMT_IXC000, HAS_EXIT_FLAG },
1149 [STORE_ATTR_WITH_HINT] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG },
1150 [STORE_DEREF] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_FREE_FLAG | HAS_ESCAPES_FLAG },
1151 [STORE_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
1152 [STORE_FAST_LOAD_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
1153 [STORE_FAST_STORE_FAST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
1154 [STORE_GLOBAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1155 [STORE_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1156 [STORE_SLICE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1157 [STORE_SUBSCR] = { true, INSTR_FMT_IXC, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1158 [STORE_SUBSCR_DICT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1159 [STORE_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG },
1160 [SWAP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_PURE_FLAG },
1161 [TO_BOOL] = { true, INSTR_FMT_IXC00, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1162 [TO_BOOL_ALWAYS_TRUE] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG },
1163 [TO_BOOL_BOOL] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG },
1164 [TO_BOOL_INT] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
1165 [TO_BOOL_LIST] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG },
1166 [TO_BOOL_NONE] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG },
1167 [TO_BOOL_STR] = { true, INSTR_FMT_IXC00, HAS_EXIT_FLAG | HAS_ESCAPES_FLAG },
1168 [UNARY_INVERT] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1169 [UNARY_NEGATIVE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1170 [UNARY_NOT] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
1171 [UNPACK_EX] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1172 [UNPACK_SEQUENCE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1173 [UNPACK_SEQUENCE_LIST] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
1174 [UNPACK_SEQUENCE_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
1175 [UNPACK_SEQUENCE_TWO_TUPLE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
1176 [WITH_EXCEPT_START] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1177 [YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ESCAPES_FLAG },
1178 [JUMP] = { true, -1, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1179 [JUMP_NO_INTERRUPT] = { true, -1, HAS_ARG_FLAG | HAS_JUMP_FLAG },
1180 [LOAD_CLOSURE] = { true, -1, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG },
1181 [LOAD_METHOD] = { true, -1, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1182 [LOAD_SUPER_METHOD] = { true, -1, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1183 [LOAD_ZERO_SUPER_ATTR] = { true, -1, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1184 [LOAD_ZERO_SUPER_METHOD] = { true, -1, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
1185 [POP_BLOCK] = { true, -1, HAS_PURE_FLAG },
1186 [SETUP_CLEANUP] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG },
1187 [SETUP_FINALLY] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG },
1188 [SETUP_WITH] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG },
1189 [STORE_FAST_MAYBE_NULL] = { true, -1, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
1190 };
1191 #endif
1192
1193 #define MAX_UOP_PER_EXPANSION 8
1194 struct opcode_macro_expansion {
1195 int nuops;
1196 struct { int16_t uop; int8_t size; int8_t offset; } uops[MAX_UOP_PER_EXPANSION];
1197 };
1198 extern const struct opcode_macro_expansion _PyOpcode_macro_expansion[256];
1199
1200 #ifdef NEED_OPCODE_METADATA
1201 const struct opcode_macro_expansion
1202 _PyOpcode_macro_expansion[256] = {
1203 [BINARY_OP] = { .nuops = 1, .uops = { { _BINARY_OP, 0, 0 } } },
1204 [BINARY_OP_ADD_FLOAT] = { .nuops = 2, .uops = { { _GUARD_BOTH_FLOAT, 0, 0 }, { _BINARY_OP_ADD_FLOAT, 0, 0 } } },
1205 [BINARY_OP_ADD_INT] = { .nuops = 2, .uops = { { _GUARD_BOTH_INT, 0, 0 }, { _BINARY_OP_ADD_INT, 0, 0 } } },
1206 [BINARY_OP_ADD_UNICODE] = { .nuops = 2, .uops = { { _GUARD_BOTH_UNICODE, 0, 0 }, { _BINARY_OP_ADD_UNICODE, 0, 0 } } },
1207 [BINARY_OP_MULTIPLY_FLOAT] = { .nuops = 2, .uops = { { _GUARD_BOTH_FLOAT, 0, 0 }, { _BINARY_OP_MULTIPLY_FLOAT, 0, 0 } } },
1208 [BINARY_OP_MULTIPLY_INT] = { .nuops = 2, .uops = { { _GUARD_BOTH_INT, 0, 0 }, { _BINARY_OP_MULTIPLY_INT, 0, 0 } } },
1209 [BINARY_OP_SUBTRACT_FLOAT] = { .nuops = 2, .uops = { { _GUARD_BOTH_FLOAT, 0, 0 }, { _BINARY_OP_SUBTRACT_FLOAT, 0, 0 } } },
1210 [BINARY_OP_SUBTRACT_INT] = { .nuops = 2, .uops = { { _GUARD_BOTH_INT, 0, 0 }, { _BINARY_OP_SUBTRACT_INT, 0, 0 } } },
1211 [BINARY_SLICE] = { .nuops = 1, .uops = { { _BINARY_SLICE, 0, 0 } } },
1212 [BINARY_SUBSCR] = { .nuops = 1, .uops = { { _BINARY_SUBSCR, 0, 0 } } },
1213 [BINARY_SUBSCR_DICT] = { .nuops = 1, .uops = { { _BINARY_SUBSCR_DICT, 0, 0 } } },
1214 [BINARY_SUBSCR_LIST_INT] = { .nuops = 1, .uops = { { _BINARY_SUBSCR_LIST_INT, 0, 0 } } },
1215 [BINARY_SUBSCR_STR_INT] = { .nuops = 1, .uops = { { _BINARY_SUBSCR_STR_INT, 0, 0 } } },
1216 [BINARY_SUBSCR_TUPLE_INT] = { .nuops = 1, .uops = { { _BINARY_SUBSCR_TUPLE_INT, 0, 0 } } },
1217 [BUILD_CONST_KEY_MAP] = { .nuops = 1, .uops = { { _BUILD_CONST_KEY_MAP, 0, 0 } } },
1218 [BUILD_LIST] = { .nuops = 1, .uops = { { _BUILD_LIST, 0, 0 } } },
1219 [BUILD_MAP] = { .nuops = 1, .uops = { { _BUILD_MAP, 0, 0 } } },
1220 [BUILD_SLICE] = { .nuops = 1, .uops = { { _BUILD_SLICE, 0, 0 } } },
1221 [BUILD_STRING] = { .nuops = 1, .uops = { { _BUILD_STRING, 0, 0 } } },
1222 [BUILD_TUPLE] = { .nuops = 1, .uops = { { _BUILD_TUPLE, 0, 0 } } },
1223 [CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 8, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { _SAVE_RETURN_OFFSET, 7, 3 }, { _PUSH_FRAME, 0, 0 } } },
1224 [CALL_BOUND_METHOD_GENERAL] = { .nuops = 6, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_METHOD_VERSION, 2, 1 }, { _EXPAND_METHOD, 0, 0 }, { _PY_FRAME_GENERAL, 0, 0 }, { _SAVE_RETURN_OFFSET, 7, 3 }, { _PUSH_FRAME, 0, 0 } } },
1225 [CALL_BUILTIN_CLASS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_CLASS, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1226 [CALL_BUILTIN_FAST] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1227 [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST_WITH_KEYWORDS, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1228 [CALL_BUILTIN_O] = { .nuops = 2, .uops = { { _CALL_BUILTIN_O, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1229 [CALL_INTRINSIC_1] = { .nuops = 1, .uops = { { _CALL_INTRINSIC_1, 0, 0 } } },
1230 [CALL_INTRINSIC_2] = { .nuops = 1, .uops = { { _CALL_INTRINSIC_2, 0, 0 } } },
1231 [CALL_ISINSTANCE] = { .nuops = 1, .uops = { { _CALL_ISINSTANCE, 0, 0 } } },
1232 [CALL_LEN] = { .nuops = 1, .uops = { { _CALL_LEN, 0, 0 } } },
1233 [CALL_METHOD_DESCRIPTOR_FAST] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_FAST, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1234 [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1235 [CALL_METHOD_DESCRIPTOR_NOARGS] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_NOARGS, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1236 [CALL_METHOD_DESCRIPTOR_O] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_O, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1237 [CALL_NON_PY_GENERAL] = { .nuops = 3, .uops = { { _CHECK_IS_NOT_PY_CALLABLE, 0, 0 }, { _CALL_NON_PY_GENERAL, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1238 [CALL_PY_EXACT_ARGS] = { .nuops = 6, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { _SAVE_RETURN_OFFSET, 7, 3 }, { _PUSH_FRAME, 0, 0 } } },
1239 [CALL_PY_GENERAL] = { .nuops = 5, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _PY_FRAME_GENERAL, 0, 0 }, { _SAVE_RETURN_OFFSET, 7, 3 }, { _PUSH_FRAME, 0, 0 } } },
1240 [CALL_STR_1] = { .nuops = 2, .uops = { { _CALL_STR_1, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1241 [CALL_TUPLE_1] = { .nuops = 2, .uops = { { _CALL_TUPLE_1, 0, 0 }, { _CHECK_PERIODIC, 0, 0 } } },
1242 [CALL_TYPE_1] = { .nuops = 1, .uops = { { _CALL_TYPE_1, 0, 0 } } },
1243 [CHECK_EG_MATCH] = { .nuops = 1, .uops = { { _CHECK_EG_MATCH, 0, 0 } } },
1244 [CHECK_EXC_MATCH] = { .nuops = 1, .uops = { { _CHECK_EXC_MATCH, 0, 0 } } },
1245 [COMPARE_OP] = { .nuops = 1, .uops = { { _COMPARE_OP, 0, 0 } } },
1246 [COMPARE_OP_FLOAT] = { .nuops = 2, .uops = { { _GUARD_BOTH_FLOAT, 0, 0 }, { _COMPARE_OP_FLOAT, 0, 0 } } },
1247 [COMPARE_OP_INT] = { .nuops = 2, .uops = { { _GUARD_BOTH_INT, 0, 0 }, { _COMPARE_OP_INT, 0, 0 } } },
1248 [COMPARE_OP_STR] = { .nuops = 2, .uops = { { _GUARD_BOTH_UNICODE, 0, 0 }, { _COMPARE_OP_STR, 0, 0 } } },
1249 [CONTAINS_OP] = { .nuops = 1, .uops = { { _CONTAINS_OP, 0, 0 } } },
1250 [CONTAINS_OP_DICT] = { .nuops = 1, .uops = { { _CONTAINS_OP_DICT, 0, 0 } } },
1251 [CONTAINS_OP_SET] = { .nuops = 1, .uops = { { _CONTAINS_OP_SET, 0, 0 } } },
1252 [CONVERT_VALUE] = { .nuops = 1, .uops = { { _CONVERT_VALUE, 0, 0 } } },
1253 [COPY] = { .nuops = 1, .uops = { { _COPY, 0, 0 } } },
1254 [COPY_FREE_VARS] = { .nuops = 1, .uops = { { _COPY_FREE_VARS, 0, 0 } } },
1255 [DELETE_ATTR] = { .nuops = 1, .uops = { { _DELETE_ATTR, 0, 0 } } },
1256 [DELETE_DEREF] = { .nuops = 1, .uops = { { _DELETE_DEREF, 0, 0 } } },
1257 [DELETE_FAST] = { .nuops = 1, .uops = { { _DELETE_FAST, 0, 0 } } },
1258 [DELETE_GLOBAL] = { .nuops = 1, .uops = { { _DELETE_GLOBAL, 0, 0 } } },
1259 [DELETE_NAME] = { .nuops = 1, .uops = { { _DELETE_NAME, 0, 0 } } },
1260 [DELETE_SUBSCR] = { .nuops = 1, .uops = { { _DELETE_SUBSCR, 0, 0 } } },
1261 [DICT_MERGE] = { .nuops = 1, .uops = { { _DICT_MERGE, 0, 0 } } },
1262 [DICT_UPDATE] = { .nuops = 1, .uops = { { _DICT_UPDATE, 0, 0 } } },
1263 [END_FOR] = { .nuops = 1, .uops = { { _POP_TOP, 0, 0 } } },
1264 [END_SEND] = { .nuops = 1, .uops = { { _END_SEND, 0, 0 } } },
1265 [EXIT_INIT_CHECK] = { .nuops = 1, .uops = { { _EXIT_INIT_CHECK, 0, 0 } } },
1266 [FORMAT_SIMPLE] = { .nuops = 1, .uops = { { _FORMAT_SIMPLE, 0, 0 } } },
1267 [FORMAT_WITH_SPEC] = { .nuops = 1, .uops = { { _FORMAT_WITH_SPEC, 0, 0 } } },
1268 [FOR_ITER] = { .nuops = 1, .uops = { { _FOR_ITER, 9, 0 } } },
1269 [FOR_ITER_GEN] = { .nuops = 3, .uops = { { _CHECK_PEP_523, 0, 0 }, { _FOR_ITER_GEN_FRAME, 0, 0 }, { _PUSH_FRAME, 0, 0 } } },
1270 [FOR_ITER_LIST] = { .nuops = 3, .uops = { { _ITER_CHECK_LIST, 0, 0 }, { _ITER_JUMP_LIST, 9, 1 }, { _ITER_NEXT_LIST, 0, 0 } } },
1271 [FOR_ITER_RANGE] = { .nuops = 3, .uops = { { _ITER_CHECK_RANGE, 0, 0 }, { _ITER_JUMP_RANGE, 9, 1 }, { _ITER_NEXT_RANGE, 0, 0 } } },
1272 [FOR_ITER_TUPLE] = { .nuops = 3, .uops = { { _ITER_CHECK_TUPLE, 0, 0 }, { _ITER_JUMP_TUPLE, 9, 1 }, { _ITER_NEXT_TUPLE, 0, 0 } } },
1273 [GET_AITER] = { .nuops = 1, .uops = { { _GET_AITER, 0, 0 } } },
1274 [GET_ANEXT] = { .nuops = 1, .uops = { { _GET_ANEXT, 0, 0 } } },
1275 [GET_AWAITABLE] = { .nuops = 1, .uops = { { _GET_AWAITABLE, 0, 0 } } },
1276 [GET_ITER] = { .nuops = 1, .uops = { { _GET_ITER, 0, 0 } } },
1277 [GET_LEN] = { .nuops = 1, .uops = { { _GET_LEN, 0, 0 } } },
1278 [GET_YIELD_FROM_ITER] = { .nuops = 1, .uops = { { _GET_YIELD_FROM_ITER, 0, 0 } } },
1279 [IS_OP] = { .nuops = 1, .uops = { { _IS_OP, 0, 0 } } },
1280 [LIST_APPEND] = { .nuops = 1, .uops = { { _LIST_APPEND, 0, 0 } } },
1281 [LIST_EXTEND] = { .nuops = 1, .uops = { { _LIST_EXTEND, 0, 0 } } },
1282 [LOAD_ASSERTION_ERROR] = { .nuops = 1, .uops = { { _LOAD_ASSERTION_ERROR, 0, 0 } } },
1283 [LOAD_ATTR] = { .nuops = 1, .uops = { { _LOAD_ATTR, 0, 0 } } },
1284 [LOAD_ATTR_CLASS] = { .nuops = 2, .uops = { { _CHECK_ATTR_CLASS, 2, 1 }, { _LOAD_ATTR_CLASS, 4, 5 } } },
1285 [LOAD_ATTR_INSTANCE_VALUE] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _CHECK_MANAGED_OBJECT_HAS_VALUES, 0, 0 }, { _LOAD_ATTR_INSTANCE_VALUE, 1, 3 } } },
1286 [LOAD_ATTR_METHOD_LAZY_DICT] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _CHECK_ATTR_METHOD_LAZY_DICT, 1, 3 }, { _LOAD_ATTR_METHOD_LAZY_DICT, 4, 5 } } },
1287 [LOAD_ATTR_METHOD_NO_DICT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_METHOD_NO_DICT, 4, 5 } } },
1288 [LOAD_ATTR_METHOD_WITH_VALUES] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, 0, 0 }, { _GUARD_KEYS_VERSION, 2, 3 }, { _LOAD_ATTR_METHOD_WITH_VALUES, 4, 5 } } },
1289 [LOAD_ATTR_MODULE] = { .nuops = 2, .uops = { { _CHECK_ATTR_MODULE, 2, 1 }, { _LOAD_ATTR_MODULE, 1, 3 } } },
1290 [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_NONDESCRIPTOR_NO_DICT, 4, 5 } } },
1291 [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, 0, 0 }, { _GUARD_KEYS_VERSION, 2, 3 }, { _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES, 4, 5 } } },
1292 [LOAD_ATTR_SLOT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_SLOT, 1, 3 } } },
1293 [LOAD_ATTR_WITH_HINT] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _CHECK_ATTR_WITH_HINT, 0, 0 }, { _LOAD_ATTR_WITH_HINT, 1, 3 } } },
1294 [LOAD_BUILD_CLASS] = { .nuops = 1, .uops = { { _LOAD_BUILD_CLASS, 0, 0 } } },
1295 [LOAD_CONST] = { .nuops = 1, .uops = { { _LOAD_CONST, 0, 0 } } },
1296 [LOAD_DEREF] = { .nuops = 1, .uops = { { _LOAD_DEREF, 0, 0 } } },
1297 [LOAD_FAST] = { .nuops = 1, .uops = { { _LOAD_FAST, 0, 0 } } },
1298 [LOAD_FAST_AND_CLEAR] = { .nuops = 1, .uops = { { _LOAD_FAST_AND_CLEAR, 0, 0 } } },
1299 [LOAD_FAST_CHECK] = { .nuops = 1, .uops = { { _LOAD_FAST_CHECK, 0, 0 } } },
1300 [LOAD_FAST_LOAD_FAST] = { .nuops = 2, .uops = { { _LOAD_FAST, 5, 0 }, { _LOAD_FAST, 6, 0 } } },
1301 [LOAD_FROM_DICT_OR_DEREF] = { .nuops = 1, .uops = { { _LOAD_FROM_DICT_OR_DEREF, 0, 0 } } },
1302 [LOAD_GLOBAL] = { .nuops = 1, .uops = { { _LOAD_GLOBAL, 0, 0 } } },
1303 [LOAD_GLOBAL_BUILTIN] = { .nuops = 3, .uops = { { _GUARD_GLOBALS_VERSION, 1, 1 }, { _GUARD_BUILTINS_VERSION, 1, 2 }, { _LOAD_GLOBAL_BUILTINS, 1, 3 } } },
1304 [LOAD_GLOBAL_MODULE] = { .nuops = 2, .uops = { { _GUARD_GLOBALS_VERSION, 1, 1 }, { _LOAD_GLOBAL_MODULE, 1, 3 } } },
1305 [LOAD_LOCALS] = { .nuops = 1, .uops = { { _LOAD_LOCALS, 0, 0 } } },
1306 [LOAD_SUPER_ATTR_ATTR] = { .nuops = 1, .uops = { { _LOAD_SUPER_ATTR_ATTR, 0, 0 } } },
1307 [LOAD_SUPER_ATTR_METHOD] = { .nuops = 1, .uops = { { _LOAD_SUPER_ATTR_METHOD, 0, 0 } } },
1308 [MAKE_CELL] = { .nuops = 1, .uops = { { _MAKE_CELL, 0, 0 } } },
1309 [MAKE_FUNCTION] = { .nuops = 1, .uops = { { _MAKE_FUNCTION, 0, 0 } } },
1310 [MAP_ADD] = { .nuops = 1, .uops = { { _MAP_ADD, 0, 0 } } },
1311 [MATCH_CLASS] = { .nuops = 1, .uops = { { _MATCH_CLASS, 0, 0 } } },
1312 [MATCH_KEYS] = { .nuops = 1, .uops = { { _MATCH_KEYS, 0, 0 } } },
1313 [MATCH_MAPPING] = { .nuops = 1, .uops = { { _MATCH_MAPPING, 0, 0 } } },
1314 [MATCH_SEQUENCE] = { .nuops = 1, .uops = { { _MATCH_SEQUENCE, 0, 0 } } },
1315 [NOP] = { .nuops = 1, .uops = { { _NOP, 0, 0 } } },
1316 [POP_EXCEPT] = { .nuops = 1, .uops = { { _POP_EXCEPT, 0, 0 } } },
1317 [POP_JUMP_IF_FALSE] = { .nuops = 1, .uops = { { _POP_JUMP_IF_FALSE, 9, 1 } } },
1318 [POP_JUMP_IF_NONE] = { .nuops = 2, .uops = { { _IS_NONE, 0, 0 }, { _POP_JUMP_IF_TRUE, 9, 1 } } },
1319 [POP_JUMP_IF_NOT_NONE] = { .nuops = 2, .uops = { { _IS_NONE, 0, 0 }, { _POP_JUMP_IF_FALSE, 9, 1 } } },
1320 [POP_JUMP_IF_TRUE] = { .nuops = 1, .uops = { { _POP_JUMP_IF_TRUE, 9, 1 } } },
1321 [POP_TOP] = { .nuops = 1, .uops = { { _POP_TOP, 0, 0 } } },
1322 [PUSH_EXC_INFO] = { .nuops = 1, .uops = { { _PUSH_EXC_INFO, 0, 0 } } },
1323 [PUSH_NULL] = { .nuops = 1, .uops = { { _PUSH_NULL, 0, 0 } } },
1324 [RESUME_CHECK] = { .nuops = 1, .uops = { { _RESUME_CHECK, 0, 0 } } },
1325 [RETURN_CONST] = { .nuops = 2, .uops = { { _LOAD_CONST, 0, 0 }, { _POP_FRAME, 0, 0 } } },
1326 [RETURN_GENERATOR] = { .nuops = 1, .uops = { { _RETURN_GENERATOR, 0, 0 } } },
1327 [RETURN_VALUE] = { .nuops = 1, .uops = { { _POP_FRAME, 0, 0 } } },
1328 [SETUP_ANNOTATIONS] = { .nuops = 1, .uops = { { _SETUP_ANNOTATIONS, 0, 0 } } },
1329 [SET_ADD] = { .nuops = 1, .uops = { { _SET_ADD, 0, 0 } } },
1330 [SET_FUNCTION_ATTRIBUTE] = { .nuops = 1, .uops = { { _SET_FUNCTION_ATTRIBUTE, 0, 0 } } },
1331 [SET_UPDATE] = { .nuops = 1, .uops = { { _SET_UPDATE, 0, 0 } } },
1332 [STORE_ATTR] = { .nuops = 1, .uops = { { _STORE_ATTR, 0, 0 } } },
1333 [STORE_ATTR_INSTANCE_VALUE] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _GUARD_DORV_NO_DICT, 0, 0 }, { _STORE_ATTR_INSTANCE_VALUE, 1, 3 } } },
1334 [STORE_ATTR_SLOT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _STORE_ATTR_SLOT, 1, 3 } } },
1335 [STORE_DEREF] = { .nuops = 1, .uops = { { _STORE_DEREF, 0, 0 } } },
1336 [STORE_FAST] = { .nuops = 1, .uops = { { _STORE_FAST, 0, 0 } } },
1337 [STORE_FAST_LOAD_FAST] = { .nuops = 2, .uops = { { _STORE_FAST, 5, 0 }, { _LOAD_FAST, 6, 0 } } },
1338 [STORE_FAST_STORE_FAST] = { .nuops = 2, .uops = { { _STORE_FAST, 5, 0 }, { _STORE_FAST, 6, 0 } } },
1339 [STORE_GLOBAL] = { .nuops = 1, .uops = { { _STORE_GLOBAL, 0, 0 } } },
1340 [STORE_NAME] = { .nuops = 1, .uops = { { _STORE_NAME, 0, 0 } } },
1341 [STORE_SLICE] = { .nuops = 1, .uops = { { _STORE_SLICE, 0, 0 } } },
1342 [STORE_SUBSCR] = { .nuops = 1, .uops = { { _STORE_SUBSCR, 0, 0 } } },
1343 [STORE_SUBSCR_DICT] = { .nuops = 1, .uops = { { _STORE_SUBSCR_DICT, 0, 0 } } },
1344 [STORE_SUBSCR_LIST_INT] = { .nuops = 1, .uops = { { _STORE_SUBSCR_LIST_INT, 0, 0 } } },
1345 [SWAP] = { .nuops = 1, .uops = { { _SWAP, 0, 0 } } },
1346 [TO_BOOL] = { .nuops = 1, .uops = { { _TO_BOOL, 0, 0 } } },
1347 [TO_BOOL_ALWAYS_TRUE] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _REPLACE_WITH_TRUE, 0, 0 } } },
1348 [TO_BOOL_BOOL] = { .nuops = 1, .uops = { { _TO_BOOL_BOOL, 0, 0 } } },
1349 [TO_BOOL_INT] = { .nuops = 1, .uops = { { _TO_BOOL_INT, 0, 0 } } },
1350 [TO_BOOL_LIST] = { .nuops = 1, .uops = { { _TO_BOOL_LIST, 0, 0 } } },
1351 [TO_BOOL_NONE] = { .nuops = 1, .uops = { { _TO_BOOL_NONE, 0, 0 } } },
1352 [TO_BOOL_STR] = { .nuops = 1, .uops = { { _TO_BOOL_STR, 0, 0 } } },
1353 [UNARY_INVERT] = { .nuops = 1, .uops = { { _UNARY_INVERT, 0, 0 } } },
1354 [UNARY_NEGATIVE] = { .nuops = 1, .uops = { { _UNARY_NEGATIVE, 0, 0 } } },
1355 [UNARY_NOT] = { .nuops = 1, .uops = { { _UNARY_NOT, 0, 0 } } },
1356 [UNPACK_EX] = { .nuops = 1, .uops = { { _UNPACK_EX, 0, 0 } } },
1357 [UNPACK_SEQUENCE] = { .nuops = 1, .uops = { { _UNPACK_SEQUENCE, 0, 0 } } },
1358 [UNPACK_SEQUENCE_LIST] = { .nuops = 1, .uops = { { _UNPACK_SEQUENCE_LIST, 0, 0 } } },
1359 [UNPACK_SEQUENCE_TUPLE] = { .nuops = 1, .uops = { { _UNPACK_SEQUENCE_TUPLE, 0, 0 } } },
1360 [UNPACK_SEQUENCE_TWO_TUPLE] = { .nuops = 1, .uops = { { _UNPACK_SEQUENCE_TWO_TUPLE, 0, 0 } } },
1361 [WITH_EXCEPT_START] = { .nuops = 1, .uops = { { _WITH_EXCEPT_START, 0, 0 } } },
1362 [YIELD_VALUE] = { .nuops = 1, .uops = { { _YIELD_VALUE, 0, 0 } } },
1363 };
1364 #endif
1365
1366 extern const char *_PyOpcode_OpName[268];
1367 #ifdef NEED_OPCODE_METADATA
1368 const char *_PyOpcode_OpName[268] = {
1369 [BEFORE_ASYNC_WITH] = "BEFORE_ASYNC_WITH",
1370 [BEFORE_WITH] = "BEFORE_WITH",
1371 [BINARY_OP] = "BINARY_OP",
1372 [BINARY_OP_ADD_FLOAT] = "BINARY_OP_ADD_FLOAT",
1373 [BINARY_OP_ADD_INT] = "BINARY_OP_ADD_INT",
1374 [BINARY_OP_ADD_UNICODE] = "BINARY_OP_ADD_UNICODE",
1375 [BINARY_OP_INPLACE_ADD_UNICODE] = "BINARY_OP_INPLACE_ADD_UNICODE",
1376 [BINARY_OP_MULTIPLY_FLOAT] = "BINARY_OP_MULTIPLY_FLOAT",
1377 [BINARY_OP_MULTIPLY_INT] = "BINARY_OP_MULTIPLY_INT",
1378 [BINARY_OP_SUBTRACT_FLOAT] = "BINARY_OP_SUBTRACT_FLOAT",
1379 [BINARY_OP_SUBTRACT_INT] = "BINARY_OP_SUBTRACT_INT",
1380 [BINARY_SLICE] = "BINARY_SLICE",
1381 [BINARY_SUBSCR] = "BINARY_SUBSCR",
1382 [BINARY_SUBSCR_DICT] = "BINARY_SUBSCR_DICT",
1383 [BINARY_SUBSCR_GETITEM] = "BINARY_SUBSCR_GETITEM",
1384 [BINARY_SUBSCR_LIST_INT] = "BINARY_SUBSCR_LIST_INT",
1385 [BINARY_SUBSCR_STR_INT] = "BINARY_SUBSCR_STR_INT",
1386 [BINARY_SUBSCR_TUPLE_INT] = "BINARY_SUBSCR_TUPLE_INT",
1387 [BUILD_CONST_KEY_MAP] = "BUILD_CONST_KEY_MAP",
1388 [BUILD_LIST] = "BUILD_LIST",
1389 [BUILD_MAP] = "BUILD_MAP",
1390 [BUILD_SET] = "BUILD_SET",
1391 [BUILD_SLICE] = "BUILD_SLICE",
1392 [BUILD_STRING] = "BUILD_STRING",
1393 [BUILD_TUPLE] = "BUILD_TUPLE",
1394 [CACHE] = "CACHE",
1395 [CALL] = "CALL",
1396 [CALL_ALLOC_AND_ENTER_INIT] = "CALL_ALLOC_AND_ENTER_INIT",
1397 [CALL_BOUND_METHOD_EXACT_ARGS] = "CALL_BOUND_METHOD_EXACT_ARGS",
1398 [CALL_BOUND_METHOD_GENERAL] = "CALL_BOUND_METHOD_GENERAL",
1399 [CALL_BUILTIN_CLASS] = "CALL_BUILTIN_CLASS",
1400 [CALL_BUILTIN_FAST] = "CALL_BUILTIN_FAST",
1401 [CALL_BUILTIN_FAST_WITH_KEYWORDS] = "CALL_BUILTIN_FAST_WITH_KEYWORDS",
1402 [CALL_BUILTIN_O] = "CALL_BUILTIN_O",
1403 [CALL_FUNCTION_EX] = "CALL_FUNCTION_EX",
1404 [CALL_INTRINSIC_1] = "CALL_INTRINSIC_1",
1405 [CALL_INTRINSIC_2] = "CALL_INTRINSIC_2",
1406 [CALL_ISINSTANCE] = "CALL_ISINSTANCE",
1407 [CALL_KW] = "CALL_KW",
1408 [CALL_LEN] = "CALL_LEN",
1409 [CALL_LIST_APPEND] = "CALL_LIST_APPEND",
1410 [CALL_METHOD_DESCRIPTOR_FAST] = "CALL_METHOD_DESCRIPTOR_FAST",
1411 [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS",
1412 [CALL_METHOD_DESCRIPTOR_NOARGS] = "CALL_METHOD_DESCRIPTOR_NOARGS",
1413 [CALL_METHOD_DESCRIPTOR_O] = "CALL_METHOD_DESCRIPTOR_O",
1414 [CALL_NON_PY_GENERAL] = "CALL_NON_PY_GENERAL",
1415 [CALL_PY_EXACT_ARGS] = "CALL_PY_EXACT_ARGS",
1416 [CALL_PY_GENERAL] = "CALL_PY_GENERAL",
1417 [CALL_STR_1] = "CALL_STR_1",
1418 [CALL_TUPLE_1] = "CALL_TUPLE_1",
1419 [CALL_TYPE_1] = "CALL_TYPE_1",
1420 [CHECK_EG_MATCH] = "CHECK_EG_MATCH",
1421 [CHECK_EXC_MATCH] = "CHECK_EXC_MATCH",
1422 [CLEANUP_THROW] = "CLEANUP_THROW",
1423 [COMPARE_OP] = "COMPARE_OP",
1424 [COMPARE_OP_FLOAT] = "COMPARE_OP_FLOAT",
1425 [COMPARE_OP_INT] = "COMPARE_OP_INT",
1426 [COMPARE_OP_STR] = "COMPARE_OP_STR",
1427 [CONTAINS_OP] = "CONTAINS_OP",
1428 [CONTAINS_OP_DICT] = "CONTAINS_OP_DICT",
1429 [CONTAINS_OP_SET] = "CONTAINS_OP_SET",
1430 [CONVERT_VALUE] = "CONVERT_VALUE",
1431 [COPY] = "COPY",
1432 [COPY_FREE_VARS] = "COPY_FREE_VARS",
1433 [DELETE_ATTR] = "DELETE_ATTR",
1434 [DELETE_DEREF] = "DELETE_DEREF",
1435 [DELETE_FAST] = "DELETE_FAST",
1436 [DELETE_GLOBAL] = "DELETE_GLOBAL",
1437 [DELETE_NAME] = "DELETE_NAME",
1438 [DELETE_SUBSCR] = "DELETE_SUBSCR",
1439 [DICT_MERGE] = "DICT_MERGE",
1440 [DICT_UPDATE] = "DICT_UPDATE",
1441 [END_ASYNC_FOR] = "END_ASYNC_FOR",
1442 [END_FOR] = "END_FOR",
1443 [END_SEND] = "END_SEND",
1444 [ENTER_EXECUTOR] = "ENTER_EXECUTOR",
1445 [EXIT_INIT_CHECK] = "EXIT_INIT_CHECK",
1446 [EXTENDED_ARG] = "EXTENDED_ARG",
1447 [FORMAT_SIMPLE] = "FORMAT_SIMPLE",
1448 [FORMAT_WITH_SPEC] = "FORMAT_WITH_SPEC",
1449 [FOR_ITER] = "FOR_ITER",
1450 [FOR_ITER_GEN] = "FOR_ITER_GEN",
1451 [FOR_ITER_LIST] = "FOR_ITER_LIST",
1452 [FOR_ITER_RANGE] = "FOR_ITER_RANGE",
1453 [FOR_ITER_TUPLE] = "FOR_ITER_TUPLE",
1454 [GET_AITER] = "GET_AITER",
1455 [GET_ANEXT] = "GET_ANEXT",
1456 [GET_AWAITABLE] = "GET_AWAITABLE",
1457 [GET_ITER] = "GET_ITER",
1458 [GET_LEN] = "GET_LEN",
1459 [GET_YIELD_FROM_ITER] = "GET_YIELD_FROM_ITER",
1460 [IMPORT_FROM] = "IMPORT_FROM",
1461 [IMPORT_NAME] = "IMPORT_NAME",
1462 [INSTRUMENTED_CALL] = "INSTRUMENTED_CALL",
1463 [INSTRUMENTED_CALL_FUNCTION_EX] = "INSTRUMENTED_CALL_FUNCTION_EX",
1464 [INSTRUMENTED_CALL_KW] = "INSTRUMENTED_CALL_KW",
1465 [INSTRUMENTED_END_FOR] = "INSTRUMENTED_END_FOR",
1466 [INSTRUMENTED_END_SEND] = "INSTRUMENTED_END_SEND",
1467 [INSTRUMENTED_FOR_ITER] = "INSTRUMENTED_FOR_ITER",
1468 [INSTRUMENTED_INSTRUCTION] = "INSTRUMENTED_INSTRUCTION",
1469 [INSTRUMENTED_JUMP_BACKWARD] = "INSTRUMENTED_JUMP_BACKWARD",
1470 [INSTRUMENTED_JUMP_FORWARD] = "INSTRUMENTED_JUMP_FORWARD",
1471 [INSTRUMENTED_LINE] = "INSTRUMENTED_LINE",
1472 [INSTRUMENTED_LOAD_SUPER_ATTR] = "INSTRUMENTED_LOAD_SUPER_ATTR",
1473 [INSTRUMENTED_POP_JUMP_IF_FALSE] = "INSTRUMENTED_POP_JUMP_IF_FALSE",
1474 [INSTRUMENTED_POP_JUMP_IF_NONE] = "INSTRUMENTED_POP_JUMP_IF_NONE",
1475 [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = "INSTRUMENTED_POP_JUMP_IF_NOT_NONE",
1476 [INSTRUMENTED_POP_JUMP_IF_TRUE] = "INSTRUMENTED_POP_JUMP_IF_TRUE",
1477 [INSTRUMENTED_RESUME] = "INSTRUMENTED_RESUME",
1478 [INSTRUMENTED_RETURN_CONST] = "INSTRUMENTED_RETURN_CONST",
1479 [INSTRUMENTED_RETURN_VALUE] = "INSTRUMENTED_RETURN_VALUE",
1480 [INSTRUMENTED_YIELD_VALUE] = "INSTRUMENTED_YIELD_VALUE",
1481 [INTERPRETER_EXIT] = "INTERPRETER_EXIT",
1482 [IS_OP] = "IS_OP",
1483 [JUMP] = "JUMP",
1484 [JUMP_BACKWARD] = "JUMP_BACKWARD",
1485 [JUMP_BACKWARD_NO_INTERRUPT] = "JUMP_BACKWARD_NO_INTERRUPT",
1486 [JUMP_FORWARD] = "JUMP_FORWARD",
1487 [JUMP_NO_INTERRUPT] = "JUMP_NO_INTERRUPT",
1488 [LIST_APPEND] = "LIST_APPEND",
1489 [LIST_EXTEND] = "LIST_EXTEND",
1490 [LOAD_ASSERTION_ERROR] = "LOAD_ASSERTION_ERROR",
1491 [LOAD_ATTR] = "LOAD_ATTR",
1492 [LOAD_ATTR_CLASS] = "LOAD_ATTR_CLASS",
1493 [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = "LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN",
1494 [LOAD_ATTR_INSTANCE_VALUE] = "LOAD_ATTR_INSTANCE_VALUE",
1495 [LOAD_ATTR_METHOD_LAZY_DICT] = "LOAD_ATTR_METHOD_LAZY_DICT",
1496 [LOAD_ATTR_METHOD_NO_DICT] = "LOAD_ATTR_METHOD_NO_DICT",
1497 [LOAD_ATTR_METHOD_WITH_VALUES] = "LOAD_ATTR_METHOD_WITH_VALUES",
1498 [LOAD_ATTR_MODULE] = "LOAD_ATTR_MODULE",
1499 [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = "LOAD_ATTR_NONDESCRIPTOR_NO_DICT",
1500 [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = "LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES",
1501 [LOAD_ATTR_PROPERTY] = "LOAD_ATTR_PROPERTY",
1502 [LOAD_ATTR_SLOT] = "LOAD_ATTR_SLOT",
1503 [LOAD_ATTR_WITH_HINT] = "LOAD_ATTR_WITH_HINT",
1504 [LOAD_BUILD_CLASS] = "LOAD_BUILD_CLASS",
1505 [LOAD_CLOSURE] = "LOAD_CLOSURE",
1506 [LOAD_CONST] = "LOAD_CONST",
1507 [LOAD_DEREF] = "LOAD_DEREF",
1508 [LOAD_FAST] = "LOAD_FAST",
1509 [LOAD_FAST_AND_CLEAR] = "LOAD_FAST_AND_CLEAR",
1510 [LOAD_FAST_CHECK] = "LOAD_FAST_CHECK",
1511 [LOAD_FAST_LOAD_FAST] = "LOAD_FAST_LOAD_FAST",
1512 [LOAD_FROM_DICT_OR_DEREF] = "LOAD_FROM_DICT_OR_DEREF",
1513 [LOAD_FROM_DICT_OR_GLOBALS] = "LOAD_FROM_DICT_OR_GLOBALS",
1514 [LOAD_GLOBAL] = "LOAD_GLOBAL",
1515 [LOAD_GLOBAL_BUILTIN] = "LOAD_GLOBAL_BUILTIN",
1516 [LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE",
1517 [LOAD_LOCALS] = "LOAD_LOCALS",
1518 [LOAD_METHOD] = "LOAD_METHOD",
1519 [LOAD_NAME] = "LOAD_NAME",
1520 [LOAD_SUPER_ATTR] = "LOAD_SUPER_ATTR",
1521 [LOAD_SUPER_ATTR_ATTR] = "LOAD_SUPER_ATTR_ATTR",
1522 [LOAD_SUPER_ATTR_METHOD] = "LOAD_SUPER_ATTR_METHOD",
1523 [LOAD_SUPER_METHOD] = "LOAD_SUPER_METHOD",
1524 [LOAD_ZERO_SUPER_ATTR] = "LOAD_ZERO_SUPER_ATTR",
1525 [LOAD_ZERO_SUPER_METHOD] = "LOAD_ZERO_SUPER_METHOD",
1526 [MAKE_CELL] = "MAKE_CELL",
1527 [MAKE_FUNCTION] = "MAKE_FUNCTION",
1528 [MAP_ADD] = "MAP_ADD",
1529 [MATCH_CLASS] = "MATCH_CLASS",
1530 [MATCH_KEYS] = "MATCH_KEYS",
1531 [MATCH_MAPPING] = "MATCH_MAPPING",
1532 [MATCH_SEQUENCE] = "MATCH_SEQUENCE",
1533 [NOP] = "NOP",
1534 [POP_BLOCK] = "POP_BLOCK",
1535 [POP_EXCEPT] = "POP_EXCEPT",
1536 [POP_JUMP_IF_FALSE] = "POP_JUMP_IF_FALSE",
1537 [POP_JUMP_IF_NONE] = "POP_JUMP_IF_NONE",
1538 [POP_JUMP_IF_NOT_NONE] = "POP_JUMP_IF_NOT_NONE",
1539 [POP_JUMP_IF_TRUE] = "POP_JUMP_IF_TRUE",
1540 [POP_TOP] = "POP_TOP",
1541 [PUSH_EXC_INFO] = "PUSH_EXC_INFO",
1542 [PUSH_NULL] = "PUSH_NULL",
1543 [RAISE_VARARGS] = "RAISE_VARARGS",
1544 [RERAISE] = "RERAISE",
1545 [RESERVED] = "RESERVED",
1546 [RESUME] = "RESUME",
1547 [RESUME_CHECK] = "RESUME_CHECK",
1548 [RETURN_CONST] = "RETURN_CONST",
1549 [RETURN_GENERATOR] = "RETURN_GENERATOR",
1550 [RETURN_VALUE] = "RETURN_VALUE",
1551 [SEND] = "SEND",
1552 [SEND_GEN] = "SEND_GEN",
1553 [SETUP_ANNOTATIONS] = "SETUP_ANNOTATIONS",
1554 [SETUP_CLEANUP] = "SETUP_CLEANUP",
1555 [SETUP_FINALLY] = "SETUP_FINALLY",
1556 [SETUP_WITH] = "SETUP_WITH",
1557 [SET_ADD] = "SET_ADD",
1558 [SET_FUNCTION_ATTRIBUTE] = "SET_FUNCTION_ATTRIBUTE",
1559 [SET_UPDATE] = "SET_UPDATE",
1560 [STORE_ATTR] = "STORE_ATTR",
1561 [STORE_ATTR_INSTANCE_VALUE] = "STORE_ATTR_INSTANCE_VALUE",
1562 [STORE_ATTR_SLOT] = "STORE_ATTR_SLOT",
1563 [STORE_ATTR_WITH_HINT] = "STORE_ATTR_WITH_HINT",
1564 [STORE_DEREF] = "STORE_DEREF",
1565 [STORE_FAST] = "STORE_FAST",
1566 [STORE_FAST_LOAD_FAST] = "STORE_FAST_LOAD_FAST",
1567 [STORE_FAST_MAYBE_NULL] = "STORE_FAST_MAYBE_NULL",
1568 [STORE_FAST_STORE_FAST] = "STORE_FAST_STORE_FAST",
1569 [STORE_GLOBAL] = "STORE_GLOBAL",
1570 [STORE_NAME] = "STORE_NAME",
1571 [STORE_SLICE] = "STORE_SLICE",
1572 [STORE_SUBSCR] = "STORE_SUBSCR",
1573 [STORE_SUBSCR_DICT] = "STORE_SUBSCR_DICT",
1574 [STORE_SUBSCR_LIST_INT] = "STORE_SUBSCR_LIST_INT",
1575 [SWAP] = "SWAP",
1576 [TO_BOOL] = "TO_BOOL",
1577 [TO_BOOL_ALWAYS_TRUE] = "TO_BOOL_ALWAYS_TRUE",
1578 [TO_BOOL_BOOL] = "TO_BOOL_BOOL",
1579 [TO_BOOL_INT] = "TO_BOOL_INT",
1580 [TO_BOOL_LIST] = "TO_BOOL_LIST",
1581 [TO_BOOL_NONE] = "TO_BOOL_NONE",
1582 [TO_BOOL_STR] = "TO_BOOL_STR",
1583 [UNARY_INVERT] = "UNARY_INVERT",
1584 [UNARY_NEGATIVE] = "UNARY_NEGATIVE",
1585 [UNARY_NOT] = "UNARY_NOT",
1586 [UNPACK_EX] = "UNPACK_EX",
1587 [UNPACK_SEQUENCE] = "UNPACK_SEQUENCE",
1588 [UNPACK_SEQUENCE_LIST] = "UNPACK_SEQUENCE_LIST",
1589 [UNPACK_SEQUENCE_TUPLE] = "UNPACK_SEQUENCE_TUPLE",
1590 [UNPACK_SEQUENCE_TWO_TUPLE] = "UNPACK_SEQUENCE_TWO_TUPLE",
1591 [WITH_EXCEPT_START] = "WITH_EXCEPT_START",
1592 [YIELD_VALUE] = "YIELD_VALUE",
1593 };
1594 #endif
1595
1596 extern const uint8_t _PyOpcode_Caches[256];
1597 #ifdef NEED_OPCODE_METADATA
1598 const uint8_t _PyOpcode_Caches[256] = {
1599 [JUMP_BACKWARD] = 1,
1600 [TO_BOOL] = 3,
1601 [BINARY_SUBSCR] = 1,
1602 [STORE_SUBSCR] = 1,
1603 [SEND] = 1,
1604 [UNPACK_SEQUENCE] = 1,
1605 [STORE_ATTR] = 4,
1606 [LOAD_GLOBAL] = 4,
1607 [LOAD_SUPER_ATTR] = 1,
1608 [LOAD_ATTR] = 9,
1609 [COMPARE_OP] = 1,
1610 [CONTAINS_OP] = 1,
1611 [POP_JUMP_IF_TRUE] = 1,
1612 [POP_JUMP_IF_FALSE] = 1,
1613 [POP_JUMP_IF_NONE] = 1,
1614 [POP_JUMP_IF_NOT_NONE] = 1,
1615 [FOR_ITER] = 1,
1616 [CALL] = 3,
1617 [BINARY_OP] = 1,
1618 };
1619 #endif
1620
1621 extern const uint8_t _PyOpcode_Deopt[256];
1622 #ifdef NEED_OPCODE_METADATA
1623 const uint8_t _PyOpcode_Deopt[256] = {
1624 [BEFORE_ASYNC_WITH] = BEFORE_ASYNC_WITH,
1625 [BEFORE_WITH] = BEFORE_WITH,
1626 [BINARY_OP] = BINARY_OP,
1627 [BINARY_OP_ADD_FLOAT] = BINARY_OP,
1628 [BINARY_OP_ADD_INT] = BINARY_OP,
1629 [BINARY_OP_ADD_UNICODE] = BINARY_OP,
1630 [BINARY_OP_INPLACE_ADD_UNICODE] = BINARY_OP,
1631 [BINARY_OP_MULTIPLY_FLOAT] = BINARY_OP,
1632 [BINARY_OP_MULTIPLY_INT] = BINARY_OP,
1633 [BINARY_OP_SUBTRACT_FLOAT] = BINARY_OP,
1634 [BINARY_OP_SUBTRACT_INT] = BINARY_OP,
1635 [BINARY_SLICE] = BINARY_SLICE,
1636 [BINARY_SUBSCR] = BINARY_SUBSCR,
1637 [BINARY_SUBSCR_DICT] = BINARY_SUBSCR,
1638 [BINARY_SUBSCR_GETITEM] = BINARY_SUBSCR,
1639 [BINARY_SUBSCR_LIST_INT] = BINARY_SUBSCR,
1640 [BINARY_SUBSCR_STR_INT] = BINARY_SUBSCR,
1641 [BINARY_SUBSCR_TUPLE_INT] = BINARY_SUBSCR,
1642 [BUILD_CONST_KEY_MAP] = BUILD_CONST_KEY_MAP,
1643 [BUILD_LIST] = BUILD_LIST,
1644 [BUILD_MAP] = BUILD_MAP,
1645 [BUILD_SET] = BUILD_SET,
1646 [BUILD_SLICE] = BUILD_SLICE,
1647 [BUILD_STRING] = BUILD_STRING,
1648 [BUILD_TUPLE] = BUILD_TUPLE,
1649 [CACHE] = CACHE,
1650 [CALL] = CALL,
1651 [CALL_ALLOC_AND_ENTER_INIT] = CALL,
1652 [CALL_BOUND_METHOD_EXACT_ARGS] = CALL,
1653 [CALL_BOUND_METHOD_GENERAL] = CALL,
1654 [CALL_BUILTIN_CLASS] = CALL,
1655 [CALL_BUILTIN_FAST] = CALL,
1656 [CALL_BUILTIN_FAST_WITH_KEYWORDS] = CALL,
1657 [CALL_BUILTIN_O] = CALL,
1658 [CALL_FUNCTION_EX] = CALL_FUNCTION_EX,
1659 [CALL_INTRINSIC_1] = CALL_INTRINSIC_1,
1660 [CALL_INTRINSIC_2] = CALL_INTRINSIC_2,
1661 [CALL_ISINSTANCE] = CALL,
1662 [CALL_KW] = CALL_KW,
1663 [CALL_LEN] = CALL,
1664 [CALL_LIST_APPEND] = CALL,
1665 [CALL_METHOD_DESCRIPTOR_FAST] = CALL,
1666 [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = CALL,
1667 [CALL_METHOD_DESCRIPTOR_NOARGS] = CALL,
1668 [CALL_METHOD_DESCRIPTOR_O] = CALL,
1669 [CALL_NON_PY_GENERAL] = CALL,
1670 [CALL_PY_EXACT_ARGS] = CALL,
1671 [CALL_PY_GENERAL] = CALL,
1672 [CALL_STR_1] = CALL,
1673 [CALL_TUPLE_1] = CALL,
1674 [CALL_TYPE_1] = CALL,
1675 [CHECK_EG_MATCH] = CHECK_EG_MATCH,
1676 [CHECK_EXC_MATCH] = CHECK_EXC_MATCH,
1677 [CLEANUP_THROW] = CLEANUP_THROW,
1678 [COMPARE_OP] = COMPARE_OP,
1679 [COMPARE_OP_FLOAT] = COMPARE_OP,
1680 [COMPARE_OP_INT] = COMPARE_OP,
1681 [COMPARE_OP_STR] = COMPARE_OP,
1682 [CONTAINS_OP] = CONTAINS_OP,
1683 [CONTAINS_OP_DICT] = CONTAINS_OP,
1684 [CONTAINS_OP_SET] = CONTAINS_OP,
1685 [CONVERT_VALUE] = CONVERT_VALUE,
1686 [COPY] = COPY,
1687 [COPY_FREE_VARS] = COPY_FREE_VARS,
1688 [DELETE_ATTR] = DELETE_ATTR,
1689 [DELETE_DEREF] = DELETE_DEREF,
1690 [DELETE_FAST] = DELETE_FAST,
1691 [DELETE_GLOBAL] = DELETE_GLOBAL,
1692 [DELETE_NAME] = DELETE_NAME,
1693 [DELETE_SUBSCR] = DELETE_SUBSCR,
1694 [DICT_MERGE] = DICT_MERGE,
1695 [DICT_UPDATE] = DICT_UPDATE,
1696 [END_ASYNC_FOR] = END_ASYNC_FOR,
1697 [END_FOR] = END_FOR,
1698 [END_SEND] = END_SEND,
1699 [ENTER_EXECUTOR] = ENTER_EXECUTOR,
1700 [EXIT_INIT_CHECK] = EXIT_INIT_CHECK,
1701 [EXTENDED_ARG] = EXTENDED_ARG,
1702 [FORMAT_SIMPLE] = FORMAT_SIMPLE,
1703 [FORMAT_WITH_SPEC] = FORMAT_WITH_SPEC,
1704 [FOR_ITER] = FOR_ITER,
1705 [FOR_ITER_GEN] = FOR_ITER,
1706 [FOR_ITER_LIST] = FOR_ITER,
1707 [FOR_ITER_RANGE] = FOR_ITER,
1708 [FOR_ITER_TUPLE] = FOR_ITER,
1709 [GET_AITER] = GET_AITER,
1710 [GET_ANEXT] = GET_ANEXT,
1711 [GET_AWAITABLE] = GET_AWAITABLE,
1712 [GET_ITER] = GET_ITER,
1713 [GET_LEN] = GET_LEN,
1714 [GET_YIELD_FROM_ITER] = GET_YIELD_FROM_ITER,
1715 [IMPORT_FROM] = IMPORT_FROM,
1716 [IMPORT_NAME] = IMPORT_NAME,
1717 [INSTRUMENTED_CALL] = INSTRUMENTED_CALL,
1718 [INSTRUMENTED_CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX,
1719 [INSTRUMENTED_CALL_KW] = INSTRUMENTED_CALL_KW,
1720 [INSTRUMENTED_END_FOR] = INSTRUMENTED_END_FOR,
1721 [INSTRUMENTED_END_SEND] = INSTRUMENTED_END_SEND,
1722 [INSTRUMENTED_FOR_ITER] = INSTRUMENTED_FOR_ITER,
1723 [INSTRUMENTED_INSTRUCTION] = INSTRUMENTED_INSTRUCTION,
1724 [INSTRUMENTED_JUMP_BACKWARD] = INSTRUMENTED_JUMP_BACKWARD,
1725 [INSTRUMENTED_JUMP_FORWARD] = INSTRUMENTED_JUMP_FORWARD,
1726 [INSTRUMENTED_LINE] = INSTRUMENTED_LINE,
1727 [INSTRUMENTED_LOAD_SUPER_ATTR] = INSTRUMENTED_LOAD_SUPER_ATTR,
1728 [INSTRUMENTED_POP_JUMP_IF_FALSE] = INSTRUMENTED_POP_JUMP_IF_FALSE,
1729 [INSTRUMENTED_POP_JUMP_IF_NONE] = INSTRUMENTED_POP_JUMP_IF_NONE,
1730 [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
1731 [INSTRUMENTED_POP_JUMP_IF_TRUE] = INSTRUMENTED_POP_JUMP_IF_TRUE,
1732 [INSTRUMENTED_RESUME] = INSTRUMENTED_RESUME,
1733 [INSTRUMENTED_RETURN_CONST] = INSTRUMENTED_RETURN_CONST,
1734 [INSTRUMENTED_RETURN_VALUE] = INSTRUMENTED_RETURN_VALUE,
1735 [INSTRUMENTED_YIELD_VALUE] = INSTRUMENTED_YIELD_VALUE,
1736 [INTERPRETER_EXIT] = INTERPRETER_EXIT,
1737 [IS_OP] = IS_OP,
1738 [JUMP_BACKWARD] = JUMP_BACKWARD,
1739 [JUMP_BACKWARD_NO_INTERRUPT] = JUMP_BACKWARD_NO_INTERRUPT,
1740 [JUMP_FORWARD] = JUMP_FORWARD,
1741 [LIST_APPEND] = LIST_APPEND,
1742 [LIST_EXTEND] = LIST_EXTEND,
1743 [LOAD_ASSERTION_ERROR] = LOAD_ASSERTION_ERROR,
1744 [LOAD_ATTR] = LOAD_ATTR,
1745 [LOAD_ATTR_CLASS] = LOAD_ATTR,
1746 [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = LOAD_ATTR,
1747 [LOAD_ATTR_INSTANCE_VALUE] = LOAD_ATTR,
1748 [LOAD_ATTR_METHOD_LAZY_DICT] = LOAD_ATTR,
1749 [LOAD_ATTR_METHOD_NO_DICT] = LOAD_ATTR,
1750 [LOAD_ATTR_METHOD_WITH_VALUES] = LOAD_ATTR,
1751 [LOAD_ATTR_MODULE] = LOAD_ATTR,
1752 [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = LOAD_ATTR,
1753 [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = LOAD_ATTR,
1754 [LOAD_ATTR_PROPERTY] = LOAD_ATTR,
1755 [LOAD_ATTR_SLOT] = LOAD_ATTR,
1756 [LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
1757 [LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
1758 [LOAD_CONST] = LOAD_CONST,
1759 [LOAD_DEREF] = LOAD_DEREF,
1760 [LOAD_FAST] = LOAD_FAST,
1761 [LOAD_FAST_AND_CLEAR] = LOAD_FAST_AND_CLEAR,
1762 [LOAD_FAST_CHECK] = LOAD_FAST_CHECK,
1763 [LOAD_FAST_LOAD_FAST] = LOAD_FAST_LOAD_FAST,
1764 [LOAD_FROM_DICT_OR_DEREF] = LOAD_FROM_DICT_OR_DEREF,
1765 [LOAD_FROM_DICT_OR_GLOBALS] = LOAD_FROM_DICT_OR_GLOBALS,
1766 [LOAD_GLOBAL] = LOAD_GLOBAL,
1767 [LOAD_GLOBAL_BUILTIN] = LOAD_GLOBAL,
1768 [LOAD_GLOBAL_MODULE] = LOAD_GLOBAL,
1769 [LOAD_LOCALS] = LOAD_LOCALS,
1770 [LOAD_NAME] = LOAD_NAME,
1771 [LOAD_SUPER_ATTR] = LOAD_SUPER_ATTR,
1772 [LOAD_SUPER_ATTR_ATTR] = LOAD_SUPER_ATTR,
1773 [LOAD_SUPER_ATTR_METHOD] = LOAD_SUPER_ATTR,
1774 [MAKE_CELL] = MAKE_CELL,
1775 [MAKE_FUNCTION] = MAKE_FUNCTION,
1776 [MAP_ADD] = MAP_ADD,
1777 [MATCH_CLASS] = MATCH_CLASS,
1778 [MATCH_KEYS] = MATCH_KEYS,
1779 [MATCH_MAPPING] = MATCH_MAPPING,
1780 [MATCH_SEQUENCE] = MATCH_SEQUENCE,
1781 [NOP] = NOP,
1782 [POP_EXCEPT] = POP_EXCEPT,
1783 [POP_JUMP_IF_FALSE] = POP_JUMP_IF_FALSE,
1784 [POP_JUMP_IF_NONE] = POP_JUMP_IF_NONE,
1785 [POP_JUMP_IF_NOT_NONE] = POP_JUMP_IF_NOT_NONE,
1786 [POP_JUMP_IF_TRUE] = POP_JUMP_IF_TRUE,
1787 [POP_TOP] = POP_TOP,
1788 [PUSH_EXC_INFO] = PUSH_EXC_INFO,
1789 [PUSH_NULL] = PUSH_NULL,
1790 [RAISE_VARARGS] = RAISE_VARARGS,
1791 [RERAISE] = RERAISE,
1792 [RESERVED] = RESERVED,
1793 [RESUME] = RESUME,
1794 [RESUME_CHECK] = RESUME,
1795 [RETURN_CONST] = RETURN_CONST,
1796 [RETURN_GENERATOR] = RETURN_GENERATOR,
1797 [RETURN_VALUE] = RETURN_VALUE,
1798 [SEND] = SEND,
1799 [SEND_GEN] = SEND,
1800 [SETUP_ANNOTATIONS] = SETUP_ANNOTATIONS,
1801 [SET_ADD] = SET_ADD,
1802 [SET_FUNCTION_ATTRIBUTE] = SET_FUNCTION_ATTRIBUTE,
1803 [SET_UPDATE] = SET_UPDATE,
1804 [STORE_ATTR] = STORE_ATTR,
1805 [STORE_ATTR_INSTANCE_VALUE] = STORE_ATTR,
1806 [STORE_ATTR_SLOT] = STORE_ATTR,
1807 [STORE_ATTR_WITH_HINT] = STORE_ATTR,
1808 [STORE_DEREF] = STORE_DEREF,
1809 [STORE_FAST] = STORE_FAST,
1810 [STORE_FAST_LOAD_FAST] = STORE_FAST_LOAD_FAST,
1811 [STORE_FAST_STORE_FAST] = STORE_FAST_STORE_FAST,
1812 [STORE_GLOBAL] = STORE_GLOBAL,
1813 [STORE_NAME] = STORE_NAME,
1814 [STORE_SLICE] = STORE_SLICE,
1815 [STORE_SUBSCR] = STORE_SUBSCR,
1816 [STORE_SUBSCR_DICT] = STORE_SUBSCR,
1817 [STORE_SUBSCR_LIST_INT] = STORE_SUBSCR,
1818 [SWAP] = SWAP,
1819 [TO_BOOL] = TO_BOOL,
1820 [TO_BOOL_ALWAYS_TRUE] = TO_BOOL,
1821 [TO_BOOL_BOOL] = TO_BOOL,
1822 [TO_BOOL_INT] = TO_BOOL,
1823 [TO_BOOL_LIST] = TO_BOOL,
1824 [TO_BOOL_NONE] = TO_BOOL,
1825 [TO_BOOL_STR] = TO_BOOL,
1826 [UNARY_INVERT] = UNARY_INVERT,
1827 [UNARY_NEGATIVE] = UNARY_NEGATIVE,
1828 [UNARY_NOT] = UNARY_NOT,
1829 [UNPACK_EX] = UNPACK_EX,
1830 [UNPACK_SEQUENCE] = UNPACK_SEQUENCE,
1831 [UNPACK_SEQUENCE_LIST] = UNPACK_SEQUENCE,
1832 [UNPACK_SEQUENCE_TUPLE] = UNPACK_SEQUENCE,
1833 [UNPACK_SEQUENCE_TWO_TUPLE] = UNPACK_SEQUENCE,
1834 [WITH_EXCEPT_START] = WITH_EXCEPT_START,
1835 [YIELD_VALUE] = YIELD_VALUE,
1836 };
1837
1838 #endif
1839
1840 #define EXTRA_CASES \
1841 case 119: \
1842 case 120: \
1843 case 121: \
1844 case 122: \
1845 case 123: \
1846 case 124: \
1847 case 125: \
1848 case 126: \
1849 case 127: \
1850 case 128: \
1851 case 129: \
1852 case 130: \
1853 case 131: \
1854 case 132: \
1855 case 133: \
1856 case 134: \
1857 case 135: \
1858 case 136: \
1859 case 137: \
1860 case 138: \
1861 case 139: \
1862 case 140: \
1863 case 141: \
1864 case 142: \
1865 case 143: \
1866 case 144: \
1867 case 145: \
1868 case 146: \
1869 case 147: \
1870 case 148: \
1871 case 223: \
1872 case 224: \
1873 case 225: \
1874 case 226: \
1875 case 227: \
1876 case 228: \
1877 case 229: \
1878 case 230: \
1879 case 231: \
1880 case 232: \
1881 case 233: \
1882 case 234: \
1883 case 235: \
1884 case 255: \
1885 ;
1886 struct pseudo_targets {
1887 uint8_t targets[3];
1888 };
1889 extern const struct pseudo_targets _PyOpcode_PseudoTargets[12];
1890 #ifdef NEED_OPCODE_METADATA
1891 const struct pseudo_targets _PyOpcode_PseudoTargets[12] = {
1892 [LOAD_CLOSURE-256] = { { LOAD_FAST, 0, 0 } },
1893 [STORE_FAST_MAYBE_NULL-256] = { { STORE_FAST, 0, 0 } },
1894 [LOAD_SUPER_METHOD-256] = { { LOAD_SUPER_ATTR, 0, 0 } },
1895 [LOAD_ZERO_SUPER_METHOD-256] = { { LOAD_SUPER_ATTR, 0, 0 } },
1896 [LOAD_ZERO_SUPER_ATTR-256] = { { LOAD_SUPER_ATTR, 0, 0 } },
1897 [LOAD_METHOD-256] = { { LOAD_ATTR, 0, 0 } },
1898 [JUMP-256] = { { JUMP_FORWARD, JUMP_BACKWARD, 0 } },
1899 [JUMP_NO_INTERRUPT-256] = { { JUMP_FORWARD, JUMP_BACKWARD_NO_INTERRUPT, 0 } },
1900 [SETUP_FINALLY-256] = { { NOP, 0, 0 } },
1901 [SETUP_CLEANUP-256] = { { NOP, 0, 0 } },
1902 [SETUP_WITH-256] = { { NOP, 0, 0 } },
1903 [POP_BLOCK-256] = { { NOP, 0, 0 } },
1904 };
1905
1906 #endif
1907 static inline bool
1908 is_pseudo_target(int pseudo, int target) {
1909 if (pseudo < 256 || pseudo >= 268) {
1910 return false;
1911 }
1912 for (int i = 0; _PyOpcode_PseudoTargets[pseudo-256].targets[i]; i++) {
1913 if (_PyOpcode_PseudoTargets[pseudo-256].targets[i] == target) return true;
1914 }
1915 return false;
1916 }
1917
1918
1919 #ifdef __cplusplus
1920 }
1921 #endif
1922 #endif