diff options
author | Sebastian Berg <sebastianb@nvidia.com> | 2023-05-10 16:44:52 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-10 16:44:52 (GMT) |
commit | 7a3b03509e5e3e72d8c47137579cccb52548a318 (patch) | |
tree | cbb1adddb46665552cb1e93ccae135aac0507e80 /Python/pystrtod.c | |
parent | a7a2dbbf72aceef61bfb50901bfa39bfb8d6d229 (diff) | |
download | cpython-7a3b03509e5e3e72d8c47137579cccb52548a318.zip cpython-7a3b03509e5e3e72d8c47137579cccb52548a318.tar.gz cpython-7a3b03509e5e3e72d8c47137579cccb52548a318.tar.bz2 |
gh-104263: Rely on Py_NAN and introduce Py_INFINITY (GH-104202)
This PR removes `_Py_dg_stdnan` and `_Py_dg_infinity` in favour of
using the standard `NAN` and `INFINITY` macros provided by C99.
This change has the side-effect of fixing a bug on MIPS where the
hard-coded value used by `_Py_dg_stdnan` gave a signalling NaN
rather than a quiet NaN.
---------
Co-authored-by: Mark Dickinson <dickinsm@gmail.com>
Diffstat (limited to 'Python/pystrtod.c')
-rw-r--r-- | Python/pystrtod.c | 41 |
1 files changed, 1 insertions, 40 deletions
diff --git a/Python/pystrtod.c b/Python/pystrtod.c index d77b846..9bb060e 100644 --- a/Python/pystrtod.c +++ b/Python/pystrtod.c @@ -23,44 +23,6 @@ case_insensitive_match(const char *s, const char *t) return the NaN or Infinity as a double and set *endptr to point just beyond the successfully parsed portion of the string. On failure, return -1.0 and set *endptr to point to the start of the string. */ - -#if _PY_SHORT_FLOAT_REPR == 1 - -double -_Py_parse_inf_or_nan(const char *p, char **endptr) -{ - double retval; - const char *s; - int negate = 0; - - s = p; - if (*s == '-') { - negate = 1; - s++; - } - else if (*s == '+') { - s++; - } - if (case_insensitive_match(s, "inf")) { - s += 3; - if (case_insensitive_match(s, "inity")) - s += 5; - retval = _Py_dg_infinity(negate); - } - else if (case_insensitive_match(s, "nan")) { - s += 3; - retval = _Py_dg_stdnan(negate); - } - else { - s = p; - retval = -1.0; - } - *endptr = (char *)s; - return retval; -} - -#else - double _Py_parse_inf_or_nan(const char *p, char **endptr) { @@ -84,7 +46,7 @@ _Py_parse_inf_or_nan(const char *p, char **endptr) } else if (case_insensitive_match(s, "nan")) { s += 3; - retval = negate ? -Py_NAN : Py_NAN; + retval = negate ? -fabs(Py_NAN) : fabs(Py_NAN); } else { s = p; @@ -94,7 +56,6 @@ _Py_parse_inf_or_nan(const char *p, char **endptr) return retval; } -#endif /** * _PyOS_ascii_strtod: |