diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-08-10 21:57:54 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-08-10 21:57:54 +0200 |
commit | 3e06a1e2a8c0854c881574f33363e00264db1f1d (patch) | |
tree | 157355f93618af7809f52aa3bf2a83d0ce79867e /src/eval.c | |
parent | 6f8f7337c1211692d508239eb4cbc8a6f67de497 (diff) |
patch 8.2.1416: Vim9: boolean evaluation does not work as intendedv8.2.1416
Problem: Vim9: boolean evaluation does not work as intended.
Solution: Use tv2bool() in Vim9 script. (closes #6681)
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/eval.c b/src/eval.c index abdf076d26..99554e7e26 100644 --- a/src/eval.c +++ b/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); |