From: Bram Moolenaar Date: Mon, 27 Dec 2021 12:29:19 +0000 (+0000) Subject: patch 8.2.3911: Vim9: type check for filter() does not accept unknown X-Git-Tag: v8.2.3911 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ef8f04b1d1daf2e0be8fa38dedcae84ebfc5ffb4;p=vim patch 8.2.3911: Vim9: type check for filter() does not accept unknown Problem: Vim9: type check for filter() does not accept unknown. Solution: Also accept unknown for the return type. (closes #9413) --- diff --git a/src/evalfunc.c b/src/evalfunc.c index d78589c6d..f3105200f 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -494,6 +494,7 @@ arg_filter_func(type_T *type, argcontext_T *context) if (type->tt_type == VAR_FUNC && !(type->tt_member->tt_type == VAR_BOOL || type->tt_member->tt_type == VAR_NUMBER + || type->tt_member->tt_type == VAR_UNKNOWN || type->tt_member->tt_type == VAR_ANY)) { arg_type_mismatch(&t_func_bool, type, context->arg_idx + 1); diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index 6cad1e4cc..bc59e3af1 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -1253,6 +1253,12 @@ def Test_filter() assert_equal([], filter([1, 2, 3], '0')) assert_equal([1, 2, 3], filter([1, 2, 3], '1')) assert_equal({b: 20}, filter({a: 10, b: 20}, 'v:val == 20')) + + def GetFiltered(): list + var Odd: func = (_, v) => v % 2 + return range(3)->filter(Odd) + enddef + assert_equal([1], GetFiltered()) enddef def Test_filter_wrong_dict_key_type() diff --git a/src/version.c b/src/version.c index 8c4377b1e..0d99bb857 100644 --- a/src/version.c +++ b/src/version.c @@ -749,6 +749,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3911, /**/ 3910, /**/