17db96d56Sopenharmony_ci:mod:`dis` --- Disassembler for Python bytecode
27db96d56Sopenharmony_ci===============================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: dis
57db96d56Sopenharmony_ci   :synopsis: Disassembler for Python bytecode.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci**Source code:** :source:`Lib/dis.py`
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci.. testsetup::
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci   import dis
127db96d56Sopenharmony_ci   def myfunc(alist):
137db96d56Sopenharmony_ci       return len(alist)
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci--------------
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ciThe :mod:`dis` module supports the analysis of CPython :term:`bytecode` by
187db96d56Sopenharmony_cidisassembling it. The CPython bytecode which this module takes as an input is
197db96d56Sopenharmony_cidefined in the file :file:`Include/opcode.h` and used by the compiler and the
207db96d56Sopenharmony_ciinterpreter.
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci.. impl-detail::
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci   Bytecode is an implementation detail of the CPython interpreter.  No
257db96d56Sopenharmony_ci   guarantees are made that bytecode will not be added, removed, or changed
267db96d56Sopenharmony_ci   between versions of Python.  Use of this module should not be considered to
277db96d56Sopenharmony_ci   work across Python VMs or Python releases.
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci   .. versionchanged:: 3.6
307db96d56Sopenharmony_ci      Use 2 bytes for each instruction. Previously the number of bytes varied
317db96d56Sopenharmony_ci      by instruction.
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci   .. versionchanged:: 3.10
347db96d56Sopenharmony_ci      The argument of jump, exception handling and loop instructions is now
357db96d56Sopenharmony_ci      the instruction offset rather than the byte offset.
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci   .. versionchanged:: 3.11
387db96d56Sopenharmony_ci      Some instructions are accompanied by one or more inline cache entries,
397db96d56Sopenharmony_ci      which take the form of :opcode:`CACHE` instructions. These instructions
407db96d56Sopenharmony_ci      are hidden by default, but can be shown by passing ``show_caches=True`` to
417db96d56Sopenharmony_ci      any :mod:`dis` utility. Furthermore, the interpreter now adapts the
427db96d56Sopenharmony_ci      bytecode to specialize it for different runtime conditions. The
437db96d56Sopenharmony_ci      adaptive bytecode can be shown by passing ``adaptive=True``.
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ciExample: Given the function :func:`myfunc`::
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci   def myfunc(alist):
497db96d56Sopenharmony_ci       return len(alist)
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_cithe following command can be used to display the disassembly of
527db96d56Sopenharmony_ci:func:`myfunc`:
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci.. doctest::
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci   >>> dis.dis(myfunc)
577db96d56Sopenharmony_ci     2           0 RESUME                   0
587db96d56Sopenharmony_ci   <BLANKLINE>
597db96d56Sopenharmony_ci     3           2 LOAD_GLOBAL              1 (NULL + len)
607db96d56Sopenharmony_ci                14 LOAD_FAST                0 (alist)
617db96d56Sopenharmony_ci                16 PRECALL                  1
627db96d56Sopenharmony_ci                20 CALL                     1
637db96d56Sopenharmony_ci                30 RETURN_VALUE
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci(The "2" is a line number).
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ciBytecode analysis
687db96d56Sopenharmony_ci-----------------
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci.. versionadded:: 3.4
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ciThe bytecode analysis API allows pieces of Python code to be wrapped in a
737db96d56Sopenharmony_ci:class:`Bytecode` object that provides easy access to details of the compiled
747db96d56Sopenharmony_cicode.
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci.. class:: Bytecode(x, *, first_line=None, current_offset=None,\
777db96d56Sopenharmony_ci                    show_caches=False, adaptive=False)
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci   Analyse the bytecode corresponding to a function, generator, asynchronous
807db96d56Sopenharmony_ci   generator, coroutine, method, string of source code, or a code object (as
817db96d56Sopenharmony_ci   returned by :func:`compile`).
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci   This is a convenience wrapper around many of the functions listed below, most
847db96d56Sopenharmony_ci   notably :func:`get_instructions`, as iterating over a :class:`Bytecode`
857db96d56Sopenharmony_ci   instance yields the bytecode operations as :class:`Instruction` instances.
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci   If *first_line* is not ``None``, it indicates the line number that should be
887db96d56Sopenharmony_ci   reported for the first source line in the disassembled code.  Otherwise, the
897db96d56Sopenharmony_ci   source line information (if any) is taken directly from the disassembled code
907db96d56Sopenharmony_ci   object.
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci   If *current_offset* is not ``None``, it refers to an instruction offset in the
937db96d56Sopenharmony_ci   disassembled code. Setting this means :meth:`.dis` will display a "current
947db96d56Sopenharmony_ci   instruction" marker against the specified opcode.
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci   If *show_caches* is ``True``, :meth:`.dis` will display inline cache
977db96d56Sopenharmony_ci   entries used by the interpreter to specialize the bytecode.
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci   If *adaptive* is ``True``, :meth:`.dis` will display specialized bytecode
1007db96d56Sopenharmony_ci   that may be different from the original bytecode.
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci   .. classmethod:: from_traceback(tb, *, show_caches=False)
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci      Construct a :class:`Bytecode` instance from the given traceback, setting
1057db96d56Sopenharmony_ci      *current_offset* to the instruction responsible for the exception.
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci   .. data:: codeobj
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci      The compiled code object.
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci   .. data:: first_line
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci      The first source line of the code object (if available)
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci   .. method:: dis()
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci      Return a formatted view of the bytecode operations (the same as printed by
1187db96d56Sopenharmony_ci      :func:`dis.dis`, but returned as a multi-line string).
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci   .. method:: info()
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci      Return a formatted multi-line string with detailed information about the
1237db96d56Sopenharmony_ci      code object, like :func:`code_info`.
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci   .. versionchanged:: 3.7
1267db96d56Sopenharmony_ci      This can now handle coroutine and asynchronous generator objects.
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci   .. versionchanged:: 3.11
1297db96d56Sopenharmony_ci      Added the *show_caches* and *adaptive* parameters.
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ciExample:
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci.. doctest::
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci    >>> bytecode = dis.Bytecode(myfunc)
1367db96d56Sopenharmony_ci    >>> for instr in bytecode:
1377db96d56Sopenharmony_ci    ...     print(instr.opname)
1387db96d56Sopenharmony_ci    ...
1397db96d56Sopenharmony_ci    RESUME
1407db96d56Sopenharmony_ci    LOAD_GLOBAL
1417db96d56Sopenharmony_ci    LOAD_FAST
1427db96d56Sopenharmony_ci    PRECALL
1437db96d56Sopenharmony_ci    CALL
1447db96d56Sopenharmony_ci    RETURN_VALUE
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ciAnalysis functions
1487db96d56Sopenharmony_ci------------------
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ciThe :mod:`dis` module also defines the following analysis functions that convert
1517db96d56Sopenharmony_cithe input directly to the desired output. They can be useful if only a single
1527db96d56Sopenharmony_cioperation is being performed, so the intermediate analysis object isn't useful:
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci.. function:: code_info(x)
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci   Return a formatted multi-line string with detailed code object information
1577db96d56Sopenharmony_ci   for the supplied function, generator, asynchronous generator, coroutine,
1587db96d56Sopenharmony_ci   method, source code string or code object.
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci   Note that the exact contents of code info strings are highly implementation
1617db96d56Sopenharmony_ci   dependent and they may change arbitrarily across Python VMs or Python
1627db96d56Sopenharmony_ci   releases.
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci   .. versionadded:: 3.2
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci   .. versionchanged:: 3.7
1677db96d56Sopenharmony_ci      This can now handle coroutine and asynchronous generator objects.
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci.. function:: show_code(x, *, file=None)
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci   Print detailed code object information for the supplied function, method,
1737db96d56Sopenharmony_ci   source code string or code object to *file* (or ``sys.stdout`` if *file*
1747db96d56Sopenharmony_ci   is not specified).
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci   This is a convenient shorthand for ``print(code_info(x), file=file)``,
1777db96d56Sopenharmony_ci   intended for interactive exploration at the interpreter prompt.
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci   .. versionadded:: 3.2
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci   .. versionchanged:: 3.4
1827db96d56Sopenharmony_ci      Added *file* parameter.
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci.. function:: dis(x=None, *, file=None, depth=None, show_caches=False, adaptive=False)
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci   Disassemble the *x* object.  *x* can denote either a module, a class, a
1887db96d56Sopenharmony_ci   method, a function, a generator, an asynchronous generator, a coroutine,
1897db96d56Sopenharmony_ci   a code object, a string of source code or a byte sequence of raw bytecode.
1907db96d56Sopenharmony_ci   For a module, it disassembles all functions. For a class, it disassembles
1917db96d56Sopenharmony_ci   all methods (including class and static methods). For a code object or
1927db96d56Sopenharmony_ci   sequence of raw bytecode, it prints one line per bytecode instruction.
1937db96d56Sopenharmony_ci   It also recursively disassembles nested code objects (the code of
1947db96d56Sopenharmony_ci   comprehensions, generator expressions and nested functions, and the code
1957db96d56Sopenharmony_ci   used for building nested classes).
1967db96d56Sopenharmony_ci   Strings are first compiled to code objects with the :func:`compile`
1977db96d56Sopenharmony_ci   built-in function before being disassembled.  If no object is provided, this
1987db96d56Sopenharmony_ci   function disassembles the last traceback.
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ci   The disassembly is written as text to the supplied *file* argument if
2017db96d56Sopenharmony_ci   provided and to ``sys.stdout`` otherwise.
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci   The maximal depth of recursion is limited by *depth* unless it is ``None``.
2047db96d56Sopenharmony_ci   ``depth=0`` means no recursion.
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci   If *show_caches* is ``True``, this function will display inline cache
2077db96d56Sopenharmony_ci   entries used by the interpreter to specialize the bytecode.
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci   If *adaptive* is ``True``, this function will display specialized bytecode
2107db96d56Sopenharmony_ci   that may be different from the original bytecode.
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ci   .. versionchanged:: 3.4
2137db96d56Sopenharmony_ci      Added *file* parameter.
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci   .. versionchanged:: 3.7
2167db96d56Sopenharmony_ci      Implemented recursive disassembling and added *depth* parameter.
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ci   .. versionchanged:: 3.7
2197db96d56Sopenharmony_ci      This can now handle coroutine and asynchronous generator objects.
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci   .. versionchanged:: 3.11
2227db96d56Sopenharmony_ci      Added the *show_caches* and *adaptive* parameters.
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci.. function:: distb(tb=None, *, file=None, show_caches=False, adaptive=False)
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci   Disassemble the top-of-stack function of a traceback, using the last
2287db96d56Sopenharmony_ci   traceback if none was passed.  The instruction causing the exception is
2297db96d56Sopenharmony_ci   indicated.
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci   The disassembly is written as text to the supplied *file* argument if
2327db96d56Sopenharmony_ci   provided and to ``sys.stdout`` otherwise.
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_ci   .. versionchanged:: 3.4
2357db96d56Sopenharmony_ci      Added *file* parameter.
2367db96d56Sopenharmony_ci
2377db96d56Sopenharmony_ci   .. versionchanged:: 3.11
2387db96d56Sopenharmony_ci      Added the *show_caches* and *adaptive* parameters.
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci
2417db96d56Sopenharmony_ci.. function:: disassemble(code, lasti=-1, *, file=None, show_caches=False, adaptive=False)
2427db96d56Sopenharmony_ci              disco(code, lasti=-1, *, file=None, show_caches=False, adaptive=False)
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ci   Disassemble a code object, indicating the last instruction if *lasti* was
2457db96d56Sopenharmony_ci   provided.  The output is divided in the following columns:
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci   #. the line number, for the first instruction of each line
2487db96d56Sopenharmony_ci   #. the current instruction, indicated as ``-->``,
2497db96d56Sopenharmony_ci   #. a labelled instruction, indicated with ``>>``,
2507db96d56Sopenharmony_ci   #. the address of the instruction,
2517db96d56Sopenharmony_ci   #. the operation code name,
2527db96d56Sopenharmony_ci   #. operation parameters, and
2537db96d56Sopenharmony_ci   #. interpretation of the parameters in parentheses.
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci   The parameter interpretation recognizes local and global variable names,
2567db96d56Sopenharmony_ci   constant values, branch targets, and compare operators.
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci   The disassembly is written as text to the supplied *file* argument if
2597db96d56Sopenharmony_ci   provided and to ``sys.stdout`` otherwise.
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci   .. versionchanged:: 3.4
2627db96d56Sopenharmony_ci      Added *file* parameter.
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ci   .. versionchanged:: 3.11
2657db96d56Sopenharmony_ci      Added the *show_caches* and *adaptive* parameters.
2667db96d56Sopenharmony_ci
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci.. function:: get_instructions(x, *, first_line=None, show_caches=False, adaptive=False)
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci   Return an iterator over the instructions in the supplied function, method,
2717db96d56Sopenharmony_ci   source code string or code object.
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci   The iterator generates a series of :class:`Instruction` named tuples giving
2747db96d56Sopenharmony_ci   the details of each operation in the supplied code.
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci   If *first_line* is not ``None``, it indicates the line number that should be
2777db96d56Sopenharmony_ci   reported for the first source line in the disassembled code.  Otherwise, the
2787db96d56Sopenharmony_ci   source line information (if any) is taken directly from the disassembled code
2797db96d56Sopenharmony_ci   object.
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci   The *show_caches* and *adaptive* parameters work as they do in :func:`dis`.
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ci   .. versionadded:: 3.4
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci   .. versionchanged:: 3.11
2867db96d56Sopenharmony_ci      Added the *show_caches* and *adaptive* parameters.
2877db96d56Sopenharmony_ci
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci.. function:: findlinestarts(code)
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci   This generator function uses the ``co_lines`` method
2927db96d56Sopenharmony_ci   of the code object *code* to find the offsets which are starts of
2937db96d56Sopenharmony_ci   lines in the source code.  They are generated as ``(offset, lineno)`` pairs.
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci   .. versionchanged:: 3.6
2967db96d56Sopenharmony_ci      Line numbers can be decreasing. Before, they were always increasing.
2977db96d56Sopenharmony_ci
2987db96d56Sopenharmony_ci   .. versionchanged:: 3.10
2997db96d56Sopenharmony_ci      The :pep:`626` ``co_lines`` method is used instead of the ``co_firstlineno``
3007db96d56Sopenharmony_ci      and ``co_lnotab`` attributes of the code object.
3017db96d56Sopenharmony_ci
3027db96d56Sopenharmony_ci
3037db96d56Sopenharmony_ci.. function:: findlabels(code)
3047db96d56Sopenharmony_ci
3057db96d56Sopenharmony_ci   Detect all offsets in the raw compiled bytecode string *code* which are jump targets, and
3067db96d56Sopenharmony_ci   return a list of these offsets.
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci.. function:: stack_effect(opcode, oparg=None, *, jump=None)
3107db96d56Sopenharmony_ci
3117db96d56Sopenharmony_ci   Compute the stack effect of *opcode* with argument *oparg*.
3127db96d56Sopenharmony_ci
3137db96d56Sopenharmony_ci   If the code has a jump target and *jump* is ``True``, :func:`~stack_effect`
3147db96d56Sopenharmony_ci   will return the stack effect of jumping.  If *jump* is ``False``,
3157db96d56Sopenharmony_ci   it will return the stack effect of not jumping. And if *jump* is
3167db96d56Sopenharmony_ci   ``None`` (default), it will return the maximal stack effect of both cases.
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci   .. versionadded:: 3.4
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_ci   .. versionchanged:: 3.8
3217db96d56Sopenharmony_ci      Added *jump* parameter.
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ci
3247db96d56Sopenharmony_ci.. _bytecodes:
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ciPython Bytecode Instructions
3277db96d56Sopenharmony_ci----------------------------
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ciThe :func:`get_instructions` function and :class:`Bytecode` class provide
3307db96d56Sopenharmony_cidetails of bytecode instructions as :class:`Instruction` instances:
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci.. class:: Instruction
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_ci   Details for a bytecode operation
3357db96d56Sopenharmony_ci
3367db96d56Sopenharmony_ci   .. data:: opcode
3377db96d56Sopenharmony_ci
3387db96d56Sopenharmony_ci      numeric code for operation, corresponding to the opcode values listed
3397db96d56Sopenharmony_ci      below and the bytecode values in the :ref:`opcode_collections`.
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ci
3427db96d56Sopenharmony_ci   .. data:: opname
3437db96d56Sopenharmony_ci
3447db96d56Sopenharmony_ci      human readable name for operation
3457db96d56Sopenharmony_ci
3467db96d56Sopenharmony_ci
3477db96d56Sopenharmony_ci   .. data:: arg
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ci      numeric argument to operation (if any), otherwise ``None``
3507db96d56Sopenharmony_ci
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_ci   .. data:: argval
3537db96d56Sopenharmony_ci
3547db96d56Sopenharmony_ci      resolved arg value (if any), otherwise ``None``
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci   .. data:: argrepr
3587db96d56Sopenharmony_ci
3597db96d56Sopenharmony_ci      human readable description of operation argument (if any),
3607db96d56Sopenharmony_ci      otherwise an empty string.
3617db96d56Sopenharmony_ci
3627db96d56Sopenharmony_ci
3637db96d56Sopenharmony_ci   .. data:: offset
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci      start index of operation within bytecode sequence
3667db96d56Sopenharmony_ci
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci   .. data:: starts_line
3697db96d56Sopenharmony_ci
3707db96d56Sopenharmony_ci      line started by this opcode (if any), otherwise ``None``
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ci
3737db96d56Sopenharmony_ci   .. data:: is_jump_target
3747db96d56Sopenharmony_ci
3757db96d56Sopenharmony_ci      ``True`` if other code jumps to here, otherwise ``False``
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ci   .. data:: positions
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci      :class:`dis.Positions` object holding the
3817db96d56Sopenharmony_ci      start and end locations that are covered by this instruction.
3827db96d56Sopenharmony_ci
3837db96d56Sopenharmony_ci   .. versionadded:: 3.4
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ci   .. versionchanged:: 3.11
3867db96d56Sopenharmony_ci
3877db96d56Sopenharmony_ci      Field ``positions`` is added.
3887db96d56Sopenharmony_ci
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ci.. class:: Positions
3917db96d56Sopenharmony_ci
3927db96d56Sopenharmony_ci   In case the information is not available, some fields might be ``None``.
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_ci   .. data:: lineno
3957db96d56Sopenharmony_ci   .. data:: end_lineno
3967db96d56Sopenharmony_ci   .. data:: col_offset
3977db96d56Sopenharmony_ci   .. data:: end_col_offset
3987db96d56Sopenharmony_ci
3997db96d56Sopenharmony_ci   .. versionadded:: 3.11
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ciThe Python compiler currently generates the following bytecode instructions.
4037db96d56Sopenharmony_ci
4047db96d56Sopenharmony_ci
4057db96d56Sopenharmony_ci**General instructions**
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci.. opcode:: NOP
4087db96d56Sopenharmony_ci
4097db96d56Sopenharmony_ci   Do nothing code.  Used as a placeholder by the bytecode optimizer, and to
4107db96d56Sopenharmony_ci   generate line tracing events.
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci
4137db96d56Sopenharmony_ci.. opcode:: POP_TOP
4147db96d56Sopenharmony_ci
4157db96d56Sopenharmony_ci   Removes the top-of-stack (TOS) item.
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci
4187db96d56Sopenharmony_ci.. opcode:: COPY (i)
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci   Push the *i*-th item to the top of the stack. The item is not removed from its
4217db96d56Sopenharmony_ci   original location.
4227db96d56Sopenharmony_ci
4237db96d56Sopenharmony_ci   .. versionadded:: 3.11
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ci
4267db96d56Sopenharmony_ci.. opcode:: SWAP (i)
4277db96d56Sopenharmony_ci
4287db96d56Sopenharmony_ci   Swap TOS with the item at position *i*.
4297db96d56Sopenharmony_ci
4307db96d56Sopenharmony_ci   .. versionadded:: 3.11
4317db96d56Sopenharmony_ci
4327db96d56Sopenharmony_ci
4337db96d56Sopenharmony_ci.. opcode:: CACHE
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci   Rather than being an actual instruction, this opcode is used to mark extra
4367db96d56Sopenharmony_ci   space for the interpreter to cache useful data directly in the bytecode
4377db96d56Sopenharmony_ci   itself. It is automatically hidden by all ``dis`` utilities, but can be
4387db96d56Sopenharmony_ci   viewed with ``show_caches=True``.
4397db96d56Sopenharmony_ci
4407db96d56Sopenharmony_ci   Logically, this space is part of the preceding instruction. Many opcodes
4417db96d56Sopenharmony_ci   expect to be followed by an exact number of caches, and will instruct the
4427db96d56Sopenharmony_ci   interpreter to skip over them at runtime.
4437db96d56Sopenharmony_ci
4447db96d56Sopenharmony_ci   Populated caches can look like arbitrary instructions, so great care should
4457db96d56Sopenharmony_ci   be taken when reading or modifying raw, adaptive bytecode containing
4467db96d56Sopenharmony_ci   quickened data.
4477db96d56Sopenharmony_ci
4487db96d56Sopenharmony_ci   .. versionadded:: 3.11
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ci
4517db96d56Sopenharmony_ci**Unary operations**
4527db96d56Sopenharmony_ci
4537db96d56Sopenharmony_ciUnary operations take the top of the stack, apply the operation, and push the
4547db96d56Sopenharmony_ciresult back on the stack.
4557db96d56Sopenharmony_ci
4567db96d56Sopenharmony_ci.. opcode:: UNARY_POSITIVE
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ci   Implements ``TOS = +TOS``.
4597db96d56Sopenharmony_ci
4607db96d56Sopenharmony_ci
4617db96d56Sopenharmony_ci.. opcode:: UNARY_NEGATIVE
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci   Implements ``TOS = -TOS``.
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci.. opcode:: UNARY_NOT
4677db96d56Sopenharmony_ci
4687db96d56Sopenharmony_ci   Implements ``TOS = not TOS``.
4697db96d56Sopenharmony_ci
4707db96d56Sopenharmony_ci
4717db96d56Sopenharmony_ci.. opcode:: UNARY_INVERT
4727db96d56Sopenharmony_ci
4737db96d56Sopenharmony_ci   Implements ``TOS = ~TOS``.
4747db96d56Sopenharmony_ci
4757db96d56Sopenharmony_ci
4767db96d56Sopenharmony_ci.. opcode:: GET_ITER
4777db96d56Sopenharmony_ci
4787db96d56Sopenharmony_ci   Implements ``TOS = iter(TOS)``.
4797db96d56Sopenharmony_ci
4807db96d56Sopenharmony_ci
4817db96d56Sopenharmony_ci.. opcode:: GET_YIELD_FROM_ITER
4827db96d56Sopenharmony_ci
4837db96d56Sopenharmony_ci   If ``TOS`` is a :term:`generator iterator` or :term:`coroutine` object
4847db96d56Sopenharmony_ci   it is left as is.  Otherwise, implements ``TOS = iter(TOS)``.
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci   .. versionadded:: 3.5
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci
4897db96d56Sopenharmony_ci**Binary and in-place operations**
4907db96d56Sopenharmony_ci
4917db96d56Sopenharmony_ciBinary operations remove the top of the stack (TOS) and the second top-most
4927db96d56Sopenharmony_cistack item (TOS1) from the stack.  They perform the operation, and put the
4937db96d56Sopenharmony_ciresult back on the stack.
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ciIn-place operations are like binary operations, in that they remove TOS and
4967db96d56Sopenharmony_ciTOS1, and push the result back on the stack, but the operation is done in-place
4977db96d56Sopenharmony_ciwhen TOS1 supports it, and the resulting TOS may be (but does not have to be)
4987db96d56Sopenharmony_cithe original TOS1.
4997db96d56Sopenharmony_ci
5007db96d56Sopenharmony_ci
5017db96d56Sopenharmony_ci.. opcode:: BINARY_OP (op)
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci   Implements the binary and in-place operators (depending on the value of
5047db96d56Sopenharmony_ci   *op*).
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_ci   .. versionadded:: 3.11
5077db96d56Sopenharmony_ci
5087db96d56Sopenharmony_ci
5097db96d56Sopenharmony_ci.. opcode:: BINARY_SUBSCR
5107db96d56Sopenharmony_ci
5117db96d56Sopenharmony_ci   Implements ``TOS = TOS1[TOS]``.
5127db96d56Sopenharmony_ci
5137db96d56Sopenharmony_ci
5147db96d56Sopenharmony_ci.. opcode:: STORE_SUBSCR
5157db96d56Sopenharmony_ci
5167db96d56Sopenharmony_ci   Implements ``TOS1[TOS] = TOS2``.
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ci
5197db96d56Sopenharmony_ci.. opcode:: DELETE_SUBSCR
5207db96d56Sopenharmony_ci
5217db96d56Sopenharmony_ci   Implements ``del TOS1[TOS]``.
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci
5247db96d56Sopenharmony_ci**Coroutine opcodes**
5257db96d56Sopenharmony_ci
5267db96d56Sopenharmony_ci.. opcode:: GET_AWAITABLE (where)
5277db96d56Sopenharmony_ci
5287db96d56Sopenharmony_ci   Implements ``TOS = get_awaitable(TOS)``, where ``get_awaitable(o)``
5297db96d56Sopenharmony_ci   returns ``o`` if ``o`` is a coroutine object or a generator object with
5307db96d56Sopenharmony_ci   the CO_ITERABLE_COROUTINE flag, or resolves
5317db96d56Sopenharmony_ci   ``o.__await__``.
5327db96d56Sopenharmony_ci
5337db96d56Sopenharmony_ci    If the ``where`` operand is nonzero, it indicates where the instruction
5347db96d56Sopenharmony_ci    occurs:
5357db96d56Sopenharmony_ci
5367db96d56Sopenharmony_ci    * ``1`` After a call to ``__aenter__``
5377db96d56Sopenharmony_ci    * ``2`` After a call to ``__aexit__``
5387db96d56Sopenharmony_ci
5397db96d56Sopenharmony_ci   .. versionadded:: 3.5
5407db96d56Sopenharmony_ci
5417db96d56Sopenharmony_ci   .. versionchanged:: 3.11
5427db96d56Sopenharmony_ci      Previously, this instruction did not have an oparg.
5437db96d56Sopenharmony_ci
5447db96d56Sopenharmony_ci
5457db96d56Sopenharmony_ci.. opcode:: GET_AITER
5467db96d56Sopenharmony_ci
5477db96d56Sopenharmony_ci   Implements ``TOS = TOS.__aiter__()``.
5487db96d56Sopenharmony_ci
5497db96d56Sopenharmony_ci   .. versionadded:: 3.5
5507db96d56Sopenharmony_ci   .. versionchanged:: 3.7
5517db96d56Sopenharmony_ci      Returning awaitable objects from ``__aiter__`` is no longer
5527db96d56Sopenharmony_ci      supported.
5537db96d56Sopenharmony_ci
5547db96d56Sopenharmony_ci
5557db96d56Sopenharmony_ci.. opcode:: GET_ANEXT
5567db96d56Sopenharmony_ci
5577db96d56Sopenharmony_ci   Pushes ``get_awaitable(TOS.__anext__())`` to the stack.  See
5587db96d56Sopenharmony_ci   ``GET_AWAITABLE`` for details about ``get_awaitable``.
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ci   .. versionadded:: 3.5
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_ci
5637db96d56Sopenharmony_ci.. opcode:: END_ASYNC_FOR
5647db96d56Sopenharmony_ci
5657db96d56Sopenharmony_ci   Terminates an :keyword:`async for` loop.  Handles an exception raised
5667db96d56Sopenharmony_ci   when awaiting a next item. The stack contains the async iterable in
5677db96d56Sopenharmony_ci   TOS1 and the raised exception in TOS. Both are popped.
5687db96d56Sopenharmony_ci   If the exception is not :exc:`StopAsyncIteration`, it is re-raised.
5697db96d56Sopenharmony_ci
5707db96d56Sopenharmony_ci   .. versionadded:: 3.8
5717db96d56Sopenharmony_ci
5727db96d56Sopenharmony_ci   .. versionchanged:: 3.11
5737db96d56Sopenharmony_ci      Exception representation on the stack now consist of one, not three, items.
5747db96d56Sopenharmony_ci
5757db96d56Sopenharmony_ci.. opcode:: BEFORE_ASYNC_WITH
5767db96d56Sopenharmony_ci
5777db96d56Sopenharmony_ci   Resolves ``__aenter__`` and ``__aexit__`` from the object on top of the
5787db96d56Sopenharmony_ci   stack.  Pushes ``__aexit__`` and result of ``__aenter__()`` to the stack.
5797db96d56Sopenharmony_ci
5807db96d56Sopenharmony_ci   .. versionadded:: 3.5
5817db96d56Sopenharmony_ci
5827db96d56Sopenharmony_ci
5837db96d56Sopenharmony_ci
5847db96d56Sopenharmony_ci**Miscellaneous opcodes**
5857db96d56Sopenharmony_ci
5867db96d56Sopenharmony_ci.. opcode:: PRINT_EXPR
5877db96d56Sopenharmony_ci
5887db96d56Sopenharmony_ci   Implements the expression statement for the interactive mode.  TOS is removed
5897db96d56Sopenharmony_ci   from the stack and printed.  In non-interactive mode, an expression statement
5907db96d56Sopenharmony_ci   is terminated with :opcode:`POP_TOP`.
5917db96d56Sopenharmony_ci
5927db96d56Sopenharmony_ci
5937db96d56Sopenharmony_ci.. opcode:: SET_ADD (i)
5947db96d56Sopenharmony_ci
5957db96d56Sopenharmony_ci   Calls ``set.add(TOS1[-i], TOS)``.  Used to implement set comprehensions.
5967db96d56Sopenharmony_ci
5977db96d56Sopenharmony_ci
5987db96d56Sopenharmony_ci.. opcode:: LIST_APPEND (i)
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ci   Calls ``list.append(TOS1[-i], TOS)``.  Used to implement list comprehensions.
6017db96d56Sopenharmony_ci
6027db96d56Sopenharmony_ci
6037db96d56Sopenharmony_ci.. opcode:: MAP_ADD (i)
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ci   Calls ``dict.__setitem__(TOS1[-i], TOS1, TOS)``.  Used to implement dict
6067db96d56Sopenharmony_ci   comprehensions.
6077db96d56Sopenharmony_ci
6087db96d56Sopenharmony_ci   .. versionadded:: 3.1
6097db96d56Sopenharmony_ci   .. versionchanged:: 3.8
6107db96d56Sopenharmony_ci      Map value is TOS and map key is TOS1. Before, those were reversed.
6117db96d56Sopenharmony_ci
6127db96d56Sopenharmony_ciFor all of the :opcode:`SET_ADD`, :opcode:`LIST_APPEND` and :opcode:`MAP_ADD`
6137db96d56Sopenharmony_ciinstructions, while the added value or key/value pair is popped off, the
6147db96d56Sopenharmony_cicontainer object remains on the stack so that it is available for further
6157db96d56Sopenharmony_ciiterations of the loop.
6167db96d56Sopenharmony_ci
6177db96d56Sopenharmony_ci
6187db96d56Sopenharmony_ci.. opcode:: RETURN_VALUE
6197db96d56Sopenharmony_ci
6207db96d56Sopenharmony_ci   Returns with TOS to the caller of the function.
6217db96d56Sopenharmony_ci
6227db96d56Sopenharmony_ci
6237db96d56Sopenharmony_ci.. opcode:: YIELD_VALUE
6247db96d56Sopenharmony_ci
6257db96d56Sopenharmony_ci   Pops TOS and yields it from a :term:`generator`.
6267db96d56Sopenharmony_ci
6277db96d56Sopenharmony_ci
6287db96d56Sopenharmony_ci
6297db96d56Sopenharmony_ci.. opcode:: SETUP_ANNOTATIONS
6307db96d56Sopenharmony_ci
6317db96d56Sopenharmony_ci   Checks whether ``__annotations__`` is defined in ``locals()``, if not it is
6327db96d56Sopenharmony_ci   set up to an empty ``dict``. This opcode is only emitted if a class
6337db96d56Sopenharmony_ci   or module body contains :term:`variable annotations <variable annotation>`
6347db96d56Sopenharmony_ci   statically.
6357db96d56Sopenharmony_ci
6367db96d56Sopenharmony_ci   .. versionadded:: 3.6
6377db96d56Sopenharmony_ci
6387db96d56Sopenharmony_ci
6397db96d56Sopenharmony_ci.. opcode:: IMPORT_STAR
6407db96d56Sopenharmony_ci
6417db96d56Sopenharmony_ci   Loads all symbols not starting with ``'_'`` directly from the module TOS to
6427db96d56Sopenharmony_ci   the local namespace. The module is popped after loading all names. This
6437db96d56Sopenharmony_ci   opcode implements ``from module import *``.
6447db96d56Sopenharmony_ci
6457db96d56Sopenharmony_ci
6467db96d56Sopenharmony_ci.. opcode:: POP_EXCEPT
6477db96d56Sopenharmony_ci
6487db96d56Sopenharmony_ci   Pops a value from the stack, which is used to restore the exception state.
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ci    .. versionchanged:: 3.11
6517db96d56Sopenharmony_ci       Exception representation on the stack now consist of one, not three, items.
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci.. opcode:: RERAISE
6547db96d56Sopenharmony_ci
6557db96d56Sopenharmony_ci    Re-raises the exception currently on top of the stack. If oparg is non-zero,
6567db96d56Sopenharmony_ci    pops an additional value from the stack which is used to set ``f_lasti``
6577db96d56Sopenharmony_ci    of the current frame.
6587db96d56Sopenharmony_ci
6597db96d56Sopenharmony_ci    .. versionadded:: 3.9
6607db96d56Sopenharmony_ci
6617db96d56Sopenharmony_ci    .. versionchanged:: 3.11
6627db96d56Sopenharmony_ci       Exception representation on the stack now consist of one, not three, items.
6637db96d56Sopenharmony_ci
6647db96d56Sopenharmony_ci.. opcode:: PUSH_EXC_INFO
6657db96d56Sopenharmony_ci
6667db96d56Sopenharmony_ci    Pops a value from the stack. Pushes the current exception to the top of the stack.
6677db96d56Sopenharmony_ci    Pushes the value originally popped back to the stack.
6687db96d56Sopenharmony_ci    Used in exception handlers.
6697db96d56Sopenharmony_ci
6707db96d56Sopenharmony_ci    .. versionadded:: 3.11
6717db96d56Sopenharmony_ci
6727db96d56Sopenharmony_ci.. opcode:: CHECK_EXC_MATCH
6737db96d56Sopenharmony_ci
6747db96d56Sopenharmony_ci   Performs exception matching for ``except``. Tests whether the TOS1 is an exception
6757db96d56Sopenharmony_ci   matching TOS. Pops TOS and pushes the boolean result of the test.
6767db96d56Sopenharmony_ci
6777db96d56Sopenharmony_ci   .. versionadded:: 3.11
6787db96d56Sopenharmony_ci
6797db96d56Sopenharmony_ci.. opcode:: CHECK_EG_MATCH
6807db96d56Sopenharmony_ci
6817db96d56Sopenharmony_ci   Performs exception matching for ``except*``. Applies ``split(TOS)`` on
6827db96d56Sopenharmony_ci   the exception group representing TOS1.
6837db96d56Sopenharmony_ci
6847db96d56Sopenharmony_ci   In case of a match, pops two items from the stack and pushes the
6857db96d56Sopenharmony_ci   non-matching subgroup (``None`` in case of full match) followed by the
6867db96d56Sopenharmony_ci   matching subgroup. When there is no match, pops one item (the match
6877db96d56Sopenharmony_ci   type) and pushes ``None``.
6887db96d56Sopenharmony_ci
6897db96d56Sopenharmony_ci   .. versionadded:: 3.11
6907db96d56Sopenharmony_ci
6917db96d56Sopenharmony_ci.. opcode:: PREP_RERAISE_STAR
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci   Combines the raised and reraised exceptions list from TOS, into an exception
6947db96d56Sopenharmony_ci   group to propagate from a try-except* block. Uses the original exception
6957db96d56Sopenharmony_ci   group from TOS1 to reconstruct the structure of reraised exceptions. Pops
6967db96d56Sopenharmony_ci   two items from the stack and pushes the exception to reraise or ``None``
6977db96d56Sopenharmony_ci   if there isn't one.
6987db96d56Sopenharmony_ci
6997db96d56Sopenharmony_ci   .. versionadded:: 3.11
7007db96d56Sopenharmony_ci
7017db96d56Sopenharmony_ci.. opcode:: WITH_EXCEPT_START
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ci    Calls the function in position 4 on the stack with arguments (type, val, tb)
7047db96d56Sopenharmony_ci    representing the exception at the top of the stack.
7057db96d56Sopenharmony_ci    Used to implement the call ``context_manager.__exit__(*exc_info())`` when an exception
7067db96d56Sopenharmony_ci    has occurred in a :keyword:`with` statement.
7077db96d56Sopenharmony_ci
7087db96d56Sopenharmony_ci    .. versionadded:: 3.9
7097db96d56Sopenharmony_ci
7107db96d56Sopenharmony_ci    .. versionchanged:: 3.11
7117db96d56Sopenharmony_ci       The ``__exit__`` function is in position 4 of the stack rather than 7.
7127db96d56Sopenharmony_ci       Exception representation on the stack now consist of one, not three, items.
7137db96d56Sopenharmony_ci
7147db96d56Sopenharmony_ci
7157db96d56Sopenharmony_ci.. opcode:: LOAD_ASSERTION_ERROR
7167db96d56Sopenharmony_ci
7177db96d56Sopenharmony_ci   Pushes :exc:`AssertionError` onto the stack.  Used by the :keyword:`assert`
7187db96d56Sopenharmony_ci   statement.
7197db96d56Sopenharmony_ci
7207db96d56Sopenharmony_ci   .. versionadded:: 3.9
7217db96d56Sopenharmony_ci
7227db96d56Sopenharmony_ci
7237db96d56Sopenharmony_ci.. opcode:: LOAD_BUILD_CLASS
7247db96d56Sopenharmony_ci
7257db96d56Sopenharmony_ci   Pushes :func:`builtins.__build_class__` onto the stack.  It is later called
7267db96d56Sopenharmony_ci   to construct a class.
7277db96d56Sopenharmony_ci
7287db96d56Sopenharmony_ci
7297db96d56Sopenharmony_ci.. opcode:: BEFORE_WITH (delta)
7307db96d56Sopenharmony_ci
7317db96d56Sopenharmony_ci   This opcode performs several operations before a with block starts.  First,
7327db96d56Sopenharmony_ci   it loads :meth:`~object.__exit__` from the context manager and pushes it onto
7337db96d56Sopenharmony_ci   the stack for later use by :opcode:`WITH_EXCEPT_START`.  Then,
7347db96d56Sopenharmony_ci   :meth:`~object.__enter__` is called. Finally, the result of calling the
7357db96d56Sopenharmony_ci   ``__enter__()`` method is pushed onto the stack.
7367db96d56Sopenharmony_ci
7377db96d56Sopenharmony_ci   .. versionadded:: 3.11
7387db96d56Sopenharmony_ci
7397db96d56Sopenharmony_ci
7407db96d56Sopenharmony_ci.. opcode:: GET_LEN
7417db96d56Sopenharmony_ci
7427db96d56Sopenharmony_ci   Push ``len(TOS)`` onto the stack.
7437db96d56Sopenharmony_ci
7447db96d56Sopenharmony_ci   .. versionadded:: 3.10
7457db96d56Sopenharmony_ci
7467db96d56Sopenharmony_ci
7477db96d56Sopenharmony_ci.. opcode:: MATCH_MAPPING
7487db96d56Sopenharmony_ci
7497db96d56Sopenharmony_ci   If TOS is an instance of :class:`collections.abc.Mapping` (or, more technically: if
7507db96d56Sopenharmony_ci   it has the :const:`Py_TPFLAGS_MAPPING` flag set in its
7517db96d56Sopenharmony_ci   :c:member:`~PyTypeObject.tp_flags`), push ``True`` onto the stack.  Otherwise, push
7527db96d56Sopenharmony_ci   ``False``.
7537db96d56Sopenharmony_ci
7547db96d56Sopenharmony_ci   .. versionadded:: 3.10
7557db96d56Sopenharmony_ci
7567db96d56Sopenharmony_ci
7577db96d56Sopenharmony_ci.. opcode:: MATCH_SEQUENCE
7587db96d56Sopenharmony_ci
7597db96d56Sopenharmony_ci   If TOS is an instance of :class:`collections.abc.Sequence` and is *not* an instance
7607db96d56Sopenharmony_ci   of :class:`str`/:class:`bytes`/:class:`bytearray` (or, more technically: if it has
7617db96d56Sopenharmony_ci   the :const:`Py_TPFLAGS_SEQUENCE` flag set in its :c:member:`~PyTypeObject.tp_flags`),
7627db96d56Sopenharmony_ci   push ``True`` onto the stack.  Otherwise, push ``False``.
7637db96d56Sopenharmony_ci
7647db96d56Sopenharmony_ci   .. versionadded:: 3.10
7657db96d56Sopenharmony_ci
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ci.. opcode:: MATCH_KEYS
7687db96d56Sopenharmony_ci
7697db96d56Sopenharmony_ci   TOS is a tuple of mapping keys, and TOS1 is the match subject.  If TOS1
7707db96d56Sopenharmony_ci   contains all of the keys in TOS, push a :class:`tuple` containing the
7717db96d56Sopenharmony_ci   corresponding values. Otherwise, push ``None``.
7727db96d56Sopenharmony_ci
7737db96d56Sopenharmony_ci   .. versionadded:: 3.10
7747db96d56Sopenharmony_ci
7757db96d56Sopenharmony_ci   .. versionchanged:: 3.11
7767db96d56Sopenharmony_ci      Previously, this instruction also pushed a boolean value indicating
7777db96d56Sopenharmony_ci      success (``True``) or failure (``False``).
7787db96d56Sopenharmony_ci
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ci.. opcode:: STORE_NAME (namei)
7817db96d56Sopenharmony_ci
7827db96d56Sopenharmony_ci   Implements ``name = TOS``. *namei* is the index of *name* in the attribute
7837db96d56Sopenharmony_ci   :attr:`co_names` of the code object. The compiler tries to use
7847db96d56Sopenharmony_ci   :opcode:`STORE_FAST` or :opcode:`STORE_GLOBAL` if possible.
7857db96d56Sopenharmony_ci
7867db96d56Sopenharmony_ci
7877db96d56Sopenharmony_ci.. opcode:: DELETE_NAME (namei)
7887db96d56Sopenharmony_ci
7897db96d56Sopenharmony_ci   Implements ``del name``, where *namei* is the index into :attr:`co_names`
7907db96d56Sopenharmony_ci   attribute of the code object.
7917db96d56Sopenharmony_ci
7927db96d56Sopenharmony_ci
7937db96d56Sopenharmony_ci.. opcode:: UNPACK_SEQUENCE (count)
7947db96d56Sopenharmony_ci
7957db96d56Sopenharmony_ci   Unpacks TOS into *count* individual values, which are put onto the stack
7967db96d56Sopenharmony_ci   right-to-left.
7977db96d56Sopenharmony_ci
7987db96d56Sopenharmony_ci
7997db96d56Sopenharmony_ci.. opcode:: UNPACK_EX (counts)
8007db96d56Sopenharmony_ci
8017db96d56Sopenharmony_ci   Implements assignment with a starred target: Unpacks an iterable in TOS into
8027db96d56Sopenharmony_ci   individual values, where the total number of values can be smaller than the
8037db96d56Sopenharmony_ci   number of items in the iterable: one of the new values will be a list of all
8047db96d56Sopenharmony_ci   leftover items.
8057db96d56Sopenharmony_ci
8067db96d56Sopenharmony_ci   The low byte of *counts* is the number of values before the list value, the
8077db96d56Sopenharmony_ci   high byte of *counts* the number of values after it.  The resulting values
8087db96d56Sopenharmony_ci   are put onto the stack right-to-left.
8097db96d56Sopenharmony_ci
8107db96d56Sopenharmony_ci
8117db96d56Sopenharmony_ci.. opcode:: STORE_ATTR (namei)
8127db96d56Sopenharmony_ci
8137db96d56Sopenharmony_ci   Implements ``TOS.name = TOS1``, where *namei* is the index of name in
8147db96d56Sopenharmony_ci   :attr:`co_names`.
8157db96d56Sopenharmony_ci
8167db96d56Sopenharmony_ci
8177db96d56Sopenharmony_ci.. opcode:: DELETE_ATTR (namei)
8187db96d56Sopenharmony_ci
8197db96d56Sopenharmony_ci   Implements ``del TOS.name``, using *namei* as index into :attr:`co_names`.
8207db96d56Sopenharmony_ci
8217db96d56Sopenharmony_ci
8227db96d56Sopenharmony_ci.. opcode:: STORE_GLOBAL (namei)
8237db96d56Sopenharmony_ci
8247db96d56Sopenharmony_ci   Works as :opcode:`STORE_NAME`, but stores the name as a global.
8257db96d56Sopenharmony_ci
8267db96d56Sopenharmony_ci
8277db96d56Sopenharmony_ci.. opcode:: DELETE_GLOBAL (namei)
8287db96d56Sopenharmony_ci
8297db96d56Sopenharmony_ci   Works as :opcode:`DELETE_NAME`, but deletes a global name.
8307db96d56Sopenharmony_ci
8317db96d56Sopenharmony_ci
8327db96d56Sopenharmony_ci.. opcode:: LOAD_CONST (consti)
8337db96d56Sopenharmony_ci
8347db96d56Sopenharmony_ci   Pushes ``co_consts[consti]`` onto the stack.
8357db96d56Sopenharmony_ci
8367db96d56Sopenharmony_ci
8377db96d56Sopenharmony_ci.. opcode:: LOAD_NAME (namei)
8387db96d56Sopenharmony_ci
8397db96d56Sopenharmony_ci   Pushes the value associated with ``co_names[namei]`` onto the stack.
8407db96d56Sopenharmony_ci
8417db96d56Sopenharmony_ci
8427db96d56Sopenharmony_ci.. opcode:: BUILD_TUPLE (count)
8437db96d56Sopenharmony_ci
8447db96d56Sopenharmony_ci   Creates a tuple consuming *count* items from the stack, and pushes the
8457db96d56Sopenharmony_ci   resulting tuple onto the stack.
8467db96d56Sopenharmony_ci
8477db96d56Sopenharmony_ci
8487db96d56Sopenharmony_ci.. opcode:: BUILD_LIST (count)
8497db96d56Sopenharmony_ci
8507db96d56Sopenharmony_ci   Works as :opcode:`BUILD_TUPLE`, but creates a list.
8517db96d56Sopenharmony_ci
8527db96d56Sopenharmony_ci
8537db96d56Sopenharmony_ci.. opcode:: BUILD_SET (count)
8547db96d56Sopenharmony_ci
8557db96d56Sopenharmony_ci   Works as :opcode:`BUILD_TUPLE`, but creates a set.
8567db96d56Sopenharmony_ci
8577db96d56Sopenharmony_ci
8587db96d56Sopenharmony_ci.. opcode:: BUILD_MAP (count)
8597db96d56Sopenharmony_ci
8607db96d56Sopenharmony_ci   Pushes a new dictionary object onto the stack.  Pops ``2 * count`` items
8617db96d56Sopenharmony_ci   so that the dictionary holds *count* entries:
8627db96d56Sopenharmony_ci   ``{..., TOS3: TOS2, TOS1: TOS}``.
8637db96d56Sopenharmony_ci
8647db96d56Sopenharmony_ci   .. versionchanged:: 3.5
8657db96d56Sopenharmony_ci      The dictionary is created from stack items instead of creating an
8667db96d56Sopenharmony_ci      empty dictionary pre-sized to hold *count* items.
8677db96d56Sopenharmony_ci
8687db96d56Sopenharmony_ci
8697db96d56Sopenharmony_ci.. opcode:: BUILD_CONST_KEY_MAP (count)
8707db96d56Sopenharmony_ci
8717db96d56Sopenharmony_ci   The version of :opcode:`BUILD_MAP` specialized for constant keys. Pops the
8727db96d56Sopenharmony_ci   top element on the stack which contains a tuple of keys, then starting from
8737db96d56Sopenharmony_ci   ``TOS1``, pops *count* values to form values in the built dictionary.
8747db96d56Sopenharmony_ci
8757db96d56Sopenharmony_ci   .. versionadded:: 3.6
8767db96d56Sopenharmony_ci
8777db96d56Sopenharmony_ci
8787db96d56Sopenharmony_ci.. opcode:: BUILD_STRING (count)
8797db96d56Sopenharmony_ci
8807db96d56Sopenharmony_ci   Concatenates *count* strings from the stack and pushes the resulting string
8817db96d56Sopenharmony_ci   onto the stack.
8827db96d56Sopenharmony_ci
8837db96d56Sopenharmony_ci   .. versionadded:: 3.6
8847db96d56Sopenharmony_ci
8857db96d56Sopenharmony_ci
8867db96d56Sopenharmony_ci.. opcode:: LIST_TO_TUPLE
8877db96d56Sopenharmony_ci
8887db96d56Sopenharmony_ci   Pops a list from the stack and pushes a tuple containing the same values.
8897db96d56Sopenharmony_ci
8907db96d56Sopenharmony_ci   .. versionadded:: 3.9
8917db96d56Sopenharmony_ci
8927db96d56Sopenharmony_ci
8937db96d56Sopenharmony_ci.. opcode:: LIST_EXTEND (i)
8947db96d56Sopenharmony_ci
8957db96d56Sopenharmony_ci   Calls ``list.extend(TOS1[-i], TOS)``.  Used to build lists.
8967db96d56Sopenharmony_ci
8977db96d56Sopenharmony_ci   .. versionadded:: 3.9
8987db96d56Sopenharmony_ci
8997db96d56Sopenharmony_ci
9007db96d56Sopenharmony_ci.. opcode:: SET_UPDATE (i)
9017db96d56Sopenharmony_ci
9027db96d56Sopenharmony_ci   Calls ``set.update(TOS1[-i], TOS)``.  Used to build sets.
9037db96d56Sopenharmony_ci
9047db96d56Sopenharmony_ci   .. versionadded:: 3.9
9057db96d56Sopenharmony_ci
9067db96d56Sopenharmony_ci
9077db96d56Sopenharmony_ci.. opcode:: DICT_UPDATE (i)
9087db96d56Sopenharmony_ci
9097db96d56Sopenharmony_ci   Calls ``dict.update(TOS1[-i], TOS)``.  Used to build dicts.
9107db96d56Sopenharmony_ci
9117db96d56Sopenharmony_ci   .. versionadded:: 3.9
9127db96d56Sopenharmony_ci
9137db96d56Sopenharmony_ci
9147db96d56Sopenharmony_ci.. opcode:: DICT_MERGE (i)
9157db96d56Sopenharmony_ci
9167db96d56Sopenharmony_ci   Like :opcode:`DICT_UPDATE` but raises an exception for duplicate keys.
9177db96d56Sopenharmony_ci
9187db96d56Sopenharmony_ci   .. versionadded:: 3.9
9197db96d56Sopenharmony_ci
9207db96d56Sopenharmony_ci
9217db96d56Sopenharmony_ci.. opcode:: LOAD_ATTR (namei)
9227db96d56Sopenharmony_ci
9237db96d56Sopenharmony_ci   Replaces TOS with ``getattr(TOS, co_names[namei])``.
9247db96d56Sopenharmony_ci
9257db96d56Sopenharmony_ci
9267db96d56Sopenharmony_ci.. opcode:: COMPARE_OP (opname)
9277db96d56Sopenharmony_ci
9287db96d56Sopenharmony_ci   Performs a Boolean operation.  The operation name can be found in
9297db96d56Sopenharmony_ci   ``cmp_op[opname]``.
9307db96d56Sopenharmony_ci
9317db96d56Sopenharmony_ci
9327db96d56Sopenharmony_ci.. opcode:: IS_OP (invert)
9337db96d56Sopenharmony_ci
9347db96d56Sopenharmony_ci   Performs ``is`` comparison, or ``is not`` if ``invert`` is 1.
9357db96d56Sopenharmony_ci
9367db96d56Sopenharmony_ci   .. versionadded:: 3.9
9377db96d56Sopenharmony_ci
9387db96d56Sopenharmony_ci
9397db96d56Sopenharmony_ci.. opcode:: CONTAINS_OP (invert)
9407db96d56Sopenharmony_ci
9417db96d56Sopenharmony_ci   Performs ``in`` comparison, or ``not in`` if ``invert`` is 1.
9427db96d56Sopenharmony_ci
9437db96d56Sopenharmony_ci   .. versionadded:: 3.9
9447db96d56Sopenharmony_ci
9457db96d56Sopenharmony_ci
9467db96d56Sopenharmony_ci.. opcode:: IMPORT_NAME (namei)
9477db96d56Sopenharmony_ci
9487db96d56Sopenharmony_ci   Imports the module ``co_names[namei]``.  TOS and TOS1 are popped and provide
9497db96d56Sopenharmony_ci   the *fromlist* and *level* arguments of :func:`__import__`.  The module
9507db96d56Sopenharmony_ci   object is pushed onto the stack.  The current namespace is not affected: for
9517db96d56Sopenharmony_ci   a proper import statement, a subsequent :opcode:`STORE_FAST` instruction
9527db96d56Sopenharmony_ci   modifies the namespace.
9537db96d56Sopenharmony_ci
9547db96d56Sopenharmony_ci
9557db96d56Sopenharmony_ci.. opcode:: IMPORT_FROM (namei)
9567db96d56Sopenharmony_ci
9577db96d56Sopenharmony_ci   Loads the attribute ``co_names[namei]`` from the module found in TOS. The
9587db96d56Sopenharmony_ci   resulting object is pushed onto the stack, to be subsequently stored by a
9597db96d56Sopenharmony_ci   :opcode:`STORE_FAST` instruction.
9607db96d56Sopenharmony_ci
9617db96d56Sopenharmony_ci
9627db96d56Sopenharmony_ci.. opcode:: JUMP_FORWARD (delta)
9637db96d56Sopenharmony_ci
9647db96d56Sopenharmony_ci   Increments bytecode counter by *delta*.
9657db96d56Sopenharmony_ci
9667db96d56Sopenharmony_ci
9677db96d56Sopenharmony_ci.. opcode:: JUMP_BACKWARD (delta)
9687db96d56Sopenharmony_ci
9697db96d56Sopenharmony_ci   Decrements bytecode counter by *delta*. Checks for interrupts.
9707db96d56Sopenharmony_ci
9717db96d56Sopenharmony_ci   .. versionadded:: 3.11
9727db96d56Sopenharmony_ci
9737db96d56Sopenharmony_ci
9747db96d56Sopenharmony_ci.. opcode:: JUMP_BACKWARD_NO_INTERRUPT (delta)
9757db96d56Sopenharmony_ci
9767db96d56Sopenharmony_ci   Decrements bytecode counter by *delta*. Does not check for interrupts.
9777db96d56Sopenharmony_ci
9787db96d56Sopenharmony_ci   .. versionadded:: 3.11
9797db96d56Sopenharmony_ci
9807db96d56Sopenharmony_ci
9817db96d56Sopenharmony_ci.. opcode:: POP_JUMP_FORWARD_IF_TRUE (delta)
9827db96d56Sopenharmony_ci
9837db96d56Sopenharmony_ci   If TOS is true, increments the bytecode counter by *delta*.  TOS is popped.
9847db96d56Sopenharmony_ci
9857db96d56Sopenharmony_ci   .. versionadded:: 3.11
9867db96d56Sopenharmony_ci
9877db96d56Sopenharmony_ci
9887db96d56Sopenharmony_ci.. opcode:: POP_JUMP_BACKWARD_IF_TRUE (delta)
9897db96d56Sopenharmony_ci
9907db96d56Sopenharmony_ci   If TOS is true, decrements the bytecode counter by *delta*.  TOS is popped.
9917db96d56Sopenharmony_ci
9927db96d56Sopenharmony_ci   .. versionadded:: 3.11
9937db96d56Sopenharmony_ci
9947db96d56Sopenharmony_ci
9957db96d56Sopenharmony_ci.. opcode:: POP_JUMP_FORWARD_IF_FALSE (delta)
9967db96d56Sopenharmony_ci
9977db96d56Sopenharmony_ci   If TOS is false, increments the bytecode counter by *delta*.  TOS is popped.
9987db96d56Sopenharmony_ci
9997db96d56Sopenharmony_ci   .. versionadded:: 3.11
10007db96d56Sopenharmony_ci
10017db96d56Sopenharmony_ci
10027db96d56Sopenharmony_ci.. opcode:: POP_JUMP_BACKWARD_IF_FALSE (delta)
10037db96d56Sopenharmony_ci
10047db96d56Sopenharmony_ci   If TOS is false, decrements the bytecode counter by *delta*.  TOS is popped.
10057db96d56Sopenharmony_ci
10067db96d56Sopenharmony_ci   .. versionadded:: 3.11
10077db96d56Sopenharmony_ci
10087db96d56Sopenharmony_ci
10097db96d56Sopenharmony_ci.. opcode:: POP_JUMP_FORWARD_IF_NOT_NONE (delta)
10107db96d56Sopenharmony_ci
10117db96d56Sopenharmony_ci   If TOS is not ``None``, increments the bytecode counter by *delta*.  TOS is popped.
10127db96d56Sopenharmony_ci
10137db96d56Sopenharmony_ci   .. versionadded:: 3.11
10147db96d56Sopenharmony_ci
10157db96d56Sopenharmony_ci
10167db96d56Sopenharmony_ci.. opcode:: POP_JUMP_BACKWARD_IF_NOT_NONE (delta)
10177db96d56Sopenharmony_ci
10187db96d56Sopenharmony_ci   If TOS is not ``None``, decrements the bytecode counter by *delta*.  TOS is popped.
10197db96d56Sopenharmony_ci
10207db96d56Sopenharmony_ci   .. versionadded:: 3.11
10217db96d56Sopenharmony_ci
10227db96d56Sopenharmony_ci
10237db96d56Sopenharmony_ci.. opcode:: POP_JUMP_FORWARD_IF_NONE (delta)
10247db96d56Sopenharmony_ci
10257db96d56Sopenharmony_ci   If TOS is ``None``, increments the bytecode counter by *delta*.  TOS is popped.
10267db96d56Sopenharmony_ci
10277db96d56Sopenharmony_ci   .. versionadded:: 3.11
10287db96d56Sopenharmony_ci
10297db96d56Sopenharmony_ci
10307db96d56Sopenharmony_ci.. opcode:: POP_JUMP_BACKWARD_IF_NONE (delta)
10317db96d56Sopenharmony_ci
10327db96d56Sopenharmony_ci   If TOS is ``None``, decrements the bytecode counter by *delta*.  TOS is popped.
10337db96d56Sopenharmony_ci
10347db96d56Sopenharmony_ci   .. versionadded:: 3.11
10357db96d56Sopenharmony_ci
10367db96d56Sopenharmony_ci
10377db96d56Sopenharmony_ci.. opcode:: JUMP_IF_TRUE_OR_POP (delta)
10387db96d56Sopenharmony_ci
10397db96d56Sopenharmony_ci   If TOS is true, increments the bytecode counter by *delta* and leaves TOS on the
10407db96d56Sopenharmony_ci   stack.  Otherwise (TOS is false), TOS is popped.
10417db96d56Sopenharmony_ci
10427db96d56Sopenharmony_ci   .. versionadded:: 3.1
10437db96d56Sopenharmony_ci
10447db96d56Sopenharmony_ci   .. versionchanged:: 3.11
10457db96d56Sopenharmony_ci      The oparg is now a relative delta rather than an absolute target.
10467db96d56Sopenharmony_ci
10477db96d56Sopenharmony_ci.. opcode:: JUMP_IF_FALSE_OR_POP (delta)
10487db96d56Sopenharmony_ci
10497db96d56Sopenharmony_ci   If TOS is false, increments the bytecode counter by *delta* and leaves TOS on the
10507db96d56Sopenharmony_ci   stack.  Otherwise (TOS is true), TOS is popped.
10517db96d56Sopenharmony_ci
10527db96d56Sopenharmony_ci   .. versionadded:: 3.1
10537db96d56Sopenharmony_ci
10547db96d56Sopenharmony_ci   .. versionchanged:: 3.11
10557db96d56Sopenharmony_ci      The oparg is now a relative delta rather than an absolute target.
10567db96d56Sopenharmony_ci
10577db96d56Sopenharmony_ci
10587db96d56Sopenharmony_ci.. opcode:: FOR_ITER (delta)
10597db96d56Sopenharmony_ci
10607db96d56Sopenharmony_ci   TOS is an :term:`iterator`.  Call its :meth:`~iterator.__next__` method.  If
10617db96d56Sopenharmony_ci   this yields a new value, push it on the stack (leaving the iterator below
10627db96d56Sopenharmony_ci   it).  If the iterator indicates it is exhausted, TOS is popped, and the byte
10637db96d56Sopenharmony_ci   code counter is incremented by *delta*.
10647db96d56Sopenharmony_ci
10657db96d56Sopenharmony_ci
10667db96d56Sopenharmony_ci.. opcode:: LOAD_GLOBAL (namei)
10677db96d56Sopenharmony_ci
10687db96d56Sopenharmony_ci   Loads the global named ``co_names[namei>>1]`` onto the stack.
10697db96d56Sopenharmony_ci
10707db96d56Sopenharmony_ci   .. versionchanged:: 3.11
10717db96d56Sopenharmony_ci      If the low bit of ``namei`` is set, then a ``NULL`` is pushed to the
10727db96d56Sopenharmony_ci      stack before the global variable.
10737db96d56Sopenharmony_ci
10747db96d56Sopenharmony_ci.. opcode:: LOAD_FAST (var_num)
10757db96d56Sopenharmony_ci
10767db96d56Sopenharmony_ci   Pushes a reference to the local ``co_varnames[var_num]`` onto the stack.
10777db96d56Sopenharmony_ci
10787db96d56Sopenharmony_ci
10797db96d56Sopenharmony_ci.. opcode:: STORE_FAST (var_num)
10807db96d56Sopenharmony_ci
10817db96d56Sopenharmony_ci   Stores TOS into the local ``co_varnames[var_num]``.
10827db96d56Sopenharmony_ci
10837db96d56Sopenharmony_ci
10847db96d56Sopenharmony_ci.. opcode:: DELETE_FAST (var_num)
10857db96d56Sopenharmony_ci
10867db96d56Sopenharmony_ci   Deletes local ``co_varnames[var_num]``.
10877db96d56Sopenharmony_ci
10887db96d56Sopenharmony_ci
10897db96d56Sopenharmony_ci.. opcode:: MAKE_CELL (i)
10907db96d56Sopenharmony_ci
10917db96d56Sopenharmony_ci   Creates a new cell in slot ``i``.  If that slot is nonempty then
10927db96d56Sopenharmony_ci   that value is stored into the new cell.
10937db96d56Sopenharmony_ci
10947db96d56Sopenharmony_ci   .. versionadded:: 3.11
10957db96d56Sopenharmony_ci
10967db96d56Sopenharmony_ci
10977db96d56Sopenharmony_ci.. opcode:: LOAD_CLOSURE (i)
10987db96d56Sopenharmony_ci
10997db96d56Sopenharmony_ci   Pushes a reference to the cell contained in slot ``i`` of the "fast locals"
11007db96d56Sopenharmony_ci   storage.  The name of the variable is ``co_fastlocalnames[i]``.
11017db96d56Sopenharmony_ci
11027db96d56Sopenharmony_ci   Note that ``LOAD_CLOSURE`` is effectively an alias for ``LOAD_FAST``.
11037db96d56Sopenharmony_ci   It exists to keep bytecode a little more readable.
11047db96d56Sopenharmony_ci
11057db96d56Sopenharmony_ci   .. versionchanged:: 3.11
11067db96d56Sopenharmony_ci      ``i`` is no longer offset by the length of ``co_varnames``.
11077db96d56Sopenharmony_ci
11087db96d56Sopenharmony_ci
11097db96d56Sopenharmony_ci.. opcode:: LOAD_DEREF (i)
11107db96d56Sopenharmony_ci
11117db96d56Sopenharmony_ci   Loads the cell contained in slot ``i`` of the "fast locals" storage.
11127db96d56Sopenharmony_ci   Pushes a reference to the object the cell contains on the stack.
11137db96d56Sopenharmony_ci
11147db96d56Sopenharmony_ci   .. versionchanged:: 3.11
11157db96d56Sopenharmony_ci      ``i`` is no longer offset by the length of ``co_varnames``.
11167db96d56Sopenharmony_ci
11177db96d56Sopenharmony_ci
11187db96d56Sopenharmony_ci.. opcode:: LOAD_CLASSDEREF (i)
11197db96d56Sopenharmony_ci
11207db96d56Sopenharmony_ci   Much like :opcode:`LOAD_DEREF` but first checks the locals dictionary before
11217db96d56Sopenharmony_ci   consulting the cell.  This is used for loading free variables in class
11227db96d56Sopenharmony_ci   bodies.
11237db96d56Sopenharmony_ci
11247db96d56Sopenharmony_ci   .. versionadded:: 3.4
11257db96d56Sopenharmony_ci
11267db96d56Sopenharmony_ci   .. versionchanged:: 3.11
11277db96d56Sopenharmony_ci      ``i`` is no longer offset by the length of ``co_varnames``.
11287db96d56Sopenharmony_ci
11297db96d56Sopenharmony_ci
11307db96d56Sopenharmony_ci.. opcode:: STORE_DEREF (i)
11317db96d56Sopenharmony_ci
11327db96d56Sopenharmony_ci   Stores TOS into the cell contained in slot ``i`` of the "fast locals"
11337db96d56Sopenharmony_ci   storage.
11347db96d56Sopenharmony_ci
11357db96d56Sopenharmony_ci   .. versionchanged:: 3.11
11367db96d56Sopenharmony_ci      ``i`` is no longer offset by the length of ``co_varnames``.
11377db96d56Sopenharmony_ci
11387db96d56Sopenharmony_ci
11397db96d56Sopenharmony_ci.. opcode:: DELETE_DEREF (i)
11407db96d56Sopenharmony_ci
11417db96d56Sopenharmony_ci   Empties the cell contained in slot ``i`` of the "fast locals" storage.
11427db96d56Sopenharmony_ci   Used by the :keyword:`del` statement.
11437db96d56Sopenharmony_ci
11447db96d56Sopenharmony_ci   .. versionadded:: 3.2
11457db96d56Sopenharmony_ci
11467db96d56Sopenharmony_ci   .. versionchanged:: 3.11
11477db96d56Sopenharmony_ci      ``i`` is no longer offset by the length of ``co_varnames``.
11487db96d56Sopenharmony_ci
11497db96d56Sopenharmony_ci
11507db96d56Sopenharmony_ci.. opcode:: COPY_FREE_VARS (n)
11517db96d56Sopenharmony_ci
11527db96d56Sopenharmony_ci   Copies the ``n`` free variables from the closure into the frame.
11537db96d56Sopenharmony_ci   Removes the need for special code on the caller's side when calling
11547db96d56Sopenharmony_ci   closures.
11557db96d56Sopenharmony_ci
11567db96d56Sopenharmony_ci   .. versionadded:: 3.11
11577db96d56Sopenharmony_ci
11587db96d56Sopenharmony_ci
11597db96d56Sopenharmony_ci.. opcode:: RAISE_VARARGS (argc)
11607db96d56Sopenharmony_ci
11617db96d56Sopenharmony_ci   Raises an exception using one of the 3 forms of the ``raise`` statement,
11627db96d56Sopenharmony_ci   depending on the value of *argc*:
11637db96d56Sopenharmony_ci
11647db96d56Sopenharmony_ci   * 0: ``raise`` (re-raise previous exception)
11657db96d56Sopenharmony_ci   * 1: ``raise TOS`` (raise exception instance or type at ``TOS``)
11667db96d56Sopenharmony_ci   * 2: ``raise TOS1 from TOS`` (raise exception instance or type at ``TOS1``
11677db96d56Sopenharmony_ci     with ``__cause__`` set to ``TOS``)
11687db96d56Sopenharmony_ci
11697db96d56Sopenharmony_ci
11707db96d56Sopenharmony_ci.. opcode:: CALL (argc)
11717db96d56Sopenharmony_ci
11727db96d56Sopenharmony_ci   Calls a callable object with the number of arguments specified by ``argc``,
11737db96d56Sopenharmony_ci   including the named arguments specified by the preceding
11747db96d56Sopenharmony_ci   :opcode:`KW_NAMES`, if any.
11757db96d56Sopenharmony_ci   On the stack are (in ascending order), either:
11767db96d56Sopenharmony_ci
11777db96d56Sopenharmony_ci   * NULL
11787db96d56Sopenharmony_ci   * The callable
11797db96d56Sopenharmony_ci   * The positional arguments
11807db96d56Sopenharmony_ci   * The named arguments
11817db96d56Sopenharmony_ci
11827db96d56Sopenharmony_ci   or:
11837db96d56Sopenharmony_ci
11847db96d56Sopenharmony_ci   * The callable
11857db96d56Sopenharmony_ci   * ``self``
11867db96d56Sopenharmony_ci   * The remaining positional arguments
11877db96d56Sopenharmony_ci   * The named arguments
11887db96d56Sopenharmony_ci
11897db96d56Sopenharmony_ci   ``argc`` is the total of the positional and named arguments, excluding
11907db96d56Sopenharmony_ci   ``self`` when a ``NULL`` is not present.
11917db96d56Sopenharmony_ci
11927db96d56Sopenharmony_ci   ``CALL`` pops all arguments and the callable object off the stack,
11937db96d56Sopenharmony_ci   calls the callable object with those arguments, and pushes the return value
11947db96d56Sopenharmony_ci   returned by the callable object.
11957db96d56Sopenharmony_ci
11967db96d56Sopenharmony_ci   .. versionadded:: 3.11
11977db96d56Sopenharmony_ci
11987db96d56Sopenharmony_ci
11997db96d56Sopenharmony_ci.. opcode:: CALL_FUNCTION_EX (flags)
12007db96d56Sopenharmony_ci
12017db96d56Sopenharmony_ci   Calls a callable object with variable set of positional and keyword
12027db96d56Sopenharmony_ci   arguments.  If the lowest bit of *flags* is set, the top of the stack
12037db96d56Sopenharmony_ci   contains a mapping object containing additional keyword arguments.
12047db96d56Sopenharmony_ci   Before the callable is called, the mapping object and iterable object
12057db96d56Sopenharmony_ci   are each "unpacked" and their contents passed in as keyword and
12067db96d56Sopenharmony_ci   positional arguments respectively.
12077db96d56Sopenharmony_ci   ``CALL_FUNCTION_EX`` pops all arguments and the callable object off the stack,
12087db96d56Sopenharmony_ci   calls the callable object with those arguments, and pushes the return value
12097db96d56Sopenharmony_ci   returned by the callable object.
12107db96d56Sopenharmony_ci
12117db96d56Sopenharmony_ci   .. versionadded:: 3.6
12127db96d56Sopenharmony_ci
12137db96d56Sopenharmony_ci
12147db96d56Sopenharmony_ci.. opcode:: LOAD_METHOD (namei)
12157db96d56Sopenharmony_ci
12167db96d56Sopenharmony_ci   Loads a method named ``co_names[namei]`` from the TOS object. TOS is popped.
12177db96d56Sopenharmony_ci   This bytecode distinguishes two cases: if TOS has a method with the correct
12187db96d56Sopenharmony_ci   name, the bytecode pushes the unbound method and TOS. TOS will be used as
12197db96d56Sopenharmony_ci   the first argument (``self``) by :opcode:`CALL` when calling the
12207db96d56Sopenharmony_ci   unbound method. Otherwise, ``NULL`` and the object return by the attribute
12217db96d56Sopenharmony_ci   lookup are pushed.
12227db96d56Sopenharmony_ci
12237db96d56Sopenharmony_ci   .. versionadded:: 3.7
12247db96d56Sopenharmony_ci
12257db96d56Sopenharmony_ci
12267db96d56Sopenharmony_ci.. opcode:: PRECALL (argc)
12277db96d56Sopenharmony_ci
12287db96d56Sopenharmony_ci   Prefixes :opcode:`CALL`. Logically this is a no op.
12297db96d56Sopenharmony_ci   It exists to enable effective specialization of calls.
12307db96d56Sopenharmony_ci   ``argc`` is the number of arguments as described in :opcode:`CALL`.
12317db96d56Sopenharmony_ci
12327db96d56Sopenharmony_ci   .. versionadded:: 3.11
12337db96d56Sopenharmony_ci
12347db96d56Sopenharmony_ci
12357db96d56Sopenharmony_ci.. opcode:: PUSH_NULL
12367db96d56Sopenharmony_ci
12377db96d56Sopenharmony_ci    Pushes a ``NULL`` to the stack.
12387db96d56Sopenharmony_ci    Used in the call sequence to match the ``NULL`` pushed by
12397db96d56Sopenharmony_ci    :opcode:`LOAD_METHOD` for non-method calls.
12407db96d56Sopenharmony_ci
12417db96d56Sopenharmony_ci   .. versionadded:: 3.11
12427db96d56Sopenharmony_ci
12437db96d56Sopenharmony_ci
12447db96d56Sopenharmony_ci.. opcode:: KW_NAMES (i)
12457db96d56Sopenharmony_ci
12467db96d56Sopenharmony_ci   Prefixes :opcode:`PRECALL`.
12477db96d56Sopenharmony_ci   Stores a reference to ``co_consts[consti]`` into an internal variable
12487db96d56Sopenharmony_ci   for use by :opcode:`CALL`. ``co_consts[consti]`` must be a tuple of strings.
12497db96d56Sopenharmony_ci
12507db96d56Sopenharmony_ci   .. versionadded:: 3.11
12517db96d56Sopenharmony_ci
12527db96d56Sopenharmony_ci
12537db96d56Sopenharmony_ci.. opcode:: MAKE_FUNCTION (flags)
12547db96d56Sopenharmony_ci
12557db96d56Sopenharmony_ci   Pushes a new function object on the stack.  From bottom to top, the consumed
12567db96d56Sopenharmony_ci   stack must consist of values if the argument carries a specified flag value
12577db96d56Sopenharmony_ci
12587db96d56Sopenharmony_ci   * ``0x01`` a tuple of default values for positional-only and
12597db96d56Sopenharmony_ci     positional-or-keyword parameters in positional order
12607db96d56Sopenharmony_ci   * ``0x02`` a dictionary of keyword-only parameters' default values
12617db96d56Sopenharmony_ci   * ``0x04`` a tuple of strings containing parameters' annotations
12627db96d56Sopenharmony_ci   * ``0x08`` a tuple containing cells for free variables, making a closure
12637db96d56Sopenharmony_ci   * the code associated with the function (at TOS1)
12647db96d56Sopenharmony_ci   * the :term:`qualified name` of the function (at TOS)
12657db96d56Sopenharmony_ci
12667db96d56Sopenharmony_ci   .. versionchanged:: 3.10
12677db96d56Sopenharmony_ci      Flag value ``0x04`` is a tuple of strings instead of dictionary
12687db96d56Sopenharmony_ci
12697db96d56Sopenharmony_ci.. opcode:: BUILD_SLICE (argc)
12707db96d56Sopenharmony_ci
12717db96d56Sopenharmony_ci   .. index:: pair: built-in function; slice
12727db96d56Sopenharmony_ci
12737db96d56Sopenharmony_ci   Pushes a slice object on the stack.  *argc* must be 2 or 3.  If it is 2,
12747db96d56Sopenharmony_ci   ``slice(TOS1, TOS)`` is pushed; if it is 3, ``slice(TOS2, TOS1, TOS)`` is
12757db96d56Sopenharmony_ci   pushed. See the :func:`slice` built-in function for more information.
12767db96d56Sopenharmony_ci
12777db96d56Sopenharmony_ci
12787db96d56Sopenharmony_ci.. opcode:: EXTENDED_ARG (ext)
12797db96d56Sopenharmony_ci
12807db96d56Sopenharmony_ci   Prefixes any opcode which has an argument too big to fit into the default one
12817db96d56Sopenharmony_ci   byte. *ext* holds an additional byte which act as higher bits in the argument.
12827db96d56Sopenharmony_ci   For each opcode, at most three prefixal ``EXTENDED_ARG`` are allowed, forming
12837db96d56Sopenharmony_ci   an argument from two-byte to four-byte.
12847db96d56Sopenharmony_ci
12857db96d56Sopenharmony_ci
12867db96d56Sopenharmony_ci.. opcode:: FORMAT_VALUE (flags)
12877db96d56Sopenharmony_ci
12887db96d56Sopenharmony_ci   Used for implementing formatted literal strings (f-strings).  Pops
12897db96d56Sopenharmony_ci   an optional *fmt_spec* from the stack, then a required *value*.
12907db96d56Sopenharmony_ci   *flags* is interpreted as follows:
12917db96d56Sopenharmony_ci
12927db96d56Sopenharmony_ci   * ``(flags & 0x03) == 0x00``: *value* is formatted as-is.
12937db96d56Sopenharmony_ci   * ``(flags & 0x03) == 0x01``: call :func:`str` on *value* before
12947db96d56Sopenharmony_ci     formatting it.
12957db96d56Sopenharmony_ci   * ``(flags & 0x03) == 0x02``: call :func:`repr` on *value* before
12967db96d56Sopenharmony_ci     formatting it.
12977db96d56Sopenharmony_ci   * ``(flags & 0x03) == 0x03``: call :func:`ascii` on *value* before
12987db96d56Sopenharmony_ci     formatting it.
12997db96d56Sopenharmony_ci   * ``(flags & 0x04) == 0x04``: pop *fmt_spec* from the stack and use
13007db96d56Sopenharmony_ci     it, else use an empty *fmt_spec*.
13017db96d56Sopenharmony_ci
13027db96d56Sopenharmony_ci   Formatting is performed using :c:func:`PyObject_Format`.  The
13037db96d56Sopenharmony_ci   result is pushed on the stack.
13047db96d56Sopenharmony_ci
13057db96d56Sopenharmony_ci   .. versionadded:: 3.6
13067db96d56Sopenharmony_ci
13077db96d56Sopenharmony_ci
13087db96d56Sopenharmony_ci.. opcode:: MATCH_CLASS (count)
13097db96d56Sopenharmony_ci
13107db96d56Sopenharmony_ci   TOS is a tuple of keyword attribute names, TOS1 is the class being matched
13117db96d56Sopenharmony_ci   against, and TOS2 is the match subject.  *count* is the number of positional
13127db96d56Sopenharmony_ci   sub-patterns.
13137db96d56Sopenharmony_ci
13147db96d56Sopenharmony_ci   Pop TOS, TOS1, and TOS2.  If TOS2 is an instance of TOS1 and has the
13157db96d56Sopenharmony_ci   positional and keyword attributes required by *count* and TOS, push a tuple
13167db96d56Sopenharmony_ci   of extracted attributes.  Otherwise, push ``None``.
13177db96d56Sopenharmony_ci
13187db96d56Sopenharmony_ci   .. versionadded:: 3.10
13197db96d56Sopenharmony_ci
13207db96d56Sopenharmony_ci   .. versionchanged:: 3.11
13217db96d56Sopenharmony_ci      Previously, this instruction also pushed a boolean value indicating
13227db96d56Sopenharmony_ci      success (``True``) or failure (``False``).
13237db96d56Sopenharmony_ci
13247db96d56Sopenharmony_ci
13257db96d56Sopenharmony_ci.. opcode:: RESUME (where)
13267db96d56Sopenharmony_ci
13277db96d56Sopenharmony_ci    A no-op. Performs internal tracing, debugging and optimization checks.
13287db96d56Sopenharmony_ci
13297db96d56Sopenharmony_ci    The ``where`` operand marks where the ``RESUME`` occurs:
13307db96d56Sopenharmony_ci
13317db96d56Sopenharmony_ci    * ``0`` The start of a function
13327db96d56Sopenharmony_ci    * ``1`` After a ``yield`` expression
13337db96d56Sopenharmony_ci    * ``2`` After a ``yield from`` expression
13347db96d56Sopenharmony_ci    * ``3`` After an ``await`` expression
13357db96d56Sopenharmony_ci
13367db96d56Sopenharmony_ci   .. versionadded:: 3.11
13377db96d56Sopenharmony_ci
13387db96d56Sopenharmony_ci
13397db96d56Sopenharmony_ci.. opcode:: RETURN_GENERATOR
13407db96d56Sopenharmony_ci
13417db96d56Sopenharmony_ci    Create a generator, coroutine, or async generator from the current frame.
13427db96d56Sopenharmony_ci    Clear the current frame and return the newly created generator.
13437db96d56Sopenharmony_ci
13447db96d56Sopenharmony_ci    .. versionadded:: 3.11
13457db96d56Sopenharmony_ci
13467db96d56Sopenharmony_ci
13477db96d56Sopenharmony_ci.. opcode:: SEND
13487db96d56Sopenharmony_ci
13497db96d56Sopenharmony_ci    Sends ``None`` to the sub-generator of this generator.
13507db96d56Sopenharmony_ci    Used in ``yield from`` and ``await`` statements.
13517db96d56Sopenharmony_ci
13527db96d56Sopenharmony_ci    .. versionadded:: 3.11
13537db96d56Sopenharmony_ci
13547db96d56Sopenharmony_ci
13557db96d56Sopenharmony_ci.. opcode:: ASYNC_GEN_WRAP
13567db96d56Sopenharmony_ci
13577db96d56Sopenharmony_ci    Wraps the value on top of the stack in an ``async_generator_wrapped_value``.
13587db96d56Sopenharmony_ci    Used to yield in async generators.
13597db96d56Sopenharmony_ci
13607db96d56Sopenharmony_ci    .. versionadded:: 3.11
13617db96d56Sopenharmony_ci
13627db96d56Sopenharmony_ci
13637db96d56Sopenharmony_ci.. opcode:: HAVE_ARGUMENT
13647db96d56Sopenharmony_ci
13657db96d56Sopenharmony_ci   This is not really an opcode.  It identifies the dividing line between
13667db96d56Sopenharmony_ci   opcodes which don't use their argument and those that do
13677db96d56Sopenharmony_ci   (``< HAVE_ARGUMENT`` and ``>= HAVE_ARGUMENT``, respectively).
13687db96d56Sopenharmony_ci
13697db96d56Sopenharmony_ci   .. versionchanged:: 3.6
13707db96d56Sopenharmony_ci      Now every instruction has an argument, but opcodes ``< HAVE_ARGUMENT``
13717db96d56Sopenharmony_ci      ignore it. Before, only opcodes ``>= HAVE_ARGUMENT`` had an argument.
13727db96d56Sopenharmony_ci
13737db96d56Sopenharmony_ci
13747db96d56Sopenharmony_ci.. _opcode_collections:
13757db96d56Sopenharmony_ci
13767db96d56Sopenharmony_ciOpcode collections
13777db96d56Sopenharmony_ci------------------
13787db96d56Sopenharmony_ci
13797db96d56Sopenharmony_ciThese collections are provided for automatic introspection of bytecode
13807db96d56Sopenharmony_ciinstructions:
13817db96d56Sopenharmony_ci
13827db96d56Sopenharmony_ci.. data:: opname
13837db96d56Sopenharmony_ci
13847db96d56Sopenharmony_ci   Sequence of operation names, indexable using the bytecode.
13857db96d56Sopenharmony_ci
13867db96d56Sopenharmony_ci
13877db96d56Sopenharmony_ci.. data:: opmap
13887db96d56Sopenharmony_ci
13897db96d56Sopenharmony_ci   Dictionary mapping operation names to bytecodes.
13907db96d56Sopenharmony_ci
13917db96d56Sopenharmony_ci
13927db96d56Sopenharmony_ci.. data:: cmp_op
13937db96d56Sopenharmony_ci
13947db96d56Sopenharmony_ci   Sequence of all compare operation names.
13957db96d56Sopenharmony_ci
13967db96d56Sopenharmony_ci
13977db96d56Sopenharmony_ci.. data:: hasconst
13987db96d56Sopenharmony_ci
13997db96d56Sopenharmony_ci   Sequence of bytecodes that access a constant.
14007db96d56Sopenharmony_ci
14017db96d56Sopenharmony_ci
14027db96d56Sopenharmony_ci.. data:: hasfree
14037db96d56Sopenharmony_ci
14047db96d56Sopenharmony_ci   Sequence of bytecodes that access a free variable (note that 'free' in this
14057db96d56Sopenharmony_ci   context refers to names in the current scope that are referenced by inner
14067db96d56Sopenharmony_ci   scopes or names in outer scopes that are referenced from this scope.  It does
14077db96d56Sopenharmony_ci   *not* include references to global or builtin scopes).
14087db96d56Sopenharmony_ci
14097db96d56Sopenharmony_ci
14107db96d56Sopenharmony_ci.. data:: hasname
14117db96d56Sopenharmony_ci
14127db96d56Sopenharmony_ci   Sequence of bytecodes that access an attribute by name.
14137db96d56Sopenharmony_ci
14147db96d56Sopenharmony_ci
14157db96d56Sopenharmony_ci.. data:: hasjrel
14167db96d56Sopenharmony_ci
14177db96d56Sopenharmony_ci   Sequence of bytecodes that have a relative jump target.
14187db96d56Sopenharmony_ci
14197db96d56Sopenharmony_ci
14207db96d56Sopenharmony_ci.. data:: hasjabs
14217db96d56Sopenharmony_ci
14227db96d56Sopenharmony_ci   Sequence of bytecodes that have an absolute jump target.
14237db96d56Sopenharmony_ci
14247db96d56Sopenharmony_ci
14257db96d56Sopenharmony_ci.. data:: haslocal
14267db96d56Sopenharmony_ci
14277db96d56Sopenharmony_ci   Sequence of bytecodes that access a local variable.
14287db96d56Sopenharmony_ci
14297db96d56Sopenharmony_ci
14307db96d56Sopenharmony_ci.. data:: hascompare
14317db96d56Sopenharmony_ci
14327db96d56Sopenharmony_ci   Sequence of bytecodes of Boolean operations.
1433