opcode_313.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524
  1. """
  2. CPython 3.13 bytecode opcodes
  3. """
  4. from typing import Optional, Tuple
  5. import xdis.opcodes.opcode_312 as opcode_312
  6. from xdis.opcodes.base import (
  7. def_op,
  8. finalize_opcodes,
  9. free_op,
  10. init_opdata,
  11. local_op,
  12. rm_op,
  13. update_pj3,
  14. )
  15. from xdis.opcodes.format.extended import NULL_EXTENDED_OP, get_arglist
  16. from xdis.opcodes.opcode_36pypy import format_CALL_METHOD
  17. version_tuple = (3, 13)
  18. python_implementation = "CPython"
  19. loc = locals()
  20. init_opdata(loc, opcode_312, version_tuple)
  21. # extend op tables for new pseudo ops
  22. loc["opname"].extend(["<267>"])
  23. loc["oppop"].extend([0])
  24. loc["oppush"].extend([0])
  25. # have argument changed in 3.13
  26. HAVE_ARGUMENT = 44
  27. # fmt: off
  28. ## Lots of ops changed opcodes in 3.13 so this is long...
  29. ## These are removed or replaced since 3.12...
  30. # OP NAME OPCODE
  31. #----------------------------------------------
  32. rm_op(loc, "POP_TOP" , 1)
  33. rm_op(loc, "PUSH_NULL" , 2)
  34. rm_op(loc, "INTERPRETER_EXIT" , 3)
  35. rm_op(loc, "END_FOR" , 4)
  36. rm_op(loc, "END_SEND" , 5)
  37. rm_op(loc, "NOP" , 9)
  38. rm_op(loc, "UNARY_NEGATIVE" , 11)
  39. rm_op(loc, "UNARY_NOT" , 12)
  40. rm_op(loc, "UNARY_INVERT" , 15)
  41. rm_op(loc, "BINARY_SUBSCR" , 25)
  42. rm_op(loc, "BINARY_SLICE" , 26)
  43. rm_op(loc, "STORE_SLICE" , 27)
  44. rm_op(loc, "GET_LEN" , 30)
  45. rm_op(loc, "MATCH_MAPPING" , 31)
  46. rm_op(loc, "MATCH_SEQUENCE" , 32)
  47. rm_op(loc, "MATCH_KEYS" , 33)
  48. rm_op(loc, "PUSH_EXC_INFO" , 35)
  49. rm_op(loc, "CHECK_EXC_MATCH" , 36)
  50. rm_op(loc, "CHECK_EG_MATCH" , 37)
  51. rm_op(loc, "WITH_EXCEPT_START" , 49)
  52. rm_op(loc, "GET_AITER" , 50)
  53. rm_op(loc, "GET_ANEXT" , 51)
  54. rm_op(loc, "BEFORE_ASYNC_WITH" , 52)
  55. rm_op(loc, "BEFORE_WITH" , 53)
  56. rm_op(loc, "END_ASYNC_FOR" , 54)
  57. rm_op(loc, "CLEANUP_THROW" , 55)
  58. rm_op(loc, "DELETE_SUBSCR" , 61)
  59. rm_op(loc, "GET_ITER" , 68)
  60. rm_op(loc, "GET_YIELD_FROM_ITER" , 69)
  61. rm_op(loc, "LOAD_BUILD_CLASS" , 71)
  62. rm_op(loc, "LOAD_ASSERTION_ERROR" , 74)
  63. rm_op(loc, "RETURN_GENERATOR" , 75)
  64. rm_op(loc, "RETURN_VALUE" , 83)
  65. rm_op(loc, "SETUP_ANNOTATIONS" , 85)
  66. rm_op(loc, "LOAD_LOCALS" , 87)
  67. rm_op(loc, "POP_EXCEPT" , 89)
  68. rm_op(loc, "STORE_NAME" , 90)
  69. rm_op(loc, "DELETE_NAME" , 91)
  70. rm_op(loc, "UNPACK_SEQUENCE" , 92)
  71. rm_op(loc, "FOR_ITER" , 93)
  72. rm_op(loc, "UNPACK_EX" , 94)
  73. rm_op(loc, "STORE_ATTR" , 95)
  74. rm_op(loc, "DELETE_ATTR" , 96)
  75. rm_op(loc, "STORE_GLOBAL" , 97)
  76. rm_op(loc, "DELETE_GLOBAL" , 98)
  77. rm_op(loc, "SWAP" , 99)
  78. rm_op(loc, "LOAD_CONST" , 100)
  79. rm_op(loc, "LOAD_NAME" , 101)
  80. rm_op(loc, "BUILD_TUPLE" , 102)
  81. rm_op(loc, "BUILD_LIST" , 103)
  82. rm_op(loc, "BUILD_SET" , 104)
  83. rm_op(loc, "BUILD_MAP" , 105)
  84. rm_op(loc, "COMPARE_OP" , 107)
  85. rm_op(loc, "IMPORT_NAME" , 108)
  86. rm_op(loc, "IMPORT_FROM" , 109)
  87. rm_op(loc, "JUMP_FORWARD" , 110)
  88. rm_op(loc, "POP_JUMP_IF_FALSE" , 114)
  89. rm_op(loc, "POP_JUMP_IF_TRUE" , 115)
  90. rm_op(loc, "LOAD_GLOBAL" , 116)
  91. rm_op(loc, "IS_OP" , 117)
  92. rm_op(loc, "CONTAINS_OP" , 118)
  93. rm_op(loc, "RERAISE" , 119)
  94. rm_op(loc, "COPY" , 120)
  95. rm_op(loc, "RETURN_CONST" , 121)
  96. rm_op(loc, "BINARY_OP" , 122)
  97. rm_op(loc, "SEND" , 123)
  98. rm_op(loc, "LOAD_FAST" , 124)
  99. rm_op(loc, "STORE_FAST" , 125)
  100. rm_op(loc, "DELETE_FAST" , 126)
  101. rm_op(loc, "LOAD_FAST_CHECK" , 127)
  102. rm_op(loc, "POP_JUMP_IF_NOT_NONE" , 128)
  103. rm_op(loc, "POP_JUMP_IF_NONE" , 129)
  104. rm_op(loc, "RAISE_VARARGS" , 130)
  105. rm_op(loc, "GET_AWAITABLE" , 131)
  106. rm_op(loc, "MAKE_FUNCTION" , 132)
  107. rm_op(loc, "BUILD_SLICE" , 133)
  108. rm_op(loc, "JUMP_BACKWARD_NO_INTERRUPT" , 134)
  109. rm_op(loc, "MAKE_CELL" , 135)
  110. rm_op(loc, "LOAD_DEREF" , 137)
  111. rm_op(loc, "STORE_DEREF" , 138)
  112. rm_op(loc, "DELETE_DEREF" , 139)
  113. rm_op(loc, "JUMP_BACKWARD" , 140)
  114. rm_op(loc, "LOAD_SUPER_ATTR" , 141)
  115. rm_op(loc, "CALL_FUNCTION_EX" , 142)
  116. rm_op(loc, "LOAD_FAST_AND_CLEAR" , 143)
  117. rm_op(loc, "EXTENDED_ARG" , 144)
  118. rm_op(loc, "LIST_APPEND" , 145)
  119. rm_op(loc, "SET_ADD" , 146)
  120. rm_op(loc, "MAP_ADD" , 147)
  121. rm_op(loc, "YIELD_VALUE" , 150)
  122. rm_op(loc, "RESUME" , 151)
  123. rm_op(loc, "MATCH_CLASS" , 152)
  124. rm_op(loc, "FORMAT_VALUE" , 155)
  125. rm_op(loc, "BUILD_CONST_KEY_MAP" , 156)
  126. rm_op(loc, "BUILD_STRING" , 157)
  127. rm_op(loc, "LIST_EXTEND" , 162)
  128. rm_op(loc, "SET_UPDATE" , 163)
  129. rm_op(loc, "DICT_MERGE" , 164)
  130. rm_op(loc, "DICT_UPDATE" , 165)
  131. rm_op(loc, "CALL" , 171)
  132. rm_op(loc, "KW_NAMES" , 172)
  133. rm_op(loc, "CALL_INTRINSIC_1" , 173)
  134. rm_op(loc, "CALL_INTRINSIC_2" , 174)
  135. rm_op(loc, "LOAD_FROM_DICT_OR_GLOBALS" , 175)
  136. rm_op(loc, "LOAD_FROM_DICT_OR_DEREF" , 176)
  137. rm_op(loc, "LOAD_CLOSURE" , 136) # now a psuedo-instruction replaced with LOAD_FAST
  138. rm_op(loc, "COPY_FREE_VARS" , 149)
  139. rm_op(loc, "INSTRUMENTED_LOAD_SUPER_ATTR" , 237)
  140. rm_op(loc, "INSTRUMENTED_POP_JUMP_IF_NONE" , 238)
  141. rm_op(loc, "INSTRUMENTED_POP_JUMP_IF_NOT_NONE", 239)
  142. rm_op(loc, "INSTRUMENTED_RESUME" , 240)
  143. rm_op(loc, "INSTRUMENTED_CALL" , 241)
  144. rm_op(loc, "INSTRUMENTED_RETURN_VALUE" , 242)
  145. rm_op(loc, "INSTRUMENTED_YIELD_VALUE" , 243)
  146. rm_op(loc, "INSTRUMENTED_CALL_FUNCTION_EX" , 244)
  147. rm_op(loc, "INSTRUMENTED_JUMP_FORWARD" , 245)
  148. rm_op(loc, "INSTRUMENTED_JUMP_BACKWARD" , 246)
  149. rm_op(loc, "INSTRUMENTED_RETURN_CONST" , 247)
  150. rm_op(loc, "INSTRUMENTED_FOR_ITER" , 248)
  151. rm_op(loc, "INSTRUMENTED_POP_JUMP_IF_FALSE" , 249)
  152. rm_op(loc, "INSTRUMENTED_END_FOR" , 251)
  153. rm_op(loc, "INSTRUMENTED_END_SEND" , 252)
  154. rm_op(loc, "INSTRUMENTED_INSTRUCTION" , 253)
  155. rm_op(loc, "SETUP_FINALLY" , 256)
  156. rm_op(loc, "SETUP_CLEANUP" , 257)
  157. rm_op(loc, "POP_BLOCK" , 259)
  158. rm_op(loc, "JUMP" , 260)
  159. rm_op(loc, "JUMP_NO_INTERRUPT" , 261)
  160. rm_op(loc, "LOAD_METHOD" , 262)
  161. rm_op(loc, "LOAD_SUPER_METHOD" , 263)
  162. rm_op(loc, "LOAD_ZERO_SUPER_METHOD" , 264)
  163. rm_op(loc, "LOAD_ZERO_SUPER_ATTR" , 265)
  164. rm_op(loc, "STORE_FAST_MAYBE_NULL" , 266)
  165. ## new or redefined ops
  166. # OP NAME OPCODE POP PUSH
  167. # ---------------------------------------------------------------
  168. def_op(loc, "BEFORE_ASYNC_WITH" , 1 , 0 , 1)
  169. def_op(loc, "BEFORE_WITH" , 2 , 0 , 1)
  170. def_op(loc, "BINARY_SLICE" , 4 , 2 , 0)
  171. def_op(loc, "BINARY_SUBSCR" , 5 , 2 , 1)
  172. def_op(loc, "CHECK_EG_MATCH" , 6 , 0 , 0)
  173. def_op(loc, "CHECK_EXC_MATCH" , 7 , 0 , 0)
  174. def_op(loc, "CLEANUP_THROW" , 8 , 2 , 1)
  175. def_op(loc, "DELETE_SUBSCR" , 9 , 2 , 0)
  176. def_op(loc, "END_ASYNC_FOR" , 10 , 2 , 0)
  177. def_op(loc, "END_FOR" , 11 , 1 , 0)
  178. def_op(loc, "END_SEND" , 12 , 1 , 0)
  179. def_op(loc, "EXIT_INIT_CHECK" , 13 , 1 , 0)
  180. def_op(loc, "FORMAT_WITH_SPEC" , 15 , 1 , 0)
  181. def_op(loc, "GET_AITER" , 16 , 1 , 1)
  182. def_op(loc, "GET_ANEXT" , 18 , 0 , 1)
  183. def_op(loc, "GET_ITER" , 19 , 1 , 1)
  184. def_op(loc, "GET_LEN" , 20 , 0 , 1)
  185. def_op(loc, "GET_YIELD_FROM_ITER" , 21 , 1 , 1)
  186. def_op(loc, "INTERPRETER_EXIT" , 22 , 1 , 0)
  187. def_op(loc, "LOAD_ASSERTION_ERROR" , 23 , 0 , 1)
  188. def_op(loc, "LOAD_BUILD_CLASS" , 24 , 0 , 1)
  189. def_op(loc, "LOAD_LOCALS" , 25 , 0 , 1)
  190. def_op(loc, "MAKE_FUNCTION" , 26 , -2, 1)
  191. def_op(loc, "MATCH_KEYS" , 27 , 0 , 1)
  192. def_op(loc, "MATCH_MAPPING" , 28 , 0 , 1)
  193. def_op(loc, "MATCH_SEQUENCE" , 29 , 0 , 1)
  194. def_op(loc, "NOP" , 30 , 0 , 0)
  195. def_op(loc, "POP_EXCEPT" , 31 , 1 , 0)
  196. def_op(loc, "POP_TOP" , 32 , 1 , 0)
  197. def_op(loc, "PUSH_EXC_INFO" , 33 , 0 , 1)
  198. def_op(loc, "PUSH_NULL" , 34 , 0 , 1)
  199. def_op(loc, "RETURN_GENERATOR" , 35 , 0 , 1)
  200. def_op(loc, "RETURN_VALUE" , 36 , 1 , 0)
  201. def_op(loc, "SETUP_ANNOTATIONS" , 37 , 1 , 1)
  202. def_op(loc, "STORE_SLICE" , 38 , 4 , 0)
  203. def_op(loc, "STORE_SUBSCR" , 39 , 3 , 0)
  204. def_op(loc, "UNARY_INVERT" , 41 , 1 , 1)
  205. def_op(loc, "UNARY_NEGATIVE" , 42 , 1 , 1)
  206. def_op(loc, "UNARY_NOT" , 43 , 1 , 1)
  207. def_op(loc, "WITH_EXCEPT_START" , 44 , 0 , 1)
  208. def_op(loc, "BINARY_OP" , 45 , 2 , 1)
  209. def_op(loc, "BUILD_CONST_KEY_MAP" , 46 , -2, 1)
  210. def_op(loc, "BUILD_LIST" , 47 , -1, 1)
  211. def_op(loc, "BUILD_MAP" , 48 , -1, -1)
  212. def_op(loc, "BUILD_SET" , 49 , -1, 1)
  213. def_op(loc, "BUILD_SLICE" , 50 , 2 , 1)
  214. def_op(loc, "BUILD_STRING" , 51 , -2, 2)
  215. def_op(loc, "BUILD_TUPLE" , 52 , -1, 1)
  216. def_op(loc, "CALL" , 53 , 1 , 0)
  217. def_op(loc, "CALL_FUNCTION_EX" , 54 , -2, 1)
  218. def_op(loc, "CALL_INTRINSIC_1" , 55 , 1 , 1)
  219. def_op(loc, "CALL_INTRINSIC_2" , 56 , 2 , 1)
  220. def_op(loc, "COMPARE_OP" , 58 , 2 , 1)
  221. def_op(loc, "CONTAINS_OP" , 59 , 2 , 1)
  222. def_op(loc, "COPY" , 61 , 0 , 1)
  223. def_op(loc, "COPY_FREE_VARS" , 62 , 0 , 0)
  224. def_op(loc, "DELETE_ATTR" , 63 , 1 , 0)
  225. def_op(loc, "DELETE_DEREF" , 64 , 0 , 0)
  226. def_op(loc, "DELETE_FAST" , 65 , 0 , 0)
  227. def_op(loc, "DELETE_GLOBAL" , 66 , 0 , 0)
  228. def_op(loc, "DELETE_NAME" , 67 , 0 , 0)
  229. def_op(loc, "DICT_MERGE" , 68 , 2 , 1)
  230. def_op(loc, "DICT_UPDATE" , 69 , 2 , 1)
  231. def_op(loc, "ENTER_EXECUTOR" , 70 , 0 , 0)
  232. def_op(loc, "EXTENDED_ARG" , 71 , 0 , 0)
  233. def_op(loc, "FOR_ITER" , 72 , 0 , 1)
  234. def_op(loc, "GET_AWAITABLE" , 73 , 0 , 0)
  235. def_op(loc, "IMPORT_FROM" , 74 , 0 , 1)
  236. def_op(loc, "IMPORT_NAME" , 75 , 2 , 1)
  237. def_op(loc, "IS_OP" , 76 , 2 , 1)
  238. def_op(loc, "JUMP_BACKWARD" , 77 , 0 , 0)
  239. def_op(loc, "JUMP_BACKWARD_NO_INTERRUPT" , 78 , 0 , 0)
  240. def_op(loc, "JUMP_FORWARD" , 79 , 0 , 0)
  241. def_op(loc, "LIST_APPEND" , 80 , 2 , 1)
  242. def_op(loc, "LIST_EXTEND" , 81 , 2 , 1)
  243. def_op(loc, "LOAD_ATTR" , 82 , 1 , 1)
  244. def_op(loc, "LOAD_CONST" , 83 , 0 , 1)
  245. free_op(loc, "LOAD_DEREF" , 84 , 0 , 1)
  246. def_op(loc, "LOAD_FAST" , 85 , 0 , 1)
  247. def_op(loc, "LOAD_FAST_AND_CLEAR" , 86 , 0 , 1)
  248. local_op(loc, "LOAD_FAST_CHECK" , 87 , 0 , 1)
  249. def_op(loc, "LOAD_FAST_LOAD_FAST" , 88 , 0 , 2)
  250. def_op(loc, "LOAD_FROM_DICT_OR_DEREF" , 89 , 1 , 1)
  251. def_op(loc, "LOAD_FROM_DICT_OR_GLOBALS" , 90 , 1 , 1)
  252. def_op(loc, "LOAD_GLOBAL" , 91 , 0 , 1)
  253. def_op(loc, "LOAD_NAME" , 92 , 0 , 1)
  254. def_op(loc, "LOAD_SUPER_ATTR" , 93 , 3 , 1)
  255. free_op(loc, "MAKE_CELL" , 94 , 0 , 0)
  256. def_op(loc, "MAP_ADD" , 95 , 3 , 1)
  257. def_op(loc, "MATCH_CLASS" , 96 , 3 , 1)
  258. def_op(loc, "POP_JUMP_IF_FALSE" , 97 , 1 , 0)
  259. def_op(loc, "POP_JUMP_IF_NONE" , 98 , 1 , 0)
  260. def_op(loc, "POP_JUMP_IF_NOT_NONE" , 99 , 1 , 0)
  261. def_op(loc, "POP_JUMP_IF_TRUE" , 100 , 1 , 0)
  262. def_op(loc, "RAISE_VARARGS" , 101 , -1, 1)
  263. def_op(loc, "RERAISE" , 102 , 1 , 0)
  264. def_op(loc, "RETURN_CONST" , 103 , 0 , 0)
  265. def_op(loc, "SEND" , 104 , 0 , 0)
  266. def_op(loc, "SET_ADD" , 105 , 1 , 0)
  267. def_op(loc, "SET_UPDATE" , 107 , 2 , 1)
  268. def_op(loc, "STORE_ATTR" , 108 , 2 , 0)
  269. def_op(loc, "STORE_DEREF" , 109 , 1 , 0)
  270. def_op(loc, "STORE_FAST" , 110 , 1 , 0)
  271. def_op(loc, "STORE_FAST_LOAD_FAST" , 111 , 1 , 1)
  272. def_op(loc, "STORE_FAST_STORE_FAST" , 112 , 2 , 0)
  273. def_op(loc, "STORE_GLOBAL" , 113 , 1 , 0)
  274. def_op(loc, "STORE_NAME" , 114 , 1 , 0)
  275. def_op(loc, "SWAP" , 115 , 0 , 0)
  276. def_op(loc, "UNPACK_EX" , 116 , 0 , 0)
  277. def_op(loc, "UNPACK_SEQUENCE" , 117 , 0 , -1)
  278. def_op(loc, "YIELD_VALUE" , 118 , 1 , 1)
  279. def_op(loc, "RESUME" , 149 , 0 , 0)
  280. def_op(loc, "INSTRUMENTED_RESUME" , 236 , 1 , 1)
  281. def_op(loc, "INSTRUMENTED_END_FOR" , 237 , 2 , 1)
  282. def_op(loc, "INSTRUMENTED_END_SEND" , 238 , 1 , 0)
  283. def_op(loc, "INSTRUMENTED_RETURN_VALUE" , 239 , 1 , 0)
  284. def_op(loc, "INSTRUMENTED_RETURN_CONST" , 240 , 1 , 1)
  285. def_op(loc, "INSTRUMENTED_YIELD_VALUE" , 241 , 1 , 1)
  286. def_op(loc, "INSTRUMENTED_LOAD_SUPER_ATTR" , 242 , 2 , 0)
  287. def_op(loc, "INSTRUMENTED_FOR_ITER" , 243 , 1 , 1)
  288. def_op(loc, "INSTRUMENTED_CALL" , 244 , 1 , 1)
  289. def_op(loc, "INSTRUMENTED_CALL_KW" , 245 , 2 , 2)
  290. def_op(loc, "INSTRUMENTED_CALL_FUNCTION_EX" , 246 , 1 , 1)
  291. def_op(loc, "INSTRUMENTED_INSTRUCTION" , 247 , 1 , 1)
  292. def_op(loc, "INSTRUMENTED_JUMP_FORWARD" , 248 , 1 , 1)
  293. def_op(loc, "INSTRUMENTED_JUMP_BACKWARD" , 249 , 1 , 1)
  294. def_op(loc, "INSTRUMENTED_POP_JUMP_IF_FALSE" , 251 , 1 , 1)
  295. def_op(loc, "INSTRUMENTED_POP_JUMP_IF_NONE" , 252 , 1 , 1)
  296. def_op(loc, "INSTRUMENTED_POP_JUMP_IF_NOT_NONE", 253 , 1 , 1)
  297. def_op(loc, "JUMP" , 256 , 0 , 0)
  298. def_op(loc, "JUMP_NO_INTERRUPT" , 257 , 0 , 0)
  299. def_op(loc, "LOAD_CLOSURE" , 258 , 0 , 1)
  300. def_op(loc, "LOAD_METHOD" , 259 , 0 , 1)
  301. def_op(loc, "LOAD_SUPER_METHOD" , 260 , 1 , 0)
  302. def_op(loc, "LOAD_ZERO_SUPER_ATTR" , 261 , 1 , 0)
  303. def_op(loc, "LOAD_ZERO_SUPER_METHOD" , 262 , 1 , 0)
  304. def_op(loc, "POP_BLOCK" , 263 , 1 , 1)
  305. def_op(loc, "SETUP_CLEANUP" , 264 , 0 , 2)
  306. def_op(loc, "SETUP_FINALLY" , 265 , 0 , 1)
  307. def_op(loc, "SETUP_WITH" , 266 , 0 , 1)
  308. def_op(loc, "STORE_FAST_MAYBE_NULL" , 267 , 1 , 0)
  309. ## These are new since 3.12...
  310. # OP NAME OPCODE POP PUSH
  311. # ---------------------------------------------------------------
  312. def_op(loc, "FORMAT_SIMPLE" , 14 , 1 , 1)
  313. def_op(loc, "TO_BOOL" , 40 , 0 , 0)
  314. def_op(loc, "CALL_KW" , 57 , -2, 1)
  315. def_op(loc, "CONVERT_VALUE" , 60 , 1 , 1)
  316. def_op(loc, "SET_FUNCTION_ATTRIBUTE", 106, 2 , 1)
  317. # fmt: on
  318. ### update opinfo tables
  319. # completely redefined tables
  320. loc["hasarg"] = [
  321. 45,
  322. 46,
  323. 47,
  324. 48,
  325. 49,
  326. 50,
  327. 51,
  328. 52,
  329. 53,
  330. 54,
  331. 55,
  332. 56,
  333. 57,
  334. 58,
  335. 59,
  336. 60,
  337. 61,
  338. 62,
  339. 63,
  340. 64,
  341. 65,
  342. 66,
  343. 67,
  344. 68,
  345. 69,
  346. 70,
  347. 71,
  348. 72,
  349. 73,
  350. 74,
  351. 75,
  352. 76,
  353. 77,
  354. 78,
  355. 79,
  356. 80,
  357. 81,
  358. 82,
  359. 83,
  360. 84,
  361. 85,
  362. 86,
  363. 87,
  364. 88,
  365. 89,
  366. 90,
  367. 91,
  368. 92,
  369. 93,
  370. 94,
  371. 95,
  372. 96,
  373. 97,
  374. 98,
  375. 99,
  376. 100,
  377. 101,
  378. 102,
  379. 103,
  380. 104,
  381. 105,
  382. 106,
  383. 107,
  384. 108,
  385. 109,
  386. 110,
  387. 111,
  388. 112,
  389. 113,
  390. 114,
  391. 115,
  392. 116,
  393. 117,
  394. 118,
  395. 149,
  396. 236,
  397. 240,
  398. 241,
  399. 242,
  400. 243,
  401. 244,
  402. 245,
  403. 248,
  404. 249,
  405. 250,
  406. 251,
  407. 252,
  408. 253,
  409. 256,
  410. 257,
  411. 258,
  412. 259,
  413. 260,
  414. 261,
  415. 262,
  416. 264,
  417. 265,
  418. 266,
  419. 267,
  420. ]
  421. loc["hascompare"] = [58]
  422. loc["hasconst"] = [83, 103, 240]
  423. loc["haslocal"] = [65, 85, 86, 87, 88, 110, 111, 112, 258, 267]
  424. loc["hasname"] = [
  425. 63,
  426. 66,
  427. 67,
  428. 74,
  429. 75,
  430. 82,
  431. 90,
  432. 91,
  433. 92,
  434. 93,
  435. 108,
  436. 113,
  437. 114,
  438. 259,
  439. 260,
  440. 261,
  441. 262,
  442. ]
  443. loc["hasfree"] = [64, 84, 89, 94, 109]
  444. # add new table "hasjump"
  445. loc.update({"hasjump": [72, 77, 78, 79, 97, 98, 99, 100, 104, 256, 257]})
  446. loc["hasjrel"] = loc["hasjump"]
  447. def extended_format_CALL(opc, instructions) -> Tuple[str, Optional[int]]:
  448. """call_method should be a "CALL_METHOD" instruction. Look in
  449. `instructions` to see if we can find a method name. If not we'll
  450. return None.
  451. """
  452. # From opcode description: arg_count indicates the total number of
  453. # positional and keyword arguments.
  454. call_method_inst = instructions[0]
  455. arg_count = call_method_inst.argval
  456. s = ""
  457. arglist, arg_count, first_arg = get_arglist(instructions, 0, arg_count)
  458. if arglist is None:
  459. arglist = []
  460. if first_arg is None or first_arg >= len(instructions) - 1:
  461. return NULL_EXTENDED_OP
  462. fn_inst = instructions[first_arg + 1]
  463. if fn_inst.opcode in opc.operator_set and arglist is not None:
  464. start_offset = fn_inst.offset
  465. if fn_inst.opname == "PUSH_NULL":
  466. fn_inst = instructions[first_arg + 2]
  467. if fn_inst.opname in ("LOAD_NAME",):
  468. start_offset = fn_inst.offset
  469. fn_name = fn_inst.tos_str if fn_inst.tos_str else fn_inst.argrepr
  470. arglist.reverse()
  471. s = f'{fn_name}({", ".join(arglist)})'
  472. return s, start_offset
  473. return NULL_EXTENDED_OP
  474. ### update formatting
  475. opcode_arg_fmt = opcode_arg_fmt313 = {
  476. **opcode_312.opcode_arg_fmt312,
  477. **{"CALL": format_CALL_METHOD},
  478. }
  479. opcode_extended_fmt = opcode_extended_fmt313 = {
  480. **opcode_312.opcode_extended_fmt312,
  481. **{"CALL": extended_format_CALL},
  482. }
  483. for fmt_table in (opcode_arg_fmt313, opcode_extended_fmt313):
  484. fmt_table.pop("MAKE_FUNCTION") # MAKE_FUNCTION formatting not in 3.13
  485. # update any calls to findlinestarts to include the version tuple
  486. def findlinestarts_313(code, dup_lines: bool = False):
  487. lastline = False # None is a valid line number
  488. for start, _, line in code.co_lines():
  489. if line is not lastline:
  490. lastline = line
  491. yield start, line
  492. findlinestarts = findlinestarts_313
  493. update_pj3(globals(), loc)
  494. finalize_opcodes(loc)