Skip to content

Commit

Permalink
GH-93429: Document LOAD_METHOD removal (GH-93803)
Browse files Browse the repository at this point in the history
  • Loading branch information
Fidget-Spinner committed Jun 14, 2022
1 parent a338e10 commit 38a7f78
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 13 deletions.
27 changes: 14 additions & 13 deletions Doc/library/dis.rst
Expand Up @@ -887,7 +887,20 @@ iterations of the loop.

.. opcode:: LOAD_ATTR (namei)

Replaces TOS with ``getattr(TOS, co_names[namei])``.
If the low bit of ``namei`` is not set, this replaces TOS with
``getattr(TOS, co_names[namei>>1])``.

If the low bit of ``namei`` is set, this will attempt to load a method named
``co_names[namei>>1]`` from the TOS object. TOS is popped.
This bytecode distinguishes two cases: if TOS has a method with the correct
name, the bytecode pushes the unbound method and TOS. TOS will be used as
the first argument (``self``) by :opcode:`CALL` when calling the
unbound method. Otherwise, ``NULL`` and the object return by the attribute
lookup are pushed.

.. versionchanged:: 3.11
If the low bit of ``namei`` is set, then a ``NULL`` or ``self`` is
pushed to the stack before the attribute or unbound method respectively.


.. opcode:: COMPARE_OP (opname)
Expand Down Expand Up @@ -1189,18 +1202,6 @@ iterations of the loop.
.. versionadded:: 3.6


.. opcode:: LOAD_METHOD (namei)

Loads a method named ``co_names[namei]`` from the TOS object. TOS is popped.
This bytecode distinguishes two cases: if TOS has a method with the correct
name, the bytecode pushes the unbound method and TOS. TOS will be used as
the first argument (``self``) by :opcode:`CALL` when calling the
unbound method. Otherwise, ``NULL`` and the object return by the attribute
lookup are pushed.

.. versionadded:: 3.7


.. opcode:: PUSH_NULL

Pushes a ``NULL`` to the stack.
Expand Down
9 changes: 9 additions & 0 deletions Doc/whatsnew/3.12.rst
Expand Up @@ -106,6 +106,15 @@ Optimizations
(Contributed by Inada Naoki in :gh:`92536`.)


CPython bytecode changes
========================

* Removed the :opcode:`LOAD_METHOD` instruction. It has been merged into
:opcode:`LOAD_ATTR`. :opcode:`LOAD_ATTR` will now behave like the old
:opcode:`LOAD_METHOD` instruction if the low bit of its oparg is set.
(Contributed by Ken Jin in :gh:`93429`.)


Deprecated
==========

Expand Down

0 comments on commit 38a7f78

Please sign in to comment.