diff options
author | ZyX <kp-pav@yandex.ru> | 2018-01-21 03:27:48 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2018-03-25 14:50:48 +0300 |
commit | 79b4b6fc86497fcb7b3f986e98cbf03f93b5b082 (patch) | |
tree | 2fcdd5af2b8bf6b05ddab5eb87fcf344ddbda5a2 /src/nvim/ex_docmd.c | |
parent | f8d2aef4f20887bb5a407b5a34cd5dc29fc6771c (diff) | |
download | rneovim-79b4b6fc86497fcb7b3f986e98cbf03f93b5b082.tar.gz rneovim-79b4b6fc86497fcb7b3f986e98cbf03f93b5b082.tar.bz2 rneovim-79b4b6fc86497fcb7b3f986e98cbf03f93b5b082.zip |
*: Make sure that !did_throw implies !current_exception
Fixes #7876
Diffstat (limited to 'src/nvim/ex_docmd.c')
-rw-r--r-- | src/nvim/ex_docmd.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 99495aaa61..e96db33f00 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -403,13 +403,12 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline, /* * "did_throw" will be set to TRUE when an exception is being thrown. */ - did_throw = FALSE; - /* - * "did_emsg" will be set to TRUE when emsg() is used, in which case we - * cancel the whole command line, and any if/endif or loop. - * If force_abort is set, we cancel everything. - */ - did_emsg = FALSE; + did_throw = false; + current_exception = NULL; + // "did_emsg" will be set to TRUE when emsg() is used, in which case we + // cancel the whole command line, and any if/endif or loop. + // If force_abort is set, we cancel everything. + did_emsg = false; /* * KeyTyped is only set when calling vgetc(). Reset it here when not @@ -715,10 +714,11 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline, */ if (cstack.cs_lflags & CSL_HAD_FINA) { cstack.cs_lflags &= ~CSL_HAD_FINA; - report_make_pending(cstack.cs_pending[cstack.cs_idx] - & (CSTP_ERROR | CSTP_INTERRUPT | CSTP_THROW), - did_throw ? (void *)current_exception : NULL); - did_emsg = got_int = did_throw = FALSE; + report_make_pending((cstack.cs_pending[cstack.cs_idx] + & (CSTP_ERROR | CSTP_INTERRUPT | CSTP_THROW)), + (did_throw ? (void *)current_exception : NULL)); + did_emsg = got_int = did_throw = false; + current_exception = NULL; cstack.cs_flags[cstack.cs_idx] |= CSF_ACTIVE | CSF_FINALLY; } @@ -1782,13 +1782,14 @@ static char_u * do_one_cmd(char_u **cmdlinep, )); - /* forced commands */ + // Forced commands. if (*p == '!' && ea.cmdidx != CMD_substitute && ea.cmdidx != CMD_smagic && ea.cmdidx != CMD_snomagic) { - ++p; - ea.forceit = TRUE; - } else - ea.forceit = FALSE; + p++; + ea.forceit = true; + } else { + ea.forceit = false; + } /* * 6. Parse arguments. |