(root)/
Python-3.12.0/
Python/
opcode_metadata.h
       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