Ejemplo n.º 1
0
name_op(l, 'DELETE_ATTR', 96, 1, 0)  # ""
name_op(l, 'STORE_GLOBAL', 97, 1, 0)  # ""
name_op(l, 'DELETE_GLOBAL', 98, 0, 0)  # ""

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)  # 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)  # 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
local_op(l, 'STORE_FAST', 125, 1, 0)  # Local variable number
Ejemplo n.º 2
0
l = locals()
init_opdata(l, opcode_32, version_tuple, is_pypy=True)

## FIXME: DRY common PYPY opcode additions

# PyPy only
# ----------
name_op(l, "LOOKUP_METHOD", 201, 1, 2)
nargs_op(l, "CALL_METHOD", 202, -1, 1)
l["hasvargs"].append(202)

# Used only in single-mode compilation list-comprehension generators
varargs_op(l, "BUILD_LIST_FROM_ARG", 203)

# Used only in assert statements
jrel_op(l, "JUMP_IF_NOT_DEBUG", 204, conditional=True)

# There are no opcodes to remove or change.
# If there were, they'd be listed below.

# FIXME remove (fix uncompyle6)
update_pj3(globals(), l)

finalize_opcodes(l)

opcode_extended_fmt = {
    "LOAD_ATTR": extended_format_ATTR,
    "RETURN_VALUE": extended_format_RETURN_VALUE,
    "STORE_ATTR": extended_format_ATTR,
}
Ejemplo n.º 3
0
# function, the tuple of positional arguments, and optionally the dict
# of keyword arguments if bit 0 of *oparg* is 1.

# MAKE_FUNCTION oparg

# This is a different opcode from before.

# The tuple of default values for positional-or-keyword parameters,
# the dict of default values for keyword-only parameters, the dict of
# annotations and the closure are pushed on the stack if corresponding
# bit (0-3) is set. They are followed by the code object and the
# qualified name of the function.

# These are new since Python 3.6
name_op(l, 'STORE_ANNOTATION', 127)  # Index in name list
jrel_op(l, 'SETUP_ASYNC_WITH', 154)
def_op(l, 'FORMAT_VALUE', 155)
varargs_op(l, 'BUILD_CONST_KEY_MAP', 156, -1, 1)  # TOS is count of kwargs
nargs_op(l, 'CALL_FUNCTION_EX', 142, -1, 1)
def_op(l, 'SETUP_ANNOTATIONS', 85)
def_op(l, 'BUILD_STRING', 157)
varargs_op(l, 'BUILD_TUPLE_UNPACK_WITH_CALL', 158)

MAKE_FUNCTION_FLAGS = tuple("default keyword-only annotation closure".split())


def format_MAKE_FUNCTION_arg(flags):
    pattr = ''
    for flag in MAKE_FUNCTION_FLAGS:
        bit = flags & 1
        if bit:
name_op(l, "DELETE_ATTR", 96, 1, 0)  # ""
store_op(l, "STORE_GLOBAL", 97, 1, 0, is_type="name")  # ""
name_op(l, "DELETE_GLOBAL", 98, 0, 0)  # ""

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
Ejemplo n.º 5
0
def_op(l, "LIST_APPEND", 94, 2, 1)  # Calls list.append(TOS[-i], TOS).
# Used to implement list comprehensions.
def_op(l, "BUILD_SET", 104)  # Number of set items
def_op(l, "BUILD_MAP", 105)
name_op(l, "LOAD_ATTR", 106)
compare_op(l, "COMPARE_OP", 107)

name_op(l, "IMPORT_NAME", 108, 2, 1)  # Index in name list
name_op(l, "IMPORT_FROM", 109, 0, 1)

jabs_op(l, "JUMP_IF_FALSE_OR_POP", 111)  # Target byte offset from beginning of code
jabs_op(l, "JUMP_IF_TRUE_OR_POP", 112)  # ""
jabs_op(l, "POP_JUMP_IF_FALSE", 114)  # ""
jabs_op(l, "POP_JUMP_IF_TRUE", 115)  # ""
jrel_op(l, "SETUP_WITH", 143, 0, 2)

def_op(l, "EXTENDED_ARG", 145)
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, 2, 1)  # Calls dict.setitem(TOS1[-i], TOS, TOS1)
# Used to implement dict comprehensions.

update_pj3(globals(), l)

opcode_arg_fmt = {
    "EXTENDED_ARG": format_extended_arg,
    "CALL_FUNCTION": format_CALL_FUNCTION_pos_name_encoded,
}

finalize_opcodes(l)
Ejemplo n.º 6
0
version = 3.5

import xdis.opcodes.opcode_35 as opcode_35

l = locals()
init_opdata(l, opcode_35, version, is_pypy=True)

