From 428d11c4b57fb03f4c5a8567993b1e850ff9997f Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Fri, 8 Feb 2019 16:06:55 -0800 Subject: [PATCH] Add bytecode and disassembly support for Python 3.8. Also fixes running pymultic from outside of its source directory. --- CMakeLists.txt | 2 +- PythonBytecode.txt | 509 ++++++++++++++++++++++---------------------- bytecode.cpp | 2 + bytecode_ops.inl | 4 + bytes/comp_map.py | 2 +- bytes/python_38.map | 120 +++++++++++ pyc_code.cpp | 5 + pyc_code.h | 20 +- pyc_module.cpp | 6 + pyc_module.h | 3 +- pycdas.cpp | 2 + scripts/pymultic | 11 +- 12 files changed, 419 insertions(+), 267 deletions(-) create mode 100644 bytes/python_38.map diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b5256c0..c791399f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,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 + 30 31 32 33 34 35 36 37 38 ) foreach(ver ${PYTHON_VERSIONS}) diff --git a/PythonBytecode.txt b/PythonBytecode.txt index 259860d5..d040d0e7 100644 --- a/PythonBytecode.txt +++ b/PythonBytecode.txt @@ -8,6 +8,7 @@ Python MAGIC Python MAGIC Python MAGIC 1.6 0x0A0DC4FC 2.6 0x0A0DF2D1 3.5.3 0x0A0D0D17 2.7 0x0A0DF303 3.6 0x0A0D0D33 3.7 0x0A0D0D42 + 3.8 0x0A0D0D55 1.0 1.1 1.2 1.3 1.4 1.5 1.6 @@ -347,273 +348,277 @@ MAP_ADD [ ] [ ] [ ] [ ] [ ] [ ] [ ] . - 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 -STOP_CODE [X] [X] [X] [ ] [ ] [ ] [ ] [ ] -POP_TOP [X] [X] [X] [X] [X] [X] [X] [X] -ROT_TWO [X] [X] [X] [X] [X] [X] [X] [X] -ROT_THREE [X] [X] [X] [X] [X] [X] [X] [X] -DUP_TOP [X] [X] [X] [X] [X] [X] [X] [X] + 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 +STOP_CODE [X] [X] [X] [ ] [ ] [ ] [ ] [ ] [ ] +POP_TOP [X] [X] [X] [X] [X] [X] [X] [X] [X] +ROT_TWO [X] [X] [X] [X] [X] [X] [X] [X] [X] +ROT_THREE [X] [X] [X] [X] [X] [X] [X] [X] [X] +DUP_TOP [X] [X] [X] [X] [X] [X] [X] [X] [X] ROT_FOUR ! [X] [X] -DUP_TOP_TWO ! [X] [X] [X] [X] [X] [X] -<6> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<7> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<8> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -NOP [X] [X] [X] [X] [X] [X] [X] [X] -UNARY_POSITIVE [X] [X] [X] [X] [X] [X] [X] [X] -UNARY_NEGATIVE [X] [X] [X] [X] [X] [X] [X] [X] -UNARY_NOT [X] [X] [X] [X] [X] [X] [X] [X] -<13> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<14> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -UNARY_INVERT [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_MATRIX_MULTIPLY [ ] [ ] [ ] [ ] [ ] [X] [X] [X] +DUP_TOP_TWO ! [X] [X] [X] [X] [X] [X] [X] +ROT_FOUR [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [X] +<7> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<8> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +NOP [X] [X] [X] [X] [X] [X] [X] [X] [X] +UNARY_POSITIVE [X] [X] [X] [X] [X] [X] [X] [X] [X] +UNARY_NEGATIVE [X] [X] [X] [X] [X] [X] [X] [X] [X] +UNARY_NOT [X] [X] [X] [X] [X] [X] [X] [X] [X] +<13> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<14> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +UNARY_INVERT [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_MATRIX_MULTIPLY [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] SET_ADD ! [X] [ ] [ ] [ ] [ ] -INPLACE_MATRIX_MULTIPLY ! [X] [X] [X] -LIST_APPEND [X] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -BINARY_POWER [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_MULTIPLY [X] [X] [X] [X] [X] [X] [X] [X] -<21> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -BINARY_MODULO [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_ADD [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_SUBTRACT [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_SUBSCR [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_FLOOR_DIVIDE [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_TRUE_DIVIDE [X] [X] [X] [X] [X] [X] [X] [X] -INPLACE_FLOOR_DIVIDE [X] [X] [X] [X] [X] [X] [X] [X] -INPLACE_TRUE_DIVIDE [X] [X] [X] [X] [X] [X] [X] [X] -<30> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<31> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<32> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<33> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<34> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<35> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<36> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<37> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<38> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<39> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<40> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<41> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<42> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<43> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<44> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<45> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<46> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<47> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<48> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<49> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -GET_AITER [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -GET_ANEXT [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -BEFORE_ASYNC_WITH [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -<53> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -STORE_MAP [X] [X] [X] [X] [X] [ ] [ ] [ ] -INPLACE_ADD [X] [X] [X] [X] [X] [X] [X] [X] -INPLACE_SUBTRACT [X] [X] [X] [X] [X] [X] [X] [X] -INPLACE_MULTIPLY [X] [X] [X] [X] [X] [X] [X] [X] -<58> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -INPLACE_MODULO [X] [X] [X] [X] [X] [X] [X] [X] -STORE_SUBSCR [X] [X] [X] [X] [X] [X] [X] [X] -DELETE_SUBSCR [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_LSHIFT [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_RSHIFT [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_AND [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_XOR [X] [X] [X] [X] [X] [X] [X] [X] -BINARY_OR [X] [X] [X] [X] [X] [X] [X] [X] -INPLACE_POWER [X] [X] [X] [X] [X] [X] [X] [X] -GET_ITER [X] [X] [X] [X] [X] [X] [X] [X] +INPLACE_MATRIX_MULTIPLY ! [X] [X] [X] [X] +LIST_APPEND [X] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +BINARY_POWER [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_MULTIPLY [X] [X] [X] [X] [X] [X] [X] [X] [X] +<21> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +BINARY_MODULO [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_ADD [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_SUBTRACT [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_SUBSCR [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_FLOOR_DIVIDE [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_TRUE_DIVIDE [X] [X] [X] [X] [X] [X] [X] [X] [X] +INPLACE_FLOOR_DIVIDE [X] [X] [X] [X] [X] [X] [X] [X] [X] +INPLACE_TRUE_DIVIDE [X] [X] [X] [X] [X] [X] [X] [X] [X] +<30> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<31> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<32> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<33> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<34> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<35> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<36> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<37> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<38> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<39> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<40> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<41> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<42> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<43> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<44> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<45> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<46> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<47> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<48> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<49> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +GET_AITER [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +GET_ANEXT [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +BEFORE_ASYNC_WITH [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +BEGIN_FINALLY [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [X] +STORE_MAP ! [X] [X] [X] [X] [X] [ ] [ ] [ ] +END_ASYNC_FOR ! [X] +INPLACE_ADD [X] [X] [X] [X] [X] [X] [X] [X] [X] +INPLACE_SUBTRACT [X] [X] [X] [X] [X] [X] [X] [X] [X] +INPLACE_MULTIPLY [X] [X] [X] [X] [X] [X] [X] [X] [X] +<58> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +INPLACE_MODULO [X] [X] [X] [X] [X] [X] [X] [X] [X] +STORE_SUBSCR [X] [X] [X] [X] [X] [X] [X] [X] [X] +DELETE_SUBSCR [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_LSHIFT [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_RSHIFT [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_AND [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_XOR [X] [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_OR [X] [X] [X] [X] [X] [X] [X] [X] [X] +INPLACE_POWER [X] [X] [X] [X] [X] [X] [X] [X] [X] +GET_ITER [X] [X] [X] [X] [X] [X] [X] [X] [X] STORE_LOCALS ! [X] [X] [X] [X] [ ] -GET_YIELD_FROM_ITER ! [X] [X] [X] -PRINT_EXPR [X] [X] [X] [X] [X] [X] [X] [X] -LOAD_BUILD_CLASS [X] [X] [X] [X] [X] [X] [X] [X] -YIELD_FROM [ ] [ ] [ ] [X] [X] [X] [X] [X] -GET_AWAITABLE [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -<74> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -INPLACE_LSHIFT [X] [X] [X] [X] [X] [X] [X] [X] -INPLACE_RSHIFT [X] [X] [X] [X] [X] [X] [X] [X] -INPLACE_AND [X] [X] [X] [X] [X] [X] [X] [X] -INPLACE_XOR [X] [X] [X] [X] [X] [X] [X] [X] -INPLACE_OR [X] [X] [X] [X] [X] [X] [X] [X] -BREAK_LOOP [X] [X] [X] [X] [X] [X] [X] [X] +GET_YIELD_FROM_ITER ! [X] [X] [X] [X] +PRINT_EXPR [X] [X] [X] [X] [X] [X] [X] [X] [X] +LOAD_BUILD_CLASS [X] [X] [X] [X] [X] [X] [X] [X] [X] +YIELD_FROM [ ] [ ] [ ] [X] [X] [X] [X] [X] [X] +GET_AWAITABLE [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +<74> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +INPLACE_LSHIFT [X] [X] [X] [X] [X] [X] [X] [X] [X] +INPLACE_RSHIFT [X] [X] [X] [X] [X] [X] [X] [X] [X] +INPLACE_AND [X] [X] [X] [X] [X] [X] [X] [X] [X] +INPLACE_XOR [X] [X] [X] [X] [X] [X] [X] [X] [X] +INPLACE_OR [X] [X] [X] [X] [X] [X] [X] [X] [X] +BREAK_LOOP [X] [X] [X] [X] [X] [X] [X] [X] [ ] WITH_CLEANUP ! [X] [X] [X] [X] [X] -WITH_CLEANUP_START ! [X] [X] [X] -WITH_CLEANUP_FINISH [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -RETURN_VALUE [X] [X] [X] [X] [X] [X] [X] [X] -IMPORT_STAR [X] [X] [X] [X] [X] [X] [X] [X] -SETUP_ANNOTATIONS [ ] [ ] [ ] [ ] [ ] [ ] [X] [X] -YIELD_VALUE [X] [X] [X] [X] [X] [X] [X] [X] -POP_BLOCK [X] [X] [X] [X] [X] [X] [X] [X] -END_FINALLY [X] [X] [X] [X] [X] [X] [X] [X] -POP_EXCEPT [X] [X] [X] [X] [X] [X] [X] [X] -STORE_NAME [X] [X] [X] [X] [X] [X] [X] [X] -DELETE_NAME [X] [X] [X] [X] [X] [X] [X] [X] -UNPACK_SEQUENCE [X] [X] [X] [X] [X] [X] [X] [X] -FOR_ITER [X] [X] [X] [X] [X] [X] [X] [X] -UNPACK_EX [X] [X] [X] [X] [X] [X] [X] [X] -STORE_ATTR [X] [X] [X] [X] [X] [X] [X] [X] -DELETE_ATTR [X] [X] [X] [X] [X] [X] [X] [X] -STORE_GLOBAL [X] [X] [X] [X] [X] [X] [X] [X] -DELETE_GLOBAL [X] [X] [X] [X] [X] [X] [X] [X] -DUP_TOPX [X] [X] [ ] [ ] [ ] [ ] [ ] [ ] -LOAD_CONST [X] [X] [X] [X] [X] [X] [X] [X] -LOAD_NAME [X] [X] [X] [X] [X] [X] [X] [X] -BUILD_TUPLE [X] [X] [X] [X] [X] [X] [X] [X] -BUILD_LIST [X] [X] [X] [X] [X] [X] [X] [X] -BUILD_SET [X] [X] [X] [X] [X] [X] [X] [X] -BUILD_MAP [X] [X] [X] [X] [X] [X] [X] [X] -LOAD_ATTR [X] [X] [X] [X] [X] [X] [X] [X] -COMPARE_OP [X] [X] [X] [X] [X] [X] [X] [X] -IMPORT_NAME [X] [X] [X] [X] [X] [X] [X] [X] -IMPORT_FROM [X] [X] [X] [X] [X] [X] [X] [X] -JUMP_FORWARD [X] [X] [X] [X] [X] [X] [X] [X] -JUMP_IF_FALSE (_OR_POP) [X] [X] [+] [+] [+] [+] [+] [+] -JUMP_IF_TRUE (_OR_POP) [X] [X] [+] [+] [+] [+] [+] [+] -JUMP_ABSOLUTE [X] [X] [X] [X] [X] [X] [X] [X] -POP_JUMP_IF_FALSE [ ] [X] [X] [X] [X] [X] [X] [X] -POP_JUMP_IF_TRUE [ ] [X] [X] [X] [X] [X] [X] [X] -LOAD_GLOBAL [X] [X] [X] [X] [X] [X] [X] [X] -<117> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<118> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -CONTINUE_LOOP [X] [X] [X] [X] [X] [X] [X] [X] -SETUP_LOOP [X] [X] [X] [X] [X] [X] [X] [X] -SETUP_EXCEPT [X] [X] [X] [X] [X] [X] [X] [X] -SETUP_FINALLY [X] [X] [X] [X] [X] [X] [X] [X] -<123> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -LOAD_FAST [X] [X] [X] [X] [X] [X] [X] [X] -STORE_FAST [X] [X] [X] [X] [X] [X] [X] [X] -DELETE_FAST [X] [X] [X] [X] [X] [X] [X] [X] -STORE_ANNOTATION [ ] [ ] [ ] [ ] [ ] [ ] [X] [ ] -<128> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<129> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -RAISE_VARARGS [X] [X] [X] [X] [X] [X] [X] [X] -CALL_FUNCTION [X] [X] [X] [X] [X] [X] [X] [X] -MAKE_FUNCTION [X] [X] [X] [X] [X] [X] [X] [X] -BUILD_SLICE [X] [X] [X] [X] [X] [X] [X] [X] -MAKE_CLOSURE [X] [X] [X] [X] [X] [X] [ ] [ ] -LOAD_CLOSURE [X] [X] [X] [X] [X] [X] [X] [X] -LOAD_DEREF [X] [X] [X] [X] [X] [X] [X] [X] -STORE_DEREF [X] [X] [X] [X] [X] [X] [X] [X] -DELETE_DEREF [ ] [ ] [X] [X] [X] [X] [X] [X] -<139> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -CALL_FUNCTION_VAR [X] [X] [X] [X] [X] [X] [ ] [ ] -CALL_FUNCTION_KW [X] [X] [X] [X] [X] [X] [X] [X] +WITH_CLEANUP_START ! [X] [X] [X] [X] +WITH_CLEANUP_FINISH [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +RETURN_VALUE [X] [X] [X] [X] [X] [X] [X] [X] [X] +IMPORT_STAR [X] [X] [X] [X] [X] [X] [X] [X] [X] +SETUP_ANNOTATIONS [ ] [ ] [ ] [ ] [ ] [ ] [X] [X] [X] +YIELD_VALUE [X] [X] [X] [X] [X] [X] [X] [X] [X] +POP_BLOCK [X] [X] [X] [X] [X] [X] [X] [X] [X] +END_FINALLY [X] [X] [X] [X] [X] [X] [X] [X] [X] +POP_EXCEPT [X] [X] [X] [X] [X] [X] [X] [X] [X] +STORE_NAME [X] [X] [X] [X] [X] [X] [X] [X] [X] +DELETE_NAME [X] [X] [X] [X] [X] [X] [X] [X] [X] +UNPACK_SEQUENCE [X] [X] [X] [X] [X] [X] [X] [X] [X] +FOR_ITER [X] [X] [X] [X] [X] [X] [X] [X] [X] +UNPACK_EX [X] [X] [X] [X] [X] [X] [X] [X] [X] +STORE_ATTR [X] [X] [X] [X] [X] [X] [X] [X] [X] +DELETE_ATTR [X] [X] [X] [X] [X] [X] [X] [X] [X] +STORE_GLOBAL [X] [X] [X] [X] [X] [X] [X] [X] [X] +DELETE_GLOBAL [X] [X] [X] [X] [X] [X] [X] [X] [X] +DUP_TOPX [X] [X] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +LOAD_CONST [X] [X] [X] [X] [X] [X] [X] [X] [X] +LOAD_NAME [X] [X] [X] [X] [X] [X] [X] [X] [X] +BUILD_TUPLE [X] [X] [X] [X] [X] [X] [X] [X] [X] +BUILD_LIST [X] [X] [X] [X] [X] [X] [X] [X] [X] +BUILD_SET [X] [X] [X] [X] [X] [X] [X] [X] [X] +BUILD_MAP [X] [X] [X] [X] [X] [X] [X] [X] [X] +LOAD_ATTR [X] [X] [X] [X] [X] [X] [X] [X] [X] +COMPARE_OP [X] [X] [X] [X] [X] [X] [X] [X] [X] +IMPORT_NAME [X] [X] [X] [X] [X] [X] [X] [X] [X] +IMPORT_FROM [X] [X] [X] [X] [X] [X] [X] [X] [X] +JUMP_FORWARD [X] [X] [X] [X] [X] [X] [X] [X] [X] +JUMP_IF_FALSE (_OR_POP) [X] [X] [+] [+] [+] [+] [+] [+] [+] +JUMP_IF_TRUE (_OR_POP) [X] [X] [+] [+] [+] [+] [+] [+] [+] +JUMP_ABSOLUTE [X] [X] [X] [X] [X] [X] [X] [X] [X] +POP_JUMP_IF_FALSE [ ] [X] [X] [X] [X] [X] [X] [X] [X] +POP_JUMP_IF_TRUE [ ] [X] [X] [X] [X] [X] [X] [X] [X] +LOAD_GLOBAL [X] [X] [X] [X] [X] [X] [X] [X] [X] +<117> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<118> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +CONTINUE_LOOP [X] [X] [X] [X] [X] [X] [X] [X] [ ] +SETUP_LOOP [X] [X] [X] [X] [X] [X] [X] [X] [ ] +SETUP_EXCEPT [X] [X] [X] [X] [X] [X] [X] [X] [ ] +SETUP_FINALLY [X] [X] [X] [X] [X] [X] [X] [X] [X] +<123> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +LOAD_FAST [X] [X] [X] [X] [X] [X] [X] [X] [X] +STORE_FAST [X] [X] [X] [X] [X] [X] [X] [X] [X] +DELETE_FAST [X] [X] [X] [X] [X] [X] [X] [X] [X] +STORE_ANNOTATION [ ] [ ] [ ] [ ] [ ] [ ] [X] [ ] [ ] +<128> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<129> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +RAISE_VARARGS [X] [X] [X] [X] [X] [X] [X] [X] [X] +CALL_FUNCTION [X] [X] [X] [X] [X] [X] [X] [X] [X] +MAKE_FUNCTION [X] [X] [X] [X] [X] [X] [X] [X] [X] +BUILD_SLICE [X] [X] [X] [X] [X] [X] [X] [X] [X] +MAKE_CLOSURE [X] [X] [X] [X] [X] [X] [ ] [ ] [ ] +LOAD_CLOSURE [X] [X] [X] [X] [X] [X] [X] [X] [X] +LOAD_DEREF [X] [X] [X] [X] [X] [X] [X] [X] [X] +STORE_DEREF [X] [X] [X] [X] [X] [X] [X] [X] [X] +DELETE_DEREF [ ] [ ] [X] [X] [X] [X] [X] [X] [X] +<139> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +CALL_FUNCTION_VAR [X] [X] [X] [X] [X] [X] [ ] [ ] [ ] +CALL_FUNCTION_KW [X] [X] [X] [X] [X] [X] [X] [X] [X] CALL_FUNCTION_VAR_KW ! [X] [X] [X] [X] [X] [X] -CALL_FUNCTION_EX ! [X] [X] +CALL_FUNCTION_EX ! [X] [X] [X] EXTENDED_ARG ! [X] [X] -SETUP_WITH ! [X] [X] [X] [X] [X] [X] +SETUP_WITH ! [X] [X] [X] [X] [X] [X] [X] <144> ! [ ] [ ] -EXTENDED_ARG ! [X] [X] [X] [X] [X] [X] -LIST_APPEND [ ] [X] [X] [X] [X] [X] [X] [X] -SET_ADD [ ] [X] [X] [X] [X] [X] [X] [X] -MAP_ADD [ ] [X] [X] [X] [X] [X] [X] [X] -LOAD_CLASSDEREF [ ] [ ] [ ] [ ] [X] [X] [X] [X] -BUILD_LIST_UNPACK [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -BUILD_MAP_UNPACK [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -BUILD_MAP_UNPACK_WITH_CALL [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -BUILD_TUPLE_UNPACK [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -BUILD_SET_UNPACK [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -SETUP_ASYNC_WITH [ ] [ ] [ ] [ ] [ ] [X] [X] [X] -FORMAT_VALUE [ ] [ ] [ ] [ ] [ ] [ ] [X] [X] -BUILD_CONST_KEY_MAP [ ] [ ] [ ] [ ] [ ] [ ] [X] [X] -BUILD_STRING [ ] [ ] [ ] [ ] [ ] [ ] [X] [X] -BUILD_TUPLE_UNPACK_WITH_CALL[ ] [ ] [ ] [ ] [ ] [ ] [X] [X] -<159> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -LOAD_METHOD [ ] [ ] [ ] [ ] [ ] [ ] [ ] [X] -CALL_METHOD [ ] [ ] [ ] [ ] [ ] [ ] [ ] [X] -<162> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<163> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +EXTENDED_ARG ! [X] [X] [X] [X] [X] [X] [X] +LIST_APPEND [ ] [X] [X] [X] [X] [X] [X] [X] [X] +SET_ADD [ ] [X] [X] [X] [X] [X] [X] [X] [X] +MAP_ADD [ ] [X] [X] [X] [X] [X] [X] [X] [X] +LOAD_CLASSDEREF [ ] [ ] [ ] [ ] [X] [X] [X] [X] [X] +BUILD_LIST_UNPACK [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +BUILD_MAP_UNPACK [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +BUILD_MAP_UNPACK_WITH_CALL [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +BUILD_TUPLE_UNPACK [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +BUILD_SET_UNPACK [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +SETUP_ASYNC_WITH [ ] [ ] [ ] [ ] [ ] [X] [X] [X] [X] +FORMAT_VALUE [ ] [ ] [ ] [ ] [ ] [ ] [X] [X] [X] +BUILD_CONST_KEY_MAP [ ] [ ] [ ] [ ] [ ] [ ] [X] [X] [X] +BUILD_STRING [ ] [ ] [ ] [ ] [ ] [ ] [X] [X] [X] +BUILD_TUPLE_UNPACK_WITH_CALL[ ] [ ] [ ] [ ] [ ] [ ] [X] [X] [X] +<159> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +LOAD_METHOD [ ] [ ] [ ] [ ] [ ] [ ] [ ] [X] [X] +CALL_METHOD [ ] [ ] [ ] [ ] [ ] [ ] [ ] [X] [X] +CALL_FINALLY [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [X] +POP_FINALLY [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [X] +<164> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<165> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] . . . - 1.0 1.1 1.2 1.3 1.4 1.5 1.6 -TYPE_NULL '0' '0' '0' '0' '0' '0' '0' -TYPE_NONE 'N' 'N' 'N' 'N' 'N' 'N' 'N' -TYPE_ELLIPSIS '.' '.' '.' -TYPE_INT 'i' 'i' 'i' 'i' 'i' 'i' 'i' -TYPE_INT64 'I' 'I' -TYPE_FLOAT 'f' 'f' 'f' 'f' 'f' 'f' 'f' -TYPE_COMPLEX 'x' 'x' 'x' -TYPE_LONG 'l' 'l' 'l' 'l' 'l' 'l' 'l' -TYPE_STRING 's' 's' 's' 's' 's' 's' 's' -TYPE_TUPLE '(' '(' '(' '(' '(' '(' '(' -TYPE_LIST '[' '[' '[' '[' '[' '[' '[' -TYPE_DICT '{' '{' '{' '{' '{' '{' '{' -TYPE_CODE 'C' 'C' 'C' 'c' 'c' 'c' 'c' -TYPE_UNICODE 'u' -TYPE_UNKNOWN '?' '?' '?' '?' '?' '?' '?' + 1.0 1.3 1.4 1.5 1.6 +TYPE_NULL '0' '0' '0' '0' '0' +TYPE_NONE 'N' 'N' 'N' 'N' 'N' +TYPE_ELLIPSIS '.' '.' '.' +TYPE_INT 'i' 'i' 'i' 'i' 'i' +TYPE_INT64 'I' 'I' +TYPE_FLOAT 'f' 'f' 'f' 'f' 'f' +TYPE_COMPLEX 'x' 'x' 'x' +TYPE_LONG 'l' 'l' 'l' 'l' 'l' +TYPE_STRING 's' 's' 's' 's' 's' +TYPE_TUPLE '(' '(' '(' '(' '(' +TYPE_LIST '[' '[' '[' '[' '[' +TYPE_DICT '{' '{' '{' '{' '{' +TYPE_CODE 'C' 'c' 'c' 'c' 'c' +TYPE_UNICODE 'u' +TYPE_UNKNOWN '?' '?' '?' '?' '?' - 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 -TYPE_NULL '0' '0' '0' '0' '0' '0' '0' '0' -TYPE_NONE 'N' 'N' 'N' 'N' 'N' 'N' 'N' 'N' -TYPE_FALSE 'F' 'F' 'F' 'F' 'F' -TYPE_TRUE 'T' 'T' 'T' 'T' 'T' -TYPE_STOPITER 'S' 'S' 'S' 'S' 'S' 'S' -TYPE_ELLIPSIS '.' '.' '.' '.' '.' '.' '.' '.' -TYPE_INT 'i' 'i' 'i' 'i' 'i' 'i' 'i' 'i' -TYPE_INT64 'I' 'I' 'I' 'I' 'I' 'I' 'I' 'I' -TYPE_FLOAT 'f' 'f' 'f' 'f' 'f' 'f' 'f' 'f' -TYPE_BINARY_FLOAT 'g' 'g' 'g' -TYPE_COMPLEX 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' -TYPE_BINARY_COMPLEX 'y' 'y' 'y' -TYPE_LONG 'l' 'l' 'l' 'l' 'l' 'l' 'l' 'l' -TYPE_STRING 's' 's' 's' 's' 's' 's' 's' 's' -TYPE_INTERNED 't' 't' 't' 't' -TYPE_STRINGREF 'R' 'R' 'R' 'R' -TYPE_TUPLE '(' '(' '(' '(' '(' '(' '(' '(' -TYPE_LIST '[' '[' '[' '[' '[' '[' '[' '[' -TYPE_DICT '{' '{' '{' '{' '{' '{' '{' '{' -TYPE_CODE 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' -TYPE_UNICODE 'u' 'u' 'u' 'u' 'u' 'u' 'u' 'u' -TYPE_UNKNOWN '?' '?' '?' '?' '?' '?' '?' '?' -TYPE_SET '<' '<' '<' -TYPE_FROZENSET '>' '>' '>' + 2.0 2.2 2.3 2.4 2.5 +TYPE_NULL '0' '0' '0' '0' '0' +TYPE_NONE 'N' 'N' 'N' 'N' 'N' +TYPE_FALSE 'F' 'F' 'F' +TYPE_TRUE 'T' 'T' 'T' +TYPE_STOPITER 'S' 'S' 'S' 'S' +TYPE_ELLIPSIS '.' '.' '.' '.' '.' +TYPE_INT 'i' 'i' 'i' 'i' 'i' +TYPE_INT64 'I' 'I' 'I' 'I' 'I' +TYPE_FLOAT 'f' 'f' 'f' 'f' 'f' +TYPE_BINARY_FLOAT 'g' +TYPE_COMPLEX 'x' 'x' 'x' 'x' 'x' +TYPE_BINARY_COMPLEX 'y' +TYPE_LONG 'l' 'l' 'l' 'l' 'l' +TYPE_STRING 's' 's' 's' 's' 's' +TYPE_INTERNED 't' 't' +TYPE_STRINGREF 'R' 'R' +TYPE_TUPLE '(' '(' '(' '(' '(' +TYPE_LIST '[' '[' '[' '[' '[' +TYPE_DICT '{' '{' '{' '{' '{' +TYPE_CODE 'c' 'c' 'c' 'c' 'c' +TYPE_UNICODE 'u' 'u' 'u' 'u' 'u' +TYPE_UNKNOWN '?' '?' '?' '?' '?' +TYPE_SET '<' +TYPE_FROZENSET '>' - 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 -TYPE_NULL '0' '0' '0' '0' '0' '0' '0' '0' -TYPE_NONE 'N' 'N' 'N' 'N' 'N' 'N' 'N' 'N' -TYPE_FALSE 'F' 'F' 'F' 'F' 'F' 'F' 'F' 'F' -TYPE_TRUE 'T' 'T' 'T' 'T' 'T' 'T' 'T' 'T' -TYPE_STOPITER 'S' 'S' 'S' 'S' 'S' 'S' 'S' 'S' -TYPE_ELLIPSIS '.' '.' '.' '.' '.' '.' '.' '.' -TYPE_INT 'i' 'i' 'i' 'i' 'i' 'i' 'i' 'i' -TYPE_INT64 'I' 'I' 'I' 'I' -TYPE_FLOAT 'f' 'f' 'f' 'f' 'f' 'f' 'f' 'f' -TYPE_BINARY_FLOAT 'g' 'g' 'g' 'g' 'g' 'g' 'g' 'g' -TYPE_COMPLEX 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' -TYPE_BINARY_COMPLEX 'y' 'y' 'y' 'y' 'y' 'y' 'y' 'y' -TYPE_LONG 'l' 'l' 'l' 'l' 'l' 'l' 'l' 'l' -TYPE_STRING 's' 's' 's' 's' 's' 's' 's' 's' -TYPE_INTERNED 't' 't' 't' 't' -TYPE_REF 'r' 'r' 'r' 'r' -TYPE_TUPLE '(' '(' '(' '(' '(' '(' '(' '(' -TYPE_LIST '[' '[' '[' '[' '[' '[' '[' '[' -TYPE_DICT '{' '{' '{' '{' '{' '{' '{' '{' -TYPE_CODE 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' -TYPE_UNICODE 'u' 'u' 'u' 'u' 'u' 'u' 'u' 'u' -TYPE_UNKNOWN '?' '?' '?' '?' '?' '?' '?' '?' -TYPE_SET '<' '<' '<' '<' '<' '<' '<' '<' -TYPE_FROZENSET '>' '>' '>' '>' '>' '>' '>' '>' -TYPE_ASCII 'a' 'a' 'a' 'a' -TYPE_ASCII_INTERNED 'A' 'A' 'A' 'A' -TYPE_SMALL_TUPLE ')' ')' ')' ')' -TYPE_SHORT_ASCII 'z' 'z' 'z' 'z' -TYPE_SHORT_ASCII_INTERNED 'Z' 'Z' 'Z' 'Z' + 3.0 3.4 +TYPE_NULL '0' '0' +TYPE_NONE 'N' 'N' +TYPE_FALSE 'F' 'F' +TYPE_TRUE 'T' 'T' +TYPE_STOPITER 'S' 'S' +TYPE_ELLIPSIS '.' '.' +TYPE_INT 'i' 'i' +TYPE_INT64 'I' +TYPE_FLOAT 'f' 'f' +TYPE_BINARY_FLOAT 'g' 'g' +TYPE_COMPLEX 'x' 'x' +TYPE_BINARY_COMPLEX 'y' 'y' +TYPE_LONG 'l' 'l' +TYPE_STRING 's' 's' +TYPE_INTERNED 't' +TYPE_REF 'r' +TYPE_TUPLE '(' '(' +TYPE_LIST '[' '[' +TYPE_DICT '{' '{' +TYPE_CODE 'c' 'c' +TYPE_UNICODE 'u' 'u' +TYPE_UNKNOWN '?' '?' +TYPE_SET '<' '<' +TYPE_FROZENSET '>' '>' +TYPE_ASCII 'a' +TYPE_ASCII_INTERNED 'A' +TYPE_SMALL_TUPLE ')' +TYPE_SHORT_ASCII 'z' +TYPE_SHORT_ASCII_INTERNED 'Z' -[TYPE_CODE] 1.0 1.3 1.5 2.1 2.3 3.0 -argcount short short short long long -kwonlyargc long -nlocals short short short long long -stacksize short short long long -flags short short short long long -code Obj Obj Obj Obj Obj Obj -consts Obj Obj Obj Obj Obj Obj -names Obj Obj Obj Obj Obj Obj -varnames Obj Obj Obj Obj Obj -freevars Obj Obj Obj -cellvars Obj Obj Obj -filename Obj Obj Obj Obj Obj Obj -name Obj Obj Obj Obj Obj Obj -firstline short short long long -lntable Obj Obj Obj Obj +[TYPE_CODE] 1.0 1.3 1.5 2.1 2.3 3.0 3.8 +argcount short short short long long long +posonlyargc long +kwonlyargc long long +nlocals short short short long long long +stacksize short short long long long +flags short short short long long long +code Obj Obj Obj Obj Obj Obj Obj +consts Obj Obj Obj Obj Obj Obj Obj +names Obj Obj Obj Obj Obj Obj Obj +varnames Obj Obj Obj Obj Obj Obj +freevars Obj Obj Obj Obj +cellvars Obj Obj Obj Obj +filename Obj Obj Obj Obj Obj Obj Obj +name Obj Obj Obj Obj Obj Obj Obj +firstline short short long long long +lntable Obj Obj Obj Obj Obj diff --git a/bytecode.cpp b/bytecode.cpp index fddb0857..e5756843 100644 --- a/bytecode.cpp +++ b/bytecode.cpp @@ -31,6 +31,7 @@ DECLARE_PYTHON(3, 4) DECLARE_PYTHON(3, 5) DECLARE_PYTHON(3, 6) DECLARE_PYTHON(3, 7) +DECLARE_PYTHON(3, 8) const char* Pyc::OpcodeName(int opcode) { @@ -95,6 +96,7 @@ int Pyc::ByteToOpcode(int maj, int min, int opcode) case 5: return python_35_map(opcode); case 6: return python_36_map(opcode); case 7: return python_37_map(opcode); + case 8: return python_38_map(opcode); } break; } diff --git a/bytecode_ops.inl b/bytecode_ops.inl index 2af1bdea..fa1fdb36 100644 --- a/bytecode_ops.inl +++ b/bytecode_ops.inl @@ -91,6 +91,8 @@ OPCODE(GET_ANEXT) OPCODE(BEFORE_ASYNC_WITH) OPCODE(GET_YIELD_FROM_ITER) OPCODE(GET_AWAITABLE) +OPCODE(BEGIN_FINALLY) +OPCODE(END_ASYNC_FOR) /* Has parameter word */ OPCODE_A_FIRST(STORE_NAME) @@ -170,3 +172,5 @@ OPCODE_A(BUILD_STRING) OPCODE_A(BUILD_TUPLE_UNPACK_WITH_CALL) OPCODE_A(LOAD_METHOD) OPCODE_A(CALL_METHOD) +OPCODE_A(CALL_FINALLY) +OPCODE_A(POP_FINALLY) diff --git a/bytes/comp_map.py b/bytes/comp_map.py index f8590ec9..7a0b92a8 100755 --- a/bytes/comp_map.py +++ b/bytes/comp_map.py @@ -27,7 +27,7 @@ maplist = [ 10, 11, 13, 14, 15, 16, 20, 21, 22, 23, 24, 25, 26, 27, - 30, 31, 32, 33, 34, 35, 36, 37 ] + 30, 31, 32, 33, 34, 35, 36, 37, 38 ] for mapver in maplist: infile = open(os.path.join(sys.argv[1], 'python_%d.map' % mapver), 'rt') diff --git a/bytes/python_38.map b/bytes/python_38.map new file mode 100644 index 00000000..598b108b --- /dev/null +++ b/bytes/python_38.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 +50 GET_AITER +51 GET_ANEXT +52 BEFORE_ASYNC_WITH +53 BEGIN_FINALLY +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 +75 INPLACE_LSHIFT +76 INPLACE_RSHIFT +77 INPLACE_AND +78 INPLACE_XOR +79 INPLACE_OR +81 WITH_CLEANUP_START +82 WITH_CLEANUP_FINISH +83 RETURN_VALUE +84 IMPORT_STAR +85 SETUP_ANNOTATIONS +86 YIELD_VALUE +87 POP_BLOCK +88 END_FINALLY +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 +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 +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 +149 BUILD_LIST_UNPACK_A +150 BUILD_MAP_UNPACK_A +151 BUILD_MAP_UNPACK_WITH_CALL_A +152 BUILD_TUPLE_UNPACK_A +153 BUILD_SET_UNPACK_A +154 SETUP_ASYNC_WITH_A +155 FORMAT_VALUE_A +156 BUILD_CONST_KEY_MAP_A +157 BUILD_STRING_A +158 BUILD_TUPLE_UNPACK_WITH_CALL_A +160 LOAD_METHOD_A +161 CALL_METHOD_A +162 CALL_FINALLY_A +163 POP_FINALLY_A diff --git a/pyc_code.cpp b/pyc_code.cpp index a4ad8244..06ce5f39 100644 --- a/pyc_code.cpp +++ b/pyc_code.cpp @@ -9,6 +9,11 @@ void PycCode::load(PycData* stream, PycModule* mod) else if (mod->verCompare(2, 3) >= 0) m_argCount = stream->get32(); + if (mod->verCompare(3, 8) >= 0) + m_posOnlyArgCount = stream->get32(); + else + m_posOnlyArgCount = 0; + if (mod->majorVer() >= 3) m_kwOnlyArgCount = stream->get32(); else diff --git a/pyc_code.h b/pyc_code.h index 9c5f8153..fa831191 100644 --- a/pyc_code.h +++ b/pyc_code.h @@ -28,12 +28,13 @@ class PycCode : public PycObject { }; PycCode(int type = TYPE_CODE) - : PycObject(type), m_argCount(0), m_kwOnlyArgCount(0), m_numLocals(0), - m_stackSize(0), m_flags(0), m_firstLine(0) { } + : PycObject(type), m_argCount(), m_posOnlyArgCount(), m_kwOnlyArgCount(), + m_numLocals(), m_stackSize(), m_flags(), m_firstLine() { } void load(class PycData* stream, class PycModule* mod) override; int argCount() const { return m_argCount; } + int posOnlyArgCount() const { return m_posOnlyArgCount; } int kwOnlyArgCount() const { return m_kwOnlyArgCount; } int numLocals() const { return m_numLocals; } int stackSize() const { return m_stackSize; } @@ -50,13 +51,19 @@ class PycCode : public PycObject { PycRef lnTable() const { return m_lnTable; } PycRef getConst(int idx) const - { return m_consts->get(idx); } + { + return m_consts->get(idx); + } PycRef getName(int idx) const - { return m_names->get(idx).require_cast(); } + { + return m_names->get(idx).require_cast(); + } PycRef getVarName(int idx) const - { return m_varNames->get(idx).require_cast(); } + { + return m_varNames->get(idx).require_cast(); + } PycRef getCellVar(int idx) const { @@ -74,7 +81,8 @@ class PycCode : public PycObject { } private: - int m_argCount, m_kwOnlyArgCount, m_numLocals, m_stackSize, m_flags; + int m_argCount, m_posOnlyArgCount, m_kwOnlyArgCount, m_numLocals; + int m_stackSize, m_flags; PycRef m_code; PycRef m_consts; PycRef m_names; diff --git a/pyc_module.cpp b/pyc_module.cpp index 4e782aec..0d763716 100644 --- a/pyc_module.cpp +++ b/pyc_module.cpp @@ -146,6 +146,12 @@ void PycModule::setVersion(unsigned int magic) m_unicode = true; break; + case MAGIC_3_8: + m_maj = 3; + m_min = 8; + m_unicode = true; + break; + /* Bad Magic detected */ default: m_maj = -1; diff --git a/pyc_module.h b/pyc_module.h index 1daf5564..21846b6a 100644 --- a/pyc_module.h +++ b/pyc_module.h @@ -30,10 +30,9 @@ enum PycMagic { MAGIC_3_5_3 = 0x0A0D0D17, MAGIC_3_6 = 0x0A0D0D33, MAGIC_3_7 = 0x0A0D0D42, + MAGIC_3_8 = 0x0A0D0D55, }; -#define PYC_VERSION(maj, min) MAGIC_##maj##_##min - class PycModule { public: PycModule() : m_maj(-1), m_min(-1), m_unicode(false) { } diff --git a/pycdas.cpp b/pycdas.cpp index f2db6599..bb14665b 100644 --- a/pycdas.cpp +++ b/pycdas.cpp @@ -86,6 +86,8 @@ void output_object(PycRef obj, PycModule* mod, int indent) iprintf(indent + 1, "File Name: %s\n", codeObj->fileName()->value()); iprintf(indent + 1, "Object Name: %s\n", codeObj->name()->value()); iprintf(indent + 1, "Arg Count: %d\n", codeObj->argCount()); + if (mod->verCompare(3, 8) >= 0) + iprintf(indent + 1, "Pos Only Arg Count: %d\n", codeObj->posOnlyArgCount()); if (mod->majorVer() >= 3) iprintf(indent + 1, "KW Only Arg Count: %d\n", codeObj->kwOnlyArgCount()); iprintf(indent + 1, "Locals: %d\n", codeObj->numLocals()); diff --git a/scripts/pymultic b/scripts/pymultic index a2310e23..ff8f4506 100755 --- a/scripts/pymultic +++ b/scripts/pymultic @@ -31,6 +31,7 @@ PYVERS = { '3.5': '3.5.7', '3.6': '3.6.9', '3.7': '3.7.4', + '3.8': '3.8.0', } OLD_PYTHONS = ('1.0', '1.1', '1.2', '1.3', '1.4', '1.5') @@ -53,7 +54,7 @@ def fetch_python(snekdir, version): tarball = 'Python-{}.tgz'.format(realver) url = '{}/{}/{}'.format(PYURL, realver, tarball) - pyver_dir = 'Python-{}'.format(realver) + pyver_dir = os.path.join(snekdir, 'Python-{}'.format(realver)) if os.path.exists(pyver_dir): return @@ -72,16 +73,16 @@ def fetch_python(snekdir, version): sys.exit(1) print('Extracting Python {}...'.format(realver)) - if subprocess.call(['tar', 'xaf', tarfile]) != 0: + if subprocess.call(['tar', 'xaf', tarfile], cwd=snekdir) != 0: sys.exit(1) - if os.path.exists('python-{}'.format(realver)) \ + if os.path.exists(os.path.join(snekdir, 'python-{}'.format(realver))) \ and not os.path.exists(pyver_dir): # The dual check prevents useless renames on case-insensitive # file systems - os.rename('python-{}'.format(realver), pyver_dir) + os.rename(os.path.join(snekdir, 'python-{}'.format(realver)), pyver_dir) - patch_file = '{}/python-builds/Python-{}.patch'.format(snekdir, realver) + patch_file = os.path.join(snekdir, 'python-builds', 'Python-{}.patch'.format(realver)) if os.path.exists(patch_file): if subprocess.call(['patch', '-p1', '-i', patch_file], cwd=pyver_dir) != 0: sys.exit(1)