patch 8.2.0216: several Vim9 instructions are not tested

Problem:    Several Vim9 instructions are not tested.
Solution:   Add more tests. Fix :disassamble output. Make catch with pattern
            work.
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index dc1c0b9..b862d0c 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -474,6 +474,15 @@
   echo @z
 enddef
 
+def s:ScriptFuncPush()
+  let localbool = true
+  let localspec = v:none
+  let localblob = 0z1234
+  if has('float')
+    let localfloat = 1.234
+  endif
+enddef
+
 def s:ScriptFuncStore()
   let localnr = 1
   localnr = 2
@@ -487,6 +496,16 @@
   @z = 'rv'
 enddef
 
+def s:ScriptFuncTry()
+  try
+    echo 'yes'
+  catch /fail/
+    echo 'no'
+  finally
+    echo 'end'
+  endtry
+enddef
+
 def Test_disassemble()
   assert_fails('disass NoFunc', 'E1061:')
   assert_fails('disass NotCompiled', 'E1062:')
@@ -504,9 +523,22 @@
         \ .. ' LOADREG @z.*'
         \, res)
 
-  " TODO:
-  " v:char =
-  " s:scriptvar =
+  res = execute('disass s:ScriptFuncPush')
+  assert_match('<SNR>\d*_ScriptFuncPush.*'
+        \ .. 'localbool = true.*'
+        \ .. ' PUSH v:true.*'
+        \ .. 'localspec = v:none.*'
+        \ .. ' PUSH v:none.*'
+        \ .. 'localblob = 0z1234.*'
+        \ .. ' PUSHBLOB 0z1234.*'
+        \, res)
+  if has('float')
+  assert_match('<SNR>\d*_ScriptFuncPush.*'
+        \ .. 'localfloat = 1.234.*'
+        \ .. ' PUSHF 1.234.*'
+        \, res)
+  endif
+
   res = execute('disass s:ScriptFuncStore')
   assert_match('<SNR>\d*_ScriptFuncStore.*'
         \ .. 'localnr = 2.*'
@@ -526,6 +558,23 @@
         \ .. '@z = ''rv''.*'
         \ .. ' STOREREG @z.*'
         \, res)
+
+  res = execute('disass s:ScriptFuncTry')
+  assert_match('<SNR>\d*_ScriptFuncTry.*'
+        \ .. 'try.*'
+        \ .. 'TRY catch -> \d\+, finally -> \d\+.*'
+        \ .. 'catch /fail/.*'
+        \ .. ' JUMP -> \d\+.*'
+        \ .. ' PUSH v:exception.*'
+        \ .. ' PUSHS "fail".*'
+        \ .. ' COMPARESTRING =\~.*'
+        \ .. ' JUMP_IF_FALSE -> \d\+.*'
+        \ .. ' CATCH.*'
+        \ .. 'finally.*'
+        \ .. ' PUSHS "end".*'
+        \ .. 'endtry.*'
+        \ .. ' ENDTRY.*'
+        \, res)
 enddef
 
 
diff --git a/src/version.c b/src/version.c
index 20a6be4..45b4cc2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    216,
+/**/
     215,
 /**/
     214,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 117bfd2..12400a3 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -4369,13 +4369,33 @@
     }
     else
     {
+	char_u *end;
+	char_u *pat;
+	char_u *tofree = NULL;
+	size_t len;
+
 	// Push v:exception, push {expr} and MATCH
 	generate_instr_type(cctx, ISN_PUSHEXC, &t_string);
 
-	if (compile_expr1(&p, cctx) == FAIL)
-	    return NULL;
+	end = skip_regexp(p + 1, *p, TRUE, &tofree);
+	if (*end != *p)
+	{
+	    semsg(_("E1067: Separator mismatch: %s"), p);
+	    vim_free(tofree);
+	    return FAIL;
+	}
+	if (tofree == NULL)
+	    len = end - (p + 1);
+	else
+	    len = end - (tofree + 1);
+	pat = vim_strnsave(p + 1, len);
+	vim_free(tofree);
+	p += len + 2;
+	if (pat == NULL)
+	    return FAIL;
+	if (generate_PUSHS(cctx, pat) == FAIL)
+	    return FAIL;
 
-	// TODO: check for strings?
 	if (generate_COMPARE(cctx, EXPR_MATCH, FALSE) == FAIL)
 	    return NULL;
 
diff --git a/src/vim9execute.c b/src/vim9execute.c
index e84c70e..093fbad 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -1726,7 +1726,7 @@
 		    char_u	*tofree;
 
 		    r = blob2string(iptr->isn_arg.blob, &tofree, numbuf);
-		    smsg("%4d PUSHBLOB \"%s\"", current, r);
+		    smsg("%4d PUSHBLOB %s", current, r);
 		    vim_free(tofree);
 		}
 		break;