diff --git a/src/evalfunc.c b/src/evalfunc.c index 3cc95c988..eb12e75d0 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -4454,6 +4454,9 @@ common_function(typval_T *argvars, typval_T *rettv, int is_funcref) pt->pt_name = name; func_ref(name); } + + if (arg_pt != NULL) + pt->pt_outer = arg_pt->pt_outer; } rettv->v_type = VAR_PARTIAL; rettv->vval.v_partial = pt; diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index e781a21a1..7ab15f72f 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -3455,6 +3455,28 @@ def Test_nested_lambda_in_closure() delete('XnestedDone') enddef +def Test_nested_closure_funcref() + var lines =<< trim END + vim9script + def Func() + var n: number + def Nested() + ++n + enddef + Nested() + g:result_one = n + var Ref = function(Nested) + Ref() + g:result_two = n + enddef + Func() + END + v9.CheckScriptSuccess(lines) + assert_equal(1, g:result_one) + assert_equal(2, g:result_two) + unlet g:result_one g:result_two +enddef + def Test_check_func_arg_types() var lines =<< trim END vim9script diff --git a/src/version.c b/src/version.c index 4fdeb2fde..97bcfdef9 100644 --- a/src/version.c +++ b/src/version.c @@ -746,6 +746,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4321, /**/ 4320, /**/