summaryrefslogtreecommitdiffstats
path: root/src/testdir/test_vim9_script.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-09-21 18:59:14 +0100
committerBram Moolenaar <Bram@vim.org>2022-09-21 18:59:14 +0100
commite8e369a796e110760d033e937b40c84e0c5e8b36 (patch)
treeaaf71aeb71f9bf17a914a8c56322394fe6f30484 /src/testdir/test_vim9_script.vim
parentec5e1483ebda577e0b7f638c485203cd0e479c47 (diff)
patch 9.0.0535: closure gets wrong value in for loop with two loop variablesv9.0.0535
Problem: Closure gets wrong value in for loop with two loop variables. Solution: Correctly compute the number of loop variables to clear.
Diffstat (limited to 'src/testdir/test_vim9_script.vim')
-rw-r--r--src/testdir/test_vim9_script.vim21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 3ee7e2e832..54b4ea16d0 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -2323,6 +2323,27 @@ def Test_for_loop_with_closure()
endfor
END
v9.CheckDefAndScriptSuccess(lines)
+
+ # using two loop variables
+ lines =<< trim END
+ var lv_list: list<func>
+ var copy_list: list<func>
+ for [idx, c] in items('word')
+ var lidx = idx
+ var lc = c
+ lv_list[idx] = () => {
+ return idx .. c
+ }
+ copy_list[idx] = () => {
+ return lidx .. lc
+ }
+ endfor
+ for [i, c] in items('word')
+ assert_equal(3 .. 'd', lv_list[i]())
+ assert_equal(i .. c, copy_list[i]())
+ endfor
+ END
+ v9.CheckDefAndScriptSuccess(lines)
enddef
def Test_define_global_closure_in_loops()