2021-08-08 04:08:33 +00:00
|
|
|
#ifndef Py_PYFPE_H
|
|
|
|
#define Py_PYFPE_H
|
2021-08-10 17:26:13 +00:00
|
|
|
COSMOPOLITAN_C_START_
|
|
|
|
/* clang-format off */
|
2021-08-08 04:08:33 +00:00
|
|
|
#ifdef WANT_SIGFPE_HANDLER
|
|
|
|
extern jmp_buf PyFPE_jbuf;
|
|
|
|
extern int PyFPE_counter;
|
|
|
|
extern double PyFPE_dummy(void *);
|
|
|
|
#define PyFPE_START_PROTECT(err_string, leave_stmt) \
|
|
|
|
if (!PyFPE_counter++ && setjmp(PyFPE_jbuf)) { \
|
|
|
|
PyErr_SetString(PyExc_FloatingPointError, err_string); \
|
|
|
|
PyFPE_counter = 0; \
|
|
|
|
leave_stmt; \
|
|
|
|
}
|
|
|
|
#define PyFPE_END_PROTECT(v) PyFPE_counter -= (int)PyFPE_dummy(&(v));
|
|
|
|
#else
|
|
|
|
#define PyFPE_START_PROTECT(err_string, leave_stmt)
|
|
|
|
#define PyFPE_END_PROTECT(v)
|
|
|
|
#endif
|
2021-08-10 17:26:13 +00:00
|
|
|
COSMOPOLITAN_C_END_
|
2021-08-08 04:08:33 +00:00
|
|
|
#endif /* !Py_PYFPE_H */
|