patch 9.0.0724: closure in compiled function gets same variable in block
Problem: Closure in compiled function gets same variable in block.
Solution: At the end of a block to not always reset the variable count.
(issue #11094)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index c736905..05fd2fb 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -2314,6 +2314,36 @@
END
v9.CheckDefAndScriptSuccess(lines)
+ # also with an extra block level
+ lines =<< trim END
+ var flist: list<func>
+ for i in range(5)
+ {
+ var inloop = i
+ flist[i] = () => inloop
+ }
+ endfor
+ for i in range(5)
+ assert_equal(i, flist[i]())
+ endfor
+ END
+ v9.CheckDefAndScriptSuccess(lines)
+
+ # and declaration in higher block
+ lines =<< trim END
+ var flist: list<func>
+ for i in range(5)
+ var inloop = i
+ {
+ flist[i] = () => inloop
+ }
+ endfor
+ for i in range(5)
+ assert_equal(i, flist[i]())
+ endfor
+ END
+ v9.CheckDefAndScriptSuccess(lines)
+
lines =<< trim END
var flist: list<func>
for i in range(5)