Mercurial > vim
diff src/testdir/test_vim9_script.vim @ 25650:6ed39aa92cb9 v8.2.3361
patch 8.2.3361: Vim9: crash with nested :while
Commit: https://github.com/vim/vim/commit/d895b1d918f7d56dd9dd564be4820082ba6492e9
Author: rbtnn <naru123456789@gmail.com>
Date: Fri Aug 20 20:54:25 2021 +0200
patch 8.2.3361: Vim9: crash with nested :while
Problem: Vim9: crash with nested :while.
Solution: Handle skipping better. (Naruhiko Nishino, closes https://github.com/vim/vim/issues/8778)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 20 Aug 2021 21:00:06 +0200 |
parents | 27cb2e79ccde |
children | ef38fc02faaa |
line wrap: on
line diff
--- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -2856,6 +2856,89 @@ def Test_for_loop_with_try_continue() CheckDefAndScriptSuccess(lines) enddef +def Test_while_skipped_block() + # test skipped blocks at outside of function + var lines =<< trim END + var result = [] + var n = 0 + if true + n = 1 + while n < 3 + result += [n] + n += 1 + endwhile + else + n = 3 + while n < 5 + result += [n] + n += 1 + endwhile + endif + assert_equal([1, 2], result) + + result = [] + if false + n = 1 + while n < 3 + result += [n] + n += 1 + endwhile + else + n = 3 + while n < 5 + result += [n] + n += 1 + endwhile + endif + assert_equal([3, 4], result) + END + CheckDefAndScriptSuccess(lines) + + # test skipped blocks at inside of function + lines =<< trim END + def DefTrue() + var result = [] + var n = 0 + if true + n = 1 + while n < 3 + result += [n] + n += 1 + endwhile + else + n = 3 + while n < 5 + result += [n] + n += 1 + endwhile + endif + assert_equal([1, 2], result) + enddef + DefTrue() + + def DefFalse() + var result = [] + var n = 0 + if false + n = 1 + while n < 3 + result += [n] + n += 1 + endwhile + else + n = 3 + while n < 5 + result += [n] + n += 1 + endwhile + endif + assert_equal([3, 4], result) + enddef + DefFalse() + END + CheckDefAndScriptSuccess(lines) +enddef + def Test_while_loop() var result = '' var cnt = 0