aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Dewar <seandewar@users.noreply.github.com>2021-10-09 01:25:11 +0100
committerzeertzjq <zeertzjq@outlook.com>2022-04-13 21:15:24 +0800
commitb6026337f25cc708e932b21a9e4e64a174a1d9da (patch)
tree12efa60054c7d8e94a7635a22f3a7b264dd6cd71
parent4dc09f38ee709cadc745ac44a1cc24c4c526ecaf (diff)
downloadrneovim-b6026337f25cc708e932b21a9e4e64a174a1d9da.tar.gz
rneovim-b6026337f25cc708e932b21a9e4e64a174a1d9da.tar.bz2
rneovim-b6026337f25cc708e932b21a9e4e64a174a1d9da.zip
vim-patch:8.2.3416: second error is reported while exception is being thrown
Problem: Second error is reported while exception is being thrown. Solution: Do not check for trailing characters when already aborting. (closes vim/vim#8842) https://github.com/vim/vim/commit/36f691f5f1d0676f080cc97d697d742ed5cc8251
-rw-r--r--src/nvim/eval/userfunc.c2
-rw-r--r--src/nvim/testdir/test_trycatch.vim24
2 files changed, 25 insertions, 1 deletions
diff --git a/src/nvim/eval/userfunc.c b/src/nvim/eval/userfunc.c
index eb5c6e503a..972bd81117 100644
--- a/src/nvim/eval/userfunc.c
+++ b/src/nvim/eval/userfunc.c
@@ -3018,7 +3018,7 @@ void ex_call(exarg_T *eap)
}
// When inside :try we need to check for following "| catch".
- if (!failed || eap->cstack->cs_trylevel > 0) {
+ if (!aborting() && (!failed || eap->cstack->cs_trylevel > 0)) {
// Check for trailing illegal characters and a following command.
if (!ends_excmd(*arg)) {
if (!failed) {
diff --git a/src/nvim/testdir/test_trycatch.vim b/src/nvim/testdir/test_trycatch.vim
index adc1745b39..04423fa988 100644
--- a/src/nvim/testdir/test_trycatch.vim
+++ b/src/nvim/testdir/test_trycatch.vim
@@ -1996,5 +1996,29 @@ func Test_reload_in_try_catch()
call delete('Xreload')
endfunc
+" Test for using throw in a called function with following error {{{1
+func Test_user_command_throw_in_function_call()
+ let lines =<< trim END
+ function s:get_dict() abort
+ throw 'my_error'
+ endfunction
+
+ try
+ call s:get_dict().foo()
+ catch /my_error/
+ let caught = 'yes'
+ catch
+ let caught = 'no'
+ endtry
+ call assert_equal('yes', caught)
+ END
+ call writefile(lines, 'XtestThrow')
+ source XtestThrow
+
+ call delete('XtestThrow')
+ unlet g:caught
+endfunc
+
+
" Modeline {{{1
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker