Commit afa591d7 authored by Serhiy Storchaka's avatar Serhiy Storchaka Committed by GitHub

[2.7] bpo-33216: Clarify the documentation for CALL_FUNCTION_* (GH-8338) (GH-8783)

(cherry picked from commit 76aa2c0a9a8dd3ac90b91e7342c8ce8125bf21f9)
Co-authored-by: default avatarlarryhastings <larry@hastings.org>
parent 57e70d38
...@@ -107,7 +107,7 @@ The :mod:`dis` module defines the following functions and constants: ...@@ -107,7 +107,7 @@ The :mod:`dis` module defines the following functions and constants:
.. data:: hasconst .. data:: hasconst
Sequence of bytecodes that have a constant parameter. Sequence of bytecodes that access a constant.
.. data:: hasfree .. data:: hasfree
...@@ -796,21 +796,25 @@ the more significant byte last. ...@@ -796,21 +796,25 @@ the more significant byte last.
.. opcode:: RAISE_VARARGS (argc) .. opcode:: RAISE_VARARGS (argc)
Raises an exception. *argc* indicates the number of parameters to the raise Raises an exception. *argc* indicates the number of arguments to the raise
statement, ranging from 0 to 3. The handler will find the traceback as TOS2, statement, ranging from 0 to 3. The handler will find the traceback as TOS2,
the parameter as TOS1, and the exception as TOS. the parameter as TOS1, and the exception as TOS.
.. opcode:: CALL_FUNCTION (argc) .. opcode:: CALL_FUNCTION (argc)
Calls a function. The low byte of *argc* indicates the number of positional Calls a callable object. The low byte of *argc* indicates the number of
parameters, the high byte the number of keyword parameters. On the stack, the positional arguments, the high byte the number of keyword arguments.
opcode finds the keyword parameters first. For each keyword argument, the The stack contains keyword arguments on top (if any), then the positional
value is on top of the key. Below the keyword parameters, the positional arguments below that (if any), then the callable object to call below that.
parameters are on the stack, with the right-most parameter on top. Below the Each keyword argument is represented with two values on the stack:
parameters, the function object to call is on the stack. Pops all function the argument's name, and its value, with the argument's value above the
arguments, and the function itself off the stack, and pushes the return name on the stack.
value. The positional arguments are pushed in the order that they are passed in
to the callable object, with the right-most positional argument on top.
``CALL_FUNCTION`` pops all arguments and the callable object off the stack,
calls the callable object with those arguments, and pushes the return value
returned by the callable object.
.. opcode:: MAKE_FUNCTION (argc) .. opcode:: MAKE_FUNCTION (argc)
...@@ -847,24 +851,53 @@ the more significant byte last. ...@@ -847,24 +851,53 @@ the more significant byte last.
.. opcode:: CALL_FUNCTION_VAR (argc) .. opcode:: CALL_FUNCTION_VAR (argc)
Calls a function. *argc* is interpreted as in :opcode:`CALL_FUNCTION`. The Calls a callable object, similarly to :opcode:`CALL_FUNCTION`.
top element on the stack contains the variable argument list, followed by *argc* represents the number of keyword and positional
keyword and positional arguments. arguments, identically to :opcode:`CALL_FUNCTION`.
The top of the stack contains an iterable object containing
additional positional arguments.
Below that are keyword arguments (if any), positional arguments (if any)
and a callable object, identically to :opcode:`CALL_FUNCTION`.
Before the callable object is called, the iterable object
is "unpacked" and its contents are appended to the positional
arguments passed in.
The iterable object is ignored when computing
the value of ``argc``.
.. opcode:: CALL_FUNCTION_KW (argc) .. opcode:: CALL_FUNCTION_KW (argc)
Calls a function. *argc* is interpreted as in :opcode:`CALL_FUNCTION`. The Calls a callable object, similarly to :opcode:`CALL_FUNCTION`.
top element on the stack contains the keyword arguments dictionary, followed *argc* represents the number of keyword and positional
by explicit keyword and positional arguments. arguments, identically to :opcode:`CALL_FUNCTION`.
The top of the stack contains a mapping object containing additional keyword
arguments.
Below that are keyword arguments (if any), positional arguments (if any)
and a callable object, identically to :opcode:`CALL_FUNCTION`.
Before the callable is called, the mapping object at the top of the stack is
"unpacked" and its contents are appended to the keyword arguments passed in.
The mapping object at the top of the stack is ignored when computing
the value of ``argc``.
.. opcode:: CALL_FUNCTION_VAR_KW (argc) .. opcode:: CALL_FUNCTION_VAR_KW (argc)
Calls a function. *argc* is interpreted as in :opcode:`CALL_FUNCTION`. The Calls a callable object, similarly to :opcode:`CALL_FUNCTION_VAR` and
top element on the stack contains the keyword arguments dictionary, followed :opcode:`CALL_FUNCTION_KW`.
by the variable-arguments tuple, followed by explicit keyword and positional *argc* represents the number of keyword and positional
arguments. arguments, identically to :opcode:`CALL_FUNCTION`.
The top of the stack contains a mapping object, as per
:opcode:`CALL_FUNCTION_KW`.
Below that is an iterable object, as per
:opcode:`CALL_FUNCTION_VAR`.
Below that are keyword arguments (if any), positional arguments (if any)
and a callable object, identically to :opcode:`CALL_FUNCTION`.
Before the callable is called, the mapping object and iterable object
are each "unpacked" and their contents passed in as keyword and
positional arguments respectively,
identically to :opcode:`CALL_FUNCTION_VAR` and :opcode:`CALL_FUNCTION_KW`.
The mapping object and iterable object are both ignored when computing
the value of ``argc``.
.. opcode:: HAVE_ARGUMENT () .. opcode:: HAVE_ARGUMENT ()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment