Mercurial > vim
changeset 22760:d235c5fa0bbe v8.2.1928
patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Commit: https://github.com/vim/vim/commit/cd030c4b604bea92311e9c418aefe5143dee9201
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Oct 30 21:49:40 2020 +0100
patch 8.2.1928: Vim9: "silent!" not effective when list index is wrong
Problem: Vim9: "silent!" not effective when list index is wrong.
Solution: Ignore list indes failure when emsg_silent is set. (closes https://github.com/vim/vim/issues/7232)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 30 Oct 2020 22:00:03 +0100 |
parents | 257a1e77a5ec |
children | 7aa62600a2cb |
files | src/testdir/test_vim9_func.vim src/version.c src/vim9execute.c |
diffstat | 3 files changed, 23 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -1477,7 +1477,6 @@ def SilentlyUserError() enddef " This can't be a :def function, because the assert would not be reached. -" And this must not be inside a try/endtry. func Test_ignore_silent_error() let g:did_it = 'no' call SilentlyError() @@ -1490,6 +1489,23 @@ func Test_ignore_silent_error() unlet g:did_it endfunc +def Test_ignore_silent_error_in_filter() + var lines =<< trim END + vim9script + def Filter(winid: number, key: string): bool + if key == 'o' + silent! eval [][0] + return true + endif + return popup_filter_menu(winid, key) + enddef + + popup_create('popup', #{filter: Filter}) + feedkeys("o\r", 'xnt') + END + CheckScriptSuccess(lines) +enddef + def Fibonacci(n: number): number if n < 2 return n
--- 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 */ /**/ + 1928, +/**/ 1927, /**/ 1926,
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -2869,6 +2869,10 @@ func_return: continue; on_error: + // If "emsg_silent" is set then ignore the error. + if (did_emsg == did_emsg_before && emsg_silent) + continue; + // If we are not inside a try-catch started here, abort execution. if (trylevel <= trylevel_at_start) goto failed;