diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-01-17 19:20:32 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-01-17 19:20:32 +0100 |
commit | 1430ceeb2d4185a8d60fa81007fbc8b74fd68c46 (patch) | |
tree | 158993db0a046d1d6fe1a1023899b6ae314413b1 | |
parent | 3af15ab7888033fdfae0ae7085172aab794339a2 (diff) | |
download | vim-git-1430ceeb2d4185a8d60fa81007fbc8b74fd68c46.tar.gz |
patch 8.2.2370: Vim9: command fails in catch blockv8.2.2370
Problem: Vim9: command fails in catch block.
Solution: Reset force_abort and need_rethrow. (closes #7692)
-rw-r--r-- | src/testdir/test_vim9_script.vim | 37 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9execute.c | 1 |
3 files changed, 40 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index 158c64c27..478c39460 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -558,6 +558,43 @@ def Test_try_catch_throw() assert_equal(411, n) enddef +def Test_cnext_works_in_catch() + var lines =<< trim END + vim9script + au BufEnter * eval 0 + writefile(['text'], 'Xfile1') + writefile(['text'], 'Xfile2') + var items = [ + {lnum: 1, filename: 'Xfile1', valid: true}, + {lnum: 1, filename: 'Xfile2', valid: true} + ] + setqflist([], ' ', {items: items}) + cwindow + + def CnextOrCfirst() + # if cnext fails, cfirst is used + try + cnext + catch + cfirst + endtry + enddef + + CnextOrCfirst() + CnextOrCfirst() + writefile([getqflist({idx: 0}).idx], 'Xresult') + qall + END + writefile(lines, 'XCatchCnext') + RunVim([], [], '--clean -S XCatchCnext') + assert_equal(['1'], readfile('Xresult')) + + delete('Xfile1') + delete('Xfile2') + delete('XCatchCnext') + delete('Xresult') +enddef + def Test_throw_skipped() if 0 throw dontgethere diff --git a/src/version.c b/src/version.c index 3ac6cfae8..ecb0c4355 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2370, +/**/ 2369, /**/ 2368, diff --git a/src/vim9execute.c b/src/vim9execute.c index b24475ecf..fdc49eb05 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -2572,6 +2572,7 @@ call_def_function( trycmd->tcd_caught = TRUE; } did_emsg = got_int = did_throw = FALSE; + force_abort = need_rethrow = FALSE; catch_exception(current_exception); } break; |