mirror of https://github.com/python/cpython
bpo-35814: Allow unpacking in r.h.s of annotated assignment expressions (GH-13760)
This commit is contained in:
parent
d9677f36fe
commit
8565f6b6db
|
@ -84,7 +84,7 @@ small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt |
|
||||||
import_stmt | global_stmt | nonlocal_stmt | assert_stmt)
|
import_stmt | global_stmt | nonlocal_stmt | assert_stmt)
|
||||||
expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) |
|
expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) |
|
||||||
[('=' (yield_expr|testlist_star_expr))+ [TYPE_COMMENT]] )
|
[('=' (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))* [',']
|
testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [',']
|
||||||
augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' |
|
augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' |
|
||||||
'<<=' | '>>=' | '**=' | '//=')
|
'<<=' | '>>=' | '**=' | '//=')
|
||||||
|
|
|
@ -454,6 +454,10 @@ class GrammarTests(unittest.TestCase):
|
||||||
exec(stmt, ns)
|
exec(stmt, ns)
|
||||||
self.assertEqual(list(ns['f']()), [None])
|
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):
|
def test_funcdef(self):
|
||||||
### [decorators] 'def' NAME parameters ['->' test] ':' suite
|
### [decorators] 'def' NAME parameters ['->' test] ':' suite
|
||||||
### decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
|
### decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
|
||||||
|
|
|
@ -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.
|
|
@ -3398,7 +3398,7 @@ ast_for_expr_stmt(struct compiling *c, const node *n)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ch = CHILD(ann, 3);
|
ch = CHILD(ann, 3);
|
||||||
if (TYPE(ch) == testlist) {
|
if (TYPE(ch) == testlist_star_expr) {
|
||||||
expr3 = ast_for_testlist(c, ch);
|
expr3 = ast_for_testlist(c, ch);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -742,7 +742,7 @@ static const arc arcs_17_2[2] = {
|
||||||
{0, 2},
|
{0, 2},
|
||||||
};
|
};
|
||||||
static const arc arcs_17_3[2] = {
|
static const arc arcs_17_3[2] = {
|
||||||
{47, 4},
|
{81, 4},
|
||||||
{84, 4},
|
{84, 4},
|
||||||
};
|
};
|
||||||
static const arc arcs_17_4[1] = {
|
static const arc arcs_17_4[1] = {
|
||||||
|
|
Loading…
Reference in New Issue