diff src/userfunc.c @ 30291:61a688be1899 v9.0.0481

patch 9.0.0481: in :def function all closures in loop get the same variables Commit: https://github.com/vim/vim/commit/8fa745e7be3a791ac25f93ef0227bbc48ade8a37 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Sep 16 19:04:24 2022 +0100 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.
author Bram Moolenaar <Bram@vim.org>
date Fri, 16 Sep 2022 20:15:03 +0200
parents d3cfd12839ef
children fc0830246f49
line wrap: on
line diff
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -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
 
 	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;