Mercurial > cpython-lru_cache-weakref
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; }
