}
static int
-descr_check(PyDescrObject *descr, PyObject *obj, PyObject **pres)
+descr_check(PyDescrObject *descr, PyObject *obj)
{
- if (obj == NULL) {
- Py_INCREF(descr);
- *pres = (PyObject *)descr;
- return 1;
- }
if (!PyObject_TypeCheck(obj, descr->d_type)) {
PyErr_Format(PyExc_TypeError,
"descriptor '%V' for '%.100s' objects "
descr_name((PyDescrObject *)descr), "?",
descr->d_type->tp_name,
Py_TYPE(obj)->tp_name);
- *pres = NULL;
- return 1;
+ return -1;
}
return 0;
}
static PyObject *
method_get(PyMethodDescrObject *descr, PyObject *obj, PyObject *type)
{
- PyObject *res;
-
- if (descr_check((PyDescrObject *)descr, obj, &res))
- return res;
+ if (obj == NULL) {
+ Py_INCREF(descr);
+ return (PyObject *)descr;
+ }
+ if (descr_check((PyDescrObject *)descr, obj) < 0) {
+ return NULL;
+ }
if (descr->d_method->ml_flags & METH_METHOD) {
if (PyType_Check(type)) {
return PyCMethod_New(descr->d_method, obj, NULL, descr->d_common.d_type);
static PyObject *
member_get(PyMemberDescrObject *descr, PyObject *obj, PyObject *type)
{
- PyObject *res;
-
- if (descr_check((PyDescrObject *)descr, obj, &res))
- return res;
+ if (obj == NULL) {
+ Py_INCREF(descr);
+ return (PyObject *)descr;
+ }
+ if (descr_check((PyDescrObject *)descr, obj) < 0) {
+ return NULL;
+ }
if (descr->d_member->flags & READ_RESTRICTED) {
if (PySys_Audit("object.__getattr__", "Os",
static PyObject *
getset_get(PyGetSetDescrObject *descr, PyObject *obj, PyObject *type)
{
- PyObject *res;
-
- if (descr_check((PyDescrObject *)descr, obj, &res))
- return res;
+ if (obj == NULL) {
+ Py_INCREF(descr);
+ return (PyObject *)descr;
+ }
+ if (descr_check((PyDescrObject *)descr, obj) < 0) {
+ return NULL;
+ }
if (descr->d_getset->get != NULL)
return descr->d_getset->get(obj, descr->d_getset->closure);
PyErr_Format(PyExc_AttributeError,
static PyObject *
wrapperdescr_get(PyWrapperDescrObject *descr, PyObject *obj, PyObject *type)
{
- PyObject *res;
-
- if (descr_check((PyDescrObject *)descr, obj, &res))
- return res;
+ if (obj == NULL) {
+ Py_INCREF(descr);
+ return (PyObject *)descr;
+ }
+ if (descr_check((PyDescrObject *)descr, obj) < 0) {
+ return NULL;
+ }
return PyWrapper_New((PyObject *)descr, obj);
}
static int
-descr_setcheck(PyDescrObject *descr, PyObject *obj, PyObject *value,
- int *pres)
+descr_setcheck(PyDescrObject *descr, PyObject *obj, PyObject *value)
{
assert(obj != NULL);
if (!PyObject_TypeCheck(obj, descr->d_type)) {
descr_name(descr), "?",
descr->d_type->tp_name,
Py_TYPE(obj)->tp_name);
- *pres = -1;
- return 1;
+ return -1;
}
return 0;
}
static int
member_set(PyMemberDescrObject *descr, PyObject *obj, PyObject *value)
{
- int res;
-
- if (descr_setcheck((PyDescrObject *)descr, obj, value, &res))
- return res;
+ if (descr_setcheck((PyDescrObject *)descr, obj, value) < 0) {
+ return -1;
+ }
return PyMember_SetOne((char *)obj, descr->d_member, value);
}
static int
getset_set(PyGetSetDescrObject *descr, PyObject *obj, PyObject *value)
{
- int res;
-
- if (descr_setcheck((PyDescrObject *)descr, obj, value, &res))
- return res;
- if (descr->d_getset->set != NULL)
+ if (descr_setcheck((PyDescrObject *)descr, obj, value) < 0) {
+ return -1;
+ }
+ if (descr->d_getset->set != NULL) {
return descr->d_getset->set(obj, value,
descr->d_getset->closure);
+ }
PyErr_Format(PyExc_AttributeError,
"attribute '%V' of '%.100s' objects is not writable",
descr_name((PyDescrObject *)descr), "?",
return -1;
}
PyObject *self = args[0];
- PyObject *dummy;
- if (descr_check((PyDescrObject *)func, self, &dummy)) {
+ if (descr_check((PyDescrObject *)func, self) < 0) {
return -1;
}
if (kwnames && PyTuple_GET_SIZE(kwnames)) {