]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-26110: Document `CALL_METHOD_KW` (GH-26159)
authorKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Wed, 19 May 2021 18:32:06 +0000 (02:32 +0800)
committerGitHub <noreply@github.com>
Wed, 19 May 2021 18:32:06 +0000 (19:32 +0100)
Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
Doc/library/dis.rst
Doc/whatsnew/3.11.rst

index 193e40014d1ce4e6a422ab3ef8076366f0e663bb..a4746bcabc76bc3f4185f13d6ea2b450ea53bc8a 100644 (file)
@@ -1176,6 +1176,18 @@ All of the following opcodes use their arguments.
    .. versionadded:: 3.7
 
 
+.. opcode:: CALL_METHOD_KW (argc)
+
+   Calls a method in a similar fashion as :opcode:`CALL_METHOD`, but also supports keyword arguments.
+   *argc* is the number of positional and keyword arguments.
+   This opcode is designed to be used with :opcode:`LOAD_METHOD`.  TOS is a
+   tuple of keyword argument names.  Argument values are below that.
+   Below them, the two items described in :opcode:`LOAD_METHOD` are on the
+   stack (either ``self`` and an unbound method object or ``NULL`` and an
+   arbitrary callable).  All of them are popped from the stack and the return value is pushed.
+
+   .. versionadded:: 3.11
+
 .. opcode:: MAKE_FUNCTION (flags)
 
    Pushes a new function object on the stack.  From bottom to top, the consumed
index 503688294072a3b521ac1e188ceaed7c34c5161a..9058b261560873a0383646c8000f5abdd1e44812 100644 (file)
@@ -90,7 +90,7 @@ Improved Modules
 Optimizations
 =============
 
-* Compiler optimizes now simple C-style formatting with literal format
+* Compiler now optimizes simple C-style formatting with literal format
   containing only format codes ``%s``, ``%r`` and ``%a`` and makes it as
   fast as corresponding f-string expression.
   (Contributed by Serhiy Storchaka in :issue:`28307`.)
@@ -99,6 +99,20 @@ Optimizations
   almost eliminated when no exception is raised.
   (Contributed by Mark Shannon in :issue:`40222`.)
 
+* Method calls with keywords are now faster due to bytecode
+  changes which avoid creating bound method instances. Previously, this
+  optimization was applied only to method calls with purely positional
+  arguments.
+  (Contributed by Ken Jin and Mark Shannon in :issue:`26110`, based on ideas
+  implemented in PyPy.)
+
+CPython bytecode changes
+========================
+
+* Added a new :opcode:`CALL_METHOD_KW` opcode.  Calls a method in a similar
+  fashion as :opcode:`CALL_METHOD`, but also supports keyword arguments.  Works
+  in tandem with :opcode:`LOAD_METHOD`.
+
 
 Build Changes
 =============