summaryrefslogtreecommitdiff
path: root/pez.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-10-09 13:21:16 +0200
committerlemon <lsof@mailbox.org>2022-10-09 13:21:16 +0200
commitdae9fadda69b858a7fbb5ce65eb72f28aea3fdf9 (patch)
tree19ef6ef9291f67a5f035b74106f4ec6858862929 /pez.c
parent25cb8be7614ce4e21a1a3a4673abb51cf8dbf823 (diff)
only close vars when necessary
Diffstat (limited to 'pez.c')
-rw-r--r--pez.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/pez.c b/pez.c
index 16f7f2a..b2e590c 100644
--- a/pez.c
+++ b/pez.c
@@ -2170,6 +2170,7 @@ findupval(Comp *cm, Local **pl, struct fenv *fenv, const char *name)
Local *l = &fenv->prev->locals.at[i];
if (!strcmp(&cm->spool.at[l->sref], name)) {
assert(!l->has_k); // would've been found by findlocal earlier
+ l->captured = 1;
*pl = l;
return addupval(cm, fenv, l->index, l->isparam, !l->isparam);
}
@@ -2192,7 +2193,7 @@ endscope(Comp *cm)
} else {
if (!l->has_k) {
--cm->fenv.nvars;
- if (l->mutable && l->scope > 0) {
+ if (l->mutable && l->scope > 0 && l->captured) {
TRY(compop(cm, Oclose) && compbyte(cm, l->index));
}
}