## FIXME: DRY common PYPY opcode additions

# PyPy only
# ----------
def_op(l, 'FORMAT_VALUE',   155)
def_op(l, 'BUILD_STRING',   157)
name_op(l, 'LOOKUP_METHOD',  201,  1, 2)
nargs_op(l, 'CALL_METHOD', 202, -1, 1)
l['hasvargs'].append(202)

# Used only in single-mode compilation list-comprehension generators
varargs_op(l, 'BUILD_LIST_FROM_ARG', 203)

# Used only in assert statements
jrel_op(l, 'JUMP_IF_NOT_DEBUG',      204, conditional=True)

# There are no opcodes to remove or change.
# If there were, they'd be listed below.

# FIXME remove (fix uncompyle6)
update_pj3(globals(), l)

finalize_opcodes(l)
Ejemplo n.º 7
0
def_op(l, 'LOAD_LOCALS',          82,  0,  1)
def_op(l, 'RETURN_VALUE',         83,  1,  0, fallthrough=False)
def_op(l, 'IMPORT_STAR',          84,  1,  0)
def_op(l, 'EXEC_STMT',            85,  3,  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, 'BUILD_CLASS',          89,  3,  0)

HAVE_ARGUMENT = 90              # Opcodes from here have an argument:

name_op(l, 'STORE_NAME',           90,  1,  0)  # Operand is in name list
name_op(l, 'DELETE_NAME',          91,  0,  0)  # ""
varargs_op(l, 'UNPACK_SEQUENCE',   92,  9,  1)  # TOS is number of tuple items
jrel_op(l, 'FOR_ITER',             93,  9,  1)  # TOS is read

name_op(l, 'STORE_ATTR',           95,  2,  0)  # Operand is in name list
name_op(l, 'DELETE_ATTR',          96,  1,  0)  # ""
name_op(l, 'STORE_GLOBAL',         97,  1,  0)  # ""
name_op(l, 'DELETE_GLOBAL',        98,  0,  0)  # ""
def_op(l, 'DUP_TOPX',              99,  1, -1)  # number of items to duplicate
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,  9,  1)  # TOS is number of tuple items
varargs_op(l, 'BUILD_LIST',       103,  9,  1)  # TOS is number of list items
varargs_op(l, 'BUILD_MAP',        104,  0,  1)  # TOS is number of kwark items. 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
Ejemplo n.º 8
0
name_op(l, 'DELETE_ATTR',          96,  1,  0)  # ""
name_op(l, 'STORE_GLOBAL',         97,  1,  0)  # ""
name_op(l, 'DELETE_GLOBAL',        98,  0,  0)  # ""

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)  # Number of bytes to skip
jrel_op(l, 'JUMP_IF_FALSE',       111,  1,  1)  # ""
jrel_op(l, 'JUMP_IF_TRUE',        112,  1,  1)  # ""
jabs_op(l, 'JUMP_ABSOLUTE',       113,  0,  0)  # 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)  # 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
local_op(l, 'STORE_FAST',         125,  1,  0)  # Local variable number
local_op(l, 'DELETE_FAST',        126)          # Local variable number
Ejemplo n.º 9
0
    jrel_op, name_op, varargs_op, update_pj3
    )

version = 2.7

l = locals()

init_opdata(l, opcode_27, version, is_pypy=True)

# FIXME: DRY common PYPY opcode additions

# PyPy only
# ----------
name_op(l,    'LOOKUP_METHOD',   201,  1, 2)
varargs_op(l, 'CALL_METHOD',     202, -1, 1)
l['hasnargs'].append(202)

# Used only in single-mode compilation list-comprehension generators
def_op(l, 'BUILD_LIST_FROM_ARG', 203)

# Used only in assert statements
jrel_op(l, 'JUMP_IF_NOT_DEBUG',     204)

# There are no opcodes to remove or change.
# If there were, they'd be listed below.

# FIXME remove (fix uncompyle6)
update_pj3(globals(), l)

finalize_opcodes(l)
Ejemplo n.º 10
0
                                              # 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,  1, -1)

HAVE_ARGUMENT = 90              # Opcodes from here have an argument:

name_op(l, 'STORE_NAME',            90,  1,  0)   # Operand is in name list
name_op(l, 'DELETE_NAME',           91,  0,  0)   # ""
varargs_op(l, 'UNPACK_SEQUENCE',    92,  9,  1)  # TOS is number of tuple items
jrel_op(l,    'FOR_ITER',           93,  9,  1)

def_op(l,  'UNPACK_EX',             94,  9,  1)   # assignment with a starred target; TOS is #entries
                                                  # argument has a count
