@@ -2146,15 +2146,17 @@ static PyObject *WraptFunctionWrapperBase_descr_get(
21462146 }
21472147
21482148 if (self -> parent == Py_None ) {
2149- descrgetfunc descr_get ;
2149+ PyObject * descr_get ;
21502150 if (PyObject_IsInstance (self -> object_proxy .wrapped ,
21512151 (PyObject * )& PyType_Type )) {
21522152 Py_INCREF (self );
21532153 return (PyObject * )self ;
21542154 }
21552155
2156- descr_get = (descrgetfunc )PyType_GetSlot (
2157- Py_TYPE (self -> object_proxy .wrapped ), Py_tp_descr_get );
2156+ /* Cannot use Py_tp_descr_get with non-heap types */
2157+ descr_get = PyObject_GetAttrString (
2158+ Py_TYPE (self -> object_proxy .wrapped ), "__get__"
2159+ );
21582160 if (descr_get == NULL ) {
21592161 PyObject * name = type_getname (Py_TYPE (self -> object_proxy .wrapped ));
21602162 if (name == NULL ) {
@@ -2167,9 +2169,9 @@ static PyObject *WraptFunctionWrapperBase_descr_get(
21672169 return NULL ;
21682170 }
21692171
2170- descriptor = descr_get (
2171- self -> object_proxy .wrapped , obj , type );
2172-
2172+ descriptor = PyObject_CallFunctionObjArgs (
2173+ descr_get , self -> object_proxy .wrapped , obj , type , NULL );
2174+ Py_DECREF ( descr_get );
21732175 if (!descriptor )
21742176 return NULL ;
21752177
@@ -2202,7 +2204,7 @@ static PyObject *WraptFunctionWrapperBase_descr_get(
22022204 PyObject * wrapped = NULL ;
22032205
22042206 static PyObject * wrapped_str = NULL ;
2205- descrgetfunc descr_get ;
2207+ PyObject * descr_get ;
22062208
22072209 if (!wrapped_str ) {
22082210 wrapped_str = PyUnicode_InternFromString ("__wrapped__" );
@@ -2213,9 +2215,10 @@ static PyObject *WraptFunctionWrapperBase_descr_get(
22132215 if (!wrapped )
22142216 return NULL ;
22152217
2216- descr_get = (descrgetfunc )PyType_GetSlot (
2217- Py_TYPE (wrapped ), Py_tp_descr_get );
2218-
2218+ /* Cannot use Py_tp_descr_get with non-heap types */
2219+ descr_get = PyObject_GetAttrString (
2220+ Py_TYPE (self -> object_proxy .wrapped ), "__get__"
2221+ );
22192222 if (descr_get == NULL ) {
22202223 PyObject * name = type_getname (Py_TYPE (wrapped ));
22212224 if (name == NULL ) {
@@ -2230,8 +2233,9 @@ static PyObject *WraptFunctionWrapperBase_descr_get(
22302233 return NULL ;
22312234 }
22322235
2233- descriptor = descr_get (wrapped , obj , type );
2234-
2236+ descriptor = PyObject_CallFunctionObjArgs (
2237+ descr_get , wrapped , obj , type , NULL );
2238+ Py_DECREF (descr_get );
22352239 Py_DECREF (wrapped );
22362240
22372241 if (!descriptor )
0 commit comments