Patch 8.1.0731
Problem:    JS encoding does not handle negative infinity.
Solution:   Add support for negative infinity for JS encoding. (Dominique
            Pelle, closes #3792)
Files:      runtime/doc/eval.txt, src/json.c, src/testdir/test_json.vim


*** ../vim-8.1.0730/runtime/doc/eval.txt        2019-01-11 14:49:25.380107431 
+0100
--- runtime/doc/eval.txt        2019-01-12 14:20:11.501189651 +0100
***************
*** 5706,5712 ****
                  "[1, 2, ]" is the same as "[1, 2]".
                - More floating point numbers are recognized, e.g. "1." for
                  "1.0", or "001.2" for "1.2". Special floating point values
!                 "Infinity" and "NaN" (capitalization ignored) are accepted.
                - Leading zeroes in integer numbers are ignored, e.g. "012"
                  for "12" or "-012" for "-12".
                - Capitalization is ignored in literal names null, true or
--- 5726,5733 ----
                  "[1, 2, ]" is the same as "[1, 2]".
                - More floating point numbers are recognized, e.g. "1." for
                  "1.0", or "001.2" for "1.2". Special floating point values
!                 "Infinity", "-Infinity" and "NaN" (capitalization ignored)
!                 are accepted.
                - Leading zeroes in integer numbers are ignored, e.g. "012"
                  for "12" or "-012" for "-12".
                - Capitalization is ignored in literal names null, true or
***************
*** 5735,5740 ****
--- 5756,5762 ----
                   Float                floating point number
                   Float nan            "NaN"
                   Float inf            "Infinity"
+                  Float -inf           "-Infinity"
                   String               in double quotes (possibly null)
                   Funcref              not possible, error
                   List                 as an array (possibly null); when
*** ../vim-8.1.0730/src/json.c  2018-12-21 16:04:16.324437435 +0100
--- src/json.c  2019-01-12 14:20:11.501189651 +0100
***************
*** 316,322 ****
            if (isnan(val->vval.v_float))
                ga_concat(gap, (char_u *)"NaN");
            else if (isinf(val->vval.v_float))
!               ga_concat(gap, (char_u *)"Infinity");
            else
  # endif
            {
--- 316,327 ----
            if (isnan(val->vval.v_float))
                ga_concat(gap, (char_u *)"NaN");
            else if (isinf(val->vval.v_float))
!           {
!               if (val->vval.v_float < 0.0)
!                   ga_concat(gap, (char_u *)"-Infinity");
!               else
!                   ga_concat(gap, (char_u *)"Infinity");
!           }
            else
  # endif
            {
***************
*** 736,742 ****
                    break;
  
                default:
!                   if (VIM_ISDIGIT(*p) || *p == '-')
                    {
  #ifdef FEAT_FLOAT
                        char_u  *sp = p;
--- 741,747 ----
                    break;
  
                default:
!                   if (VIM_ISDIGIT(*p) || (*p == '-' && VIM_ISDIGIT(p[1])))
                    {
  #ifdef FEAT_FLOAT
                        char_u  *sp = p;
***************
*** 834,839 ****
--- 839,855 ----
                        retval = OK;
                        break;
                    }
+                   if (STRNICMP((char *)p, "-Infinity", 9) == 0)
+                   {
+                       reader->js_used += 9;
+                       if (cur_item != NULL)
+                       {
+                           cur_item->v_type = VAR_FLOAT;
+                           cur_item->vval.v_float = -INFINITY;
+                       }
+                       retval = OK;
+                       break;
+                   }
                    if (STRNICMP((char *)p, "Infinity", 8) == 0)
                    {
                        reader->js_used += 8;
***************
*** 851,856 ****
--- 867,873 ----
                    if (
                            (len < 5 && STRNICMP((char *)p, "false", len) == 0)
  #ifdef FEAT_FLOAT
+                           || (len < 9 && STRNICMP((char *)p, "-Infinity", 
len) == 0)
                            || (len < 8 && STRNICMP((char *)p, "Infinity", len) 
== 0)
                            || (len < 3 && STRNICMP((char *)p, "NaN", len) == 0)
  #endif
***************
*** 1072,1078 ****
   * Return FAIL if the message has a decoding error.
   * Return MAYBE if the message is truncated, need to read more.
   * This only works reliable if the message contains an object, array or
!  * string.  A number might be trucated without knowing.
   * Does not advance the reader.
   */
      int
--- 1089,1095 ----
   * Return FAIL if the message has a decoding error.
   * Return MAYBE if the message is truncated, need to read more.
   * This only works reliable if the message contains an object, array or
!  * string.  A number might be truncated without knowing.
   * Does not advance the reader.
   */
      int
*** ../vim-8.1.0730/src/testdir/test_json.vim   2018-03-13 13:06:11.000000000 
+0100
--- src/testdir/test_json.vim   2019-01-12 14:20:11.501189651 +0100
***************
*** 29,36 ****
  if has('float')
    let s:jsonfl = '12.34'
    let s:varfl = 12.34
!   let s:jsoninf = 'Infinity'
!   let s:varinf = 1.0 / 0.0
    let s:jsonnan = 'NaN'
    let s:varnan = 0.0 / 0.0
  endif
--- 29,38 ----
  if has('float')
    let s:jsonfl = '12.34'
    let s:varfl = 12.34
!   let s:jsonneginf = '-Infinity'
!   let s:jsonposinf = 'Infinity'
!   let s:varneginf = -1.0 / 0.0
!   let s:varposinf = 1.0 / 0.0
    let s:jsonnan = 'NaN'
    let s:varnan = 0.0 / 0.0
  endif
***************
*** 85,91 ****
    call assert_equal(s:jsonnr, json_encode(s:varnr))
    if has('float')
      call assert_equal(s:jsonfl, json_encode(s:varfl))
!     call assert_equal(s:jsoninf, json_encode(s:varinf))
      call assert_equal(s:jsonnan, json_encode(s:varnan))
    endif
  
--- 87,94 ----
    call assert_equal(s:jsonnr, json_encode(s:varnr))
    if has('float')
      call assert_equal(s:jsonfl, json_encode(s:varfl))
!     call assert_equal(s:jsonneginf, json_encode(s:varneginf))
!     call assert_equal(s:jsonposinf, json_encode(s:varposinf))
      call assert_equal(s:jsonnan, json_encode(s:varnan))
    endif
  
***************
*** 202,208 ****
    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:jsoninf, js_encode(s:varinf))
      call assert_equal(s:jsonnan, js_encode(s:varnan))
    endif
  
--- 205,212 ----
    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:jsonneginf, js_encode(s:varneginf))
!     call assert_equal(s:jsonposinf, js_encode(s:varposinf))
      call assert_equal(s:jsonnan, js_encode(s:varnan))
    endif
  
***************
*** 242,248 ****
    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:jsoninf))
      call assert_true(isnan(js_decode(s:jsonnan)))
    endif
  
--- 246,253 ----
    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:varneginf, js_decode(s:jsonneginf))
!     call assert_equal(s:varposinf, js_decode(s:jsonposinf))
      call assert_true(isnan(js_decode(s:jsonnan)))
    endif
  
*** ../vim-8.1.0730/src/version.c       2019-01-12 13:50:27.712026891 +0100
--- src/version.c       2019-01-12 14:21:33.808675256 +0100
***************
*** 797,798 ****
--- 797,800 ----
  {   /* Add new patch number below this line */
+ /**/
+     731,
  /**/

-- 
Apathy Error: Don't bother striking any key.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui