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:
parent
a0122dcd1c
commit
7cd24227c0
@ -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
|
||||||
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user