Use the correct macros isnan, isinf for libc compatibility

Changes related to this commit:

- Clean up #if mess.

- Use unconditionally the correct macros isnan, isinf.

- Remove redudant macros from the build system.

Signed-off-by: Matías Fonzo <selk@dragora.org>
pull/67/head
Matías Fonzo 4 years ago committed by TDE Gitea
parent aa9b9581a9
commit 8ae17a5d9d

@ -395,10 +395,6 @@ check_function_exists( setgroups HAVE_SETGROUPS )
check_function_exists( setlocale HAVE_SETLOCALE )
check_function_exists( setmntent HAVE_SETMNTENT )
check_function_exists( setpriority HAVE_SETPRIORITY )
check_function_exists( isnan HAVE_FUNC_ISNAN )
check_function_exists( _finite HAVE_FUNC__FINITE )
check_function_exists( finite HAVE_FUNC_FINITE )
check_function_exists( isinf HAVE_FUNC_ISINF )
check_function_exists( freeaddrinfo HAVE_FREEADDRINFO )
check_function_exists( strtoll HAVE_STRTOLL )
check_function_exists( socket HAVE_SOCKET )

@ -212,18 +212,6 @@
/* Define to 1 if you have the <fstab.h> header file. */
#cmakedefine HAVE_FSTAB_H 1
/* Define if you have finite */
#cmakedefine HAVE_FUNC_FINITE 1
/* Define if you have isinf */
#cmakedefine HAVE_FUNC_ISINF 1
/* Define if you have isnan */
#cmakedefine HAVE_FUNC_ISNAN 1
/* Define if you have _finite */
#cmakedefine HAVE_FUNC__FINITE 1
/* Define to 1 if you have the `gai_strerror' function. */
#cmakedefine HAVE_GAI_STRERROR 1

@ -1,46 +1,6 @@
dnl KDE JavaScript specific configure tests
AC_CHECK_HEADERS(ieeefp.h float.h)
AC_CHECK_LIB(m, finite, [
AC_DEFINE_UNQUOTED(HAVE_FUNC_FINITE, 1, [Define if you have finite])
])
AC_CHECK_LIB(m, _finite, [
AC_DEFINE_UNQUOTED(HAVE_FUNC__FINITE, 1, [Define if you have _finite])
])
dnl The C99 standard says that isinf and isnan are macros, but they might
dnl be functions on some platforms.
AC_DEFUN([AC_CHECK_ISNAN],
[
ac_save_libs="$LIBS"
LIBS="-lm"
AC_MSG_CHECKING([for isnan with <math.h>])
AC_TRY_LINK(
[#include <math.h>
float f;], [return isnan(f)],
[AC_MSG_RESULT(yes)
AC_DEFINE([HAVE_FUNC_ISNAN], [1], [Define if you have isnan])],
AC_MSG_RESULT(no)
)
LIBS="$ac_save_libs"
])
AC_DEFUN([AC_CHECK_ISINF],
[
ac_save_libs="$LIBS"
LIBS="-lm"
AC_MSG_CHECKING([for isinf with <math.h>])
AC_TRY_LINK(
[#include <math.h>
float f;], [return isinf(f)],
[AC_MSG_RESULT(yes)
AC_DEFINE([HAVE_FUNC_ISINF], [1], [Define if you have isinf])],
AC_MSG_RESULT(no)
)
LIBS="$ac_save_libs"
])
AC_CHECK_ISNAN
AC_CHECK_ISINF
AC_DEFUN([AC_CHECK_PCREPOSIX],
[

@ -25,7 +25,6 @@
#endif
#ifndef HAVE_FLOAT_H /* just for !Windows */
#define HAVE_FLOAT_H 0
#define HAVE_FUNC__FINITE 0
#endif
#include <stdio.h>
@ -38,11 +37,9 @@
#include <sunmath.h>
#endif
#ifndef HAVE_FUNC_ISINF
#ifdef HAVE_IEEEFP_H
#include <ieeefp.h>
#endif
#endif /* HAVE_FUNC_ISINF */
#if HAVE_FLOAT_H
#include <float.h>
@ -55,52 +52,22 @@ using namespace KJS;
bool KJS::isNaN(double d)
{
#ifdef HAVE_FUNC_ISNAN
return isnan(d);
#elif defined HAVE_FLOAT_H
return _isnan(d) != 0;
#else
return !(d == d);
#endif
}
bool KJS::isInf(double d)
{
#if defined(HAVE_FUNC_ISINF)
return isinf(d);
#elif HAVE_FUNC_FINITE
return finite(d) == 0 && d == d;
#elif HAVE_FUNC__FINITE
return _finite(d) == 0 && d == d;
#else
return false;
#endif
}
bool KJS::isPosInf(double d)
{
#if defined(HAVE_FUNC_ISINF)
return (isinf(d) == 1);
#elif HAVE_FUNC_FINITE
return finite(d) == 0 && d == d; // ### can we distinguish between + and - ?
#elif HAVE_FUNC__FINITE
return _finite(d) == 0 && d == d; // ###
#else
return false;
#endif
return ( isinf(d) && d > 0 );
}
bool KJS::isNegInf(double d)
{
#if defined(HAVE_FUNC_ISINF)
return (isinf(d) == -1);
#elif HAVE_FUNC_FINITE
return finite(d) == 0 && d == d; // ###
#elif HAVE_FUNC__FINITE
return _finite(d) == 0 && d == d; // ###
#else
return false;
#endif
return ( isinf(d) && d < 0 );
}
// ECMA 11.9.3

Loading…
Cancel
Save