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