@@ -291,7 +291,9 @@ _hpy_extract_pyvals(HPyContext *ctx, HPy h_ref, const char *name, int *bufsize,
291
291
* errmask = UFUNC_ERR_DEFAULT ;
292
292
}
293
293
if (errobj ) {
294
- * errobj = HPy_BuildValue (ctx , "NO" , HPyBytes_FromString (ctx , name ), ctx -> h_None );
294
+ HPy h_name = HPyBytes_FromString (ctx , name );
295
+ * errobj = HPy_BuildValue (ctx , "OO" , h_name , ctx -> h_None );
296
+ HPy_Close (ctx , h_name );
295
297
}
296
298
if (bufsize ) {
297
299
* bufsize = NPY_BUFSIZE ;
@@ -305,13 +307,12 @@ _hpy_extract_pyvals(HPyContext *ctx, HPy h_ref, const char *name, int *bufsize,
305
307
if (errobj ) {
306
308
PyObject * py_errobj = NULL ;
307
309
result = _extract_pyvals (py_ref , name , bufsize , errmask , & py_errobj );
308
- Py_DECREF (py_ref );
309
310
* errobj = HPy_FromPyObject (ctx , py_errobj );
310
- Py_DECREF (py_errobj );
311
+ Py_XDECREF (py_errobj );
311
312
} else {
312
313
result = _extract_pyvals (py_ref , name , bufsize , errmask , NULL );
313
- Py_DECREF (py_ref );
314
314
}
315
+ Py_DECREF (py_ref );
315
316
return result ;
316
317
}
317
318
@@ -334,7 +335,7 @@ _check_ufunc_fperr(int errmask, PyObject *extobj, const char *ufunc_name) {
334
335
NPY_NO_EXPORT int
335
336
_hpy_check_ufunc_fperr (HPyContext * ctx , int errmask , HPy extobj , const char * ufunc_name ) {
336
337
int fperr ;
337
- // HPy errobj = HPy_NULL;
338
+ HPy errobj = HPy_NULL ;
338
339
int ret;
339
340
int first = 1 ;
340
341
int close_extobj = 0 ;
@@ -347,28 +348,25 @@ _hpy_check_ufunc_fperr(HPyContext *ctx, int errmask, HPy extobj, const char *ufu
347
348
return 0 ;
348
349
}
349
350
350
- CAPI_WARN ("_hpy_check_ufunc_fperr" );
351
-
352
351
/* Get error object globals */
353
352
if (HPy_IsNull (extobj )) {
354
- extobj = HPy_FromPyObject (ctx , get_global_ext_obj () );
353
+ extobj = hpy_get_global_ext_obj (ctx );
355
354
if (HPy_IsNull (extobj ) && HPyErr_Occurred (ctx )) {
356
355
return -1 ;
357
356
}
358
357
close_extobj = 1 ;
359
358
}
360
- PyObject * py_extobj = HPy_AsPyObject (ctx , extobj );
361
- PyObject * py_errobj = NULL ;
362
- int r = _extract_pyvals (py_extobj , ufunc_name , NULL , NULL , & py_errobj );
359
+ int r = _hpy_extract_pyvals (ctx , extobj , ufunc_name , NULL , NULL , & errobj );
363
360
if (close_extobj ) {
364
361
HPy_Close (ctx , extobj );
365
362
}
366
363
if (r < 0 ) {
367
- // HPy_Close(ctx, errobj);
368
- Py_XDECREF (py_errobj );
364
+ HPy_Close (ctx , errobj );
369
365
return -1 ;
370
366
}
371
367
368
+ CAPI_WARN ("_hpy_check_ufunc_fperr" );
369
+ PyObject * py_errobj = HPy_IsNull (errobj ) ? NULL : HPy_AsPyObject (ctx , errobj );
372
370
ret = PyUFunc_handlefperr (errmask , py_errobj , fperr , & first );
373
371
// HPy_Close(ctx, errobj);
374
372
Py_XDECREF (py_errobj );
@@ -414,4 +412,4 @@ _hpy_get_bufsize_errmask(HPyContext *ctx, HPy extobj, const char *ufunc_name,
414
412
}
415
413
416
414
return 0 ;
417
- }
415
+ }
0 commit comments