diff options
author | ZyX <kp-pav@yandex.ru> | 2015-12-26 01:14:26 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2016-02-02 00:46:10 +0300 |
commit | 2873a17c55b3a056e80da54bd22af625f5891417 (patch) | |
tree | 78cb8d97ea43a925f89fb83dbbbc81fecf2fe266 /src/nvim/eval.c | |
parent | 830678d5f98a061ef8da4947d0019e5acdec690f (diff) | |
download | rneovim-2873a17c55b3a056e80da54bd22af625f5891417.tar.gz rneovim-2873a17c55b3a056e80da54bd22af625f5891417.tar.bz2 rneovim-2873a17c55b3a056e80da54bd22af625f5891417.zip |
eval: Use str2float() to represent inf and nan values
Closes #3248
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index e4e7b63fe3..c360d306d4 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -6839,9 +6839,25 @@ vim_to_msgpack_error_ret: \ #define CONV_FLOAT(flt) \ do { \ - char numbuf[NUMBUFLEN]; \ - vim_snprintf(numbuf, NUMBUFLEN - 1, "%g", (flt)); \ - ga_concat(gap, (char_u *) numbuf); \ + const float_T flt_ = (flt); \ + switch (fpclassify(flt_)) { \ + case FP_NAN: { \ + ga_concat(gap, (char_u *) "str2float('nan')"); \ + break; \ + } \ + case FP_INFINITE: { \ + if (flt_ < 0) { \ + ga_append(gap, '-'); \ + } \ + ga_concat(gap, (char_u *) "str2float('inf')"); \ + break; \ + } \ + default: { \ + char numbuf[NUMBUFLEN]; \ + vim_snprintf(numbuf, NUMBUFLEN - 1, "%g", flt_); \ + ga_concat(gap, (char_u *) numbuf); \ + } \ + } \ } while (0) #define CONV_FUNC(fun) \ |