patch 9.0.1217: using an object member in a closure doesn't work v9.0.1217
authorBram Moolenaar <Bram@vim.org>
Wed, 18 Jan 2023 14:51:07 +0000 (14:51 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 18 Jan 2023 14:51:07 +0000 (14:51 +0000)
Problem:    Using an object member in a closure doesn't work.
Solution:   Initialize lv_loop_depth. (closes #11840)

src/testdir/test_vim9_class.vim
src/version.c
src/vim9compile.c

index dadd3e4df5691557d72a3fe13e84dfb70b3c15b6..03798268a299c97d2f68aa979ccea20bb282fe54 100644 (file)
@@ -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
index d63abc34902bad6f524a698773e6c9bb369cb7d1..4c7d8962cb65db119f91f150ec9a92738fdd7aaf 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1217,
 /**/
     1216,
 /**/
index c89c37aabf353deba8f915d1b9bc095a3d6885e2..3a55186de0e3b160a3d4a4450c986f5399c985e8 100644 (file)
@@ -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)
            {