summaryrefslogtreecommitdiffstats
path: root/Python/sysmodule.c
diff options
context:
space:
mode:
authorMoshe Zadka <moshez@math.huji.ac.il>2001-01-11 05:41:27 (GMT)
committerMoshe Zadka <moshez@math.huji.ac.il>2001-01-11 05:41:27 (GMT)
commitf68f2fec7df1224a031c3feed8a0ef6028cfcddd (patch)
tree575eb2afba4c192fcb8d272906afdf203ed23946 /Python/sysmodule.c
parent5ac97957f72d42d5bc3ec658b4321cc207cb038e (diff)
downloadcpython-f68f2fec7df1224a031c3feed8a0ef6028cfcddd.zip
cpython-f68f2fec7df1224a031c3feed8a0ef6028cfcddd.tar.gz
cpython-f68f2fec7df1224a031c3feed8a0ef6028cfcddd.tar.bz2
Implementation of PEP-0217.
This closes the PEP, and patch 103170
Diffstat (limited to 'Python/sysmodule.c')
-rw-r--r--Python/sysmodule.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 33d71ac..037b567 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -68,6 +68,50 @@ PySys_SetObject(char *name, PyObject *v)
}
static PyObject *
+sys_displayhook(PyObject *self, PyObject *args)
+{
+ PyObject *o, *stdout;
+ PyInterpreterState *interp = PyThreadState_Get()->interp;
+ PyObject *modules = interp->modules;
+ PyObject *builtins = PyDict_GetItemString(modules, "__builtin__");
+
+ /* parse arguments */
+ if (!PyArg_ParseTuple(args, "O:displayhook", &o))
+ return NULL;
+
+ /* Print value except if None */
+ /* After printing, also assign to '_' */
+ /* Before, set '_' to None to avoid recursion */
+ if (o == Py_None) {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+ if (PyObject_SetAttrString(builtins, "_", Py_None) != 0)
+ return NULL;
+ if (Py_FlushLine() != 0)
+ return NULL;
+ stdout = PySys_GetObject("stdout");
+ if (stdout == NULL) {
+ PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
+ return NULL;
+ }
+ if (PyFile_WriteObject(o, stdout, 0) != 0)
+ return NULL;
+ PyFile_SoftSpace(stdout, 1);
+ if (Py_FlushLine() != 0)
+ return NULL;
+ if (PyObject_SetAttrString(builtins, "_", o) != 0)
+ return NULL;
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static char displayhook_doc[] =
+"displayhook(o) -> None\n"
+"\n"
+"Print o to the stdout, and save it in __builtin__._\n";
+
+static PyObject *
sys_exc_info(PyObject *self, PyObject *args)
{
PyThreadState *tstate;
@@ -332,6 +376,7 @@ extern PyObject *_Py_GetDXProfile(PyObject *, PyObject *);
static PyMethodDef sys_methods[] = {
/* Might as well keep this in alphabetic order */
+ {"displayhook", sys_displayhook, 1, displayhook_doc},
{"exc_info", sys_exc_info, 1, exc_info_doc},
{"exit", sys_exit, 0, exit_doc},
{"getdefaultencoding", sys_getdefaultencoding, 1,
@@ -475,6 +520,7 @@ __stderr__ -- the original stderr; don't use!\n\
\n\
Functions:\n\
\n\
+displayhook() -- print an object to the screen, and save it in __builtin__._\n\
exc_info() -- return thread-safe information about the current exception\n\
exit() -- exit the interpreter by raising SystemExit\n\
getrefcount() -- return the reference count for an object (plus one :-)\n\