patch 8.2.3216: Vim9: crash when using variable in a loop at script level
Problem: Vim9: crash when using variable in a loop at script level.
Solution: Do not clear the variable if a function was defined.
Do not create a new entry in sn_var_vals every time.
(closes #8628)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 8c80e18..14684c0 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -2592,6 +2592,34 @@
CheckDefAndScriptSuccess(lines)
enddef
+def Test_for_loop_with_closure()
+ var 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(4, flist[i]())
+ endfor
+ END
+ CheckDefAndScriptSuccess(lines)
+
+ lines =<< trim END
+ var flist: list<func>
+ for i in range(5)
+ var inloop = i
+ flist[i] = () => {
+ return inloop
+ }
+ endfor
+ for i in range(5)
+ assert_equal(4, flist[i]())
+ endfor
+ END
+ CheckDefAndScriptSuccess(lines)
+enddef
+
def Test_for_loop_fails()
CheckDefAndScriptFailure2(['for '], 'E1097:', 'E690:')
CheckDefAndScriptFailure2(['for x'], 'E1097:', 'E690:')