mirror of
https://github.com/vim/vim.git
synced 2025-07-24 10:45:12 -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}))
|
||||
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
|
||||
|
@ -751,11 +751,6 @@ func Test_block_failure()
|
||||
call CheckDefFailure(['{', 'echo 1'], 'E1026:')
|
||||
endfunc
|
||||
|
||||
def Test_cmd_modifier()
|
||||
tab echo '0'
|
||||
call CheckDefFailure(['5tab echo 3'], 'E16:')
|
||||
enddef
|
||||
|
||||
func g:NoSuchFunc()
|
||||
echo 'none'
|
||||
endfunc
|
||||
|
@ -754,6 +754,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1394,
|
||||
/**/
|
||||
1393,
|
||||
/**/
|
||||
|
@ -2668,7 +2668,7 @@ next_line_from_context(cctx_T *cctx, int skip_comment)
|
||||
cctx->ctx_line_start = line;
|
||||
SOURCING_LNUM = cctx->ctx_lnum + 1;
|
||||
} while (line == NULL || *skipwhite(line) == NUL
|
||||
|| (skip_comment && vim9_comment_start(skipwhite(line))));
|
||||
|| (skip_comment && vim9_comment_start(skipwhite(line))));
|
||||
return line;
|
||||
}
|
||||
|
||||
@ -7194,10 +7194,11 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
|
||||
*/
|
||||
for (;;)
|
||||
{
|
||||
exarg_T ea;
|
||||
int starts_with_colon = FALSE;
|
||||
char_u *cmd;
|
||||
int save_msg_scroll = msg_scroll;
|
||||
exarg_T ea;
|
||||
cmdmod_T save_cmdmod;
|
||||
int starts_with_colon = FALSE;
|
||||
char_u *cmd;
|
||||
int save_msg_scroll = msg_scroll;
|
||||
|
||||
// Bail out on the first error to avoid a flood of errors and report
|
||||
// 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
|
||||
*/
|
||||
save_cmdmod = cmdmod;
|
||||
if (parse_command_modifiers(&ea, &errormsg, FALSE) == FAIL)
|
||||
{
|
||||
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
|
||||
undo_cmdmod(&ea, save_msg_scroll);
|
||||
CLEAR_FIELD(cmdmod);
|
||||
cmdmod = save_cmdmod;
|
||||
|
||||
// Skip ":call" to get to the function name.
|
||||
if (checkforcmd(&ea.cmd, "call", 3))
|
||||
|
Loading…
x
Reference in New Issue
Block a user