forked from aniani/vim
patch 8.2.4321: Vim9: crash when using a funcref to a closure
Problem: Vim9: crash when using a funcref to a closure. Solution: Copy pt_outer to the new partial. (closes #9714)
This commit is contained in:
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -746,6 +746,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
4321,
|
||||
/**/
|
||||
4320,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user