Index: Include/descrobject.h =================================================================== --- Include/descrobject.h (revision 73040) +++ Include/descrobject.h (working copy) @@ -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; Index: Objects/typeobject.c =================================================================== --- Objects/typeobject.c (revision 73040) +++ Objects/typeobject.c (working copy) @@ -5654,7 +5654,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) Index: Objects/descrobject.c =================================================================== --- Objects/descrobject.c (revision 73040) +++ Objects/descrobject.c (working copy) @@ -7,16 +7,16 @@ descr_dealloc(PyDescrObject *descr) { _PyObject_GC_UNTRACK(descr); - Py_XDECREF(descr->d_type); - Py_XDECREF(descr->d_name); + Py_XDECREF(PyDescr_TYPE(descr)); + Py_XDECREF(PyDescr_NAME(descr)); PyObject_GC_Del(descr); } static PyObject * descr_name(PyDescrObject *descr) { - if (descr->d_name != NULL && PyUnicode_Check(descr->d_name)) - return descr->d_name; + if (PyDescr_NAME(descr) != NULL && PyUnicode_Check(PyDescr_NAME(descr))) + return PyDescr_NAME(descr); return NULL; } @@ -24,10 +24,10 @@ descr_repr(PyDescrObject *descr, char *format) { PyObject *name = NULL; - if (descr->d_name != NULL && PyUnicode_Check(descr->d_name)) - name = descr->d_name; + if (PyDescr_NAME(descr) != NULL && PyUnicode_Check(PyDescr_NAME(descr))) + name = PyDescr_NAME(descr); - return PyUnicode_FromFormat(format, name, "?", descr->d_type->tp_name); + return PyUnicode_FromFormat(format, name, "?", PyDescr_TYPE(descr)->tp_name); } static PyObject * @@ -66,12 +66,12 @@ *pres = (PyObject *)descr; return 1; } - if (!PyObject_TypeCheck(obj, descr->d_type)) { + if (!PyObject_TypeCheck(obj, PyDescr_TYPE(descr))) { PyErr_Format(PyExc_TypeError, "descriptor '%V' for '%s' objects " "doesn't apply to '%s' object", descr_name((PyDescrObject *)descr), "?", - descr->d_type->tp_name, + PyDescr_TYPE(descr)->tp_name, obj->ob_type->tp_name); *pres = NULL; return 1; @@ -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; } @@ -168,12 +168,12 @@ int *pres) { assert(obj != NULL); - if (!PyObject_TypeCheck(obj, descr->d_type)) { + if (!PyObject_TypeCheck(obj, PyDescr_TYPE(descr))) { PyErr_Format(PyExc_TypeError, "descriptor '%V' for '%.100s' objects " "doesn't apply to '%.100s' object", descr_name(descr), "?", - descr->d_type->tp_name, + PyDescr_TYPE(descr)->tp_name, obj->ob_type->tp_name); *pres = -1; return 1; @@ -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; } @@ -379,7 +379,7 @@ descr_traverse(PyObject *self, visitproc visit, void *arg) { PyDescrObject *descr = (PyDescrObject *)self; - Py_VISIT(descr->d_type); + Py_VISIT(PyDescr_TYPE(descr)); return 0; } @@ -577,9 +577,9 @@ descr = (PyDescrObject *)PyType_GenericAlloc(descrtype, 0); if (descr != NULL) { Py_XINCREF(type); - descr->d_type = type; - descr->d_name = PyUnicode_InternFromString(name); - if (descr->d_name == NULL) { + PyDescr_TYPE(descr) = type; + PyDescr_NAME(descr) = PyUnicode_InternFromString(name); + if (PyDescr_NAME(descr) == NULL) { Py_DECREF(descr); descr = 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) {