From e4e3a9f4edbb3fa2a08df92d79502e1f47694680 Mon Sep 17 00:00:00 2001 From: GawdOfROFL Date: Sun, 10 Oct 2021 00:52:41 +0530 Subject: [PATCH 1/4] added python 3.10 support --- CMakeLists.txt | 2 +- PythonBytecode.txt | 1 + bytecode.cpp | 2 + bytes/comp_map.py | 2 +- bytes/python_310.map | 120 +++++++++++++++++++++++++++++++++++++++++++ pyc_module.cpp | 7 ++- pyc_module.h | 1 + 7 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 bytes/python_310.map diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ffbe12..7a3b979 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,7 +29,7 @@ endif() set(PYTHON_VERSIONS 10 11 13 14 15 16 # Python 1.1 and 1.2 are marshal-identical 20 21 22 23 24 25 26 27 - 30 31 32 33 34 35 36 37 38 39 + 30 31 32 33 34 35 36 37 38 39 310 ) foreach(ver ${PYTHON_VERSIONS}) diff --git a/PythonBytecode.txt b/PythonBytecode.txt index 13d5418..d703c31 100644 --- a/PythonBytecode.txt +++ b/PythonBytecode.txt @@ -10,6 +10,7 @@ Python MAGIC Python MAGIC Python MAGIC 3.7 0x0A0D0D42 3.8 0x0A0D0D55 3.9 0x0A0D0D61 + 3.10 0x0A0D0DF6 1.0 1.1 1.2 1.3 1.4 1.5 1.6 diff --git a/bytecode.cpp b/bytecode.cpp index 7081eec..6909834 100644 --- a/bytecode.cpp +++ b/bytecode.cpp @@ -35,6 +35,7 @@ DECLARE_PYTHON(3, 6) DECLARE_PYTHON(3, 7) DECLARE_PYTHON(3, 8) DECLARE_PYTHON(3, 9) +DECLARE_PYTHON(3, 10) const char* Pyc::OpcodeName(int opcode) { @@ -101,6 +102,7 @@ int Pyc::ByteToOpcode(int maj, int min, int opcode) case 7: return python_37_map(opcode); case 8: return python_38_map(opcode); case 9: return python_39_map(opcode); + case 10: return python_310_map(opcode); } break; } diff --git a/bytes/comp_map.py b/bytes/comp_map.py index c83a8df..e8983f0 100755 --- a/bytes/comp_map.py +++ b/bytes/comp_map.py @@ -27,7 +27,7 @@ if not os.path.exists(sys.argv[2]): maplist = [ 10, 11, 13, 14, 15, 16, 20, 21, 22, 23, 24, 25, 26, 27, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 ] + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 310 ] for mapver in maplist: infile = open(os.path.join(sys.argv[1], 'python_%d.map' % mapver), 'rt') diff --git a/bytes/python_310.map b/bytes/python_310.map new file mode 100644 index 0000000..ac7e4bc --- /dev/null +++ b/bytes/python_310.map @@ -0,0 +1,120 @@ +1 POP_TOP +2 ROT_TWO +3 ROT_THREE +4 DUP_TOP +5 DUP_TOP_TWO +6 ROT_FOUR +9 NOP +10 UNARY_POSITIVE +11 UNARY_NEGATIVE +12 UNARY_NOT +15 UNARY_INVERT +16 BINARY_MATRIX_MULTIPLY +17 INPLACE_MATRIX_MULTIPLY +19 BINARY_POWER +20 BINARY_MULTIPLY +22 BINARY_MODULO +23 BINARY_ADD +24 BINARY_SUBTRACT +25 BINARY_SUBSCR +26 BINARY_FLOOR_DIVIDE +27 BINARY_TRUE_DIVIDE +28 INPLACE_FLOOR_DIVIDE +29 INPLACE_TRUE_DIVIDE +49 WITH_EXCEPT_START +50 GET_AITER +51 GET_ANEXT +52 BEFORE_ASYNC_WITH +54 END_ASYNC_FOR +55 INPLACE_ADD +56 INPLACE_SUBTRACT +57 INPLACE_MULTIPLY +59 INPLACE_MODULO +60 STORE_SUBSCR +61 DELETE_SUBSCR +62 BINARY_LSHIFT +63 BINARY_RSHIFT +64 BINARY_AND +65 BINARY_XOR +66 BINARY_OR +67 INPLACE_POWER +68 GET_ITER +69 GET_YIELD_FROM_ITER +70 PRINT_EXPR +71 LOAD_BUILD_CLASS +72 YIELD_FROM +73 GET_AWAITABLE +74 LOAD_ASSERTION_ERROR +75 INPLACE_LSHIFT +76 INPLACE_RSHIFT +77 INPLACE_AND +78 INPLACE_XOR +79 INPLACE_OR +82 LIST_TO_TUPLE +83 RETURN_VALUE +84 IMPORT_STAR +85 SETUP_ANNOTATIONS +86 YIELD_VALUE +87 POP_BLOCK +89 POP_EXCEPT +90 STORE_NAME_A +91 DELETE_NAME_A +92 UNPACK_SEQUENCE_A +93 FOR_ITER_A +94 UNPACK_EX_A +95 STORE_ATTR_A +96 DELETE_ATTR_A +97 STORE_GLOBAL_A +98 DELETE_GLOBAL_A +99 ROT_TWO +100 LOAD_CONST_A +101 LOAD_NAME_A +102 BUILD_TUPLE_A +103 BUILD_LIST_A +104 BUILD_SET_A +105 BUILD_MAP_A +106 LOAD_ATTR_A +107 COMPARE_OP_A +108 IMPORT_NAME_A +109 IMPORT_FROM_A +110 JUMP_FORWARD_A +111 JUMP_IF_FALSE_OR_POP_A +112 JUMP_IF_TRUE_OR_POP_A +113 JUMP_ABSOLUTE_A +114 POP_JUMP_IF_FALSE_A +115 POP_JUMP_IF_TRUE_A +116 LOAD_GLOBAL_A +117 IS_OP_A +118 CONTAINS_OP_A +119 RERAISE +121 JUMP_IF_NOT_EXC_MATCH_A +122 SETUP_FINALLY_A +124 LOAD_FAST_A +125 STORE_FAST_A +126 DELETE_FAST_A +130 RAISE_VARARGS_A +131 CALL_FUNCTION_A +132 MAKE_FUNCTION_A +133 BUILD_SLICE_A +135 LOAD_CLOSURE_A +136 LOAD_DEREF_A +137 STORE_DEREF_A +138 DELETE_DEREF_A +141 CALL_FUNCTION_KW_A +142 CALL_FUNCTION_EX_A +143 SETUP_WITH_A +144 EXTENDED_ARG_A +145 LIST_APPEND_A +146 SET_ADD_A +147 MAP_ADD_A +148 LOAD_CLASSDEREF_A +154 SETUP_ASYNC_WITH_A +155 FORMAT_VALUE_A +156 BUILD_CONST_KEY_MAP_A +157 BUILD_STRING_A +160 LOAD_METHOD_A +161 CALL_METHOD_A +162 LIST_EXTEND_A +163 SET_UPDATE_A +164 DICT_MERGE_A +165 DICT_UPDATE_A \ No newline at end of file diff --git a/pyc_module.cpp b/pyc_module.cpp index 919e8ef..246122e 100644 --- a/pyc_module.cpp +++ b/pyc_module.cpp @@ -157,7 +157,12 @@ void PycModule::setVersion(unsigned int magic) m_min = 9; m_unicode = true; break; - + + case MAGIC_3_10: + m_maj = 3; + m_min = 10; + m_unicode = true; + break; /* Bad Magic detected */ default: m_maj = -1; diff --git a/pyc_module.h b/pyc_module.h index 6f38a20..d2a0dc3 100644 --- a/pyc_module.h +++ b/pyc_module.h @@ -32,6 +32,7 @@ enum PycMagic { MAGIC_3_7 = 0x0A0D0D42, MAGIC_3_8 = 0x0A0D0D55, MAGIC_3_9 = 0x0A0D0D61, + MAGIC_3_10 = 0x0A0D0D6F }; class PycModule { From 728309e7f866a259e735271919e6c27ae138a4b6 Mon Sep 17 00:00:00 2001 From: GawdOfROFL Date: Sun, 10 Oct 2021 00:57:37 +0530 Subject: [PATCH 2/4] add newline --- bytes/python_310.map | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bytes/python_310.map b/bytes/python_310.map index ac7e4bc..92a7eb3 100644 --- a/bytes/python_310.map +++ b/bytes/python_310.map @@ -117,4 +117,4 @@ 162 LIST_EXTEND_A 163 SET_UPDATE_A 164 DICT_MERGE_A -165 DICT_UPDATE_A \ No newline at end of file +165 DICT_UPDATE_A From 43667f0baea91f5fdf66ee4c58b7eee9b4525295 Mon Sep 17 00:00:00 2001 From: GawdOfROFL Date: Sun, 10 Oct 2021 06:48:34 +0530 Subject: [PATCH 3/4] make requested changes --- PythonBytecode.txt | 2 +- bytecode_ops.inl | 8 ++++++++ bytes/python_310.map | 10 ++++++++-- pyc_module.h | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/PythonBytecode.txt b/PythonBytecode.txt index d703c31..7b48bda 100644 --- a/PythonBytecode.txt +++ b/PythonBytecode.txt @@ -10,7 +10,7 @@ Python MAGIC Python MAGIC Python MAGIC 3.7 0x0A0D0D42 3.8 0x0A0D0D55 3.9 0x0A0D0D61 - 3.10 0x0A0D0DF6 + 3.10 0x0A0D0D6F 1.0 1.1 1.2 1.3 1.4 1.5 1.6 diff --git a/bytecode_ops.inl b/bytecode_ops.inl index 2babb74..270e557 100644 --- a/bytecode_ops.inl +++ b/bytecode_ops.inl @@ -58,6 +58,11 @@ OPCODE(BINARY_FLOOR_DIVIDE) OPCODE(BINARY_TRUE_DIVIDE) OPCODE(INPLACE_FLOOR_DIVIDE) OPCODE(INPLACE_TRUE_DIVIDE) +OPCODE(GET_LEN) +OPCODE(MATCH_MAPPING) +OPCODE(MATCH_SEQUENCE) +OPCODE(MATCH_KEYS) +OPCODE(COPY_DICT_WITHOUT_KEYS) OPCODE(STORE_MAP) OPCODE(INPLACE_ADD) OPCODE(INPLACE_SUBTRACT) @@ -108,6 +113,7 @@ OPCODE_A(STORE_ATTR) OPCODE_A(DELETE_ATTR) OPCODE_A(STORE_GLOBAL) OPCODE_A(DELETE_GLOBAL) +OPCODE_A(ROT_N) OPCODE_A(UNPACK_VARARG) OPCODE_A(LOAD_CONST) OPCODE_A(LOAD_NAME) @@ -133,6 +139,7 @@ OPCODE_A(RESERVE_FAST) OPCODE_A(LOAD_FAST) OPCODE_A(STORE_FAST) OPCODE_A(DELETE_FAST) +OPCODE_A(GEN_START) OPCODE_A(SET_LINENO) OPCODE_A(STORE_ANNOTATION) OPCODE_A(RAISE_VARARGS) @@ -164,6 +171,7 @@ OPCODE_A(MAP_ADD) OPCODE_A(UNPACK_EX) OPCODE_A(LIST_APPEND) OPCODE_A(LOAD_CLASSDEREF) +OPCODE_A(MATCH_CLASS) OPCODE_A(BUILD_LIST_UNPACK) OPCODE_A(BUILD_MAP_UNPACK) OPCODE_A(BUILD_MAP_UNPACK_WITH_CALL) diff --git a/bytes/python_310.map b/bytes/python_310.map index 92a7eb3..aedd279 100644 --- a/bytes/python_310.map +++ b/bytes/python_310.map @@ -21,6 +21,11 @@ 27 BINARY_TRUE_DIVIDE 28 INPLACE_FLOOR_DIVIDE 29 INPLACE_TRUE_DIVIDE +30 GET_LEN +31 MATCH_MAPPING +32 MATCH_SEQUENCE +33 MATCH_KEYS +34 COPY_DICT_WITHOUT_KEYS 49 WITH_EXCEPT_START 50 GET_AITER 51 GET_ANEXT @@ -66,7 +71,7 @@ 96 DELETE_ATTR_A 97 STORE_GLOBAL_A 98 DELETE_GLOBAL_A -99 ROT_TWO +99 ROT_N_A 100 LOAD_CONST_A 101 LOAD_NAME_A 102 BUILD_TUPLE_A @@ -86,12 +91,12 @@ 116 LOAD_GLOBAL_A 117 IS_OP_A 118 CONTAINS_OP_A -119 RERAISE 121 JUMP_IF_NOT_EXC_MATCH_A 122 SETUP_FINALLY_A 124 LOAD_FAST_A 125 STORE_FAST_A 126 DELETE_FAST_A +129 GEN_START_A 130 RAISE_VARARGS_A 131 CALL_FUNCTION_A 132 MAKE_FUNCTION_A @@ -108,6 +113,7 @@ 146 SET_ADD_A 147 MAP_ADD_A 148 LOAD_CLASSDEREF_A +152 MATCH_CLASS_A 154 SETUP_ASYNC_WITH_A 155 FORMAT_VALUE_A 156 BUILD_CONST_KEY_MAP_A diff --git a/pyc_module.h b/pyc_module.h index d2a0dc3..05046e7 100644 --- a/pyc_module.h +++ b/pyc_module.h @@ -32,7 +32,7 @@ enum PycMagic { MAGIC_3_7 = 0x0A0D0D42, MAGIC_3_8 = 0x0A0D0D55, MAGIC_3_9 = 0x0A0D0D61, - MAGIC_3_10 = 0x0A0D0D6F + MAGIC_3_10 = 0x0A0D0D6F, }; class PycModule { From 8245b79989ccbeca70ede6e347c190c33cd6f222 Mon Sep 17 00:00:00 2001 From: GawdOfROFL Date: Sun, 10 Oct 2021 14:58:46 +0530 Subject: [PATCH 4/4] add RERAISE_A --- bytecode_ops.inl | 1 + bytes/python_310.map | 1 + 2 files changed, 2 insertions(+) diff --git a/bytecode_ops.inl b/bytecode_ops.inl index 270e557..61fe5f5 100644 --- a/bytecode_ops.inl +++ b/bytecode_ops.inl @@ -188,6 +188,7 @@ OPCODE_A(CALL_FINALLY) OPCODE_A(POP_FINALLY) OPCODE_A(IS_OP) OPCODE_A(CONTAINS_OP) +OPCODE_A(RERAISE) OPCODE_A(JUMP_IF_NOT_EXC_MATCH) OPCODE_A(LIST_EXTEND) OPCODE_A(SET_UPDATE) diff --git a/bytes/python_310.map b/bytes/python_310.map index aedd279..94f7c30 100644 --- a/bytes/python_310.map +++ b/bytes/python_310.map @@ -91,6 +91,7 @@ 116 LOAD_GLOBAL_A 117 IS_OP_A 118 CONTAINS_OP_A +119 RERAISE_A 121 JUMP_IF_NOT_EXC_MATCH_A 122 SETUP_FINALLY_A 124 LOAD_FAST_A