Mercurial > vim
diff src/testdir/test_vim9_script.vim @ 25358:f03271631eb5 v8.2.3216
patch 8.2.3216: Vim9: crash when using variable in a loop at script level
Commit: https://github.com/vim/vim/commit/2eb6fc3b52148f961e804ec2be361d531ff770d8
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jul 25 14:13:53 2021 +0200
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 25 Jul 2021 14:15:04 +0200 |
parents | d39c12f97298 |
children | 1ffa8eb30353 |
line wrap: on
line diff
--- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -2592,6 +2592,34 @@ def Test_for_loop() 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:')