summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tclBasic.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c
index 22c8113..316a87d 100644
--- a/generic/tclBasic.c
+++ b/generic/tclBasic.c
@@ -23,9 +23,9 @@
#include "tommath.h"
#include <math.h>
#include <assert.h>
-#if defined(_MSC_VER) && (_MSC_VER <= 1200)
+#ifndef fpclassify /* Older MSVC */
#include <float.h>
-#endif /* defined(_MSC_VER) && (_MSC_VER <= 1200) */
+#endif /* !fpclassify */
#define INTERP_STACK_INITIAL_SIZE 2000
#define CORO_STACK_INITIAL_SIZE 200
@@ -8319,14 +8319,21 @@ ExprSrandFunc(
*----------------------------------------------------------------------
*/
+/*
+ * Older MSVC is supported by Tcl, but doesn't have fpclassify(). Of course.
+ * But it does have _fpclass() which does almost the same job.
+ *
+ * This makes it conform to the C99 standard API, and just delegates to the
+ * standard macro on platforms that do it correctly.
+ */
+
static inline int
ClassifyDouble(
double d)
{
-#if defined(_MSC_VER) && (_MSC_VER <= 1200)
- /*
- * MSVC6 is supported by Tcl, but doesn't have fpclassify(). Of course.
- */
+#ifdef fpclassify
+ return fpclassify(d);
+#else /* !fpclassify */
#define FP_ZERO 0
#define FP_NORMAL 1
#define FP_SUBNORMAL 2
@@ -8352,9 +8359,7 @@ ClassifyDouble(
case _FPCLASS_SNAN:
return FP_NAN;
}
-#else /* !defined(_MSC_VER) || (_MSC_VER > 1200) */
- return fpclassify(d);
-#endif /* defined(_MSC_VER) && (_MSC_VER <= 1200) */
+#endif /* fpclassify */
}
static int