From aa06b0ede584324ea2a509b344ef07d619d0827f Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 26 Dec 1997 22:15:57 +0000 Subject: Plug the most annoying recursive printing problem -- reset '_' to None before printing and set it to the printed variable *after* printing (and only when printing is successful). --- Python/ceval.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Python/ceval.c b/Python/ceval.c index fad8c2b..8b7447c 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1008,11 +1008,12 @@ eval_code2(co, globals, locals, case PRINT_EXPR: v = POP(); - /* Print value except if procedure result */ - /* Before printing, also assign to '_' */ + /* Print value except if None */ + /* After printing, also assign to '_' */ + /* Before, set '_' to None to avoid recursion */ if (v != Py_None && (err = PyDict_SetItemString( - f->f_builtins, "_", v)) == 0) { + f->f_builtins, "_", Py_None)) == 0) { err = Py_FlushLine(); if (err == 0) { x = PySys_GetObject("stdout"); @@ -1025,6 +1026,10 @@ eval_code2(co, globals, locals, PyFile_SoftSpace(x, 1); err = Py_FlushLine(); } + if (err == 0) { + err = PyDict_SetItemString( + f->f_builtins, "_", v); + } } Py_DECREF(v); break; -- cgit v0.12