mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 702f8f3611
			
		
	
	
		702f8f3611
		
			
		
	
	
	
	
		
			
			* Added new opcode END_ASYNC_FOR. * Setting global StopAsyncIteration no longer breaks "async for" loops. * Jumping into an "async for" loop is now disabled. * Jumping out of an "async for" loop no longer corrupts the stack. * Simplify the compiler.
		
			
				
	
	
		
			1298 lines
		
	
	
	
		
			35 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			1298 lines
		
	
	
	
		
			35 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| :mod:`dis` --- Disassembler for Python bytecode
 | |
| ===============================================
 | |
| 
 | |
| .. module:: dis
 | |
|    :synopsis: Disassembler for Python bytecode.
 | |
| 
 | |
| **Source code:** :source:`Lib/dis.py`
 | |
| 
 | |
| --------------
 | |
| 
 | |
| The :mod:`dis` module supports the analysis of CPython :term:`bytecode` by
 | |
| disassembling it. The CPython bytecode which this module takes as an input is
 | |
| defined in the file :file:`Include/opcode.h` and used by the compiler and the
 | |
| interpreter.
 | |
| 
 | |
| .. impl-detail::
 | |
| 
 | |
|    Bytecode is an implementation detail of the CPython interpreter.  No
 | |
|    guarantees are made that bytecode will not be added, removed, or changed
 | |
|    between versions of Python.  Use of this module should not be considered to
 | |
|    work across Python VMs or Python releases.
 | |
| 
 | |
|    .. versionchanged:: 3.6
 | |
|       Use 2 bytes for each instruction. Previously the number of bytes varied
 | |
|       by instruction.
 | |
| 
 | |
| 
 | |
| Example: Given the function :func:`myfunc`::
 | |
| 
 | |
|    def myfunc(alist):
 | |
|        return len(alist)
 | |
| 
 | |
| the following command can be used to display the disassembly of
 | |
| :func:`myfunc`::
 | |
| 
 | |
|    >>> dis.dis(myfunc)
 | |
|      2           0 LOAD_GLOBAL              0 (len)
 | |
|                  2 LOAD_FAST                0 (alist)
 | |
|                  4 CALL_FUNCTION            1
 | |
|                  6 RETURN_VALUE
 | |
| 
 | |
| (The "2" is a line number).
 | |
| 
 | |
| Bytecode analysis
 | |
| -----------------
 | |
| 
 | |
| .. versionadded:: 3.4
 | |
| 
 | |
| The bytecode analysis API allows pieces of Python code to be wrapped in a
 | |
| :class:`Bytecode` object that provides easy access to details of the compiled
 | |
| code.
 | |
| 
 | |
| .. class:: Bytecode(x, *, first_line=None, current_offset=None)
 | |
| 
 | |
| 
 | |
|    Analyse the bytecode corresponding to a function, generator, asynchronous
 | |
|    generator, coroutine, method, string of source code, or a code object (as
 | |
|    returned by :func:`compile`).
 | |
| 
 | |
|    This is a convenience wrapper around many of the functions listed below, most
 | |
|    notably :func:`get_instructions`, as iterating over a :class:`Bytecode`
 | |
|    instance yields the bytecode operations as :class:`Instruction` instances.
 | |
| 
 | |
|    If *first_line* is not ``None``, it indicates the line number that should be
 | |
|    reported for the first source line in the disassembled code.  Otherwise, the
 | |
|    source line information (if any) is taken directly from the disassembled code
 | |
|    object.
 | |
| 
 | |
|    If *current_offset* is not ``None``, it refers to an instruction offset in the
 | |
|    disassembled code. Setting this means :meth:`.dis` will display a "current
 | |
|    instruction" marker against the specified opcode.
 | |
| 
 | |
|    .. classmethod:: from_traceback(tb)
 | |
| 
 | |
|       Construct a :class:`Bytecode` instance from the given traceback, setting
 | |
|       *current_offset* to the instruction responsible for the exception.
 | |
| 
 | |
|    .. data:: codeobj
 | |
| 
 | |
|       The compiled code object.
 | |
| 
 | |
|    .. data:: first_line
 | |
| 
 | |
|       The first source line of the code object (if available)
 | |
| 
 | |
|    .. method:: dis()
 | |
| 
 | |
|       Return a formatted view of the bytecode operations (the same as printed by
 | |
|       :func:`dis.dis`, but returned as a multi-line string).
 | |
| 
 | |
|    .. method:: info()
 | |
| 
 | |
|       Return a formatted multi-line string with detailed information about the
 | |
|       code object, like :func:`code_info`.
 | |
| 
 | |
|    .. versionchanged:: 3.7
 | |
|       This can now handle coroutine and asynchronous generator objects.
 | |
| 
 | |
| Example::
 | |
| 
 | |
|     >>> bytecode = dis.Bytecode(myfunc)
 | |
|     >>> for instr in bytecode:
 | |
|     ...     print(instr.opname)
 | |
|     ...
 | |
|     LOAD_GLOBAL
 | |
|     LOAD_FAST
 | |
|     CALL_FUNCTION
 | |
|     RETURN_VALUE
 | |
| 
 | |
| 
 | |
| Analysis functions
 | |
| ------------------
 | |
| 
 | |
| The :mod:`dis` module also defines the following analysis functions that convert
 | |
| the input directly to the desired output. They can be useful if only a single
 | |
| operation is being performed, so the intermediate analysis object isn't useful:
 | |
| 
 | |
| .. function:: code_info(x)
 | |
| 
 | |
|    Return a formatted multi-line string with detailed code object information
 | |
|    for the supplied function, generator, asynchronous generator, coroutine,
 | |
|    method, source code string or code object.
 | |
| 
 | |
|    Note that the exact contents of code info strings are highly implementation
 | |
|    dependent and they may change arbitrarily across Python VMs or Python
 | |
|    releases.
 | |
| 
 | |
|    .. versionadded:: 3.2
 | |
| 
 | |
|    .. versionchanged:: 3.7
 | |
|       This can now handle coroutine and asynchronous generator objects.
 | |
| 
 | |
| 
 | |
| .. function:: show_code(x, *, file=None)
 | |
| 
 | |
|    Print detailed code object information for the supplied function, method,
 | |
|    source code string or code object to *file* (or ``sys.stdout`` if *file*
 | |
|    is not specified).
 | |
| 
 | |
|    This is a convenient shorthand for ``print(code_info(x), file=file)``,
 | |
