mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
bpo-45123: PyAiter_Check and PyObject_GetAiter fix & rename. (GH-28194)
Fix PyAiter_Check to only check for the `__anext__` presense (not for `__aiter__`). Rename `PyAiter_Check()` to `PyAIter_Check()`, `PyObject_GetAiter()` -> `PyObject_GetAIter()`. Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
This commit is contained in:
parent
eb254b43d2
commit
2c3474a637
10 changed files with 23 additions and 22 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue