]> granicus.if.org Git - vim/commitdiff
patch 8.2.2949: tests failing because no error for float to string conversion v8.2.2949
authorBram Moolenaar <Bram@vim.org>
Sun, 6 Jun 2021 12:14:39 +0000 (14:14 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 6 Jun 2021 12:14:39 +0000 (14:14 +0200)
Problem:    Tests failing because there is no error for float to string
            conversion.
Solution:   Change the check for failure to check for correct result.  Make
            some conversions strict in Vim9 script.

12 files changed:
src/evalfunc.c
src/filepath.c
src/findfile.c
src/float.c
src/json.c
src/testdir/test_eval_stuff.vim
src/testdir/test_execute_func.vim
src/testdir/test_float_func.vim
src/testdir/test_functions.vim
src/testdir/test_glob2regpat.vim
src/testdir/test_listdict.vim
src/version.c

index 1962ccd15aef54dbe3aa134e314f0d46ff2adb6e..07f158d6d7337a4afbbd13d3d548c9fa6a8b83b1 100644 (file)
@@ -3000,7 +3000,8 @@ execute_common(typval_T *argvars, typval_T *rettv, int arg_off)
     if (argvars[arg_off + 1].v_type != VAR_UNKNOWN)
     {
        char_u  buf[NUMBUFLEN];
-       char_u  *s = tv_get_string_buf_chk(&argvars[arg_off + 1], buf);
+       char_u  *s = tv_get_string_buf_chk_strict(&argvars[arg_off + 1], buf,
+                                                             in_vim9script());
 
        if (s == NULL)
            return;
@@ -8897,7 +8898,7 @@ f_strdisplaywidth(typval_T *argvars, typval_T *rettv)
     static void
 f_strwidth(typval_T *argvars, typval_T *rettv)
 {
-    char_u     *s = tv_get_string(&argvars[0]);
+    char_u     *s = tv_get_string_strict(&argvars[0]);
 
     rettv->vval.v_number = (varnumber_T)(mb_string2cells(s, -1));
 }
index e81eeb1200cffe3af45c9f8af55b39602f440445..69bc8b5f4930f1dc29fcd4d5329c3bdf1241e6a8 100644 (file)
@@ -1301,7 +1301,9 @@ f_glob(typval_T *argvars, typval_T *rettv)
     void
 f_glob2regpat(typval_T *argvars, typval_T *rettv)
 {
-    char_u     *pat = tv_get_string_chk(&argvars[0]);
+    char_u     buf[NUMBUFLEN];
+    char_u     *pat = tv_get_string_buf_chk_strict(&argvars[0], buf,
+                                                             in_vim9script());
 
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = (pat == NULL)
index 4f69c47caa3333d4bf5bccfd3bb1e36849a0d358..a72fe45ad9c903c3a3922830ede475e00e1334c9 100644 (file)
@@ -2848,7 +2848,7 @@ f_simplify(typval_T *argvars, typval_T *rettv)
 {
     char_u     *p;
 
-    p = tv_get_string(&argvars[0]);
+    p = tv_get_string_strict(&argvars[0]);
     rettv->vval.v_string = vim_strsave(p);
     simplify_filename(rettv->vval.v_string);   // simplify in place
     rettv->v_type = VAR_STRING;
index 1361a36d50ef66d0a4f1c7edd388fe003e780867..7c020448aad22fe4413e714d357915bbe3993203 100644 (file)
@@ -417,7 +417,7 @@ f_sqrt(typval_T *argvars, typval_T *rettv)
     void
 f_str2float(typval_T *argvars, typval_T *rettv)
 {
-    char_u *p = skipwhite(tv_get_string(&argvars[0]));
+    char_u *p = skipwhite(tv_get_string_strict(&argvars[0]));
     int     isneg = (*p == '-');
 
     if (*p == '+' || *p == '-')
index db25b70cc40082b540315104043043d3d42fcc46..d0a087a927f15e8f91660ab5ec74e6f9a840587b 100644 (file)
@@ -607,7 +607,7 @@ json_decode_item(js_read_T *reader, typval_T *res, int options)
     cur_item = res;
     init_tv(&item);
     if (res != NULL)
-       init_tv(res);
+       init_tv(res);
 
     fill_numbuflen(reader);
     p = reader->js_buf + reader->js_used;
@@ -920,6 +920,15 @@ json_decode_item(js_read_T *reader, typval_T *res, int options)
            if (top_item != NULL && top_item->jd_type == JSON_OBJECT_KEY
                    && cur_item != NULL)
            {
+#ifdef FEAT_FLOAT
+               if (cur_item->v_type == VAR_FLOAT)
+               {
+                   // cannot use a float as a key
+                   emsg(_(e_float_as_string));
+                   retval = FAIL;
+                   goto theend;
+               }
+#endif
                top_item->jd_key = tv_get_string_buf_chk(cur_item, key_buf);
                if (top_item->jd_key == NULL)
                {
index 4549f4860817b4e6719fc97f3a66549a10a8d93e..0c1e75df595e7eacf50e462b1e70ed6850fdf5f9 100644 (file)
@@ -144,7 +144,7 @@ func Test_string_concatenation()
   if has('float')
     let a = 'A'
     let b = 1.234
-    call assert_fails('echo a .. b', 'E806:')
+    call assert_equal('A1.234', a .. b)
   endif
 endfunc
 
index 036371715c325e0047c0118c9622bb7e7de03e84..c08b2390f2d5693dcf7fe2fa28a6eca3ce581fff 100644 (file)
@@ -2,6 +2,7 @@
 
 source view_util.vim
 source check.vim
+source vim9.vim
 
 func NestedEval()
   let nested = execute('echo "nested\nlines"')
@@ -37,8 +38,9 @@ func Test_execute_string()
   call assert_equal("\nsomething", execute('echo "something"', 'silent!'))
   call assert_equal("", execute('burp', 'silent!'))
   if has('float')
-    call assert_fails('call execute(3.4)', 'E806:')
-    call assert_fails('call execute("echo \"x\"", 3.4)', 'E806:')
+    call assert_fails('call execute(3.4)', 'E492:')
+    call assert_equal("\nx", execute("echo \"x\"", 3.4))
+    call CheckDefExecAndScriptFailure(['execute("echo \"x\"", 3.4)'], 'E806:')
   endif
 endfunc
 
index 17b5cdac9607eaeb0dd93d281fbeac22d379081b..b10bffd728fb65eaa0e3bbb3bae3c8ecf498fa4b 100644 (file)
@@ -2,6 +2,7 @@
 
 source check.vim
 CheckFeature float
+source vim9.vim
 
 func Test_abs()
   call assert_equal('1.23', string(abs(1.23)))
@@ -238,7 +239,9 @@ func Test_str2float()
   call assert_equal('nan', string(str2float('NaN')))
   call assert_equal('nan', string(str2float('  nan  ')))
 
-  call assert_fails("call str2float(1.2)", 'E806:')
+  call assert_equal(1.2, str2float(1.2))
+  call CheckDefExecFailure(['str2float(1.2)'], 'E1013:')
+  call CheckScriptFailure(['vim9script', 'str2float(1.2)'], 'E806:')
   call assert_fails("call str2float([])", 'E730:')
   call assert_fails("call str2float({})", 'E731:')
   call assert_fails("call str2float(function('string'))", 'E729:')
index bc964917263de9f535855eba94491ea814f868cb..023da66ba14570b4914fe5e5b6a9af2fcd10ddf4 100644 (file)
@@ -165,11 +165,13 @@ func Test_strwidth()
     call assert_fails('call strwidth({->0})', 'E729:')
     call assert_fails('call strwidth([])', 'E730:')
     call assert_fails('call strwidth({})', 'E731:')
-    if has('float')
-      call assert_fails('call strwidth(1.2)', 'E806:')
-    endif
   endfor
 
+  if has('float')
+    call assert_equal(3, strwidth(1.2))
+    call CheckDefExecAndScriptFailure(['echo strwidth(1.2)'], 'E806:')
+  endif
+
   set ambiwidth&
 endfunc
 
@@ -233,7 +235,9 @@ func Test_str2nr()
   call assert_fails('call str2nr([])', 'E730:')
   call assert_fails('call str2nr({->2})', 'E729:')
   if has('float')
-    call assert_fails('call str2nr(1.2)', 'E806:')
+    call assert_equal(1, str2nr(1.2))
+    call CheckDefExecFailure(['echo str2nr(1.2)'], 'E1013:')
+    call CheckScriptFailure(['vim9script', 'echo str2nr(1.2)'], 'E806:')
   endif
   call assert_fails('call str2nr(10, [])', 'E745:')
 endfunc
@@ -494,7 +498,8 @@ func Test_simplify()
   call assert_fails('call simplify([])', 'E730:')
   call assert_fails('call simplify({})', 'E731:')
   if has('float')
-    call assert_fails('call simplify(1.2)', 'E806:')
+    call assert_equal('1.2', simplify(1.2))
+    call CheckDefExecAndScriptFailure(['echo simplify(1.2)'], 'E806:')
   endif
 endfunc
 
index 2907b286db4b4bca2ae257d0517d706a1f14bcfc..ab459bba33365a92d281a2e28bebd4e0219a8c4a 100644 (file)
@@ -1,8 +1,11 @@
 " Test glob2regpat()
 
+source vim9.vim
+
 func Test_glob2regpat_invalid()
   if has('float')
-    call assert_fails('call glob2regpat(1.33)', 'E806:')
+    call assert_equal('^1\.33$', glob2regpat(1.33))
+    call CheckDefExecAndScriptFailure(['echo glob2regpat(1.33)'], 'E806:')
   endif
   call assert_fails('call glob2regpat("}")', 'E219:')
   call assert_fails('call glob2regpat("{")', 'E220:')
index 46b030b86e5710063e92fc6426dbb4782a9be2ba..8351acb4103e3c9b5966fadcc20081f2559b11b1 100644 (file)
@@ -859,7 +859,7 @@ func Test_listdict_extend()
   call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 'error')", 'E737:')
   call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 'xxx')", 'E475:')
   if has('float')
-    call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 1.2)", 'E806:')
+    call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 1.2)", 'E475:')
   endif
   call assert_equal({'a': 'A', 'b': 'B'}, d)
 
@@ -1022,9 +1022,9 @@ func Test_listdict_index()
   call assert_fails("let l = insert([1,2,3], 4, [])", 'E745:')
   let l = [1, 2, 3]
   call assert_fails("let l[i] = 3", 'E121:')
-  call assert_fails("let l[1.1] = 4", 'E806:')
+  call assert_fails("let l[1.1] = 4", 'E805:')
   call assert_fails("let l[:i] = [4, 5]", 'E121:')
-  call assert_fails("let l[:3.2] = [4, 5]", 'E806:')
+  call assert_fails("let l[:3.2] = [4, 5]", 'E805:')
   let t = test_unknown()
   call assert_fails("echo t[0]", 'E685:')
 endfunc
index b9df68801611a09138fdb09aac567fada774ca2e..94a4cfb23bc5f93c2fff532fecd8b51dbd43737b 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2949,
 /**/
     2948,
 /**/