]> granicus.if.org Git - vim/commitdiff
patch 8.2.3911: Vim9: type check for filter() does not accept unknown v8.2.3911
authorBram Moolenaar <Bram@vim.org>
Mon, 27 Dec 2021 12:29:19 +0000 (12:29 +0000)
committerBram Moolenaar <Bram@vim.org>
Mon, 27 Dec 2021 12:29:19 +0000 (12:29 +0000)
Problem:    Vim9: type check for filter() does not accept unknown.
Solution:   Also accept unknown for the return type. (closes #9413)

src/evalfunc.c
src/testdir/test_vim9_builtin.vim
src/version.c

index d78589c6d5b1d578fc7b225771d66ab4855a65af..f3105200fd1901bdeba1c0ac537bbe44d9c53bbe 100644 (file)
@@ -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);
index 6cad1e4cc4e43a052984195fd3545e8601d2a3df..bc59e3af128d8fddd7de975356a8361ff957d483 100644 (file)
@@ -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<number>
+    var Odd: func = (_, v) => v % 2
+    return range(3)->filter(Odd)
+  enddef
+  assert_equal([1], GetFiltered())
 enddef
 
 def Test_filter_wrong_dict_key_type()
index 8c4377b1e7237fa2852ab2339cff527f63798c7c..0d99bb857f2a15dfa175852267f32caed59d44d7 100644 (file)
@@ -749,6 +749,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3911,
 /**/
     3910,
 /**/