|    intended for interactive exploration at the interpreter prompt.
 | |
| 
 | |
|    .. versionadded:: 3.2
 | |
| 
 | |
|    .. versionchanged:: 3.4
 | |
|       Added *file* parameter.
 | |
| 
 | |
| 
 | |
| .. function:: dis(x=None, *, file=None, depth=None)
 | |
| 
 | |
|    Disassemble the *x* object.  *x* can denote either a module, a class, a
 | |
|    method, a function, a generator, an asynchronous generator, a couroutine,
 | |
|    a code object, a string of source code or a byte sequence of raw bytecode.
 | |
|    For a module, it disassembles all functions. For a class, it disassembles
 | |
|    all methods (including class and static methods). For a code object or
 | |
|    sequence of raw bytecode, it prints one line per bytecode instruction.
 | |
|    It also recursively disassembles nested code objects (the code of
 | |
|    comprehensions, generator expressions and nested functions, and the code
 | |
|    used for building nested classes).
 | |
|    Strings are first compiled to code objects with the :func:`compile`
 | |
|    built-in function before being disassembled.  If no object is provided, this
 | |
|    function disassembles the last traceback.
 | |
| 
 | |
|    The disassembly is written as text to the supplied *file* argument if
 | |
|    provided and to ``sys.stdout`` otherwise.
 | |
| 
 | |
|    The maximal depth of recursion is limited by *depth* unless it is ``None``.
 | |
|    ``depth=0`` means no recursion.
 | |
| 
 | |
|    .. versionchanged:: 3.4
 | |
|       Added *file* parameter.
 | |
| 
 | |
|    .. versionchanged:: 3.7
 | |
|       Implemented recursive disassembling and added *depth* parameter.
 | |
| 
 | |
|    .. versionchanged:: 3.7
 | |
|       This can now handle coroutine and asynchronous generator objects.
 | |
| 
 | |
| 
 | |
| .. function:: distb(tb=None, *, file=None)
 | |
| 
 | |
|    Disassemble the top-of-stack function of a traceback, using the last
 | |
|    traceback if none was passed.  The instruction causing the exception is
 | |
|    indicated.
 | |
| 
 | |
|    The disassembly is written as text to the supplied *file* argument if
 | |
|    provided and to ``sys.stdout`` otherwise.
 | |
| 
 | |
|    .. versionchanged:: 3.4
 | |
|       Added *file* parameter.
 | |
| 
 | |
| 
 | |
| .. function:: disassemble(code, lasti=-1, *, file=None)
 | |
|               disco(code, lasti=-1, *, file=None)
 | |
| 
 | |
|    Disassemble a code object, indicating the last instruction if *lasti* was
 | |
|    provided.  The output is divided in the following columns:
 | |
| 
 | |
|    #. the line number, for the first instruction of each line
 | |
|    #. the current instruction, indicated as ``-->``,
 | |
|    #. a labelled instruction, indicated with ``>>``,
 | |
|    #. the address of the instruction,
 | |
|    #. the operation code name,
 | |
|    #. operation parameters, and
 | |
|    #. interpretation of the parameters in parentheses.
 | |
| 
 | |
|    The parameter interpretation recognizes local and global variable names,
 | |
|    constant values, branch targets, and compare operators.
 | |
| 
 | |
|    The disassembly is written as text to the supplied *file* argument if
 | |
|    provided and to ``sys.stdout`` otherwise.
 | |
| 
 | |
|    .. versionchanged:: 3.4
 | |
|       Added *file* parameter.
 | |
| 
 | |
| 
 | |
| .. function:: get_instructions(x, *, first_line=None)
 | |
| 
 | |
|    Return an iterator over the instructions in the supplied function, method,
 | |
|    source code string or code object.
 | |
| 
 | |
|    The iterator generates a series of :class:`Instruction` named tuples giving
 | |
|    the details of each operation in the supplied code.
 | |
| 
 | |
|    If *first_line* is not ``None``, it indicates the line number that should be
 | |
|    reported for the first source line in the disassembled code.  Otherwise, the
 | |
|    source line information (if any) is taken directly from the disassembled code
 | |
|    object.
 | |
| 
 | |
|    .. versionadded:: 3.4
 | |
| 
 | |
| 
 | |
| .. function:: findlinestarts(code)
 | |
| 
 | |
|    This generator function uses the ``co_firstlineno`` and ``co_lnotab``
 | |
|    attributes of the code object *code* to find the offsets which are starts of
 | |
|    lines in the source code.  They are generated as ``(offset, lineno)`` pairs.
 | |
|    See :source:`Objects/lnotab_notes.txt` for the ``co_lnotab`` format and
 | |
|    how to decode it.
 | |
| 
 | |
|    .. versionchanged:: 3.6
 | |
|       Line numbers can be decreasing. Before, they were always increasing.
 | |
| 
 | |
| 
 | |
| .. function:: findlabels(code)
 | |
| 
 | |
|    Detect all offsets in the code object *code* which are jump targets, and
 | |
|    return a list of these offsets.
 | |
| 
 | |
| 
 | |
| .. function:: stack_effect(opcode, [oparg])
 | |
| 
 | |
|    Compute the stack effect of *opcode* with argument *oparg*.
 | |
| 
 | |
|    .. versionadded:: 3.4
 | |
| 
 | |
| .. _bytecodes:
 | |
| 
 | |
| Python Bytecode Instructions
 | |
| ----------------------------
 | |
| 
 | |
| The :func:`get_instructions` function and :class:`Bytecode` class provide
 | |
| details of bytecode instructions as :class:`Instruction` instances:
 | |
| 
 | |
| .. class:: Instruction
 | |
| 
 | |
|    Details for a bytecode operation
 | |
| 
 | |
|    .. data:: opcode
 | |
| 
 | |
|       numeric code for operation, corresponding to the opcode values listed
 | |
|       below and the bytecode values in the :ref:`opcode_collections`.
 | |
| 
 | |
| 
 | |
|    .. data:: opname
 | |
| 
 | |
|       human readable name for operation
 | |
| 
 | |
| 
 | |
|    .. data:: arg
 | |
| 
 | |
|       numeric argument to operation (if any), otherwise ``None``
 | |
| 
 | |
| 
 | |
|    .. data:: argval
 | |
| 
 | |
|       resolved arg value (if known), otherwise same as arg
 | |
| 
 | |
| 
 | |
|    .. data:: argrepr
 | |
| 
 | |
