Allow __doc__ to be of arbitrary type. Patch by James Henstridge,
fixes #504343. 2.2.1 candidate.
This commit is contained in:
parent
82c6682bb7
commit
f9bd6b09e1
@ -8,7 +8,6 @@ static PyMemberDef type_members[] = {
|
|||||||
{"__basicsize__", T_INT, offsetof(PyTypeObject,tp_basicsize),READONLY},
|
{"__basicsize__", T_INT, offsetof(PyTypeObject,tp_basicsize),READONLY},
|
||||||
{"__itemsize__", T_INT, offsetof(PyTypeObject, tp_itemsize), READONLY},
|
{"__itemsize__", T_INT, offsetof(PyTypeObject, tp_itemsize), READONLY},
|
||||||
{"__flags__", T_LONG, offsetof(PyTypeObject, tp_flags), READONLY},
|
{"__flags__", T_LONG, offsetof(PyTypeObject, tp_flags), READONLY},
|
||||||
{"__doc__", T_STRING, offsetof(PyTypeObject, tp_doc), READONLY},
|
|
||||||
{"__weakrefoffset__", T_LONG,
|
{"__weakrefoffset__", T_LONG,
|
||||||
offsetof(PyTypeObject, tp_weaklistoffset), READONLY},
|
offsetof(PyTypeObject, tp_weaklistoffset), READONLY},
|
||||||
{"__base__", T_OBJECT, offsetof(PyTypeObject, tp_base), READONLY},
|
{"__base__", T_OBJECT, offsetof(PyTypeObject, tp_base), READONLY},
|
||||||
@ -1044,9 +1043,9 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Set tp_doc to a copy of dict['__doc__'], if the latter is there
|
/* Set tp_doc to a copy of dict['__doc__'], if the latter is there
|
||||||
and is a string (tp_doc is a char* -- can't copy a general object
|
and is a string. Note that the tp_doc slot will only be used
|
||||||
into it).
|
by C code -- python code will use the version in tp_dict, so
|
||||||
XXX What if it's a Unicode string? Don't know -- this ignores it.
|
it isn't that important that non string __doc__'s are ignored.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
PyObject *doc = PyDict_GetItemString(dict, "__doc__");
|
PyObject *doc = PyDict_GetItemString(dict, "__doc__");
|
||||||
@ -2024,6 +2023,19 @@ PyType_Ready(PyTypeObject *type)
|
|||||||
inherit_slots(type, (PyTypeObject *)b);
|
inherit_slots(type, (PyTypeObject *)b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if the type dictionary doesn't contain a __doc__, set it from
|
||||||
|
the tp_doc slot.
|
||||||
|
*/
|
||||||
|
if (PyDict_GetItemString(type->tp_dict, "__doc__") == NULL) {
|
||||||
|
if (type->tp_doc != NULL) {
|
||||||
|
PyObject *doc = PyString_FromString(type->tp_doc);
|
||||||
|
PyDict_SetItemString(type->tp_dict, "__doc__", doc);
|
||||||
|
Py_DECREF(doc);
|
||||||
|
} else {
|
||||||
|
PyDict_SetItemString(type->tp_dict, "__doc__", Py_None);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Some more special stuff */
|
/* Some more special stuff */
|
||||||
base = type->tp_base;
|
base = type->tp_base;
|
||||||
if (base != NULL) {
|
if (base != NULL) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user