summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2006-07-12 05:26:17 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2006-07-12 05:26:17 (GMT)
commitedef2be4af973f1766b593cf48188db2e320dcbe (patch)
tree3daf8d96b916450d9f214851e0194c41c2243a42
parent3b9be2ae6f5491737ebc65ee525884da218368d4 (diff)
downloadcpython-edef2be4af973f1766b593cf48188db2e320dcbe.zip
cpython-edef2be4af973f1766b593cf48188db2e320dcbe.tar.gz
cpython-edef2be4af973f1766b593cf48188db2e320dcbe.tar.bz2
Bug #1520864: unpacking singleton tuples in for loop (for x, in) work again.
-rw-r--r--Lib/test/test_grammar.py5
-rw-r--r--Misc/NEWS2
-rw-r--r--Python/ast.c8
-rw-r--r--Python/import.c1
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))