summaryrefslogtreecommitdiffstats
path: root/Doc/c-api/structures.rst
diff options
context:
space:
mode:
authorPetr Viktorin <encukou@gmail.com>2020-05-07 13:39:59 (GMT)
committerGitHub <noreply@github.com>2020-05-07 13:39:59 (GMT)
commite1becf46b4e3ba6d7d32ebf4bbd3e0804766a423 (patch)
treebe3fda5019edbdc78e82ee21985ea963686f3eb8 /Doc/c-api/structures.rst
parent4638c6429575bd6de26b12b2af5df74d6568b553 (diff)
downloadcpython-e1becf46b4e3ba6d7d32ebf4bbd3e0804766a423.zip
cpython-e1becf46b4e3ba6d7d32ebf4bbd3e0804766a423.tar.gz
cpython-e1becf46b4e3ba6d7d32ebf4bbd3e0804766a423.tar.bz2
bpo-38787: C API for module state access from extension methods (PEP 573) (GH-19936)
Module C state is now accessible from C-defined heap type methods (PEP 573). Patch by Marcel Plch and Petr Viktorin. Co-authored-by: Marcel Plch <mplch@redhat.com> Co-authored-by: Victor Stinner <vstinner@python.org>
Diffstat (limited to 'Doc/c-api/structures.rst')
-rw-r--r--Doc/c-api/structures.rst50
1 files changed, 47 insertions, 3 deletions
diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst
index fc3467b..72c9445 100644
--- a/Doc/c-api/structures.rst
+++ b/Doc/c-api/structures.rst
@@ -147,23 +147,56 @@ Implementing functions and methods
value of the function as exposed in Python. The function must return a new
reference.
+ The function signature is::
+
+ PyObject *PyCFunction(PyObject *self,
+ PyObject *const *args);
.. c:type:: PyCFunctionWithKeywords
Type of the functions used to implement Python callables in C
with signature :const:`METH_VARARGS | METH_KEYWORDS`.
+ The function signature is::
+
+ PyObject *PyCFunctionWithKeywords(PyObject *self,
+ PyObject *const *args,
+ PyObject *kwargs);
.. c:type:: _PyCFunctionFast
Type of the functions used to implement Python callables in C
with signature :const:`METH_FASTCALL`.
+ The function signature is::
+ PyObject *_PyCFunctionFast(PyObject *self,
+ PyObject *const *args,
+ Py_ssize_t nargs);
.. c:type:: _PyCFunctionFastWithKeywords
Type of the functions used to implement Python callables in C
with signature :const:`METH_FASTCALL | METH_KEYWORDS`.
+ The function signature is::
+
+ PyObject *_PyCFunctionFastWithKeywords(PyObject *self,
+ PyObject *const *args,
+ Py_ssize_t nargs,
+ PyObject *kwnames);
+
+.. c:type:: PyCMethod
+
+ Type of the functions used to implement Python callables in C
+ with signature :const:`METH_METHOD | METH_FASTCALL | METH_KEYWORDS`.
+ The function signature is::
+
+ PyObject *PyCMethod(PyObject *self,
+ PyTypeObject *defining_class,
+ PyObject *const *args,
+ Py_ssize_t nargs,
+ PyObject *kwnames)
+
+ .. versionadded:: 3.9
.. c:type:: PyMethodDef
@@ -197,9 +230,7 @@ The :attr:`ml_flags` field is a bitfield which can include the following flags.
The individual flags indicate either a calling convention or a binding
convention.
-There are four basic calling conventions for positional arguments
-and two of them can be combined with :const:`METH_KEYWORDS` to support
-also keyword arguments. So there are a total of 6 calling conventions:
+There are these calling conventions:
.. data:: METH_VARARGS
@@ -250,6 +281,19 @@ also keyword arguments. So there are a total of 6 calling conventions:
.. versionadded:: 3.7
+.. data:: METH_METHOD | METH_FASTCALL | METH_KEYWORDS
+
+ Extension of :const:`METH_FASTCALL | METH_KEYWORDS` supporting the *defining
+ class*, that is, the class that contains the method in question.
+ The defining class might be a superclass of ``Py_TYPE(self)``.
+
+ The method needs to be of type :c:type:`PyCMethod`, the same as for
+ ``METH_FASTCALL | METH_KEYWORDS`` with ``defining_class`` argument added after
+ ``self``.
+
+ .. versionadded:: 3.9
+
+
.. data:: METH_NOARGS
Methods without parameters don't need to check whether arguments are given if