[Python-checkins] r74159 - in python/branches/py3k: Include/descrobject.h Misc/NEWS Objects/descrobject.c Objects/typeobject.c

alexandre.vassalotti python-checkins at python.org
Wed Jul 22 05:56:36 CEST 2009


Author: alexandre.vassalotti
Date: Wed Jul 22 05:56:36 2009
New Revision: 74159

Log:
Issue #6151: Make PyDescr_COMMON conform to standard C.


Modified:
   python/branches/py3k/Include/descrobject.h
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Objects/descrobject.c
   python/branches/py3k/Objects/typeobject.c

Modified: python/branches/py3k/Include/descrobject.h
==============================================================================
--- python/branches/py3k/Include/descrobject.h	(original)
+++ python/branches/py3k/Include/descrobject.h	Wed Jul 22 05:56:36 2009
@@ -37,15 +37,17 @@
 
 /* Various kinds of descriptor objects */
 
-#define PyDescr_COMMON \
-	PyObject_HEAD \
-	PyTypeObject *d_type; \
-	PyObject *d_name
-
 typedef struct {
-	PyDescr_COMMON;
+	PyObject_HEAD
+	PyTypeObject *d_type;
+	PyObject *d_name;
 } PyDescrObject;
 
+#define PyDescr_COMMON PyDescrObject d_common
+
+#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
+#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
+
 typedef struct {
 	PyDescr_COMMON;
 	PyMethodDef *d_method;

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Wed Jul 22 05:56:36 2009
@@ -36,7 +36,12 @@
 C-API
 -----
 
-- Issue #6405: Remove duplicatet type declarations in descrobject.h.
+- Issue #6151: Made PyDescr_COMMON conform to standard C (like PyObject_HEAD
+  in PEP 3123).  The PyDescr_TYPE and PyDescr_NAME macros should be
+  should used for accessing the d_type and d_name members of structures
+  using PyDescr_COMMON.
+
+- Issue #6405: Remove duplicate type declarations in descrobject.h.
 
 - The code flags for old __future__ features are now available again.
 
@@ -49,6 +54,7 @@
 - Issue #1419652: Change the first argument to PyImport_AppendInittab() to
   ``const char *`` as the string is stored beyond the call.
 
+
 Library
 -------
 

Modified: python/branches/py3k/Objects/descrobject.c
==============================================================================
--- python/branches/py3k/Objects/descrobject.c	(original)
+++ python/branches/py3k/Objects/descrobject.c	Wed Jul 22 05:56:36 2009
@@ -92,7 +92,7 @@
 				     "descriptor '%V' for type '%s' "
 				     "needs either an object or a type",
 				     descr_name((PyDescrObject *)descr), "?",
-				     descr->d_type->tp_name);
+				     PyDescr_TYPE(descr)->tp_name);
 			return NULL;
 		}
 	}
@@ -101,16 +101,16 @@
 			     "descriptor '%V' for type '%s' "
 			     "needs a type, not a '%s' as arg 2",
 			     descr_name((PyDescrObject *)descr), "?",
-			     descr->d_type->tp_name,
+			     PyDescr_TYPE(descr)->tp_name,
 			     type->ob_type->tp_name);
 		return NULL;
 	}
-	if (!PyType_IsSubtype((PyTypeObject *)type, descr->d_type)) {
+	if (!PyType_IsSubtype((PyTypeObject *)type, PyDescr_TYPE(descr))) {
 		PyErr_Format(PyExc_TypeError,
 			     "descriptor '%V' for type '%s' "
 			     "doesn't apply to type '%s'",
 			     descr_name((PyDescrObject *)descr), "?",
-			     descr->d_type->tp_name,
+			     PyDescr_TYPE(descr)->tp_name,
 			     ((PyTypeObject *)type)->tp_name);
 		return NULL;
 	}
@@ -149,7 +149,7 @@
 	PyErr_Format(PyExc_AttributeError,
 		     "attribute '%V' of '%.100s' objects is not readable",
 		     descr_name((PyDescrObject *)descr), "?",
-		     descr->d_type->tp_name);
+		     PyDescr_TYPE(descr)->tp_name);
 	return NULL;
 }
 
