diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-09-19 15:54:34 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-09-19 15:54:34 +0100 |
commit | cc34181f9994d64f8c8fa2f5845eaf0cc963067f (patch) | |
tree | 2909cd6f0d4d5f7e20b7daa76855c25fdef5dcb9 /src/userfunc.c | |
parent | 18ee0feb5dfbe51993dc715d24cf419ac92ebf92 (diff) | |
download | vim-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.c | 13 |
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; |