From: Bram Moolenaar Date: Tue, 13 Feb 2018 17:05:18 +0000 (+0100) Subject: patch 8.0.1518: error messages suppressed after ":silent! try" X-Git-Tag: v8.0.1518 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2be57331524e93da52a0663f4a334d21c05123bb;p=vim patch 8.0.1518: error messages suppressed after ":silent! try" Problem: Error messages suppressed after ":silent! try". (Ben Reilly) Solution: Restore emsg_silent before executing :try. (closes #2531) --- diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 5825bf1d1..b923980e3 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -2880,8 +2880,18 @@ do_one_cmd( } #endif + /* The :try command saves the emsg_silent flag, reset it here when + * ":silent! try" was used, it should only apply to :try itself. */ + if (ea.cmdidx == CMD_try && did_esilent > 0) + { + emsg_silent -= did_esilent; + if (emsg_silent < 0) + emsg_silent = 0; + did_esilent = 0; + } + /* - * 7. Switch on command name. + * 7. Execute the command. * * The "ea" structure holds the arguments that can be used. */ diff --git a/src/testdir/test_eval_stuff.vim b/src/testdir/test_eval_stuff.vim index 92e1ec533..12222303d 100644 --- a/src/testdir/test_eval_stuff.vim +++ b/src/testdir/test_eval_stuff.vim @@ -11,3 +11,17 @@ endfunction func Test_catch_return_with_error() call assert_equal(1, s:foo()) endfunc + +func Test_nocatch_restore_silent_emsg() + silent! try + throw 1 + catch + endtry + echoerr 'wrong' + let c1 = nr2char(screenchar(&lines, 1)) + let c2 = nr2char(screenchar(&lines, 2)) + let c3 = nr2char(screenchar(&lines, 3)) + let c4 = nr2char(screenchar(&lines, 4)) + let c5 = nr2char(screenchar(&lines, 5)) + call assert_equal('wrong', c1 . c2 . c3 . c4 . c5) +endfunc diff --git a/src/version.c b/src/version.c index 931037d3d..92fd162fa 100644 --- a/src/version.c +++ b/src/version.c @@ -771,6 +771,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1518, /**/ 1517, /**/