patch 8.2.2217: Vim9: command modifiers not restored in catch block
Problem: Vim9: command modifiers not restored in catch block.
Solution: Restore command modifiers. (closes #7542)
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index a55ba64..f5619b4 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -546,6 +546,13 @@
silent EchoThere()
assert_equal("\nthere", execute(':1messages'))
+
+ try
+ silent eval [][0]
+ catch
+ echomsg "caught"
+ endtry
+ assert_equal("\ncaught", execute(':1messages'))
enddef
def Test_range_after_command_modifier()
diff --git a/src/version.c b/src/version.c
index 6f30739..f48c2af 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2217,
+/**/
2216,
/**/
2215,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 4150592..4d88991 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -2286,6 +2286,13 @@
{
garray_T *trystack = &ectx.ec_trystack;
+ if (restore_cmdmod)
+ {
+ cmdmod.cmod_filter_regmatch.regprog = NULL;
+ undo_cmdmod(&cmdmod);
+ cmdmod = save_cmdmod;
+ restore_cmdmod = FALSE;
+ }
if (trystack->ga_len > 0)
{
trycmd_T *trycmd = ((trycmd_T *)trystack->ga_data)