mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 8.2.2809: Vim9: :def function compilation fails when using :legacy
Problem: Vim9: :def function compilation fails when using :legacy. Solution: Reset CMOD_LEGACY when compiling a function. (closes #8137)
This commit is contained in:
@@ -2167,10 +2167,20 @@ enddef
|
||||
|
||||
def Test_legacy_lambda()
|
||||
legacy echo {x -> 'hello ' .. x}('foo')
|
||||
|
||||
var lines =<< trim END
|
||||
echo {x -> 'hello ' .. x}('foo')
|
||||
END
|
||||
CheckDefAndScriptFailure(lines, 'E720:')
|
||||
|
||||
lines =<< trim END
|
||||
vim9script
|
||||
def Func()
|
||||
echo (() => 'no error')()
|
||||
enddef
|
||||
legacy call s:Func()
|
||||
END
|
||||
CheckScriptSuccess(lines)
|
||||
enddef
|
||||
|
||||
def DoFilterThis(a: string): list<string>
|
||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2809,
|
||||
/**/
|
||||
2808,
|
||||
/**/
|
||||
|
@@ -8767,6 +8767,7 @@ compile_def_function(
|
||||
int ret = FAIL;
|
||||
sctx_T save_current_sctx = current_sctx;
|
||||
int save_estack_compiling = estack_compiling;
|
||||
int save_cmod_flags = cmdmod.cmod_flags;
|
||||
int do_estack_push;
|
||||
int new_def_function = FALSE;
|
||||
#ifdef FEAT_PROFILE
|
||||
@@ -8811,6 +8812,9 @@ compile_def_function(
|
||||
current_sctx = ufunc->uf_script_ctx;
|
||||
current_sctx.sc_version = SCRIPT_VERSION_VIM9;
|
||||
|
||||
// Don't use the flag from ":legacy" here.
|
||||
cmdmod.cmod_flags &= ~CMOD_LEGACY;
|
||||
|
||||
// Make sure error messages are OK.
|
||||
do_estack_push = !estack_top_is_ufunc(ufunc, 1);
|
||||
if (do_estack_push)
|
||||
@@ -9403,6 +9407,7 @@ erret:
|
||||
|
||||
current_sctx = save_current_sctx;
|
||||
estack_compiling = save_estack_compiling;
|
||||
cmdmod.cmod_flags = save_cmod_flags;
|
||||
if (do_estack_push)
|
||||
estack_pop();
|
||||
|
||||
|
Reference in New Issue
Block a user