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);
// 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;
}

View File

@ -2199,5 +2199,30 @@ func Test_BufEnter_exception()
%bwipe!
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
" 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")
catch
call assert_exception('Vim(function):E126: Missing :endfunction')
call assert_exception('Vim(function):E1145: Missing heredoc end marker: .')
endtry
" :change
@ -6845,7 +6845,7 @@ func Test_script_lines()
\ ])
call assert_report("Shouldn't be able to define function")
catch
call assert_exception('Vim(function):E126: Missing :endfunction')
call assert_exception('Vim(function):E1145: Missing heredoc end marker: .')
endtry
" :insert
@ -6865,7 +6865,7 @@ func Test_script_lines()
\ ])
call assert_report("Shouldn't be able to define function")
catch
call assert_exception('Vim(function):E126: Missing :endfunction')
call assert_exception('Vim(function):E1145: Missing heredoc end marker: .')
endtry
endfunc

View File

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