diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-08-09 22:17:55 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-08-09 22:17:55 +0200 |
commit | 6e4cfffe809a894ea831fc8011527714481d2857 (patch) | |
tree | d6aa79aef24689b61a9919bbe9c9684ccd8f033a /src/eval.c | |
parent | a9a47d157ab1946d1e286c9695bc68d71305af68 (diff) |
patch 8.2.1412: Vim: not operator does not result in booleanv8.2.1412
Problem: Vim: not operator does not result in boolean.
Solution: Make type depend on operator. (issue 6678) Fix using "false" and
"true" in Vim9 script.
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c index b1fad1dcd5..abdf076d26 100644 --- a/src/eval.c +++ b/src/eval.c @@ -3222,12 +3222,14 @@ eval7( { rettv->v_type = VAR_BOOL; rettv->vval.v_number = VVAL_TRUE; + ret = OK; } else if (len == 5 && in_vim9script() && STRNCMP(s, "false", 4) == 0) { rettv->v_type = VAR_BOOL; rettv->vval.v_number = VVAL_FALSE; + ret = OK; } else ret = eval_variable(s, len, rettv, NULL, TRUE, FALSE); @@ -3271,6 +3273,7 @@ eval7_leader( int ret = OK; int error = FALSE; varnumber_T val = 0; + vartype_T type = rettv->v_type; #ifdef FEAT_FLOAT float_T f = 0.0; @@ -3301,7 +3304,10 @@ eval7_leader( f = !f; else #endif + { val = !val; + type = VAR_BOOL; + } } else if (*end_leader == '-') { @@ -3310,7 +3316,10 @@ eval7_leader( f = -f; else #endif + { val = -val; + type = VAR_NUMBER; + } } } #ifdef FEAT_FLOAT @@ -3323,7 +3332,10 @@ eval7_leader( #endif { clear_tv(rettv); - rettv->v_type = VAR_NUMBER; + if (in_vim9script()) + rettv->v_type = type; + else + rettv->v_type = VAR_NUMBER; rettv->vval.v_number = val; } } |