0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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)
This commit is contained in:
Bram Moolenaar 2021-01-14 21:47:06 +01:00
parent 033135eb8e
commit 8f81b22e86
3 changed files with 26 additions and 0 deletions

View File

@ -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

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2351,
/**/
2350,
/**/

View File

@ -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