1 // This file is generated by Tools/cases_generator/opcode_metadata_generator.py
2 // from:
3 // Python/bytecodes.c
4 // Do not edit!
5
6 #ifndef Py_CORE_OPCODE_METADATA_H
7 #define Py_CORE_OPCODE_METADATA_H
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11
12 #ifndef Py_BUILD_CORE
13 # error "this header requires Py_BUILD_CORE define"
14 #endif
15
16 #include <stdbool.h> // bool
17 #include "opcode_ids.h"
18
19
20 #define IS_PSEUDO_INSTR(OP) ( \
21 ((OP) == LOAD_CLOSURE) || \
22 ((OP) == STORE_FAST_MAYBE_NULL) || \
23 ((OP) == LOAD_SUPER_METHOD) || \
24 ((OP) == LOAD_ZERO_SUPER_METHOD) || \
25 ((OP) == LOAD_ZERO_SUPER_ATTR) || \
26 ((OP) == LOAD_METHOD) || \
27 ((OP) == JUMP) || \
28 ((OP) == JUMP_NO_INTERRUPT) || \
29 ((OP) == SETUP_FINALLY) || \
30 ((OP) == SETUP_CLEANUP) || \
31 ((OP) == SETUP_WITH) || \
32 ((OP) == POP_BLOCK) || \
33 0)
34
35 #include "pycore_uop_ids.h"
36 extern int _PyOpcode_num_popped(int opcode, int oparg);
37 #ifdef NEED_OPCODE_METADATA
_PyOpcode_num_popped(int opcode,int oparg)38 int _PyOpcode_num_popped(int opcode, int oparg) {
39 switch(opcode) {
40 case BEFORE_ASYNC_WITH:
41 return 1;
42 case BEFORE_WITH:
43 return 1;
44 case BINARY_OP:
45 return 2;
46 case BINARY_OP_ADD_FLOAT:
47 return 2;
48 case BINARY_OP_ADD_INT:
49 return 2;
50 case BINARY_OP_ADD_UNICODE:
51 return 2;
52 case BINARY_OP_INPLACE_ADD_UNICODE:
53 return 2;
54 case BINARY_OP_MULTIPLY_FLOAT:
55 return 2;
56 case BINARY_OP_MULTIPLY_INT:
57 return 2;
58 case BINARY_OP_SUBTRACT_FLOAT:
59 return 2;
60 case BINARY_OP_SUBTRACT_INT:
61 return 2;
62 case BINARY_SLICE:
63 return 3;
64 case BINARY_SUBSCR:
65 return 2;
66 case BINARY_SUBSCR_DICT:
67 return 2;
68 case BINARY_SUBSCR_GETITEM:
69 return 2;
70 case BINARY_SUBSCR_LIST_INT:
71 return 2;
72 case BINARY_SUBSCR_STR_INT:
73 return 2;
74 case BINARY_SUBSCR_TUPLE_INT:
75 return 2;
76 case BUILD_CONST_KEY_MAP:
77 return 1 + oparg;
78 case BUILD_LIST:
79 return oparg;
80 case BUILD_MAP:
81 return oparg*2;
82 case BUILD_SET:
83 return oparg;
84 case BUILD_SLICE:
85 return 2 + ((oparg == 3) ? 1 : 0);
86 case BUILD_STRING:
87 return oparg;
88 case BUILD_TUPLE:
89 return oparg;
90 case CACHE:
91 return 0;
92 case CALL:
93 return 2 + oparg;
94 case CALL_ALLOC_AND_ENTER_INIT:
95 return 2 + oparg;
96 case CALL_BOUND_METHOD_EXACT_ARGS:
97 return 2 + oparg;
98 case CALL_BOUND_METHOD_GENERAL:
99 return 2 + oparg;
100 case CALL_BUILTIN_CLASS:
101 return 2 + oparg;
102 case CALL_BUILTIN_FAST:
103 return 2 + oparg;
104 case CALL_BUILTIN_FAST_WITH_KEYWORDS:
105 return 2 + oparg;
106 case CALL_BUILTIN_O:
107 return 2 + oparg;
108 case CALL_FUNCTION_EX:
109 return 3 + (oparg & 1);
110 case CALL_INTRINSIC_1:
111 return 1;
112 case CALL_INTRINSIC_2:
113 return 2;
114 case CALL_ISINSTANCE:
115 return 2 + oparg;
116 case CALL_KW:
117 return 3 + oparg;
118 case CALL_LEN:
119 return 2 + oparg;
120 case CALL_LIST_APPEND:
121 return 3;
122 case CALL_METHOD_DESCRIPTOR_FAST:
123 return 2 + oparg;
124 case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS:
125 return 2 + oparg;
126 case CALL_METHOD_DESCRIPTOR_NOARGS:
127 return 2 + oparg;
128 case CALL_METHOD_DESCRIPTOR_O:
129 return 2 + oparg;
130 case CALL_NON_PY_GENERAL:
131 return 2 + oparg;
132 case CALL_PY_EXACT_ARGS:
133 return 2 + oparg;
134 case CALL_PY_GENERAL:
135 return 2 + oparg;
136 case CALL_STR_1:
137 return 3;
138 case CALL_TUPLE_1:
139 return 3;
140 case CALL_TYPE_1:
141 return 3;
142 case CHECK_EG_MATCH:
143 return 2;
144 case CHECK_EXC_MATCH:
145 return 2;
146 case CLEANUP_THROW:
147 return 3;
148 case COMPARE_OP:
149 return 2;
150 case COMPARE_OP_FLOAT:
151 return 2;
152 case COMPARE_OP_INT:
153 return 2;
154 case COMPARE_OP_STR:
155 return 2;
156 case CONTAINS_OP:
157 return 2;
158 case CONTAINS_OP_DICT:
159 return 2;
160 case CONTAINS_OP_SET:
161 return 2;
162 case CONVERT_VALUE:
163 return 1;
164 case COPY:
165 return 1 + (oparg-1);
166 case COPY_FREE_VARS:
167 return 0;
168 case DELETE_ATTR:
169 return 1;
170 case DELETE_DEREF:
171 return 0;
172 case DELETE_FAST:
173 return 0;
174 case DELETE_GLOBAL:
175 return 0;
176 case DELETE_NAME:
177 return 0;
178 case DELETE_SUBSCR:
179 return 2;
180 case DICT_MERGE:
181 return 5 + (oparg - 1);
182 case DICT_UPDATE:
183 return 2 + (oparg - 1);
184 case END_ASYNC_FOR:
185 return 2;
186 case END_FOR:
187 return 1;
188 case END_SEND:
189 return 2;
190 case ENTER_EXECUTOR:
191 return 0;
192 case EXIT_INIT_CHECK:
193 return 1;
194 case EXTENDED_ARG:
195 return 0;
196 case FORMAT_SIMPLE:
197 return 1;
198 case FORMAT_WITH_SPEC:
199 return 2;
200 case FOR_ITER:
201 return 1;
202 case FOR_ITER_GEN:
203 return 1;
204 case FOR_ITER_LIST:
205 return 1;
206 case FOR_ITER_RANGE:
207 return 1;
208 case FOR_ITER_TUPLE:
209 return 1;
210 case GET_AITER:
211 return 1;
212 case GET_ANEXT:
213 return 1;
214 case GET_AWAITABLE:
215 return 1;
216 case GET_ITER:
217 return 1;
218 case GET_LEN:
219 return 1;
220 case GET_YIELD_FROM_ITER:
221 return 1;
222 case IMPORT_FROM:
223 return 1;
224 case IMPORT_NAME:
225 return 2;
226 case INSTRUMENTED_CALL:
227 return 0;
228 case INSTRUMENTED_CALL_FUNCTION_EX:
229 return 0;
230 case INSTRUMENTED_CALL_KW:
231 return 0;
232 case INSTRUMENTED_END_FOR:
233 return 2;
234 case INSTRUMENTED_END_SEND:
235 return 2;
236 case INSTRUMENTED_FOR_ITER:
237 return 0;
238 case INSTRUMENTED_INSTRUCTION:
239 return 0;
240 case INSTRUMENTED_JUMP_BACKWARD:
241 return 0;
242 case INSTRUMENTED_JUMP_FORWARD:
243 return 0;
244 case INSTRUMENTED_LOAD_SUPER_ATTR:
245 return 3;
246 case INSTRUMENTED_POP_JUMP_IF_FALSE:
247 return 0;
248 case INSTRUMENTED_POP_JUMP_IF_NONE:
249 return 0;
250 case INSTRUMENTED_POP_JUMP_IF_NOT_NONE:
251 return 0;
252 case INSTRUMENTED_POP_JUMP_IF_TRUE:
253 return 0;
254 case INSTRUMENTED_RESUME:
255 return 0;
256 case INSTRUMENTED_RETURN_CONST:
257 return 0;
258 case INSTRUMENTED_RETURN_VALUE:
259 return 1;
260 case INSTRUMENTED_YIELD_VALUE:
261 return 1;
262 case INTERPRETER_EXIT:
263 return 1;
264 case IS_OP:
265 return 2;
266 case JUMP_BACKWARD:
267 return 0;
268 case JUMP_BACKWARD_NO_INTERRUPT:
269 return 0;
270 case JUMP_FORWARD:
271 return 0;
272 case LIST_APPEND:
273 return 2 + (oparg-1);
274 case LIST_EXTEND:
275 return 2 + (oparg-1);
276 case LOAD_ASSERTION_ERROR:
277 return 0;
278 case LOAD_ATTR:
279 return 1;
280 case LOAD_ATTR_CLASS:
281 return 1;
282 case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN:
283 return 1;
284 case LOAD_ATTR_INSTANCE_VALUE:
285 return 1;
286 case LOAD_ATTR_METHOD_LAZY_DICT:
287 return 1;
288 case LOAD_ATTR_METHOD_NO_DICT:
289 return 1;
290 case LOAD_ATTR_METHOD_WITH_VALUES:
291 return 1;
292 case LOAD_ATTR_MODULE:
293 return 1;
294 case LOAD_ATTR_NONDESCRIPTOR_NO_DICT:
295 return 1;
296 case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES:
297 return 1;
298 case LOAD_ATTR_PROPERTY:
299 return 1;
300 case LOAD_ATTR_SLOT:
301 return 1;
302 case LOAD_ATTR_WITH_HINT:
303 return 1;
304 case LOAD_BUILD_CLASS:
305 return 0;
306 case LOAD_CONST:
307 return 0;
308 case LOAD_DEREF:
309 return 0;
310 case LOAD_FAST:
311 return 0;
312 case LOAD_FAST_AND_CLEAR:
313 return 0;
314 case LOAD_FAST_CHECK:
315 return 0;
316 case LOAD_FAST_LOAD_FAST:
317 return 0;
318 case LOAD_FROM_DICT_OR_DEREF:
319 return 1;
320 case LOAD_FROM_DICT_OR_GLOBALS:
321 return 1;
322 case LOAD_GLOBAL:
323 return 0;
324 case LOAD_GLOBAL_BUILTIN:
325 return 0;
326 case LOAD_GLOBAL_MODULE:
327 return 0;
328 case LOAD_LOCALS:
329 return 0;
330 case LOAD_NAME:
331 return 0;
332 case LOAD_SUPER_ATTR:
333 return 3;
334 case LOAD_SUPER_ATTR_ATTR:
335 return 3;
336 case LOAD_SUPER_ATTR_METHOD:
337 return 3;
338 case MAKE_CELL:
339 return 0;
340 case MAKE_FUNCTION:
341 return 1;
342 case MAP_ADD:
343 return 3 + (oparg - 1);
344 case MATCH_CLASS:
345 return 3;
346 case MATCH_KEYS:
347 return 2;
348 case MATCH_MAPPING:
349 return 1;
350 case MATCH_SEQUENCE:
351 return 1;
352 case NOP:
353 return 0;
354 case POP_EXCEPT:
355 return 1;
356 case POP_JUMP_IF_FALSE:
357 return 1;
358 case POP_JUMP_IF_NONE:
359 return 1;
360 case POP_JUMP_IF_NOT_NONE:
361 return 1;
362 case POP_JUMP_IF_TRUE:
363 return 1;
364 case POP_TOP:
365 return 1;
366 case PUSH_EXC_INFO:
367 return 1;
368 case PUSH_NULL:
369 return 0;
370 case RAISE_VARARGS:
371 return oparg;
372 case RERAISE:
373 return 1 + oparg;
374 case RESERVED:
375 return 0;
376 case RESUME:
377 return 0;
378 case RESUME_CHECK:
379 return 0;
380 case RETURN_CONST:
381 return 0;
382 case RETURN_GENERATOR:
383 return 0;
384 case RETURN_VALUE:
385 return 1;
386 case SEND:
387 return 2;
388 case SEND_GEN:
389 return 2;
390 case SETUP_ANNOTATIONS:
391 return 0;
392 case SET_ADD:
393 return 2 + (oparg-1);
394 case SET_FUNCTION_ATTRIBUTE:
395 return 2;
396 case SET_UPDATE:
397 return 2 + (oparg-1);
398 case STORE_ATTR:
399 return 2;
400 case STORE_ATTR_INSTANCE_VALUE:
401 return 2;
402 case STORE_ATTR_SLOT:
403 return 2;
404 case STORE_ATTR_WITH_HINT:
405 return 2;
406 case STORE_DEREF:
407 return 1;
408 case STORE_FAST:
409 return 1;
410 case STORE_FAST_LOAD_FAST:
411 return 1;
412 case STORE_FAST_STORE_FAST:
413 return 2;
414 case STORE_GLOBAL:
415 return 1;
416 case STORE_NAME:
417 return 1;
418 case STORE_SLICE:
419 return 4;
420 case STORE_SUBSCR:
421 return 3;
422 case STORE_SUBSCR_DICT:
423 return 3;
424 case STORE_SUBSCR_LIST_INT:
425 return 3;
426 case SWAP:
427 return 2 + (oparg-2);
428 case TO_BOOL:
429 return 1;
430 case TO_BOOL_ALWAYS_TRUE:
431 return 1;
432 case TO_BOOL_BOOL:
433 return 1;
434 case TO_BOOL_INT:
435 return 1;
436 case TO_BOOL_LIST:
437 return 1;
438 case TO_BOOL_NONE:
439 return 1;
440 case TO_BOOL_STR:
441 return 1;
442 case UNARY_INVERT:
443 return 1;
444 case UNARY_NEGATIVE:
445 return 1;
446 case UNARY_NOT:
447 return 1;
448 case UNPACK_EX:
449 return 1;
450 case UNPACK_SEQUENCE:
451 return 1;
452 case UNPACK_SEQUENCE_LIST:
453 return 1;
454 case UNPACK_SEQUENCE_TUPLE:
455 return 1;
456 case UNPACK_SEQUENCE_TWO_TUPLE:
457 return 1;
458 case WITH_EXCEPT_START:
459 return 4;
460 case YIELD_VALUE:
461 return 1;
462 default:
463 return -1;
464 }
465 }
466
467 #endif
468
469 extern int _PyOpcode_num_pushed(int opcode, int oparg);
470 #ifdef NEED_OPCODE_METADATA
_PyOpcode_num_pushed(int opcode,int oparg)471 int _PyOpcode_num_pushed(int opcode, int oparg) {
472 switch(opcode) {
473 case BEFORE_ASYNC_WITH:
474 return 2;
475 case BEFORE_WITH:
476 return 2;
477 case BINARY_OP:
478 return 1;
479 case BINARY_OP_ADD_FLOAT:
480 return 1;
481 case BINARY_OP_ADD_INT:
482 return 1;
483 case BINARY_OP_ADD_UNICODE:
484 return 1;
485 case BINARY_OP_INPLACE_ADD_UNICODE:
486 return 0;
487 case BINARY_OP_MULTIPLY_FLOAT:
488 return 1;
489 case BINARY_OP_MULTIPLY_INT:
490 return 1;
491 case BINARY_OP_SUBTRACT_FLOAT:
492 return 1;
493 case BINARY_OP_SUBTRACT_INT:
494 return 1;
495 case BINARY_SLICE:
496 return 1;
497 case BINARY_SUBSCR:
498 return 1;
499 case BINARY_SUBSCR_DICT:
500 return 1;
501 case BINARY_SUBSCR_GETITEM:
502 return 1;
503 case BINARY_SUBSCR_LIST_INT:
504 return 1;
505 case BINARY_SUBSCR_STR_INT:
506 return 1;
507 case BINARY_SUBSCR_TUPLE_INT:
508 return 1;
509 case BUILD_CONST_KEY_MAP:
510 return 1;
511 case BUILD_LIST:
512 return 1;
513 case BUILD_MAP:
514 return 1;
515 case BUILD_SET:
516 return 1;
517 case BUILD_SLICE:
518 return 1;
519 case BUILD_STRING:
520 return 1;
521 case BUILD_TUPLE:
522 return 1;
523 case CACHE:
524 return 0;
525 case CALL:
526 return 1;
527 case CALL_ALLOC_AND_ENTER_INIT:
528 return 1;
529 case CALL_BOUND_METHOD_EXACT_ARGS:
530 return 0;
531 case CALL_BOUND_METHOD_GENERAL:
532 return 0;
533 case CALL_BUILTIN_CLASS:
534 return 1;
535 case CALL_BUILTIN_FAST:
536 return 1;
537 case CALL_BUILTIN_FAST_WITH_KEYWORDS:
538 return 1;
539 case CALL_BUILTIN_O:
540 return 1;
541 case CALL_FUNCTION_EX:
542 return 1;
543 case CALL_INTRINSIC_1:
544 return 1;
545 case CALL_INTRINSIC_2:
546 return 1;
547 case CALL_ISINSTANCE:
548 return 1;
549 case CALL_KW:
550 return 1;
551 case CALL_LEN:
552 return 1;
553 case CALL_LIST_APPEND:
554 return 1;
555 case CALL_METHOD_DESCRIPTOR_FAST:
556 return 1;
557 case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS:
558 return 1;
559 case CALL_METHOD_DESCRIPTOR_NOARGS:
560 return 1;
561 case CALL_METHOD_DESCRIPTOR_O:
562 return 1;
563 case CALL_NON_PY_GENERAL:
564 return 1;
565 case CALL_PY_EXACT_ARGS:
566 return 0;
567 case CALL_PY_GENERAL:
568 return 0;
569 case CALL_STR_1:
570 return 1;
571 case CALL_TUPLE_1:
572 return 1;
573 case CALL_TYPE_1:
574 return 1;
575 case CHECK_EG_MATCH:
576 return 2;
577 case CHECK_EXC_MATCH:
578 return 2;
579 case CLEANUP_THROW:
580 return 2;
581 case COMPARE_OP:
582 return 1;
583 case COMPARE_OP_FLOAT:
584 return 1;
585 case COMPARE_OP_INT:
586 return 1;
587 case COMPARE_OP_STR:
588 return 1;
589 case CONTAINS_OP:
590 return 1;
591 case CONTAINS_OP_DICT:
592 return 1;
593 case CONTAINS_OP_SET:
594 return 1;
595 case CONVERT_VALUE:
596 return 1;
597 case COPY:
598 return 2 + (oparg-1);
599 case COPY_FREE_VARS:
600 return 0;
601 case DELETE_ATTR:
602 return 0;
603 case DELETE_DEREF:
604 return 0;
605 case DELETE_FAST:
606 return 0;
607 case DELETE_GLOBAL:
608 return 0;
609 case DELETE_NAME:
610 return 0;
611 case DELETE_SUBSCR:
612 return 0;
613 case DICT_MERGE:
614 return 4 + (oparg - 1);
615 case DICT_UPDATE:
616 return 1 + (oparg - 1);
617 case END_ASYNC_FOR:
618 return 0;
619 case END_FOR:
620 return 0;
621 case END_SEND:
622 return 1;
623 case ENTER_EXECUTOR:
624 return 0;
625 case EXIT_INIT_CHECK:
626 return 0;
627 case EXTENDED_ARG:
628 return 0;
629 case FORMAT_SIMPLE:
630 return 1;
631 case FORMAT_WITH_SPEC:
632 return 1;
633 case FOR_ITER:
634 return 2;
635 case FOR_ITER_GEN:
636 return 1;
637 case FOR_ITER_LIST:
638 return 2;
639 case FOR_ITER_RANGE:
640 return 2;
641 case FOR_ITER_TUPLE:
642 return 2;
643 case GET_AITER:
644 return 1;
645 case GET_ANEXT:
646 return 2;
647 case GET_AWAITABLE:
648 return 1;
649 case GET_ITER:
650 return 1;
651 case GET_LEN:
652 return 2;
653 case GET_YIELD_FROM_ITER:
654 return 1;
655 case IMPORT_FROM:
656 return 2;
657 case IMPORT_NAME:
658 return 1;
659 case INSTRUMENTED_CALL:
660 return 0;
661 case INSTRUMENTED_CALL_FUNCTION_EX:
662 return 0;
663 case INSTRUMENTED_CALL_KW:
664 return 0;
665 case INSTRUMENTED_END_FOR:
666 return 1;
667 case INSTRUMENTED_END_SEND:
668 return 1;
669 case INSTRUMENTED_FOR_ITER:
670 return 0;
671 case INSTRUMENTED_INSTRUCTION:
672 return 0;
673 case INSTRUMENTED_JUMP_BACKWARD:
674 return 0;
675 case INSTRUMENTED_JUMP_FORWARD:
676 return 0;
677 case INSTRUMENTED_LOAD_SUPER_ATTR:
678 return 1 + (oparg & 1);
679 case INSTRUMENTED_POP_JUMP_IF_FALSE:
680 return 0;
681 case INSTRUMENTED_POP_JUMP_IF_NONE:
682 return 0;
683 case INSTRUMENTED_POP_JUMP_IF_NOT_NONE:
684 return 0;
685 case INSTRUMENTED_POP_JUMP_IF_TRUE:
686 return 0;
687 case INSTRUMENTED_RESUME:
688 return 0;
689 case INSTRUMENTED_RETURN_CONST:
690 return 0;
691 case INSTRUMENTED_RETURN_VALUE:
692 return 0;
693 case INSTRUMENTED_YIELD_VALUE:
694 return 1;
695 case INTERPRETER_EXIT:
696 return 0;
697 case IS_OP:
698 return 1;
699 case JUMP_BACKWARD:
700 return 0;
701 case JUMP_BACKWARD_NO_INTERRUPT:
702 return 0;
703 case JUMP_FORWARD:
704 return 0;
705 case LIST_APPEND:
706 return 1 + (oparg-1);
707 case LIST_EXTEND:
708 return 1 + (oparg-1);
709 case LOAD_ASSERTION_ERROR:
710 return 1;
711 case LOAD_ATTR:
712 return 1 + (oparg & 1);
713 case LOAD_ATTR_CLASS:
714 return 1 + (oparg & 1);
715 case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN:
716 return 1;
717 case LOAD_ATTR_INSTANCE_VALUE:
718 return 1 + (oparg & 1);
719 case LOAD_ATTR_METHOD_LAZY_DICT:
720 return 2;
721 case LOAD_ATTR_METHOD_NO_DICT:
722 return 2;
723 case LOAD_ATTR_METHOD_WITH_VALUES:
724 return 2;
725 case LOAD_ATTR_MODULE:
726 return 1 + (oparg & 1);
727 case LOAD_ATTR_NONDESCRIPTOR_NO_DICT:
728 return 1;
729 case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES:
730 return 1;
731 case LOAD_ATTR_PROPERTY:
732 return 1;
733 case LOAD_ATTR_SLOT:
734 return 1 + (oparg & 1);
735 case LOAD_ATTR_WITH_HINT:
736 return 1 + (oparg & 1);
737 case LOAD_BUILD_CLASS:
738 return 1;
739 case LOAD_CONST:
740 return 1;
741 case LOAD_DEREF:
742 return 1;
743 case LOAD_FAST:
744 return 1;
745 case LOAD_FAST_AND_CLEAR:
746 return 1;
747 case LOAD_FAST_CHECK:
748 return 1;
749 case LOAD_FAST_LOAD_FAST:
750 return 2;
751 case LOAD_FROM_DICT_OR_DEREF:
752 return 1;
753 case LOAD_FROM_DICT_OR_GLOBALS:
754 return 1;
755 case LOAD_GLOBAL:
756 return 1 + (oparg & 1);
757 case LOAD_GLOBAL_BUILTIN:
758 return 1 + (oparg & 1);
759 case LOAD_GLOBAL_MODULE:
760 return 1 + (oparg & 1);
761 case LOAD_LOCALS:
762 return 1;
763 case LOAD_NAME:
764 return 1;
765 case LOAD_SUPER_ATTR:
766 return 1 + (oparg & 1);
767 case LOAD_SUPER_ATTR_ATTR:
768 return 1;
769 case LOAD_SUPER_ATTR_METHOD:
770 return 2;
771 case MAKE_CELL:
772 return 0;
773 case MAKE_FUNCTION:
774 return 1;
775 case MAP_ADD:
776 return 1 + (oparg - 1);
777 case MATCH_CLASS:
778 return 1;
779 case MATCH_KEYS:
780 return 3;
781 case MATCH_MAPPING:
782 return 2;
783 case MATCH_SEQUENCE:
784 return 2;
785 case NOP:
786 return 0;
787 case POP_EXCEPT:
788 return 0;
789 case POP_JUMP_IF_FALSE:
790 return 0;
791 case POP_JUMP_IF_NONE:
792 return 0;
793 case POP_JUMP_IF_NOT_NONE:
794 return 0;
795 case POP_JUMP_IF_TRUE:
796 return 0;
797 case POP_TOP:
798 return 0;
799 case PUSH_EXC_INFO:
800 return 2;
801 case PUSH_NULL:
802 return 1;
803 case RAISE_VARARGS:
804 return 0;
805 case RERAISE:
806 return oparg;
807 case RESERVED:
808 return 0;
809 case RESUME:
810 return 0;
811 case RESUME_CHECK:
812 return 0;
813 case RETURN_CONST:
814 return 0;
815 case RETURN_GENERATOR:
816 return 1;
817 case RETURN_VALUE:
818 return 0;
819 case SEND:
820 return 2;
821 case SEND_GEN:
822 return 2;
823 case SETUP_ANNOTATIONS:
824 return 0;
825 case SET_ADD:
826 return 1 + (oparg-1);
827 case SET_FUNCTION_ATTRIBUTE:
828 return 1;
829 case SET_UPDATE:
830 return 1 + (oparg-1);
831 case STORE_ATTR:
832 return 0;
833 case STORE_ATTR_INSTANCE_VALUE:
834 return 0;
835 case STORE_ATTR_SLOT:
836 return 0;
837 case STORE_ATTR_WITH_HINT:
838 return 0;
839 case STORE_DEREF:
840 return 0;
841 case STORE_FAST:
842 return 0;
843 case STORE_FAST_LOAD_FAST:
844 return 1;
845 case STORE_FAST_STORE_FAST:
846 return 0;
847 case STORE_GLOBAL:
848 return 0;
849 case STORE_NAME:
850 return 0;
851 case STORE_SLICE:
852 return 0;
853 case STORE_SUBSCR:
854 return 0;
855 case STORE_SUBSCR_DICT:
856 return 0;
857 case STORE_SUBSCR_LIST_INT:
858 return 0;
859 case SWAP:
860 return 2 + (oparg-2);
861 case TO_BOOL:
862 return 1;
863 case TO_BOOL_ALWAYS_TRUE:
864 return 1;
865 case TO_BOOL_BOOL:
866 return 1;
867 case TO_BOOL_INT:
868 return 1;
869 case TO_BOOL_LIST:
870 return 1;
871 case TO_BOOL_NONE:
872 return 1;
873 case TO_BOOL_STR:
874 return 1;
875 case UNARY_INVERT:
876 return 1;
877 case UNARY_NEGATIVE:
878 return 1;
879 case UNARY_NOT:
880 return 1;
881 case UNPACK_EX:
882 return 1 + (oparg >> 8) + (oparg & 0xFF);
883 case UNPACK_SEQUENCE:
884 return oparg;
885 case UNPACK_SEQUENCE_LIST:
886 return oparg;
887 case UNPACK_SEQUENCE_TUPLE:
888 return oparg;
889 case UNPACK_SEQUENCE_TWO_TUPLE:
890 return 2;
891 case WITH_EXCEPT_START:
892 return 5;
893 case YIELD_VALUE:
894 return 1;
895 default:
896 return -1;
897 }
898 }
899
900 #endif
901
902 enum InstructionFormat {
903 INSTR_FMT_IB = 1,
904 INSTR_FMT_IBC = 2,
905 INSTR_FMT_IBC00 = 3,
906 INSTR_FMT_IBC000 = 4,
907 INSTR_FMT_IBC00000000 = 5,
908 INSTR_FMT_IX = 6,
909 INSTR_FMT_IXC = 7,
910 INSTR_FMT_IXC00 = 8,
911 INSTR_FMT_IXC000 = 9,
912 };
913
914 #define IS_VALID_OPCODE(OP) \
915 (((OP) >= 0) && ((OP) < 268) && \
916 (_PyOpcode_opcode_metadata[(OP)].valid_entry))
917
918 #define HAS_ARG_FLAG (1)
919 #define HAS_CONST_FLAG (2)
920 #define HAS_NAME_FLAG (4)
921 #define HAS_JUMP_FLAG (8)
922 #define HAS_FREE_FLAG (16)
923 #define HAS_LOCAL_FLAG (32)
924 #define HAS_EVAL_BREAK_FLAG (64)
925 #define HAS_DEOPT_FLAG (128)
926 #define HAS_ERROR_FLAG (256)
927 #define HAS_ESCAPES_FLAG (512)
928 #define HAS_EXIT_FLAG (1024)
929 #define HAS_PURE_FLAG (2048)
930 #define HAS_PASSTHROUGH_FLAG (4096)
931 #define HAS_OPARG_AND_1_FLAG (8192)
932 #define HAS_ERROR_NO_POP_FLAG (16384)
933 #define OPCODE_HAS_ARG(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ARG_FLAG))
934 #define OPCODE_HAS_CONST(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_CONST_FLAG))
935 #define OPCODE_HAS_NAME(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_NAME_FLAG))
936 #define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
937 #define OPCODE_HAS_FREE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_FREE_FLAG))
938 #define OPCODE_HAS_LOCAL(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_LOCAL_FLAG))
939 #define OPCODE_HAS_EVAL_BREAK(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_EVAL_BREAK_FLAG))
940 #define OPCODE_HAS_DEOPT(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_DEOPT_FLAG))
941 #define OPCODE_HAS_ERROR(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ERROR_FLAG))
942 #define OPCODE_HAS_ESCAPES(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ESCAPES_FLAG))
943 #define OPCODE_HAS_EXIT(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_EXIT_FLAG))
944 #define OPCODE_HAS_PURE(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PURE_FLAG))
945 #define OPCODE_HAS_PASSTHROUGH(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_PASSTHROUGH_FLAG))
946 #define OPCODE_HAS_OPARG_AND_1(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_OPARG_AND_1_FLAG))
947 #define OPCODE_HAS_ERROR_NO_POP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_ERROR_NO_POP_FLAG))
948
949 #define OPARG_FULL 0
950 #define OPARG_CACHE_1 1
951 #define OPARG_CACHE_2 2
952 #define OPARG_CACHE_4 4
953 #define OPARG_TOP 5
954 #define OPARG_BOTTOM 6
955 #define OPARG_SAVE_RETURN_OFFSET 7
956 #define OPARG_REPLACED 9
957
958 struct opcode_metadata {
959 uint8_t valid_entry;
960 int8_t instr_format;
961 int16_t flags;
962 };
963
964 extern const struct opcode_metadata _PyOpcode_opcode_metadata[268];
965 #ifdef NEED_OPCODE_METADATA
966 const struct opcode_metadata _PyOpcode_opcode_metadata[268] = {
967 [BEFORE_ASYNC_WITH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
968 [BEFORE_WITH] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
969 [BINARY_OP] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
970 [BINARY_OP_ADD_FLOAT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG },
971 [BINARY_OP_ADD_INT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
972 [BINARY_OP_ADD_UNICODE] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
973 [BINARY_OP_INPLACE_ADD_UNICODE] = { true, INSTR_FMT_IXC, HAS_LOCAL_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
974 [BINARY_OP_MULTIPLY_FLOAT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG },
975 [BINARY_OP_MULTIPLY_INT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
976 [BINARY_OP_SUBTRACT_FLOAT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG },
977 [BINARY_OP_SUBTRACT_INT] = { true, INSTR_FMT_IXC, HAS_EXIT_FLAG | HAS_ERROR_FLAG },
978 [BINARY_SLICE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
979 [BINARY_SUBSCR] = { true, INSTR_FMT_IXC, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
980 [BINARY_SUBSCR_DICT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
981 [BINARY_SUBSCR_GETITEM] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG },
982 [BINARY_SUBSCR_LIST_INT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG },
983 [BINARY_SUBSCR_STR_INT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG },
984 [BINARY_SUBSCR_TUPLE_INT] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG },
985 [BUILD_CONST_KEY_MAP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
986 [BUILD_LIST] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
987 [BUILD_MAP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
988 [BUILD_SET] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
989 [BUILD_SLICE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
990 [BUILD_STRING] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
991 [BUILD_TUPLE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
992 [CACHE] = { true, INSTR_FMT_IX, 0 },
993 [CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG },
994 [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 },
995 [CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_EXIT_FLAG },
996 [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 },
997 [CALL_BUILTIN_CLASS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
998 [CALL_BUILTIN_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
999 [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 // NEED_OPCODE_METADATA
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 // NEED_OPCODE_METADATA
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 // NEED_OPCODE_METADATA
1907 static inline bool
is_pseudo_target(int pseudo,int target)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 /* !Py_CORE_OPCODE_METADATA_H */
1923