•Out and •Show
This commit is contained in:
parent
9003a5df99
commit
3a0ed1cbc7
3
src/h.h
3
src/h.h
@ -91,7 +91,7 @@ char* format_type(u8 u) {
|
|||||||
F(shape,"⥊") F(pick,"⊑") F(ud,"↕") F(pair,"{𝕨‿𝕩}") F(fne,"≢") F(feq,"≡") F(select,"⊏") F(slash,"/") F(ltack,"⊣") F(rtack,"⊢") F(fmtF,"⍕") F(fmtN,"⍕") /*sfns.c*/ \
|
F(shape,"⥊") F(pick,"⊑") F(ud,"↕") F(pair,"{𝕨‿𝕩}") F(fne,"≢") F(feq,"≡") F(select,"⊏") F(slash,"/") F(ltack,"⊣") F(rtack,"⊢") F(fmtF,"⍕") F(fmtN,"⍕") /*sfns.c*/ \
|
||||||
F(fork,"(fork)") F(atop,"(atop)") F(md1d,"(derived 1-modifier)") F(md2d,"(derived 2-modifier)") /*derv.c*/ \
|
F(fork,"(fork)") F(atop,"(atop)") F(md1d,"(derived 1-modifier)") F(md2d,"(derived 2-modifier)") /*derv.c*/ \
|
||||||
F(type,"•Type") F(decp,"•Decompose") F(primInd,"•PrimInd") F(glyph,"•Glyph") F(fill,"•FillFn") /*sysfn.c*/ \
|
F(type,"•Type") F(decp,"•Decompose") F(primInd,"•PrimInd") F(glyph,"•Glyph") F(fill,"•FillFn") /*sysfn.c*/ \
|
||||||
F(grLen,"•GroupLen") F(grOrd,"•groupOrd") F(asrt,"!") F(sys,"•getsys") F(internal,"•Internal") /*sysfn.c*/
|
F(grLen,"•GroupLen") F(grOrd,"•groupOrd") F(asrt,"!") F(sys,"•getsys") F(internal,"•Internal") F(show,"•Show") F(out,"•Out") /*sysfn.c*/
|
||||||
|
|
||||||
enum PrimFns {
|
enum PrimFns {
|
||||||
#define F(N,X) pf_##N,
|
#define F(N,X) pf_##N,
|
||||||
@ -253,6 +253,7 @@ bool isFun(B x) { return (x.u>>48) == FUN_TAG; }
|
|||||||
bool isArr(B x) { return (x.u>>48) == ARR_TAG; }
|
bool isArr(B x) { return (x.u>>48) == ARR_TAG; }
|
||||||
bool isC32(B x) { return (x.u>>48) == C32_TAG; }
|
bool isC32(B x) { return (x.u>>48) == C32_TAG; }
|
||||||
bool isVar(B x) { return (x.u>>48) == VAR_TAG; }
|
bool isVar(B x) { return (x.u>>48) == VAR_TAG; }
|
||||||
|
bool isTag(B x) { return (x.u>>48) == TAG_TAG; }
|
||||||
bool isMd1(B x) { return (x.u>>48) == MD1_TAG; }
|
bool isMd1(B x) { return (x.u>>48) == MD1_TAG; }
|
||||||
bool isMd2(B x) { return (x.u>>48) == MD2_TAG; }
|
bool isMd2(B x) { return (x.u>>48) == MD2_TAG; }
|
||||||
bool isMd (B x) { return (x.u>>49) ==(MD2_TAG>>1); }
|
bool isMd (B x) { return (x.u>>49) ==(MD2_TAG>>1); }
|
||||||
|
|||||||
@ -71,14 +71,14 @@ void printRaw(B x) {
|
|||||||
if (isAtm(x)) {
|
if (isAtm(x)) {
|
||||||
if (isF64(x)) printf("%g", x.f);
|
if (isF64(x)) printf("%g", x.f);
|
||||||
else if (isC32(x)) printUTF8((u32)x.u);
|
else if (isC32(x)) printUTF8((u32)x.u);
|
||||||
else err("bad printRaw argument: atom arguments should be either numerical or characters");
|
else thrM("bad printRaw argument: atom arguments should be either numerical or characters");
|
||||||
} else {
|
} else {
|
||||||
usz ia = a(x)->ia;
|
usz ia = a(x)->ia;
|
||||||
BS2B xgetU = TI(x).getU;
|
BS2B xgetU = TI(x).getU;
|
||||||
for (usz i = 0; i < ia; i++) {
|
for (usz i = 0; i < ia; i++) {
|
||||||
B c = xgetU(x,i);
|
B c = xgetU(x,i);
|
||||||
if (c.u==0 || noFill(c)) { printf(" "); continue; }
|
if (c.u==0 || noFill(c)) { printf(" "); continue; }
|
||||||
if (!isC32(c)) err("bad printRaw argument: expected all character items");
|
if (!isC32(c)) thrM("bad printRaw argument: expected all character items");
|
||||||
printUTF8((u32)c.u);
|
printUTF8((u32)c.u);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
26
src/sysfn.c
26
src/sysfn.c
@ -121,22 +121,34 @@ B asrt_c2(B t, B w, B x) {
|
|||||||
B internal_c2(B t, B w, B x) {
|
B internal_c2(B t, B w, B x) {
|
||||||
B r;
|
B r;
|
||||||
u64 id = o2s(w);
|
u64 id = o2s(w);
|
||||||
if(id==0) { char* c = format_type(v(x)->type); r = m_str8(strlen(c), c); }
|
if(id==0) {
|
||||||
else if(id==1) { r = m_i32(v(x)->mmInfo); }
|
if(isVal(x)) { char* c = format_type(v(x)->type); r = m_str8(strlen(c), c); }
|
||||||
else if(id==2) { r = m_i32(v(x)->refc); }
|
else {
|
||||||
else return err("Unknown •Internal 𝕨");
|
if (isF64(x)) r = m_str32(U"tagged f64");
|
||||||
|
else if (isI32(x)) r = m_str32(U"tagged i32");
|
||||||
|
else if (isC32(x)) r = m_str32(U"tagged c32");
|
||||||
|
else if (isTag(x)) r = m_str32(U"tagged tag");
|
||||||
|
else if (isVar(x)) r = m_str32(U"tagged var");
|
||||||
|
else r = m_str32(U"tagged unknown");
|
||||||
|
}
|
||||||
|
} else if(id==1) { r = isVal(x)? m_i32(v(x)->mmInfo & 0x7f) : m_str32(U"(not heap-allocated)"); }
|
||||||
|
else if(id==2) { r = isVal(x)? m_i32(v(x)->refc) : m_str32(U"(not heap-allocated)"); }
|
||||||
|
else if(id==3) { printf("%p\n", (void*)x.u); r = inc(x); }
|
||||||
|
else { dec(x); thrM("Bad 𝕨 argument for •Internal"); }
|
||||||
dec(x);
|
dec(x);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
B sys_c1(B t, B x);
|
B sys_c1(B t, B x);
|
||||||
|
B out_c1(B t, B x) { printRaw(x); putchar('\n'); return x; }
|
||||||
|
B show_c1(B t, B x) { print (x); putchar('\n'); return x; }
|
||||||
|
|
||||||
|
|
||||||
#define ba(N) bi_##N = mm_alloc(sizeof(BFn), t_funBI, ftag(FUN_TAG)); c(Fun,bi_##N)->c2 = N##_c2 ;c(Fun,bi_##N)->c1 = N##_c1 ; c(Fun,bi_##N)->extra=pf_##N; c(BFn,bi_##N)->ident=bi_N; gc_add(bi_##N);
|
#define ba(N) bi_##N = mm_alloc(sizeof(BFn), t_funBI, ftag(FUN_TAG)); c(Fun,bi_##N)->c2 = N##_c2 ;c(Fun,bi_##N)->c1 = N##_c1 ; c(Fun,bi_##N)->extra=pf_##N; c(BFn,bi_##N)->ident=bi_N; gc_add(bi_##N);
|
||||||
#define bd(N) bi_##N = mm_alloc(sizeof(BFn), t_funBI, ftag(FUN_TAG)); c(Fun,bi_##N)->c2 = N##_c2 ;c(Fun,bi_##N)->c1 = c1_invalid; c(Fun,bi_##N)->extra=pf_##N; c(BFn,bi_##N)->ident=bi_N; gc_add(bi_##N);
|
#define bd(N) bi_##N = mm_alloc(sizeof(BFn), t_funBI, ftag(FUN_TAG)); c(Fun,bi_##N)->c2 = N##_c2 ;c(Fun,bi_##N)->c1 = c1_invalid; c(Fun,bi_##N)->extra=pf_##N; c(BFn,bi_##N)->ident=bi_N; gc_add(bi_##N);
|
||||||
#define bm(N) bi_##N = mm_alloc(sizeof(BFn), t_funBI, ftag(FUN_TAG)); c(Fun,bi_##N)->c2 = c2_invalid;c(Fun,bi_##N)->c1 = N##_c1 ; c(Fun,bi_##N)->extra=pf_##N; c(BFn,bi_##N)->ident=bi_N; gc_add(bi_##N);
|
#define bm(N) bi_##N = mm_alloc(sizeof(BFn), t_funBI, ftag(FUN_TAG)); c(Fun,bi_##N)->c2 = c2_invalid;c(Fun,bi_##N)->c1 = N##_c1 ; c(Fun,bi_##N)->extra=pf_##N; c(BFn,bi_##N)->ident=bi_N; gc_add(bi_##N);
|
||||||
|
|
||||||
B bi_type, bi_decp, bi_primInd, bi_glyph, bi_fill, bi_grLen, bi_grOrd, bi_asrt, bi_sys, bi_internal;
|
B bi_type, bi_decp, bi_primInd, bi_glyph, bi_fill, bi_grLen, bi_grOrd, bi_asrt, bi_out, bi_show, bi_sys, bi_internal;
|
||||||
static inline void sysfn_init() { bm(type) bm(decp) bm(primInd) bm(glyph) ba(fill) ba(grLen) bd(grOrd) ba(asrt) bm(sys) bd(internal) }
|
static inline void sysfn_init() { bm(type) bm(decp) bm(primInd) bm(glyph) ba(fill) ba(grLen) bd(grOrd) ba(asrt) bm(out) bm(show) bm(sys) bd(internal) }
|
||||||
|
|
||||||
#undef ba
|
#undef ba
|
||||||
#undef bd
|
#undef bd
|
||||||
@ -154,6 +166,8 @@ B sys_c1(B t, B x) {
|
|||||||
else if (eqStr(c, U"decompose")) r.a[i] = inc(bi_decp);
|
else if (eqStr(c, U"decompose")) r.a[i] = inc(bi_decp);
|
||||||
else if (eqStr(c, U"primind")) r.a[i] = inc(bi_primInd);
|
else if (eqStr(c, U"primind")) r.a[i] = inc(bi_primInd);
|
||||||
else if (eqStr(c, U"type")) r.a[i] = inc(bi_type);
|
else if (eqStr(c, U"type")) r.a[i] = inc(bi_type);
|
||||||
|
else if (eqStr(c, U"out")) r.a[i] = inc(bi_out);
|
||||||
|
else if (eqStr(c, U"show")) r.a[i] = inc(bi_show);
|
||||||
else thrM("Unknown system function");
|
else thrM("Unknown system function");
|
||||||
}
|
}
|
||||||
return harr_fcd(r, x);
|
return harr_fcd(r, x);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user