diff options
-rw-r--r-- | Doc/library/dis.rst | 27 | ||||
-rw-r--r-- | Doc/whatsnew/3.12.rst | 9 |
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 ========== |