name_op(l, 'STORE_ATTR',            95,  2,  0)   # Operand is in name list
name_op(l, 'DELETE_ATTR',           96,  1,  0)   # ""
name_op(l, 'STORE_GLOBAL',          97,  1,  0)   # ""
name_op(l, 'DELETE_GLOBAL',         98,  0,  0)   # ""

# Python 2's DUP_TOPX is gone starting in Python 3.2

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,  9,  1)  # TOS is count of tuple items
varargs_op(l, 'BUILD_LIST',        103,  9,  1)  # TOS is count of list items
varargs_op(l, 'BUILD_SET',         104,  9,  1)  # TOS is count of set items
Ejemplo n.º 11
0
# Below are opcode changes since Python 2.6
rm_op(l, "BUILD_MAP", 104)
rm_op(l, "LOAD_ATTR", 105)
rm_op(l, "COMPARE_OP", 106)
rm_op(l, "IMPORT_NAME", 107)
rm_op(l, "IMPORT_FROM", 108)
rm_op(l, "JUMP_IF_FALSE", 111)
rm_op(l, "EXTENDED_ARG", 143)
rm_op(l, "JUMP_IF_TRUE", 112)

# These have changed since 2.6 in stack effects.
#          OP NAME            OPCODE   POP PUSH
#-----------------------------------------------
def_op(l, "END_FINALLY", 88, 3, 0)
jrel_op(l, "SETUP_EXCEPT", 121, 0, 0, conditional=True)  # ""
jrel_op(l, "SETUP_FINALLY", 122, 0, 0, conditional=True)  # ""

def_op(l, "LIST_APPEND", 94, 2, 1)  # Calls list.append(TOS[-i], TOS).

# Used to implement list comprehensions.
varargs_op(l, 'BUILD_SET', 104, -1, 1)  # TOS is count of set items
def_op(l, "BUILD_MAP", 105, 0, 1)  # count is in argument
name_op(l, "LOAD_ATTR", 106, 1, 1)  # Operand is in name list
compare_op(l, "COMPARE_OP", 107)

name_op(l, "IMPORT_NAME", 108, 2, 1)  # Index in name list
name_op(l, "IMPORT_FROM", 109, 0, 1)

jabs_op(l, "JUMP_IF_FALSE_OR_POP",
        111)  # Target byte offset from beginning of code
Ejemplo n.º 12
0

# MAKE_FUNCTION oparg

# This is a different opcode from before.

# The tuple of default values for positional-or-keyword parameters,
# the dict of default values for keyword-only parameters, the dict of
# annotations and the closure are pushed on the stack if corresponding
# bit (0-3) is set. They are followed by the code object and the
# qualified name of the function.


# These are new since Python 3.6
name_op(l,  'STORE_ANNOTATION', 127) # Index in name list
jrel_op(l,  'SETUP_ASYNC_WITH', 154)
def_op(l,   'FORMAT_VALUE',     155)
varargs_op(l, 'BUILD_CONST_KEY_MAP', 156, -1, 1) # TOS is count of kwargs
nargs_op(l, 'CALL_FUNCTION_EX', 142, -1, 1)
def_op(l,   'SETUP_ANNOTATIONS', 85)
def_op(l,   'BUILD_STRING',     157)
def_op(l,   'BUILD_TUPLE_UNPACK_WITH_CALL', 158)

MAKE_FUNCTION_FLAGS = tuple("default keyword-only annotation closure".split())

def format_MAKE_FUNCTION_arg(flags):
    pattr = ''
    for flag in MAKE_FUNCTION_FLAGS:
        bit = flags & 1
        if bit:
            if pattr:
Ejemplo n.º 13
0
def_op(l, 'LIST_APPEND', 94, 2, 1)  # Calls list.append(TOS[-i], TOS).
# Used to implement list comprehensions.
def_op(l, 'BUILD_SET', 104)  # Number of set items
def_op(l, 'BUILD_MAP', 105)
name_op(l, 'LOAD_ATTR', 106)
compare_op(l, 'COMPARE_OP', 107)

name_op(l, 'IMPORT_NAME', 108, 2, 1)  # Index in name list
name_op(l, 'IMPORT_FROM', 109, 0, 1)

jabs_op(l, 'JUMP_IF_FALSE_OR_POP',
        111)  # Target byte offset from beginning of code
jabs_op(l, 'JUMP_IF_TRUE_OR_POP', 112)  # ""
jabs_op(l, 'POP_JUMP_IF_FALSE', 114)  # ""
jabs_op(l, 'POP_JUMP_IF_TRUE', 115)  # ""
jrel_op(l, 'SETUP_WITH', 143, 0, 2)

def_op(l, 'EXTENDED_ARG', 145)
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, 2, 1)  # Calls dict.setitem(TOS1[-i], TOS, TOS1)
# Used to implement dict comprehensions.

