mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
gh-110805: Allow the repl to show source code and complete tracebacks (#110775)
This commit is contained in:
parent
898f531996
commit
e1d8c65e1d
11 changed files with 191 additions and 19 deletions
|
|
@ -23,5 +23,18 @@ _PyParser_ASTFromFile(FILE *fp, PyObject *filename_ob, const char *enc,
|
|||
return NULL;
|
||||
}
|
||||
return _PyPegen_run_parser_from_file_pointer(fp, mode, filename_ob, enc, ps1, ps2,
|
||||
flags, errcode, arena);
|
||||
flags, errcode, NULL, arena);
|
||||
}
|
||||
|
||||
mod_ty
|
||||
_PyParser_InteractiveASTFromFile(FILE *fp, PyObject *filename_ob, const char *enc,
|
||||
int mode, const char *ps1, const char* ps2,
|
||||
PyCompilerFlags *flags, int *errcode,
|
||||
PyObject **interactive_src, PyArena *arena)
|
||||
{
|
||||
if (PySys_Audit("compile", "OO", Py_None, filename_ob) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
return _PyPegen_run_parser_from_file_pointer(fp, mode, filename_ob, enc, ps1, ps2,
|
||||
flags, errcode, interactive_src, arena);
|
||||
}
|
||||
|
|
@ -878,7 +878,8 @@ _PyPegen_run_parser(Parser *p)
|
|||
mod_ty
|
||||
_PyPegen_run_parser_from_file_pointer(FILE *fp, int start_rule, PyObject *filename_ob,
|
||||
const char *enc, const char *ps1, const char *ps2,
|
||||
PyCompilerFlags *flags, int *errcode, PyArena *arena)
|
||||
PyCompilerFlags *flags, int *errcode,
|
||||
PyObject **interactive_src, PyArena *arena)
|
||||
{
|
||||
struct tok_state *tok = _PyTokenizer_FromFile(fp, enc, ps1, ps2);
|
||||
if (tok == NULL) {
|
||||
|
|
@ -908,6 +909,15 @@ _PyPegen_run_parser_from_file_pointer(FILE *fp, int start_rule, PyObject *filena
|
|||
result = _PyPegen_run_parser(p);
|
||||
_PyPegen_Parser_Free(p);
|
||||
|
||||
if (tok->fp_interactive && tok->interactive_src_start && result && interactive_src != NULL) {
|
||||
*interactive_src = PyUnicode_FromString(tok->interactive_src_start);
|
||||
if (!interactive_src || _PyArena_AddPyObject(arena, *interactive_src) < 0) {
|
||||
Py_XDECREF(interactive_src);
|
||||
result = NULL;
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
error:
|
||||
_PyTokenizer_Free(tok);
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -350,7 +350,8 @@ void *_PyPegen_nonparen_genexp_in_call(Parser *p, expr_ty args, asdl_comprehensi
|
|||
Parser *_PyPegen_Parser_New(struct tok_state *, int, int, int, int *, PyArena *);
|
||||
void _PyPegen_Parser_Free(Parser *);
|
||||
mod_ty _PyPegen_run_parser_from_file_pointer(FILE *, int, PyObject *, const char *,
|
||||
const char *, const char *, PyCompilerFlags *, int *, PyArena *);
|
||||
const char *, const char *, PyCompilerFlags *, int *, PyObject **,
|
||||
PyArena *);
|
||||
void *_PyPegen_run_parser(Parser *);
|
||||
mod_ty _PyPegen_run_parser_from_string(const char *, int, PyObject *, PyCompilerFlags *, PyArena *);
|
||||
asdl_stmt_seq *_PyPegen_interactive_exit(Parser *);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue