Mercurial > cpython-lru_cache-weakref
diff Python/ast.c @ 55651:1e2877026435 legacy-trunk
better col_offsets for "for" statements with tuple unpacking #6704
Patch from Frank Wierzbicki.
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Sat, 15 Aug 2009 22:59:21 +0000 |
| parents | 7bf8fc20037a |
| children | cceb62eb1cf1 |
line wrap: on
line diff
--- a/Python/ast.c Sat Aug 15 22:39:03 2009 +0000 +++ b/Python/ast.c Sat Aug 15 22:59:21 2009 +0000 @@ -1047,7 +1047,7 @@ list_if: 'if' test [list_iter] testlist_safe: test [(',' test)+ [',']] */ - expr_ty elt; + expr_ty elt, first; asdl_seq *listcomps; int i, n_fors; node *ch; @@ -1087,11 +1087,11 @@ /* Check the # of children rather than the length of t, since [x for x, in ... ] has 1 element in t, but still requires a Tuple. */ + first = (expr_ty)asdl_seq_GET(t, 0); if (NCH(for_ch) == 1) - lc = comprehension((expr_ty)asdl_seq_GET(t, 0), expression, NULL, - c->c_arena); + lc = comprehension(first, expression, NULL, c->c_arena); else - lc = comprehension(Tuple(t, Store, LINENO(ch), ch->n_col_offset, + lc = comprehension(Tuple(t, Store, first->lineno, first->col_offset, c->c_arena), expression, NULL, c->c_arena); if (!lc) @@ -1226,7 +1226,7 @@ for (i = 0; i < n_fors; i++) { comprehension_ty ge; asdl_seq *t; - expr_ty expression; + expr_ty expression, first; node *for_ch; REQ(ch, gen_for); @@ -1241,11 +1241,11 @@ /* Check the # of children rather than the length of t, since (x for x, in ...) has 1 element in t, but still requires a Tuple. */ + first = (expr_ty)asdl_seq_GET(t, 0); if (NCH(for_ch) == 1) - ge = comprehension((expr_ty)asdl_seq_GET(t, 0), expression, - NULL, c->c_arena); + ge = comprehension(first, expression, NULL, c->c_arena); else - ge = comprehension(Tuple(t, Store, LINENO(ch), ch->n_col_offset, + ge = comprehension(Tuple(t, Store, first->lineno, first->col_offset, c->c_arena), expression, NULL, c->c_arena); @@ -2844,7 +2844,7 @@ { asdl_seq *_target, *seq = NULL, *suite_seq; expr_ty expression; - expr_ty target; + expr_ty target, first; const node *node_target; /* for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] */ REQ(n, for_stmt); @@ -2861,10 +2861,11 @@ return NULL; /* Check the # of children rather than the length of _target, since for x, in ... has 1 element in _target, but still requires a Tuple. */ + first = (expr_ty)asdl_seq_GET(_target, 0); if (NCH(node_target) == 1) - target = (expr_ty)asdl_seq_GET(_target, 0); + target = first; else - target = Tuple(_target, Store, LINENO(n), n->n_col_offset, c->c_arena); + target = Tuple(_target, Store, first->lineno, first->col_offset, c->c_arena); expression = ast_for_testlist(c, CHILD(n, 3)); if (!expression)
