patch 8.2.2506: Vim9: :continue does not work correctly in a :try block
Problem: Vim9: :continue does not work correctly in a :try block
Solution: Add the TRYCLEANUP instruction. (closes #7827)
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index 1c57432..4d7bbf6 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -1111,6 +1111,63 @@
instr)
enddef
+def ForLoopContinue()
+ for nr in [1, 2]
+ try
+ echo "ok"
+ try
+ echo "deeper"
+ catch
+ continue
+ endtry
+ catch
+ echo "not ok"
+ endtry
+ endfor
+enddef
+
+def Test_disassemble_for_loop_continue()
+ var instr = execute('disassemble ForLoopContinue')
+ assert_match('ForLoopContinue\_s*' ..
+ 'for nr in \[1, 2]\_s*' ..
+ '0 STORE -1 in $0\_s*' ..
+ '1 PUSHNR 1\_s*' ..
+ '2 PUSHNR 2\_s*' ..
+ '3 NEWLIST size 2\_s*' ..
+ '4 FOR $0 -> 22\_s*' ..
+ '5 STORE $1\_s*' ..
+ 'try\_s*' ..
+ '6 TRY catch -> 17, end -> 20\_s*' ..
+ 'echo "ok"\_s*' ..
+ '7 PUSHS "ok"\_s*' ..
+ '8 ECHO 1\_s*' ..
+ 'try\_s*' ..
+ '9 TRY catch -> 13, end -> 15\_s*' ..
+ 'echo "deeper"\_s*' ..
+ '10 PUSHS "deeper"\_s*' ..
+ '11 ECHO 1\_s*' ..
+ 'catch\_s*' ..
+ '12 JUMP -> 15\_s*' ..
+ '13 CATCH\_s*' ..
+ 'continue\_s*' ..
+ '14 TRY-CONTINUE 2 levels -> 4\_s*' ..
+ 'endtry\_s*' ..
+ '15 ENDTRY\_s*' ..
+ 'catch\_s*' ..
+ '16 JUMP -> 20\_s*' ..
+ '17 CATCH\_s*' ..
+ 'echo "not ok"\_s*' ..
+ '18 PUSHS "not ok"\_s*' ..
+ '19 ECHO 1\_s*' ..
+ 'endtry\_s*' ..
+ '20 ENDTRY\_s*' ..
+ 'endfor\_s*' ..
+ '21 JUMP -> 4\_s*' ..
+ '\d\+ DROP\_s*' ..
+ '\d\+ RETURN 0',
+ instr)
+enddef
+
let g:number = 42
def TypeCast()