gc tests, more reuse removal

This commit is contained in:
dzaima 2023-12-04 11:57:18 +02:00
parent baa23cb527
commit d7c153286e
2 changed files with 34 additions and 10 deletions

View File

@ -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; i<ia; i++) r.a[i] = fc2(f, inc(r.a[i-1]), xget(xa,i));
r.a[0] = Get(x,0);
for (usz i=1; i<ia; i++) r.a[i] = fc2(f, inc(r.a[i-1]), Get(x,i));
} else {
usz csz = arr_csz(x);
usz i = 0;
for (; i<csz; i++) r.a[i] = xget(xa,i);
for (; i<ia; i++) r.a[i] = fc2(f, inc(r.a[i-csz]), xget(xa,i));
for (; i<csz; i++) r.a[i] = Get(x,i);
for (; i<ia; i++) r.a[i] = fc2(f, inc(r.a[i-csz]), Get(x,i));
}
if (!reuse) decG(x);
decG(x);
return withFill(r.b, xf);
}
@ -309,7 +308,6 @@ B scan_c2(Md1D* d, B w, B x) { B f = d->f;
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);
}

26
test/cases/gc.bqn Normal file
View File

@ -0,0 +1,26 @@
%DEF base (
VVariation, UUnshare, LVListVariations CLRClearRefs, 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 42
%USE base (2) UseGC`_tvaru 42
%USE base UseGC´ _tvaru 4
%USE base @(UseGC´)_tvaru 4
%USE base UseGC˝ _tvaru 4
%USE base @(UseGC˝)_tvaru 4
%USE base UseGC˝ _tvaru 42
%USE base (2) (UseGC˝)_tvaru 42