diff options
author | Benjamin Peterson <benjamin@python.org> | 2011-12-15 20:34:02 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2011-12-15 20:34:02 (GMT) |
commit | bfebb7b54a50f01104f7b6169de77f7fc8feb912 (patch) | |
tree | ef88caf96404fbb445d25a695eaa8e51bc750566 /Objects/object.c | |
parent | a8ff01ca7422117dcd906ee2ea55c5293eeceb24 (diff) | |
download | cpython-bfebb7b54a50f01104f7b6169de77f7fc8feb912.zip cpython-bfebb7b54a50f01104f7b6169de77f7fc8feb912.tar.gz cpython-bfebb7b54a50f01104f7b6169de77f7fc8feb912.tar.bz2 |
improve abstract property support (closes #11610)
Thanks to Darren Dale for patch.
Diffstat (limited to 'Objects/object.c')
-rw-r--r-- | Objects/object.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/Objects/object.c b/Objects/object.c index ad31738..9060c82 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -840,6 +840,29 @@ PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w) return res; } +int +_PyObject_IsAbstract(PyObject *obj) +{ + int res; + PyObject* isabstract; + _Py_IDENTIFIER(__isabstractmethod__); + + if (obj == NULL) + return 0; + + isabstract = _PyObject_GetAttrId(obj, &PyId___isabstractmethod__); + if (isabstract == NULL) { + if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + return 0; + } + return -1; + } + res = PyObject_IsTrue(isabstract); + Py_DECREF(isabstract); + return res; +} + PyObject * _PyObject_GetAttrId(PyObject *v, _Py_Identifier *name) { |