|       human readable description of operation argument
 | |
| 
 | |
| 
 | |
|    .. data:: offset
 | |
| 
 | |
|       start index of operation within bytecode sequence
 | |
| 
 | |
| 
 | |
|    .. data:: starts_line
 | |
| 
 | |
|       line started by this opcode (if any), otherwise ``None``
 | |
| 
 | |
| 
 | |
|    .. data:: is_jump_target
 | |
| 
 | |
|       ``True`` if other code jumps to here, otherwise ``False``
 | |
| 
 | |
|    .. versionadded:: 3.4
 | |
| 
 | |
| 
 | |
| The Python compiler currently generates the following bytecode instructions.
 | |
| 
 | |
| 
 | |
| **General instructions**
 | |
| 
 | |
| .. opcode:: NOP
 | |
| 
 | |
|    Do nothing code.  Used as a placeholder by the bytecode optimizer.
 | |
| 
 | |
| 
 | |
| .. opcode:: POP_TOP
 | |
| 
 | |
|    Removes the top-of-stack (TOS) item.
 | |
| 
 | |
| 
 | |
| .. opcode:: ROT_TWO
 | |
| 
 | |
|    Swaps the two top-most stack items.
 | |
| 
 | |
| 
 | |
| .. opcode:: ROT_THREE
 | |
| 
 | |
|    Lifts second and third stack item one position up, moves top down to position
 | |
|    three.
 | |
| 
 | |
| 
 | |
| .. opcode:: ROT_FOUR
 | |
| 
 | |
|    Lifts second, third and forth stack items one position up, moves top down
 | |
|    to position four.
 | |
| 
 | |
|    .. versionadded:: 3.8
 | |
| 
 | |
| 
 | |
| .. opcode:: DUP_TOP
 | |
| 
 | |
|    Duplicates the reference on top of the stack.
 | |
| 
 | |
|    .. versionadded:: 3.2
 | |
| 
 | |
| 
 | |
| .. opcode:: DUP_TOP_TWO
 | |
| 
 | |
|    Duplicates the two references on top of the stack, leaving them in the
 | |
|    same order.
 | |
| 
 | |
|    .. versionadded:: 3.2
 | |
| 
 | |
| 
 | |
| **Unary operations**
 | |
| 
 | |
| Unary operations take the top of the stack, apply the operation, and push the
 | |
| result back on the stack.
 | |
| 
 | |
| .. opcode:: UNARY_POSITIVE
 | |
| 
 | |
|    Implements ``TOS = +TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: UNARY_NEGATIVE
 | |
| 
 | |
|    Implements ``TOS = -TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: UNARY_NOT
 | |
| 
 | |
|    Implements ``TOS = not TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: UNARY_INVERT
 | |
| 
 | |
|    Implements ``TOS = ~TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: GET_ITER
 | |
| 
 | |
|    Implements ``TOS = iter(TOS)``.
 | |
| 
 | |
| 
 | |
| .. opcode:: GET_YIELD_FROM_ITER
 | |
| 
 | |
|    If ``TOS`` is a :term:`generator iterator` or :term:`coroutine` object
 | |
|    it is left as is.  Otherwise, implements ``TOS = iter(TOS)``.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| **Binary operations**
 | |
| 
 | |
| Binary operations remove the top of the stack (TOS) and the second top-most
 | |
| stack item (TOS1) from the stack.  They perform the operation, and put the
 | |
| result back on the stack.
 | |
| 
 | |
| .. opcode:: BINARY_POWER
 | |
| 
 | |
|    Implements ``TOS = TOS1 ** TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_MULTIPLY
 | |
| 
 | |
|    Implements ``TOS = TOS1 * TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_MATRIX_MULTIPLY
 | |
| 
 | |
|    Implements ``TOS = TOS1 @ TOS``.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_FLOOR_DIVIDE
 | |
| 
 | |
|    Implements ``TOS = TOS1 // TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_TRUE_DIVIDE
 | |
| 
 | |
|    Implements ``TOS = TOS1 / TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_MODULO
 | |
| 
 | |
|    Implements ``TOS = TOS1 % TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_ADD
 | |
| 
 | |
|    Implements ``TOS = TOS1 + TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_SUBTRACT
 | |
| 
 | |
|    Implements ``TOS = TOS1 - TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_SUBSCR
 | |
| 
 | |
|    Implements ``TOS = TOS1[TOS]``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_LSHIFT
 | |
| 
 | |
|    Implements ``TOS = TOS1 << TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_RSHIFT
 | |
| 
 | |
|    Implements ``TOS = TOS1 >> TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_AND
 | |
| 
 | |
|    Implements ``TOS = TOS1 & TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_XOR
 | |
| 
 | |
|    Implements ``TOS = TOS1 ^ TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: BINARY_OR
 | |
| 
 | |
|    Implements ``TOS = TOS1 | TOS``.
 | |
| 
 | |
| 
 | |
| **In-place operations**
 | |
| 
 | |
| In-place operations are like binary operations, in that they remove TOS and
 | |
| TOS1, and push the result back on the stack, but the operation is done in-place
 | |
| when TOS1 supports it, and the resulting TOS may be (but does not have to be)
 | |
| the original TOS1.
 | |
| 
 | |
| .. opcode:: INPLACE_POWER
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 ** TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_MULTIPLY
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 * TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_MATRIX_MULTIPLY
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 @ TOS``.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_FLOOR_DIVIDE
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 // TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_TRUE_DIVIDE
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 / TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_MODULO
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 % TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_ADD
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 + TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_SUBTRACT
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 - TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_LSHIFT
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 << TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_RSHIFT
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 >> TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_AND
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 & TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_XOR
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 ^ TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: INPLACE_OR
 | |
| 
 | |
|    Implements in-place ``TOS = TOS1 | TOS``.
 | |
| 
 | |
| 
 | |
| .. opcode:: STORE_SUBSCR
 | |
| 
 | |
|    Implements ``TOS1[TOS] = TOS2``.
 | |
| 
 | |
| 
 | |
| .. opcode:: DELETE_SUBSCR
 | |
| 
 | |
|    Implements ``del TOS1[TOS]``.
 | |
| 
 | |
| 
 | |
| **Coroutine opcodes**
 | |
| 
 | |
| .. opcode:: GET_AWAITABLE
 | |
| 
 | |
|    Implements ``TOS = get_awaitable(TOS)``, where ``get_awaitable(o)``
 | |
|    returns ``o`` if ``o`` is a coroutine object or a generator object with
 | |