update_pj3(globals(), l)

opcode_arg_fmt = {
    'EXTENDED_ARG': format_extended_arg,
}

finalize_opcodes(l)
Ejemplo n.º 14
0
def_op(l, 'WITH_CLEANUP', 81)

def_op(l, 'RETURN_VALUE', 83, 1, 0)
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, 1, -1)

HAVE_ARGUMENT = 90  # Opcodes from here have an argument:

name_op(l, 'STORE_NAME', 90, 1, 0)  # Operand is in name list
name_op(l, 'DELETE_NAME', 91, 0, 0)  # ""
varargs_op(l, 'UNPACK_SEQUENCE', 92, -1, 1)  # Number of tuple items
jrel_op(l, 'FOR_ITER', 93, -1, -1)

def_op(l, 'UNPACK_EX', 94)
name_op(l, 'STORE_ATTR', 95, 2, 0)  # Operand is in name list
name_op(l, 'DELETE_ATTR', 96, 1, 0)  # ""
name_op(l, 'STORE_GLOBAL', 97, 1, 0)  # ""
name_op(l, 'DELETE_GLOBAL', 98, 0, 0)  # ""

# Python 2's DUP_TOPX is gone starting in Python 3.2

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)  # TOS is count of tuple items
varargs_op(l, 'BUILD_LIST', 103, -1, 1)  # TOS is count of list items
varargs_op(l, 'BUILD_SET', 104, -1, 1)  # TOS is count of set items
varargs_op(l, 'BUILD_MAP', 105, -1, 1)  # TOS is count of kwarg items
# MAKE_FUNCTION oparg

# This is a different opcode from before.

# The tuple of default values for positional-or-keyword parameters,
# the dict of default values for keyword-only parameters, the dict of
# annotations and the closure are pushed on the stack if corresponding
# bit (0-3) is set. They are followed by the code object and the
# qualified name of the function.


# These are new since Python 3.6
#          OP NAME                OPCODE POP PUSH
#---------------------------------------------------
store_op(l,   'STORE_ANNOTATION', 127, 1, 0, is_type="name") # Stores TOS index in name list;
jrel_op(l,    'SETUP_ASYNC_WITH', 154, 2, 8)  # pops __aenter__ and __aexit__; pushed results on stack
def_op(l,     'FORMAT_VALUE',     155, 1, 1)
varargs_op(l, 'BUILD_CONST_KEY_MAP', 156, -2, 1) # TOS is count of kwargs
nargs_op(l,   'CALL_FUNCTION_EX', 142, -2, 1)
def_op(l,     'SETUP_ANNOTATIONS', 85, 1, 1)
varargs_op(l,  'BUILD_STRING',     157, -2, 2)
varargs_op(l,  'BUILD_TUPLE_UNPACK_WITH_CALL', 158)

MAKE_FUNCTION_FLAGS = tuple("default keyword-only annotation closure".split())

def format_MAKE_FUNCTION_arg(flags):
    if flags == 0:
        return "Neither defaults, keyword-only args, annotations, nor closures"
    pattr = ''
    for flag in MAKE_FUNCTION_FLAGS:
        bit = flags & 1
Ejemplo n.º 16
0
def_op(l, 'LIST_APPEND',            94, 2, 1) # Calls list.append(TOS[-i], TOS).
                                              # Used to implement list comprehensions.
def_op(l, 'BUILD_SET',             104)       # Number of set items
def_op(l, 'BUILD_MAP',             105)
name_op(l, 'LOAD_ATTR',            106)
compare_op(l, 'COMPARE_OP',        107)

name_op(l, 'IMPORT_NAME',          108,  2,  1)  # Index in name list
name_op(l, 'IMPORT_FROM',          109,  0,  1)

jabs_op(l, 'JUMP_IF_FALSE_OR_POP', 111) # Target byte offset from beginning of code
jabs_op(l, 'JUMP_IF_TRUE_OR_POP',  112)  # ""
jabs_op(l, 'POP_JUMP_IF_FALSE',    114)  # ""
jabs_op(l, 'POP_JUMP_IF_TRUE',     115)  # ""
jrel_op(l, 'SETUP_WITH',           143,  0,  2)

def_op(l, 'EXTENDED_ARG',          145)
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,  2,  1)  # Calls dict.setitem(TOS1[-i], TOS, TOS1)
                                                 # Used to implement dict comprehensions.

update_pj3(globals(), l)

opcode_arg_fmt = {
    'EXTENDED_ARG': format_extended_arg,
}

finalize_opcodes(l)
Ejemplo n.º 17
0
rm_op(l, 'LIST_APPEND', 145)
rm_op(l, 'MAP_ADD', 147)

