diff options
author | Michael W. Hudson <mwh@python.net> | 2002-11-27 16:29:26 (GMT) |
---|---|---|
committer | Michael W. Hudson <mwh@python.net> | 2002-11-27 16:29:26 (GMT) |
commit | ade8c8b2c3a158013564a6adbd92686b5f3340c9 (patch) | |
tree | e991ed37bd078f9730bcebca7f80037be077ae01 /Objects | |
parent | deaba570097c73145a46707efd94134eb2c6cda3 (diff) | |
download | cpython-ade8c8b2c3a158013564a6adbd92686b5f3340c9.zip cpython-ade8c8b2c3a158013564a6adbd92686b5f3340c9.tar.gz cpython-ade8c8b2c3a158013564a6adbd92686b5f3340c9.tar.bz2 |
Nudge getting __module__ and __name__ for new-style classes so that
the results of *setting* __name__ are not so surprising.
If people can suggest more tests, that'd be grand, or is what's there
sufficient?
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/typeobject.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/Objects/typeobject.c b/Objects/typeobject.c index d83ff8c..4cfbd49 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -41,12 +41,20 @@ type_name(PyTypeObject *type, void *context) { char *s; - s = strrchr(type->tp_name, '.'); - if (s == NULL) - s = type->tp_name; - else - s++; - return PyString_FromString(s); + if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) { + etype* et = (etype*)type; + + Py_INCREF(et->name); + return et->name; + } + else { + s = strrchr(type->tp_name, '.'); + if (s == NULL) + s = type->tp_name; + else + s++; + return PyString_FromString(s); + } } static int @@ -95,19 +103,18 @@ type_module(PyTypeObject *type, void *context) PyObject *mod; char *s; - s = strrchr(type->tp_name, '.'); - if (s != NULL) - return PyString_FromStringAndSize(type->tp_name, - (int)(s - type->tp_name)); - if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) - return PyString_FromString("__builtin__"); - mod = PyDict_GetItemString(type->tp_dict, "__module__"); - if (mod != NULL) { - Py_INCREF(mod); + if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) { + mod = PyDict_GetItemString(type->tp_dict, "__module__"); + Py_XINCREF(mod); return mod; } - PyErr_SetString(PyExc_AttributeError, "__module__"); - return NULL; + else { + s = strrchr(type->tp_name, '.'); + if (s != NULL) + return PyString_FromStringAndSize( + type->tp_name, (int)(s - type->tp_name)); + return PyString_FromString("__builtin__"); + } } static int |