Mercurial > cpython-lru_cache-weakref
diff Objects/object.c @ 70322:90399e508ce3 2.7
handle old-style instances
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Mon, 23 May 2011 17:11:21 -0500 |
| parents | b2fc6b9f850f |
| children | d70533533f77 |
line wrap: on
line diff
--- a/Objects/object.c Mon May 23 16:11:05 2011 -0500 +++ b/Objects/object.c Mon May 23 17:11:21 2011 -0500 @@ -1906,14 +1906,21 @@ { PyObject *result = NULL; static PyObject *dir_str = NULL; - PyObject *dirfunc = _PyObject_LookupSpecial(obj, "__dir__", &dir_str); + PyObject *dirfunc; assert(obj); - if (dirfunc == NULL) { + if (PyInstance_Check(obj)) { + dirfunc = PyObject_GetAttrString(obj, "__dir__"); + if (dirfunc == NULL && !PyErr_ExceptionMatches(PyExc_AttributeError)) + return NULL; + } + else { + dirfunc = _PyObject_LookupSpecial(obj, "__dir__", &dir_str); if (PyErr_Occurred()) return NULL; + } + if (dirfunc == NULL) { /* use default implementation */ - PyErr_Clear(); if (PyModule_Check(obj)) result = _specialized_dir_module(obj); else if (PyType_Check(obj) || PyClass_Check(obj))