# These are are in 3.0 but are not in 3.1 or they have
# different opcode numbers. Note: As a result of opcode value
# changes, these have to be applied *after* removing ops (with
# the same name).

#          OP NAME            OPCODE POP PUSH
#--------------------------------------------

def_op(l, 'SET_ADD', 17, 2, 0)  # Calls set.add(TOS1[-i], TOS).
# Used to implement set comprehensions.
def_op(l, 'LIST_APPEND', 18, 2, 0)  # Calls list.append(TOS1, TOS).
# Used to implement list comprehensions.
jrel_op(l, 'JUMP_IF_FALSE', 111, 1, 1)
jrel_op(l, 'JUMP_IF_TRUE', 112, 1, 1)

# Yes, pj2 not pj3 - Python 3.0 is more like 2.7 here with its
# JUMP_IF rather than POP_JUMP_IF.
update_pj2(globals(), l)

opcode_arg_fmt = {
    'MAKE_FUNCTION': format_MAKE_FUNCTION_default_argc,
    'EXTENDED_ARG': format_extended_arg,
}

opcode_extended_fmt = {
    "CALL_FUNCTION": extended_format_CALL_FUNCTION,
}
finalize_opcodes(l)
Ejemplo n.º 18
0
# These are removed since 3.7...
rm_op(l, 'BREAK_LOOP', 80)
rm_op(l, 'CONTINUE_LOOP', 119)
rm_op(l, 'SETUP_LOOP', 120)
rm_op(l, 'SETUP_EXCEPT', 121)

# These are new since Python 3.7

#          OP NAME            OPCODE POP PUSH
#--------------------------------------------
def_op(l, 'ROT_FOUR',           6,   4, 4)
def_op(l, 'BEGIN_FINALLY',     53,   0, 1)
def_op(l, 'END_ASYNC_FOR',     54,   7, 0)  # POP is 0, when not 7
def_op(l, 'END_FINALLY',       88,   1, 0)  # POP is 6, when not 1
jrel_op(l, 'CALL_FINALLY',    162,   0, 1)
nargs_op(l, 'POP_FINALLY',    163,   0, 0)  # PUSH/POP vary

format_MAKE_FUNCTION_arg = opcode_37.format_MAKE_FUNCTION_arg
format_value_flags = opcode_37.format_value_flags

opcode_arg_fmt = {
    'MAKE_FUNCTION': format_MAKE_FUNCTION_arg,
    'FORMAT_VALUE': format_value_flags,
    'EXTENDED_ARG': format_extended_arg36
}

update_pj3(globals(), l)

finalize_opcodes(l)
Ejemplo n.º 19
0
# 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:

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_SEQUENCE', 92, 0, -1)  # unpacks TOS, arg is the count
jrel_op(l, 'FOR_ITER', 93, 0, 1)

varargs_op(l, 'UNPACK_EX', 94, 0,
           0)  # assignment with a starred target; arg is count
store_op(l, 'STORE_ATTR', 95, 2, 0, is_type="name")  # Operand is in name list
name_op(l, 'DELETE_ATTR', 96, 1, 0)  # ""
store_op(l, 'STORE_GLOBAL', 97, 1, 0, is_type="name")  # ""
name_op(l, 'DELETE_GLOBAL', 98, 0, 0)  # ""

# Python 2's DUP_TOPX is gone starting in Python 3.2

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)  # TOS is count of tuple items
varargs_op(l, 'BUILD_LIST', 103, -1, 1)  # TOS is count of list items
varargs_op(l, 'BUILD_SET', 104, -1, 1)  # TOS is count of set items
Ejemplo n.º 20
0
from xdis.opcodes.base import (def_op, finalize_opcodes, init_opdata, jrel_op,
                               name_op, varargs_op, update_pj3)

version = 2.7

l = locals()

init_opdata(l, opcode_27, version, is_pypy=True)

# FIXME: DRY common PYPY opcode additions

# PyPy only
# ----------
name_op(l, 'LOOKUP_METHOD', 201, 1, 2)
varargs_op(l, 'CALL_METHOD', 202, -1, 1)
l['hasnargs'].append(202)

# Used only in single-mode compilation list-comprehension generators
def_op(l, 'BUILD_LIST_FROM_ARG', 203)

# Used only in assert statements
jrel_op(l, 'JUMP_IF_NOT_DEBUG', 204)

# There are no opcodes to remove or change.
# If there were, they'd be listed below.

# FIXME remove (fix uncompyle6)
update_pj3(globals(), l)

