From edef2be4af973f1766b593cf48188db2e320dcbe Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Wed, 12 Jul 2006 05:26:17 +0000 Subject: Bug #1520864: unpacking singleton tuples in for loop (for x, in) work again. --- Lib/test/test_grammar.py | 5 +++++ Misc/NEWS | 2 ++ Python/ast.c | 8 ++++++-- Python/import.c | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index 4bb4e45..f160867 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -531,6 +531,11 @@ n = 0 for x in Squares(10): n = n+x if n != 285: raise TestFailed, 'for over growing sequence' +result = [] +for x, in [(1,), (2,), (3,)]: + result.append(x) +vereq(result, [1, 2, 3]) + print 'try_stmt' ### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] ### | 'try' ':' suite 'finally' ':' suite diff --git a/Misc/NEWS b/Misc/NEWS index 080f4a7..b352765 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 2.5 beta 2? Core and builtins ----------------- +- Bug #1520864: unpacking singleton tuples in for loop (for x, in) work again. + - Bug #1441486: The literal representation of -(sys.maxint - 1) again evaluates to a int object, not a long. diff --git a/Python/ast.c b/Python/ast.c index cd0649e..d00fcc8 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -2666,6 +2666,7 @@ ast_for_for_stmt(struct compiling *c, const node *n) asdl_seq *_target, *seq = NULL, *suite_seq; expr_ty expression; expr_ty target; + const node *node_target; /* for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] */ REQ(n, for_stmt); @@ -2675,10 +2676,13 @@ ast_for_for_stmt(struct compiling *c, const node *n) return NULL; } - _target = ast_for_exprlist(c, CHILD(n, 1), Store); + node_target = CHILD(n, 1); + _target = ast_for_exprlist(c, node_target, Store); if (!_target) return NULL; - if (asdl_seq_LEN(_target) == 1) + /* Check the # of children rather than the length of _target, since + for x, in ... has 1 element in _target, but still requires a Tuple. */ + if (NCH(node_target) == 1) target = (expr_ty)asdl_seq_GET(_target, 0); else target = Tuple(_target, Store, LINENO(n), n->n_col_offset, c->c_arena); diff --git a/Python/import.c b/Python/import.c index 933f094..dfc2544 100644 --- a/Python/import.c +++ b/Python/import.c @@ -60,6 +60,7 @@ extern time_t PyOS_GetLastModificationTime(char *, FILE *); Python 2.5a0: 62081 (ast-branch) Python 2.5a0: 62091 (with) Python 2.5a0: 62092 (changed WITH_CLEANUP opcode) + Python 2.5c1: 62101 (fix wrong code: for x, in ...) . */ #define MAGIC (62092 | ((long)'\r'<<16) | ((long)'\n'<<24)) -- cgit v0.12