diff options
author | Bram Moolenaar <Bram@vim.org> | 2023-01-18 14:51:07 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-01-18 14:51:07 +0000 |
commit | 486fc25a295464d107264b63997bdbe3745e3c71 (patch) | |
tree | 7f3c8da20d8ac6471bf2d8dfe57a28d63a01898c | |
parent | 64f1c4152e939ca41d57d5b4376be522736ba22a (diff) | |
download | vim-git-9.0.1217.tar.gz |
patch 9.0.1217: using an object member in a closure doesn't workv9.0.1217
Problem: Using an object member in a closure doesn't work.
Solution: Initialize lv_loop_depth. (closes #11840)
-rw-r--r-- | src/testdir/test_vim9_class.vim | 18 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 1 |
3 files changed, 21 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index dadd3e4df..03798268a 100644 --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -1214,5 +1214,23 @@ def Test_abstract_class() v9.CheckScriptFailure(lines, 'E1316:') enddef +def Test_closure_in_class() + var lines =<< trim END + vim9script + + class Foo + this.y: list<string> = ['B'] + + def new() + g:result = filter(['A', 'B'], (_, v) => index(this.y, v) == -1) + enddef + endclass + + Foo.new() + assert_equal(['A'], g:result) + END + v9.CheckScriptSuccess(lines) +enddef + " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/version.c b/src/version.c index d63abc349..4c7d8962c 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1217, +/**/ 1216, /**/ 1215, diff --git a/src/vim9compile.c b/src/vim9compile.c index c89c37aab..3a55186de 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -66,6 +66,7 @@ lookup_local(char_u *name, size_t len, lvar_T *lvar, cctx_T *cctx) if (lvar != NULL) { CLEAR_POINTER(lvar); + lvar->lv_loop_depth = -1; lvar->lv_name = (char_u *)(is_super ? "super" : "this"); if (cctx->ctx_ufunc->uf_class != NULL) { |