Mercurial > vim
comparison src/eval.c @ 8228:a0e552c51c34 v7.4.1407
commit https://github.com/vim/vim/commit/f1b6ac72293e658bb6e68c5cfd926c405b1b6f34
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Feb 23 21:26:43 2016 +0100
patch 7.4.1407
Problem: json_encode() does not handle NaN and inf properly. (David
Barnett)
Solution: For JSON turn them into "null". For JS use "NaN" and "Infinity".
Add isnan().
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 23 Feb 2016 21:30:08 +0100 |
parents | 3456e2ebebd4 |
children | 51ca0cee512e |
comparison
equal
deleted
inserted
replaced
8227:f26bb0f9a8b9 | 8228:a0e552c51c34 |
---|---|
626 static void f_inputsecret(typval_T *argvars, typval_T *rettv); | 626 static void f_inputsecret(typval_T *argvars, typval_T *rettv); |
627 static void f_insert(typval_T *argvars, typval_T *rettv); | 627 static void f_insert(typval_T *argvars, typval_T *rettv); |
628 static void f_invert(typval_T *argvars, typval_T *rettv); | 628 static void f_invert(typval_T *argvars, typval_T *rettv); |
629 static void f_isdirectory(typval_T *argvars, typval_T *rettv); | 629 static void f_isdirectory(typval_T *argvars, typval_T *rettv); |
630 static void f_islocked(typval_T *argvars, typval_T *rettv); | 630 static void f_islocked(typval_T *argvars, typval_T *rettv); |
631 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) | |
632 static void f_isnan(typval_T *argvars, typval_T *rettv); | |
633 #endif | |
631 static void f_items(typval_T *argvars, typval_T *rettv); | 634 static void f_items(typval_T *argvars, typval_T *rettv); |
632 #ifdef FEAT_JOB | 635 #ifdef FEAT_JOB |
633 # ifdef FEAT_CHANNEL | 636 # ifdef FEAT_CHANNEL |
634 static void f_job_getchannel(typval_T *argvars, typval_T *rettv); | 637 static void f_job_getchannel(typval_T *argvars, typval_T *rettv); |
635 # endif | 638 # endif |
8318 {"inputsecret", 1, 2, f_inputsecret}, | 8321 {"inputsecret", 1, 2, f_inputsecret}, |
8319 {"insert", 2, 3, f_insert}, | 8322 {"insert", 2, 3, f_insert}, |
8320 {"invert", 1, 1, f_invert}, | 8323 {"invert", 1, 1, f_invert}, |
8321 {"isdirectory", 1, 1, f_isdirectory}, | 8324 {"isdirectory", 1, 1, f_isdirectory}, |
8322 {"islocked", 1, 1, f_islocked}, | 8325 {"islocked", 1, 1, f_islocked}, |
8326 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) | |
8327 {"isnan", 1, 1, f_isnan}, | |
8328 #endif | |
8323 {"items", 1, 1, f_items}, | 8329 {"items", 1, 1, f_items}, |
8324 #ifdef FEAT_JOB | 8330 #ifdef FEAT_JOB |
8325 # ifdef FEAT_CHANNEL | 8331 # ifdef FEAT_CHANNEL |
8326 {"job_getchannel", 1, 1, f_job_getchannel}, | 8332 {"job_getchannel", 1, 1, f_job_getchannel}, |
8327 # endif | 8333 # endif |
14737 } | 14743 } |
14738 } | 14744 } |
14739 | 14745 |
14740 clear_lval(&lv); | 14746 clear_lval(&lv); |
14741 } | 14747 } |
14748 | |
14749 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H) | |
14750 /* | |
14751 * "isnan()" function | |
14752 */ | |
14753 static void | |
14754 f_isnan(typval_T *argvars, typval_T *rettv) | |
14755 { | |
14756 rettv->vval.v_number = argvars[0].v_type == VAR_FLOAT | |
14757 && isnan(argvars[0].vval.v_float); | |
14758 } | |
14759 #endif | |
14742 | 14760 |
14743 static void dict_list(typval_T *argvars, typval_T *rettv, int what); | 14761 static void dict_list(typval_T *argvars, typval_T *rettv, int what); |
14744 | 14762 |
14745 /* | 14763 /* |
14746 * Turn a dict into a list: | 14764 * Turn a dict into a list: |