mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
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.
This commit is contained in:
parent
7a2217bedd
commit
3cfa5b16b0
@ -3000,7 +3000,8 @@ execute_common(typval_T *argvars, typval_T *rettv, int arg_off)
|
|||||||
if (argvars[arg_off + 1].v_type != VAR_UNKNOWN)
|
if (argvars[arg_off + 1].v_type != VAR_UNKNOWN)
|
||||||
{
|
{
|
||||||
char_u buf[NUMBUFLEN];
|
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)
|
if (s == NULL)
|
||||||
return;
|
return;
|
||||||
@ -8897,7 +8898,7 @@ f_strdisplaywidth(typval_T *argvars, typval_T *rettv)
|
|||||||
static void
|
static void
|
||||||
f_strwidth(typval_T *argvars, typval_T *rettv)
|
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));
|
rettv->vval.v_number = (varnumber_T)(mb_string2cells(s, -1));
|
||||||
}
|
}
|
||||||
|
@ -1301,7 +1301,9 @@ f_glob(typval_T *argvars, typval_T *rettv)
|
|||||||
void
|
void
|
||||||
f_glob2regpat(typval_T *argvars, typval_T *rettv)
|
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->v_type = VAR_STRING;
|
||||||
rettv->vval.v_string = (pat == NULL)
|
rettv->vval.v_string = (pat == NULL)
|
||||||
|
@ -2848,7 +2848,7 @@ f_simplify(typval_T *argvars, typval_T *rettv)
|
|||||||
{
|
{
|
||||||
char_u *p;
|
char_u *p;
|
||||||
|
|
||||||
p = tv_get_string(&argvars[0]);
|
p = tv_get_string_strict(&argvars[0]);
|
||||||
rettv->vval.v_string = vim_strsave(p);
|
rettv->vval.v_string = vim_strsave(p);
|
||||||
simplify_filename(rettv->vval.v_string); // simplify in place
|
simplify_filename(rettv->vval.v_string); // simplify in place
|
||||||
rettv->v_type = VAR_STRING;
|
rettv->v_type = VAR_STRING;
|
||||||
|
@ -417,7 +417,7 @@ f_sqrt(typval_T *argvars, typval_T *rettv)
|
|||||||
void
|
void
|
||||||
f_str2float(typval_T *argvars, typval_T *rettv)
|
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 == '-');
|
int isneg = (*p == '-');
|
||||||
|
|
||||||
if (*p == '+' || *p == '-')
|
if (*p == '+' || *p == '-')
|
||||||
|
11
src/json.c
11
src/json.c
@ -607,7 +607,7 @@ json_decode_item(js_read_T *reader, typval_T *res, int options)
|
|||||||
cur_item = res;
|
cur_item = res;
|
||||||
init_tv(&item);
|
init_tv(&item);
|
||||||
if (res != NULL)
|
if (res != NULL)
|
||||||
init_tv(res);
|
init_tv(res);
|
||||||
|
|
||||||
fill_numbuflen(reader);
|
fill_numbuflen(reader);
|
||||||
p = reader->js_buf + reader->js_used;
|
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
|
if (top_item != NULL && top_item->jd_type == JSON_OBJECT_KEY
|
||||||
&& cur_item != NULL)
|
&& 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);
|
top_item->jd_key = tv_get_string_buf_chk(cur_item, key_buf);
|
||||||
if (top_item->jd_key == NULL)
|
if (top_item->jd_key == NULL)
|
||||||
{
|
{
|
||||||
|
@ -144,7 +144,7 @@ func Test_string_concatenation()
|
|||||||
if has('float')
|
if has('float')
|
||||||
let a = 'A'
|
let a = 'A'
|
||||||
let b = 1.234
|
let b = 1.234
|
||||||
call assert_fails('echo a .. b', 'E806:')
|
call assert_equal('A1.234', a .. b)
|
||||||
endif
|
endif
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
source view_util.vim
|
source view_util.vim
|
||||||
source check.vim
|
source check.vim
|
||||||
|
source vim9.vim
|
||||||
|
|
||||||
func NestedEval()
|
func NestedEval()
|
||||||
let nested = execute('echo "nested\nlines"')
|
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("\nsomething", execute('echo "something"', 'silent!'))
|
||||||
call assert_equal("", execute('burp', 'silent!'))
|
call assert_equal("", execute('burp', 'silent!'))
|
||||||
if has('float')
|
if has('float')
|
||||||
call assert_fails('call execute(3.4)', 'E806:')
|
call assert_fails('call execute(3.4)', 'E492:')
|
||||||
call assert_fails('call execute("echo \"x\"", 3.4)', 'E806:')
|
call assert_equal("\nx", execute("echo \"x\"", 3.4))
|
||||||
|
call CheckDefExecAndScriptFailure(['execute("echo \"x\"", 3.4)'], 'E806:')
|
||||||
endif
|
endif
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
source check.vim
|
source check.vim
|
||||||
CheckFeature float
|
CheckFeature float
|
||||||
|
source vim9.vim
|
||||||
|
|
||||||
func Test_abs()
|
func Test_abs()
|
||||||
call assert_equal('1.23', string(abs(1.23)))
|
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_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([])", 'E730:')
|
||||||
call assert_fails("call str2float({})", 'E731:')
|
call assert_fails("call str2float({})", 'E731:')
|
||||||
call assert_fails("call str2float(function('string'))", 'E729:')
|
call assert_fails("call str2float(function('string'))", 'E729:')
|
||||||
|
@ -165,11 +165,13 @@ func Test_strwidth()
|
|||||||
call assert_fails('call strwidth({->0})', 'E729:')
|
call assert_fails('call strwidth({->0})', 'E729:')
|
||||||
call assert_fails('call strwidth([])', 'E730:')
|
call assert_fails('call strwidth([])', 'E730:')
|
||||||
call assert_fails('call strwidth({})', 'E731:')
|
call assert_fails('call strwidth({})', 'E731:')
|
||||||
if has('float')
|
|
||||||
call assert_fails('call strwidth(1.2)', 'E806:')
|
|
||||||
endif
|
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
if has('float')
|
||||||
|
call assert_equal(3, strwidth(1.2))
|
||||||
|
call CheckDefExecAndScriptFailure(['echo strwidth(1.2)'], 'E806:')
|
||||||
|
endif
|
||||||
|
|
||||||
set ambiwidth&
|
set ambiwidth&
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@ -233,7 +235,9 @@ func Test_str2nr()
|
|||||||
call assert_fails('call str2nr([])', 'E730:')
|
call assert_fails('call str2nr([])', 'E730:')
|
||||||
call assert_fails('call str2nr({->2})', 'E729:')
|
call assert_fails('call str2nr({->2})', 'E729:')
|
||||||
if has('float')
|
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
|
endif
|
||||||
call assert_fails('call str2nr(10, [])', 'E745:')
|
call assert_fails('call str2nr(10, [])', 'E745:')
|
||||||
endfunc
|
endfunc
|
||||||
@ -494,7 +498,8 @@ func Test_simplify()
|
|||||||
call assert_fails('call simplify([])', 'E730:')
|
call assert_fails('call simplify([])', 'E730:')
|
||||||
call assert_fails('call simplify({})', 'E731:')
|
call assert_fails('call simplify({})', 'E731:')
|
||||||
if has('float')
|
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
|
endif
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
" Test glob2regpat()
|
" Test glob2regpat()
|
||||||
|
|
||||||
|
source vim9.vim
|
||||||
|
|
||||||
func Test_glob2regpat_invalid()
|
func Test_glob2regpat_invalid()
|
||||||
if has('float')
|
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
|
endif
|
||||||
call assert_fails('call glob2regpat("}")', 'E219:')
|
call assert_fails('call glob2regpat("}")', 'E219:')
|
||||||
call assert_fails('call glob2regpat("{")', 'E220:')
|
call assert_fails('call glob2regpat("{")', 'E220:')
|
||||||
|
@ -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'}, 'error')", 'E737:')
|
||||||
call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 'xxx')", 'E475:')
|
call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 'xxx')", 'E475:')
|
||||||
if has('float')
|
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
|
endif
|
||||||
call assert_equal({'a': 'A', 'b': 'B'}, d)
|
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:')
|
call assert_fails("let l = insert([1,2,3], 4, [])", 'E745:')
|
||||||
let l = [1, 2, 3]
|
let l = [1, 2, 3]
|
||||||
call assert_fails("let l[i] = 3", 'E121:')
|
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[: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()
|
let t = test_unknown()
|
||||||
call assert_fails("echo t[0]", 'E685:')
|
call assert_fails("echo t[0]", 'E685:')
|
||||||
endfunc
|
endfunc
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2949,
|
||||||
/**/
|
/**/
|
||||||
2948,
|
2948,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user