summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPablo Galindo <Pablogsal@gmail.com>2019-06-03 08:34:20 +0100
committerGitHub <noreply@github.com>2019-06-03 08:34:20 +0100
commit8565f6b6db0fa9f65449b532a5056a98bad3dc37 (patch)
treeeeeed2b04e30d603a40efbeb8da748325f5f74c3
parentd9677f36fe486e86bb86f2cd59cb7fc3804bdac1 (diff)
downloadcpython-git-8565f6b6db0fa9f65449b532a5056a98bad3dc37.tar.gz
bpo-35814: Allow unpacking in r.h.s of annotated assignment expressions (GH-13760)
-rw-r--r--Grammar/Grammar2
-rw-r--r--Lib/test/test_grammar.py4
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2019-06-03-00-51-02.bpo-35814.Cf7sGY.rst2
-rw-r--r--Python/ast.c2
-rw-r--r--Python/graminit.c2
5 files changed, 9 insertions, 3 deletions
diff --git a/Grammar/Grammar b/Grammar/Grammar
index 0cacfb648e..21f7e1a891 100644
--- a/Grammar/Grammar
+++ b/Grammar/Grammar
@@ -84,7 +84,7 @@ small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt |
import_stmt | global_stmt | nonlocal_stmt | assert_stmt)
expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) |
[('=' (yield_expr|testlist_star_expr))+ [TYPE_COMMENT]] )
-annassign: ':' test ['=' (yield_expr|testlist)]
+annassign: ':' test ['=' (yield_expr|testlist_star_expr)]
testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [',']
augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' |
'<<=' | '>>=' | '**=' | '//=')
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index 2a3b71fac4..78d94593c7 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -454,6 +454,10 @@ class GrammarTests(unittest.TestCase):
exec(stmt, ns)
self.assertEqual(list(ns['f']()), [None])
+ ns = {"a": 1, 'b': (2, 3, 4), "c":5, "Tuple": typing.Tuple}
+ exec('x: Tuple[int, ...] = a,*b,c', ns)
+ self.assertEqual(ns['x'], (1, 2, 3, 4, 5))
+
def test_funcdef(self):
### [decorators] 'def' NAME parameters ['->' test] ':' suite
### decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-06-03-00-51-02.bpo-35814.Cf7sGY.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-03-00-51-02.bpo-35814.Cf7sGY.rst
new file mode 100644
index 0000000000..2b9f00a6d9
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-03-00-51-02.bpo-35814.Cf7sGY.rst
@@ -0,0 +1,2 @@
+Allow unpacking in the right hand side of annotated assignments. In
+particular, ``t: Tuple[int, ...] = x, y, *z`` is now allowed.
diff --git a/Python/ast.c b/Python/ast.c
index b77552274d..df9242977e 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -3398,7 +3398,7 @@ ast_for_expr_stmt(struct compiling *c, const node *n)
}
else {
ch = CHILD(ann, 3);
- if (TYPE(ch) == testlist) {
+ if (TYPE(ch) == testlist_star_expr) {
expr3 = ast_for_testlist(c, ch);
}
else {
diff --git a/Python/graminit.c b/Python/graminit.c
index 0587b1c0fc..7c40ce933c 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -742,7 +742,7 @@ static const arc arcs_17_2[2] = {
{0, 2},
};
static const arc arcs_17_3[2] = {
- {47, 4},
+ {81, 4},
{84, 4},
};
static const arc arcs_17_4[1] = {