|    the CO_ITERABLE_COROUTINE flag, or resolves
 | |
|    ``o.__await__``.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| .. opcode:: GET_AITER
 | |
| 
 | |
|    Implements ``TOS = TOS.__aiter__()``.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
|    .. versionchanged:: 3.7
 | |
|       Returning awaitable objects from ``__aiter__`` is no longer
 | |
|       supported.
 | |
| 
 | |
| 
 | |
| .. opcode:: GET_ANEXT
 | |
| 
 | |
|    Implements ``PUSH(get_awaitable(TOS.__anext__()))``.  See ``GET_AWAITABLE``
 | |
|    for details about ``get_awaitable``
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| .. opcode:: END_ASYNC_FOR
 | |
| 
 | |
|    Terminates an :keyword:`async for` loop.  Handles an exception raised
 | |
|    when awaiting a next item.  If TOS is :exc:`StopAsyncIteration` pop 7
 | |
|    values from the stack and restore the exception state using the second
 | |
|    three of them.  Otherwise re-raise the exception using the three values
 | |
|    from the stack.  An exception handler block is removed from the block stack.
 | |
| 
 | |
|    .. versionadded:: 3.8
 | |
| 
 | |
| 
 | |
| .. opcode:: BEFORE_ASYNC_WITH
 | |
| 
 | |
|    Resolves ``__aenter__`` and ``__aexit__`` from the object on top of the
 | |
|    stack.  Pushes ``__aexit__`` and result of ``__aenter__()`` to the stack.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| .. opcode:: SETUP_ASYNC_WITH
 | |
| 
 | |
|    Creates a new frame object.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| 
 | |
| **Miscellaneous opcodes**
 | |
| 
 | |
| .. opcode:: PRINT_EXPR
 | |
| 
 | |
|    Implements the expression statement for the interactive mode.  TOS is removed
 | |
|    from the stack and printed.  In non-interactive mode, an expression statement
 | |
|    is terminated with :opcode:`POP_TOP`.
 | |
| 
 | |
| 
 | |
| .. opcode:: SET_ADD (i)
 | |
| 
 | |
|    Calls ``set.add(TOS1[-i], TOS)``.  Used to implement set comprehensions.
 | |
| 
 | |
| 
 | |
| .. opcode:: LIST_APPEND (i)
 | |
| 
 | |
|    Calls ``list.append(TOS[-i], TOS)``.  Used to implement list comprehensions.
 | |
| 
 | |
| 
 | |
| .. opcode:: MAP_ADD (i)
 | |
| 
 | |
|    Calls ``dict.setitem(TOS1[-i], TOS, TOS1)``.  Used to implement dict
 | |
|    comprehensions.
 | |
| 
 | |
|    .. versionadded:: 3.1
 | |
| 
 | |
| For all of the :opcode:`SET_ADD`, :opcode:`LIST_APPEND` and :opcode:`MAP_ADD`
 | |
| instructions, while the added value or key/value pair is popped off, the
 | |
| container object remains on the stack so that it is available for further
 | |
| iterations of the loop.
 | |
| 
 | |
| 
 | |
| .. opcode:: RETURN_VALUE
 | |
| 
 | |
|    Returns with TOS to the caller of the function.
 | |
| 
 | |
| 
 | |
| .. opcode:: YIELD_VALUE
 | |
| 
 | |
|    Pops TOS and yields it from a :term:`generator`.
 | |
| 
 | |
| 
 | |
| .. opcode:: YIELD_FROM
 | |
| 
 | |
|    Pops TOS and delegates to it as a subiterator from a :term:`generator`.
 | |
| 
 | |
|    .. versionadded:: 3.3
 | |
| 
 | |
| 
 | |
| .. opcode:: SETUP_ANNOTATIONS
 | |
| 
 | |
|    Checks whether ``__annotations__`` is defined in ``locals()``, if not it is
 | |
|    set up to an empty ``dict``. This opcode is only emitted if a class
 | |
|    or module body contains :term:`variable annotations <variable annotation>`
 | |
|    statically.
 | |
| 
 | |
|    .. versionadded:: 3.6
 | |
| 
 | |
| 
 | |
| .. opcode:: IMPORT_STAR
 | |
| 
 | |
|    Loads all symbols not starting with ``'_'`` directly from the module TOS to
 | |
|    the local namespace. The module is popped after loading all names. This
 | |
|    opcode implements ``from module import *``.
 | |
| 
 | |
| 
 | |
| .. opcode:: POP_BLOCK
 | |
| 
 | |
|    Removes one block from the block stack.  Per frame, there is a stack of
 | |
|    blocks, denoting :keyword:`try` statements, and such.
 | |
| 
 | |
| 
 | |
| .. opcode:: POP_EXCEPT
 | |
| 
 | |
|    Removes one block from the block stack. The popped block must be an exception
 | |
|    handler block, as implicitly created when entering an except handler.  In
 | |
|    addition to popping extraneous values from the frame stack, the last three
 | |
|    popped values are used to restore the exception state.
 | |
| 
 | |
| 
 | |
| .. opcode:: POP_FINALLY (preserve_tos)
 | |
| 
 | |
|    Cleans up the value stack and the block stack.  If *preserve_tos* is not
 | |
|    ``0`` TOS first is popped from the stack and pushed on the stack after
 | |
|    perfoming other stack operations:
 | |
| 
 | |
|    * If TOS is ``NULL`` or an integer (pushed by :opcode:`BEGIN_FINALLY`
 | |
|      or :opcode:`CALL_FINALLY`) it is popped from the stack.
 | |
|    * If TOS is an exception type (pushed when an exception has been raised)
 | |
|      6 values are popped from the stack, the last three popped values are
 | |
|      used to restore the exception state.  An exception handler block is
 | |
|      removed from the block stack.
 | |
| 
 | |
|    It is similar to :opcode:`END_FINALLY`, but doesn't change the bytecode
 | |
|    counter nor raise an exception.  Used for implementing :keyword:`break`,
 | |
|    :keyword:`continue` and :keyword:`return` in the :keyword:`finally` block.
 | |
| 
 | |
|    .. versionadded:: 3.8
 | |
| 
 | |
| 
 | |
| .. opcode:: BEGIN_FINALLY
 | |
| 
 | |
|    Pushes ``NULL`` onto the stack for using it in :opcode:`END_FINALLY`,
 | |
