patch 8.2.1236: Vim9: a few errors not caught by try/catch

Problem:    Vim9: a few errors not caught by try/catch.
Solution:   Do not bail out if an error is inside try/catch.  Fix that a not
            matching catch doesn't jump to :endtry.
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 035ea0b..a646de9 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -511,6 +511,22 @@
   endtry # comment
   assert_equal(['1', 'wrong', '3'], l)
 
+  l = []
+  try
+    try
+      add(l, '1')
+      throw 'wrong'
+      add(l, '2')
+    catch /right/
+      add(l, v:exception)
+    endtry
+  catch /wrong/
+    add(l, 'caught')
+  finally
+    add(l, 'finally')
+  endtry
+  assert_equal(['1', 'caught', 'finally'], l)
+
   let n: number
   try
     n = l[3]
@@ -591,15 +607,63 @@
   endtry
   assert_equal(277, n)
 
-  #  TODO: make this work
-  #  try
-  #    &ts = g:astring
-  #  catch /E1093:/
-  #    n = 288
-  #  endtry
-  #  assert_equal(288, n)
+  try
+    &ts = g:astring
+  catch /E1029:/
+    n = 288
+  endtry
+  assert_equal(288, n)
+
+  try
+    &backspace = 'asdf'
+  catch /E474:/
+    n = 299
+  endtry
+  assert_equal(299, n)
+
+  l = [1]
+  try
+    l[3] = 3
+  catch /E684:/
+    n = 300
+  endtry
+  assert_equal(300, n)
+
+  try
+    d[''] = 3
+  catch /E713:/
+    n = 311
+  endtry
+  assert_equal(311, n)
+
+  try
+    unlet g:does_not_exist
+  catch /E108:/
+    n = 322
+  endtry
+  assert_equal(322, n)
+
+  try
+    d = {'text': 1, g:astring: 2}
+  catch /E721:/
+    n = 333
+  endtry
+  assert_equal(333, n)
+
+  try
+    l = DeletedFunc()
+  catch /E933:/
+    n = 344
+  endtry
+  assert_equal(344, n)
 enddef
 
+def DeletedFunc(): list<any>
+  return ['delete me']
+enddef
+defcompile
+delfunc DeletedFunc
+
 def ThrowFromDef()
   throw "getout" # comment
 enddef