fix deep squeeze
This commit is contained in:
parent
02605fe271
commit
a91e351aee
@ -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) \
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user