|    :opcode:`POP_FINALLY`, :opcode:`WITH_CLEANUP_START` and
 | |
|    :opcode:`WITH_CLEANUP_FINISH`.  Starts the :keyword:`finally` block.
 | |
| 
 | |
|    .. versionadded:: 3.8
 | |
| 
 | |
| 
 | |
| .. opcode:: END_FINALLY
 | |
| 
 | |
|    Terminates a :keyword:`finally` clause.  The interpreter recalls whether the
 | |
|    exception has to be re-raised or execution has to be continued depending on
 | |
|    the value of TOS.
 | |
| 
 | |
|    * If TOS is ``NULL`` (pushed by :opcode:`BEGIN_FINALLY`) continue from
 | |
|      the next instruction. TOS is popped.
 | |
|    * If TOS is an integer (pushed by :opcode:`CALL_FINALLY`), sets the
 | |
|      bytecode counter to TOS.  TOS is popped.
 | |
|    * If TOS is an exception type (pushed when an exception has been raised)
 | |
|      6 values are popped from the stack, the first three popped values are
 | |
|      used to re-raise the exception and the last three popped values are used
 | |
|      to restore the exception state.  An exception handler block is removed
 | |
|      from the block stack.
 | |
| 
 | |
| 
 | |
| .. opcode:: LOAD_BUILD_CLASS
 | |
| 
 | |
|    Pushes :func:`builtins.__build_class__` onto the stack.  It is later called
 | |
|    by :opcode:`CALL_FUNCTION` to construct a class.
 | |
| 
 | |
| 
 | |
| .. opcode:: SETUP_WITH (delta)
 | |
| 
 | |
|    This opcode performs several operations before a with block starts.  First,
 | |
|    it loads :meth:`~object.__exit__` from the context manager and pushes it onto
 | |
|    the stack for later use by :opcode:`WITH_CLEANUP_START`.  Then,
 | |
|    :meth:`~object.__enter__` is called, and a finally block pointing to *delta*
 | |
|    is pushed.  Finally, the result of calling the ``__enter__()`` method is pushed onto
 | |
|    the stack.  The next opcode will either ignore it (:opcode:`POP_TOP`), or
 | |
|    store it in (a) variable(s) (:opcode:`STORE_FAST`, :opcode:`STORE_NAME`, or
 | |
|    :opcode:`UNPACK_SEQUENCE`).
 | |
| 
 | |
|    .. versionadded:: 3.2
 | |
| 
 | |
| 
 | |
| .. opcode:: WITH_CLEANUP_START
 | |
| 
 | |
|    Starts cleaning up the stack when a :keyword:`with` statement block exits.
 | |
| 
 | |
|    At the top of the stack are either ``NULL`` (pushed by
 | |
|    :opcode:`BEGIN_FINALLY`) or 6 values pushed if an exception has been
 | |
|    raised in the with block.  Below is the context manager's
 | |
|    :meth:`~object.__exit__` or :meth:`~object.__aexit__` bound method.
 | |
| 
 | |
|    If TOS is ``NULL``, calls ``SECOND(None, None, None)``,
 | |
|    removes the function from the stack, leaving TOS, and pushes ``None``
 | |
|    to the stack.  Otherwise calls ``SEVENTH(TOP, SECOND, THIRD)``,
 | |
|    shifts the bottom 3 values of the stack down, replaces the empty spot
 | |
|    with ``NULL`` and pushes TOS.  Finally pushes the result of the call.
 | |
| 
 | |
| 
 | |
| .. opcode:: WITH_CLEANUP_FINISH
 | |
| 
 | |
|    Finishes cleaning up the stack when a :keyword:`with` statement block exits.
 | |
| 
 | |
|    TOS is result of ``__exit__()`` or ``__aexit__()`` function call pushed
 | |
|    by :opcode:`WITH_CLEANUP_START`.  SECOND is ``None`` or an exception type
 | |
|    (pushed when an exception has been raised).
 | |
| 
 | |
|    Pops two values from the stack.  If SECOND is not None and TOS is true
 | |
|    unwinds the EXCEPT_HANDLER block which was created when the exception
 | |
|    was caught and pushes ``NULL`` to the stack.
 | |
| 
 | |
| 
 | |
| All of the following opcodes use their arguments.
 | |
| 
 | |
| .. opcode:: STORE_NAME (namei)
 | |
| 
 | |
|    Implements ``name = TOS``. *namei* is the index of *name* in the attribute
 | |
|    :attr:`co_names` of the code object. The compiler tries to use
 | |
|    :opcode:`STORE_FAST` or :opcode:`STORE_GLOBAL` if possible.
 | |
| 
 | |
| 
 | |
| .. opcode:: DELETE_NAME (namei)
 | |
| 
 | |
|    Implements ``del name``, where *namei* is the index into :attr:`co_names`
 | |
|    attribute of the code object.
 | |
| 
 | |
| 
 | |
| .. opcode:: UNPACK_SEQUENCE (count)
 | |
| 
 | |
|    Unpacks TOS into *count* individual values, which are put onto the stack
 | |
|    right-to-left.
 | |
| 
 | |
| 
 | |
| .. opcode:: UNPACK_EX (counts)
 | |
| 
 | |
|    Implements assignment with a starred target: Unpacks an iterable in TOS into
 | |
|    individual values, where the total number of values can be smaller than the
 | |
|    number of items in the iterable: one of the new values will be a list of all
 | |
|    leftover items.
 | |
| 
 | |
|    The low byte of *counts* is the number of values before the list value, the
 | |
|    high byte of *counts* the number of values after it.  The resulting values
 | |
|    are put onto the stack right-to-left.
 | |
| 
 | |
| 
 | |
| .. opcode:: STORE_ATTR (namei)
 | |
| 
 | |
|    Implements ``TOS.name = TOS1``, where *namei* is the index of name in
 | |
|    :attr:`co_names`.
 | |
| 
 | |
| 
 | |
| .. opcode:: DELETE_ATTR (namei)
 | |
| 
 | |
|    Implements ``del TOS.name``, using *namei* as index into :attr:`co_names`.
 | |
| 
 | |
| 
 | |
| .. opcode:: STORE_GLOBAL (namei)
 | |
| 
 | |
|    Works as :opcode:`STORE_NAME`, but stores the name as a global.
 | |
| 
 | |
| 
 | |
| .. opcode:: DELETE_GLOBAL (namei)
 | |
| 
 | |
|    Works as :opcode:`DELETE_NAME`, but deletes a global name.
 | |
