diff options
author | Benjamin Peterson <benjamin@python.org> | 2009-05-09 17:23:03 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2009-05-09 17:23:03 (GMT) |
commit | 784d45506670ce86d857ee118f0f64a2b667d386 (patch) | |
tree | 63b6f97b30b228e83c6b62ff4a4f6fd5c86ff5e3 /Objects/enumobject.c | |
parent | 0a32f9c448a7d0fb29f2e6f4df26a2019498c45e (diff) | |
download | cpython-784d45506670ce86d857ee118f0f64a2b667d386.zip cpython-784d45506670ce86d857ee118f0f64a2b667d386.tar.gz cpython-784d45506670ce86d857ee118f0f64a2b667d386.tar.bz2 |
*sigh* deal with instances correctly
Diffstat (limited to 'Objects/enumobject.c')
-rw-r--r-- | Objects/enumobject.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/Objects/enumobject.c b/Objects/enumobject.c index 12a226c..65d4633 100644 --- a/Objects/enumobject.c +++ b/Objects/enumobject.c @@ -232,7 +232,18 @@ reversed_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (!PyArg_UnpackTuple(args, "reversed", 1, 1, &seq) ) return NULL; - reversed_meth = _PyObject_LookupSpecial(seq, "__reversed__", &reversed_cache); + if (PyInstance_Check(seq)) { + reversed_meth = PyObject_GetAttrString(seq, "__reversed__"); + if (reversed_meth == NULL) { + if (PyErr_ExceptionMatches(PyExc_AttributeError)) + PyErr_Clear(); + else + return NULL; + } + } + else + reversed_meth = _PyObject_LookupSpecial(seq, "__reversed__", + &reversed_cache); if (reversed_meth != NULL) { PyObject *res = PyObject_CallFunctionObjArgs(reversed_meth, NULL); Py_DECREF(reversed_meth); |