Mercurial > vim
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;