Patch 8.2.1890
Problem: Vim9: strange error for subtracting from a list.
Solution: Check getting a number, not a string. (closes #7167)
Files: src/eval.c, src/testdir/test_vim9_expr.vim
*** ../vim-8.2.1889/src/eval.c 2020-10-15 21:54:51.788563670 +0200
--- src/eval.c 2020-10-22 19:42:07.586862014 +0200
***************
*** 2679,2684 ****
--- 2679,2687 ----
return OK;
}
+ /*
+ * Make a copy of blob "tv1" and append blob "tv2".
+ */
void
eval_addblob(typval_T *tv1, typval_T *tv2)
{
***************
*** 2699,2704 ****
--- 2702,2710 ----
}
}
+ /*
+ * Make a copy of list "tv1" and append list "tv2".
+ */
int
eval_addlist(typval_T *tv1, typval_T *tv2)
{
***************
*** 2777,2784 ****
#ifdef FEAT_FLOAT
&& (op == '.' || rettv->v_type != VAR_FLOAT)
#endif
! )
{
// For "list + ...", an illegal use of the first operand as
// a number cannot be determined before evaluating the 2nd
// operand: if this is also a list, all is ok.
--- 2783,2792 ----
#ifdef FEAT_FLOAT
&& (op == '.' || rettv->v_type != VAR_FLOAT)
#endif
! && evaluate)
{
+ int error = FALSE;
+
// For "list + ...", an illegal use of the first operand as
// a number cannot be determined before evaluating the 2nd
// operand: if this is also a list, all is ok.
***************
*** 2786,2792 ****
// we know that the first operand needs to be a string or number
// without evaluating the 2nd operand. So check before to avoid
// side effects after an error.
! if (evaluate && tv_get_string_chk(rettv) == NULL)
{
clear_tv(rettv);
return FAIL;
--- 2794,2802 ----
// we know that the first operand needs to be a string or number
// without evaluating the 2nd operand. So check before to avoid
// side effects after an error.
! if (op != '.')
! tv_get_number_chk(rettv, &error);
! if ((op == '.' && tv_get_string_chk(rettv) == NULL) || error)
{
clear_tv(rettv);
return FAIL;
*** ../vim-8.2.1889/src/testdir/test_vim9_expr.vim 2020-10-22 18:59:57.954560128 +0200
--- src/testdir/test_vim9_expr.vim 2020-10-22 19:45:27.166278522 +0200
***************
*** 1128,1134 ****
vim9script
echo {} - 22
END
! CheckScriptFailure(lines, 'E731:', 2)
lines =<< trim END
vim9script
--- 1128,1146 ----
vim9script
echo {} - 22
END
! 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
vim9script
*** ../vim-8.2.1889/src/version.c 2020-10-22 18:59:57.958560114 +0200
--- src/version.c 2020-10-22 19:43:10.666678135 +0200
***************
*** 752,753 ****
--- 752,755 ----
{ /* Add new patch number below this line */
+ /**/
+ 1890,
/**/
--
hundred-and-one symptoms of being an internet addict:
112. You are amazed that anyone uses a phone without data...let
alone hear actual voices.
/// Bram Moolenaar -- Br...@Moolenaar.net --
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 ///