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)