From: Benjamin Peterson Date: Thu, 22 Oct 2009 02:50:38 +0000 (+0000) Subject: rewrite for style, clarify, and comments X-Git-Tag: v2.7a1~290 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=97a57ec0487826b614aeeb198f396eac4f3ab401;p=thirdparty%2FPython%2Fcpython.git rewrite for style, clarify, and comments Also, use the hasattr() like scheme of allowing BaseException exceptions through. --- diff --git a/Objects/descrobject.c b/Objects/descrobject.c index cbc43ac0965d..168ba74aea70 100644 --- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -1280,26 +1280,29 @@ property_init(PyObject *self, PyObject *args, PyObject *kwds) /* if no docstring given and the getter has one, use that one */ if ((doc == NULL || doc == Py_None) && get != NULL) { PyObject *get_doc = PyObject_GetAttrString(get, "__doc__"); - if (get_doc != NULL) { - /* get_doc already INCREF'd by GetAttr */ + if (get_doc) { if (Py_TYPE(self) == &PyProperty_Type) { Py_XDECREF(prop->prop_doc); prop->prop_doc = get_doc; - } else { - /* Put __doc__ in dict of the subclass instance instead, - otherwise it gets shadowed by class's __doc__. */ - if (PyObject_SetAttrString(self, "__doc__", get_doc) != 0) - { - /* DECREF for props handled by _dealloc */ - Py_DECREF(get_doc); + } + else { + /* If this is a property subclass, put __doc__ + in dict of the subclass instance instead, + otherwise it gets shadowed by __doc__ in the + class's dict. */ + int err = PyObject_SetAttrString(self, "__doc__", get_doc); + Py_DECREF(get_doc); + if (err < 0) return -1; - } - Py_DECREF(get_doc); } prop->getter_doc = 1; - } else { + } + else if (PyErr_ExceptionMatches(PyExc_Exception)) { PyErr_Clear(); } + else { + return -1; + } } return 0;