mirror of https://github.com/python/cpython
Fix the caret position in some syntax errors in interactive mode (GH-30718)
This commit is contained in:
parent
b04dfbbe4b
commit
650720a0cf
|
@ -251,14 +251,15 @@ get_error_line_from_tokenizer_buffers(Parser *p, Py_ssize_t lineno)
|
||||||
assert(cur_line != NULL);
|
assert(cur_line != NULL);
|
||||||
|
|
||||||
Py_ssize_t relative_lineno = p->starting_lineno ? lineno - p->starting_lineno + 1 : lineno;
|
Py_ssize_t relative_lineno = p->starting_lineno ? lineno - p->starting_lineno + 1 : lineno;
|
||||||
|
const char* buf_end = p->tok->fp_interactive ? p->tok->interactive_src_end : p->tok->inp;
|
||||||
|
|
||||||
for (int i = 0; i < relative_lineno - 1; i++) {
|
for (int i = 0; i < relative_lineno - 1; i++) {
|
||||||
char *new_line = strchr(cur_line, '\n') + 1;
|
char *new_line = strchr(cur_line, '\n') + 1;
|
||||||
// The assert is here for debug builds but the conditional that
|
// The assert is here for debug builds but the conditional that
|
||||||
// follows is there so in release builds we do not crash at the cost
|
// follows is there so in release builds we do not crash at the cost
|
||||||
// to report a potentially wrong line.
|
// to report a potentially wrong line.
|
||||||
assert(new_line != NULL && new_line < p->tok->inp);
|
assert(new_line != NULL && new_line <= buf_end);
|
||||||
if (new_line == NULL || new_line >= p->tok->inp) {
|
if (new_line == NULL || new_line > buf_end) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
cur_line = new_line;
|
cur_line = new_line;
|
||||||
|
|
Loading…
Reference in New Issue