| 
 | |
| 
 | |
| .. opcode:: LOAD_CONST (consti)
 | |
| 
 | |
|    Pushes ``co_consts[consti]`` onto the stack.
 | |
| 
 | |
| 
 | |
| .. opcode:: LOAD_NAME (namei)
 | |
| 
 | |
|    Pushes the value associated with ``co_names[namei]`` onto the stack.
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_TUPLE (count)
 | |
| 
 | |
|    Creates a tuple consuming *count* items from the stack, and pushes the
 | |
|    resulting tuple onto the stack.
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_LIST (count)
 | |
| 
 | |
|    Works as :opcode:`BUILD_TUPLE`, but creates a list.
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_SET (count)
 | |
| 
 | |
|    Works as :opcode:`BUILD_TUPLE`, but creates a set.
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_MAP (count)
 | |
| 
 | |
|    Pushes a new dictionary object onto the stack.  Pops ``2 * count`` items
 | |
|    so that the dictionary holds *count* entries:
 | |
|    ``{..., TOS3: TOS2, TOS1: TOS}``.
 | |
| 
 | |
|    .. versionchanged:: 3.5
 | |
|       The dictionary is created from stack items instead of creating an
 | |
|       empty dictionary pre-sized to hold *count* items.
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_CONST_KEY_MAP (count)
 | |
| 
 | |
|    The version of :opcode:`BUILD_MAP` specialized for constant keys.  *count*
 | |
|    values are consumed from the stack.  The top element on the stack contains
 | |
|    a tuple of keys.
 | |
| 
 | |
|    .. versionadded:: 3.6
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_STRING (count)
 | |
| 
 | |
|    Concatenates *count* strings from the stack and pushes the resulting string
 | |
|    onto the stack.
 | |
| 
 | |
|    .. versionadded:: 3.6
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_TUPLE_UNPACK (count)
 | |
| 
 | |
|    Pops *count* iterables from the stack, joins them in a single tuple,
 | |
|    and pushes the result.  Implements iterable unpacking in tuple
 | |
|    displays ``(*x, *y, *z)``.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_TUPLE_UNPACK_WITH_CALL (count)
 | |
| 
 | |
|    This is similar to :opcode:`BUILD_TUPLE_UNPACK`,
 | |
|    but is used for ``f(*x, *y, *z)`` call syntax. The stack item at position
 | |
|    ``count + 1`` should be the corresponding callable ``f``.
 | |
| 
 | |
|    .. versionadded:: 3.6
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_LIST_UNPACK (count)
 | |
| 
 | |
|    This is similar to :opcode:`BUILD_TUPLE_UNPACK`, but pushes a list
 | |
|    instead of tuple.  Implements iterable unpacking in list
 | |
|    displays ``[*x, *y, *z]``.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_SET_UNPACK (count)
 | |
| 
 | |
|    This is similar to :opcode:`BUILD_TUPLE_UNPACK`, but pushes a set
 | |
|    instead of tuple.  Implements iterable unpacking in set
 | |
|    displays ``{*x, *y, *z}``.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_MAP_UNPACK (count)
 | |
| 
 | |
|    Pops *count* mappings from the stack, merges them into a single dictionary,
 | |
|    and pushes the result.  Implements dictionary unpacking in dictionary
 | |
|    displays ``{**x, **y, **z}``.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_MAP_UNPACK_WITH_CALL (count)
 | |
| 
 | |
|    This is similar to :opcode:`BUILD_MAP_UNPACK`,
 | |
|    but is used for ``f(**x, **y, **z)`` call syntax.  The stack item at
 | |
|    position ``count + 2`` should be the corresponding callable ``f``.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
|    .. versionchanged:: 3.6
 | |
|       The position of the callable is determined by adding 2 to the opcode
 | |
|       argument instead of encoding it in the second byte of the argument.
 | |
| 
 | |
| 
 | |
| .. opcode:: LOAD_ATTR (namei)
 | |
| 
 | |
|    Replaces TOS with ``getattr(TOS, co_names[namei])``.
 | |
| 
 | |
| 
 | |
| .. opcode:: COMPARE_OP (opname)
 | |
| 
 | |
|    Performs a Boolean operation.  The operation name can be found in
 | |
|    ``cmp_op[opname]``.
 | |
| 
 | |
| 
 | |
| .. opcode:: IMPORT_NAME (namei)
 | |
| 
 | |
|    Imports the module ``co_names[namei]``.  TOS and TOS1 are popped and provide
 | |
|    the *fromlist* and *level* arguments of :func:`__import__`.  The module
 | |
|    object is pushed onto the stack.  The current namespace is not affected: for
 | |
|    a proper import statement, a subsequent :opcode:`STORE_FAST` instruction
 | |
|    modifies the namespace.
 | |
| 
 | |
| 
 | |
| .. opcode:: IMPORT_FROM (namei)
 | |
| 
 | |
|    Loads the attribute ``co_names[namei]`` from the module found in TOS. The
 | |
|    resulting object is pushed onto the stack, to be subsequently stored by a
 | |
|    :opcode:`STORE_FAST` instruction.
 | |
| 
 | |
| 
 | |
| .. opcode:: JUMP_FORWARD (delta)
 | |
| 
 | |
|    Increments bytecode counter by *delta*.
 | |
| 
 | |
| 
 | |
| .. opcode:: POP_JUMP_IF_TRUE (target)
 | |
| 
 | |
|    If TOS is true, sets the bytecode counter to *target*.  TOS is popped.
 | |
| 
 | |
|    .. versionadded:: 3.1
 | |
| 
 | |
| 
 | |
| .. opcode:: POP_JUMP_IF_FALSE (target)
 | |
| 
 | |
|    If TOS is false, sets the bytecode counter to *target*.  TOS is popped.
 | |
| 
 | |
|    .. versionadded:: 3.1
 | |
| 
 | |
| 
 | |
| .. opcode:: JUMP_IF_TRUE_OR_POP (target)
 | |
| 
 | |
|    If TOS is true, sets the bytecode counter to *target* and leaves TOS on the
 | |
|    stack.  Otherwise (TOS is false), TOS is popped.
 | |
| 
 | |
|    .. versionadded:: 3.1
 | |
| 
 | |
| 
 | |
| .. opcode:: JUMP_IF_FALSE_OR_POP (target)
 | |
| 
 | |
|    If TOS is false, sets the bytecode counter to *target* and leaves TOS on the
 | |
