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:
13
src/eval.c
13
src/eval.c
@@ -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);
|
||||
|
Reference in New Issue
Block a user