mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.2.1434: Vim9: crash when lambda uses outer function argument
Problem: Vim9: crash when lambda uses outer function argument. Solution: Set the flag that the outer context is used.
This commit is contained in:
@@ -1443,6 +1443,16 @@ def LambdaWithComments(): func
|
||||
}
|
||||
enddef
|
||||
|
||||
def LambdaUsingArg(x: number): func
|
||||
return {->
|
||||
# some comment
|
||||
x == 1
|
||||
# some comment
|
||||
||
|
||||
x == 2
|
||||
}
|
||||
enddef
|
||||
|
||||
def Test_expr7_lambda()
|
||||
let La = { -> 'result'}
|
||||
assert_equal('result', La())
|
||||
@@ -1481,6 +1491,9 @@ def Test_expr7_lambda()
|
||||
assert_equal(true, LambdaWithComments()(2))
|
||||
assert_equal(false, LambdaWithComments()(3))
|
||||
|
||||
assert_equal(false, LambdaUsingArg(0)())
|
||||
assert_equal(true, LambdaUsingArg(1)())
|
||||
|
||||
call CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:')
|
||||
enddef
|
||||
|
||||
|
@@ -754,6 +754,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1434,
|
||||
/**/
|
||||
1433,
|
||||
/**/
|
||||
|
@@ -2135,7 +2135,10 @@ compile_load(char_u **arg, char_u *end_arg, cctx_T *cctx, int error)
|
||||
if (gen_load)
|
||||
res = generate_LOAD(cctx, ISN_LOAD, idx, NULL, type);
|
||||
if (gen_load_outer)
|
||||
{
|
||||
res = generate_LOAD(cctx, ISN_LOADOUTER, idx, NULL, type);
|
||||
cctx->ctx_outer_used = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
*arg = end;
|
||||
|
Reference in New Issue
Block a user