finalize_opcodes(l)
Ejemplo n.º 21
0
def_op(l, 'LOAD_LOCALS', 82, 0, 1)
def_op(l, 'RETURN_VALUE', 83, 1, 0)
def_op(l, 'IMPORT_STAR', 84, 1, 0)
def_op(l, 'EXEC_STMT', 85, 3, 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, 'BUILD_CLASS', 89, 3, 0)

HAVE_ARGUMENT = 90  # Opcodes from here have an argument:

name_op(l, 'STORE_NAME', 90, 1, 0)  # Operand is in name list
name_op(l, 'DELETE_NAME', 91, 0, 0)  # ""
varargs_op(l, 'UNPACK_SEQUENCE', 92, -1, 1)  # Number of tuple items
jrel_op(l, 'FOR_ITER', 93, -1, -1)

name_op(l, 'STORE_ATTR', 95, 2, 0)  # Operand is in name list
name_op(l, 'DELETE_ATTR', 96, 1, 0)  # ""
name_op(l, 'STORE_GLOBAL', 97, 1, 0)  # ""
name_op(l, 'DELETE_GLOBAL', 98, 0, 0)  # ""
def_op(l, 'DUP_TOPX', 99, 1, -1)  # number of items to duplicate
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
Ejemplo n.º 22
0
rm_op(l, 'JUMP_IF_FALSE_OR_POP', 111)
rm_op(l, 'JUMP_IF_TRUE_OR_POP',  112)
rm_op(l, 'POP_JUMP_IF_FALSE',    114)
rm_op(l, 'POP_JUMP_IF_TRUE',     115)
rm_op(l, 'LIST_APPEND',          145)
rm_op(l, 'MAP_ADD',              147)

# These are are in 3.0 but are not in 3.1 or they have
# different opcode numbers. Note: As a result of opcode value
# changes, these have to be applied *after* removing ops (with
# the same name).

def_op(l, 'SET_ADD',        17,  1, 0)
def_op(l, 'LIST_APPEND',    18,  2, 1)

jrel_op(l, 'JUMP_IF_FALSE', 111, 1, 1)
jrel_op(l, 'JUMP_IF_TRUE',  112, 1, 1)

# This op is in 3.x but its opcode is a 144 instead
def_op(l, 'EXTENDED_ARG',  143)

update_pj2(globals(), l)

opcode_arg_fmt = {
    'MAKE_FUNCTION': format_MAKE_FUNCTION_arg,
    'EXTENDED_ARG': format_extended_arg,
}

finalize_opcodes(l)
Ejemplo n.º 23
0
def_op(l, "LOAD_LOCALS",          82,  0,  1)
def_op(l, "RETURN_VALUE",         83,  1,  0, fallthrough=False)
def_op(l, "IMPORT_STAR",          84,  1,  0)
def_op(l, "EXEC_STMT",            85,  3,  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, "BUILD_CLASS",          89,  2,  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_SEQUENCE",   92, -1,  1)  # TOS is number of tuple items
jrel_op(l, "FOR_ITER",             93,  0,  1)  # TOS is read

store_op(l, "STORE_ATTR",          95,  2,  0, is_type="name")  # Operand is in name list
name_op(l, "DELETE_ATTR",          96,  1,  0)  # ""
store_op(l, "STORE_GLOBAL",        97,  1,  0, is_type="name")  # ""
name_op(l, "DELETE_GLOBAL",        98,  0,  0)  # ""
nargs_op(l, "DUP_TOPX",            99, -1,  2)  # number of items to duplicate
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)  # TOS is number of tuple items
varargs_op(l, "BUILD_LIST",       103, -1,  1)  # TOS is number of list items
varargs_op(l, "BUILD_MAP",        104,  0,  1)  # TOS is number of kwarg items. 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,  2)  # Imports TOS and TOS1; module pushed
Ejemplo n.º 24
0
rm_op(l, 'STORE_MAP',                    54)
rm_op(l, 'WITH_CLEANUP',                 81)

# These are new since Python 3.5
#          OP NAME                   OPCODE POP PUSH
#---------------------------------------------------
def_op(l, 'BINARY_MATRIX_MULTIPLY',      16,  2,  1)
def_op(l, 'INPLACE_MATRIX_MULTIPLY',     17,  2,  1)
def_op(l, 'GET_AITER',                   50,  1,  1)
def_op(l, 'GET_ANEXT',                   51,  0,  1)
def_op(l, 'BEFORE_ASYNC_WITH',           52)
def_op(l, 'GET_YIELD_FROM_ITER',         69,  0,  1)
def_op(l, 'GET_AWAITABLE',               73,  0,  0)
def_op(l, 'WITH_CLEANUP_START',          81,  0,  1)
def_op(l, 'WITH_CLEANUP_FINISH',         82, -1,  1)
def_op(l, 'BUILD_LIST_UNPACK',          149, -1,  1)
def_op(l, 'BUILD_MAP_UNPACK',           150, -1,  1)
def_op(l, 'BUILD_MAP_UNPACK_WITH_CALL', 151, -1,  1)
def_op(l, 'BUILD_TUPLE_UNPACK',         152, -1,  1)
def_op(l, 'BUILD_SET_UNPACK',           153, -1,  1)
jrel_op(l, 'SETUP_ASYNC_WITH',          154,  0,  6)

