diff options
Diffstat (limited to 'src/compiler')
| -rw-r--r-- | src/compiler/analyzer.zc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/compiler/analyzer.zc b/src/compiler/analyzer.zc index 8ceaf09..42cb7b5 100644 --- a/src/compiler/analyzer.zc +++ b/src/compiler/analyzer.zc @@ -1004,7 +1004,7 @@ int freevar(int i) { if (o3on && fchk && ldroppable(i)) cerrn(i, "has drop and can't end inside an o3 region"); if (local_captured && local_captured[i]) { lit(0); laddr(lslot[i]); op(O_ST); return 0; } vaddr(i); op(O_LD); - if (lleaf[i] && !o3on && !dry && lookup(s_recycle_leaf) >= 0) { + if (lleaf[i] && !dry && lookup(s_recycle_leaf) >= 0) { // o3 too: new_k stamps the type there as well lit(lleaf[i]); lit(szclass(lnsz[i])); callname(s_recycle_leaf); @@ -1434,7 +1434,7 @@ int reassign_free(int i, int rc, int bor) { // freevar without its clearing store: the new value is stored next, through // the address taken before the right side (a captured local's slot holds its cell) vaddr(i); op(O_LD); - if (lleaf[i] && !o3on && !dry && lookup(s_recycle_leaf) >= 0) { lit(lleaf[i]); lit(szclass(lnsz[i])); callname(s_recycle_leaf); } + if (lleaf[i] && !dry && lookup(s_recycle_leaf) >= 0) { lit(lleaf[i]); lit(szclass(lnsz[i])); callname(s_recycle_leaf); } else callname(s_recycle); op(O_DROP); end_owner(i); |
