diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2020-01-09 19:39:00 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-09 19:39:00 (GMT) |
commit | 33e033da3c1472b0aa2ae3cff06649a1ae4aa37f (patch) | |
tree | a4be4b9cd11396724fb5a538aa580344cd480aba /Python/ast.c | |
parent | e47a7e3a7ab2cfb321e5f276028be286f30bd057 (diff) | |
download | cpython-33e033da3c1472b0aa2ae3cff06649a1ae4aa37f.zip cpython-33e033da3c1472b0aa2ae3cff06649a1ae4aa37f.tar.gz cpython-33e033da3c1472b0aa2ae3cff06649a1ae4aa37f.tar.bz2 |
bpo-39235: Fix end location for genexp in call args (GH-17925)
The fix changes copy_location() to require an extra node from which to extract the end location, and fixing all 5 call sites.
https://bugs.python.org/issue39235
(cherry picked from commit a796d8ef9dd1af65f7e4d7a857b56f35b7cb6e78)
Co-authored-by: Guido van Rossum <guido@python.org>
Diffstat (limited to 'Python/ast.c')
-rw-r--r-- | Python/ast.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/Python/ast.c b/Python/ast.c index 6cf71ce..f3263c1 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -1028,13 +1028,13 @@ forbidden_name(struct compiling *c, identifier name, const node *n, } static expr_ty -copy_location(expr_ty e, const node *n) +copy_location(expr_ty e, const node *n, const node *end) { if (e) { e->lineno = LINENO(n); e->col_offset = n->n_col_offset; - e->end_lineno = n->n_end_lineno; - e->end_col_offset = n->n_end_col_offset; + e->end_lineno = end->n_end_lineno; + e->end_col_offset = end->n_end_col_offset; } return e; } @@ -2464,10 +2464,10 @@ ast_for_atom(struct compiling *c, const node *n) } if (TYPE(CHILD(ch, 1)) == comp_for) { - return copy_location(ast_for_genexp(c, ch), n); + return copy_location(ast_for_genexp(c, ch), n, n); } else { - return copy_location(ast_for_testlist(c, ch), n); + return copy_location(ast_for_testlist(c, ch), n, n); } case LSQB: /* list (or list comprehension) */ ch = CHILD(n, 1); @@ -2486,7 +2486,7 @@ ast_for_atom(struct compiling *c, const node *n) n->n_end_lineno, n->n_end_col_offset, c->c_arena); } else { - return copy_location(ast_for_listcomp(c, ch), n); + return copy_location(ast_for_listcomp(c, ch), n, n); } case LBRACE: { /* dictorsetmaker: ( ((test ':' test | '**' test) @@ -2527,7 +2527,7 @@ ast_for_atom(struct compiling *c, const node *n) /* It's a dictionary display. */ res = ast_for_dictdisplay(c, ch); } - return copy_location(res, n); + return copy_location(res, n, n); } } default: @@ -3146,7 +3146,7 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func, } else if (TYPE(CHILD(ch, 1)) == comp_for) { /* the lone generator expression */ - e = copy_location(ast_for_genexp(c, ch), maybegenbeg); + e = copy_location(ast_for_genexp(c, ch), maybegenbeg, closepar); if (!e) return NULL; asdl_seq_SET(args, nargs++, e); |