update_pj3(globals(), l)

opcode_arg_fmt = {
    'MAKE_FUNCTION': format_MAKE_FUNCTION_arg,
    'EXTENDED_ARG': format_extended_arg,
}

finalize_opcodes(l)
Ejemplo n.º 25
0
# annotations and the closure are pushed on the stack if corresponding
# bit (0-3) is set. They are followed by the code object and the
# qualified name of the function.

# These are removed since 3.6...
# and STORE_ANNOTATION introduced in 3.6!
rm_op(l, 'STORE_ANNOTATION', 127)

# These have a changed stack effect since 3.6
#          OP NAME            OPCODE POP PUSH
#---------------------------------------------------------------
def_op(l, 'WITH_CLEANUP_START', 81, 0, 2)
def_op(l, 'WITH_CLEANUP_FINISH', 82, 3, 0)
def_op(l, 'END_FINALLY', 88, 6, 0)
def_op(l, 'POP_EXCEPT', 89, 3, 0)  # Pops last 3 values
jrel_op(l, 'SETUP_WITH', 143, 0, 6)
jrel_op(l, 'SETUP_ASYNC_WITH', 154, 0, 5)

# These are new since Python 3.7
name_op(l, 'LOAD_METHOD', 160, 0, 1)
nargs_op(l, 'CALL_METHOD', 161, -2, 1)

format_MAKE_FUNCTION_arg = opcode_36.format_MAKE_FUNCTION_arg
format_value_flags = opcode_36.format_value_flags

