mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-107457: update dis documentation with changes in 3.12 (#108900)
This commit is contained in:
parent
24e4ec7766
commit
198aa67d4c
1 changed files with 43 additions and 16 deletions
|
@ -42,6 +42,14 @@ interpreter.
|
|||
bytecode to specialize it for different runtime conditions. The
|
||||
adaptive bytecode can be shown by passing ``adaptive=True``.
|
||||
|
||||
.. versionchanged:: 3.12
|
||||
The argument of a jump is the offset of the target instruction relative
|
||||
to the instruction that appears immediately after the jump instruction's
|
||||
:opcode:`CACHE` entries.
|
||||
|
||||
As a consequence, the presence of the :opcode:`CACHE` instructions is
|
||||
transparent for forward jumps but needs to be taken into account when
|
||||
reasoning about backward jumps.
|
||||
|
||||
Example: Given the function :func:`!myfunc`::
|
||||
|
||||
|
@ -513,6 +521,14 @@ operations on it as if it was a Python list. The top of the stack corresponds to
|
|||
.. versionadded:: 3.12
|
||||
|
||||
|
||||
.. opcode:: END_SEND
|
||||
|
||||
Implements ``del STACK[-2]``.
|
||||
Used to clean up when a generator exits.
|
||||
|
||||
.. versionadded:: 3.12
|
||||
|
||||
|
||||
.. opcode:: COPY (i)
|
||||
|
||||
Push the i-th item to the top of the stack without removing it from its original
|
||||
|
@ -1159,15 +1175,21 @@ iterations of the loop.
|
|||
|
||||
.. opcode:: LOAD_SUPER_ATTR (namei)
|
||||
|
||||
This opcode implements :func:`super` (e.g. ``super().method()`` and
|
||||
``super().attr``). It works the same as :opcode:`LOAD_ATTR`, except that
|
||||
``namei`` is shifted left by 2 bits instead of 1, and instead of expecting a
|
||||
single receiver on the stack, it expects three objects (from top of stack
|
||||
down): ``self`` (the first argument to the current method), ``cls`` (the
|
||||
class within which the current method was defined), and the global ``super``.
|
||||
This opcode implements :func:`super`, both in its zero-argument and
|
||||
two-argument forms (e.g. ``super().method()``, ``super().attr`` and
|
||||
``super(cls, self).method()``, ``super(cls, self).attr``).
|
||||
|
||||
It pops three values from the stack (from top of stack down):
|
||||
- ``self``: the first argument to the current method
|
||||
- ``cls``: the class within which the current method was defined
|
||||
- the global ``super``
|
||||
|
||||
With respect to its argument, it works similarly to :opcode:`LOAD_ATTR`,
|
||||
except that ``namei`` is shifted left by 2 bits instead of 1.
|
||||
|
||||
The low bit of ``namei`` signals to attempt a method load, as with
|
||||
:opcode:`LOAD_ATTR`.
|
||||
:opcode:`LOAD_ATTR`, which results in pushing ``None`` and the loaded method.
|
||||
When it is unset a single value is pushed to the stack.
|
||||
|
||||
The second-low bit of ``namei``, if set, means that this was a two-argument
|
||||
call to :func:`super` (unset means zero-argument).
|
||||
|
@ -1632,9 +1654,9 @@ iterations of the loop.
|
|||
Equivalent to ``STACK[-1] = STACK[-2].send(STACK[-1])``. Used in ``yield from``
|
||||
and ``await`` statements.
|
||||
|
||||
If the call raises :exc:`StopIteration`, pop both items, push the
|
||||
exception's ``value`` attribute, and increment the bytecode counter by
|
||||
*delta*.
|
||||
If the call raises :exc:`StopIteration`, pop the top value from the stack,
|
||||
push the exception's ``value`` attribute, and increment the bytecode counter
|
||||
by *delta*.
|
||||
|
||||
.. versionadded:: 3.11
|
||||
|
||||
|
@ -1664,7 +1686,7 @@ iterations of the loop.
|
|||
|
||||
Calls an intrinsic function with one argument. Passes ``STACK[-1]`` as the
|
||||
argument and sets ``STACK[-1]`` to the result. Used to implement
|
||||
functionality that is necessary but not performance critical.
|
||||
functionality that is not performance critical.
|
||||
|
||||
The operand determines which intrinsic function is called:
|
||||
|
||||
|
@ -1712,9 +1734,13 @@ iterations of the loop.
|
|||
|
||||
.. opcode:: CALL_INTRINSIC_2
|
||||
|
||||
Calls an intrinsic function with two arguments. Passes ``STACK[-2]``, ``STACK[-1]`` as the
|
||||
arguments and sets ``STACK[-1]`` to the result. Used to implement functionality that is
|
||||
necessary but not performance critical.
|
||||
Calls an intrinsic function with two arguments. Used to implement functionality
|
||||
that is not performance critical::
|
||||
|
||||
arg2 = STACK.pop()
|
||||
arg1 = STACK.pop()
|
||||
result = intrinsic2(arg1, arg2)
|
||||
STACK.push(result)
|
||||
|
||||
The operand determines which intrinsic function is called:
|
||||
|
||||
|
@ -1810,8 +1836,9 @@ These collections are provided for automatic introspection of bytecode
|
|||
instructions:
|
||||
|
||||
.. versionchanged:: 3.12
|
||||
The collections now contain pseudo instructions as well. These are
|
||||
opcodes with values ``>= MIN_PSEUDO_OPCODE``.
|
||||
The collections now contain pseudo instructions and instrumented
|
||||
instructions as well. These are opcodes with values ``>= MIN_PSEUDO_OPCODE``
|
||||
and ``>= MIN_INSTRUMENTED_OPCODE``.
|
||||
|
||||
.. data:: opname
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue