summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/dis.rst27
-rw-r--r--Doc/whatsnew/3.12.rst9
2 files changed, 23 insertions, 13 deletions
diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst
index 9163d1a..a6574c4 100644
--- a/Doc/library/dis.rst
+++ b/Doc/library/dis.rst
@@ -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)
@@ -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.
diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst
index 5e295f0..59eb434 100644
--- a/Doc/whatsnew/3.12.rst
+++ b/Doc/whatsnew/3.12.rst
@@ -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
==========