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

patch 8.2.3448: :endtry after function call that throws not found

Problem:    :endtry after function call that throws not found.
Solution:   Do check for following :endtry if an exception is being thrown.
            (closes #8889)
This commit is contained in:
Bram Moolenaar 2021-09-18 15:25:52 +02:00
parent d2b98ab4ec
commit 1d34189ecb
3 changed files with 34 additions and 4 deletions

View File

@ -2236,7 +2236,7 @@ func Test_user_command_throw_in_function_call()
catch /my_error/
let caught = 'yes'
catch
let caught = 'no'
let caught = v:exception
endtry
call assert_equal('yes', caught)
END
@ -2247,6 +2247,32 @@ func Test_user_command_throw_in_function_call()
unlet g:caught
endfunc
" Test for using throw in a called function with following endtry {{{1
func Test_user_command_function_call_with_endtry()
let lines =<< trim END
funct s:throw(msg) abort
throw a:msg
endfunc
func s:main() abort
try
try
throw 'err1'
catch
call s:throw('err2') | endtry
catch
let s:caught = 'yes'
endtry
endfunc
call s:main()
call assert_equal('yes', s:caught)
END
call writefile(lines, 'XtestThrow')
source XtestThrow
call delete('XtestThrow')
endfunc
" Modeline {{{1
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker

View File

@ -5011,14 +5011,16 @@ ex_call(exarg_T *eap)
--emsg_skip;
clear_evalarg(&evalarg, eap);
// When inside :try we need to check for following "| catch".
if (!aborting() && (!failed || eap->cstack->cs_trylevel > 0))
// When inside :try we need to check for following "| catch" or "| endtry".
// Not when there was an error, but do check if an exception was thrown.
if ((!aborting() || did_throw)
&& (!failed || eap->cstack->cs_trylevel > 0))
{
// Check for trailing illegal characters and a following command.
arg = skipwhite(arg);
if (!ends_excmd2(eap->arg, arg))
{
if (!failed)
if (!failed && !aborting())
{
emsg_severe = TRUE;
semsg(_(e_trailing_arg), arg);

View File

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