patch 8.2.3361: Vim9: crash with nested :while
Problem: Vim9: crash with nested :while.
Solution: Handle skipping better. (Naruhiko Nishino, closes #8778)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 407ace3..ffea2ac 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -2856,6 +2856,89 @@
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