mirror of
https://github.com/vim/vim.git
synced 2025-10-03 05:14:07 -04:00
patch 9.1.0529: silent! causes following try/catch to not work
Problem: silent! causes following try/catch to not work (Malcolm Rowe) Solution: consider emsg_silent in handle_did_throw() and do not abort evaluation flow for :silent! (LemonBoy) The silent! flag causes the evaluation not to be aborted in case of uncaught exceptions, adjust handle_did_throw to take this detail into account. Fixes the long-standing todo.txt item: ``` Problem that a previous silent ":throw" causes a following try/catch not to work. (ZyX, 2013 Sep 28) With examples: (Malcolm Rowe, 2015 Dec 24) Also see #8487 for an example. ``` fixes: #538 closes: #15128 Signed-off-by: LemonBoy <thatlemon@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
11d5992573
commit
749ba0f6d9
@@ -1,4 +1,4 @@
|
|||||||
*todo.txt* For Vim version 9.1. Last change: 2024 Jun 03
|
*todo.txt* For Vim version 9.1. Last change: 2024 Jul 04
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -512,10 +512,6 @@ Information for a specific terminal (e.g. gnome, tmux, konsole, alacritty) is
|
|||||||
spread out. Make a section with copy/paste examples of script and pointers to
|
spread out. Make a section with copy/paste examples of script and pointers to
|
||||||
more information.
|
more information.
|
||||||
|
|
||||||
Problem that a previous silent ":throw" causes a following try/catch not to
|
|
||||||
work. (ZyX, 2013 Sep 28) With examples: (Malcolm Rowe, 2015 Dec 24)
|
|
||||||
Also see #8487 for an example.
|
|
||||||
|
|
||||||
Request to use "." for the cursor column in search pattern \%<.c and \%<.v.
|
Request to use "." for the cursor column in search pattern \%<.c and \%<.v.
|
||||||
(#8179)
|
(#8179)
|
||||||
|
|
||||||
|
@@ -1460,8 +1460,13 @@ handle_did_throw(void)
|
|||||||
current_exception->throw_name = NULL;
|
current_exception->throw_name = NULL;
|
||||||
|
|
||||||
discard_current_exception(); // uses IObuff if 'verbose'
|
discard_current_exception(); // uses IObuff if 'verbose'
|
||||||
suppress_errthrow = TRUE;
|
|
||||||
force_abort = TRUE;
|
// If "silent!" is active the uncaught exception is not fatal.
|
||||||
|
if (emsg_silent == 0)
|
||||||
|
{
|
||||||
|
suppress_errthrow = TRUE;
|
||||||
|
force_abort = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (messages != NULL)
|
if (messages != NULL)
|
||||||
{
|
{
|
||||||
|
@@ -7536,6 +7536,31 @@ func Test_deeply_nested_source()
|
|||||||
call system(cmd)
|
call system(cmd)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_exception_silent()
|
||||||
|
XpathINIT
|
||||||
|
let lines =<< trim END
|
||||||
|
func Throw()
|
||||||
|
Xpath 'a'
|
||||||
|
throw "Uncaught"
|
||||||
|
" This line is not executed.
|
||||||
|
Xpath 'b'
|
||||||
|
endfunc
|
||||||
|
" The exception is suppressed due to the presence of silent!.
|
||||||
|
silent! call Throw()
|
||||||
|
try
|
||||||
|
call DoesNotExist()
|
||||||
|
catch /E117:/
|
||||||
|
Xpath 'c'
|
||||||
|
endtry
|
||||||
|
Xpath 'd'
|
||||||
|
END
|
||||||
|
let verify =<< trim END
|
||||||
|
call assert_equal('acd', g:Xpath)
|
||||||
|
END
|
||||||
|
|
||||||
|
call RunInNewVim(lines, verify)
|
||||||
|
endfunc
|
||||||
|
|
||||||
"-------------------------------------------------------------------------------
|
"-------------------------------------------------------------------------------
|
||||||
" Modelines {{{1
|
" Modelines {{{1
|
||||||
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
|
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
|
||||||
|
@@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
529,
|
||||||
/**/
|
/**/
|
||||||
528,
|
528,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user