|    stack.  Otherwise (TOS is true), TOS is popped.
 | |
| 
 | |
|    .. versionadded:: 3.1
 | |
| 
 | |
| 
 | |
| .. opcode:: JUMP_ABSOLUTE (target)
 | |
| 
 | |
|    Set bytecode counter to *target*.
 | |
| 
 | |
| 
 | |
| .. opcode:: FOR_ITER (delta)
 | |
| 
 | |
|    TOS is an :term:`iterator`.  Call its :meth:`~iterator.__next__` method.  If
 | |
|    this yields a new value, push it on the stack (leaving the iterator below
 | |
|    it).  If the iterator indicates it is exhausted TOS is popped, and the byte
 | |
|    code counter is incremented by *delta*.
 | |
| 
 | |
| 
 | |
| .. opcode:: LOAD_GLOBAL (namei)
 | |
| 
 | |
|    Loads the global named ``co_names[namei]`` onto the stack.
 | |
| 
 | |
| 
 | |
| .. opcode:: SETUP_FINALLY (delta)
 | |
| 
 | |
|    Pushes a try block from a try-finally or try-except clause onto the block
 | |
|    stack.  *delta* points to the finally block or the first except block.
 | |
| 
 | |
| 
 | |
| .. opcode:: CALL_FINALLY (delta)
 | |
| 
 | |
|    Pushes the address of the next instruction onto the stack and increments
 | |
|    bytecode counter by *delta*.  Used for calling the finally block as a
 | |
|    "subroutine".
 | |
| 
 | |
|    .. versionadded:: 3.8
 | |
| 
 | |
| 
 | |
| .. opcode:: LOAD_FAST (var_num)
 | |
| 
 | |
|    Pushes a reference to the local ``co_varnames[var_num]`` onto the stack.
 | |
| 
 | |
| 
 | |
| .. opcode:: STORE_FAST (var_num)
 | |
| 
 | |
|    Stores TOS into the local ``co_varnames[var_num]``.
 | |
| 
 | |
| 
 | |
| .. opcode:: DELETE_FAST (var_num)
 | |
| 
 | |
|    Deletes local ``co_varnames[var_num]``.
 | |
| 
 | |
| 
 | |
| .. opcode:: LOAD_CLOSURE (i)
 | |
| 
 | |
|    Pushes a reference to the cell contained in slot *i* of the cell and free
 | |
|    variable storage.  The name of the variable is ``co_cellvars[i]`` if *i* is
 | |
|    less than the length of *co_cellvars*.  Otherwise it is ``co_freevars[i -
 | |
|    len(co_cellvars)]``.
 | |
| 
 | |
| 
 | |
| .. opcode:: LOAD_DEREF (i)
 | |
| 
 | |
|    Loads the cell contained in slot *i* of the cell and free variable storage.
 | |
|    Pushes a reference to the object the cell contains on the stack.
 | |
| 
 | |
| 
 | |
| .. opcode:: LOAD_CLASSDEREF (i)
 | |
| 
 | |
|    Much like :opcode:`LOAD_DEREF` but first checks the locals dictionary before
 | |
|    consulting the cell.  This is used for loading free variables in class
 | |
|    bodies.
 | |
| 
 | |
|    .. versionadded:: 3.4
 | |
| 
 | |
| 
 | |
| .. opcode:: STORE_DEREF (i)
 | |
| 
 | |
|    Stores TOS into the cell contained in slot *i* of the cell and free variable
 | |
|    storage.
 | |
| 
 | |
| 
 | |
| .. opcode:: DELETE_DEREF (i)
 | |
| 
 | |
|    Empties the cell contained in slot *i* of the cell and free variable storage.
 | |
|    Used by the :keyword:`del` statement.
 | |
| 
 | |
|    .. versionadded:: 3.2
 | |
| 
 | |
| 
 | |
| .. opcode:: RAISE_VARARGS (argc)
 | |
| 
 | |
|    Raises an exception. *argc* indicates the number of parameters to the raise
 | |
|    statement, ranging from 0 to 3.  The handler will find the traceback as TOS2,
 | |
|    the parameter as TOS1, and the exception as TOS.
 | |
| 
 | |
| 
 | |
| .. opcode:: CALL_FUNCTION (argc)
 | |
| 
 | |
|    Calls a function.  *argc* indicates the number of positional arguments.
 | |
|    The positional arguments are on the stack, with the right-most argument
 | |
|    on top.  Below the arguments, the function object to call is on the stack.
 | |
|    Pops all function arguments, and the function itself off the stack, and
 | |
|    pushes the return value.
 | |
| 
 | |
|    .. versionchanged:: 3.6
 | |
|       This opcode is used only for calls with positional arguments.
 | |
| 
 | |
| 
 | |
| .. opcode:: CALL_FUNCTION_KW (argc)
 | |
| 
 | |
|    Calls a function.  *argc* indicates the number of arguments (positional
 | |
|    and keyword).  The top element on the stack contains a tuple of keyword
 | |
|    argument names.  Below the tuple, keyword arguments are on the stack, in
 | |
|    the order corresponding to the tuple.  Below the keyword arguments, the
 | |
|    positional arguments are on the stack, with the right-most parameter on
 | |
|    top.  Below the arguments, the function object to call is on the stack.
 | |
|    Pops all function arguments, and the function itself off the stack, and
 | |
|    pushes the return value.
 | |
| 
 | |
|    .. versionchanged:: 3.6
 | |
|       Keyword arguments are packed in a tuple instead of a dictionary,
 | |
|       *argc* indicates the total number of arguments
 | |
| 
 | |
| 
 | |
| .. opcode:: CALL_FUNCTION_EX (flags)
 | |
| 
 | |
|    Calls a function. The lowest bit of *flags* indicates whether the
 | |
|    var-keyword argument is placed at the top of the stack.  Below the
 | |
|    var-keyword argument, the var-positional argument is on the stack.
 | |
|    Below the arguments, the function object to call is placed.
 | |
|    Pops all function arguments, and the function itself off the stack, and
 | |
|    pushes the return value. Note that this opcode pops at most three items
 | |
|    from the stack. Var-positional and var-keyword arguments are packed
 | |
|    by :opcode:`BUILD_TUPLE_UNPACK_WITH_CALL` and
 | |
|    :opcode:`BUILD_MAP_UNPACK_WITH_CALL`.
 | |
| 
 | |
|    .. versionadded:: 3.6
 | |
| 
 | |
| 
 | |
