circuitpython/tests/basics/async_for2.py.exp
Jonathan Hogg 37e1b5c891 py/compile: Don't await __aiter__ special method in async-for.
MicroPython's original implementation of __aiter__ was correct for an
earlier (provisional) version of PEP492 (CPython 3.5), where __aiter__ was
an async-def function.  But that changed in the final version of PEP492 (in
CPython 3.5.2) where the function was changed to a normal one.  See
https://www.python.org/dev/peps/pep-0492/#why-aiter-does-not-return-an-awaitable
See also the note at the end of this subsection in the docs:
https://docs.python.org/3.5/reference/datamodel.html#asynchronous-iterators
And for completeness the BPO: https://bugs.python.org/issue27243

To be consistent with the Python spec as it stands today (and now that
PEP492 is final) this commit changes MicroPython's behaviour to match
CPython:  __aiter__ should return an async-iterable object, but is not
itself awaitable.

The relevant tests are updated to match.

See #6267.
2020-07-25 00:58:18 +10:00

33 lines
371 B
Plaintext

init
aiter
anext
f start: 20
coro yielded: 21
coro yielded: 22
f returned: 23
x 0
anext
f start: 20
coro yielded: 21
coro yielded: 22
f returned: 23
x 1
anext
f start: 20
coro yielded: 21
coro yielded: 22
f returned: 23
x 2
anext
f start: 20
coro yielded: 21
coro yielded: 22
f returned: 23
x 3
anext
f start: 20
coro yielded: 21
coro yielded: 22
f returned: 23
finished