changeset 8230:51ca0cee512e v7.4.1408

commit https://github.com/vim/vim/commit/3ea0f1ae318db6cd9413914bb2ff824d71cefc6e Author: Bram Moolenaar <Bram@vim.org> Date: Tue Feb 23 22:07:32 2016 +0100 patch 7.4.1408 Problem: MS-Windows doesn't have isnan() and isinf(). Solution: Use _isnan() and _isinf().
author Christian Brabandt <cb@256bit.org>
date Tue, 23 Feb 2016 22:15:05 +0100
parents 8ac9d0ab3ef8
children 5ace03b16fcd
files src/eval.c src/json.c src/version.c
diffstat 3 files changed, 26 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -27,8 +27,14 @@
 # include <time.h>	/* for time_t */
 #endif
 
-#if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
-# include <math.h>
+#if defined(FEAT_FLOAT)
+# include <float.h>
+# if defined(HAVE_MATH_H)
+#  include <math.h>
+# endif
+# if defined(WIN32) && !defined(isnan)
+#  define isnan(x) _isnan(x)
+# endif
 #endif
 
 #define DICT_MAXNEST 100	/* maximum nesting of lists and dicts */
--- a/src/json.c
+++ b/src/json.c
@@ -17,9 +17,20 @@
 
 #if defined(FEAT_EVAL) || defined(PROTO)
 
-#if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
-  /* for isnan() and isinf() */
-# include <math.h>
+#if defined(FEAT_FLOAT)
+# include <float.h>
+# if defined(HAVE_MATH_H)
+   /* for isnan() and isinf() */
+#  include <math.h>
+# endif
+# if defined(WIN32) && !defined(isnan)
+#  define isnan(x) _isnan(x)
+#  define isinf(x) (!_finite(x) && !_isnan(x))
+# endif
+# if defined(_MSC_VER) && !defined(INFINITY)
+#  define INFINITY (DBL_MAX+DBL_MAX)
+#  define NAN (INFINITY-INFINITY)
+# endif
 #endif
 
 static int json_encode_item(garray_T *gap, typval_T *val, int copyID, int options);
@@ -745,7 +756,7 @@ json_decode_item(js_read_T *reader, typv
 		if (res != NULL)
 		{
 		    res->v_type = VAR_FLOAT;
-		    res->vval.v_float = 0.0 / 0.0;
+		    res->vval.v_float = NAN;
 		}
 		return OK;
 	    }
@@ -755,7 +766,7 @@ json_decode_item(js_read_T *reader, typv
 		if (res != NULL)
 		{
 		    res->v_type = VAR_FLOAT;
-		    res->vval.v_float = 1.0 / 0.0;
+		    res->vval.v_float = INFINITY;
 		}
 		return OK;
 	    }
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1408,
+/**/
     1407,
 /**/
     1406,