Add support for async for
. Issue #124
Ignore 'boilerplate' opcodes that set up the async iteration logic internally (https://www.python.org/dev/peps/pep-0492/#asynchronous-iterators-and-async-for) - We don’t need any of this as GET_AITER is enough to tell us that we are in an `async for`.
This commit is contained in:
BIN
tests/compiled/async_for.3.7.pyc
Normal file
BIN
tests/compiled/async_for.3.7.pyc
Normal file
Binary file not shown.
44
tests/input/async_for.py
Normal file
44
tests/input/async_for.py
Normal file
@@ -0,0 +1,44 @@
|
||||
async def a(b, c):
|
||||
async for b in c:
|
||||
pass
|
||||
|
||||
async def a(b, c):
|
||||
async for b in c:
|
||||
continue
|
||||
|
||||
async def a(b, c):
|
||||
async for b in c:
|
||||
break
|
||||
|
||||
async def time_for_some_fun():
|
||||
async for (x, y) in myfunc(c):
|
||||
print(123)
|
||||
if (x == 3):
|
||||
print('something')
|
||||
break
|
||||
|
||||
for i in regular_for:
|
||||
var1 = var2 + var3
|
||||
async for x1 in print:
|
||||
print('test LOAD_GLOBAL')
|
||||
async for x2 in inner:
|
||||
for x3 in regular:
|
||||
async for x4 in inner2:
|
||||
async for x5 in inner3:
|
||||
async for x6 in inner4:
|
||||
print('ridiculous nesting')
|
||||
|
||||
async for (q, w, e, r) in qwer:
|
||||
u = 1 + 2 + 3
|
||||
|
||||
async for x4 in inner2:
|
||||
async for x5 in inner3:
|
||||
pass
|
||||
|
||||
print('outside loop')
|
||||
|
||||
print ('outside function')
|
||||
|
||||
# The following will LOAD_METHOD, not GET_AITER or GET_ANEXT.
|
||||
# test.__anext__(iter)
|
||||
# test.__aiter__(iter)
|
70
tests/tokenized/async_for.txt
Normal file
70
tests/tokenized/async_for.txt
Normal file
@@ -0,0 +1,70 @@
|
||||
async def a ( b , c ) : <EOL>
|
||||
<INDENT>
|
||||
async for b in c : <EOL>
|
||||
<INDENT>
|
||||
pass <EOL>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
async def a ( b , c ) : <EOL>
|
||||
<INDENT>
|
||||
async for b in c : <EOL>
|
||||
<INDENT>
|
||||
continue <EOL>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
async def a ( b , c ) : <EOL>
|
||||
<INDENT>
|
||||
async for b in c : <EOL>
|
||||
<INDENT>
|
||||
break <EOL>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
async def time_for_some_fun ( ) : <EOL>
|
||||
<INDENT>
|
||||
async for x , y in myfunc ( c ) : <EOL>
|
||||
<INDENT>
|
||||
print ( 123 ) <EOL>
|
||||
if x == 3 : <EOL>
|
||||
<INDENT>
|
||||
print ( 'something' ) <EOL>
|
||||
break <EOL>
|
||||
<OUTDENT>
|
||||
for i in regular_for : <EOL>
|
||||
<INDENT>
|
||||
var1 = var2 + var3 <EOL>
|
||||
async for x1 in print : <EOL>
|
||||
<INDENT>
|
||||
print ( 'test LOAD_GLOBAL' ) <EOL>
|
||||
async for x2 in inner : <EOL>
|
||||
<INDENT>
|
||||
for x3 in regular : <EOL>
|
||||
<INDENT>
|
||||
async for x4 in inner2 : <EOL>
|
||||
<INDENT>
|
||||
async for x5 in inner3 : <EOL>
|
||||
<INDENT>
|
||||
async for x6 in inner4 : <EOL>
|
||||
<INDENT>
|
||||
print ( 'ridiculous nesting' ) <EOL>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
async for q , w , e , r in qwer : <EOL>
|
||||
<INDENT>
|
||||
u = 6 <EOL>
|
||||
<OUTDENT>
|
||||
async for x4 in inner2 : <EOL>
|
||||
<INDENT>
|
||||
async for x5 in inner3 : <EOL>
|
||||
<INDENT>
|
||||
pass <EOL>
|
||||
<OUTDENT>
|
||||
<OUTDENT>
|
||||
print ( 'outside loop' ) <EOL>
|
||||
<OUTDENT>
|
||||
print ( 'outside function' ) <EOL>
|
Reference in New Issue
Block a user