Mercurial > vim
changeset 22238:939f7184566f v8.2.1668
patch 8.2.1668: Vim9: not accepting 0 or 1 as bool when type is any
Commit: https://github.com/vim/vim/commit/dadaddd59f3b53c41e92dc42219ab006deb14109
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Sep 12 19:11:23 2020 +0200
patch 8.2.1668: Vim9: not accepting 0 or 1 as bool when type is any
Problem: Vim9: not accepting 0 or 1 as bool when type is any.
Solution: Convert the type with the CHECKTYPE instruction. (closes https://github.com/vim/vim/issues/6913)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 12 Sep 2020 19:15:03 +0200 |
parents | 27c33305cb9c |
children | 3e8d7529c28f |
files | src/testdir/test_vim9_expr.vim src/version.c src/vim9execute.c |
diffstat | 3 files changed, 22 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -2369,6 +2369,9 @@ def Test_expr7_method_call() type: '', module: ''} ], getloclist(0)) + + let result: bool = get(#{n: 0}, 'n', 0) + assert_equal(false, result) enddef func Test_expr7_trailing_fails()
--- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1668, +/**/ 1667, /**/ 1666,
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -2510,11 +2510,23 @@ call_def_function( || (tv->v_type == VAR_FUNC && ct->ct_type == VAR_PARTIAL))) { - SOURCING_LNUM = iptr->isn_lnum; - semsg(_(e_expected_str_but_got_str), - vartype_name(ct->ct_type), - vartype_name(tv->v_type)); - goto on_error; + if (tv->v_type == VAR_NUMBER && ct->ct_type == VAR_BOOL + && (tv->vval.v_number == 0 + || tv->vval.v_number == 1)) + { + // number 0 is FALSE, number 1 is TRUE + tv->v_type = VAR_BOOL; + tv->vval.v_number = tv->vval.v_number + ? VVAL_TRUE : VVAL_FALSE; + } + else + { + SOURCING_LNUM = iptr->isn_lnum; + semsg(_(e_expected_str_but_got_str), + vartype_name(ct->ct_type), + vartype_name(tv->v_type)); + goto on_error; + } } } break;