patch 8.2.2539: Vim9: return from finally block causes a hang
Problem: Vim9: return from finally block causes a hang.
Solution: Store both the finally and endtry indexes. (closes #7885)
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index 4d7bbf6..9d05bbf 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -422,7 +422,7 @@
var res = execute('disass s:ScriptFuncTry')
assert_match('<SNR>\d*_ScriptFuncTry\_s*' ..
'try\_s*' ..
- '\d TRY catch -> \d\+, finally -> \d\+\_s*' ..
+ '\d TRY catch -> \d\+, finally -> \d\+, endtry -> \d\+\_s*' ..
'echo "yes"\_s*' ..
'\d PUSHS "yes"\_s*' ..
'\d ECHO 1\_s*' ..
@@ -437,6 +437,7 @@
'\d\+ PUSHS "no"\_s*' ..
'\d\+ ECHO 1\_s*' ..
'finally\_s*' ..
+ '\d\+ FINALLY\_s*' ..
'throw "end"\_s*' ..
'\d\+ PUSHS "end"\_s*' ..
'\d\+ THROW\_s*' ..
@@ -1137,12 +1138,12 @@
'4 FOR $0 -> 22\_s*' ..
'5 STORE $1\_s*' ..
'try\_s*' ..
- '6 TRY catch -> 17, end -> 20\_s*' ..
+ '6 TRY catch -> 17, endtry -> 20\_s*' ..
'echo "ok"\_s*' ..
'7 PUSHS "ok"\_s*' ..
'8 ECHO 1\_s*' ..
'try\_s*' ..
- '9 TRY catch -> 13, end -> 15\_s*' ..
+ '9 TRY catch -> 13, endtry -> 15\_s*' ..
'echo "deeper"\_s*' ..
'10 PUSHS "deeper"\_s*' ..
'11 ECHO 1\_s*' ..
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index eb46d35..0fb09fd 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -577,6 +577,16 @@
counter += 1
endfor
assert_equal(4, counter)
+
+ # return in finally after empty catch
+ def ReturnInFinally(): number
+ try
+ finally
+ return 4
+ endtry
+ return 2
+ enddef
+ assert_equal(4, ReturnInFinally())
enddef
def Test_cnext_works_in_catch()