[Python-checkins] r75591 - python/trunk/Objects/descrobject.c

benjamin.peterson python-checkins at python.org
Thu Oct 22 04:50:39 CEST 2009


Author: benjamin.peterson
Date: Thu Oct 22 04:50:38 2009
New Revision: 75591

Log:
rewrite for style, clarify, and comments

Also, use the hasattr() like scheme of allowing BaseException exceptions through.


Modified:
   python/trunk/Objects/descrobject.c

Modified: python/trunk/Objects/descrobject.c
==============================================================================
--- python/trunk/Objects/descrobject.c	(original)
+++ python/trunk/Objects/descrobject.c	Thu Oct 22 04:50:38 2009
@@ -1280,26 +1280,29 @@
 	/* 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;


More information about the Python-checkins mailing list