@@ -414,6 +414,7 @@ slp_register_execute(PyTypeObject *t, char *name, PyFrame_ExecFunc *good,
414
414
{
415
415
PyObject * g = NULL , * b = NULL , * nameobj = NULL ;
416
416
PyObject * tup = NULL , * dic = NULL ;
417
+ PyObject * o ;
417
418
proxyobject * dp = NULL ;
418
419
int ret = -1 ;
419
420
@@ -446,20 +447,17 @@ slp_register_execute(PyTypeObject *t, char *name, PyFrame_ExecFunc *good,
446
447
Py_INCREF (dp );
447
448
}
448
449
if (0
449
- || PyDict_GetItem (dp -> dict , nameobj ) != NULL
450
- || PyDict_GetItem (dp -> dict , g ) != NULL
451
- || PyDict_GetItem (dp -> dict , b ) != NULL
450
+ || (o = PyDict_SetDefault (dp -> dict , nameobj , tup )) == NULL
451
+ || !PyObject_RichCompareBool (o , tup , Py_EQ )
452
+ || (o = PyDict_SetDefault (dp -> dict , g , nameobj )) == NULL
453
+ || !PyObject_RichCompareBool (o , nameobj , Py_EQ )
454
+ || (o = PyDict_SetDefault (dp -> dict , b , nameobj )) == NULL
455
+ || !PyObject_RichCompareBool (o , nameobj , Py_EQ )
452
456
) {
453
- PyErr_SetString ( PyExc_SystemError ,
454
- "duplicate/ambiguous exec func" );
457
+ if (! PyErr_Occurred ())
458
+ PyErr_SetString ( PyExc_SystemError , "duplicate/ambiguous exec func" );
455
459
goto err_exit ;
456
460
}
457
- if (0
458
- || PyDict_SetItem (dp -> dict , nameobj , tup )
459
- || PyDict_SetItem (dp -> dict , g , nameobj )
460
- || PyDict_SetItem (dp -> dict , b , nameobj )
461
- )
462
- goto err_exit ;
463
461
PyErr_Clear ();
464
462
ret = 0 ;
465
463
err_exit :
0 commit comments