To: vim_dev@googlegroups.com Subject: Patch 8.2.4458 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.4458 Problem: Vim9: compiling filter() call fails with funcref that has unknown arguments. Solution: Do not check the arguments if they are unknown at compile time. (closes #9835) Files: src/evalfunc.c, src/testdir/test_vim9_builtin.vim *** ../vim-8.2.4457/src/evalfunc.c 2022-02-23 18:07:34.361914993 +0000 --- src/evalfunc.c 2022-02-23 18:27:54.379825110 +0000 *************** *** 552,557 **** --- 552,559 ---- t_func_exp.tt_member = &t_bool; if (args[0] == NULL) args[0] = &t_unknown; + if (type->tt_argcount == -1) + t_func_exp.tt_argcount = -1; where.wt_index = 2; return check_type(&t_func_exp, type, TRUE, where); *** ../vim-8.2.4457/src/testdir/test_vim9_builtin.vim 2022-02-22 21:54:41.175163303 +0000 --- src/testdir/test_vim9_builtin.vim 2022-02-23 18:30:40.039544060 +0000 *************** *** 1340,1349 **** enddef assert_equal([1], GetFiltered()) v9.CheckDefAndScriptFailure(['filter(1.1, "1")'], ['E1013: Argument 1: type mismatch, expected list but got float', 'E1251: List, Dictionary, Blob or String required for argument 1']) v9.CheckDefAndScriptFailure(['filter([1, 2], 4)'], ['E1256: String or function required for argument 2', 'E1024: Using a Number as a String']) ! var lines =<< trim END def F(i: number, v: any): string return 'bad' enddef --- 1340,1360 ---- enddef assert_equal([1], GetFiltered()) + var lines =<< trim END + vim9script + def Func(): list + var MatchWord: func: bool = (_, v) => true + var l = ['xxx'] + return l->filter(MatchWord) + enddef + assert_equal(['xxx'], Func()) + END + v9.CheckScriptSuccess(lines) + v9.CheckDefAndScriptFailure(['filter(1.1, "1")'], ['E1013: Argument 1: type mismatch, expected list but got float', 'E1251: List, Dictionary, Blob or String required for argument 1']) v9.CheckDefAndScriptFailure(['filter([1, 2], 4)'], ['E1256: String or function required for argument 2', 'E1024: Using a Number as a String']) ! lines =<< trim END def F(i: number, v: any): string return 'bad' enddef *** ../vim-8.2.4457/src/version.c 2022-02-23 18:07:34.365914989 +0000 --- src/version.c 2022-02-23 18:44:33.142979481 +0000 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 4458, /**/ -- I AM THANKFUL... ...for the mess to clean after a party because it means I have been surrounded by friends. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///