0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.2335: Vim9: "silent return" does not restore command modifiers

Problem:    Vim9: "silent return" does not restore command modifiers.
Solution:   Resture command modifiers before returning. (closes #7649)
This commit is contained in:
Bram Moolenaar 2021-01-12 18:58:39 +01:00
parent a0122dcd1c
commit 7cd24227c0
3 changed files with 22 additions and 0 deletions

View File

@ -1842,4 +1842,19 @@ def Test_silent()
res) res)
enddef enddef
def s:SilentReturn(): string
silent return "done"
enddef
def Test_silent_return()
var res = execute('disass s:SilentReturn')
assert_match('<SNR>\d*_SilentReturn\_s*' ..
'silent return "done"\_s*' ..
'\d CMDMOD silent\_s*' ..
'\d PUSHS "done"\_s*' ..
'\d CMDMOD_REV\_s*' ..
'\d RETURN',
res)
enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker

View File

@ -750,6 +750,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 */
/**/
2335,
/**/ /**/
2334, 2334,
/**/ /**/

View File

@ -2055,6 +2055,7 @@ generate_undo_cmdmods(cctx_T *cctx)
{ {
if (cctx->ctx_has_cmdmod && generate_instr(cctx, ISN_CMDMOD_REV) == NULL) if (cctx->ctx_has_cmdmod && generate_instr(cctx, ISN_CMDMOD_REV) == NULL)
return FAIL; return FAIL;
cctx->ctx_has_cmdmod = FALSE;
return OK; return OK;
} }
@ -4933,6 +4934,10 @@ compile_return(char_u *arg, int check_return_type, cctx_T *cctx)
// No argument, return zero. // No argument, return zero.
generate_PUSHNR(cctx, 0); generate_PUSHNR(cctx, 0);
} }
// Undo any command modifiers.
generate_undo_cmdmods(cctx);
if (cctx->ctx_skip != SKIP_YES && generate_instr(cctx, ISN_RETURN) == NULL) if (cctx->ctx_skip != SKIP_YES && generate_instr(cctx, ISN_RETURN) == NULL)
return NULL; return NULL;