Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Doc/c-api/iter.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ There are two functions specifically for working with iterators.
Return non-zero if the object *o* supports the iterator protocol, and ``0``
otherwise. This function always succeeds.

.. c:function:: int PyAiter_Check(PyObject *o)
.. c:function:: int PyAIter_Check(PyObject *o)

Returns non-zero if the object 'obj' provides :class:`AsyncIterator`
protocols, and ``0`` otherwise. This function always succeeds.
Expand Down
2 changes: 1 addition & 1 deletion Doc/c-api/object.rst
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ Object Protocol
iterated.


.. c:function:: PyObject* PyObject_GetAiter(PyObject *o)
.. c:function:: PyObject* PyObject_GetAIter(PyObject *o)

This is the equivalent to the Python expression ``aiter(o)``. Takes an
:class:`AsyncIterable` object and returns an :class:`AsyncIterator` for it.
Expand Down
16,700 changes: 5,888 additions & 10,812 deletions Doc/data/python3.10.abi

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions Doc/data/refcounts.dat
Original file line number Diff line number Diff line change
Expand Up @@ -1073,8 +1073,8 @@ PyInterpreterState_New:PyInterpreterState*:::
PyIter_Check:int:::
PyIter_Check:PyObject*:o:0:

PyAiter_Check:int:::
PyAiter_Check:PyObject*:o:0:
PyAIter_Check:int:::
PyAIter_Check:PyObject*:o:0:

PyIter_Next:PyObject*::+1:
PyIter_Next:PyObject*:o:0:
Expand Down Expand Up @@ -1700,8 +1700,8 @@ PyObject_GetItem:PyObject*:key:0:
PyObject_GetIter:PyObject*::+1:
PyObject_GetIter:PyObject*:o:0:

PyObject_GetAiter:PyObject*::+1:
PyObject_GetAiter:PyObject*:o:0:
PyObject_GetAIter:PyObject*::+1:
PyObject_GetAIter:PyObject*:o:0:

PyObject_HasAttr:int:::
PyObject_HasAttr:PyObject*:o:0:
Expand Down
4 changes: 2 additions & 2 deletions Doc/data/stable_abi.dat
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
role,name,added,ifdef_note
function,PyAiter_Check,3.10,
function,PyAIter_Check,3.10,
function,PyArg_Parse,3.2,
function,PyArg_ParseTuple,3.2,
function,PyArg_ParseTupleAndKeywords,3.2,
Expand Down Expand Up @@ -491,7 +491,7 @@ function,PyObject_GenericGetAttr,3.2,
function,PyObject_GenericGetDict,3.10,
function,PyObject_GenericSetAttr,3.2,
function,PyObject_GenericSetDict,3.7,
function,PyObject_GetAiter,3.10,
function,PyObject_GetAIter,3.10,
function,PyObject_GetAttr,3.2,
function,PyObject_GetAttrString,3.2,
function,PyObject_GetItem,3.2,
Expand Down
4 changes: 2 additions & 2 deletions Include/abstract.h
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
/* Takes an AsyncIterable object and returns an AsyncIterator for it.
This is typically a new iterator but if the argument is an AsyncIterator,
this returns itself. */
PyAPI_FUNC(PyObject *) PyObject_GetAiter(PyObject *);
PyAPI_FUNC(PyObject *) PyObject_GetAIter(PyObject *);

/* Returns non-zero if the object 'obj' provides iterator protocols, and 0 otherwise.

Expand All @@ -384,7 +384,7 @@ PyAPI_FUNC(int) PyIter_Check(PyObject *);
/* Returns non-zero if the object 'obj' provides AsyncIterator protocols, and 0 otherwise.

This function always succeeds. */
PyAPI_FUNC(int) PyAiter_Check(PyObject *);
PyAPI_FUNC(int) PyAIter_Check(PyObject *);

