1
0
forked from aniani/vim

patch 8.2.2141: a user command with try/catch may not catch an expression error

Problem:    A user command with try/catch may not catch an expression error.
Solution:   When an expression fails check for following "|". (closes #7469)
This commit is contained in:
Bram Moolenaar 2020-12-13 20:26:29 +01:00
parent 2a3cd3af45
commit 8143a53c53
4 changed files with 34 additions and 4 deletions

View File

@ -2158,7 +2158,10 @@ eval0(
semsg(_(e_invexpr2), arg); semsg(_(e_invexpr2), arg);
// Some of the expression may not have been consumed. Do not check for // Some of the expression may not have been consumed. Do not check for
// a next command to avoid more errors. // a next command to avoid more errors, unless "|" is following, which
// could only be a command separator.
if (eap != NULL && skipwhite(p)[0] == '|' && skipwhite(p)[1] != '|')
eap->nextcmd = check_nextcmd(p);
return FAIL; return FAIL;
} }

View File

@ -2199,5 +2199,30 @@ func Test_BufEnter_exception()
%bwipe! %bwipe!
endfunc endfunc
" Test for using try/catch in a user command with a failing expression {{{1
func Test_user_command_try_catch()
let lines =<< trim END
function s:throw() abort
throw 'error'
endfunction
command! Execute
\ try
\ | let s:x = s:throw()
\ | catch
\ | let g:caught = 'caught'
\ | endtry
let g:caught = 'no'
Execute
call assert_equal('caught', g:caught)
END
call writefile(lines, 'XtestTryCatch')
source XtestTryCatch
call delete('XtestTryCatch')
unlet g:caught
endfunc
" Modeline {{{1 " Modeline {{{1
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker

View File

@ -6825,7 +6825,7 @@ func Test_script_lines()
\ ]) \ ])
call assert_report("Shouldn't be able to define function") call assert_report("Shouldn't be able to define function")
catch catch
call assert_exception('Vim(function):E126: Missing :endfunction') call assert_exception('Vim(function):E1145: Missing heredoc end marker: .')
endtry endtry
" :change " :change
@ -6845,7 +6845,7 @@ func Test_script_lines()
\ ]) \ ])
call assert_report("Shouldn't be able to define function") call assert_report("Shouldn't be able to define function")
catch catch
call assert_exception('Vim(function):E126: Missing :endfunction') call assert_exception('Vim(function):E1145: Missing heredoc end marker: .')
endtry endtry
" :insert " :insert
@ -6865,7 +6865,7 @@ func Test_script_lines()
\ ]) \ ])
call assert_report("Shouldn't be able to define function") call assert_report("Shouldn't be able to define function")
catch catch
call assert_exception('Vim(function):E126: Missing :endfunction') call assert_exception('Vim(function):E1145: Missing heredoc end marker: .')
endtry endtry
endfunc endfunc

View File

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