summaryrefslogtreecommitdiffstats
path: root/Doc/howto
diff options
context:
space:
mode:
authorErlend E. Aasland <erlend.aasland@protonmail.com>2023-05-05 11:32:00 (GMT)
committerGitHub <noreply@github.com>2023-05-05 11:32:00 (GMT)
commit721a78395d07c68351625aedb827a47dd4f48525 (patch)
treee5591ed98ed1651feac40112f78ebfd018ac8d38 /Doc/howto
parent2318bedb3645d2dfb56944553f01d6c434904c4b (diff)
downloadcpython-721a78395d07c68351625aedb827a47dd4f48525.zip
cpython-721a78395d07c68351625aedb827a47dd4f48525.tar.gz
cpython-721a78395d07c68351625aedb827a47dd4f48525.tar.bz2
gh-64658: Expand Argument Clinic return converter docs (#104175)
Diffstat (limited to 'Doc/howto')
-rw-r--r--Doc/howto/clinic.rst41
1 files changed, 28 insertions, 13 deletions
diff --git a/Doc/howto/clinic.rst b/Doc/howto/clinic.rst
index 8a10fe3..6ebc2d9 100644
--- a/Doc/howto/clinic.rst
+++ b/Doc/howto/clinic.rst
@@ -1033,19 +1033,36 @@ you're not permitted to use:
Using a return converter
------------------------
-By default the impl function Argument Clinic generates for you returns ``PyObject *``.
-But your C function often computes some C type, then converts it into the ``PyObject *``
+By default, the impl function Argument Clinic generates for you returns
+:c:type:`PyObject * <PyObject>`.
+But your C function often computes some C type,
+then converts it into the :c:type:`!PyObject *`
at the last moment. Argument Clinic handles converting your inputs from Python types
into native C types—why not have it convert your return value from a native C type
into a Python type too?
That's what a "return converter" does. It changes your impl function to return
some C type, then adds code to the generated (non-impl) function to handle converting
-that value into the appropriate ``PyObject *``.
+that value into the appropriate :c:type:`!PyObject *`.
The syntax for return converters is similar to that of parameter converters.
You specify the return converter like it was a return annotation on the
-function itself. Return converters behave much the same as parameter converters;
+function itself, using ``->`` notation.
+
+For example:
+
+.. code-block:: c
+
+ /*[clinic input]
+ add -> int
+
+ a: int
+ b: int
+ /
+
+ [clinic start generated code]*/
+
+Return converters behave much the same as parameter converters;
they take arguments, the arguments are all keyword-only, and if you're not changing
any of the default arguments you can omit the parentheses.
@@ -1066,19 +1083,17 @@ Currently Argument Clinic supports only a few return converters:
.. code-block:: none
bool
+ double
+ float
int
- unsigned int
long
- unsigned int
- size_t
Py_ssize_t
- float
- double
- DecodeFSDefault
+ size_t
+ unsigned int
+ unsigned long
-None of these take parameters. For the first three, return -1 to indicate
-error. For ``DecodeFSDefault``, the return type is ``const char *``; return a ``NULL``
-pointer to indicate an error.
+None of these take parameters.
+For all of these, return ``-1`` to indicate error.
To see all the return converters Argument Clinic supports, along with
their parameters (if any),