bpo-36974: document PEP 590 (GH-13450) · python/cpython@9e3e06e

@@ -335,6 +335,83 @@ Object Protocol

335335

*NULL* on failure.

336336337337338+

.. c:function:: PyObject* _PyObject_Vectorcall(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)

339+340+

Call a callable Python object *callable*, using

341+

:c:data:`vectorcall <PyTypeObject.tp_vectorcall_offset>` if possible.

342+343+

*args* is a C array with the positional arguments.

344+345+

*nargsf* is the number of positional arguments plus optionally the flag

346+

:const:`PY_VECTORCALL_ARGUMENTS_OFFSET` (see below).

347+

To get actual number of arguments, use

348+

:c:func:`PyVectorcall_NARGS(nargsf) <PyVectorcall_NARGS>`.

349+350+

*kwnames* can be either NULL (no keyword arguments) or a tuple of keyword

351+

names. In the latter case, the values of the keyword arguments are stored

352+

in *args* after the positional arguments.

353+

The number of keyword arguments does not influence *nargsf*.

354+355+

*kwnames* must contain only objects of type ``str`` (not a subclass),

356+

and all keys must be unique.

357+358+

Return the result of the call on success, or *NULL* on failure.

359+360+

This uses the vectorcall protocol if the callable supports it;

361+

otherwise, the arguments are converted to use

362+

:c:member:`~PyTypeObject.tp_call`.

363+364+

.. note::

365+366+

This function is provisional and expected to become public in Python 3.9,

367+

with a different name and, possibly, changed semantics.

368+

If you use the function, plan for updating your code for Python 3.9.

369+370+

.. versionadded:: 3.8

371+372+

.. c:var:: PY_VECTORCALL_ARGUMENTS_OFFSET

373+374+

If set in a vectorcall *nargsf* argument, the callee is allowed to

375+

temporarily change ``args[-1]``. In other words, *args* points to

376+

argument 1 (not 0) in the allocated vector.

377+

The callee must restore the value of ``args[-1]`` before returning.

378+379+

Whenever they can do so cheaply (without additional allocation), callers

380+

are encouraged to use :const:`PY_VECTORCALL_ARGUMENTS_OFFSET`.

381+

Doing so will allow callables such as bound methods to make their onward

382+

calls (which include a prepended *self* argument) cheaply.

383+384+

.. versionadded:: 3.8

385+386+

.. c:function:: Py_ssize_t PyVectorcall_NARGS(size_t nargsf)

387+388+

Given a vectorcall *nargsf* argument, return the actual number of

389+

arguments.

390+

Currently equivalent to ``nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET``.

391+392+

.. versionadded:: 3.8

393+394+

.. c:function:: PyObject* _PyObject_FastCallDict(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwdict)

395+396+

Same as :c:func:`_PyObject_Vectorcall` except that the keyword arguments

397+

are passed as a dictionary in *kwdict*. This may be *NULL* if there

398+

are no keyword arguments.

399+400+

For callables supporting :c:data:`vectorcall <PyTypeObject.tp_vectorcall_offset>`,

401+

the arguments are internally converted to the vectorcall convention.

402+

Therefore, this function adds some overhead compared to

403+

:c:func:`_PyObject_Vectorcall`.

404+

It should only be used if the caller already has a dictionary ready to use.

405+406+

.. note::

407+408+

This function is provisional and expected to become public in Python 3.9,

409+

with a different name and, possibly, changed semantics.

410+

If you use the function, plan for updating your code for Python 3.9.

411+412+

.. versionadded:: 3.8

413+414+338415

.. c:function:: Py_hash_t PyObject_Hash(PyObject *o)

339416340417

.. index:: builtin: hash