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(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*/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") \
|
/* 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")
|
/*internal.c*/D(variation,"•internal.Variation") A(listVariations,"•internal.ListVariations") M(clearRefs,"•internal.ClearRefs") M(unshare,"•internal.Unshare")
|
||||||
|
|
||||||
#define FOR_PM1(A,M,D) \
|
#define FOR_PM1(A,M,D) \
|
||||||
|
|||||||
@ -26,6 +26,9 @@ B squeeze_c1(B t, B x) {
|
|||||||
if (!isArr(x)) return x;
|
if (!isArr(x)) return x;
|
||||||
return any_squeeze(x);
|
return any_squeeze(x);
|
||||||
}
|
}
|
||||||
|
B deepSqueeze_c1(B t, B x) {
|
||||||
|
return squeeze_deep(x);
|
||||||
|
}
|
||||||
B isPure_c1(B t, B x) {
|
B isPure_c1(B t, B x) {
|
||||||
B r = m_f64(isPureFn(x));
|
B r = m_f64(isPureFn(x));
|
||||||
dec(x);
|
dec(x);
|
||||||
@ -258,8 +261,8 @@ B getInternalNS() {
|
|||||||
listVariations_def = m_str8l("if");
|
listVariations_def = m_str8l("if");
|
||||||
gc_addFn(variation_root);
|
gc_addFn(variation_root);
|
||||||
#define F(X) inc(bi_##X),
|
#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 fn = bqn_exec(m_str32(U"{⟨ Type, Refc, Squeeze, IsPure, Info, ListVariations, Variation, ClearRefs, Unshare, DeepSqueeze⟩⇐𝕩}"), 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 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
|
#undef F
|
||||||
internalNS = c1(fn,arg);
|
internalNS = c1(fn,arg);
|
||||||
gc_add(internalNS);
|
gc_add(internalNS);
|
||||||
|
|||||||
@ -582,13 +582,14 @@ B squeeze_deep(B x) {
|
|||||||
usz ia = a(x)->ia;
|
usz ia = a(x)->ia;
|
||||||
usz i=0; HArr_p r = m_harrs(ia,&i);
|
usz i=0; HArr_p r = m_harrs(ia,&i);
|
||||||
B* xp = arr_bptr(x);
|
B* xp = arr_bptr(x);
|
||||||
|
B xf = getFillQ(x);
|
||||||
if (xp!=NULL) {
|
if (xp!=NULL) {
|
||||||
while (i < ia) { r.a[i] = squeeze_deep(inc(xp[i])); i++; }
|
while (i < ia) { r.a[i] = squeeze_deep(inc(xp[i])); i++; }
|
||||||
} else {
|
} else {
|
||||||
SGet(x);
|
SGet(x);
|
||||||
while (i < ia) { r.a[i] = squeeze_deep(Get(x,i)); i++; }
|
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) {
|
B bqn_merge(B x) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user