From: Bram Moolenaar Date: Sat, 12 Feb 2022 22:13:06 +0000 (+0000) Subject: patch 8.2.4365: sticky command modifiers are too sticky X-Git-Tag: v8.2.4365 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cdf04859699bdde891b5b52ea821d0bebd7e8ee0;p=vim 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 e7cdcc3f0..8325d7a80 100644 --- a/src/testdir/test_vim9_cmd.vim +++ b/src/testdir/test_vim9_cmd.vim @@ -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() diff --git a/src/userfunc.c b/src/userfunc.c index 4eead2a63..841a537d7 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -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; @@ -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 @@ -2578,6 +2580,7 @@ call_user_func( #endif current_funccal = fc->caller; free_funccal(fc); + sticky_cmdmod_flags = save_sticky_cmdmod_flags; return; } @@ -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; @@ -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) { diff --git a/src/version.c b/src/version.c index ea5119c32..840a0d36f 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4365, /**/ 4364, /**/