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;
|
pt->pt_name = name;
|
||||||
func_ref(name);
|
func_ref(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (arg_pt != NULL)
|
||||||
|
pt->pt_outer = arg_pt->pt_outer;
|
||||||
}
|
}
|
||||||
rettv->v_type = VAR_PARTIAL;
|
rettv->v_type = VAR_PARTIAL;
|
||||||
rettv->vval.v_partial = pt;
|
rettv->vval.v_partial = pt;
|
||||||
|
@@ -3455,6 +3455,28 @@ def Test_nested_lambda_in_closure()
|
|||||||
delete('XnestedDone')
|
delete('XnestedDone')
|
||||||
enddef
|
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()
|
def Test_check_func_arg_types()
|
||||||
var lines =<< trim END
|
var lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
|
@@ -746,6 +746,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4321,
|
||||||
/**/
|
/**/
|
||||||
4320,
|
4320,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user