summaryrefslogtreecommitdiffstats
path: root/Python/Python-tokenize.c
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-06-11 17:25:57 (GMT)
committerGitHub <noreply@github.com>2024-06-11 17:25:57 (GMT)
commit51bcb67405cceee1f18067fb2ae510dec47191bc (patch)
treef837bc83f4f493dd5faab746f0b288252a2d1414 /Python/Python-tokenize.c
parentf465dfbdbc5d0c5facc60ae2860717e0863bd7eb (diff)
downloadcpython-51bcb67405cceee1f18067fb2ae510dec47191bc.zip
cpython-51bcb67405cceee1f18067fb2ae510dec47191bc.tar.gz
cpython-51bcb67405cceee1f18067fb2ae510dec47191bc.tar.bz2
[3.13] gh-120343: Do not reset byte_col_offset_diff after multiline tokens (GH-120352) (#120355)
(cherry picked from commit 1b62bcee941e54244b3ce6476aef8913604987c9) Co-authored-by: Lysandros Nikolaou <lisandrosnik@gmail.com> Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Diffstat (limited to 'Python/Python-tokenize.c')
-rw-r--r--Python/Python-tokenize.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/Python/Python-tokenize.c b/Python/Python-tokenize.c
index 09fad18..2591dae 100644
--- a/Python/Python-tokenize.c
+++ b/Python/Python-tokenize.c
@@ -36,6 +36,7 @@ typedef struct
/* Needed to cache line for performance */
PyObject *last_line;
Py_ssize_t last_lineno;
+ Py_ssize_t last_end_lineno;
Py_ssize_t byte_col_offset_diff;
} tokenizeriterobject;
@@ -77,6 +78,7 @@ tokenizeriter_new_impl(PyTypeObject *type, PyObject *readline,
self->last_line = NULL;
self->byte_col_offset_diff = 0;
self->last_lineno = 0;
+ self->last_end_lineno = 0;
return (PyObject *)self;
}
@@ -227,7 +229,9 @@ tokenizeriter_next(tokenizeriterobject *it)
Py_XDECREF(it->last_line);
line = PyUnicode_DecodeUTF8(line_start, size, "replace");
it->last_line = line;
- it->byte_col_offset_diff = 0;
+ if (it->tok->lineno != it->last_end_lineno) {
+ it->byte_col_offset_diff = 0;
+ }
} else {
// Line hasn't changed so we reuse the cached one.
line = it->last_line;
@@ -241,6 +245,7 @@ tokenizeriter_next(tokenizeriterobject *it)
Py_ssize_t lineno = ISSTRINGLIT(type) ? it->tok->first_lineno : it->tok->lineno;
Py_ssize_t end_lineno = it->tok->lineno;
it->last_lineno = lineno;
+ it->last_end_lineno = end_lineno;
Py_ssize_t col_offset = -1;
Py_ssize_t end_col_offset = -1;