From dadaddd59f3b53c41e92dc42219ab006deb14109 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 12 Sep 2020 19:11:23 +0200 Subject: 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 #6913) --- src/testdir/test_vim9_expr.vim | 3 +++ src/version.c | 2 ++ src/vim9execute.c | 22 +++++++++++++++++----- 3 files changed, 22 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index 8cf5bc0d60..15fc3aeea1 100644 --- 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() diff --git a/src/version.c b/src/version.c index b225f7406c..305f0cb707 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1668, /**/ 1667, /**/ diff --git a/src/vim9execute.c b/src/vim9execute.c index 18cfb0213b..e93817a62b 100644 --- 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; -- cgit v1.2.3