bpo-42979: Enhance abstract.c assertions checking slot result (GH-24352)

* bpo-42979: Enhance abstract.c assertions checking slot result

Add _Py_CheckSlotResult() function which fails with a fatal error if
a slot function succeeded with an exception set or failed with no
exception set: write the slot name, the type name and the current
exception (if an exception is set).
This commit is contained in:
Victor Stinner 2021-01-27 17:39:16 +01:00 committed by GitHub
parent eeb701adc0
commit c9b8e9c421
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 126 additions and 51 deletions

View file

@ -376,4 +376,4 @@ PyAPI_FUNC(void) _Py_add_one_to_index_C(int nd, Py_ssize_t *index,
PyAPI_FUNC(int) _Py_convert_optional_to_ssize_t(PyObject *, void *);
/* Same as PyNumber_Index but can return an instance of a subclass of int. */
PyAPI_FUNC(PyObject *) _PyNumber_Index(PyObject *o);
PyAPI_FUNC(PyObject *) _PyNumber_Index(PyObject *o);

View file

@ -168,6 +168,12 @@ _PyObject_IS_GC(PyObject *obj)
// Fast inlined version of PyType_IS_GC()
#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
// Usage: assert(_Py_CheckSlotResult(obj, "__getitem__", result != NULL)));
extern int _Py_CheckSlotResult(
PyObject *obj,
const char *slot_name,
int success);
#ifdef __cplusplus
}
#endif