patch 8.2.2949: tests failing because no error for float to string conversion
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.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 1962ccd..07f158d 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3000,7 +3000,8 @@
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 @@
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));
}
diff --git a/src/filepath.c b/src/filepath.c
index e81eeb1..69bc8b5 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -1301,7 +1301,9 @@
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)
diff --git a/src/findfile.c b/src/findfile.c
index 4f69c47..a72fe45 100644
--- a/src/findfile.c
+++ b/src/findfile.c
@@ -2848,7 +2848,7 @@
{
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;
diff --git a/src/float.c b/src/float.c
index 1361a36..7c02044 100644
--- a/src/float.c
+++ b/src/float.c
@@ -417,7 +417,7 @@
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 == '-')
diff --git a/src/json.c b/src/json.c
index db25b70..d0a087a 100644
--- a/src/json.c
+++ b/src/json.c
@@ -607,7 +607,7 @@
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 @@
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)
{
diff --git a/src/testdir/test_eval_stuff.vim b/src/testdir/test_eval_stuff.vim
index 4549f48..0c1e75d 100644
--- a/src/testdir/test_eval_stuff.vim
+++ b/src/testdir/test_eval_stuff.vim
@@ -144,7 +144,7 @@
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
diff --git a/src/testdir/test_execute_func.vim b/src/testdir/test_execute_func.vim
index 0363717..c08b239 100644
--- a/src/testdir/test_execute_func.vim
+++ b/src/testdir/test_execute_func.vim
@@ -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 @@
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
diff --git a/src/testdir/test_float_func.vim b/src/testdir/test_float_func.vim
index 17b5cda..b10bffd 100644
--- a/src/testdir/test_float_func.vim
+++ b/src/testdir/test_float_func.vim
@@ -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 @@
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:')
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index bc96491..023da66 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -165,11 +165,13 @@
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 @@
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 @@
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
diff --git a/src/testdir/test_glob2regpat.vim b/src/testdir/test_glob2regpat.vim
index 2907b28..ab459bb 100644
--- a/src/testdir/test_glob2regpat.vim
+++ b/src/testdir/test_glob2regpat.vim
@@ -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:')
diff --git a/src/testdir/test_listdict.vim b/src/testdir/test_listdict.vim
index 46b030b..8351acb 100644
--- a/src/testdir/test_listdict.vim
+++ b/src/testdir/test_listdict.vim
@@ -859,7 +859,7 @@
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 @@
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
diff --git a/src/version.c b/src/version.c
index b9df688..94a4cfb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2949,
+/**/
2948,
/**/
2947,