diff --git a/pytest/test_disasm.py b/pytest/test_disasm.py index 92a47bdb..a771188a 100644 --- a/pytest/test_disasm.py +++ b/pytest/test_disasm.py @@ -98,7 +98,7 @@ def run_check_disasm(test_tuple, function_to_test): [ ("01_fstring", "3.6", ["classic", "xasm"]), # ("01_fstring", "3.10"), # FIXME - ("04_pypy_lambda", "2.7PyPy", ["classic", "xasm"]), + ("04_pypy_lambda", "2.7pypy", ["classic", "xasm"]), ("03_big_dict", "2.7", ["classic", "xasm"]), ("03_big_dict", "3.3", ["classic", "xasm"]), ("03_big_dict", "3.5", ["classic", "xasm"]), diff --git a/pytest/testdata/04_pypy_lambda-2.7PyPy.right b/pytest/testdata/04_pypy_lambda-2.7pypy.right similarity index 100% rename from pytest/testdata/04_pypy_lambda-2.7PyPy.right rename to pytest/testdata/04_pypy_lambda-2.7pypy.right diff --git a/pytest/testdata/04_pypy_lambda-xasm-2.7PyPy.right b/pytest/testdata/04_pypy_lambda-xasm-2.7pypy.right similarity index 100% rename from pytest/testdata/04_pypy_lambda-xasm-2.7PyPy.right rename to pytest/testdata/04_pypy_lambda-xasm-2.7pypy.right diff --git a/pytest/testdata/multi-fn-2.7.pyc b/pytest/testdata/multi-fn-2.7.pyc deleted file mode 100644 index f8f132ed..00000000 Binary files a/pytest/testdata/multi-fn-2.7.pyc and /dev/null differ diff --git a/pytest/testdata/multi-fn-3.6.pyc b/pytest/testdata/multi-fn-3.6.pyc deleted file mode 100644 index b1d0a4e9..00000000 Binary files a/pytest/testdata/multi-fn-3.6.pyc and /dev/null differ diff --git a/test/Makefile b/test/Makefile index ddc842c2..3a2e0ba9 100644 --- a/test/Makefile +++ b/test/Makefile @@ -23,6 +23,7 @@ check: check-short check-roundtrip --bytecode-3.6 --bytecode-3.7 --bytecode-3.8 \ --bytecode-3.9 --bytecode-3.10 \ --bytecode-3.11 --bytecode-3.12 --bytecode-3.13 \ + --bytecode-3.14 \ --bytecode-2.7pypy --bytecode-3.2pypy \ --bytecode-pypy35 --bytecode-pypy36 --bytecode-pypy37 \ --bytecode-pypy38 --bytecode-pypy39 --bytecode-pypy310 \ diff --git a/test/bytecode_2.7PyPy/01_unicode.pyc b/test/bytecode_2.7pypy/01_unicode.pyc similarity index 100% rename from test/bytecode_2.7PyPy/01_unicode.pyc rename to test/bytecode_2.7pypy/01_unicode.pyc diff --git a/test/bytecode_2.7PyPy/02_complex.pyc b/test/bytecode_2.7pypy/02_complex.pyc similarity index 100% rename from test/bytecode_2.7PyPy/02_complex.pyc rename to test/bytecode_2.7pypy/02_complex.pyc diff --git a/test/bytecode_2.7PyPy/04_pypy_lambda.pyc b/test/bytecode_2.7pypy/04_pypy_lambda.pyc similarity index 100% rename from test/bytecode_2.7PyPy/04_pypy_lambda.pyc rename to test/bytecode_2.7pypy/04_pypy_lambda.pyc diff --git a/test/bytecode_2.7PyPy/05_24_float.pyc b/test/bytecode_2.7pypy/05_24_float.pyc similarity index 100% rename from test/bytecode_2.7PyPy/05_24_float.pyc rename to test/bytecode_2.7pypy/05_24_float.pyc diff --git a/test/bytecode_3.14/00_chained-compare.pyc b/test/bytecode_3.14/00_chained-compare.pyc new file mode 100644 index 00000000..1d0e9c89 Binary files /dev/null and b/test/bytecode_3.14/00_chained-compare.pyc differ diff --git a/test/bytecode_3.14/00_if_elif.pyc b/test/bytecode_3.14/00_if_elif.pyc new file mode 100644 index 00000000..c81ed8d3 Binary files /dev/null and b/test/bytecode_3.14/00_if_elif.pyc differ diff --git a/test/bytecode_3.14/00_return_return_bug.pyc b/test/bytecode_3.14/00_return_return_bug.pyc new file mode 100644 index 00000000..84961c95 Binary files /dev/null and b/test/bytecode_3.14/00_return_return_bug.pyc differ diff --git a/test/bytecode_3.14/01_and_not_else.pyc b/test/bytecode_3.14/01_and_not_else.pyc new file mode 100644 index 00000000..c9a86620 Binary files /dev/null and b/test/bytecode_3.14/01_and_not_else.pyc differ diff --git a/test/bytecode_3.14/01_assert2.pyc b/test/bytecode_3.14/01_assert2.pyc new file mode 100644 index 00000000..77f68b88 Binary files /dev/null and b/test/bytecode_3.14/01_assert2.pyc differ diff --git a/test/bytecode_3.14/01_call_function.pyc b/test/bytecode_3.14/01_call_function.pyc new file mode 100644 index 00000000..c9dad1be Binary files /dev/null and b/test/bytecode_3.14/01_call_function.pyc differ diff --git a/test/bytecode_3.14/01_chained_compare.pyc b/test/bytecode_3.14/01_chained_compare.pyc new file mode 100644 index 00000000..a6fa9c5f Binary files /dev/null and b/test/bytecode_3.14/01_chained_compare.pyc differ diff --git a/test/bytecode_3.14/01_comprehension.pyc b/test/bytecode_3.14/01_comprehension.pyc new file mode 100644 index 00000000..8a9bebf6 Binary files /dev/null and b/test/bytecode_3.14/01_comprehension.pyc differ diff --git a/test/bytecode_3.14/01_conditional.pyc b/test/bytecode_3.14/01_conditional.pyc new file mode 100644 index 00000000..23f077fe Binary files /dev/null and b/test/bytecode_3.14/01_conditional.pyc differ diff --git a/test/bytecode_3.14/01_delete_deref.pyc b/test/bytecode_3.14/01_delete_deref.pyc new file mode 100644 index 00000000..14b97102 Binary files /dev/null and b/test/bytecode_3.14/01_delete_deref.pyc differ diff --git a/test/bytecode_3.14/01_extended_arg.pyc b/test/bytecode_3.14/01_extended_arg.pyc new file mode 100644 index 00000000..8240b551 Binary files /dev/null and b/test/bytecode_3.14/01_extended_arg.pyc differ diff --git a/test/bytecode_3.14/01_extra_iter.pyc b/test/bytecode_3.14/01_extra_iter.pyc new file mode 100644 index 00000000..d422c07f Binary files /dev/null and b/test/bytecode_3.14/01_extra_iter.pyc differ diff --git a/test/bytecode_3.14/01_for_continue.pyc b/test/bytecode_3.14/01_for_continue.pyc new file mode 100644 index 00000000..435e2ca4 Binary files /dev/null and b/test/bytecode_3.14/01_for_continue.pyc differ diff --git a/test/bytecode_3.14/01_if_and_if_bug.pyc b/test/bytecode_3.14/01_if_and_if_bug.pyc new file mode 100644 index 00000000..5480d29b Binary files /dev/null and b/test/bytecode_3.14/01_if_and_if_bug.pyc differ diff --git a/test/bytecode_3.14/01_if_try_except.pyc b/test/bytecode_3.14/01_if_try_except.pyc new file mode 100644 index 00000000..a2905a66 Binary files /dev/null and b/test/bytecode_3.14/01_if_try_except.pyc differ diff --git a/test/bytecode_3.14/01_loop_if_continue.pyc b/test/bytecode_3.14/01_loop_if_continue.pyc new file mode 100644 index 00000000..595beecd Binary files /dev/null and b/test/bytecode_3.14/01_loop_if_continue.pyc differ diff --git a/test/bytecode_3.14/01_map_unpack.pyc b/test/bytecode_3.14/01_map_unpack.pyc new file mode 100644 index 00000000..be9bba90 Binary files /dev/null and b/test/bytecode_3.14/01_map_unpack.pyc differ diff --git a/test/bytecode_3.14/01_matrix_multiply.pyc b/test/bytecode_3.14/01_matrix_multiply.pyc new file mode 100644 index 00000000..e64afc70 Binary files /dev/null and b/test/bytecode_3.14/01_matrix_multiply.pyc differ diff --git a/test/bytecode_3.14/01_named_expr.pyc b/test/bytecode_3.14/01_named_expr.pyc new file mode 100644 index 00000000..8ea15fb1 Binary files /dev/null and b/test/bytecode_3.14/01_named_expr.pyc differ diff --git a/test/bytecode_3.14/01_ops.pyc b/test/bytecode_3.14/01_ops.pyc new file mode 100644 index 00000000..1dea35df Binary files /dev/null and b/test/bytecode_3.14/01_ops.pyc differ diff --git a/test/bytecode_3.14/01_triple_compare.pyc b/test/bytecode_3.14/01_triple_compare.pyc new file mode 100644 index 00000000..e007cba8 Binary files /dev/null and b/test/bytecode_3.14/01_triple_compare.pyc differ diff --git a/test/bytecode_3.14/01_try_else.pyc b/test/bytecode_3.14/01_try_else.pyc new file mode 100644 index 00000000..0a1cba8e Binary files /dev/null and b/test/bytecode_3.14/01_try_else.pyc differ diff --git a/test/bytecode_3.14/01_try_except.pyc b/test/bytecode_3.14/01_try_except.pyc new file mode 100644 index 00000000..fa51e767 Binary files /dev/null and b/test/bytecode_3.14/01_try_except.pyc differ diff --git a/test/bytecode_3.14/01_while_if_then.pyc b/test/bytecode_3.14/01_while_if_then.pyc new file mode 100644 index 00000000..08fce194 Binary files /dev/null and b/test/bytecode_3.14/01_while_if_then.pyc differ diff --git a/test/bytecode_3.14/02_and_or.pyc b/test/bytecode_3.14/02_and_or.pyc new file mode 100644 index 00000000..67a9c31e Binary files /dev/null and b/test/bytecode_3.14/02_and_or.pyc differ diff --git a/test/bytecode_3.14/02_async.pyc b/test/bytecode_3.14/02_async.pyc new file mode 100644 index 00000000..b1909f0b Binary files /dev/null and b/test/bytecode_3.14/02_async.pyc differ diff --git a/test/bytecode_3.14/02_async_for_generator.pyc b/test/bytecode_3.14/02_async_for_generator.pyc new file mode 100644 index 00000000..a50aeef2 Binary files /dev/null and b/test/bytecode_3.14/02_async_for_generator.pyc differ diff --git a/test/bytecode_3.14/02_build_list_unpack.pyc b/test/bytecode_3.14/02_build_list_unpack.pyc new file mode 100644 index 00000000..6eee2626 Binary files /dev/null and b/test/bytecode_3.14/02_build_list_unpack.pyc differ diff --git a/test/bytecode_3.14/02_build_map_unpack_with_call.pyc b/test/bytecode_3.14/02_build_map_unpack_with_call.pyc new file mode 100644 index 00000000..0197ec39 Binary files /dev/null and b/test/bytecode_3.14/02_build_map_unpack_with_call.pyc differ diff --git a/test/bytecode_3.14/02_call_ex_kw.pyc b/test/bytecode_3.14/02_call_ex_kw.pyc new file mode 100644 index 00000000..e39a723c Binary files /dev/null and b/test/bytecode_3.14/02_call_ex_kw.pyc differ diff --git a/test/bytecode_3.14/02_fn_varargs.pyc b/test/bytecode_3.14/02_fn_varargs.pyc new file mode 100644 index 00000000..d7429a0d Binary files /dev/null and b/test/bytecode_3.14/02_fn_varargs.pyc differ diff --git a/test/bytecode_3.14/02_genexpr.pyc b/test/bytecode_3.14/02_genexpr.pyc new file mode 100644 index 00000000..edbad4a2 Binary files /dev/null and b/test/bytecode_3.14/02_genexpr.pyc differ diff --git a/test/bytecode_3.14/02_if_not_or.pyc b/test/bytecode_3.14/02_if_not_or.pyc new file mode 100644 index 00000000..97e9a714 Binary files /dev/null and b/test/bytecode_3.14/02_if_not_or.pyc differ diff --git a/test/bytecode_3.14/02_ifelse_comprehension.pyc b/test/bytecode_3.14/02_ifelse_comprehension.pyc new file mode 100644 index 00000000..a05d5505 Binary files /dev/null and b/test/bytecode_3.14/02_ifelse_comprehension.pyc differ diff --git a/test/bytecode_3.14/02_kwargs.pyc b/test/bytecode_3.14/02_kwargs.pyc new file mode 100644 index 00000000..ffd4c960 Binary files /dev/null and b/test/bytecode_3.14/02_kwargs.pyc differ diff --git a/test/bytecode_3.14/02_named_and_kwargs.pyc b/test/bytecode_3.14/02_named_and_kwargs.pyc new file mode 100644 index 00000000..a39f11df Binary files /dev/null and b/test/bytecode_3.14/02_named_and_kwargs.pyc differ diff --git a/test/bytecode_3.14/02_pos_args.pyc b/test/bytecode_3.14/02_pos_args.pyc new file mode 100644 index 00000000..0634aa1f Binary files /dev/null and b/test/bytecode_3.14/02_pos_args.pyc differ diff --git a/test/bytecode_3.14/10_argparse.pyc b/test/bytecode_3.14/10_argparse.pyc new file mode 100644 index 00000000..9d76651b Binary files /dev/null and b/test/bytecode_3.14/10_argparse.pyc differ diff --git a/test/bytecode_3.14/10_async.pyc b/test/bytecode_3.14/10_async.pyc new file mode 100644 index 00000000..e4aefbdd Binary files /dev/null and b/test/bytecode_3.14/10_async.pyc differ diff --git a/test/bytecode_3.14/10_complex.pyc b/test/bytecode_3.14/10_complex.pyc new file mode 100644 index 00000000..e9ee7c40 Binary files /dev/null and b/test/bytecode_3.14/10_complex.pyc differ diff --git a/test/bytecode_3.14/10_extended_arg_loop.pyc b/test/bytecode_3.14/10_extended_arg_loop.pyc new file mode 100644 index 00000000..7db444a7 Binary files /dev/null and b/test/bytecode_3.14/10_extended_arg_loop.pyc differ diff --git a/test/bytecode_3.14/10_fstring.pyc b/test/bytecode_3.14/10_fstring.pyc new file mode 100644 index 00000000..1e5a7b23 Binary files /dev/null and b/test/bytecode_3.14/10_fstring.pyc differ diff --git a/test/bytecode_3.14/10_long_pop_jump.pyc b/test/bytecode_3.14/10_long_pop_jump.pyc new file mode 100644 index 00000000..7758413c Binary files /dev/null and b/test/bytecode_3.14/10_long_pop_jump.pyc differ diff --git a/test/test_pythonlib.py b/test/test_pythonlib.py index 03394bb5..05476b1e 100755 --- a/test/test_pythonlib.py +++ b/test/test_pythonlib.py @@ -109,6 +109,7 @@ def get_srcdir(): "3.11", "3.12", "3.13", + "3.14", ): bytecode = f"bytecode_{vers}" key = f"bytecode-{vers}" @@ -129,6 +130,7 @@ def get_srcdir(): (311, 3.11), (312, 3.12), (313, 3.13), + (314, 3.14), ): bytecode = f"bytecode_pypy{vers}" key = f"bytecode-pypy{vers}" diff --git a/xdis/cross_dis.py b/xdis/cross_dis.py index 1a5675dd..82cb38e0 100644 --- a/xdis/cross_dis.py +++ b/xdis/cross_dis.py @@ -44,13 +44,9 @@ def _try_compile(source: str, name: str) -> CodeType: return c -def code_info( - x, version_tuple: Tuple[int, ...], python_implementation: PythonImplementation -) -> str: +def code_info(x, version_tuple: Tuple[int, ...], python_implementation: PythonImplementation) -> str: """Formatted details of methods, functions, or code.""" - return format_code_info( - get_code_object(x), version_tuple, python_implementation=python_implementation - ) + return format_code_info(get_code_object(x), version_tuple, python_implementation=python_implementation) def get_code_object(x): @@ -324,9 +320,7 @@ def format_code_info( pass if version_tuple >= (1, 3): - lines.append( - "# Flags: %s" % pretty_flags(co.co_flags, python_implementation) - ) + lines.append("# Flags: %s" % pretty_flags(co.co_flags, python_implementation)) if version_tuple >= (1, 5): lines.append("# First Line: %s" % co.co_firstlineno) @@ -379,9 +373,7 @@ def format_exception_table(bytecode, version_tuple) -> str: for entry in bytecode.exception_entries: lasti = " lasti" if entry.lasti else "" end = entry.end - 2 - lines.append( - f" {entry.start} to {end} -> {entry.target} [{entry.depth}]{lasti}" - ) + lines.append(f" {entry.start} to {end} -> {entry.target} [{entry.depth}]{lasti}") return "\n".join(lines) @@ -422,11 +414,7 @@ def unpack_opargs_bytecode(code, opc): offset += 1 if op_has_argument(op, opc): arg = code2num(code, offset) | extended_arg - extended_arg = ( - extended_arg_val(opc, arg) - if hasattr(opc, "EXTENDED_ARG") and op == opc.EXTENDED_ARG - else 0 - ) + extended_arg = extended_arg_val(opc, arg) if hasattr(opc, "EXTENDED_ARG") and op == opc.EXTENDED_ARG else 0 offset += 2 else: arg = None diff --git a/xdis/magics.py b/xdis/magics.py index b62f08c3..ee3f5baf 100755 --- a/xdis/magics.py +++ b/xdis/magics.py @@ -845,12 +845,12 @@ def add_canonic_versions(release_versions: str, canonic: str) -> None: ) add_canonic_versions( - "3.13 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.13.5 3.13.6 3.13.7 3.13.8 3.13.9 3.13.10", + "3.13 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.13.5 3.13.6 3.13.7 3.13.8 3.13.9 3.13.10 3.13.11", "3.13.0rc3", ) add_canonic_versions("3.14-dev", "3.14b3") -add_canonic_versions("3.14 3.14.0", "3.14rc3") +add_canonic_versions("3.14 3.14.0 3.14.1, 3.14.2", "3.14rc3") add_canonic_versions( "3.15 3.15.0 3.15.0a1 3.15.0a0", diff --git a/xdis/opcodes/opcode_314.py b/xdis/opcodes/opcode_314.py index 3d0078eb..ae2f74fe 100644 --- a/xdis/opcodes/opcode_314.py +++ b/xdis/opcodes/opcode_314.py @@ -2,25 +2,23 @@ CPython 3.14 bytecode opcodes """ -from xdis.opcodes.base import ( - cpython_implementation as python_implementation, - init_opdata, +from xdis.opcodes.base import ( # noqa binary_op, call_op, compare_op, const_op, + cpython_implementation as python_implementation, def_op, + finalize_opcodes, free_op, - jabs_op, + init_opdata, jrel_op, local_op, name_op, - nargs_op, store_op, unary_op, - varargs_op, update_pj3, - finalize_opcodes, + varargs_op, ) version_tuple = (3, 14) @@ -34,260 +32,263 @@ loc["oppop"].extend([0] * 11) loc["oppush"].extend([0] * 11) +# fmt: off # OP NAME OPCODE POP PUSH # --------------------------------------------------------------------------- -def_op(loc, "CACHE", 0, 0, 0) -def_op(loc, "BINARY_SLICE", 1, 3, 1) -def_op(loc, "BUILD_TEMPLATE", 2, 2, 1) -local_op(loc, "BINARY_OP_INPLACE_ADD_UNICODE", 3, 2, 0) -def_op(loc, "CALL_FUNCTION_EX", 4, 4, 1) -def_op(loc, "CHECK_EG_MATCH", 5, 2, 2) -def_op(loc, "CHECK_EXC_MATCH", 6, 2, 2) -def_op(loc, "CLEANUP_THROW", 7, 3, 2) -def_op(loc, "DELETE_SUBSCR", 8, 2, 0) -def_op(loc, "END_FOR", 9, 1, 0) -def_op(loc, "END_SEND", 10, 2, 1) -def_op(loc, "EXIT_INIT_CHECK", 11, 1, 0) -def_op(loc, "FORMAT_SIMPLE", 12, 1, 1) -def_op(loc, "FORMAT_WITH_SPEC", 13, 2, 1) -def_op(loc, "GET_AITER", 14, 1, 1) -def_op(loc, "GET_ANEXT", 15, 1, 2) -def_op(loc, "GET_ITER", 16, 1, 2) -def_op(loc, "RESERVED", 17, 0, 0) -def_op(loc, "GET_LEN", 18, 1, 2) -def_op(loc, "GET_YIELD_FROM_ITER", 19, 1, 1) -def_op(loc, "INTERPRETER_EXIT", 20, 1, 0) -def_op(loc, "LOAD_BUILD_CLASS", 21, 0, 1) -def_op(loc, "LOAD_LOCALS", 22, 0, 1) -def_op(loc, "MAKE_FUNCTION", 23, 1, 1) -def_op(loc, "MATCH_KEYS", 24, 2, 3) -def_op(loc, "MATCH_MAPPING", 25, 1, 2) -def_op(loc, "MATCH_SEQUENCE", 26, 1, 2) -def_op(loc, "NOP", 27, 0, 0) -def_op(loc, "NOT_TAKEN", 28, 0, 0) -def_op(loc, "POP_EXCEPT", 29, 1, 0) -def_op(loc, "POP_ITER", 30, 2, 0) -def_op(loc, "POP_TOP", 31, 1, 0) -def_op(loc, "PUSH_EXC_INFO", 32, 1, 2) -def_op(loc, "PUSH_NULL", 33, 0, 1) -def_op(loc, "RETURN_GENERATOR", 34, 0, 1) -def_op(loc, "RETURN_VALUE", 35, 1, 1) -def_op(loc, "SETUP_ANNOTATIONS", 36, 0, 0) -store_op(loc, "STORE_SLICE", 37, 4, 0) -store_op(loc, "STORE_SUBSCR", 38, 3, 0) -unary_op(loc, "TO_BOOL", 39, 1, 1) -unary_op(loc, "UNARY_INVERT", 40, 1, 1) -unary_op(loc, "UNARY_NEGATIVE", 41, 1, 1) -unary_op(loc, "UNARY_NOT", 42, 1, 1) -def_op(loc, "WITH_EXCEPT_START", 43, 5, 6) -binary_op(loc, "BINARY_OP", 44, 2, 1) -def_op(loc, "BUILD_INTERPOLATION", 45, 2, 1) # pops 2 + (oparg & 1) -varargs_op(loc, "BUILD_LIST", 46, -1, 1) # TOS is count of list items -varargs_op(loc, "BUILD_MAP", 47, 0, 1) # argument is dictionary count to be popped -varargs_op(loc, "BUILD_SET", 48, -1, 1) # TOS is count of set items -varargs_op(loc, "BUILD_SLICE", 49, -1, 1) # TOS is slice -varargs_op(loc, "BUILD_STRING", 50, -1, 1) # TOS is concatenated strings -varargs_op(loc, "BUILD_TUPLE", 51, -1, 1) # TOS is count of tuple items -call_op(loc, "CALL", 52, -2, 1) # pops 2 + oparg; TOS is return value -def_op(loc, "CALL_INTRINSIC_1", 53, 1, 1) -def_op(loc, "CALL_INTRINSIC_2", 54, 2, 1) -call_op(loc, "CALL_KW", 55, -3, 1) # pops 3 + oparg; TOS is return value -compare_op(loc, "COMPARE_OP", 56, 2, 1) -binary_op(loc, "CONTAINS_OP", 57, 2, 1) -def_op(loc, "CONVERT_VALUE", 58, 1, 1) -def_op(loc, "COPY", 59, 0, 1) -def_op(loc, "COPY_FREE_VARS", 60, 0, 0) -name_op(loc, "DELETE_ATTR", 61, 1, 0) -free_op(loc, "DELETE_DEREF", 62, 0, 0) -local_op(loc, "DELETE_FAST", 63, 0, 0) -name_op(loc, "DELETE_GLOBAL", 64, 0, 0) -name_op(loc, "DELETE_NAME", 65, 0, 0) -def_op(loc, "DICT_MERGE", 66, 1, 0) -def_op(loc, "DICT_UPDATE", 67, 1, 0) -jrel_op(loc, "END_ASYNC_FOR", 68, 2, 0, conditional=True) -def_op(loc, "EXTENDED_ARG", 69, 0, 0) -jrel_op(loc, "FOR_ITER", 70, 0, 1, conditional=True) -def_op(loc, "GET_AWAITABLE", 71, 1, 1) -name_op(loc, "IMPORT_FROM", 72, 1, 2) -name_op(loc, "IMPORT_NAME", 73, 2, 1) -compare_op(loc, "IS_OP", 74, 2, 1) -jrel_op(loc, "JUMP_BACKWARD", 75, 0, 0, conditional=False) -jrel_op(loc, "JUMP_BACKWARD_NO_INTERRUPT", 76, 0, 0, conditional=False) -jrel_op(loc, "JUMP_FORWARD", 77, 0, 0, conditional=False) -def_op(loc, "LIST_APPEND", 78, 1, 0) -def_op(loc, "LIST_EXTEND", 79, 1, 0) -name_op(loc, "LOAD_ATTR", 80, 1, 1) # pops 1 + (oparg & 1) -def_op(loc, "LOAD_COMMON_CONSTANT", 81, 0, 1) -const_op(loc, "LOAD_CONST", 82, 0, 1) -local_op(loc, "LOAD_DEREF", 83, 0, 1) -local_op(loc, "LOAD_FAST", 84, 0, 1) -local_op(loc, "LOAD_FAST_AND_CLEAR", 85, 0, 1) -local_op(loc, "LOAD_FAST_BORROW", 86, 0, 1) -local_op(loc, "LOAD_FAST_BORROW_LOAD_FAST_BORROW", 87, 0, 2) -local_op(loc, "LOAD_FAST_CHECK", 88, 0, 1) -local_op(loc, "LOAD_FAST_LOAD_FAST", 89, 0, 2) -free_op(loc, "LOAD_FROM_DICT_OR_DEREF", 90, 1, 1) -name_op(loc, "LOAD_FROM_DICT_OR_GLOBALS", 91, 1, 1) -name_op(loc, "LOAD_GLOBAL", 92, 0, 1) # pops 1 + (oparg & 1) -name_op(loc, "LOAD_NAME", 93, 0, 1) -def_op(loc, "LOAD_SMALL_INT", 94, 0, 1) -def_op(loc, "LOAD_SPECIAL", 95, 1, 2) -name_op(loc, "LOAD_SUPER_ATTR", 96, 3, 1) # pops 1 + (oparg & 1) -free_op(loc, "MAKE_CELL", 97, 0, 0) -def_op(loc, "MAP_ADD", 98, 2, 0) -def_op(loc, "MATCH_CLASS", 99, 3, 1) -jrel_op(loc, "POP_JUMP_IF_FALSE", 100, 1, 0, conditional=True) -jrel_op(loc, "POP_JUMP_IF_NONE", 101, 1, 0, conditional=True) -jrel_op(loc, "POP_JUMP_IF_NOT_NONE", 102, 1, 0, conditional=True) -jrel_op(loc, "POP_JUMP_IF_TRUE", 103, 1, 0, conditional=True) -varargs_op(loc, "RAISE_VARARGS", 104, -1, 0) -def_op(loc, "RERAISE", 105, 1, 0) -jrel_op(loc, "SEND", 106, 2, 2, conditional=True) -def_op(loc, "SET_ADD", 107, 1, 0) -def_op(loc, "SET_FUNCTION_ATTRIBUTE", 108, 2, 1) -def_op(loc, "SET_UPDATE", 109, 1, 0) -store_op(loc, "STORE_ATTR", 110, 2, 0, is_type="name") -store_op(loc, "STORE_DEREF", 111, 1, 0, is_type="free") -store_op(loc, "STORE_FAST", 112, 1, 0, is_type="local") -local_op(loc, "STORE_FAST_LOAD_FAST", 113, 1, 1) -store_op(loc, "STORE_FAST_STORE_FAST", 114, 2, 0, is_type="local") -store_op(loc, "STORE_GLOBAL", 115, 1, 0, is_type="name") -store_op(loc, "STORE_NAME", 116, 1, 0, is_type="name") -def_op(loc, "SWAP", 117, 0, 0) -varargs_op(loc, "UNPACK_EX", 118, 1, -1) # pushes 1 + (oparg & 0xFF) + (oparg >> 8) -varargs_op(loc, "UNPACK_SEQUENCE", 119, 0, -1) # unpacks TOS, arg is the count -def_op(loc, "YIELD_VALUE", 120, 1, 1) -def_op(loc, "RESUME", 128, 0, 0) +def_op(loc, "CACHE", 0, 0, 0) +def_op(loc, "BINARY_SLICE", 1, 3, 1) +def_op(loc, "BUILD_TEMPLATE", 2, 2, 1) +local_op(loc, "BINARY_OP_INPLACE_ADD_UNICODE", 3, 2, 0) +def_op(loc, "CALL_FUNCTION_EX", 4, 4, 1) +def_op(loc, "CHECK_EG_MATCH", 5, 2, 2) +def_op(loc, "CHECK_EXC_MATCH", 6, 2, 2) +def_op(loc, "CLEANUP_THROW", 7, 3, 2) +def_op(loc, "DELETE_SUBSCR", 8, 2, 0) +def_op(loc, "END_FOR", 9, 1, 0) +def_op(loc, "END_SEND", 10, 2, 1) +def_op(loc, "EXIT_INIT_CHECK", 11, 1, 0) +def_op(loc, "FORMAT_SIMPLE", 12, 1, 1) +def_op(loc, "FORMAT_WITH_SPEC", 13, 2, 1) +def_op(loc, "GET_AITER", 14, 1, 1) +def_op(loc, "GET_ANEXT", 15, 1, 2) +def_op(loc, "GET_ITER", 16, 1, 2) +def_op(loc, "RESERVED", 17, 0, 0) +def_op(loc, "GET_LEN", 18, 1, 2) +def_op(loc, "GET_YIELD_FROM_ITER", 19, 1, 1) +def_op(loc, "INTERPRETER_EXIT", 20, 1, 0) +def_op(loc, "LOAD_BUILD_CLASS", 21, 0, 1) +def_op(loc, "LOAD_LOCALS", 22, 0, 1) +def_op(loc, "MAKE_FUNCTION", 23, 1, 1) +def_op(loc, "MATCH_KEYS", 24, 2, 3) +def_op(loc, "MATCH_MAPPING", 25, 1, 2) +def_op(loc, "MATCH_SEQUENCE", 26, 1, 2) +def_op(loc, "NOP", 27, 0, 0) +def_op(loc, "NOT_TAKEN", 28, 0, 0) +def_op(loc, "POP_EXCEPT", 29, 1, 0) +def_op(loc, "POP_ITER", 30, 2, 0) +def_op(loc, "POP_TOP", 31, 1, 0) +def_op(loc, "PUSH_EXC_INFO", 32, 1, 2) +def_op(loc, "PUSH_NULL", 33, 0, 1) +def_op(loc, "RETURN_GENERATOR", 34, 0, 1) +def_op(loc, "RETURN_VALUE", 35, 1, 1) +def_op(loc, "SETUP_ANNOTATIONS", 36, 0, 0) +store_op(loc, "STORE_SLICE", 37, 4, 0) +store_op(loc, "STORE_SUBSCR", 38, 3, 0) +unary_op(loc, "TO_BOOL", 39, 1, 1) +unary_op(loc, "UNARY_INVERT", 40, 1, 1) +unary_op(loc, "UNARY_NEGATIVE", 41, 1, 1) +unary_op(loc, "UNARY_NOT", 42, 1, 1) +def_op(loc, "WITH_EXCEPT_START", 43, 5, 6) +binary_op(loc, "BINARY_OP", 44, 2, 1) +def_op(loc, "BUILD_INTERPOLATION", 45, 2, 1) # pops 2 + (oparg & 1) +varargs_op(loc, "BUILD_LIST", 46, -1, 1) # TOS is count of list items +varargs_op(loc, "BUILD_MAP", 47, 0, 1) # argument is dictionary count to be popped +varargs_op(loc, "BUILD_SET", 48, -1, 1) # TOS is count of set items +varargs_op(loc, "BUILD_SLICE", 49, -1, 1) # TOS is slice +varargs_op(loc, "BUILD_STRING", 50, -1, 1) # TOS is concatenated strings +varargs_op(loc, "BUILD_TUPLE", 51, -1, 1) # TOS is count of tuple items +call_op(loc, "CALL", 52, -2, 1) # pops 2 + oparg; TOS is return value +def_op(loc, "CALL_INTRINSIC_1", 53, 1, 1) +def_op(loc, "CALL_INTRINSIC_2", 54, 2, 1) +call_op(loc, "CALL_KW", 55, -3, 1) # pops 3 + oparg; TOS is return value +compare_op(loc, "COMPARE_OP", 56, 2, 1) +binary_op(loc, "CONTAINS_OP", 57, 2, 1) +def_op(loc, "CONVERT_VALUE", 58, 1, 1) +def_op(loc, "COPY", 59, 0, 1) +def_op(loc, "COPY_FREE_VARS", 60, 0, 0) +name_op(loc, "DELETE_ATTR", 61, 1, 0) +free_op(loc, "DELETE_DEREF", 62, 0, 0) +local_op(loc, "DELETE_FAST", 63, 0, 0) +name_op(loc, "DELETE_GLOBAL", 64, 0, 0) +name_op(loc, "DELETE_NAME", 65, 0, 0) +def_op(loc, "DICT_MERGE", 66, 1, 0) +def_op(loc, "DICT_UPDATE", 67, 1, 0) +jrel_op(loc, "END_ASYNC_FOR", 68, 2, 0, conditional=True) +def_op(loc, "EXTENDED_ARG", 69, 0, 0) +jrel_op(loc, "FOR_ITER", 70, 0, 1, conditional=True) +def_op(loc, "GET_AWAITABLE", 71, 1, 1) +name_op(loc, "IMPORT_FROM", 72, 1, 2) +name_op(loc, "IMPORT_NAME", 73, 2, 1) +compare_op(loc, "IS_OP", 74, 2, 1) +jrel_op(loc, "JUMP_BACKWARD", 75, 0, 0, conditional=False) +jrel_op(loc, "JUMP_BACKWARD_NO_INTERRUPT", 76, 0, 0, conditional=False) +jrel_op(loc, "JUMP_FORWARD", 77, 0, 0, conditional=False) +def_op(loc, "LIST_APPEND", 78, 1, 0) +def_op(loc, "LIST_EXTEND", 79, 1, 0) +name_op(loc, "LOAD_ATTR", 80, 1, 1) # pops 1 + (oparg & 1) +def_op(loc, "LOAD_COMMON_CONSTANT", 81, 0, 1) +const_op(loc, "LOAD_CONST", 82, 0, 1) +local_op(loc, "LOAD_DEREF", 83, 0, 1) +local_op(loc, "LOAD_FAST", 84, 0, 1) +local_op(loc, "LOAD_FAST_AND_CLEAR", 85, 0, 1) +local_op(loc, "LOAD_FAST_BORROW", 86, 0, 1) +local_op(loc, "LOAD_FAST_BORROW_LOAD_FAST_BORROW", 87, 0, 2) +local_op(loc, "LOAD_FAST_CHECK", 88, 0, 1) +local_op(loc, "LOAD_FAST_LOAD_FAST", 89, 0, 2) +free_op(loc, "LOAD_FROM_DICT_OR_DEREF", 90, 1, 1) +name_op(loc, "LOAD_FROM_DICT_OR_GLOBALS", 91, 1, 1) +name_op(loc, "LOAD_GLOBAL", 92, 0, 1) # pops 1 + (oparg & 1) +name_op(loc, "LOAD_NAME", 93, 0, 1) +def_op(loc, "LOAD_SMALL_INT", 94, 0, 1) +def_op(loc, "LOAD_SPECIAL", 95, 1, 2) +name_op(loc, "LOAD_SUPER_ATTR", 96, 3, 1) # pops 1 + (oparg & 1) +free_op(loc, "MAKE_CELL", 97, 0, 0) +def_op(loc, "MAP_ADD", 98, 2, 0) +def_op(loc, "MATCH_CLASS", 99, 3, 1) +jrel_op(loc, "POP_JUMP_IF_FALSE", 100, 1, 0, conditional=True) +jrel_op(loc, "POP_JUMP_IF_NONE", 101, 1, 0, conditional=True) +jrel_op(loc, "POP_JUMP_IF_NOT_NONE", 102, 1, 0, conditional=True) +jrel_op(loc, "POP_JUMP_IF_TRUE", 103, 1, 0, conditional=True) +varargs_op(loc, "RAISE_VARARGS", 104, -1, 0) +def_op(loc, "RERAISE", 105, 1, 0) +jrel_op(loc, "SEND", 106, 2, 2, conditional=True) +def_op(loc, "SET_ADD", 107, 1, 0) +def_op(loc, "SET_FUNCTION_ATTRIBUTE", 108, 2, 1) +def_op(loc, "SET_UPDATE", 109, 1, 0) +store_op(loc, "STORE_ATTR", 110, 2, 0, is_type="name") +store_op(loc, "STORE_DEREF", 111, 1, 0, is_type="free") +store_op(loc, "STORE_FAST", 112, 1, 0, is_type="local") +local_op(loc, "STORE_FAST_LOAD_FAST", 113, 1, 1) +store_op(loc, "STORE_FAST_STORE_FAST", 114, 2, 0, is_type="local") +store_op(loc, "STORE_GLOBAL", 115, 1, 0, is_type="name") +store_op(loc, "STORE_NAME", 116, 1, 0, is_type="name") +def_op(loc, "SWAP", 117, 0, 0) +varargs_op(loc, "UNPACK_EX", 118, 1, -1) # pushes 1 + (oparg & 0xFF) + (oparg >> 8) +varargs_op(loc, "UNPACK_SEQUENCE", 119, 0, -1) # unpacks TOS, arg is the count +def_op(loc, "YIELD_VALUE", 120, 1, 1) +def_op(loc, "RESUME", 128, 0, 0) # Specialized opcodes (>128) -binary_op(loc, "BINARY_OP_ADD_FLOAT", 129, 2, 1) -binary_op(loc, "BINARY_OP_ADD_INT", 130, 2, 1) -binary_op(loc, "BINARY_OP_ADD_UNICODE", 131, 2, 1) -binary_op(loc, "BINARY_OP_EXTEND", 132, 2, 1) -binary_op(loc, "BINARY_OP_MULTIPLY_FLOAT", 133, 2, 1) -binary_op(loc, "BINARY_OP_MULTIPLY_INT", 134, 2, 1) -binary_op(loc, "BINARY_OP_SUBSCR_DICT", 135, 2, 1) -binary_op(loc, "BINARY_OP_SUBSCR_GETITEM", 136, 2, 0) -binary_op(loc, "BINARY_OP_SUBSCR_LIST_INT", 137, 2, 1) -binary_op(loc, "BINARY_OP_SUBSCR_LIST_SLICE", 138, 2, 1) -binary_op(loc, "BINARY_OP_SUBSCR_STR_INT", 139, 2, 1) -binary_op(loc, "BINARY_OP_SUBSCR_TUPLE_INT", 140, 2, 1) -binary_op(loc, "BINARY_OP_SUBTRACT_FLOAT", 141, 2, 1) -binary_op(loc, "BINARY_OP_SUBTRACT_INT", 142, 2, 1) -call_op(loc, "CALL_ALLOC_AND_ENTER_INIT", 143, -2, 0) # pops 2 + oparg -call_op(loc, "CALL_BOUND_METHOD_EXACT_ARGS", 144, -2, 0) # pops 2 + oparg -call_op(loc, "CALL_BOUND_METHOD_GENERAL", 145, -2, 0) # pops 2 + oparg -call_op(loc, "CALL_BUILTIN_CLASS", 146, -2, 1) # pops 2 + oparg -call_op(loc, "CALL_BUILTIN_FAST", 147, -2, 1) # pops 2 + oparg -call_op(loc, "CALL_BUILTIN_FAST_WITH_KEYWORDS", 148, -2, 1) # pops 2 + oparg -call_op(loc, "CALL_BUILTIN_O", 149, -2, 1) # pops 2 + oparg -def_op(loc, "CALL_ISINSTANCE", 150, 4, 1) -call_op(loc, "CALL_KW_BOUND_METHOD", 151, -3, 0) # pops 3 + oparg -call_op(loc, "CALL_KW_NON_PY", 152, -3, 1) # pops 3 + oparg -call_op(loc, "CALL_KW_PY", 153, -3, 0) # pops 3 + oparg -def_op(loc, "CALL_LEN", 154, 3, 1) -def_op(loc, "CALL_LIST_APPEND", 155, 3, 0) -call_op(loc, "CALL_METHOD_DESCRIPTOR_FAST", 156, -2, 1) # pops 2 + oparg -call_op(loc, "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", 157, -2, 1) # pops 2 + oparg -call_op(loc, "CALL_METHOD_DESCRIPTOR_NOARGS", 158, -2, 1) # pops 2 + oparg -call_op(loc, "CALL_METHOD_DESCRIPTOR_O", 159, -2, 1) # pops 2 + oparg -call_op(loc, "CALL_NON_PY_GENERAL", 160, -2, 1) # pops 2 + oparg -call_op(loc, "CALL_PY_EXACT_ARGS", 161, -2, 0) # pops 2 + oparg -call_op(loc, "CALL_PY_GENERAL", 162, -2, 0) # pops 2 + oparg -def_op(loc, "CALL_STR_1", 163, 3, 1) -def_op(loc, "CALL_TUPLE_1", 164, 3, 1) -def_op(loc, "CALL_TYPE_1", 165, 3, 1) -compare_op(loc, "COMPARE_OP_FLOAT", 166, 2, 1) -compare_op(loc, "COMPARE_OP_INT", 167, 2, 1) -compare_op(loc, "COMPARE_OP_STR", 168, 2, 1) -def_op(loc, "CONTAINS_OP_DICT", 169, 2, 1) -def_op(loc, "CONTAINS_OP_SET", 170, 2, 1) -jrel_op(loc, "FOR_ITER_GEN", 171, 2, 2, conditional=True) -jrel_op(loc, "FOR_ITER_LIST", 172, 2, 3, conditional=True) -jrel_op(loc, "FOR_ITER_RANGE", 173, 2, 3, conditional=True) -jrel_op(loc, "FOR_ITER_TUPLE", 174, 2, 3, conditional=True) -jrel_op(loc, "JUMP_BACKWARD_JIT", 175, 0, 0, conditional=False) -jrel_op(loc, "JUMP_BACKWARD_NO_JIT", 176, 0, 0, conditional=False) -def_op(loc, "LOAD_ATTR_CLASS", 177, 1, 1) # pushes 1 + (oparg & 1) -def_op(loc, "LOAD_ATTR_CLASS_WITH_METACLASS_CHECK", 178, 1, 1) # pushes 1 + (oparg & 1) -name_op(loc, "LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN", 179, 1, 1) -def_op(loc, "LOAD_ATTR_INSTANCE_VALUE", 180, 1, 1) # pushes 1 + (oparg & 1) -def_op(loc, "LOAD_ATTR_METHOD_LAZY_DICT", 181, 1, 2) -def_op(loc, "LOAD_ATTR_METHOD_NO_DICT", 182, 1, 2) -def_op(loc, "LOAD_ATTR_METHOD_WITH_VALUES", 183, 1, 2) -def_op(loc, "LOAD_ATTR_MODULE", 184, 1, 1) # pushes 1 + (oparg & 1) -def_op(loc, "LOAD_ATTR_NONDESCRIPTOR_NO_DICT", 185, 1, 1) -def_op(loc, "LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES", 186, 1, 1) -def_op(loc, "LOAD_ATTR_PROPERTY", 187, 1, 0) -def_op(loc, "LOAD_ATTR_SLOT", 188, 1, 1) # pushes 1 + (oparg & 1) -name_op(loc, "LOAD_ATTR_WITH_HINT", 189, 1, 1) # pushes 1 + (oparg & 1) -def_op(loc, "LOAD_GLOBAL_BUILTIN", 190, 0, 1) # pushes 1 + (oparg & 1) -def_op(loc, "LOAD_GLOBAL_MODULE", 191, 0, 1) # pushes 1 + (oparg & 1) -name_op(loc, "LOAD_SUPER_ATTR_ATTR", 192, 3, 1) -name_op(loc, "LOAD_SUPER_ATTR_METHOD", 193, 3, 2) -def_op(loc, "RESUME_CHECK", 194, 0, 0) -def_op(loc, "SEND_GEN", 195, 2, 1) -def_op(loc, "STORE_ATTR_INSTANCE_VALUE", 196, 2, 0) -def_op(loc, "STORE_ATTR_SLOT", 197, 2, 0) -store_op(loc, "STORE_ATTR_WITH_HINT", 198, 2, 0, is_type="name") -def_op(loc, "STORE_SUBSCR_DICT", 199, 3, 0) -def_op(loc, "STORE_SUBSCR_LIST_INT", 200, 3, 0) -def_op(loc, "TO_BOOL_ALWAYS_TRUE", 201, 1, 1) -def_op(loc, "TO_BOOL_BOOL", 202, 1, 1) -def_op(loc, "TO_BOOL_INT", 203, 1, 1) -def_op(loc, "TO_BOOL_LIST", 204, 1, 1) -def_op(loc, "TO_BOOL_NONE", 205, 1, 1) -def_op(loc, "TO_BOOL_STR", 206, 1, 1) -varargs_op(loc, "UNPACK_SEQUENCE_LIST", 207, 1, -1) -varargs_op(loc, "UNPACK_SEQUENCE_TUPLE", 208, 1, -1) -def_op(loc, "UNPACK_SEQUENCE_TWO_TUPLE", 209, 1, 2) -def_op(loc, "INSTRUMENTED_END_FOR", 233, 3, 2) -def_op(loc, "INSTRUMENTED_POP_ITER", 234, 2, 0) -def_op(loc, "INSTRUMENTED_END_SEND", 235, 2, 1) -jrel_op(loc, "INSTRUMENTED_FOR_ITER", 236, 2, 3, conditional=True) -def_op(loc, "INSTRUMENTED_INSTRUCTION", 237, 0, 0) -jrel_op(loc, "INSTRUMENTED_JUMP_FORWARD", 238, 0, 0, conditional=False) -def_op(loc, "INSTRUMENTED_NOT_TAKEN", 239, 0, 0) -jrel_op(loc, "INSTRUMENTED_POP_JUMP_IF_TRUE", 240, 1, 0, conditional=True) -jrel_op(loc, "INSTRUMENTED_POP_JUMP_IF_FALSE", 241, 1, 0, conditional=True) -jrel_op(loc, "INSTRUMENTED_POP_JUMP_IF_NONE", 242, 1, 0, conditional=True) -jrel_op(loc, "INSTRUMENTED_POP_JUMP_IF_NOT_NONE", 243, 1, 0, conditional=True) -def_op(loc, "INSTRUMENTED_RESUME", 244, 0, 0) -def_op(loc, "INSTRUMENTED_RETURN_VALUE", 245, 1, 1) -def_op(loc, "INSTRUMENTED_YIELD_VALUE", 246, 1, 1) -jrel_op(loc, "INSTRUMENTED_END_ASYNC_FOR", 247, 2, 0, conditional=True) -name_op(loc, "INSTRUMENTED_LOAD_SUPER_ATTR", 248, 3, 1) # pushes 1 + (oparg & 1) -call_op(loc, "INSTRUMENTED_CALL", 249, -2, 1) -call_op(loc, "INSTRUMENTED_CALL_KW", 250, -3, 1) -def_op(loc, "INSTRUMENTED_CALL_FUNCTION_EX", 251, 4, 1) -jrel_op(loc, "INSTRUMENTED_JUMP_BACKWARD", 252, 0, 0, conditional=False) -def_op(loc, "INSTRUMENTED_LINE", 253, 0, 0) -def_op(loc, "ENTER_EXECUTOR", 254, 0, 0) -def_op(loc, "TRACE_RECORD", 255, 0, 0) -def_op(loc, "ANNOTATIONS_PLACEHOLDER", 256, 0, 0) -jrel_op(loc, "JUMP", 257, 0, 0, conditional=False) -jrel_op(loc, "JUMP_IF_FALSE", 258, 1, 1, conditional=True) -jrel_op(loc, "JUMP_IF_TRUE", 259, 1, 1, conditional=True) -jrel_op(loc, "JUMP_NO_INTERRUPT", 260, 0, 0, conditional=False) -local_op(loc, "LOAD_CLOSURE", 261, 0, 1) -def_op(loc, "POP_BLOCK", 262, 0, 0) -def_op(loc, "SETUP_CLEANUP", 263, 0, 2) -def_op(loc, "SETUP_FINALLY", 264, 0, 1) -def_op(loc, "SETUP_WITH", 265, 0, 1) -def_op(loc, "STORE_FAST_MAYBE_NULL", 266, 1, 0) +binary_op(loc, "BINARY_OP_ADD_FLOAT", 129, 2, 1) +binary_op(loc, "BINARY_OP_ADD_INT", 130, 2, 1) +binary_op(loc, "BINARY_OP_ADD_UNICODE", 131, 2, 1) +binary_op(loc, "BINARY_OP_EXTEND", 132, 2, 1) +binary_op(loc, "BINARY_OP_MULTIPLY_FLOAT", 133, 2, 1) +binary_op(loc, "BINARY_OP_MULTIPLY_INT", 134, 2, 1) +binary_op(loc, "BINARY_OP_SUBSCR_DICT", 135, 2, 1) +binary_op(loc, "BINARY_OP_SUBSCR_GETITEM", 136, 2, 0) +binary_op(loc, "BINARY_OP_SUBSCR_LIST_INT", 137, 2, 1) +binary_op(loc, "BINARY_OP_SUBSCR_LIST_SLICE", 138, 2, 1) +binary_op(loc, "BINARY_OP_SUBSCR_STR_INT", 139, 2, 1) +binary_op(loc, "BINARY_OP_SUBSCR_TUPLE_INT", 140, 2, 1) +binary_op(loc, "BINARY_OP_SUBTRACT_FLOAT", 141, 2, 1) +binary_op(loc, "BINARY_OP_SUBTRACT_INT", 142, 2, 1) +call_op(loc, "CALL_ALLOC_AND_ENTER_INIT", 143, -2, 0) # pops 2 + oparg +call_op(loc, "CALL_BOUND_METHOD_EXACT_ARGS", 144, -2, 0) # pops 2 + oparg +call_op(loc, "CALL_BOUND_METHOD_GENERAL", 145, -2, 0) # pops 2 + oparg +call_op(loc, "CALL_BUILTIN_CLASS", 146, -2, 1) # pops 2 + oparg +call_op(loc, "CALL_BUILTIN_FAST", 147, -2, 1) # pops 2 + oparg +call_op(loc, "CALL_BUILTIN_FAST_WITH_KEYWORDS", 148, -2, 1) # pops 2 + oparg +call_op(loc, "CALL_BUILTIN_O", 149, -2, 1) # pops 2 + oparg +def_op(loc, "CALL_ISINSTANCE", 150, 4, 1) +call_op(loc, "CALL_KW_BOUND_METHOD", 151, -3, 0) # pops 3 + oparg +call_op(loc, "CALL_KW_NON_PY", 152, -3, 1) # pops 3 + oparg +call_op(loc, "CALL_KW_PY", 153, -3, 0) # pops 3 + oparg +def_op(loc, "CALL_LEN", 154, 3, 1) +def_op(loc, "CALL_LIST_APPEND", 155, 3, 0) +call_op(loc, "CALL_METHOD_DESCRIPTOR_FAST", 156, -2, 1) # pops 2 + oparg +call_op(loc, "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", 157, -2, 1) # pops 2 + oparg +call_op(loc, "CALL_METHOD_DESCRIPTOR_NOARGS", 158, -2, 1) # pops 2 + oparg +call_op(loc, "CALL_METHOD_DESCRIPTOR_O", 159, -2, 1) # pops 2 + oparg +call_op(loc, "CALL_NON_PY_GENERAL", 160, -2, 1) # pops 2 + oparg +call_op(loc, "CALL_PY_EXACT_ARGS", 161, -2, 0) # pops 2 + oparg +call_op(loc, "CALL_PY_GENERAL", 162, -2, 0) # pops 2 + oparg +def_op(loc, "CALL_STR_1", 163, 3, 1) +def_op(loc, "CALL_TUPLE_1", 164, 3, 1) +def_op(loc, "CALL_TYPE_1", 165, 3, 1) +compare_op(loc, "COMPARE_OP_FLOAT", 166, 2, 1) +compare_op(loc, "COMPARE_OP_INT", 167, 2, 1) +compare_op(loc, "COMPARE_OP_STR", 168, 2, 1) +def_op(loc, "CONTAINS_OP_DICT", 169, 2, 1) +def_op(loc, "CONTAINS_OP_SET", 170, 2, 1) +jrel_op(loc, "FOR_ITER_GEN", 171, 2, 2, conditional=True) +jrel_op(loc, "FOR_ITER_LIST", 172, 2, 3, conditional=True) +jrel_op(loc, "FOR_ITER_RANGE", 173, 2, 3, conditional=True) +jrel_op(loc, "FOR_ITER_TUPLE", 174, 2, 3, conditional=True) +jrel_op(loc, "JUMP_BACKWARD_JIT", 175, 0, 0, conditional=False) +jrel_op(loc, "JUMP_BACKWARD_NO_JIT", 176, 0, 0, conditional=False) +def_op(loc, "LOAD_ATTR_CLASS", 177, 1, 1) # pushes 1 + (oparg & 1) +def_op(loc, "LOAD_ATTR_CLASS_WITH_METACLASS_CHECK", 178, 1, 1) # pushes 1 + (oparg & 1) +name_op(loc, "LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN", 179, 1, 1) +def_op(loc, "LOAD_ATTR_INSTANCE_VALUE", 180, 1, 1) # pushes 1 + (oparg & 1) +def_op(loc, "LOAD_ATTR_METHOD_LAZY_DICT", 181, 1, 2) +def_op(loc, "LOAD_ATTR_METHOD_NO_DICT", 182, 1, 2) +def_op(loc, "LOAD_ATTR_METHOD_WITH_VALUES", 183, 1, 2) +def_op(loc, "LOAD_ATTR_MODULE", 184, 1, 1) # pushes 1 + (oparg & 1) +def_op(loc, "LOAD_ATTR_NONDESCRIPTOR_NO_DICT", 185, 1, 1) +def_op(loc, "LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES", 186, 1, 1) +def_op(loc, "LOAD_ATTR_PROPERTY", 187, 1, 0) +def_op(loc, "LOAD_ATTR_SLOT", 188, 1, 1) # pushes 1 + (oparg & 1) +name_op(loc, "LOAD_ATTR_WITH_HINT", 189, 1, 1) # pushes 1 + (oparg & 1) +def_op(loc, "LOAD_GLOBAL_BUILTIN", 190, 0, 1) # pushes 1 + (oparg & 1) +def_op(loc, "LOAD_GLOBAL_MODULE", 191, 0, 1) # pushes 1 + (oparg & 1) +name_op(loc, "LOAD_SUPER_ATTR_ATTR", 192, 3, 1) +name_op(loc, "LOAD_SUPER_ATTR_METHOD", 193, 3, 2) +def_op(loc, "RESUME_CHECK", 194, 0, 0) +def_op(loc, "SEND_GEN", 195, 2, 1) +def_op(loc, "STORE_ATTR_INSTANCE_VALUE", 196, 2, 0) +def_op(loc, "STORE_ATTR_SLOT", 197, 2, 0) +store_op(loc, "STORE_ATTR_WITH_HINT", 198, 2, 0, is_type="name") +def_op(loc, "STORE_SUBSCR_DICT", 199, 3, 0) +def_op(loc, "STORE_SUBSCR_LIST_INT", 200, 3, 0) +def_op(loc, "TO_BOOL_ALWAYS_TRUE", 201, 1, 1) +def_op(loc, "TO_BOOL_BOOL", 202, 1, 1) +def_op(loc, "TO_BOOL_INT", 203, 1, 1) +def_op(loc, "TO_BOOL_LIST", 204, 1, 1) +def_op(loc, "TO_BOOL_NONE", 205, 1, 1) +def_op(loc, "TO_BOOL_STR", 206, 1, 1) +varargs_op(loc, "UNPACK_SEQUENCE_LIST", 207, 1, -1) +varargs_op(loc, "UNPACK_SEQUENCE_TUPLE", 208, 1, -1) +def_op(loc, "UNPACK_SEQUENCE_TWO_TUPLE", 209, 1, 2) +def_op(loc, "INSTRUMENTED_END_FOR", 233, 3, 2) +def_op(loc, "INSTRUMENTED_POP_ITER", 234, 2, 0) +def_op(loc, "INSTRUMENTED_END_SEND", 235, 2, 1) +jrel_op(loc, "INSTRUMENTED_FOR_ITER", 236, 2, 3, conditional=True) +def_op(loc, "INSTRUMENTED_INSTRUCTION", 237, 0, 0) +jrel_op(loc, "INSTRUMENTED_JUMP_FORWARD", 238, 0, 0, conditional=False) +def_op(loc, "INSTRUMENTED_NOT_TAKEN", 239, 0, 0) +jrel_op(loc, "INSTRUMENTED_POP_JUMP_IF_TRUE", 240, 1, 0, conditional=True) +jrel_op(loc, "INSTRUMENTED_POP_JUMP_IF_FALSE", 241, 1, 0, conditional=True) +jrel_op(loc, "INSTRUMENTED_POP_JUMP_IF_NONE", 242, 1, 0, conditional=True) +jrel_op(loc, "INSTRUMENTED_POP_JUMP_IF_NOT_NONE", 243, 1, 0, conditional=True) +def_op(loc, "INSTRUMENTED_RESUME", 244, 0, 0) +def_op(loc, "INSTRUMENTED_RETURN_VALUE", 245, 1, 1) +def_op(loc, "INSTRUMENTED_YIELD_VALUE", 246, 1, 1) +jrel_op(loc, "INSTRUMENTED_END_ASYNC_FOR", 247, 2, 0, conditional=True) +name_op(loc, "INSTRUMENTED_LOAD_SUPER_ATTR", 248, 3, 1) # pushes 1 + (oparg & 1) +call_op(loc, "INSTRUMENTED_CALL", 249, -2, 1) +call_op(loc, "INSTRUMENTED_CALL_KW", 250, -3, 1) +def_op(loc, "INSTRUMENTED_CALL_FUNCTION_EX", 251, 4, 1) +jrel_op(loc, "INSTRUMENTED_JUMP_BACKWARD", 252, 0, 0, conditional=False) +def_op(loc, "INSTRUMENTED_LINE", 253, 0, 0) +def_op(loc, "ENTER_EXECUTOR", 254, 0, 0) +def_op(loc, "TRACE_RECORD", 255, 0, 0) +def_op(loc, "ANNOTATIONS_PLACEHOLDER", 256, 0, 0) +jrel_op(loc, "JUMP", 257, 0, 0, conditional=False) +jrel_op(loc, "JUMP_IF_FALSE", 258, 1, 1, conditional=True) +jrel_op(loc, "JUMP_IF_TRUE", 259, 1, 1, conditional=True) +jrel_op(loc, "JUMP_NO_INTERRUPT", 260, 0, 0, conditional=False) +local_op(loc, "LOAD_CLOSURE", 261, 0, 1) +def_op(loc, "POP_BLOCK", 262, 0, 0) +def_op(loc, "SETUP_CLEANUP", 263, 0, 2) +def_op(loc, "SETUP_FINALLY", 264, 0, 1) +def_op(loc, "SETUP_WITH", 265, 0, 1) +def_op(loc, "STORE_FAST_MAYBE_NULL", 266, 1, 0) # ops >= 44 have args HAVE_ARGUMENT = 44 -loc["hasarg"] = [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 128, 143, 144, 145, 146, 147, 148, 149, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 195, 198, 207, 208, 209, 236, 238, 240, 241, 242, 243, 244, 246, 247, 248, 249, 250, 252, 254, 255, 257, 258, 259, 260, 261, 263, 264, 265, 266] +loc["hasarg"] = [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 128, 143, 144, 145, 146, 147, 148, 149, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 195, 198, 207, 208, 209, 236, 238, 240, 241, 242, 243, 244, 246, 247, 248, 249, 250, 252, 254, 255, 257, 258, 259, 260, 261, 263, 264, 265, 266] # hasconst table populated by const_op definitions # hasname table populated by name_op and store_op definitions # jrel table populated by jrel_op definitions loc["hasjabs"] = [] -loc["hasjump"] = loc["hasjrel"] +loc["hasjump"] = loc["hasjrel"] # hasfree table populated by free_op and store_op definitions # haslocal table populated by local_op and store_op definitions -loc["hasexc"] = [263, 264, 265] +loc["hasexc"] = [263, 264, 265] + +# fmt: on ### update formatting import xdis.opcodes.opcode_313 as opcode_313 @@ -334,16 +335,14 @@ def extended_BINARY_OP_314(opc, instructions): fmt_str = "%s[%s]" if opname == "[]" else f"%s {opname} %s" return extended_format_binary_op(opc, instructions, fmt_str) -_common_constants = [ - "AssertionError", - "NotImplementedError", - "tuple", - "all", - "any" -] + +_common_constants = ("AssertionError", "NotImplementedError", "tuple", "all", "any") + def format_LOAD_COMMON_CONSTANT_314(arg: int): - return _common_constants[arg] + return _common_constants[arg] + return _common_constants[arg] + opcode_arg_fmt = opcode_arg_fmt314 = { **opcode_313.opcode_arg_fmt313, @@ -357,6 +356,9 @@ def format_LOAD_COMMON_CONSTANT_314(arg: int): **{"LOAD_COMMON_CONSTANT": format_LOAD_COMMON_CONSTANT_314}, } +# CALL_FUNCTION_EX no longer takes an argument in 3.14, so it no longer needs to be formatted +del opcode_arg_fmt["CALL_FUNCTION_EX"] + findlinestarts = opcode_313.findlinestarts_313 update_pj3(globals(), loc) diff --git a/xdis/unmarshal.py b/xdis/unmarshal.py index ea03e574..e6a7108f 100644 --- a/xdis/unmarshal.py +++ b/xdis/unmarshal.py @@ -136,6 +136,7 @@ def long(n: int) -> LongTypeForPython3: TYPE_SET: "set", TYPE_SHORT_ASCII: "short_ASCII", TYPE_SHORT_ASCII_INTERNED: "short_ASCII_interned", + TYPE_SLICE: "slice", TYPE_SMALL_TUPLE: "small_tuple", TYPE_STOPITER: "stopIteration", TYPE_STRING: "string",