diff Objects/typeobject.c @ 23120:737f4458e5de 2.2

Backport rev 2.143 (note: some earlier bugfix candidates still TBD). SF bug 542984. Change type_get_doc (the get function for __doc__) to look in tp_dict more often, and if it finds a descriptor in tp_dict, to call it (with a NULL instance). This means you can add a __doc__ descriptor to a new-style class that returns instance docs when called on an instance, and class docs when called on a class -- or the same docs in either case, but lazily computed. I'll also check this into the 2.2 maintenance branch.
author Guido van Rossum <guido@python.org>
date Thu, 18 Apr 2002 00:36:17 +0000
parents d462c790cc5b
children 90adbcf62013
line wrap: on
line diff
--- a/Objects/typeobject.c	Wed Apr 17 12:54:56 2002 +0000
+++ b/Objects/typeobject.c	Thu Apr 18 00:36:17 2002 +0000
@@ -83,15 +83,19 @@
 type_get_doc(PyTypeObject *type, void *context)
 {
 	PyObject *result;
-	if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
-		if (type->tp_doc == NULL) {
-			Py_INCREF(Py_None);
-			return Py_None;
-		}
+	if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE) && type->tp_doc != NULL)
 		return PyString_FromString(type->tp_doc);
+	result = PyDict_GetItemString(type->tp_dict, "__doc__");
+	if (result == NULL) {
+		result = Py_None;
+		Py_INCREF(result);
 	}
-	result = PyDict_GetItemString(type->tp_dict, "__doc__");
-	Py_INCREF(result);
+	else if (result->ob_type->tp_descr_get) {
+		result = result->ob_type->tp_descr_get(result, NULL, type);
+	}
+	else {
+		Py_INCREF(result);
+	}
 	return result;
 }