# HG changeset patch # User Bram Moolenaar # Date 1610658004 -3600 # Node ID d228ca435f3a83a5a11934febd61dbe8337bec68 # Parent d56613e7b15efc4247d45ed30881c68144393e9d 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 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) diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- 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 return ['delete me'] enddef diff --git a/src/version.c b/src/version.c --- 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, diff --git a/src/vim9execute.c b/src/vim9execute.c --- 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