diff --git a/PythonBytecode.txt b/PythonBytecode.txt index ea87e78..12ef1a9 100644 --- a/PythonBytecode.txt +++ b/PythonBytecode.txt @@ -176,154 +176,159 @@ CALL_FUNCTION_VAR_KW [ ] [ ] [ ] [ ] [ ] [ ] [X] 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 -STOP_CODE [X] [X] [X] [X] [X] [X] [X] [ ] -POP_TOP [X] [X] [X] [X] [X] [X] [X] [ ] -ROT_TWO [X] [X] [X] [X] [X] [X] [X] [ ] -ROT_THREE [X] [X] [X] [X] [X] [X] [X] [ ] -DUP_TOP [X] [X] [X] [X] [X] [X] [X] [ ] -ROT_FOUR [X] [X] [X] [X] [X] [X] [X] [ ] +STOP_CODE [X] [X] [X] [X] [X] [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] +ROT_FOUR [X] [X] [X] [X] [X] [X] [X] [X] <6> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <7> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <8> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -NOP [ ] [ ] [ ] [ ] [X] [X] [X] [ ] -UNARY_POSITIVE [X] [X] [X] [X] [X] [X] [X] [ ] -UNARY_NEGATIVE [X] [X] [X] [X] [X] [X] [X] [ ] -UNARY_NOT [X] [X] [X] [X] [X] [X] [X] [ ] -UNARY_CONVERT [X] [X] [X] [X] [X] [X] [X] [ ] +NOP [ ] [ ] [ ] [ ] [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] +UNARY_CONVERT [X] [X] [X] [X] [X] [X] [X] [X] <14> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -UNARY_INVERT [X] [X] [X] [X] [X] [X] [X] [ ] +UNARY_INVERT [X] [X] [X] [X] [X] [X] [X] [X] <16> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <17> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] LIST_APPEND [ ] [ ] [ ] [ ] [X] [X] [X] [ ] -BINARY_POWER [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_MULTIPLY [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_DIVIDE [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_MODULO [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_ADD [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_SUBTRACT [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_SUBSCR [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_FLOOR_DIVIDE [ ] [ ] [X] [X] [X] [X] [X] [ ] -BINARY_TRUE_DIVIDE [ ] [ ] [X] [X] [X] [X] [X] [ ] -INPLACE_FLOOR_DIVIDE [ ] [ ] [X] [X] [X] [X] [X] [ ] -INPLACE_TRUE_DIVIDE [ ] [ ] [X] [X] [X] [X] [X] [ ] -SLICE+0 [X] [X] [X] [X] [X] [X] [X] [ ] -SLICE+1 [X] [X] [X] [X] [X] [X] [X] [ ] -SLICE+2 [X] [X] [X] [X] [X] [X] [X] [ ] -SLICE+3 [X] [X] [X] [X] [X] [X] [X] [ ] +BINARY_POWER [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_MULTIPLY [X] [X] [X] [X] [X] [X] [X] [X] +BINARY_DIVIDE [X] [X] [X] [X] [X] [X] [X] [X] +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] +BINARY_TRUE_DIVIDE [ ] [ ] [X] [X] [X] [X] [X] [X] +INPLACE_FLOOR_DIVIDE [ ] [ ] [X] [X] [X] [X] [X] [X] +INPLACE_TRUE_DIVIDE [ ] [ ] [X] [X] [X] [X] [X] [X] +SLICE+0 [X] [X] [X] [X] [X] [X] [X] [X] +SLICE+1 [X] [X] [X] [X] [X] [X] [X] [X] +SLICE+2 [X] [X] [X] [X] [X] [X] [X] [X] +SLICE+3 [X] [X] [X] [X] [X] [X] [X] [X] <34> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <35> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <36> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <37> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <38> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <39> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -STORE_SLICE+0 [X] [X] [X] [X] [X] [X] [X] [ ] -STORE_SLICE+1 [X] [X] [X] [X] [X] [X] [X] [ ] -STORE_SLICE+2 [X] [X] [X] [X] [X] [X] [X] [ ] -STORE_SLICE+3 [X] [X] [X] [X] [X] [X] [X] [ ] +STORE_SLICE+0 [X] [X] [X] [X] [X] [X] [X] [X] +STORE_SLICE+1 [X] [X] [X] [X] [X] [X] [X] [X] +STORE_SLICE+2 [X] [X] [X] [X] [X] [X] [X] [X] +STORE_SLICE+3 [X] [X] [X] [X] [X] [X] [X] [X] <44> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <45> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <46> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <47> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <48> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <49> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -DELETE_SLICE+0 [X] [X] [X] [X] [X] [X] [X] [ ] -DELETE_SLICE+1 [X] [X] [X] [X] [X] [X] [X] [ ] -DELETE_SLICE+2 [X] [X] [X] [X] [X] [X] [X] [ ] -DELETE_SLICE+3 [X] [X] [X] [X] [X] [X] [X] [ ] -STORE_MAP [ ] [ ] [ ] [ ] [ ] [ ] [X] [ ] -INPLACE_ADD [X] [X] [X] [X] [X] [X] [X] [ ] -INPLACE_SUBTRACT [X] [X] [X] [X] [X] [X] [X] [ ] -INPLACE_MULTIPLY [X] [X] [X] [X] [X] [X] [X] [ ] -INPLACE_DIVIDE [X] [X] [X] [X] [X] [X] [X] [ ] -INPLACE_MODULO [X] [X] [X] [X] [X] [X] [X] [ ] -STORE_SUBSCR [X] [X] [X] [X] [X] [X] [X] [ ] -DELETE_SUBSCR [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_LSHIFT [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_RSHIFT [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_AND [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_XOR [X] [X] [X] [X] [X] [X] [X] [ ] -BINARY_OR [X] [X] [X] [X] [X] [X] [X] [ ] -INPLACE_POWER [X] [X] [X] [X] [X] [X] [X] [ ] -GET_ITER [ ] [ ] [X] [X] [X] [X] [X] [ ] +DELETE_SLICE+0 [X] [X] [X] [X] [X] [X] [X] [X] +DELETE_SLICE+1 [X] [X] [X] [X] [X] [X] [X] [X] +DELETE_SLICE+2 [X] [X] [X] [X] [X] [X] [X] [X] +DELETE_SLICE+3 [X] [X] [X] [X] [X] [X] [X] [X] +STORE_MAP [ ] [ ] [ ] [ ] [ ] [ ] [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] +INPLACE_DIVIDE [X] [X] [X] [X] [X] [X] [X] [X] +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] <69> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -PRINT_EXPR [X] [X] [X] [X] [X] [X] [X] [ ] -PRINT_ITEM [X] [X] [X] [X] [X] [X] [X] [ ] -PRINT_NEWLINE [X] [X] [X] [X] [X] [X] [X] [ ] -PRINT_ITEM_TO [X] [X] [X] [X] [X] [X] [X] [ ] -PRINT_NEWLINE_TO [X] [X] [X] [X] [X] [X] [X] [ ] -INPLACE_LSHIFT [X] [X] [X] [X] [X] [X] [X] [ ] -INPLACE_RSHIFT [X] [X] [X] [X] [X] [X] [X] [ ] -INPLACE_AND [X] [X] [X] [X] [X] [X] [X] [ ] -INPLACE_XOR [X] [X] [X] [X] [X] [X] [X] [ ] -INPLACE_OR [X] [X] [X] [X] [X] [X] [X] [ ] -BREAK_LOOP [X] [X] [X] [X] [X] [X] [X] [ ] -WITH_CLEANUP [ ] [ ] [ ] [ ] [ ] [X] [X] [ ] -LOAD_LOCALS [X] [X] [X] [X] [X] [X] [X] [ ] -RETURN_VALUE [X] [X] [X] [X] [X] [X] [X] [ ] -IMPORT_STAR [X] [X] [X] [X] [X] [X] [X] [ ] -EXEC_STMT [X] [X] [X] [X] [X] [X] [X] [ ] -YIELD_VALUE [ ] [ ] [X] [X] [X] [X] [X] [ ] -POP_BLOCK [X] [X] [X] [X] [X] [X] [X] [ ] -END_FINALLY [X] [X] [X] [X] [X] [X] [X] [ ] -BUILD_CLASS [X] [X] [X] [X] [X] [X] [X] [ ] -STORE_NAME [X] [X] [X] [X] [X] [X] [X] [ ] -DELETE_NAME [X] [X] [X] [X] [X] [X] [X] [ ] -UNPACK_SEQUENCE [X] [X] [X] [X] [X] [X] [X] [ ] -FOR_ITER [ ] [ ] [X] [X] [X] [X] [X] [ ] -<94> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -STORE_ATTR [X] [X] [X] [X] [X] [X] [X] [ ] -DELETE_ATTR [X] [X] [X] [X] [X] [X] [X] [ ] -STORE_GLOBAL [X] [X] [X] [X] [X] [X] [X] [ ] -DELETE_GLOBAL [X] [X] [X] [X] [X] [X] [X] [ ] -DUP_TOPX [X] [X] [X] [X] [X] [X] [X] [ ] -LOAD_CONST [X] [X] [X] [X] [X] [X] [X] [ ] -LOAD_NAME [X] [X] [X] [X] [X] [X] [X] [ ] -BUILD_TUPLE [X] [X] [X] [X] [X] [X] [X] [ ] -BUILD_LIST [X] [X] [X] [X] [X] [X] [X] [ ] -BUILD_MAP [X] [X] [X] [X] [X] [X] [X] [ ] -LOAD_ATTR [X] [X] [X] [X] [X] [X] [X] [ ] -COMPARE_OP [X] [X] [X] [X] [X] [X] [X] [ ] -IMPORT_NAME [X] [X] [X] [X] [X] [X] [X] [ ] -IMPORT_FROM [X] [X] [X] [X] [X] [X] [X] [ ] -<109> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -JUMP_FORWARD [X] [X] [X] [X] [X] [X] [X] [ ] -JUMP_IF_FALSE [X] [X] [X] [X] [X] [X] [X] [ ] -JUMP_IF_TRUE [X] [X] [X] [X] [X] [X] [X] [ ] -JUMP_ABSOLUTE [X] [X] [X] [X] [X] [X] [X] [ ] -FOR_LOOP [X] [X] [X] [ ] [ ] [ ] [ ] [ ] -<115> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -LOAD_GLOBAL [X] [X] [X] [X] [X] [X] [X] [ ] +PRINT_EXPR [X] [X] [X] [X] [X] [X] [X] [X] +PRINT_ITEM [X] [X] [X] [X] [X] [X] [X] [X] +PRINT_NEWLINE [X] [X] [X] [X] [X] [X] [X] [X] +PRINT_ITEM_TO [X] [X] [X] [X] [X] [X] [X] [X] +PRINT_NEWLINE_TO [X] [X] [X] [X] [X] [X] [X] [X] +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] +WITH_CLEANUP [ ] [ ] [ ] [ ] [ ] [X] [X] [X] +LOAD_LOCALS [X] [X] [X] [X] [X] [X] [X] [X] +RETURN_VALUE [X] [X] [X] [X] [X] [X] [X] [X] +IMPORT_STAR [X] [X] [X] [X] [X] [X] [X] [X] +EXEC_STMT [X] [X] [X] [X] [X] [X] [X] [X] +YIELD_VALUE [ ] [ ] [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] +BUILD_CLASS [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] +LIST_APPEND [ ] [ ] [ ] [ ] [ ] [ ] [ ] [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] [X] [X] [X] [X] [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] +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] +<109> ! [ ] [ ] [ ] [ ] [ ] [ ] [ ] +JUMP_FORWARD [X] [X] [X] [X] [X] [X] [X] [X] +JUMP_IF_FALSE (_OR_POP) [X] [X] [X] [X] [X] [X] [X] [+] +JUMP_IF_TRUE (_OR_POP) [X] [X] [X] [X] [X] [X] [X] [+] +JUMP_ABSOLUTE [X] [X] [X] [X] [X] [X] [X] [X] +FOR_LOOP ! [X] [X] [X] [ ] [ ] [ ] [ ] +<115> ! [ ] [ ] [ ] [ ] [ ] [ ] [ ] +POP_JUMP_IF_FALSE ! [X] +POP_JUMP_IF_TRUE ! [X] +LOAD_GLOBAL [X] [X] [X] [X] [X] [X] [X] [X] <117> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <118> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -CONTINUE_LOOP [ ] [X] [X] [X] [X] [X] [X] [ ] -SETUP_LOOP [X] [X] [X] [X] [X] [X] [X] [ ] -SETUP_EXCEPT [X] [X] [X] [X] [X] [X] [X] [ ] -SETUP_FINALLY [X] [X] [X] [X] [X] [X] [X] [ ] +CONTINUE_LOOP [ ] [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] [ ] -STORE_FAST [X] [X] [X] [X] [X] [X] [X] [ ] -DELETE_FAST [X] [X] [X] [X] [X] [X] [X] [ ] +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] SET_LINENO [X] [X] [X] [ ] [ ] [ ] [ ] [ ] <128> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <129> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -RAISE_VARARGS [X] [X] [X] [X] [X] [X] [X] [ ] -CALL_FUNCTION [X] [X] [X] [X] [X] [X] [X] [ ] -MAKE_FUNCTION [X] [X] [X] [X] [X] [X] [X] [ ] -BUILD_SLICE [X] [X] [X] [X] [X] [X] [X] [ ] -MAKE_CLOSURE [ ] [X] [X] [X] [X] [X] [X] [ ] -LOAD_CLOSURE [ ] [X] [X] [X] [X] [X] [X] [ ] -LOAD_DEREF [ ] [X] [X] [X] [X] [X] [X] [ ] -STORE_DEREF [ ] [X] [X] [X] [X] [X] [X] [ ] +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] [X] +LOAD_CLOSURE [ ] [X] [X] [X] [X] [X] [X] [X] +LOAD_DEREF [ ] [X] [X] [X] [X] [X] [X] [X] +STORE_DEREF [ ] [X] [X] [X] [X] [X] [X] [X] <138> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <139> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -CALL_FUNCTION_VAR [X] [X] [X] [X] [X] [X] [X] [ ] -CALL_FUNCTION_KW [X] [X] [X] [X] [X] [X] [X] [ ] -CALL_FUNCTION_VAR_KW [X] [X] [X] [X] [X] [X] [X] [ ] -EXTENDED_ARG [X] [X] [X] [X] [X] [X] [X] [ ] +CALL_FUNCTION_VAR [X] [X] [X] [X] [X] [X] [X] [X] +CALL_FUNCTION_KW [X] [X] [X] [X] [X] [X] [X] [X] +CALL_FUNCTION_VAR_KW [X] [X] [X] [X] [X] [X] [X] [X] +EXTENDED_ARG ! [X] [X] [X] [X] [X] [X] [X] +SETUP_WITH ! [X] <144> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<145> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<146> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] -<147> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] +<145> ! [ ] [ ] [ ] [ ] [ ] [ ] [ ] +EXTENDED_ARG ! [X] +SET_ADD [ ] [ ] [ ] [ ] [ ] [ ] [ ] [X] +MAP_ADD [ ] [ ] [ ] [ ] [ ] [ ] [ ] [X] <148> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <149> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] <150> [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] @@ -526,30 +531,30 @@ 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' -TYPE_NONE 'N' 'N' 'N' 'N' 'N' 'N' 'N' -TYPE_FALSE 'F' 'F' 'F' 'F' -TYPE_TRUE 'T' 'T' 'T' 'T' -TYPE_STOPITER 'S' 'S' 'S' 'S' 'S' -TYPE_ELLIPSIS '.' '.' '.' '.' '.' '.' '.' -TYPE_INT 'i' 'i' 'i' 'i' 'i' 'i' 'i' -TYPE_INT64 'I' 'I' 'I' 'I' 'I' 'I' 'I' -TYPE_FLOAT 'f' 'f' 'f' 'f' 'f' 'f' 'f' -TYPE_BINARY_FLOAT 'g' 'g' -TYPE_COMPLEX 'x' 'x' 'x' 'x' 'x' 'x' 'x' -TYPE_BINARY_COMPLEX 'y' 'y' -TYPE_LONG 'l' 'l' 'l' 'l' 'l' 'l' 'l' -TYPE_STRING 's' 's' 's' 's' 's' 's' 's' -TYPE_INTERNED 't' 't' 't' -TYPE_STRINGREF 'R' 'R' 'R' -TYPE_TUPLE '(' '(' '(' '(' '(' '(' '(' -TYPE_LIST '[' '[' '[' '[' '[' '[' '[' -TYPE_DICT '{' '{' '{' '{' '{' '{' '{' -TYPE_CODE 'c' 'c' 'c' 'c' 'c' 'c' 'c' -TYPE_UNICODE 'u' 'u' 'u' 'u' 'u' 'u' 'u' -TYPE_UNKNOWN '?' '?' '?' '?' '?' '?' '?' -TYPE_SET '<' '<' -TYPE_FROZENSET '>' '>' +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 '>' '>' '>' 3.0 3.1 3.2 diff --git a/bytecode.cpp b/bytecode.cpp index 1cdf9e6..dd8b49a 100644 --- a/bytecode.cpp +++ b/bytecode.cpp @@ -99,6 +99,57 @@ const char* Py2k::OpcodeNames[256] = { "<248>", "<249>", "<250>", "<251>", "<252>", "<253>", "<254>", "<255>", }; +const char* Py2k::OpcodeNames27[256] = { + "STOP_CODE", "POP_TOP", "ROT_TWO", "ROT_THREE", "DUP_TOP", "ROT_FOUR", + "<6>", "<7>", "<8>", "NOP", + "UNARY_POSITIVE", "UNARY_NEGATIVE", "UNARY_NOT", "UNARY_CONVERT", + "<14>", "UNARY_INVERT", "<16>", "<17>", "<18>", + "BINARY_POWER", "BINARY_MULTIPLY", "BINARY_DIVIDE", "BINARY_MODULO", + "BINARY_ADD", "BINARY_SUBTRACT", "BINARY_SUBSCR", "BINARY_FLOOR_DIVIDE", + "BINARY_TRUE_DIVIDE", "INPLACE_FLOOR_DIVIDE", "INPLACE_TRUE_DIVIDE", + "SLICE+0", "SLICE+1", "SLICE+2", "SLICE+3", + "<34>", "<35>", "<36>", "<37>", "<38>", "<39>", + "STORE_SLICE+0", "STORE_SLICE+1", "STORE_SLICE+2", "STORE_SLICE+3", + "<44>", "<45>", "<46>", "<47>", "<48>", "<49>", + "DELETE_SLICE+0", "DELETE_SLICE+1", "DELETE_SLICE+2", "DELETE_SLICE+3", + "STORE_MAP", "INPLACE_ADD", "INPLACE_SUBTRACT", "INPLACE_MULTIPLY", + "INPLACE_DIVIDE", "INPLACE_MODULO", + "STORE_SUBSCR", "DELETE_SUBSCR", "BINARY_LSHIFT", "BINARY_RSHIFT", + "BINARY_AND", "BINARY_XOR", "BINARY_OR", "INPLACE_POWER", "GET_ITER", "<69>", + "PRINT_EXPR", "PRINT_ITEM", "PRINT_NEWLINE", "PRINT_ITEM_TO", + "PRINT_NEWLINE_TO", "INPLACE_LSHIFT", "INPLACE_RSHIFT", "INPLACE_AND", + "INPLACE_XOR", "INPLACE_OR", + "BREAK_LOOP", "WITH_CLEANUP", "LOAD_LOCALS", "RETURN_VALUE", + "IMPORT_STAR", "EXEC_STMT", "YIELD_VALUE", "POP_BLOCK", "END_FINALLY", + "BUILD_CLASS", + "STORE_NAME", "DELETE_NAME", "UNPACK_SEQUENCE", "FOR_ITER", "LIST_APPEND", + "STORE_ATTR", "DELETE_ATTR", "STORE_GLOBAL", "DELETE_GLOBAL", "DUP_TOPX", + "LOAD_CONST", "LOAD_NAME", "BUILD_TUPLE", "BUILD_LIST", "BUILD_SET", + "BUILD_MAP", "LOAD_ATTR", "COMPARE_OP", "IMPORT_NAME", "IMPORT_FROM", + "JUMP_FORWARD", "JUMP_IF_FALSE_OR_POP", "JUMP_IF_TRUE_OR_POP", + "JUMP_ABSOLUTE", "POP_JUMP_IF_FALSE", "POP_JUMP_IF_TRUE", + "LOAD_GLOBAL", "<117>", "<118>", "CONTINUE_LOOP", + "SETUP_LOOP", "SETUP_EXCEPT", "SETUP_FINALLY", "<123>", + "LOAD_FAST", "STORE_FAST", "DELETE_FAST", "SET_LINENO", "<128>", "<129>", + "RAISE_VARARGS", "CALL_FUNCTION", "MAKE_FUNCTION", "BUILD_SLICE", + "MAKE_CLOSURE", "LOAD_CLOSURE", "LOAD_DEREF", "STORE_DEREF", "<138>", "<139>", + "CALL_FUNCTION_VAR", "CALL_FUNCTION_KW", "CALL_FUNCTION_VAR_KW", "SETUP_WITH", + "<144>", "EXTENDED_ARG", "SET_ADD", "MAP_ADD", "<148>", "<149>", "<150>", "<151>", + "<152>", "<153>", "<154>", "<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>", "<194>", "<195>", "<196>", "<197>", "<198>", "<199>", + "<200>", "<201>", "<202>", "<203>", "<204>", "<205>", "<206>", "<207>", + "<208>", "<209>", "<210>", "<211>", "<212>", "<213>", "<214>", "<215>", + "<216>", "<217>", "<218>", "<219>", "<220>", "<221>", "<222>", "<223>", + "<224>", "<225>", "<226>", "<227>", "<228>", "<229>", "<230>", "<231>", + "<232>", "<233>", "<234>", "<235>", "<236>", "<237>", "<238>", "<239>", + "<240>", "<241>", "<242>", "<243>", "<244>", "<245>", "<246>", "<247>", + "<248>", "<249>", "<250>", "<251>", "<252>", "<253>", "<254>", "<255>", +}; + const char* Py3k::OpcodeNames[256] = { "STOP_CODE", "POP_TOP", "ROT_TWO", "ROT_THREE", "DUP_TOP", "ROT_FOUR", "<6>", "<7>", "<8>", "NOP", @@ -181,14 +232,23 @@ bool Py2k::IsConstArg(int opcode) return (opcode == Py2k::LOAD_CONST); } -bool Py2k::IsNameArg(int opcode) +bool Py2k::IsNameArg(int opcode, int minorVer) { - return (opcode == Py2k::DELETE_ATTR) || (opcode == Py2k::DELETE_GLOBAL) || - (opcode == Py2k::DELETE_NAME) || (opcode == Py2k::IMPORT_FROM) || - (opcode == Py2k::IMPORT_NAME) || (opcode == Py2k::LOAD_ATTR) || - (opcode == Py2k::LOAD_GLOBAL) || (opcode == Py2k::LOAD_NAME) || - (opcode == Py2k::STORE_ATTR) || (opcode == Py2k::STORE_GLOBAL) || - (opcode == Py2k::STORE_NAME); + if (minorVer >= 7) { + return (opcode == Py2k::DELETE_ATTR) || (opcode == Py2k::DELETE_GLOBAL) || + (opcode == Py2k::DELETE_NAME) || (opcode == Py2k::IMPORT_FROM_27) || + (opcode == Py2k::IMPORT_NAME_27) || (opcode == Py2k::LOAD_ATTR_27) || + (opcode == Py2k::LOAD_GLOBAL) || (opcode == Py2k::LOAD_NAME) || + (opcode == Py2k::STORE_ATTR) || (opcode == Py2k::STORE_GLOBAL) || + (opcode == Py2k::STORE_NAME); + } else { + return (opcode == Py2k::DELETE_ATTR) || (opcode == Py2k::DELETE_GLOBAL) || + (opcode == Py2k::DELETE_NAME) || (opcode == Py2k::IMPORT_FROM) || + (opcode == Py2k::IMPORT_NAME) || (opcode == Py2k::LOAD_ATTR) || + (opcode == Py2k::LOAD_GLOBAL) || (opcode == Py2k::LOAD_NAME) || + (opcode == Py2k::STORE_ATTR) || (opcode == Py2k::STORE_GLOBAL) || + (opcode == Py2k::STORE_NAME); + } } bool Py2k::IsVarNameArg(int opcode) @@ -365,7 +425,8 @@ void bc_next(PycBuffer& source, PycModule* mod, int& opcode, int& operand, int& bool haveExtArg = false; pos += 1; - if ((mod->majorVer() == 2 && opcode == Py2k::EXTENDED_ARG) || + if ((mod->majorVer() == 2 && ((mod->minorVer() < 7 && opcode == Py2k::EXTENDED_ARG) || + (mod->minorVer() >= 7 && opcode == Py2k::EXTENDED_ARG_27))) || (mod->majorVer() == 3 && opcode == Py3k::EXTENDED_ARG)) { operand = source.get16() << 16; opcode = source.getByte(); @@ -400,8 +461,10 @@ void bc_disasm(PycRef code, PycModule* mod, int indent) if (mod->majorVer() == 1) { printf("%-24s", Py1k::OpcodeNames[opcode]); - } else if (mod->majorVer() == 2) { + } else if (mod->majorVer() == 2 && mod->minorVer() < 7) { printf("%-24s", Py2k::OpcodeNames[opcode]); + } else if (mod->majorVer() == 2 && mod->minorVer() >= 7) { + printf("%-24s", Py2k::OpcodeNames27[opcode]); } else if (mod->majorVer() == 3) { printf("%-24s", Py3k::OpcodeNames[opcode]); } @@ -413,7 +476,7 @@ void bc_disasm(PycRef code, PycModule* mod, int indent) print_const(code->getConst(operand), mod); } else if ((mod->majorVer() == 1 && Py1k::IsNameArg(opcode)) || (mod->majorVer() == 1 && mod->minorVer() < 3 && Py1k::IsVarNameArg(opcode)) || - (mod->majorVer() == 2 && Py2k::IsNameArg(opcode)) || + (mod->majorVer() == 2 && Py2k::IsNameArg(opcode, mod->minorVer())) || (mod->majorVer() == 3 && Py3k::IsNameArg(opcode))) { printf("%d: %s", operand, code->getName(operand)->value()); } else if ((mod->majorVer() == 1 && Py1k::IsVarNameArg(opcode)) || diff --git a/bytecode.h b/bytecode.h index 2d61b38..6d45ecd 100644 --- a/bytecode.h +++ b/bytecode.h @@ -77,12 +77,23 @@ enum Opcodes { MAKE_CLOSURE, LOAD_CLOSURE, LOAD_DEREF, STORE_DEREF, CALL_FUNCTION_VAR = 140, CALL_FUNCTION_KW, CALL_FUNCTION_VAR_KW, EXTENDED_ARG, + + /* Different opcodes in Python 2.7. Boo! */ + LIST_APPEND_27 = 94, + BUILD_SET_27 = BUILD_MAP, BUILD_MAP_27, LOAD_ATTR_27, COMPARE_OP_27, + IMPORT_NAME_27, IMPORT_FROM_27, + JUMP_IF_FALSE_OR_POP = JUMP_IF_FALSE, + JUMP_IF_TRUE_OR_POP = JUMP_IF_TRUE, + POP_JUMP_IF_FALSE = FOR_LOOP, POP_JUMP_IF_TRUE, + SETUP_WITH = EXTENDED_ARG, EXTENDED_ARG_27 = 145, + SET_ADD = 146, MAP_ADD, }; extern const char* OpcodeNames[256]; +extern const char* OpcodeNames27[256]; bool IsConstArg(int opcode); -bool IsNameArg(int opcode); +bool IsNameArg(int opcode, int minorVer); bool IsVarNameArg(int opcode); bool IsCellArg(int opcode); bool IsJumpOffsetArg(int opcode); diff --git a/module.cpp b/module.cpp index 79a0d2c..0788cf1 100644 --- a/module.cpp +++ b/module.cpp @@ -95,6 +95,7 @@ void PycModule::setVersion(unsigned int magic) case MAGIC_2_7: m_maj = 2; m_min = 7; + break; /* 3.0 and above are always unicode */ case MAGIC_3_0+1: