patch 8.2.3209: Vim9: lambda doesn't find block-local variable
Problem: Vim9: lambda doesn't find block-local variable.
Solution: Adjust how a script-local variable is found. (closes #8614)
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 8ac05d4..e8df8a7 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -2352,6 +2352,42 @@
assert_match('def <lambda>\d\+(_: any): number\n1 return 0\n enddef', body)
enddef
+def Test_lamba_block_variable()
+ var lines =<< trim END
+ vim9script
+ var flist: list<func>
+ for i in range(10)
+ var inloop = i
+ flist[i] = () => inloop
+ endfor
+ END
+ CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+ if true
+ var outloop = 5
+ var flist: list<func>
+ for i in range(10)
+ flist[i] = () => outloop
+ endfor
+ endif
+ END
+ CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+ if true
+ var outloop = 5
+ endif
+ var flist: list<func>
+ for i in range(10)
+ flist[i] = () => outloop
+ endfor
+ END
+ CheckScriptFailure(lines, 'E1001: Variable not found: outloop', 1)
+enddef
+
def Test_legacy_lambda()
legacy echo {x -> 'hello ' .. x}('foo')