Mercurial > vim
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