diff --git a/.hgignore b/.hgignore index bd605de..f3e3cd6 100644 --- a/.hgignore +++ b/.hgignore @@ -8,4 +8,4 @@ bin/pycdas bin/pycdc bin/.*\.py bin/.*\.pyc -^test/ +bytes/.*\.cpp diff --git a/Makefile b/Makefile index ff82ccd..1993dab 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,8 @@ BYTES = \ out/python_26.o \ out/python_27.o \ out/python_30.o \ - out/python_31.o + out/python_31.o \ + out/python_32.o ALL = \ bin/pycdas \ diff --git a/PythonBytecode.txt b/PythonBytecode.txt index 12ef1a9..b83958d 100644 --- a/PythonBytecode.txt +++ b/PythonBytecode.txt @@ -1,7 +1,7 @@ Python MAGIC Python MAGIC Python MAGIC 1.0 0x00999902 2.0 0x0A0DC687 3.0 0x0A0D0C3A 1.1 0x00999903 2.1 0x0A0DEB2A 3.1 0x0A0D0C4E -1.2 0x00999903 2.2 0x0A0DED2D +1.2 0x00999903 2.2 0x0A0DED2D 3.2 0x0A0D0C6C 1.3 0x0A0D2E89 2.3 0x0A0DF23B 1.4 0x0A0D1704 2.4 0x0A0DF26D 1.5 0x0A0D4E99 2.5 0x0A0DF2B3 @@ -347,36 +347,37 @@ MAP_ADD [ ] [ ] [ ] [ ] [ ] [ ] [ ] 3.0 3.1 3.2 -STOP_CODE [X] [X] [ ] -POP_TOP [X] [X] [ ] -ROT_TWO [X] [X] [ ] -ROT_THREE [X] [X] [ ] -DUP_TOP [X] [X] [ ] -ROT_FOUR [X] [X] [ ] +STOP_CODE [X] [X] [X] +POP_TOP [X] [X] [X] +ROT_TWO [X] [X] [X] +ROT_THREE [X] [X] [X] +DUP_TOP [X] [X] [X] +ROT_FOUR ! [X] [X] +DUP_TOP_TWO ! [X] <6> [ ] [ ] [ ] <7> [ ] [ ] [ ] <8> [ ] [ ] [ ] -NOP [X] [X] [ ] -UNARY_POSITIVE [X] [X] [ ] -UNARY_NEGATIVE [X] [X] [ ] -UNARY_NOT [X] [X] [ ] +NOP [X] [X] [X] +UNARY_POSITIVE [X] [X] [X] +UNARY_NEGATIVE [X] [X] [X] +UNARY_NOT [X] [X] [X] <13> [ ] [ ] [ ] <14> [ ] [ ] [ ] -UNARY_INVERT [X] [X] [ ] +UNARY_INVERT [X] [X] [X] <16> [ ] [ ] [ ] SET_ADD [X] [ ] [ ] LIST_APPEND [X] [ ] [ ] -BINARY_POWER [X] [X] [ ] -BINARY_MULTIPLY [X] [X] [ ] +BINARY_POWER [X] [X] [X] +BINARY_MULTIPLY [X] [X] [X] <21> [ ] [ ] [ ] -BINARY_MODULO [X] [X] [ ] -BINARY_ADD [X] [X] [ ] -BINARY_SUBTRACT [X] [X] [ ] -BINARY_SUBSCR [X] [X] [ ] -BINARY_FLOOR_DIVIDE [X] [X] [ ] -BINARY_TRUE_DIVIDE [X] [X] [ ] -INPLACE_FLOOR_DIVIDE [X] [X] [ ] -INPLACE_TRUE_DIVIDE [X] [X] [ ] +BINARY_MODULO [X] [X] [X] +BINARY_ADD [X] [X] [X] +BINARY_SUBTRACT [X] [X] [X] +BINARY_SUBSCR [X] [X] [X] +BINARY_FLOOR_DIVIDE [X] [X] [X] +BINARY_TRUE_DIVIDE [X] [X] [X] +INPLACE_FLOOR_DIVIDE [X] [X] [X] +INPLACE_TRUE_DIVIDE [X] [X] [X] <30> [ ] [ ] [ ] <31> [ ] [ ] [ ] <32> [ ] [ ] [ ] @@ -401,100 +402,102 @@ INPLACE_TRUE_DIVIDE [X] [X] [ ] <51> [ ] [ ] [ ] <52> [ ] [ ] [ ] <53> [ ] [ ] [ ] -STORE_MAP [X] [X] [ ] -INPLACE_ADD [X] [X] [ ] -INPLACE_SUBTRACT [X] [X] [ ] -INPLACE_MULTIPLY [X] [X] [ ] +STORE_MAP [X] [X] [X] +INPLACE_ADD [X] [X] [X] +INPLACE_SUBTRACT [X] [X] [X] +INPLACE_MULTIPLY [X] [X] [X] <58> [ ] [ ] [ ] -INPLACE_MODULO [X] [X] [ ] -STORE_SUBSCR [X] [X] [ ] -DELETE_SUBSCR [X] [X] [ ] -BINARY_LSHIFT [X] [X] [ ] -BINARY_RSHIFT [X] [X] [ ] -BINARY_AND [X] [X] [ ] -BINARY_XOR [X] [X] [ ] -BINARY_OR [X] [X] [ ] -INPLACE_POWER [X] [X] [ ] -GET_ITER [X] [X] [ ] -STORE_LOCALS [X] [X] [ ] -PRINT_EXPR [X] [X] [ ] -LOAD_BUILD_CLASS [X] [X] [ ] +INPLACE_MODULO [X] [X] [X] +STORE_SUBSCR [X] [X] [X] +DELETE_SUBSCR [X] [X] [X] +BINARY_LSHIFT [X] [X] [X] +BINARY_RSHIFT [X] [X] [X] +BINARY_AND [X] [X] [X] +BINARY_XOR [X] [X] [X] +BINARY_OR [X] [X] [X] +INPLACE_POWER [X] [X] [X] +GET_ITER [X] [X] [X] +STORE_LOCALS [X] [X] [X] +PRINT_EXPR [X] [X] [X] +LOAD_BUILD_CLASS [X] [X] [X] <72> [ ] [ ] [ ] <73> [ ] [ ] [ ] <74> [ ] [ ] [ ] -INPLACE_LSHIFT [X] [X] [ ] -INPLACE_RSHIFT [X] [X] [ ] -INPLACE_AND [X] [X] [ ] -INPLACE_XOR [X] [X] [ ] -INPLACE_OR [X] [X] [ ] -BREAK_LOOP [X] [X] [ ] -WITH_CLEANUP [X] [X] [ ] +INPLACE_LSHIFT [X] [X] [X] +INPLACE_RSHIFT [X] [X] [X] +INPLACE_AND [X] [X] [X] +INPLACE_XOR [X] [X] [X] +INPLACE_OR [X] [X] [X] +BREAK_LOOP [X] [X] [X] +WITH_CLEANUP [X] [X] [X] <82> [ ] [ ] [ ] -RETURN_VALUE [X] [X] [ ] -IMPORT_STAR [X] [X] [ ] +RETURN_VALUE [X] [X] [X] +IMPORT_STAR [X] [X] [X] <85> [ ] [ ] [ ] -YIELD_VALUE [X] [X] [ ] -POP_BLOCK [X] [X] [ ] -END_FINALLY [X] [X] [ ] -POP_EXCEPT [X] [X] [ ] -STORE_NAME [X] [X] [ ] -DELETE_NAME [X] [X] [ ] -UNPACK_SEQUENCE [X] [X] [ ] -FOR_ITER [X] [X] [ ] -UNPACK_EX [X] [X] [ ] -STORE_ATTR [X] [X] [ ] -DELETE_ATTR [X] [X] [ ] -STORE_GLOBAL [X] [X] [ ] -DELETE_GLOBAL [X] [X] [ ] +YIELD_VALUE [X] [X] [X] +POP_BLOCK [X] [X] [X] +END_FINALLY [X] [X] [X] +POP_EXCEPT [X] [X] [X] +STORE_NAME [X] [X] [X] +DELETE_NAME [X] [X] [X] +UNPACK_SEQUENCE [X] [X] [X] +FOR_ITER [X] [X] [X] +UNPACK_EX [X] [X] [X] +STORE_ATTR [X] [X] [X] +DELETE_ATTR [X] [X] [X] +STORE_GLOBAL [X] [X] [X] +DELETE_GLOBAL [X] [X] [X] DUP_TOPX [X] [X] [ ] -LOAD_CONST [X] [X] [ ] -LOAD_NAME [X] [X] [ ] -BUILD_TUPLE [X] [X] [ ] -BUILD_LIST [X] [X] [ ] -BUILD_SET [X] [X] [ ] -BUILD_MAP [X] [X] [ ] -LOAD_ATTR [X] [X] [ ] -COMPARE_OP [X] [X] [ ] -IMPORT_NAME [X] [X] [ ] -IMPORT_FROM [X] [X] [ ] -JUMP_FORWARD [X] [X] [ ] -JUMP_IF_FALSE [X] [X] [ ] -JUMP_IF_TRUE [X] [X] [ ] -JUMP_ABSOLUTE [X] [X] [ ] -POP_JUMP_IF_FALSE [ ] [X] [ ] -POP_JUMP_IF_TRUE [ ] [X] [ ] -LOAD_GLOBAL [X] [X] [ ] +LOAD_CONST [X] [X] [X] +LOAD_NAME [X] [X] [X] +BUILD_TUPLE [X] [X] [X] +BUILD_LIST [X] [X] [X] +BUILD_SET [X] [X] [X] +BUILD_MAP [X] [X] [X] +LOAD_ATTR [X] [X] [X] +COMPARE_OP [X] [X] [X] +IMPORT_NAME [X] [X] [X] +IMPORT_FROM [X] [X] [X] +JUMP_FORWARD [X] [X] [X] +JUMP_IF_FALSE (_OR_POP) [X] [X] [+] +JUMP_IF_TRUE (_OR_POP) [X] [X] [+] +JUMP_ABSOLUTE [X] [X] [X] +POP_JUMP_IF_FALSE [ ] [X] [X] +POP_JUMP_IF_TRUE [ ] [X] [X] +LOAD_GLOBAL [X] [X] [X] <117> [ ] [ ] [ ] <118> [ ] [ ] [ ] -CONTINUE_LOOP [X] [X] [ ] -SETUP_LOOP [X] [X] [ ] -SETUP_EXCEPT [X] [X] [ ] -SETUP_FINALLY [X] [X] [ ] +CONTINUE_LOOP [X] [X] [X] +SETUP_LOOP [X] [X] [X] +SETUP_EXCEPT [X] [X] [X] +SETUP_FINALLY [X] [X] [X] <123> [ ] [ ] [ ] -LOAD_FAST [X] [X] [ ] -STORE_FAST [X] [X] [ ] -DELETE_FAST [X] [X] [ ] +LOAD_FAST [X] [X] [X] +STORE_FAST [X] [X] [X] +DELETE_FAST [X] [X] [X] <127> [ ] [ ] [ ] <128> [ ] [ ] [ ] <129> [ ] [ ] [ ] -RAISE_VARARGS [X] [X] [ ] -CALL_FUNCTION [X] [X] [ ] -MAKE_FUNCTION [X] [X] [ ] -BUILD_SLICE [X] [X] [ ] -MAKE_CLOSURE [X] [X] [ ] -LOAD_CLOSURE [X] [X] [ ] -LOAD_DEREF [X] [X] [ ] -STORE_DEREF [X] [X] [ ] -<138> [ ] [ ] [ ] +RAISE_VARARGS [X] [X] [X] +CALL_FUNCTION [X] [X] [X] +MAKE_FUNCTION [X] [X] [X] +BUILD_SLICE [X] [X] [X] +MAKE_CLOSURE [X] [X] [X] +LOAD_CLOSURE [X] [X] [X] +LOAD_DEREF [X] [X] [X] +STORE_DEREF [X] [X] [X] +DELETE_DEREF [ ] [ ] [X] <139> [ ] [ ] [ ] -CALL_FUNCTION_VAR [X] [X] [ ] -CALL_FUNCTION_KW [X] [X] [ ] -CALL_FUNCTION_VAR_KW [X] [X] [ ] -EXTENDED_ARG [X] [X] [ ] -<144> [ ] [ ] [ ] -LIST_APPEND [ ] [X] [ ] -SET_ADD [ ] [X] [ ] -MAP_ADD [ ] [X] [ ] +CALL_FUNCTION_VAR [X] [X] [X] +CALL_FUNCTION_KW [X] [X] [X] +CALL_FUNCTION_VAR_KW [X] [X] [X] +EXTENDED_ARG ! [X] [X] +SETUP_WITH ! [X] +<144> ! [ ] [ ] +EXTENDED_ARG ! [X] +LIST_APPEND [ ] [X] [X] +SET_ADD [ ] [X] [X] +MAP_ADD [ ] [X] [X] <148> [ ] [ ] [ ] <149> [ ] [ ] [ ] <150> [ ] [ ] [ ] @@ -558,28 +561,28 @@ TYPE_FROZENSET '>' '>' 3.0 3.1 3.2 -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' '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_TUPLE '(' '(' -TYPE_LIST '[' '[' -TYPE_DICT '{' '{' -TYPE_CODE 'c' 'c' -TYPE_UNICODE 'u' 'u' -TYPE_UNKNOWN '?' '?' -TYPE_SET '<' '<' -TYPE_FROZENSET '>' '>' +TYPE_NULL '0' '0' '0' +TYPE_NONE 'N' 'N' 'N' +TYPE_FALSE 'F' 'F' 'F' +TYPE_TRUE 'T' 'T' 'T' +TYPE_STOPITER 'S' 'S' 'S' +TYPE_ELLIPSIS '.' '.' '.' +TYPE_INT 'i' 'i' 'i' +TYPE_INT64 'I' 'I' 'I' +TYPE_FLOAT 'f' 'f' 'f' +TYPE_BINARY_FLOAT 'g' 'g' 'g' +TYPE_COMPLEX 'x' 'x' 'x' +TYPE_BINARY_COMPLEX 'y' 'y' 'y' +TYPE_LONG 'l' 'l' 'l' +TYPE_STRING 's' 's' 's' +TYPE_TUPLE '(' '(' '(' +TYPE_LIST '[' '[' '[' +TYPE_DICT '{' '{' '{' +TYPE_CODE 'c' 'c' 'c' +TYPE_UNICODE 'u' 'u' 'u' +TYPE_UNKNOWN '?' '?' '?' +TYPE_SET '<' '<' '<' +TYPE_FROZENSET '>' '>' '>' [TYPE_CODE] 1.0 1.3 1.5 2.1 2.3 3.0 diff --git a/bytecode.cpp b/bytecode.cpp index e15b92e..9ee48c7 100644 --- a/bytecode.cpp +++ b/bytecode.cpp @@ -25,28 +25,30 @@ DECLARE_PYTHON(2, 6) DECLARE_PYTHON(2, 7) DECLARE_PYTHON(3, 0) DECLARE_PYTHON(3, 1) +DECLARE_PYTHON(3, 2) const char* Pyc::OpcodeName(int opcode) { static const char* opcode_names[] = { - "STOP_CODE", "POP_TOP", "ROT_TWO", "ROT_THREE", "DUP_TOP", "UNARY_POSITIVE", - "UNARY_NEGATIVE", "UNARY_NOT", "UNARY_CONVERT", "UNARY_CALL", - "UNARY_INVERT", "BINARY_POWER", "BINARY_MULTIPLY", "BINARY_DIVIDE", - "BINARY_MODULO", "BINARY_ADD", "BINARY_SUBTRACT", "BINARY_SUBSCR", - "BINARY_CALL", "SLICE_0", "SLICE_1", "SLICE_2", "SLICE_3", "STORE_SLICE_0", - "STORE_SLICE_1", "STORE_SLICE_2", "STORE_SLICE_3", "DELETE_SLICE_0", - "DELETE_SLICE_1", "DELETE_SLICE_2", "DELETE_SLICE_3", "STORE_SUBSCR", - "DELETE_SUBSCR", "BINARY_LSHIFT", "BINARY_RSHIFT", "BINARY_AND", - "BINARY_XOR", "BINARY_OR", "PRINT_EXPR", "PRINT_ITEM", "PRINT_NEWLINE", - "BREAK_LOOP", "RAISE_EXCEPTION", "LOAD_LOCALS", "RETURN_VALUE", - "LOAD_GLOBALS", "EXEC_STMT", "BUILD_FUNCTION", "POP_BLOCK", "END_FINALLY", - "BUILD_CLASS", "ROT_FOUR", "NOP", "LIST_APPEND", "BINARY_FLOOR_DIVIDE", - "BINARY_TRUE_DIVIDE", "INPLACE_FLOOR_DIVIDE", "INPLACE_TRUE_DIVIDE", - "STORE_MAP", "INPLACE_ADD", "INPLACE_SUBTRACT", "INPLACE_MULTIPLY", - "INPLACE_DIVIDE", "INPLACE_MODULO", "INPLACE_POWER", "GET_ITER", - "PRINT_ITEM_TO", "PRINT_NEWLINE_TO", "INPLACE_LSHIFT", "INPLACE_RSHIFT", - "INPLACE_AND", "INPLACE_XOR", "INPLACE_OR", "WITH_CLEANUP", "IMPORT_STAR", - "YIELD_VALUE", "LOAD_BUILD_CLASS", "STORE_LOCALS", "POP_EXCEPT", "SET_ADD", + "STOP_CODE", "POP_TOP", "ROT_TWO", "ROT_THREE", "DUP_TOP", "DUP_TOP_TWO", + "UNARY_POSITIVE", "UNARY_NEGATIVE", "UNARY_NOT", "UNARY_CONVERT", + "UNARY_CALL", "UNARY_INVERT", "BINARY_POWER", "BINARY_MULTIPLY", + "BINARY_DIVIDE", "BINARY_MODULO", "BINARY_ADD", "BINARY_SUBTRACT", + "BINARY_SUBSCR", "BINARY_CALL", "SLICE_0", "SLICE_1", "SLICE_2", "SLICE_3", + "STORE_SLICE_0", "STORE_SLICE_1", "STORE_SLICE_2", "STORE_SLICE_3", + "DELETE_SLICE_0", "DELETE_SLICE_1", "DELETE_SLICE_2", "DELETE_SLICE_3", + "STORE_SUBSCR", "DELETE_SUBSCR", "BINARY_LSHIFT", "BINARY_RSHIFT", + "BINARY_AND", "BINARY_XOR", "BINARY_OR", "PRINT_EXPR", "PRINT_ITEM", + "PRINT_NEWLINE", "BREAK_LOOP", "RAISE_EXCEPTION", "LOAD_LOCALS", + "RETURN_VALUE", "LOAD_GLOBALS", "EXEC_STMT", "BUILD_FUNCTION", "POP_BLOCK", + "END_FINALLY", "BUILD_CLASS", "ROT_FOUR", "NOP", "LIST_APPEND", + "BINARY_FLOOR_DIVIDE", "BINARY_TRUE_DIVIDE", "INPLACE_FLOOR_DIVIDE", + "INPLACE_TRUE_DIVIDE", "STORE_MAP", "INPLACE_ADD", "INPLACE_SUBTRACT", + "INPLACE_MULTIPLY", "INPLACE_DIVIDE", "INPLACE_MODULO", "INPLACE_POWER", + "GET_ITER", "PRINT_ITEM_TO", "PRINT_NEWLINE_TO", "INPLACE_LSHIFT", + "INPLACE_RSHIFT", "INPLACE_AND", "INPLACE_XOR", "INPLACE_OR", + "WITH_CLEANUP", "IMPORT_STAR", "YIELD_VALUE", "LOAD_BUILD_CLASS", + "STORE_LOCALS", "POP_EXCEPT", "SET_ADD", "STORE_NAME", "DELETE_NAME", "UNPACK_TUPLE", "UNPACK_LIST", "UNPACK_ARG", "STORE_ATTR", "DELETE_ATTR", "STORE_GLOBAL", "DELETE_GLOBAL", @@ -60,8 +62,9 @@ const char* Pyc::OpcodeName(int opcode) "CALL_FUNCTION_KW", "CALL_FUNCTION_VAR_KW", "UNPACK_SEQUENCE", "FOR_ITER", "DUP_TOPX", "BUILD_SET", "JUMP_IF_FALSE_OR_POP", "JUMP_IF_TRUE_OR_POP", "POP_JUMP_IF_FALSE", "POP_JUMP_IF_TRUE", "CONTINUE_LOOP", "MAKE_CLOSURE", - "LOAD_CLOSURE", "LOAD_DEREF", "STORE_DEREF", "EXTENDED_ARG", "SETUP_WITH", - "SET_ADD", "MAP_ADD", "UNPACK_EX", "LIST_APPEND" + "LOAD_CLOSURE", "LOAD_DEREF", "STORE_DEREF", "DELETE_DEREF", + "EXTENDED_ARG", "SETUP_WITH", "SET_ADD", "MAP_ADD", "UNPACK_EX", + "LIST_APPEND" }; if (opcode < 0) @@ -104,6 +107,7 @@ int Pyc::ByteToOpcode(int maj, int min, int opcode) switch (min) { case 0: return python_30_map(opcode); case 1: return python_31_map(opcode); + case 2: return python_32_map(opcode); } break; } diff --git a/bytecode.h b/bytecode.h index 1845d9a..4f71523 100644 --- a/bytecode.h +++ b/bytecode.h @@ -6,9 +6,9 @@ namespace Pyc { enum Opcode { /* No parameter word */ - STOP_CODE, POP_TOP, ROT_TWO, ROT_THREE, DUP_TOP, UNARY_POSITIVE, - UNARY_NEGATIVE, UNARY_NOT, UNARY_CONVERT, UNARY_CALL, UNARY_INVERT, - BINARY_POWER, BINARY_MULTIPLY, BINARY_DIVIDE, BINARY_MODULO, + STOP_CODE, POP_TOP, ROT_TWO, ROT_THREE, DUP_TOP, DUP_TOP_TWO, + UNARY_POSITIVE, UNARY_NEGATIVE, UNARY_NOT, UNARY_CONVERT, UNARY_CALL, + UNARY_INVERT, BINARY_POWER, BINARY_MULTIPLY, BINARY_DIVIDE, BINARY_MODULO, BINARY_ADD, BINARY_SUBTRACT, BINARY_SUBSCR, BINARY_CALL, SLICE_0, SLICE_1, SLICE_2, SLICE_3, STORE_SLICE_0, STORE_SLICE_1, STORE_SLICE_2, STORE_SLICE_3, DELETE_SLICE_0, DELETE_SLICE_1, @@ -40,8 +40,9 @@ enum Opcode { CALL_FUNCTION_KW_A, CALL_FUNCTION_VAR_KW_A, UNPACK_SEQUENCE_A, FOR_ITER_A, DUP_TOPX_A, BUILD_SET_A, JUMP_IF_FALSE_OR_POP_A, JUMP_IF_TRUE_OR_POP_A, POP_JUMP_IF_FALSE_A, POP_JUMP_IF_TRUE_A, CONTINUE_LOOP_A, MAKE_CLOSURE_A, - LOAD_CLOSURE_A, LOAD_DEREF_A, STORE_DEREF_A, EXTENDED_ARG_A, SETUP_WITH_A, - SET_ADD_A, MAP_ADD_A, UNPACK_EX_A, LIST_APPEND_A, + LOAD_CLOSURE_A, LOAD_DEREF_A, STORE_DEREF_A, DELETE_DEREF_A, + EXTENDED_ARG_A, SETUP_WITH_A, SET_ADD_A, MAP_ADD_A, UNPACK_EX_A, + LIST_APPEND_A, PYC_LAST_OPCODE, PYC_INVALID_OPCODE = -1, diff --git a/bytes/comp_map.py b/bytes/comp_map.py index dd5cea3..2f723a3 100755 --- a/bytes/comp_map.py +++ b/bytes/comp_map.py @@ -18,7 +18,7 @@ maplist = [ 'python_10', 'python_11', 'python_13', 'python_14', 'python_15', 'python_16', 'python_20', 'python_21', 'python_22', 'python_23', 'python_24', 'python_25', 'python_26', 'python_27', 'python_30', - 'python_31' ] + 'python_31', 'python_32' ] for mapfile in maplist: infile = open(mapfile + '.map', 'rt') diff --git a/bytes/python_32.map b/bytes/python_32.map new file mode 100644 index 0000000..031d227 --- /dev/null +++ b/bytes/python_32.map @@ -0,0 +1,101 @@ +0 STOP_CODE +1 POP_TOP +2 ROT_TWO +3 ROT_THREE +4 DUP_TOP +5 DUP_TOP_TWO +9 NOP +10 UNARY_POSITIVE +11 UNARY_NEGATIVE +12 UNARY_NOT +15 UNARY_INVERT +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 +54 STORE_MAP +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 STORE_LOCALS +70 PRINT_EXPR +71 LOAD_BUILD_CLASS +75 INPLACE_LSHIFT +76 INPLACE_RSHIFT +77 INPLACE_AND +78 INPLACE_XOR +79 INPLACE_OR +80 BREAK_LOOP +81 WITH_CLEANUP +83 RETURN_VALUE +84 IMPORT_STAR +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 +119 CONTINUE_LOOP_A +120 SETUP_LOOP_A +121 SETUP_EXCEPT_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 +134 MAKE_CLOSURE_A +135 LOAD_CLOSURE_A +136 LOAD_DEREF_A +137 STORE_DEREF_A +138 DELETE_DEREF_A +140 CALL_FUNCTION_VAR_A +141 CALL_FUNCTION_KW_A +142 CALL_FUNCTION_VAR_KW_A +143 SETUP_WITH_A +144 EXTENDED_ARG_A +145 LIST_APPEND_A +146 SET_ADD_A +147 MAP_ADD_A diff --git a/module.cpp b/module.cpp index 0788cf1..ae2a87e 100644 --- a/module.cpp +++ b/module.cpp @@ -109,6 +109,13 @@ void PycModule::setVersion(unsigned int magic) m_unicode = true; break; + /* 3.2 stops using the unicode increment */ + case MAGIC_3_2: + m_maj = 3; + m_min = 2; + m_unicode = true; + break; + /* Bad Magic detected */ default: m_maj = -1; diff --git a/module.h b/module.h index 431f4ad..98bf336 100644 --- a/module.h +++ b/module.h @@ -23,6 +23,7 @@ enum PycMagic { MAGIC_3_0 = 0x0A0D0C3A, MAGIC_3_1 = 0x0A0D0C4E, + MAGIC_3_2 = 0x0A0D0C6C, }; #define PYC_VERSION(maj, min) MAGIC_##maj##_##min