@@ -204,7 +204,7 @@
 	PyErr_Format(PyExc_AttributeError,
 		     "attribute '%V' of '%.100s' objects is not writable",
 		     descr_name((PyDescrObject *)descr), "?",
-		     descr->d_type->tp_name);
+		     PyDescr_TYPE(descr)->tp_name);
 	return -1;
 }
 
@@ -222,17 +222,17 @@
 			     "descriptor '%V' of '%.100s' "
 			     "object needs an argument",
 			     descr_name((PyDescrObject *)descr), "?",
-			     descr->d_type->tp_name);
+			     PyDescr_TYPE(descr)->tp_name);
 		return NULL;
 	}
 	self = PyTuple_GET_ITEM(args, 0);
-	if (!PyObject_IsInstance(self, (PyObject *)(descr->d_type))) {
+	if (!PyObject_IsInstance(self, (PyObject *)PyDescr_TYPE(descr))) {
 		PyErr_Format(PyExc_TypeError,
 			     "descriptor '%V' "
 			     "requires a '%.100s' object "
 			     "but received a '%.100s'",
 			     descr_name((PyDescrObject *)descr), "?",
-			     descr->d_type->tp_name,
+			     PyDescr_TYPE(descr)->tp_name,
 			     self->ob_type->tp_name);
 		return NULL;
 	}
@@ -257,7 +257,7 @@
 {
 	PyObject *func, *result;
 
-	func = PyCFunction_New(descr->d_method, (PyObject *)descr->d_type);
+	func = PyCFunction_New(descr->d_method, (PyObject *)PyDescr_TYPE(descr));
 	if (func == NULL)
 		return NULL;
 
@@ -280,17 +280,17 @@
 			     "descriptor '%V' of '%.100s' "
 			     "object needs an argument",
 			     descr_name((PyDescrObject *)descr), "?",
-			     descr->d_type->tp_name);
+			     PyDescr_TYPE(descr)->tp_name);
 		return NULL;
 	}
 	self = PyTuple_GET_ITEM(args, 0);
-	if (!PyObject_IsInstance(self, (PyObject *)(descr->d_type))) {
+	if (!PyObject_IsInstance(self, (PyObject *)PyDescr_TYPE(descr))) {
 		PyErr_Format(PyExc_TypeError,
 			     "descriptor '%V' "
 			     "requires a '%.100s' object "
 			     "but received a '%.100s'",
 			     descr_name((PyDescrObject *)descr), "?",
-			     descr->d_type->tp_name,
+			     PyDescr_TYPE(descr)->tp_name,
 			     self->ob_type->tp_name);
 		return NULL;
 	}
@@ -949,7 +949,7 @@
 static PyObject *
 wrapper_objclass(wrapperobject *wp)
 {
-	PyObject *c = (PyObject *)wp->descr->d_type;
+	PyObject *c = (PyObject *)PyDescr_TYPE(wp->descr);
 
 	Py_INCREF(c);
 	return c;
@@ -1059,7 +1059,7 @@
 
 	assert(PyObject_TypeCheck(d, &PyWrapperDescr_Type));
 	descr = (PyWrapperDescrObject *)d;
-	assert(PyObject_IsInstance(self, (PyObject *)(descr->d_type)));
+	assert(PyObject_IsInstance(self, (PyObject *)PyDescr_TYPE(descr)));
 
 	wp = PyObject_GC_New(wrapperobject, &wrappertype);
 	if (wp != NULL) {

Modified: python/branches/py3k/Objects/typeobject.c
==============================================================================
--- python/branches/py3k/Objects/typeobject.c	(original)
+++ python/branches/py3k/Objects/typeobject.c	Wed Jul 22 05:56:36 2009
@@ -5648,7 +5648,7 @@
 				generic = p->function;
 			d = (PyWrapperDescrObject *)descr;
 			if (d->d_base->wrapper == p->wrapper &&
-			    PyType_IsSubtype(type, d->d_type))
+			    PyType_IsSubtype(type, PyDescr_TYPE(d)))
 			{
 				if (specific == NULL ||
 				    specific == d->d_wrapped)


More information about the Python-checkins mailing list