mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -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
|
enddef
|
||||||
|
|
||||||
|
def LambdaUsingArg(x: number): func
|
||||||
|
return {->
|
||||||
|
# some comment
|
||||||
|
x == 1
|
||||||
|
# some comment
|
||||||
|
||
|
||||||
|
x == 2
|
||||||
|
}
|
||||||
|
enddef
|
||||||
|
|
||||||
def Test_expr7_lambda()
|
def Test_expr7_lambda()
|
||||||
let La = { -> 'result'}
|
let La = { -> 'result'}
|
||||||
assert_equal('result', La())
|
assert_equal('result', La())
|
||||||
@@ -1481,6 +1491,9 @@ def Test_expr7_lambda()
|
|||||||
assert_equal(true, LambdaWithComments()(2))
|
assert_equal(true, LambdaWithComments()(2))
|
||||||
assert_equal(false, LambdaWithComments()(3))
|
assert_equal(false, LambdaWithComments()(3))
|
||||||
|
|
||||||
|
assert_equal(false, LambdaUsingArg(0)())
|
||||||
|
assert_equal(true, LambdaUsingArg(1)())
|
||||||
|
|
||||||
call CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:')
|
call CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:')
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
@@ -754,6 +754,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 */
|
||||||
|
/**/
|
||||||
|
1434,
|
||||||
/**/
|
/**/
|
||||||
1433,
|
1433,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -2135,7 +2135,10 @@ compile_load(char_u **arg, char_u *end_arg, cctx_T *cctx, int error)
|
|||||||
if (gen_load)
|
if (gen_load)
|
||||||
res = generate_LOAD(cctx, ISN_LOAD, idx, NULL, type);
|
res = generate_LOAD(cctx, ISN_LOAD, idx, NULL, type);
|
||||||
if (gen_load_outer)
|
if (gen_load_outer)
|
||||||
|
{
|
||||||
res = generate_LOAD(cctx, ISN_LOADOUTER, idx, NULL, type);
|
res = generate_LOAD(cctx, ISN_LOADOUTER, idx, NULL, type);
|
||||||
|
cctx->ctx_outer_used = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*arg = end;
|
*arg = end;
|
||||||
|
Reference in New Issue
Block a user