1
0
forked from aniani/vim

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

@@ -496,6 +496,7 @@ compile_load(
int idx;
int gen_load = FALSE;
int gen_load_outer = 0;
int outer_loop_idx = -1;
name = vim_strnsave(*arg, end - *arg);
if (name == NULL)
@@ -520,6 +521,7 @@ compile_load(
{
type = lvar.lv_type;
idx = lvar.lv_idx;
outer_loop_idx = lvar.lv_loop_idx;
if (lvar.lv_from_outer != 0)
gen_load_outer = lvar.lv_from_outer;
else
@@ -544,7 +546,8 @@ compile_load(
res = generate_LOAD(cctx, ISN_LOAD, idx, NULL, type);
if (gen_load_outer > 0)
{
res = generate_LOADOUTER(cctx, idx, gen_load_outer, type);
res = generate_LOADOUTER(cctx, idx,
gen_load_outer, outer_loop_idx, type);
cctx->ctx_outer_used = TRUE;
}
}