From e4e3a9f4edbb3fa2a08df92d79502e1f47694680 Mon Sep 17 00:00:00 2001 From: GawdOfROFL Date: Sun, 10 Oct 2021 00:52:41 +0530 Subject: [PATCH] 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 {