summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-02-27 16:33:22 +0100
committerBram Moolenaar <Bram@vim.org>2016-02-27 16:33:22 +0100
commit7ce686c990ea8c490d16be7f1c6bd95eb48816f9 (patch)
tree6b507613c77479f9e5a94600bc2a332d657ee363 /src
parentd804fdf4c25435284333258856bc265f1ff10b09 (diff)
downloadvim-git-7ce686c990ea8c490d16be7f1c6bd95eb48816f9.tar.gz
patch 7.4.1430v7.4.1430
Problem: When encoding JSON, turning NaN and Infinity into null without giving an error is not useful. Solution: Pass NaN and Infinity on. If the receiver can't handle them it will generate the error.
Diffstat (limited to 'src')
-rw-r--r--src/json.c10
-rw-r--r--src/testdir/test_json.vim14
-rw-r--r--src/version.c2
3 files changed, 13 insertions, 13 deletions
diff --git a/src/json.c b/src/json.c
index 1a3dea1e5..a42faec0d 100644
--- a/src/json.c
+++ b/src/json.c
@@ -27,8 +27,10 @@
# define isnan(x) _isnan(x)
# define isinf(x) (!_finite(x) && !_isnan(x))
# endif
-# if defined(_MSC_VER) && !defined(INFINITY)
+# if !defined(INFINITY) && defined(DBL_MAX)
# define INFINITY (DBL_MAX+DBL_MAX)
+# endif
+# if !defined(NAN) && defined(INFINITY)
# define NAN (INFINITY-INFINITY)
# endif
#endif
@@ -285,12 +287,10 @@ json_encode_item(garray_T *gap, typval_T *val, int copyID, int options)
case VAR_FLOAT:
#ifdef FEAT_FLOAT
# if defined(HAVE_MATH_H)
- if ((options & JSON_JS) && isnan(val->vval.v_float))
+ if (isnan(val->vval.v_float))
ga_concat(gap, (char_u *)"NaN");
- else if ((options & JSON_JS) && isinf(val->vval.v_float))
+ else if (isinf(val->vval.v_float))
ga_concat(gap, (char_u *)"Infinity");
- else if (isnan(val->vval.v_float) || isinf(val->vval.v_float))
- ga_concat(gap, (char_u *)"null");
else
# endif
{
diff --git a/src/testdir/test_json.vim b/src/testdir/test_json.vim
index bde732173..6c19b30fd 100644
--- a/src/testdir/test_json.vim
+++ b/src/testdir/test_json.vim
@@ -19,11 +19,9 @@ let s:varnr = 1234
if has('float')
let s:jsonfl = '12.34'
let s:varfl = 12.34
- let s:jsoninf = 'null'
- let s:jsinf = 'Infinity'
+ let s:jsoninf = 'Infinity'
let s:varinf = 1.0 / 0.0
- let s:jsonnan = 'null'
- let s:jsnan = 'NaN'
+ let s:jsonnan = 'NaN'
let s:varnan = 0.0 / 0.0
endif
@@ -175,8 +173,8 @@ func Test_js_encode()
call assert_equal(s:jsonnr, js_encode(s:varnr))
if has('float')
call assert_equal(s:jsonfl, js_encode(s:varfl))
- call assert_equal(s:jsinf, js_encode(s:varinf))
- call assert_equal(s:jsnan, js_encode(s:varnan))
+ call assert_equal(s:jsoninf, js_encode(s:varinf))
+ call assert_equal(s:jsonnan, js_encode(s:varnan))
endif
call assert_equal(s:jsonl1, js_encode(s:varl1))
@@ -213,8 +211,8 @@ func Test_js_decode()
call assert_equal(s:varnr, js_decode(s:jsonnr))
if has('float')
call assert_equal(s:varfl, js_decode(s:jsonfl))
- call assert_equal(s:varinf, js_decode(s:jsinf))
- call assert_true(isnan(js_decode(s:jsnan)))
+ call assert_equal(s:varinf, js_decode(s:jsoninf))
+ call assert_true(isnan(js_decode(s:jsonnan)))
endif
call assert_equal(s:varl1, js_decode(s:jsonl1))
diff --git a/src/version.c b/src/version.c
index 4fde2fe85..fc8ae7e91 100644
--- 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 */
/**/
+ 1430,
+/**/
1429,
/**/
1428,