Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def_op(l, 'BINARY_OR', 66, 2, 1)
def_op(l, 'INPLACE_POWER', 67, 2, 1)
def_op(l, 'GET_ITER', 68, 1, 1)
store_op(l, 'STORE_LOCALS', 69, 1, 0)
def_op(l, 'PRINT_EXPR', 70, 1, 0)
def_op(l, 'LOAD_BUILD_CLASS', 71, 0, 1)
# Python3 drops/changes:
# def_op(l, 'PRINT_ITEM', 71)
# def_op(l, 'PRINT_NEWLINE', 72)
# def_op(l, 'PRINT_ITEM_TO', 73)
# def_op(l, 'PRINT_NEWLINE_TO', 74)
def_op(l, 'INPLACE_LSHIFT', 75, 2, 1)
def_op(l, 'INPLACE_RSHIFT', 76, 2, 1)
def_op(l, 'INPLACE_AND', 77, 2, 1)
def_op(l, 'INPLACE_XOR', 78, 2, 1)
def_op(l, 'INPLACE_OR', 79, 2, 1)
def_op(l, 'BREAK_LOOP', 80, 0, 0, fallthrough=False)
def_op(l, 'WITH_CLEANUP', 81, 1, 0) # Cleans up the stack when a with statement
# block exits. Handle stack special
def_op(l, 'RETURN_VALUE', 83, 1, 0, fallthrough=False)
def_op(l, 'IMPORT_STAR', 84, 1, 0)
def_op(l, 'YIELD_VALUE', 86, 1, 1)
def_op(l, 'POP_BLOCK', 87, 0, 0)
def_op(l, 'END_FINALLY', 88, 1, 0)
def_op(l, 'POP_EXCEPT', 89, 0, 0)
HAVE_ARGUMENT = 90 # Opcodes from here have an argument:
for op in range(256): opname[op] = '<%r>' % (op,)
del op
# Instruction opcodes for compiled code
# Blank lines correspond to available opcodes
# If the POP field is -1 and the opcode is var args operation
# (hasvargs | hasnargs) operation, then
# the operand holds the size.
# OP NAME OPCODE POP PUSH
#--------------------------------------------
def_op(l, "STOP_CODE", 0, 0, 0, fallthrough=False)
def_op(l, "POP_TOP", 1, 1, 0)
def_op(l, "ROT_TWO", 2, 2, 2)
def_op(l, "ROT_THREE", 3, 3, 3)
def_op(l, "DUP_TOP", 4, 0, 1)
def_op(l, "ROT_FOUR", 5, 4, 4)
def_op(l, "UNARY_POSITIVE", 10, 1, 1)
def_op(l, "UNARY_NEGATIVE", 11, 1, 1)
def_op(l, "UNARY_NOT", 12, 1, 1)
def_op(l, "UNARY_CONVERT", 13, 1, 1)
def_op(l, "UNARY_INVERT", 15, 1, 1)
def_op(l, "BINARY_POWER", 19, 2, 1)
def_op(l, "BINARY_MULTIPLY", 20, 2, 1)
def_op(l, "BINARY_DIVIDE", 21, 2, 1)
def_op(l, "BINARY_MODULO", 22, 2, 1)
def_op(l, "BINARY_ADD", 23, 2, 1)
def_op(l, 'DUP_TOP_TWO', 5, 0, 2)
def_op(l, 'NOP', 9, 0, 0)
def_op(l, 'UNARY_POSITIVE', 10, 1, 1)
def_op(l, 'UNARY_NEGATIVE', 11, 1, 1)
def_op(l, 'UNARY_NOT', 12, 1, 1)
def_op(l, 'UNARY_INVERT', 15, 1, 1)
def_op(l, 'BINARY_POWER', 19, 2, 1)
def_op(l, 'BINARY_MULTIPLY', 20, 2, 1)
def_op(l, 'BINARY_MODULO', 22, 2, 1)
def_op(l, 'BINARY_ADD', 23, 2, 1)
def_op(l, 'BINARY_SUBTRACT', 24, 2, 1)
def_op(l, 'BINARY_SUBSCR', 25, 2, 1)
def_op(l, 'BINARY_FLOOR_DIVIDE', 26, 2, 1)
def_op(l, 'BINARY_TRUE_DIVIDE', 27, 2, 1)
def_op(l, 'INPLACE_FLOOR_DIVIDE', 28, 2, 1)
def_op(l, 'INPLACE_TRUE_DIVIDE', 29, 2, 1)
# Gone from Python 3 are Python2's
# SLICE+0 .. SLICE+3
# STORE_SLICE+0 .. STORE_SLICE+3
# DELETE_SLICE+0 .. DELETE_SLICE+3
store_op(l, 'STORE_MAP', 54, 3, 1)
def_op(l, 'INPLACE_ADD', 55, 2, 1)
def_op(l, 'INPLACE_SUBTRACT', 56, 2, 1)
def_op(l, 'INPLACE_MULTIPLY', 57, 2, 1)
def_op(l, 'INPLACE_MODULO', 59, 2, 1)
const_op(l, "LOAD_CONST", 100, 0, 1) # Operand is in const list
name_op(l, "LOAD_NAME", 101, 0, 1) # Operand is in name list
varargs_op(l, "BUILD_TUPLE", 102, -1, 1) # Number of tuple items
varargs_op(l, "BUILD_LIST", 103, -1, 1) # Number of list items
varargs_op(l, "BUILD_MAP", 104, -1, 1) # Always zero for now
name_op(l, "LOAD_ATTR", 105, 1, 1) # Operand is in name list
compare_op(l, "COMPARE_OP", 106, 2, 1) # Comparison operator
name_op(l, "IMPORT_NAME", 107, 2, 1) # Operand is in name list
name_op(l, "IMPORT_FROM", 108, 0, 1) # Operand is in name list
jrel_op(l, "JUMP_FORWARD", 110, 0, 0, fallthrough=False) # Number of bytes to skip
jrel_op(l, "JUMP_IF_FALSE", 111, 1, 1, True) # ""
jrel_op(l, "JUMP_IF_TRUE", 112, 1, 1, True) # ""
jabs_op(l, "JUMP_ABSOLUTE", 113, 0, 0, fallthrough=False) # Target byte offset from beginning of code
def_op(l, "FOR_LOOP", 114) # Number of bytes to skip
name_op(l, "LOAD_GLOBAL", 116, 0, 1) # Operand is in name list
jrel_op(l, "SETUP_LOOP", 120, 0, 0, conditional=True) # Distance to target address
jrel_op(l, "SETUP_EXCEPT", 121, 0, 0) # ""
jrel_op(l, "SETUP_FINALLY", 122, 0, 0) # ""
local_op(l, "LOAD_FAST", 124, 0, 1) # Local variable number
store_op(l, "STORE_FAST", 125, 1, 0, is_type="local") # Local variable number
local_op(l, "DELETE_FAST", 126) # Local variable number
def_op(l, "SET_LINENO", 127) # Current line number
def_op(l, "RAISE_VARARGS", 130, -1, 0, fallthrough=False)
# Number of raise arguments (1, 2, or 3)
nargs_op(l, "CALL_FUNCTION", 131, -1, 1) # #args + (#kwargs << 8)
# Python 3.2+
def_op(l, 'DUP_TOP_TWO', 5, 0, 2)
def_op(l, 'NOP', 9, 0, 0)
def_op(l, 'UNARY_POSITIVE', 10, 1, 1)
def_op(l, 'UNARY_NEGATIVE', 11, 1, 1)
def_op(l, 'UNARY_NOT', 12, 1, 1)
def_op(l, 'UNARY_INVERT', 15, 1, 1)
def_op(l, 'BINARY_POWER', 19, 2, 1)
def_op(l, 'BINARY_MULTIPLY', 20, 2, 1)
def_op(l, 'BINARY_MODULO', 22, 2, 1)
def_op(l, 'BINARY_ADD', 23, 2, 1)
def_op(l, 'BINARY_SUBTRACT', 24, 2, 1)
def_op(l, 'BINARY_SUBSCR', 25, 2, 1)
def_op(l, 'BINARY_FLOOR_DIVIDE', 26, 2, 1)
def_op(l, 'BINARY_TRUE_DIVIDE', 27, 2, 1)
def_op(l, 'INPLACE_FLOOR_DIVIDE', 28, 2, 1)
def_op(l, 'INPLACE_TRUE_DIVIDE', 29, 2, 1)
# Gone from Python 3 are Python2's
# SLICE+0 .. SLICE+3
# STORE_SLICE+0 .. STORE_SLICE+3
# DELETE_SLICE+0 .. DELETE_SLICE+3
store_op(l, 'STORE_MAP', 54, 3, 1)
def_op(l, 'INPLACE_ADD', 55, 2, 1)
def_op(l, 'INPLACE_SUBTRACT', 56, 2, 1)
def_op(l, 'INPLACE_MULTIPLY', 57, 2, 1)
def_op(l, "BINARY_ADD", 23, 2, 1)
def_op(l, "BINARY_SUBTRACT", 24, 2, 1)
def_op(l, "BINARY_SUBSCR", 25, 2, 1)
def_op(l, "SLICE+0", 30, 1, 1)
def_op(l, "SLICE+1", 31, 2, 1)
def_op(l, "SLICE+2", 32, 2, 1)
def_op(l, "SLICE+3", 33, 3, 1)
store_op(l, "STORE_SLICE+0", 40, 2, 0)
store_op(l, "STORE_SLICE+1", 41, 3, 0)
store_op(l, "STORE_SLICE+2", 42, 3, 0)
store_op(l, "STORE_SLICE+3", 43, 4, 0)
def_op(l, "DELETE_SLICE+0", 50, 1, 0)
def_op(l, "DELETE_SLICE+1", 51, 2, 0)
def_op(l, "DELETE_SLICE+2", 52, 2, 0)
def_op(l, "DELETE_SLICE+3", 53, 3, 0)
store_op(l, "STORE_SUBSCR", 60, 3, 0) # Implements TOS1[TOS] = TOS2.
def_op(l, "DELETE_SUBSCR", 61, 2, 0) # Implements del TOS1[TOS].
def_op(l, "BINARY_LSHIFT", 62, 2, 1)
def_op(l, "BINARY_RSHIFT", 63, 2, 1)
def_op(l, "BINARY_AND", 64, 2, 1)
def_op(l, "BINARY_XOR", 65, 2, 1)
def_op(l, "BINARY_OR", 66, 2, 1)
def_op(l, "PRINT_EXPR", 70, 1, 0)
def_op(l, "PRINT_ITEM", 71, 1, 0)
def_op(l, "PRINT_NEWLINE", 72, 0, 0)
# These are removed since 3.8...
rm_op(l, "BEGIN_FINALLY", 53)
rm_op(l, "WITH_CLEANUP_START", 81)
rm_op(l, "WITH_CLEANUP_FINISH", 82)
rm_op(l, "END_FINALLY", 88)
rm_op(l, "CALL_FINALLY", 162)
rm_op(l, "POP_FINALLY", 163)
# These are new since Python 3.9
# OP NAME OPCODE POP PUSH
#-----------------------------------------------
def_op(l, 'RERAISE', 48, 3, 0)
def_op(l, 'WITH_EXCEPT_START', 49, 0, 1)
def_op(l, 'LOAD_ASSERTION_ERROR', 74, 0, 1)
format_value_flags = opcode_38.format_value_flags
opcode_arg_fmt = {
"BUILD_MAP_UNPACK_WITH_CALL": format_BUILD_MAP_UNPACK_WITH_CALL,
"CALL_FUNCTION_KW": format_CALL_FUNCTION_KW,
"CALL_FUNCTION_EX": format_CALL_FUNCTION_EX,
'MAKE_FUNCTION': format_MAKE_FUNCTION_flags,
'FORMAT_VALUE': format_value_flags,
'EXTENDED_ARG': format_extended_arg36
}
opcode_extended_fmt = {
"CALL_FUNCTION": extended_format_CALL_FUNCTION,
"CALL_METHOD": extended_format_CALL_METHOD,
"MAKE_FUNCTION": extended_format_MAKE_FUNCTION,
def_op(l, "DELETE_SLICE+3", 53, 3, 0)
store_op(l, "STORE_SUBSCR", 60, 3, 0) # Implements TOS1[TOS] = TOS2.
def_op(l, "DELETE_SUBSCR", 61, 2, 0) # Implements del TOS1[TOS].
def_op(l, "BINARY_LSHIFT", 62, 2, 1)
def_op(l, "BINARY_RSHIFT", 63, 2, 1)
def_op(l, "BINARY_AND", 64, 2, 1)
def_op(l, "BINARY_XOR", 65, 2, 1)
def_op(l, "BINARY_OR", 66, 2, 1)
def_op(l, "PRINT_EXPR", 70, 1, 0)
def_op(l, "PRINT_ITEM", 71, 1, 0)
def_op(l, "PRINT_NEWLINE", 72, 0, 0)
def_op(l, "BREAK_LOOP", 80, 0, 0, fallthrough=False)
def_op(l, "LOAD_LOCALS", 82, 0, 1)
def_op(l, "RETURN_VALUE", 83, 1, 0, fallthrough=False)
def_op(l, "EXEC_STMT", 85, 3, 0)
def_op(l, "POP_BLOCK", 87, 0, 0)
def_op(l, "END_FINALLY", 88, 1, 0)
def_op(l, "BUILD_CLASS", 89, 3, 0)
# HAVE_ARGUMENT = 90 # Opcodes from here have an argument:
store_op(l, "STORE_NAME", 90, 1, 0, is_type="name") # Operand is in name list
name_op(l, "DELETE_NAME", 91, 0, 0) # ""
varargs_op(l, "UNPACK_TUPLE", 92) # Number of tuple items
def_op(l, "UNPACK_LIST", 93) # Number of list items
def_op(l, "SLICE+0", 30, 2, 2)
def_op(l, "SLICE+1", 31, 2, 2)
def_op(l, "SLICE+2", 32, 2, 2)
def_op(l, "SLICE+3", 33, 3, 2)
store_op(l, "STORE_SLICE+0", 40, 2, 0)
store_op(l, "STORE_SLICE+1", 41, 3, 0)
store_op(l, "STORE_SLICE+2", 42, 3, 0)
store_op(l, "STORE_SLICE+3", 43, 4, 0)
def_op(l, "DELETE_SLICE+0", 50, 1, 0)
def_op(l, "DELETE_SLICE+1", 51, 2, 0)
def_op(l, "DELETE_SLICE+2", 52, 2, 0)
def_op(l, "DELETE_SLICE+3", 53, 3, 0)
def_op(l, "INPLACE_ADD", 55, 2, 1)
def_op(l, "INPLACE_SUBTRACT", 56, 2, 1)
def_op(l, "INPLACE_MULTIPLY", 57, 2, 1)
def_op(l, "INPLACE_DIVIDE", 58, 2, 1)
def_op(l, "INPLACE_MODULO", 59, 2, 1)
store_op(l, "STORE_SUBSCR", 60, 3, 0) # Implements TOS1[TOS] = TOS2.
def_op(l, "DELETE_SUBSCR", 61, 2, 0) # Implements del TOS1[TOS].
def_op(l, "BINARY_LSHIFT", 62, 2, 1)
def_op(l, "BINARY_RSHIFT", 63, 2, 1)
def_op(l, "BINARY_AND", 64, 2, 1)
def_op(l, "BINARY_XOR", 65, 2, 1)
def_op(l, "BINARY_OR", 66, 2, 1)
def_op(l, "INPLACE_POWER", 67, 2, 1)
def_op(l, "GET_ITER", 68, 1, 1)
def_op(l, "PRINT_EXPR", 70, 1, 0)
free_op(l, 'LOAD_CLOSURE', 135, 0, 1)
free_op(l, 'LOAD_DEREF', 136, 0, 1)
store_op(l, 'STORE_DEREF', 137, 1, 0, is_type="free")
free_op(l, 'DELETE_DEREF', 138, 0, 0)
nargs_op(l, 'CALL_FUNCTION_VAR', 140, -2, 1) # #args + (#kwargs << 8)
nargs_op(l, 'CALL_FUNCTION_KW', 141, -2, 1) # #args + (#kwargs << 8)
nargs_op(l, 'CALL_FUNCTION_VAR_KW',142, -3, 1) # #args + (#kwargs << 8)
jrel_op(l, 'SETUP_WITH', 143, 0, 7)
def_op(l, 'LIST_APPEND', 145, 2, 1) # Calls list.append(TOS[-i], TOS).
# Used to implement list comprehensions.
def_op(l, 'SET_ADD', 146, 1, 0) # Calls set.add(TOS1[-i], TOS).
# Used to implement set comprehensions.
def_op(l, 'MAP_ADD', 147, 3, 1) # Calls dict.setitem(TOS1[-i], TOS, TOS1)
# Used to implement dict comprehensions.
def_op(l, 'EXTENDED_ARG', 144, 0, 0)
EXTENDED_ARG = 144
opcode_arg_fmt = {
'EXTENDED_ARG': format_extended_arg
}