diff Python/pythonrun.c @ 38431:4c0823f0a0a1 legacy-trunk

Conversion of exceptions over from faked-up classes to new-style C types.
author Richard Jones <richard@commonground.com.au>
date Sat, 27 May 2006 12:29:24 +0000
parents 35f27bbd9ad8
children 1a23706139ca
line wrap: on
line diff
--- a/Python/pythonrun.c	Sat May 27 12:11:36 2006 +0000
+++ b/Python/pythonrun.c	Sat May 27 12:29:24 2006 +0000
@@ -1084,7 +1084,8 @@
 	Py_XDECREF(tb);
 }
 
-void PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
+void
+PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
 {
 	int err = 0;
 	PyObject *f = PySys_GetObject("stderr");
@@ -1132,19 +1133,22 @@
 		}
 		else if (PyExceptionClass_Check(exception)) {
 			char* className = PyExceptionClass_Name(exception);
-			PyObject* moduleName =
-			      PyObject_GetAttrString(exception, "__module__");
+			char *dot = strrchr(className, '.');
+			PyObject* moduleName;
+			if (dot != NULL)
+				className = dot+1;
+			moduleName = PyObject_GetAttrString(exception, "__module__");
 
 			if (moduleName == NULL)
 				err = PyFile_WriteString("<unknown>", f);
 			else {
 				char* modstr = PyString_AsString(moduleName);
-				Py_DECREF(moduleName);
 				if (modstr && strcmp(modstr, "exceptions"))
 				{
 					err = PyFile_WriteString(modstr, f);
 					err += PyFile_WriteString(".", f);
 				}
+				Py_DECREF(moduleName);
 			}
 			if (err == 0) {
 				if (className == NULL)