fix deep squeeze

This commit is contained in:
dzaima 2021-09-25 19:34:48 +03:00
parent 02605fe271
commit a91e351aee
3 changed files with 8 additions and 4 deletions

View File

@ -10,7 +10,7 @@
/* sysfn.c*/M(type,"•Type") M(decp,"•Decompose") M(primInd,"•PrimInd") M(glyph,"•Glyph") A(fill,"•FillFn") M(sys,"•getsys") A(grLen,"•GroupLen") D(grOrd,"•GroupOrd") \
/* sysfn.c*/M(repr,"•Repr") M(fmt,"•Fmt") A(asrt,"!") A(casrt,"!") M(out,"•Out") M(show,"•Show") M(bqn,"•BQN") M(sh,"•SH") M(fromUtf8,"•FromUTF8") \
/* sysfn.c*/D(cmp,"•Cmp") A(hash,"•Hash") M(unixTime,"•UnixTime") M(monoTime,"•MonoTime") M(delay,"•Delay") M(makeRand,"•MakeRand") M(reBQN,"•ReBQN") M(exit,"•Exit") M(getLine,"•GetLine") \
/*internal.c*/M(itype,"•internal.Type") M(refc,"•internal.Refc") M(squeeze,"•internal.Squeeze") M(isPure,"•internal.IsPure") A(info,"•internal.Info") \
/*internal.c*/M(itype,"•internal.Type") M(refc,"•internal.Refc") M(squeeze,"•internal.Squeeze") M(deepSqueeze,"•internal.DeepSqueeze") M(isPure,"•internal.IsPure") A(info,"•internal.Info") \
/*internal.c*/D(variation,"•internal.Variation") A(listVariations,"•internal.ListVariations") M(clearRefs,"•internal.ClearRefs") M(unshare,"•internal.Unshare")
#define FOR_PM1(A,M,D) \

View File

@ -26,6 +26,9 @@ B squeeze_c1(B t, B x) {
if (!isArr(x)) return x;
return any_squeeze(x);
}
B deepSqueeze_c1(B t, B x) {
return squeeze_deep(x);
}
B isPure_c1(B t, B x) {
B r = m_f64(isPureFn(x));
dec(x);
@ -258,8 +261,8 @@ B getInternalNS() {
listVariations_def = m_str8l("if");
gc_addFn(variation_root);
#define F(X) inc(bi_##X),
B fn = bqn_exec(m_str32(U"{⟨ Type, Refc, Squeeze, IsPure, Info, ListVariations, Variation, ClearRefs, Unshare⟩⇐𝕩}"), emptyCVec(), emptySVec());
B arg = m_caB(9, (B[]){F(itype)F(refc)F(squeeze)F(isPure)F(info)F(listVariations)F(variation)F(clearRefs)F(unshare)});
B fn = bqn_exec(m_str32(U"{⟨ Type, Refc, Squeeze, IsPure, Info, ListVariations, Variation, ClearRefs, Unshare, DeepSqueeze⟩⇐𝕩}"), emptyCVec(), emptySVec());
B arg = m_caB(10,(B[]){F(itype)F(refc)F(squeeze)F(isPure)F(info)F(listVariations)F(variation)F(clearRefs)F(unshare)F(deepSqueeze)});
#undef F
internalNS = c1(fn,arg);
gc_add(internalNS);

View File

@ -582,13 +582,14 @@ B squeeze_deep(B x) {
usz ia = a(x)->ia;
usz i=0; HArr_p r = m_harrs(ia,&i);
B* xp = arr_bptr(x);
B xf = getFillQ(x);
if (xp!=NULL) {
while (i < ia) { r.a[i] = squeeze_deep(inc(xp[i])); i++; }
} else {
SGet(x);
while (i < ia) { r.a[i] = squeeze_deep(Get(x,i)); i++; }
}
return any_squeeze(harr_fcd(r, x));
return any_squeeze(qWithFill(harr_fcd(r, x), xf));
}
B bqn_merge(B x) {