opcode_arg_fmt = {
    'CALL_FUNCTION': opcode_36.format_CALL_FUNCTION,
    'CALL_FUNCTION_KW': opcode_36.format_CALL_FUNCTION_KW,
    'CALL_FUNCTION_EX': opcode_36.format_CALL_FUNCTION_EX,
    'CALL_METHOD': opcode_36.format_CALL_FUNCTION,
    'MAKE_FUNCTION': format_MAKE_FUNCTION_arg,
Ejemplo n.º 26
0
# These are removed since 3.7...
rm_op(l, "BREAK_LOOP", 80)
rm_op(l, "CONTINUE_LOOP", 119)
rm_op(l, "SETUP_LOOP", 120)
rm_op(l, "SETUP_EXCEPT", 121)

# These are new/changed since Python 3.7

#          OP NAME            OPCODE POP PUSH
# --------------------------------------------
def_op(l, "ROT_FOUR", 6, 4, 4)  # Opcode number changed from 5 to 6. Why?
def_op(l, "BEGIN_FINALLY", 53, 0, 6)
def_op(l, "END_ASYNC_FOR", 54, 7, 0)  # POP is 0, when not 7
def_op(l, "END_FINALLY", 88, 6, 0)  # POP is 6, when not 1
jrel_op(l, "CALL_FINALLY", 162, 0, 1)
nargs_op(l, "POP_FINALLY", 163, 6, 0)  # PUSH/POP vary

format_value_flags = opcode_37.format_value_flags

opcode_arg_fmt = {
    "BUILD_MAP_UNPACK_WITH_CALL": format_BUILD_MAP_UNPACK_WITH_CALL,
    "CALL_FUNCTION_EX": format_CALL_FUNCTION_EX,
    "CALL_FUNCTION_KW": format_CALL_FUNCTION_KW,
    "EXTENDED_ARG": format_extended_arg36,
    "FORMAT_VALUE": format_value_flags,
    "MAKE_FUNCTION": format_MAKE_FUNCTION_flags,
    "RAISE_VARARGS": opcode_37.format_RAISE_VARARGS
}

opcode_extended_fmt = {
Ejemplo n.º 27
0
# annotations and the closure are pushed on the stack if corresponding
# bit (0-3) is set. They are followed by the code object and the
# qualified name of the function.

# These are removed since 3.6...
# and STORE_ANNOTATION introduced in 3.6!
rm_op(l, "STORE_ANNOTATION", 127)

# These have a changed stack effect since 3.6
#          OP NAME            OPCODE POP PUSH
#---------------------------------------------------------------
def_op(l, "WITH_CLEANUP_START",   81,  0,  2)
def_op(l, "WITH_CLEANUP_FINISH",  82,  3,  0)
def_op(l, "END_FINALLY",          88,  6,  0)
def_op(l, "POP_EXCEPT",           89,  3,  0) # Pops last 3 values
jrel_op(l, "SETUP_WITH",         143,  0,  6)
jrel_op(l, "SETUP_ASYNC_WITH",   154,  0,  5)

# These are new since Python 3.7
name_op(l, "LOAD_METHOD", 160, 0, 1)
nargs_op(l, "CALL_METHOD", 161, -2, 1)

format_MAKE_FUNCTION_flags = opcode_36.format_MAKE_FUNCTION_flags
format_value_flags = opcode_36.format_value_flags

def extended_format_RAISE_VARARGS(opc, instructions):
    raise_inst = instructions[0]
    assert raise_inst.opname == "RAISE_VARARGS"
    argc = raise_inst.argval
    if argc == 0:
        return "reraise"
Ejemplo n.º 28
0
# These are removed since 3.7...
rm_op(l, 'BREAK_LOOP', 80)
rm_op(l, 'CONTINUE_LOOP', 119)
rm_op(l, 'SETUP_LOOP', 120)
rm_op(l, 'SETUP_EXCEPT', 121)

# These are new since Python 3.7

#          OP NAME            OPCODE POP PUSH
#--------------------------------------------
def_op(l, 'ROT_FOUR', 6, 4, 4)
def_op(l, 'BEGIN_FINALLY', 53, 0, 1)
def_op(l, 'END_ASYNC_FOR', 54, 7, 0)  # POP is 0, when not 7
def_op(l, 'END_FINALLY', 88, 1, 0)  # POP is 6, when not 1
jrel_op(l, 'CALL_FINALLY', 162, 0, 1)
nargs_op(l, 'POP_FINALLY', 163, 0, 0)  # PUSH/POP vary

format_MAKE_FUNCTION_arg = opcode_37.format_MAKE_FUNCTION_arg
format_value_flags = opcode_37.format_value_flags

opcode_arg_fmt = {
    'MAKE_FUNCTION': format_MAKE_FUNCTION_arg,
    'FORMAT_VALUE': format_value_flags,
    'EXTENDED_ARG': format_extended_arg36
}

update_pj3(globals(), l)

finalize_opcodes(l)
Ejemplo n.º 29
0
version = 3.5

import xdis.opcodes.opcode_35 as opcode_35

l = locals()
init_opdata(l, opcode_35, version, is_pypy=True)

## FIXME: DRY common PYPY opcode additions

# PyPy only
# ----------
def_op(l, 'FORMAT_VALUE',   155)
def_op(l, 'BUILD_STRING',   157)
name_op(l, 'LOOKUP_METHOD',  201,  1, 2)
nargs_op(l, 'CALL_METHOD', 202, -1, 1)
l['hasvargs'].append(202)

# Used only in single-mode compilation list-comprehension generators
varargs_op(l, 'BUILD_LIST_FROM_ARG', 203)

# Used only in assert statements
jrel_op(l, 'JUMP_IF_NOT_DEBUG',      204, conditional=True)

# There are no opcodes to remove or change.
# If there were, they'd be listed below.

# FIXME remove (fix uncompyle6)
update_pj3(globals(), l)

finalize_opcodes(l)
Ejemplo n.º 30
0
init_opdata(l, opcode_38, version_tuple, is_pypy=True)

# fmt: off
rm_op(l, "ROT_FOUR", 6)
rm_op(l, "BUILD_TUPLE_UNPACK_WITH_CALL", 158)
rm_op(l, "LOAD_METHOD", 160)

# PyPy only
# ----------

name_op(l, "LOOKUP_METHOD", 201, 1, 2)
l["hasvargs"].append(202)
nargs_op(l, "CALL_METHOD_KW", 204, -1, 1)

# Used only in single-mode compilation list-comprehension generators
jrel_op(l, 'SETUP_EXCEPT', 121, 0, 6, conditional=True)  # ""
varargs_op(l, "BUILD_LIST_FROM_ARG", 203)
def_op(l, "LOAD_REVDB_VAR", 205)

opcode_arg_fmt = {
    "EXTENDED_ARG": format_extended_arg,
    "MAKE_FUNCTION": format_MAKE_FUNCTION_flags,
    "RAISE_VARARGS": format_RAISE_VARARGS_older,
    'CALL_FUNCTION': format_CALL_FUNCTION_pos_name_encoded,
}

opcode_extended_fmt = {
    "LOAD_ATTR": extended_format_ATTR,
    "MAKE_FUNCTION": extended_format_MAKE_FUNCTION,
    "RAISE_VARARGS": extended_format_RAISE_VARARGS_older,
    "RETURN_VALUE": extended_format_RETURN_VALUE,