/* Takes an iterator object and calls its tp_iternext slot,
returning the next value.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix PyAiter_Check to only check for the __anext__ presence (not for
__aiter__). Rename PyAiter_Check to PyAIter_Check, PyObject_GetAiter ->
PyObject_GetAIter.
4 changes: 2 additions & 2 deletions Misc/stable_abi.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2122,9 +2122,9 @@ function _Py_IncRef
function _Py_DecRef
added 3.10
abi_only
function PyAiter_Check
function PyAIter_Check
added 3.10
function PyObject_GetAiter
function PyObject_GetAIter
added 3.10
data PyExc_EncodingWarning
added 3.10
Expand Down
12 changes: 5 additions & 7 deletions Objects/abstract.c
Original file line number Diff line number Diff line change
Expand Up @@ -2816,18 +2816,18 @@ PyObject_GetIter(PyObject *o)
}

PyObject *
PyObject_GetAiter(PyObject *o) {
PyObject_GetAIter(PyObject *o) {
PyTypeObject *t = Py_TYPE(o);
unaryfunc f;

if (t->tp_as_async == NULL || t->tp_as_async->am_aiter == NULL) {
return type_error("'%.200s' object is not an AsyncIterable", o);
return type_error("'%.200s' object is not an async iterable", o);
}
f = t->tp_as_async->am_aiter;
PyObject *it = (*f)(o);
if (it != NULL && !PyAiter_Check(it)) {
if (it != NULL && !PyAIter_Check(it)) {
PyErr_Format(PyExc_TypeError,
"aiter() returned non-AsyncIterator of type '%.100s'",
"aiter() returned not an async iterator of type '%.100s'",
Py_TYPE(it)->tp_name);
Py_DECREF(it);
it = NULL;
Expand All @@ -2844,12 +2844,10 @@ PyIter_Check(PyObject *obj)
}

int
PyAiter_Check(PyObject *obj)
PyAIter_Check(PyObject *obj)
{
PyTypeObject *tp = Py_TYPE(obj);
return (tp->tp_as_async != NULL &&
tp->tp_as_async->am_aiter != NULL &&
tp->tp_as_async->am_aiter != &_PyObject_NextNotImplemented &&
tp->tp_as_async->am_anext != NULL &&
tp->tp_as_async->am_anext != &_PyObject_NextNotImplemented);
}
Expand Down
4 changes: 2 additions & 2 deletions PC/python3dll.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ EXPORT_FUNC(Py_SetPythonHome)
EXPORT_FUNC(Py_SetRecursionLimit)
EXPORT_FUNC(Py_VaBuildValue)
EXPORT_FUNC(Py_XNewRef)
EXPORT_FUNC(PyAiter_Check)
EXPORT_FUNC(PyAIter_Check)
EXPORT_FUNC(PyArg_Parse)
EXPORT_FUNC(PyArg_ParseTuple)
EXPORT_FUNC(PyArg_ParseTupleAndKeywords)
Expand Down Expand Up @@ -447,7 +447,7 @@ EXPORT_FUNC(PyObject_GenericGetAttr)
EXPORT_FUNC(PyObject_GenericGetDict)
EXPORT_FUNC(PyObject_GenericSetAttr)
EXPORT_FUNC(PyObject_GenericSetDict)
EXPORT_FUNC(PyObject_GetAiter)
EXPORT_FUNC(PyObject_GetAIter)
EXPORT_FUNC(PyObject_GetAttr)
EXPORT_FUNC(PyObject_GetAttrString)
EXPORT_FUNC(PyObject_GetItem)
Expand Down
2 changes: 1 addition & 1 deletion Python/bltinmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -1610,7 +1610,7 @@ static PyObject *
builtin_aiter(PyObject *module, PyObject *async_iterable)
/*[clinic end generated code: output=1bae108d86f7960e input=473993d0cacc7d23]*/
{
return PyObject_GetAiter(async_iterable);
return PyObject_GetAIter(async_iterable);
}

PyObject *PyAnextAwaitable_New(PyObject *, PyObject *);
Expand Down