[3.14] gh-137576: Fix for Basic REPL showing incorrect code in tracebacks with PYTHONSTARTUP (GH-137625) (#137771)

Co-authored-by: adam j hartz <hz@mit.edu>
Co-authored-by: Kirill Podoprigora <kirill.bast9@mail.ru>
This commit is contained in:
Miss Islington (bot) 2025-08-27 17:28:20 +02:00 committed by GitHub
parent 5caa6cde58
commit 6d30edbae2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 90 additions and 3 deletions

View file

@ -1365,6 +1365,29 @@ run_eval_code_obj(PyThreadState *tstate, PyCodeObject *co, PyObject *globals, Py
return PyEval_EvalCode((PyObject*)co, globals, locals);
}
static PyObject *
get_interactive_filename(PyObject *filename, Py_ssize_t count)
{
PyObject *result;
Py_ssize_t len = PyUnicode_GET_LENGTH(filename);
if (len >= 2
&& PyUnicode_ReadChar(filename, 0) == '<'
&& PyUnicode_ReadChar(filename, len - 1) == '>') {
PyObject *middle = PyUnicode_Substring(filename, 1, len-1);
if (middle == NULL) {
return NULL;
}
result = PyUnicode_FromFormat("<%U-%d>", middle, count);
Py_DECREF(middle);
} else {
result = PyUnicode_FromFormat(
"%U-%d", filename, count);
}
return result;
}
static PyObject *
run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
PyCompilerFlags *flags, PyArena *arena, PyObject* interactive_src,
@ -1375,8 +1398,8 @@ run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
if (interactive_src) {
PyInterpreterState *interp = tstate->interp;
if (generate_new_source) {
interactive_filename = PyUnicode_FromFormat(
"%U-%d", filename, interp->_interactive_src_count++);
interactive_filename = get_interactive_filename(
filename, interp->_interactive_src_count++);
} else {
Py_INCREF(interactive_filename);
}