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