0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 8.2.1416: Vim9: boolean evaluation does not work as intended

Problem:    Vim9: boolean evaluation does not work as intended.
Solution:   Use tv2bool() in Vim9 script. (closes #6681)
This commit is contained in:
Bram Moolenaar
2020-08-10 21:57:54 +02:00
parent 6f8f7337c1
commit 3e06a1e2a8
4 changed files with 44 additions and 23 deletions

View File

@@ -192,7 +192,10 @@ eval_to_bool(
*error = FALSE;
if (!skip)
{
retval = (tv_get_number_chk(&tv, error) != 0);
if (in_vim9script())
retval = tv2bool(&tv);
else
retval = (tv_get_number_chk(&tv, error) != 0);
clear_tv(&tv);
}
}
@@ -3098,7 +3101,8 @@ eval7(
// Apply prefixed "-" and "+" now. Matters especially when
// "->" follows.
if (ret == OK && evaluate && end_leader > start_leader)
if (ret == OK && evaluate && end_leader > start_leader
&& rettv->v_type != VAR_BLOB)
ret = eval7_leader(rettv, TRUE, start_leader, &end_leader);
break;
@@ -3281,7 +3285,10 @@ eval7_leader(
f = rettv->vval.v_float;
else
#endif
val = tv_get_number_chk(rettv, &error);
if (in_vim9script() && end_leader[-1] == '!')
val = tv2bool(rettv);
else
val = tv_get_number_chk(rettv, &error);
if (error)
{
clear_tv(rettv);