diff options
-rw-r--r-- | src/testdir/test_vim9_func.vim | 13 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 4 |
3 files changed, 18 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index bc65bb163..c7a968eb1 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -739,6 +739,19 @@ def Test_lambda_uses_assigned_var() 'x = filter(["bbb"], (_, v) => v =~ x)']) enddef +def Test_pass_legacy_lambda_to_def_func() + var lines =<< trim END + vim9script + func Foo() + eval s:Bar({x -> 0}) + endfunc + def Bar(y: any) + enddef + Foo() + END + CheckScriptSuccess(lines) +enddef + " Default arg and varargs def MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string var res = one .. ',' .. two diff --git a/src/version.c b/src/version.c index 58908cda1..4036e2ee1 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2572, +/**/ 2571, /**/ 2570, diff --git a/src/vim9compile.c b/src/vim9compile.c index f7bdf313c..f6d1fb3d8 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -274,7 +274,7 @@ arg_exists( * Lookup a script-local variable in the current script, possibly defined in a * block that contains the function "cctx->ctx_ufunc". * "cctx" is NULL at the script level. - * if "len" is <= 0 "name" must be NUL terminated. + * If "len" is <= 0 "name" must be NUL terminated. * Return NULL when not found. */ static sallvar_T * @@ -8730,6 +8730,8 @@ set_function_type(ufunc_T *ufunc) // The type is included in "tt_args". if (argcount > 0 || varargs) { + if (ufunc->uf_type_list.ga_itemsize == 0) + ga_init2(&ufunc->uf_type_list, sizeof(type_T *), 10); ufunc->uf_func_type = alloc_func_type(ufunc->uf_ret_type, argcount, &ufunc->uf_type_list); // Add argument types to the function type. |