summaryrefslogtreecommitdiff
path: root/src/userfunc.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-09-19 15:54:34 +0100
committerBram Moolenaar <Bram@vim.org>2022-09-19 15:54:34 +0100
commitcc34181f9994d64f8c8fa2f5845eaf0cc963067f (patch)
tree2909cd6f0d4d5f7e20b7daa76855c25fdef5dcb9 /src/userfunc.c
parent18ee0feb5dfbe51993dc715d24cf419ac92ebf92 (diff)
downloadvim-git-cc34181f9994d64f8c8fa2f5845eaf0cc963067f.tar.gz
patch 9.0.0502: a closure in a nested loop in a :def function does not workv9.0.0502
Problem: A closure in a nested loop in a :def function does not work. Solution: Use an array of loopvars, one per loop level.
Diffstat (limited to 'src/userfunc.c')
-rw-r--r--src/userfunc.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/userfunc.c b/src/userfunc.c
index f0e9cd7c7..83221a855 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2453,11 +2453,10 @@ func_clear_free(ufunc_T *fp, int force)
*/
int
copy_lambda_to_global_func(
- char_u *lambda,
- char_u *global,
- short loop_var_idx,
- short loop_var_count,
- ectx_T *ectx)
+ char_u *lambda,
+ char_u *global,
+ loopvarinfo_T *loopvarinfo,
+ ectx_T *ectx)
{
ufunc_T *ufunc = find_func_even_dead(lambda, FFED_IS_GLOBAL);
ufunc_T *fp = NULL;
@@ -2524,14 +2523,12 @@ copy_lambda_to_global_func(
if (pt == NULL)
goto failed;
- if (fill_partial_and_closure(pt, ufunc, loop_var_idx, loop_var_count,
- ectx) == FAIL)
+ if (fill_partial_and_closure(pt, ufunc, loopvarinfo, ectx) == FAIL)
{
vim_free(pt);
goto failed;
}
ufunc->uf_partial = pt;
- --pt->pt_refcount; // not actually referenced here
}
return OK;