bpo-45123: PyAiter_Check and PyObject_GetAiter fix & rename. (GH-28194) (GH-28199)
Fix PyAiter_Check to only check for the `__anext__` presense (not for
`__aiter__`). Rename `PyAiter_Check()` to `PyAIter_Check()`,
`PyObject_GetAiter()` -> `PyObject_GetAIter()`.
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 8ad1910..33eb857 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -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;
@@ -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);
}