mirror of
https://github.com/vim/vim.git
synced 2025-07-25 10:54:51 -04:00
patch 8.2.1394: Vim9: compiling a function interferes with command modifiers
Problem: Vim9: compiling a function interferes with command modifiers. Solution: Save and restore command modifiers. (closes #6658)
This commit is contained in:
parent
b7f4fa5177
commit
2dd0a2c39a
@ -1351,5 +1351,30 @@ def Test_partial_call()
|
|||||||
assert_equal({'title': 'test'}, getqflist({'title': 1}))
|
assert_equal({'title': 'test'}, getqflist({'title': 1}))
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
def Test_cmd_modifier()
|
||||||
|
tab echo '0'
|
||||||
|
call CheckDefFailure(['5tab echo 3'], 'E16:')
|
||||||
|
enddef
|
||||||
|
|
||||||
|
def Test_restore_modifiers()
|
||||||
|
# check that when compiling a :def function command modifiers are not messed
|
||||||
|
# up.
|
||||||
|
let lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
set eventignore=
|
||||||
|
autocmd QuickFixCmdPost * copen
|
||||||
|
def AutocmdsDisabled()
|
||||||
|
eval 0
|
||||||
|
enddef
|
||||||
|
func Func()
|
||||||
|
noautocmd call s:AutocmdsDisabled()
|
||||||
|
let g:ei_after = &eventignore
|
||||||
|
endfunc
|
||||||
|
Func()
|
||||||
|
END
|
||||||
|
CheckScriptSuccess(lines)
|
||||||
|
assert_equal('', g:ei_after)
|
||||||
|
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
|
||||||
|
@ -751,11 +751,6 @@ func Test_block_failure()
|
|||||||
call CheckDefFailure(['{', 'echo 1'], 'E1026:')
|
call CheckDefFailure(['{', 'echo 1'], 'E1026:')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
def Test_cmd_modifier()
|
|
||||||
tab echo '0'
|
|
||||||
call CheckDefFailure(['5tab echo 3'], 'E16:')
|
|
||||||
enddef
|
|
||||||
|
|
||||||
func g:NoSuchFunc()
|
func g:NoSuchFunc()
|
||||||
echo 'none'
|
echo 'none'
|
||||||
endfunc
|
endfunc
|
||||||
|
@ -754,6 +754,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 */
|
||||||
|
/**/
|
||||||
|
1394,
|
||||||
/**/
|
/**/
|
||||||
1393,
|
1393,
|
||||||
/**/
|
/**/
|
||||||
|
@ -2668,7 +2668,7 @@ next_line_from_context(cctx_T *cctx, int skip_comment)
|
|||||||
cctx->ctx_line_start = line;
|
cctx->ctx_line_start = line;
|
||||||
SOURCING_LNUM = cctx->ctx_lnum + 1;
|
SOURCING_LNUM = cctx->ctx_lnum + 1;
|
||||||
} while (line == NULL || *skipwhite(line) == NUL
|
} while (line == NULL || *skipwhite(line) == NUL
|
||||||
|| (skip_comment && vim9_comment_start(skipwhite(line))));
|
|| (skip_comment && vim9_comment_start(skipwhite(line))));
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7194,10 +7194,11 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
|
|||||||
*/
|
*/
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
exarg_T ea;
|
exarg_T ea;
|
||||||
int starts_with_colon = FALSE;
|
cmdmod_T save_cmdmod;
|
||||||
char_u *cmd;
|
int starts_with_colon = FALSE;
|
||||||
int save_msg_scroll = msg_scroll;
|
char_u *cmd;
|
||||||
|
int save_msg_scroll = msg_scroll;
|
||||||
|
|
||||||
// Bail out on the first error to avoid a flood of errors and report
|
// Bail out on the first error to avoid a flood of errors and report
|
||||||
// the right line number when inside try/catch.
|
// the right line number when inside try/catch.
|
||||||
@ -7278,6 +7279,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
|
|||||||
/*
|
/*
|
||||||
* COMMAND MODIFIERS
|
* COMMAND MODIFIERS
|
||||||
*/
|
*/
|
||||||
|
save_cmdmod = cmdmod;
|
||||||
if (parse_command_modifiers(&ea, &errormsg, FALSE) == FAIL)
|
if (parse_command_modifiers(&ea, &errormsg, FALSE) == FAIL)
|
||||||
{
|
{
|
||||||
if (errormsg != NULL)
|
if (errormsg != NULL)
|
||||||
@ -7288,7 +7290,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
|
|||||||
}
|
}
|
||||||
// TODO: use modifiers in the command
|
// TODO: use modifiers in the command
|
||||||
undo_cmdmod(&ea, save_msg_scroll);
|
undo_cmdmod(&ea, save_msg_scroll);
|
||||||
CLEAR_FIELD(cmdmod);
|
cmdmod = save_cmdmod;
|
||||||
|
|
||||||
// Skip ":call" to get to the function name.
|
// Skip ":call" to get to the function name.
|
||||||
if (checkforcmd(&ea.cmd, "call", 3))
|
if (checkforcmd(&ea.cmd, "call", 3))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user