mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.1890: Vim9: strange error for subtracting from a list
Problem: Vim9: strange error for subtracting from a list. Solution: Check getting a number, not a string. (closes #7167)
This commit is contained in:
parent
b07a39de48
commit
081db1a66d
14
src/eval.c
14
src/eval.c
@ -2679,6 +2679,9 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make a copy of blob "tv1" and append blob "tv2".
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
eval_addblob(typval_T *tv1, typval_T *tv2)
|
eval_addblob(typval_T *tv1, typval_T *tv2)
|
||||||
{
|
{
|
||||||
@ -2699,6 +2702,9 @@ eval_addblob(typval_T *tv1, typval_T *tv2)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make a copy of list "tv1" and append list "tv2".
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
eval_addlist(typval_T *tv1, typval_T *tv2)
|
eval_addlist(typval_T *tv1, typval_T *tv2)
|
||||||
{
|
{
|
||||||
@ -2777,8 +2783,10 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
|||||||
#ifdef FEAT_FLOAT
|
#ifdef FEAT_FLOAT
|
||||||
&& (op == '.' || rettv->v_type != VAR_FLOAT)
|
&& (op == '.' || rettv->v_type != VAR_FLOAT)
|
||||||
#endif
|
#endif
|
||||||
)
|
&& evaluate)
|
||||||
{
|
{
|
||||||
|
int error = FALSE;
|
||||||
|
|
||||||
// For "list + ...", an illegal use of the first operand as
|
// For "list + ...", an illegal use of the first operand as
|
||||||
// a number cannot be determined before evaluating the 2nd
|
// a number cannot be determined before evaluating the 2nd
|
||||||
// operand: if this is also a list, all is ok.
|
// operand: if this is also a list, all is ok.
|
||||||
@ -2786,7 +2794,9 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
|||||||
// we know that the first operand needs to be a string or number
|
// we know that the first operand needs to be a string or number
|
||||||
// without evaluating the 2nd operand. So check before to avoid
|
// without evaluating the 2nd operand. So check before to avoid
|
||||||
// side effects after an error.
|
// side effects after an error.
|
||||||
if (evaluate && tv_get_string_chk(rettv) == NULL)
|
if (op != '.')
|
||||||
|
tv_get_number_chk(rettv, &error);
|
||||||
|
if ((op == '.' && tv_get_string_chk(rettv) == NULL) || error)
|
||||||
{
|
{
|
||||||
clear_tv(rettv);
|
clear_tv(rettv);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
@ -1128,7 +1128,19 @@ def Test_expr5_vim9script()
|
|||||||
vim9script
|
vim9script
|
||||||
echo {} - 22
|
echo {} - 22
|
||||||
END
|
END
|
||||||
CheckScriptFailure(lines, 'E731:', 2)
|
CheckScriptFailure(lines, 'E728:', 2)
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
echo [] - 33
|
||||||
|
END
|
||||||
|
CheckScriptFailure(lines, 'E745:', 2)
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
echo 0z1234 - 44
|
||||||
|
END
|
||||||
|
CheckScriptFailure(lines, 'E974:', 2)
|
||||||
|
|
||||||
lines =<< trim END
|
lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
|
@ -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 */
|
||||||
|
/**/
|
||||||
|
1890,
|
||||||
/**/
|
/**/
|
||||||
1889,
|
1889,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user