patch 8.2.4499: Vim9: at the script level declarations leak to next block
Problem: Vim9: at the script level declarations leak from try block to
catch and finally block.
Solution: End the block and start a new one. (closes #9883)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 3c3434d..68178cf 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -763,6 +763,30 @@
v9.CheckDefAndScriptSuccess(lines)
enddef
+def Test_try_var_decl()
+ var lines =<< trim END
+ vim9script
+ try
+ var in_try = 1
+ assert_equal(1, get(s:, 'in_try', -1))
+ throw "getout"
+ catch
+ var in_catch = 2
+ assert_equal(-1, get(s:, 'in_try', -1))
+ assert_equal(2, get(s:, 'in_catch', -1))
+ finally
+ var in_finally = 3
+ assert_equal(-1, get(s:, 'in_try', -1))
+ assert_equal(-1, get(s:, 'in_catch', -1))
+ assert_equal(3, get(s:, 'in_finally', -1))
+ endtry
+ assert_equal(-1, get(s:, 'in_try', -1))
+ assert_equal(-1, get(s:, 'in_catch', -1))
+ assert_equal(-1, get(s:, 'in_finally', -1))
+ END
+ v9.CheckScriptSuccess(lines)
+enddef
+
def Test_try_ends_in_return()
var lines =<< trim END
vim9script