@@ -72,22 +72,16 @@ wrapperdescr_repr(PyWrapperDescrObject *descr)
72
72
}
73
73
74
74
static int
75
- descr_check (PyDescrObject * descr , PyObject * obj , PyObject * * pres )
75
+ descr_check (PyDescrObject * descr , PyObject * obj )
76
76
{
77
- if (obj == NULL ) {
78
- Py_INCREF (descr );
79
- * pres = (PyObject * )descr ;
80
- return 1 ;
81
- }
82
77
if (!PyObject_TypeCheck (obj , descr -> d_type )) {
83
78
PyErr_Format (PyExc_TypeError ,
84
79
"descriptor '%V' for '%.100s' objects "
85
80
"doesn't apply to a '%.100s' object" ,
86
81
descr_name ((PyDescrObject * )descr ), "?" ,
87
82
descr -> d_type -> tp_name ,
88
83
Py_TYPE (obj )-> tp_name );
89
- * pres = NULL ;
90
- return 1 ;
84
+ return -1 ;
91
85
}
92
86
return 0 ;
93
87
}
@@ -137,10 +131,12 @@ classmethod_get(PyMethodDescrObject *descr, PyObject *obj, PyObject *type)
137
131
static PyObject *
138
132
method_get (PyMethodDescrObject * descr , PyObject * obj , PyObject * type )
139
133
{
140
- PyObject * res ;
141
-
142
- if (descr_check ((PyDescrObject * )descr , obj , & res ))
143
- return res ;
134
+ if (obj == NULL ) {
135
+ return Py_NewRef (descr );
136
+ }
137
+ if (descr_check ((PyDescrObject * )descr , obj ) < 0 ) {
138
+ return NULL ;
139
+ }
144
140
if (descr -> d_method -> ml_flags & METH_METHOD ) {
145
141
if (PyType_Check (type )) {
146
142
return PyCMethod_New (descr -> d_method , obj , NULL , descr -> d_common .d_type );
@@ -159,10 +155,12 @@ method_get(PyMethodDescrObject *descr, PyObject *obj, PyObject *type)
159
155
static PyObject *
160
156
member_get (PyMemberDescrObject * descr , PyObject * obj , PyObject * type )
161
157
{
162
- PyObject * res ;
163
-
164
- if (descr_check ((PyDescrObject * )descr , obj , & res ))
165
- return res ;
158
+ if (obj == NULL ) {
159
+ return Py_NewRef (descr );
160
+ }
161
+ if (descr_check ((PyDescrObject * )descr , obj ) < 0 ) {
162
+ return NULL ;
163
+ }
166
164
167
165
if (descr -> d_member -> flags & PY_AUDIT_READ ) {
168
166
if (PySys_Audit ("object.__getattr__" , "Os" ,
@@ -177,10 +175,12 @@ member_get(PyMemberDescrObject *descr, PyObject *obj, PyObject *type)
177
175
static PyObject *
178
176
getset_get (PyGetSetDescrObject * descr , PyObject * obj , PyObject * type )
179
177
{
180
- PyObject * res ;
181
-
182
- if (descr_check ((PyDescrObject * )descr , obj , & res ))
183
- return res ;
178
+ if (obj == NULL ) {
179
+ return Py_NewRef (descr );
180
+ }
181
+ if (descr_check ((PyDescrObject * )descr , obj ) < 0 ) {
182
+ return NULL ;
183
+ }
184
184
if (descr -> d_getset -> get != NULL )
185
185
return descr -> d_getset -> get (obj , descr -> d_getset -> closure );
186
186
PyErr_Format (PyExc_AttributeError ,
@@ -193,16 +193,17 @@ getset_get(PyGetSetDescrObject *descr, PyObject *obj, PyObject *type)
193
193
static PyObject *
194
194
wrapperdescr_get (PyWrapperDescrObject * descr , PyObject * obj , PyObject * type )
195
195
{
196
- PyObject * res ;
197
-
198
- if (descr_check ((PyDescrObject * )descr , obj , & res ))
199
- return res ;
196
+ if (obj == NULL ) {
197
+ return Py_NewRef (descr );
198
+ }
199
+ if (descr_check ((PyDescrObject * )descr , obj ) < 0 ) {
200
+ return NULL ;
201
+ }
200
202
return PyWrapper_New ((PyObject * )descr , obj );
201
203
}
202
204
203
205
static int
204
- descr_setcheck (PyDescrObject * descr , PyObject * obj , PyObject * value ,
205
- int * pres )
206
+ descr_setcheck (PyDescrObject * descr , PyObject * obj , PyObject * value )
206
207
{
207
208
assert (obj != NULL );
208
209
if (!PyObject_TypeCheck (obj , descr -> d_type )) {
@@ -212,32 +213,30 @@ descr_setcheck(PyDescrObject *descr, PyObject *obj, PyObject *value,
212
213
descr_name (descr ), "?" ,
213
214
descr -> d_type -> tp_name ,
214
215
Py_TYPE (obj )-> tp_name );
215
- * pres = -1 ;
216
- return 1 ;
216
+ return -1 ;
217
217
}
218
218
return 0 ;
219
219
}
220
220
221
221
static int
222
222
member_set (PyMemberDescrObject * descr , PyObject * obj , PyObject * value )
223
223
{
224
- int res ;
225
-
226
- if (descr_setcheck ((PyDescrObject * )descr , obj , value , & res ))
227
- return res ;
224
+ if (descr_setcheck ((PyDescrObject * )descr , obj , value ) < 0 ) {
225
+ return -1 ;
226
+ }
228
227
return PyMember_SetOne ((char * )obj , descr -> d_member , value );
229
228
}
230
229
231
230
static int
232
231
getset_set (PyGetSetDescrObject * descr , PyObject * obj , PyObject * value )
233
232
{
234
- int res ;
235
-
236
- if (descr_setcheck ((PyDescrObject * )descr , obj , value , & res ))
237
- return res ;
238
- if (descr -> d_getset -> set != NULL )
233
+ if (descr_setcheck ((PyDescrObject * )descr , obj , value ) < 0 ) {
234
+ return -1 ;
235
+ }
236
+ if (descr -> d_getset -> set != NULL ) {
239
237
return descr -> d_getset -> set (obj , value ,
240
238
descr -> d_getset -> closure );
239
+ }
241
240
PyErr_Format (PyExc_AttributeError ,
242
241
"attribute '%V' of '%.100s' objects is not writable" ,
243
242
descr_name ((PyDescrObject * )descr ), "?" ,
@@ -264,8 +263,7 @@ method_check_args(PyObject *func, PyObject *const *args, Py_ssize_t nargs, PyObj
264
263
return -1 ;
265
264
}
266
265
PyObject * self = args [0 ];
267
- PyObject * dummy ;
268
- if (descr_check ((PyDescrObject * )func , self , & dummy )) {
266
+ if (descr_check ((PyDescrObject * )func , self ) < 0 ) {
269
267
return -1 ;
270
268
}
271
269
if (kwnames && PyTuple_GET_SIZE (kwnames )) {
0 commit comments