diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-09-21 18:59:14 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-09-21 18:59:14 +0100 |
commit | e8e369a796e110760d033e937b40c84e0c5e8b36 (patch) | |
tree | aaf71aeb71f9bf17a914a8c56322394fe6f30484 /src/testdir/test_vim9_script.vim | |
parent | ec5e1483ebda577e0b7f638c485203cd0e479c47 (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.vim | 21 |
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() |