patch 8.2.4365: sticky command modifiers are too sticky
Problem: sticky command modifiers are too sticky.
Solution: Do not apply command modifiers to a called function. (closes #9751)
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index e7cdcc3..8325d7a 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -118,6 +118,20 @@
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()
diff --git a/src/userfunc.c b/src/userfunc.c
index 4eead2a..841a537 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2513,6 +2513,7 @@
{
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;
@@ -2569,6 +2570,7 @@
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
@@ -2578,6 +2580,7 @@
#endif
current_funccal = fc->caller;
free_funccal(fc);
+ sticky_cmdmod_flags = save_sticky_cmdmod_flags;
return;
}
@@ -2797,6 +2800,9 @@
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;
@@ -2889,6 +2895,7 @@
#endif
if (using_sandbox)
--sandbox;
+ sticky_cmdmod_flags = save_sticky_cmdmod_flags;
if (p_verbose >= 12 && SOURCING_NAME != NULL)
{
diff --git a/src/version.c b/src/version.c
index ea5119c..840a0d3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4365,
+/**/
4364,
/**/
4363,