summaryrefslogtreecommitdiffstats
path: root/Parser
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2022-01-11 16:33:08 (GMT)
committerGitHub <noreply@github.com>2022-01-11 16:33:08 (GMT)
commit19a85501cee24a6e426a431243d0adcb5664c6fe (patch)
tree7fb844c0e7948a049d72a301251fb77fc1f59027 /Parser
parent4cfb10979d74b8513ec751b81454709f38e3b51a (diff)
downloadcpython-19a85501cee24a6e426a431243d0adcb5664c6fe.zip
cpython-19a85501cee24a6e426a431243d0adcb5664c6fe.tar.gz
cpython-19a85501cee24a6e426a431243d0adcb5664c6fe.tar.bz2
bpo-46237: Fix the line number of tokenizer errors inside f-strings (GH-30463)
(cherry picked from commit 6fa8b2ceee38187b0ae96aee12fe4f0a5c8a2ce7) Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
Diffstat (limited to 'Parser')
-rw-r--r--Parser/pegen.c8
-rw-r--r--Parser/string_parser.c5
2 files changed, 8 insertions, 5 deletions
diff --git a/Parser/pegen.c b/Parser/pegen.c
index 0504906..e507415 100644
--- a/Parser/pegen.c
+++ b/Parser/pegen.c
@@ -701,10 +701,10 @@ initialize_token(Parser *p, Token *token, const char *start, const char *end, in
int col_offset = (start != NULL && start >= line_start) ? (int)(start - line_start) : -1;
int end_col_offset = (end != NULL && end >= p->tok->line_start) ? (int)(end - p->tok->line_start) : -1;
- token->lineno = p->starting_lineno + lineno;
- token->col_offset = p->tok->lineno == 1 ? p->starting_col_offset + col_offset : col_offset;
- token->end_lineno = p->starting_lineno + end_lineno;
- token->end_col_offset = p->tok->lineno == 1 ? p->starting_col_offset + end_col_offset : end_col_offset;
+ token->lineno = lineno;
+ token->col_offset = p->tok->lineno == p->starting_lineno ? p->starting_col_offset + col_offset : col_offset;
+ token->end_lineno = end_lineno;
+ token->end_col_offset = p->tok->lineno == p->starting_lineno ? p->starting_col_offset + end_col_offset : end_col_offset;
p->fill += 1;
diff --git a/Parser/string_parser.c b/Parser/string_parser.c
index dcd298c..c83e63f 100644
--- a/Parser/string_parser.c
+++ b/Parser/string_parser.c
@@ -392,11 +392,14 @@ fstring_compile_expr(Parser *p, const char *expr_start, const char *expr_end,
return NULL;
}
Py_INCREF(p->tok->filename);
+
tok->filename = p->tok->filename;
+ tok->lineno = t->lineno + lines - 1;
Parser *p2 = _PyPegen_Parser_New(tok, Py_fstring_input, p->flags, p->feature_version,
NULL, p->arena);
- p2->starting_lineno = t->lineno + lines - 1;
+
+ p2->starting_lineno = t->lineno + lines;
p2->starting_col_offset = t->col_offset + cols;
expr = _PyPegen_run_parser(p2);