New submission from STINNER Victor <[email protected]>:
If the HAVE_DECL_ISINF macro is not defined in pyconfig.h, the Py_IS_INFINITY
macro is defined as:
#define Py_IS_INFINITY(X) \
((X) && (Py_FORCE_DOUBLE(X)*0.5 == Py_FORCE_DOUBLE(X)))
Problem: Py_FORCE_DOUBLE() is excluded from the limited C API (and the stable
ABI).
I see different options:
* Implement Py_IS_INFINITY() as an opaque function if the HAVE_DECL_ISINF macro
is not defined. I did something similar in Py_INCREF() to support the limited C
API with a debug build of Python: call _Py_IncRef() opaque function.
* Make Py_FORCE_DOUBLE() private and add it to the limited C API as an
implementation detail.
* Add Py_FORCE_DOUBLE() macro to the limited C API: the current implementation
is fragile, it depends on how Python.h is included. Also, I dislike macros in
the limited C API.
I would prefer to *remove* Py_FORCE_DOUBLE() to all APIs, than adding it to the
limited C API.
----------
components: C API
messages: 403704
nosy: vstinner
priority: normal
severity: normal
status: open
title: [C API] Py_IS_INFINITY() macro doesn't work in the limited C API if
isinf() is not defined
versions: Python 3.11
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue45440>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com