summaryrefslogtreecommitdiff
path: root/src/typval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-01-09 16:21:37 +0100
committerBram Moolenaar <Bram@vim.org>2021-01-09 16:21:37 +0100
commitcff40ff98664f4f5a9631aff1a155caf762ea74b (patch)
tree43819da60d947bf116b65278fae16b888741208e /src/typval.c
parent657137ca487c60d63989236115115161def270a5 (diff)
downloadvim-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.c24
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);