summaryrefslogtreecommitdiffstats
path: root/Lib/lib2to3
diff options
context:
space:
mode:
authorVlad Emelianov <volshebnyi@gmail.com>2020-03-01 19:59:26 (GMT)
committerGitHub <noreply@github.com>2020-03-01 19:59:26 (GMT)
commit768d739c1cd8c1d41902229581811a9b86bcc76e (patch)
tree353a2dcf73b4bfa2247e6612511568c29e508215 /Lib/lib2to3
parent0b0d29fce568e61e0d7d9f4a362e6dbf1e7fb80a (diff)
downloadcpython-768d739c1cd8c1d41902229581811a9b86bcc76e.zip
cpython-768d739c1cd8c1d41902229581811a9b86bcc76e.tar.gz
cpython-768d739c1cd8c1d41902229581811a9b86bcc76e.tar.bz2
bpo-38641: Add lib2to3 support for starred expressions in return/yield statements (GH-16994)
Diffstat (limited to 'Lib/lib2to3')
-rw-r--r--Lib/lib2to3/Grammar.txt4
-rw-r--r--Lib/lib2to3/tests/data/py3_test_grammar.py14
2 files changed, 15 insertions, 3 deletions
diff --git a/Lib/lib2to3/Grammar.txt b/Lib/lib2to3/Grammar.txt
index 68b7386..51f5820 100644
--- a/Lib/lib2to3/Grammar.txt
+++ b/Lib/lib2to3/Grammar.txt
@@ -49,7 +49,7 @@ pass_stmt: 'pass'
flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt
break_stmt: 'break'
continue_stmt: 'continue'
-return_stmt: 'return' [testlist]
+return_stmt: 'return' [testlist_star_expr]
yield_stmt: yield_expr
raise_stmt: 'raise' [test ['from' test | ',' test [',' test]]]
import_stmt: import_name | import_from
@@ -151,4 +151,4 @@ testlist1: test (',' test)*
encoding_decl: NAME
yield_expr: 'yield' [yield_arg]
-yield_arg: 'from' test | testlist
+yield_arg: 'from' test | testlist_star_expr
diff --git a/Lib/lib2to3/tests/data/py3_test_grammar.py b/Lib/lib2to3/tests/data/py3_test_grammar.py
index e0b6828..d062232 100644
--- a/Lib/lib2to3/tests/data/py3_test_grammar.py
+++ b/Lib/lib2to3/tests/data/py3_test_grammar.py
@@ -473,15 +473,27 @@ class GrammarTests(unittest.TestCase):
test_inner()
def testReturn(self):
- # 'return' [testlist]
+ # 'return' [testlist_star_expr]
def g1(): return
def g2(): return 1
+ return_list = [2, 3]
+ def g3(): return 1, *return_list
g1()
x = g2()
+ x3 = g3()
check_syntax_error(self, "class foo:return 1")
def testYield(self):
+ # 'yield' [yield_arg]
+ def g1(): yield 1
+ yield_list = [2, 3]
+ def g2(): yield 1, *yield_list
+ def g3(): yield from iter(yield_list)
+ x1 = g1()
+ x2 = g2()
+ x3 = g3()
check_syntax_error(self, "class foo:yield 1")
+ check_syntax_error(self, "def g4(): yield from *a")
def testRaise(self):
# 'raise' test [',' test]