From d7c153286ed0c0b4453d34efa89a1ca8c2457ab8 Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 4 Dec 2023 11:57:18 +0200 Subject: [PATCH] gc tests, more reuse removal --- src/builtins/scan.c | 18 ++++++++---------- test/cases/gc.bqn | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 test/cases/gc.bqn diff --git a/src/builtins/scan.c b/src/builtins/scan.c index f10ded7c..769af484 100644 --- a/src/builtins/scan.c +++ b/src/builtins/scan.c @@ -232,21 +232,20 @@ B scan_c1(Md1D* d, B x) { B f = d->f; SLOW2("𝕎` 𝕩", f, x); B xf = getFillR(x); - bool reuse = TY(x)==t_harr && reusable(x); - HArr_p r = reuse? harr_parts(REUSE(x)) : m_harr0c(x); - AS2B xget = reuse? TI(x,getU) : TI(x,get); Arr* xa = a(x); + HArr_p r = m_harr0c(x); + SGet(x) FC2 fc2 = c2fn(f); if (xr==1) { - r.a[0] = xget(xa,0); - for (usz i=1; if; SLOW3("𝕨 F` 𝕩", w, x, f); B wf = getFillR(w); - bool reuse = (TY(x)==t_harr && reusable(x)) | !ia; usz i = 0; HArr_p r = m_harr0c(x); SGet(x) @@ -325,6 +323,6 @@ B scan_c2(Md1D* d, B w, B x) { B f = d->f; B pr = r.a[0] = fc2(f, w, Get(x,0)); i++; for (; i < ia; i++) r.a[i] = pr = fc2(f, inc(pr), Get(x,i)); } - if (!reuse) decG(x); + decG(x); return withFill(r.b, wf); } diff --git a/test/cases/gc.bqn b/test/cases/gc.bqn new file mode 100644 index 00000000..9af9eb98 --- /dev/null +++ b/test/cases/gc.bqn @@ -0,0 +1,26 @@ +%DEF base ( + ⟨V⇐Variation, U⇐Unshare, LV⇐ListVariations ⋄ CLR⇐ClearRefs, GC⟩ ← •internal + UseGC ← {𝕊: 𝕨 ⋄ 𝕩 ⋄ GC@ ⋄ @} + _tvaru ← { + F _𝕣 x: { F 𝕩 V U¨ x ⋄ CLR@}¨ LV 𝕩; + w F _𝕣 x: (LV 𝕨) {(𝕨 V U¨ w) F 𝕩 V U¨ x ⋄ CLR@}⌜ LV 𝕩 + } +) + +%USE base ⋄ UseGC¨_tvaru ↕⋈4 +%USE base ⋄ UseGC¨_tvaru˜ ↕⋈4 +%USE base ⋄ (↕4)⊸(UseGC¨)_tvaru ↕⋈4 +%USE base ⋄ (UseGC¨)⟜(↕4)_tvaru ↕⋈4 + +%USE base ⋄ UseGC` _tvaru ↕⋈5 +%USE base ⋄ 1⊸(UseGC`)_tvaru ↕⋈5 +%USE base ⋄ UseGC`_tvaru ↕4‿2 +%USE base ⋄ (↕⋈2) UseGC`_tvaru ↕4‿2 + +%USE base ⋄ UseGC´ _tvaru ↕⋈4 +%USE base ⋄ @⊸(UseGC´)_tvaru ↕⋈4 + +%USE base ⋄ UseGC˝ _tvaru ↕⋈4 +%USE base ⋄ @⊸(UseGC˝)_tvaru ↕⋈4 +%USE base ⋄ UseGC˝ _tvaru ↕4‿2 +%USE base ⋄ (↕⋈2) (UseGC˝)_tvaru ↕4‿2