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()
|
def Test_legacy_lambda()
|
||||||
legacy echo {x -> 'hello ' .. x}('foo')
|
legacy echo {x -> 'hello ' .. x}('foo')
|
||||||
|
|
||||||
var lines =<< trim END
|
var lines =<< trim END
|
||||||
echo {x -> 'hello ' .. x}('foo')
|
echo {x -> 'hello ' .. x}('foo')
|
||||||
END
|
END
|
||||||
CheckDefAndScriptFailure(lines, 'E720:')
|
CheckDefAndScriptFailure(lines, 'E720:')
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
def Func()
|
||||||
|
echo (() => 'no error')()
|
||||||
|
enddef
|
||||||
|
legacy call s:Func()
|
||||||
|
END
|
||||||
|
CheckScriptSuccess(lines)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def DoFilterThis(a: string): list<string>
|
def DoFilterThis(a: string): list<string>
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2809,
|
||||||
/**/
|
/**/
|
||||||
2808,
|
2808,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -8767,6 +8767,7 @@ compile_def_function(
|
|||||||
int ret = FAIL;
|
int ret = FAIL;
|
||||||
sctx_T save_current_sctx = current_sctx;
|
sctx_T save_current_sctx = current_sctx;
|
||||||
int save_estack_compiling = estack_compiling;
|
int save_estack_compiling = estack_compiling;
|
||||||
|
int save_cmod_flags = cmdmod.cmod_flags;
|
||||||
int do_estack_push;
|
int do_estack_push;
|
||||||
int new_def_function = FALSE;
|
int new_def_function = FALSE;
|
||||||
#ifdef FEAT_PROFILE
|
#ifdef FEAT_PROFILE
|
||||||
@@ -8811,6 +8812,9 @@ compile_def_function(
|
|||||||
current_sctx = ufunc->uf_script_ctx;
|
current_sctx = ufunc->uf_script_ctx;
|
||||||
current_sctx.sc_version = SCRIPT_VERSION_VIM9;
|
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.
|
// Make sure error messages are OK.
|
||||||
do_estack_push = !estack_top_is_ufunc(ufunc, 1);
|
do_estack_push = !estack_top_is_ufunc(ufunc, 1);
|
||||||
if (do_estack_push)
|
if (do_estack_push)
|
||||||
@@ -9403,6 +9407,7 @@ erret:
|
|||||||
|
|
||||||
current_sctx = save_current_sctx;
|
current_sctx = save_current_sctx;
|
||||||
estack_compiling = save_estack_compiling;
|
estack_compiling = save_estack_compiling;
|
||||||
|
cmdmod.cmod_flags = save_cmod_flags;
|
||||||
if (do_estack_push)
|
if (do_estack_push)
|
||||||
estack_pop();
|
estack_pop();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user