| .. opcode:: LOAD_METHOD (namei)
 | |
| 
 | |
|    Loads a method named ``co_names[namei]`` from TOS object. TOS is popped and
 | |
|    method and TOS are pushed when interpreter can call unbound method directly.
 | |
|    TOS will be used as the first argument (``self``) by :opcode:`CALL_METHOD`.
 | |
|    Otherwise, ``NULL`` and  method is pushed (method is bound method or
 | |
|    something else).
 | |
| 
 | |
|    .. versionadded:: 3.7
 | |
| 
 | |
| 
 | |
| .. opcode:: CALL_METHOD (argc)
 | |
| 
 | |
|    Calls a method.  *argc* is number of positional arguments.
 | |
|    Keyword arguments are not supported.  This opcode is designed to be used
 | |
|    with :opcode:`LOAD_METHOD`.  Positional arguments are on top of the stack.
 | |
|    Below them, two items described in :opcode:`LOAD_METHOD` on the stack.
 | |
|    All of them are popped and return value is pushed.
 | |
| 
 | |
|    .. versionadded:: 3.7
 | |
| 
 | |
| 
 | |
| .. opcode:: MAKE_FUNCTION (argc)
 | |
| 
 | |
|    Pushes a new function object on the stack.  From bottom to top, the consumed
 | |
|    stack must consist of values if the argument carries a specified flag value
 | |
| 
 | |
|    * ``0x01`` a tuple of default argument objects in positional order
 | |
|    * ``0x02`` a dictionary of keyword-only parameters' default values
 | |
|    * ``0x04`` an annotation dictionary
 | |
|    * ``0x08`` a tuple containing cells for free variables, making a closure
 | |
|    * the code associated with the function (at TOS1)
 | |
|    * the :term:`qualified name` of the function (at TOS)
 | |
| 
 | |
| 
 | |
| .. opcode:: BUILD_SLICE (argc)
 | |
| 
 | |
|    .. index:: builtin: slice
 | |
| 
 | |
|    Pushes a slice object on the stack.  *argc* must be 2 or 3.  If it is 2,
 | |
|    ``slice(TOS1, TOS)`` is pushed; if it is 3, ``slice(TOS2, TOS1, TOS)`` is
 | |
|    pushed. See the :func:`slice` built-in function for more information.
 | |
| 
 | |
| 
 | |
| .. opcode:: EXTENDED_ARG (ext)
 | |
| 
 | |
|    Prefixes any opcode which has an argument too big to fit into the default two
 | |
|    bytes.  *ext* holds two additional bytes which, taken together with the
 | |
|    subsequent opcode's argument, comprise a four-byte argument, *ext* being the
 | |
|    two most-significant bytes.
 | |
| 
 | |
| 
 | |
| .. opcode:: FORMAT_VALUE (flags)
 | |
| 
 | |
|    Used for implementing formatted literal strings (f-strings).  Pops
 | |
|    an optional *fmt_spec* from the stack, then a required *value*.
 | |
|    *flags* is interpreted as follows:
 | |
| 
 | |
|    * ``(flags & 0x03) == 0x00``: *value* is formatted as-is.
 | |
|    * ``(flags & 0x03) == 0x01``: call :func:`str` on *value* before
 | |
|      formatting it.
 | |
|    * ``(flags & 0x03) == 0x02``: call :func:`repr` on *value* before
 | |
|      formatting it.
 | |
|    * ``(flags & 0x03) == 0x03``: call :func:`ascii` on *value* before
 | |
|      formatting it.
 | |
|    * ``(flags & 0x04) == 0x04``: pop *fmt_spec* from the stack and use
 | |
|      it, else use an empty *fmt_spec*.
 | |
| 
 | |
|    Formatting is performed using :c:func:`PyObject_Format`.  The
 | |
|    result is pushed on the stack.
 | |
| 
 | |
|    .. versionadded:: 3.6
 | |
| 
 | |
| 
 | |
| .. opcode:: HAVE_ARGUMENT
 | |
| 
 | |
|    This is not really an opcode.  It identifies the dividing line between
 | |
|    opcodes which don't use their argument and those that do
 | |
|    (``< HAVE_ARGUMENT`` and ``>= HAVE_ARGUMENT``, respectively).
 | |
| 
 | |
|    .. versionchanged:: 3.6
 | |
|       Now every instruction has an argument, but opcodes ``< HAVE_ARGUMENT``
 | |
|       ignore it. Before, only opcodes ``>= HAVE_ARGUMENT`` had an argument.
 | |
| 
 | |
| 
 | |
| .. _opcode_collections:
 | |
| 
 | |
| Opcode collections
 | |
| ------------------
 | |
| 
 | |
| These collections are provided for automatic introspection of bytecode
 | |
| instructions:
 | |
| 
 | |
| .. data:: opname
 | |
| 
 | |
|    Sequence of operation names, indexable using the bytecode.
 | |
| 
 | |
| 
 | |
| .. data:: opmap
 | |
| 
 | |
|    Dictionary mapping operation names to bytecodes.
 | |
| 
 | |
| 
 | |
| .. data:: cmp_op
 | |
| 
 | |
|    Sequence of all compare operation names.
 | |
| 
 | |
| 
 | |
| .. data:: hasconst
 | |
| 
 | |
|    Sequence of bytecodes that have a constant parameter.
 | |
| 
 | |
| 
 | |
| .. data:: hasfree
 | |
| 
 | |
|    Sequence of bytecodes that access a free variable (note that 'free' in this
 | |
|    context refers to names in the current scope that are referenced by inner
 | |
|    scopes or names in outer scopes that are referenced from this scope.  It does
 | |
|    *not* include references to global or builtin scopes).
 | |
| 
 | |
| 
 | |
| .. data:: hasname
 | |
| 
 | |
|    Sequence of bytecodes that access an attribute by name.
 | |
| 
 | |
| 
 | |
| .. data:: hasjrel
 | |
| 
 | |
|    Sequence of bytecodes that have a relative jump target.
 | |
| 
 | |
| 
 | |
| .. data:: hasjabs
 | |
| 
 | |
|    Sequence of bytecodes that have an absolute jump target.
 | |
| 
 | |
| 
 | |
| .. data:: haslocal
 | |
| 
 | |
|    Sequence of bytecodes that access a local variable.
 | |
| 
 | |
| 
 | |
| .. data:: hascompare
 | |
| 
 | |
|    Sequence of bytecodes of Boolean operations.
 |