Attempting to improve readability of opcode value stack action map using namedtuple in llpython.opcode_util.
This commit is contained in:
parent
420d0ed88d
commit
c890cbdd92
1 changed files with 131 additions and 127 deletions
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
import dis
|
import dis
|
||||||
import opcode
|
import opcode
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
# ______________________________________________________________________
|
# ______________________________________________________________________
|
||||||
# Module data
|
# Module data
|
||||||
|
|
@ -25,137 +26,140 @@ hascbranch = [op for op, opname in ((op, opcode.opname[op])
|
||||||
or 'SETUP' in opname
|
or 'SETUP' in opname
|
||||||
or opname in HAS_CBRANCH_NAMES]
|
or opname in HAS_CBRANCH_NAMES]
|
||||||
|
|
||||||
|
OpcodeData = namedtuple('OpcodeData', ('pops', 'pushes', 'is_stmt'))
|
||||||
|
NO_OPCODE_DATA = OpcodeData(None, None, None)
|
||||||
|
|
||||||
# Since the actual opcode value may change, manage opcode abstraction
|
# Since the actual opcode value may change, manage opcode abstraction
|
||||||
# data by opcode name.
|
# data by opcode name.
|
||||||
|
|
||||||
OPCODE_MAP = {
|
OPCODE_MAP = {
|
||||||
'BINARY_ADD': (2, 1, None),
|
'BINARY_ADD': OpcodeData(2, 1, None),
|
||||||
'BINARY_AND': (2, 1, None),
|
'BINARY_AND': OpcodeData(2, 1, None),
|
||||||
'BINARY_DIVIDE': (2, 1, None),
|
'BINARY_DIVIDE': OpcodeData(2, 1, None),
|
||||||
'BINARY_FLOOR_DIVIDE': (2, 1, None),
|
'BINARY_FLOOR_DIVIDE': OpcodeData(2, 1, None),
|
||||||
'BINARY_LSHIFT': (2, 1, None),
|
'BINARY_LSHIFT': OpcodeData(2, 1, None),
|
||||||
'BINARY_MODULO': (2, 1, None),
|
'BINARY_MODULO': OpcodeData(2, 1, None),
|
||||||
'BINARY_MULTIPLY': (2, 1, None),
|
'BINARY_MULTIPLY': OpcodeData(2, 1, None),
|
||||||
'BINARY_OR': (2, 1, None),
|
'BINARY_OR': OpcodeData(2, 1, None),
|
||||||
'BINARY_POWER': (2, 1, None),
|
'BINARY_POWER': OpcodeData(2, 1, None),
|
||||||
'BINARY_RSHIFT': (2, 1, None),
|
'BINARY_RSHIFT': OpcodeData(2, 1, None),
|
||||||
'BINARY_SUBSCR': (2, 1, None),
|
'BINARY_SUBSCR': OpcodeData(2, 1, None),
|
||||||
'BINARY_SUBTRACT': (2, 1, None),
|
'BINARY_SUBTRACT': OpcodeData(2, 1, None),
|
||||||
'BINARY_TRUE_DIVIDE': (2, 1, None),
|
'BINARY_TRUE_DIVIDE': OpcodeData(2, 1, None),
|
||||||
'BINARY_XOR': (2, 1, None),
|
'BINARY_XOR': OpcodeData(2, 1, None),
|
||||||
'BREAK_LOOP': (0, None, 1),
|
'BREAK_LOOP': OpcodeData(0, None, 1),
|
||||||
'BUILD_CLASS': (3, 1, None),
|
'BUILD_CLASS': OpcodeData(3, 1, None),
|
||||||
'BUILD_LIST': (-1, 1, None),
|
'BUILD_LIST': OpcodeData(-1, 1, None),
|
||||||
'BUILD_MAP': (-1, 1, None),
|
'BUILD_MAP': OpcodeData(-1, 1, None),
|
||||||
'BUILD_SET': (-1, 1, None),
|
'BUILD_SET': OpcodeData(-1, 1, None),
|
||||||
'BUILD_SLICE': (-1, 1, None), # oparg should only be 2 or 3
|
'BUILD_SLICE': OpcodeData(-1, 1, None), # oparg should only be 2 or 3
|
||||||
'BUILD_TUPLE': (-1, 1, None),
|
'BUILD_TUPLE': OpcodeData(-1, 1, None),
|
||||||
'CALL_FUNCTION': (-2, 1, None),
|
'CALL_FUNCTION': OpcodeData(-2, 1, None),
|
||||||
'CALL_FUNCTION_KW': (-3, 1, None),
|
'CALL_FUNCTION_KW': OpcodeData(-3, 1, None),
|
||||||
'CALL_FUNCTION_VAR': (-3, 1, None),
|
'CALL_FUNCTION_VAR': OpcodeData(-3, 1, None),
|
||||||
'CALL_FUNCTION_VAR_KW': (-4, 1, None),
|
'CALL_FUNCTION_VAR_KW': OpcodeData(-4, 1, None),
|
||||||
'COMPARE_OP': (2, 1, None),
|
'COMPARE_OP': OpcodeData(2, 1, None),
|
||||||
'CONTINUE_LOOP': (None, None, None),
|
'CONTINUE_LOOP': NO_OPCODE_DATA,
|
||||||
'DELETE_ATTR': (1, None, 1),
|
'DELETE_ATTR': OpcodeData(1, None, 1),
|
||||||
'DELETE_DEREF': (None, None, None),
|
'DELETE_DEREF': NO_OPCODE_DATA,
|
||||||
'DELETE_FAST': (0, None, 1),
|
'DELETE_FAST': OpcodeData(0, None, 1),
|
||||||
'DELETE_GLOBAL': (0, None, 1),
|
'DELETE_GLOBAL': OpcodeData(0, None, 1),
|
||||||
'DELETE_NAME': (0, None, 1),
|
'DELETE_NAME': OpcodeData(0, None, 1),
|
||||||
'DELETE_SLICE+0': (1, None, 1),
|
'DELETE_SLICE+0': OpcodeData(1, None, 1),
|
||||||
'DELETE_SLICE+1': (2, None, 1),
|
'DELETE_SLICE+1': OpcodeData(2, None, 1),
|
||||||
'DELETE_SLICE+2': (2, None, 1),
|
'DELETE_SLICE+2': OpcodeData(2, None, 1),
|
||||||
'DELETE_SLICE+3': (3, None, 1),
|
'DELETE_SLICE+3': OpcodeData(3, None, 1),
|
||||||
'DELETE_SUBSCR': (2, None, 1),
|
'DELETE_SUBSCR': OpcodeData(2, None, 1),
|
||||||
'DUP_TOP': (None, None, None),
|
'DUP_TOP': NO_OPCODE_DATA,
|
||||||
'DUP_TOPX': (None, None, None),
|
'DUP_TOPX': NO_OPCODE_DATA,
|
||||||
'DUP_TOP_TWO': (None, None, None),
|
'DUP_TOP_TWO': NO_OPCODE_DATA,
|
||||||
'END_FINALLY': (None, None, None),
|
'END_FINALLY': NO_OPCODE_DATA,
|
||||||
'EXEC_STMT': (3, 0, 1),
|
'EXEC_STMT': OpcodeData(3, 0, 1),
|
||||||
'EXTENDED_ARG': (None, None, None),
|
'EXTENDED_ARG': NO_OPCODE_DATA,
|
||||||
'FOR_ITER': (1, 1, 1),
|
'FOR_ITER': OpcodeData(1, 1, 1),
|
||||||
'GET_ITER': (1, 1, None),
|
'GET_ITER': OpcodeData(1, 1, None),
|
||||||
'IMPORT_FROM': (None, None, None),
|
'IMPORT_FROM': NO_OPCODE_DATA,
|
||||||
'IMPORT_NAME': (2, 1, None),
|
'IMPORT_NAME': OpcodeData(2, 1, None),
|
||||||
'IMPORT_STAR': (1, None, 1),
|
'IMPORT_STAR': OpcodeData(1, None, 1),
|
||||||
'INPLACE_ADD': (2, 1, None),
|
'INPLACE_ADD': OpcodeData(2, 1, None),
|
||||||
'INPLACE_AND': (2, 1, None),
|
'INPLACE_AND': OpcodeData(2, 1, None),
|
||||||
'INPLACE_DIVIDE': (2, 1, None),
|
'INPLACE_DIVIDE': OpcodeData(2, 1, None),
|
||||||
'INPLACE_FLOOR_DIVIDE': (2, 1, None),
|
'INPLACE_FLOOR_DIVIDE': OpcodeData(2, 1, None),
|
||||||
'INPLACE_LSHIFT': (2, 1, None),
|
'INPLACE_LSHIFT': OpcodeData(2, 1, None),
|
||||||
'INPLACE_MODULO': (2, 1, None),
|
'INPLACE_MODULO': OpcodeData(2, 1, None),
|
||||||
'INPLACE_MULTIPLY': (2, 1, None),
|
'INPLACE_MULTIPLY': OpcodeData(2, 1, None),
|
||||||
'INPLACE_OR': (2, 1, None),
|
'INPLACE_OR': OpcodeData(2, 1, None),
|
||||||
'INPLACE_POWER': (2, 1, None),
|
'INPLACE_POWER': OpcodeData(2, 1, None),
|
||||||
'INPLACE_RSHIFT': (2, 1, None),
|
'INPLACE_RSHIFT': OpcodeData(2, 1, None),
|
||||||
'INPLACE_SUBTRACT': (2, 1, None),
|
'INPLACE_SUBTRACT': OpcodeData(2, 1, None),
|
||||||
'INPLACE_TRUE_DIVIDE': (2, 1, None),
|
'INPLACE_TRUE_DIVIDE': OpcodeData(2, 1, None),
|
||||||
'INPLACE_XOR': (2, 1, None),
|
'INPLACE_XOR': OpcodeData(2, 1, None),
|
||||||
'JUMP_ABSOLUTE': (0, None, 1),
|
'JUMP_ABSOLUTE': OpcodeData(0, None, 1),
|
||||||
'JUMP_FORWARD': (0, None, 1),
|
'JUMP_FORWARD': OpcodeData(0, None, 1),
|
||||||
'JUMP_IF_FALSE': (1, 1, 1),
|
'JUMP_IF_FALSE': OpcodeData(1, 1, 1),
|
||||||
'JUMP_IF_FALSE_OR_POP': (None, None, None),
|
'JUMP_IF_FALSE_OR_POP': NO_OPCODE_DATA,
|
||||||
'JUMP_IF_TRUE': (1, 1, 1),
|
'JUMP_IF_TRUE': OpcodeData(1, 1, 1),
|
||||||
'JUMP_IF_TRUE_OR_POP': (None, None, None),
|
'JUMP_IF_TRUE_OR_POP': NO_OPCODE_DATA,
|
||||||
'LIST_APPEND': (None, None, None),
|
'LIST_APPEND': NO_OPCODE_DATA,
|
||||||
'LOAD_ATTR': (1, 1, None),
|
'LOAD_ATTR': OpcodeData(1, 1, None),
|
||||||
'LOAD_BUILD_CLASS': (None, None, None),
|
'LOAD_BUILD_CLASS': NO_OPCODE_DATA,
|
||||||
'LOAD_CLOSURE': (None, None, None),
|
'LOAD_CLOSURE': NO_OPCODE_DATA,
|
||||||
'LOAD_CONST': (0, 1, None),
|
'LOAD_CONST': OpcodeData(0, 1, None),
|
||||||
'LOAD_DEREF': (0, 1, None),
|
'LOAD_DEREF': OpcodeData(0, 1, None),
|
||||||
'LOAD_FAST': (0, 1, None),
|
'LOAD_FAST': OpcodeData(0, 1, None),
|
||||||
'LOAD_GLOBAL': (0, 1, None),
|
'LOAD_GLOBAL': OpcodeData(0, 1, None),
|
||||||
'LOAD_LOCALS': (None, None, None),
|
'LOAD_LOCALS': NO_OPCODE_DATA,
|
||||||
'LOAD_NAME': (0, 1, None),
|
'LOAD_NAME': OpcodeData(0, 1, None),
|
||||||
'MAKE_CLOSURE': (None, None, None),
|
'MAKE_CLOSURE': NO_OPCODE_DATA,
|
||||||
'MAKE_FUNCTION': (-2, 1, None),
|
'MAKE_FUNCTION': OpcodeData(-2, 1, None),
|
||||||
'MAP_ADD': (None, None, None),
|
'MAP_ADD': NO_OPCODE_DATA,
|
||||||
'NOP': (0, None, None),
|
'NOP': OpcodeData(0, None, None),
|
||||||
'POP_BLOCK': (0, None, 1),
|
'POP_BLOCK': OpcodeData(0, None, 1),
|
||||||
'POP_EXCEPT': (None, None, None),
|
'POP_EXCEPT': NO_OPCODE_DATA,
|
||||||
'POP_JUMP_IF_FALSE': (1, None, 1),
|
'POP_JUMP_IF_FALSE': OpcodeData(1, None, 1),
|
||||||
'POP_JUMP_IF_TRUE': (1, None, 1),
|
'POP_JUMP_IF_TRUE': OpcodeData(1, None, 1),
|
||||||
'POP_TOP': (1, None, 1),
|
'POP_TOP': OpcodeData(1, None, 1),
|
||||||
'PRINT_EXPR': (1, None, 1),
|
'PRINT_EXPR': OpcodeData(1, None, 1),
|
||||||
'PRINT_ITEM': (1, None, 1),
|
'PRINT_ITEM': OpcodeData(1, None, 1),
|
||||||
'PRINT_ITEM_TO': (2, None, 1),
|
'PRINT_ITEM_TO': OpcodeData(2, None, 1),
|
||||||
'PRINT_NEWLINE': (0, None, 1),
|
'PRINT_NEWLINE': OpcodeData(0, None, 1),
|
||||||
'PRINT_NEWLINE_TO': (1, None, 1),
|
'PRINT_NEWLINE_TO': OpcodeData(1, None, 1),
|
||||||
'RAISE_VARARGS': (-1, None, 1),
|
'RAISE_VARARGS': OpcodeData(-1, None, 1),
|
||||||
'RETURN_VALUE': (1, None, 1),
|
'RETURN_VALUE': OpcodeData(1, None, 1),
|
||||||
'ROT_FOUR': (None, None, None),
|
'ROT_FOUR': NO_OPCODE_DATA,
|
||||||
'ROT_THREE': (None, None, None),
|
'ROT_THREE': NO_OPCODE_DATA,
|
||||||
'ROT_TWO': (None, None, None),
|
'ROT_TWO': NO_OPCODE_DATA,
|
||||||
'SETUP_EXCEPT': (None, None, None),
|
'SETUP_EXCEPT': NO_OPCODE_DATA,
|
||||||
'SETUP_FINALLY': (None, None, None),
|
'SETUP_FINALLY': NO_OPCODE_DATA,
|
||||||
'SETUP_LOOP': (None, None, None),
|
'SETUP_LOOP': NO_OPCODE_DATA,
|
||||||
'SETUP_WITH': (None, None, None),
|
'SETUP_WITH': NO_OPCODE_DATA,
|
||||||
'SET_ADD': (None, None, None),
|
'SET_ADD': NO_OPCODE_DATA,
|
||||||
'SLICE+0': (1, 1, None),
|
'SLICE+0': OpcodeData(1, 1, None),
|
||||||
'SLICE+1': (2, 1, None),
|
'SLICE+1': OpcodeData(2, 1, None),
|
||||||
'SLICE+2': (2, 1, None),
|
'SLICE+2': OpcodeData(2, 1, None),
|
||||||
'SLICE+3': (3, 1, None),
|
'SLICE+3': OpcodeData(3, 1, None),
|
||||||
'STOP_CODE': (None, None, None),
|
'STOP_CODE': NO_OPCODE_DATA,
|
||||||
'STORE_ATTR': (2, None, 1),
|
'STORE_ATTR': OpcodeData(2, None, 1),
|
||||||
'STORE_DEREF': (1, 0, 1),
|
'STORE_DEREF': OpcodeData(1, 0, 1),
|
||||||
'STORE_FAST': (1, None, 1),
|
'STORE_FAST': OpcodeData(1, None, 1),
|
||||||
'STORE_GLOBAL': (1, None, 1),
|
'STORE_GLOBAL': OpcodeData(1, None, 1),
|
||||||
'STORE_LOCALS': (None, None, None),
|
'STORE_LOCALS': NO_OPCODE_DATA,
|
||||||
'STORE_MAP': (1, None, 1),
|
'STORE_MAP': OpcodeData(1, None, 1),
|
||||||
'STORE_NAME': (1, None, 1),
|
'STORE_NAME': OpcodeData(1, None, 1),
|
||||||
'STORE_SLICE+0': (1, None, 1),
|
'STORE_SLICE+0': OpcodeData(1, None, 1),
|
||||||
'STORE_SLICE+1': (2, None, 1),
|
'STORE_SLICE+1': OpcodeData(2, None, 1),
|
||||||
'STORE_SLICE+2': (2, None, 1),
|
'STORE_SLICE+2': OpcodeData(2, None, 1),
|
||||||
'STORE_SLICE+3': (3, None, 1),
|
'STORE_SLICE+3': OpcodeData(3, None, 1),
|
||||||
'STORE_SUBSCR': (3, None, 1),
|
'STORE_SUBSCR': OpcodeData(3, None, 1),
|
||||||
'UNARY_CONVERT': (1, 1, None),
|
'UNARY_CONVERT': OpcodeData(1, 1, None),
|
||||||
'UNARY_INVERT': (1, 1, None),
|
'UNARY_INVERT': OpcodeData(1, 1, None),
|
||||||
'UNARY_NEGATIVE': (1, 1, None),
|
'UNARY_NEGATIVE': OpcodeData(1, 1, None),
|
||||||
'UNARY_NOT': (1, 1, None),
|
'UNARY_NOT': OpcodeData(1, 1, None),
|
||||||
'UNARY_POSITIVE': (1, 1, None),
|
'UNARY_POSITIVE': OpcodeData(1, 1, None),
|
||||||
'UNPACK_EX': (None, None, None),
|
'UNPACK_EX': NO_OPCODE_DATA,
|
||||||
'UNPACK_SEQUENCE': (None, None, None),
|
'UNPACK_SEQUENCE': NO_OPCODE_DATA,
|
||||||
'WITH_CLEANUP': (None, None, None),
|
'WITH_CLEANUP': NO_OPCODE_DATA,
|
||||||
'YIELD_VALUE': (1, None, 1),
|
'YIELD_VALUE': OpcodeData(1, None, 1),
|
||||||
}
|
}
|
||||||
|
|
||||||
# ______________________________________________________________________
|
# ______________________________________________________________________
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue