summaryrefslogtreecommitdiffstats
path: root/Parser/pegen.c
diff options
context:
space:
mode:
Diffstat (limited to 'Parser/pegen.c')
-rw-r--r--Parser/pegen.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/Parser/pegen.c b/Parser/pegen.c
index 2e0b569..0c60394 100644
--- a/Parser/pegen.c
+++ b/Parser/pegen.c
@@ -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;