mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 8.0.1423: error in return not caught by try/catch
Problem: Error in return not caught by try/catch. Solution: Call update_force_abort(). (Yasuhiro Matsomoto, closes #2483)
This commit is contained in:
@@ -2147,6 +2147,7 @@ test_arglist \
|
|||||||
test_edit \
|
test_edit \
|
||||||
test_erasebackword \
|
test_erasebackword \
|
||||||
test_escaped_glob \
|
test_escaped_glob \
|
||||||
|
test_eval_stuff \
|
||||||
test_ex_undo \
|
test_ex_undo \
|
||||||
test_ex_z \
|
test_ex_z \
|
||||||
test_exec_while_if \
|
test_exec_while_if \
|
||||||
|
@@ -94,6 +94,7 @@ NEW_TESTS = test_arabic.res \
|
|||||||
test_edit.res \
|
test_edit.res \
|
||||||
test_erasebackword.res \
|
test_erasebackword.res \
|
||||||
test_escaped_glob.res \
|
test_escaped_glob.res \
|
||||||
|
test_eval_stuff.res \
|
||||||
test_exec_while_if.res \
|
test_exec_while_if.res \
|
||||||
test_exists.res \
|
test_exists.res \
|
||||||
test_exists_autocmd.res \
|
test_exists_autocmd.res \
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
Test for various eval features. vim: set ft=vim :
|
Test for various eval features. vim: set ft=vim :
|
||||||
|
|
||||||
|
NOTE: Do not add more here, use new style test test_eval_stuff.vim
|
||||||
|
|
||||||
Note: system clipboard is saved, changed and restored.
|
Note: system clipboard is saved, changed and restored.
|
||||||
|
|
||||||
clipboard contents
|
clipboard contents
|
||||||
@@ -134,10 +136,10 @@ if has('clipboard')
|
|||||||
let _clipreg = ['*', getreg('*'), getregtype('*')]
|
let _clipreg = ['*', getreg('*'), getregtype('*')]
|
||||||
let _clipopt = &cb
|
let _clipopt = &cb
|
||||||
let &cb='unnamed'
|
let &cb='unnamed'
|
||||||
5y
|
7y
|
||||||
AR *
|
AR *
|
||||||
tabdo :windo :echo "hi"
|
tabdo :windo :echo "hi"
|
||||||
6y
|
8y
|
||||||
AR *
|
AR *
|
||||||
let &cb=_clipopt
|
let &cb=_clipopt
|
||||||
call call('setreg', _clipreg)
|
call call('setreg', _clipreg)
|
||||||
|
13
src/testdir/test_eval_stuff.vim
Normal file
13
src/testdir/test_eval_stuff.vim
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
" Tests for various eval things.
|
||||||
|
|
||||||
|
function s:foo() abort
|
||||||
|
try
|
||||||
|
return [] == 0
|
||||||
|
catch
|
||||||
|
return 1
|
||||||
|
endtry
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
func Test_catch_return_with_error()
|
||||||
|
call assert_equal(1, s:foo())
|
||||||
|
endfunc
|
@@ -2972,6 +2972,9 @@ ex_return(exarg_T *eap)
|
|||||||
/* It's safer to return also on error. */
|
/* It's safer to return also on error. */
|
||||||
else if (!eap->skip)
|
else if (!eap->skip)
|
||||||
{
|
{
|
||||||
|
/* In return statement, cause_abort should be force_abort. */
|
||||||
|
update_force_abort();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return unless the expression evaluation has been cancelled due to an
|
* Return unless the expression evaluation has been cancelled due to an
|
||||||
* aborting error, an interrupt, or an exception.
|
* aborting error, an interrupt, or an exception.
|
||||||
|
@@ -771,6 +771,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 */
|
||||||
|
/**/
|
||||||
|
1423,
|
||||||
/**/
|
/**/
|
||||||
1422,
|
1422,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user