changeset 23618:d228ca435f3a v8.2.2351

patch 8.2.2351: Vim9: error msg for "throw" in function called with "silent!" Commit: https://github.com/vim/vim/commit/8f81b22e8691f6e7c76153e945bbef15a8190cd9 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jan 14 21:47:06 2021 +0100 patch 8.2.2351: Vim9: error msg for "throw" in function called with "silent!" Problem: Vim9: error message for "throw" in function that was called with "silent!". Solution: Do not throw the exception when not caught or displayed. (closes #7672)
author Bram Moolenaar <Bram@vim.org>
date Thu, 14 Jan 2021 22:00:04 +0100
parents d56613e7b15e
children 2d5c14704a42
files src/testdir/test_vim9_script.vim src/version.c src/vim9execute.c
diffstat 3 files changed, 26 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -564,6 +564,19 @@ def Test_throw_skipped()
   endif
 enddef
 
+def Test_nocatch_throw_silenced()
+  var lines =<< trim END
+    vim9script
+    def Func()
+      throw 'error'
+    enddef
+    silent! Func()
+  END
+  writefile(lines, 'XthrowSilenced')
+  source XthrowSilenced
+  delete('XthrowSilenced')
+enddef
+
 def DeletedFunc(): list<any>
   return ['delete me']
 enddef
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2351,
+/**/
     2350,
 /**/
     2349,
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -2605,6 +2605,17 @@ call_def_function(
 		break;
 
 	    case ISN_THROW:
+		if (ectx.ec_trystack.ga_len == 0 && trylevel == 0
+								&& emsg_silent)
+		{
+		    // throwing an exception while using "silent!" causes the
+		    // function to abort but not display an error.
+		    tv = STACK_TV_BOT(-1);
+		    clear_tv(tv);
+		    tv->v_type = VAR_NUMBER;
+		    tv->vval.v_number = 0;
+		    goto done;
+		}
 		--ectx.ec_stack.ga_len;
 		tv = STACK_TV_BOT(0);
 		if (tv->vval.v_string == NULL