mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Problem: Vim9: get E1099 when autocommand resets did_emsg. Solution: Add did_emsg_cumul. (closes #7336)
This commit is contained in:
@@ -833,7 +833,7 @@ call_def_function(
|
||||
int defcount = ufunc->uf_args.ga_len - argc;
|
||||
sctx_T save_current_sctx = current_sctx;
|
||||
int breakcheck_count = 0;
|
||||
int did_emsg_before = did_emsg;
|
||||
int did_emsg_before = did_emsg_cumul + did_emsg;
|
||||
int save_suppress_errthrow = suppress_errthrow;
|
||||
msglist_T **saved_msg_list = NULL;
|
||||
msglist_T *private_msg_list = NULL;
|
||||
@@ -859,7 +859,7 @@ call_def_function(
|
||||
|| (ufunc->uf_def_status == UF_TO_BE_COMPILED
|
||||
&& compile_def_function(ufunc, FALSE, NULL) == FAIL))
|
||||
{
|
||||
if (did_emsg == did_emsg_before)
|
||||
if (did_emsg_cumul + did_emsg == did_emsg_before)
|
||||
semsg(_(e_function_is_not_compiled_str),
|
||||
printable_func_name(ufunc));
|
||||
return FAIL;
|
||||
@@ -1086,13 +1086,10 @@ call_def_function(
|
||||
// execute Ex command line
|
||||
case ISN_EXEC:
|
||||
{
|
||||
int save_did_emsg = did_emsg;
|
||||
|
||||
SOURCING_LNUM = iptr->isn_lnum;
|
||||
do_cmdline_cmd(iptr->isn_arg.string);
|
||||
// do_cmdline_cmd() will reset did_emsg, but we want to
|
||||
// keep track of the count to compare with did_emsg_before.
|
||||
did_emsg += save_did_emsg;
|
||||
if (did_emsg)
|
||||
goto on_error;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1211,6 +1208,8 @@ call_def_function(
|
||||
{
|
||||
SOURCING_LNUM = iptr->isn_lnum;
|
||||
do_cmdline_cmd((char_u *)ga.ga_data);
|
||||
if (did_emsg)
|
||||
goto on_error;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2894,7 +2893,7 @@ func_return:
|
||||
|
||||
on_error:
|
||||
// If "emsg_silent" is set then ignore the error.
|
||||
if (did_emsg == did_emsg_before && emsg_silent)
|
||||
if (did_emsg_cumul + did_emsg == did_emsg_before && emsg_silent)
|
||||
continue;
|
||||
|
||||
// If we are not inside a try-catch started here, abort execution.
|
||||
@@ -2952,7 +2951,7 @@ failed_early:
|
||||
// Not sure if this is necessary.
|
||||
suppress_errthrow = save_suppress_errthrow;
|
||||
|
||||
if (ret != OK && did_emsg == did_emsg_before)
|
||||
if (ret != OK && did_emsg_cumul + did_emsg == did_emsg_before)
|
||||
semsg(_(e_unknown_error_while_executing_str),
|
||||
printable_func_name(ufunc));
|
||||
funcdepth_restore(orig_funcdepth);
|
||||
|
Reference in New Issue
Block a user