diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-08-10 09:56:50 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-10 09:56:50 (GMT) |
commit | 0e63776c4f3d0b972344368f62b91eb96be69fe3 (patch) | |
tree | fb4ffcaf9cb4fb0f564283b72fe4dbe12dd954d4 | |
parent | ede1dc416de5eece02170e03387dc8496c2d00ae (diff) | |
download | cpython-0e63776c4f3d0b972344368f62b91eb96be69fe3.zip cpython-0e63776c4f3d0b972344368f62b91eb96be69fe3.tar.gz cpython-0e63776c4f3d0b972344368f62b91eb96be69fe3.tar.bz2 |
make lib2to3 parse async generators everywhere (GH-6588) (GH-27703)
(cherry picked from commit 149addd4960d634ce672ab5fc17e0e785a0cdcd0)
Co-authored-by: Zsolt Dollenstein <zsol.zsol@gmail.com>
-rw-r--r-- | Lib/lib2to3/pgen2/tokenize.py | 7 | ||||
-rw-r--r-- | Lib/lib2to3/tests/test_parser.py | 17 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-04-24-14-25-07.bpo-33349.Y_0LIr.rst | 1 |
3 files changed, 17 insertions, 8 deletions
diff --git a/Lib/lib2to3/pgen2/tokenize.py b/Lib/lib2to3/pgen2/tokenize.py index 0e2685d..099dfa7 100644 --- a/Lib/lib2to3/pgen2/tokenize.py +++ b/Lib/lib2to3/pgen2/tokenize.py @@ -512,13 +512,14 @@ def generate_tokens(readline): stashed = tok continue - if token == 'def': + if token in ('def', 'for'): if (stashed and stashed[0] == NAME and stashed[1] == 'async'): - async_def = True - async_def_indent = indents[-1] + if token == 'def': + async_def = True + async_def_indent = indents[-1] yield (ASYNC, stashed[1], stashed[2], stashed[3], diff --git a/Lib/lib2to3/tests/test_parser.py b/Lib/lib2to3/tests/test_parser.py index d5db66b..034b503 100644 --- a/Lib/lib2to3/tests/test_parser.py +++ b/Lib/lib2to3/tests/test_parser.py @@ -196,20 +196,27 @@ class TestAsyncAwait(GrammarTest): self.validate("""await = 1""") self.validate("""def async(): pass""") - def test_async_with(self): + def test_async_for(self): self.validate("""async def foo(): async for a in b: pass""") - self.invalid_syntax("""def foo(): - async for a in b: pass""") - - def test_async_for(self): + def test_async_with(self): self.validate("""async def foo(): async with a: pass""") self.invalid_syntax("""def foo(): async with a: pass""") + def test_async_generator(self): + self.validate( + """async def foo(): + return (i * 2 async for i in arange(42))""" + ) + self.validate( + """def foo(): + return (i * 2 async for i in arange(42))""" + ) + class TestRaiseChanges(GrammarTest): def test_2x_style_1(self): diff --git a/Misc/NEWS.d/next/Library/2018-04-24-14-25-07.bpo-33349.Y_0LIr.rst b/Misc/NEWS.d/next/Library/2018-04-24-14-25-07.bpo-33349.Y_0LIr.rst new file mode 100644 index 0000000..be68b3e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-04-24-14-25-07.bpo-33349.Y_0LIr.rst @@ -0,0 +1 @@ +lib2to3 now recognizes async generators everywhere. |