0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 9.0.0481: in :def function all closures in loop get the same variables

Problem:    In a :def function all closures in a loop get the same variables.
Solution:   Use a separate list of variables for LOADOUTER and STOREOUTER.
            Not copied at end of loop yet.
This commit is contained in:
Bram Moolenaar
2022-09-16 19:04:24 +01:00
parent abd58d8aee
commit 8fa745e7be
13 changed files with 285 additions and 77 deletions

View File

@@ -2452,7 +2452,12 @@ func_clear_free(ufunc_T *fp, int force)
* This is for when a compiled function defines a global function.
*/
int
copy_func(char_u *lambda, char_u *global, ectx_T *ectx)
copy_lambda_to_global_func(
char_u *lambda,
char_u *global,
short loop_var_idx,
short loop_var_count,
ectx_T *ectx)
{
ufunc_T *ufunc = find_func_even_dead(lambda, FFED_IS_GLOBAL);
ufunc_T *fp = NULL;
@@ -2519,7 +2524,8 @@ copy_func(char_u *lambda, char_u *global, ectx_T *ectx)
if (pt == NULL)
goto failed;
if (fill_partial_and_closure(pt, ufunc, ectx) == FAIL)
if (fill_partial_and_closure(pt, ufunc, loop_var_idx, loop_var_count,
ectx) == FAIL)
{
vim_free(pt);
goto failed;