Mercurial > vim
changeset 21769:f37c1330b15c v8.2.1434
patch 8.2.1434: Vim9: crash when lambda uses outer function argument
Commit: https://github.com/vim/vim/commit/fd77748df2ba7d5f38aab649cb630374620462d7
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Aug 12 19:42:01 2020 +0200
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 12 Aug 2020 19:45:04 +0200 |
parents | c680589182eb |
children | 48e91c319616 |
files | src/testdir/test_vim9_expr.vim src/version.c src/vim9compile.c |
diffstat | 3 files changed, 18 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -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
--- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1434, +/**/ 1433, /**/ 1432,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -2135,7 +2135,10 @@ compile_load(char_u **arg, char_u *end_a 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;