Skip to content

Commit

Permalink
patch 8.2.4365: sticky command modifiers are too sticky
Browse files Browse the repository at this point in the history
Problem:    sticky command modifiers are too sticky.
Solution:   Do not apply command modifiers to a called function. (closes #9751)
  • Loading branch information
brammool committed Feb 12, 2022
1 parent 4549166 commit cdf0485
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/testdir/test_vim9_cmd.vim
Expand Up @@ -118,6 +118,20 @@ def Test_cmdmod_execute()
END
v9.CheckScriptSuccess(lines)
delete('Xvim9import.vim')

# "legacy" does not aply to a called function
lines =<< trim END
vim9script

def g:TheFunc()
if exists('something')
echo 'yes'
endif
enddef
legacy exe 'call g:TheFunc()'
END
v9.CheckScriptSuccess(lines)
delfunc g:TheFunc
enddef

def Test_edit_wildcards()
Expand Down
7 changes: 7 additions & 0 deletions src/userfunc.c
Expand Up @@ -2513,6 +2513,7 @@ call_user_func(
{
sctx_T save_current_sctx;
int using_sandbox = FALSE;
int save_sticky_cmdmod_flags = sticky_cmdmod_flags;
funccall_T *fc;
int save_did_emsg;
int default_arg_err = FALSE;
Expand Down Expand Up @@ -2569,6 +2570,7 @@ call_user_func(
if (do_profiling == PROF_YES)
profile_may_start_func(&profile_info, fp, caller);
#endif
sticky_cmdmod_flags = 0;
call_def_function(fp, argcount, argvars, funcexe->fe_partial, rettv);
funcdepth_decrement();
#ifdef FEAT_PROFILE
Expand All @@ -2578,6 +2580,7 @@ call_user_func(
#endif
current_funccal = fc->caller;
free_funccal(fc);
sticky_cmdmod_flags = save_sticky_cmdmod_flags;
return;
}

Expand Down Expand Up @@ -2797,6 +2800,9 @@ call_user_func(
fc->caller == NULL ? NULL : fc->caller->func);
#endif

// "legacy" does not apply to commands in the function
sticky_cmdmod_flags = 0;

save_current_sctx = current_sctx;
current_sctx = fp->uf_script_ctx;
save_did_emsg = did_emsg;
Expand Down Expand Up @@ -2889,6 +2895,7 @@ call_user_func(
#endif
if (using_sandbox)
--sandbox;
sticky_cmdmod_flags = save_sticky_cmdmod_flags;

if (p_verbose >= 12 && SOURCING_NAME != NULL)
{
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -750,6 +750,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4365,
/**/
4364,
/**/
Expand Down

0 comments on commit cdf0485

Please sign in to comment.