From fa02616718103be3f9e13e26d57905d4eddf836d Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 23 Feb 2022 21:03:32 +0000 Subject: [PATCH] patch 8.2.4459: Vim9: compiling sort() call fails with unknown arguments Problem: Vim9: compiling sort() call fails with a funcref that has unknown arguments. Solution: Do not check the arguments if they are unknown at compile time. (closes #9835) --- src/evalfunc.c | 2 ++ src/testdir/test_vim9_builtin.vim | 11 +++++++++++ src/version.c | 2 ++ 3 files changed, 15 insertions(+) diff --git a/src/evalfunc.c b/src/evalfunc.c index e8ed4bab04..1b93200367 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -624,6 +624,8 @@ arg_sort_how(type_T *type, type_T *decl_type UNUSED, argcontext_T *context) where_T where = WHERE_INIT; args[1] = args[0]; + if (type->tt_argcount == -1) + t_func_exp.tt_argcount = -1; where.wt_index = 2; return check_type(&t_func_exp, type, TRUE, where); } diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index dfec991f8d..7577aecd2a 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -3812,6 +3812,17 @@ def Test_sort_argument() sort([1, 2, 3], (a: any, b: any) => 1) END v9.CheckDefAndScriptSuccess(lines) + + lines =<< trim END + vim9script + def SortedList(): list + var Lambda: func: number = (a, b): number => a - b + var l = [3, 2, 1] + return l->sort(Lambda) + enddef + SortedList()->assert_equal([1, 2, 3]) + END + v9.CheckScriptSuccess(lines) enddef def Test_sort_compare_func_fails() diff --git a/src/version.c b/src/version.c index 800925df98..f8fb3139c9 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4459, /**/ 4458, /**/ -- 2.47.3