changeset 31770:8d2bfc85e3c5 v9.0.1217

patch 9.0.1217: using an object member in a closure doesn't work Commit: https://github.com/vim/vim/commit/486fc25a295464d107264b63997bdbe3745e3c71 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jan 18 14:51:07 2023 +0000 patch 9.0.1217: using an object member in a closure doesn't work Problem: Using an object member in a closure doesn't work. Solution: Initialize lv_loop_depth. (closes https://github.com/vim/vim/issues/11840)
author Bram Moolenaar <Bram@vim.org>
date Wed, 18 Jan 2023 16:00:06 +0100
parents a169126bf2a3
children 03c8e327f5ee
files src/testdir/test_vim9_class.vim src/version.c src/vim9compile.c
diffstat 3 files changed, 21 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -66,6 +66,7 @@ lookup_local(char_u *name, size_t len, l
 	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)
 	    {