diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-07-18 14:43:43 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-07-18 14:43:43 +0200 |
commit | 0c35752d04f70408a3c560d5b3edbafcaddff302 (patch) | |
tree | f4db397f3be18ba9dc6082b73ed24e98affb15da /src/typval.c | |
parent | c6ba2f9dde6d01c8ab356c239c2259f7d83652a4 (diff) | |
download | vim-git-0c35752d04f70408a3c560d5b3edbafcaddff302.tar.gz |
patch 8.2.3176: Vim9: no type error for comparing number with stringv8.2.3176
Problem: Vim9: no type error for comparing number with string.
Solution: Add a runtime type check. (closes #8571)
Diffstat (limited to 'src/typval.c')
-rw-r--r-- | src/typval.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/typval.c b/src/typval.c index 03891c806..9d5903f64 100644 --- a/src/typval.c +++ b/src/typval.c @@ -937,7 +937,9 @@ typval_compare( } } else if (in_vim9script() && (typ1->v_type == VAR_BOOL - || typ2->v_type == VAR_BOOL)) + || typ2->v_type == VAR_BOOL + || (typ1->v_type == VAR_SPECIAL + && typ2->v_type == VAR_SPECIAL))) { if (typ1->v_type != typ2->v_type) { @@ -955,13 +957,23 @@ typval_compare( case EXPR_ISNOT: case EXPR_NEQUAL: n1 = (n1 != n2); break; default: - emsg(_(e_invalid_operation_for_bool)); + semsg(_(e_invalid_operation_for_str), + vartype_name(typ1->v_type)); clear_tv(typ1); return FAIL; } } else { + if (in_vim9script() + && ((typ1->v_type != VAR_STRING && typ1->v_type != VAR_SPECIAL) + || (typ2->v_type != VAR_STRING && typ2->v_type != VAR_SPECIAL))) + { + semsg(_(e_cannot_compare_str_with_str), + vartype_name(typ1->v_type), vartype_name(typ2->v_type)); + clear_tv(typ1); + return FAIL; + } s1 = tv_get_string_buf(typ1, buf1); s2 = tv_get_string_buf(typ2, buf2); if (type != EXPR_MATCH && type != EXPR_NOMATCH) |