diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-01-09 16:21:37 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-01-09 16:21:37 +0100 |
commit | cff40ff98664f4f5a9631aff1a155caf762ea74b (patch) | |
tree | 43819da60d947bf116b65278fae16b888741208e /src/typval.c | |
parent | 657137ca487c60d63989236115115161def270a5 (diff) | |
download | vim-git-cff40ff98664f4f5a9631aff1a155caf762ea74b.tar.gz |
patch 8.2.2320: Vim9: no error for comparing bool with stringv8.2.2320
Problem: Vim9: no error for comparing bool with string.
Solution: Check for wrong types when comparing. (closes #7639)
Diffstat (limited to 'src/typval.c')
-rw-r--r-- | src/typval.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/typval.c b/src/typval.c index e620bedd7..06276b473 100644 --- a/src/typval.c +++ b/src/typval.c @@ -834,6 +834,30 @@ typval_compare( default: break; // avoid gcc warning } } + else if (in_vim9script() && (typ1->v_type == VAR_BOOL + || typ2->v_type == VAR_BOOL)) + { + if (typ1->v_type != typ2->v_type) + { + semsg(_(e_cannot_compare_str_with_str), + vartype_name(typ1->v_type), vartype_name(typ2->v_type)); + clear_tv(typ1); + return FAIL; + } + n1 = typ1->vval.v_number; + n2 = typ2->vval.v_number; + switch (type) + { + case EXPR_IS: + case EXPR_EQUAL: n1 = (n1 == n2); break; + case EXPR_ISNOT: + case EXPR_NEQUAL: n1 = (n1 != n2); break; + default: + emsg(_(e_invalid_operation_for_bool)); + clear_tv(typ1); + return FAIL; + } + } else { s1 = tv_get_string_buf(typ1, buf1); |