summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Shawcroft <scott@adafruit.com>2020-07-29 10:54:37 -0700
committerGitHub <noreply@github.com>2020-07-29 10:54:37 -0700
commit61d1148bb36a022d089af6a4bfb05b96e819d3db (patch)
treee5ebe1eb1e8b089a5a5850c2f6f44c5b2c9be50c
parent5e86262694d0332f3cb2c9ae67fbf4c70a99ff12 (diff)
parent901f3dce6e5e7c1501550ca0b7f3283848194a2e (diff)
Merge pull request #3222 from WarriorOfWire/pick_micropython
py/compile: Don't await __aiter__ special method in async-for.
-rw-r--r--py/compile.c3
-rw-r--r--tests/basics/async_for.py2
-rw-r--r--tests/basics/async_for2.py5
-rw-r--r--tests/basics/async_for2.py.exp4
4 files changed, 5 insertions, 9 deletions
diff --git a/py/compile.c b/py/compile.c
index fade4c01a..653aae004 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -1741,7 +1741,8 @@ STATIC void compile_async_for_stmt(compiler_t *comp, mp_parse_node_struct_t *pns
uint try_finally_label = comp_next_label(comp);
compile_node(comp, pns->nodes[1]); // iterator
- compile_await_object_method(comp, MP_QSTR___aiter__);
+ EMIT_ARG(load_method, MP_QSTR___aiter__, false);
+ EMIT_ARG(call_method, 0, 0, 0);
compile_store_id(comp, context);
START_BREAK_CONTINUE_BLOCK
diff --git a/tests/basics/async_for.py b/tests/basics/async_for.py
index 6b4e136d5..5fd054082 100644
--- a/tests/basics/async_for.py
+++ b/tests/basics/async_for.py
@@ -6,7 +6,7 @@ class AsyncIteratorWrapper:
print('init')
self._it = iter(obj)
- async def __aiter__(self):
+ def __aiter__(self):
print('aiter')
return self
diff --git a/tests/basics/async_for2.py b/tests/basics/async_for2.py
index 025ff9c4d..add74dd38 100644
--- a/tests/basics/async_for2.py
+++ b/tests/basics/async_for2.py
@@ -1,4 +1,4 @@
-# test waiting within "async for" aiter/anext functions
+# test waiting within "async for" __anext__ function
import sys
if sys.implementation.name in ('micropython', 'circuitpython'):
@@ -21,9 +21,8 @@ class ARange:
self.cur = 0
self.high = high
- async def __aiter__(self):
+ def __aiter__(self):
print('aiter')
- print('f returned:', await f(10))
return self
async def __anext__(self):
diff --git a/tests/basics/async_for2.py.exp b/tests/basics/async_for2.py.exp
index 886232f7b..52bbe90c8 100644
--- a/tests/basics/async_for2.py.exp
+++ b/tests/basics/async_for2.py.exp
@@ -1,9 +1,5 @@
init
aiter
-f start: 10
-coro yielded: 11
-coro yielded: 12
-f returned: 13
anext
f start: 20
coro yielded: 21