static const tagged builtins
This commit is contained in:
parent
48a9b786c9
commit
752a68cb2d
@ -400,13 +400,13 @@ B join_c2(B t, B w, B x) {
|
|||||||
HArr_p r = m_harrUv(2);
|
HArr_p r = m_harrUv(2);
|
||||||
r.a[0] = TI(w).get(w,0); dec(w);
|
r.a[0] = TI(w).get(w,0); dec(w);
|
||||||
r.a[1] = TI(x).get(x,0); dec(x);
|
r.a[1] = TI(x).get(x,0); dec(x);
|
||||||
return withFill(r.b, f);
|
return qWithFill(r.b, f);
|
||||||
}
|
}
|
||||||
if (c-wr > 1 || c-xr > 1) thrF("∾: Argument ranks must differ by 1 or less (%i≡=𝕨, %i≡=𝕩)", wr, xr);
|
if (c-wr > 1 || c-xr > 1) thrF("∾: Argument ranks must differ by 1 or less (%i≡=𝕨, %i≡=𝕩)", wr, xr);
|
||||||
if (c==1) {
|
if (c==1) {
|
||||||
B r = vec_join(w, x);
|
B r = vec_join(w, x);
|
||||||
if (rnk(r)==0) srnk(r,1);
|
if (rnk(r)==0) srnk(r,1);
|
||||||
return withFill(r, f);
|
return qWithFill(r, f);
|
||||||
}
|
}
|
||||||
MAKE_MUT(r, wia+xia);
|
MAKE_MUT(r, wia+xia);
|
||||||
mut_to(r, el_or(TI(w).elType, TI(x).elType));
|
mut_to(r, el_or(TI(w).elType, TI(x).elType));
|
||||||
@ -468,7 +468,7 @@ B couple_c2(B t, B w, B x) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void shift_check(B w, B x) {
|
static inline void shift_check(B w, B x) {
|
||||||
ur wr = rnk(w); usz* wsh = a(w)->sh;
|
ur wr = rnk(w); usz* wsh = a(w)->sh;
|
||||||
ur xr = rnk(x); usz* xsh = a(x)->sh;
|
ur xr = rnk(x); usz* xsh = a(x)->sh;
|
||||||
if (wr+1!=xr & wr!=xr) thrF("shift: =𝕨 must be =𝕩 or ¯1+=𝕩 (%i≡=𝕨, %i≡=𝕩)", wr, xr);
|
if (wr+1!=xr & wr!=xr) thrF("shift: =𝕨 must be =𝕩 or ¯1+=𝕩 (%i≡=𝕨, %i≡=𝕩)", wr, xr);
|
||||||
|
|||||||
@ -195,8 +195,4 @@ B withFill(B x, B fill) { // consumes both
|
|||||||
for (usz i = 0; i < ia; i++) a[i] = xget(x,i);
|
for (usz i = 0; i < ia; i++) a[i] = xget(x,i);
|
||||||
dec(x);
|
dec(x);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
B qWithFill(B x, B fill) { // consumes both
|
|
||||||
if (noFill(fill)) return x;
|
|
||||||
return withFill(x, fill);
|
|
||||||
}
|
|
||||||
@ -12,7 +12,11 @@ B asFill(B x); // consumes
|
|||||||
void validateFill(B x);
|
void validateFill(B x);
|
||||||
bool fillEqual(B w, B x);
|
bool fillEqual(B w, B x);
|
||||||
B withFill(B x, B fill); // consumes both
|
B withFill(B x, B fill); // consumes both
|
||||||
B qWithFill(B x, B fill); // consumes both
|
static B qWithFill(B x, B fill) { // consumes both
|
||||||
|
if (noFill(fill)) return x;
|
||||||
|
return withFill(x, fill);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static B getFillR(B x) { // doesn't consume; can return bi_noFill
|
static B getFillR(B x) { // doesn't consume; can return bi_noFill
|
||||||
if (isArr(x)) {
|
if (isArr(x)) {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
#include "../utils/utf.h"
|
#include "../utils/utf.h"
|
||||||
|
|
||||||
u64 allocB; // currently allocated number of bytes
|
u64 allocB; // currently allocated number of bytes
|
||||||
B bi_N, bi_noVar, bi_badHdr, bi_optOut, bi_noFill, bi_emptyHVec, bi_emptyIVec, bi_emptyCVec;
|
B bi_emptyHVec, bi_emptyIVec, bi_emptyCVec;
|
||||||
#define F(N) u64 N;
|
#define F(N) u64 N;
|
||||||
CTR_FOR(F)
|
CTR_FOR(F)
|
||||||
#undef F
|
#undef F
|
||||||
|
|||||||
7
src/h.h
7
src/h.h
@ -234,7 +234,12 @@ void gc_forceGC(); // force a gc; who knows what happens if gc is disabled (prob
|
|||||||
void gc_visitRoots();
|
void gc_visitRoots();
|
||||||
|
|
||||||
// some primitive actions
|
// some primitive actions
|
||||||
extern B bi_N, bi_noVar, bi_badHdr, bi_optOut, bi_noFill, bi_emptyHVec, bi_emptyIVec, bi_emptyCVec;
|
static const B bi_N = tag(0, TAG_TAG);
|
||||||
|
static const B bi_noVar = tag(1, TAG_TAG);
|
||||||
|
static const B bi_badHdr = tag(2, TAG_TAG);
|
||||||
|
static const B bi_optOut = tag(3, TAG_TAG);
|
||||||
|
static const B bi_noFill = tag(5, TAG_TAG);
|
||||||
|
extern B bi_emptyHVec, bi_emptyIVec, bi_emptyCVec;
|
||||||
static void dec(B x);
|
static void dec(B x);
|
||||||
static B inc(B x);
|
static B inc(B x);
|
||||||
static void ptr_dec(void* x);
|
static void ptr_dec(void* x);
|
||||||
|
|||||||
@ -313,11 +313,6 @@ static inline void base_init() { // very first init function
|
|||||||
ti[t_shape].visit = noop_visit;
|
ti[t_shape].visit = noop_visit;
|
||||||
ti[t_funBI].visit = ti[t_md1BI].visit = ti[t_md2BI].visit = noop_visit;
|
ti[t_funBI].visit = ti[t_md1BI].visit = ti[t_md2BI].visit = noop_visit;
|
||||||
ti[t_funBI].free = ti[t_md1BI].free = ti[t_md2BI].free = builtin_free;
|
ti[t_funBI].free = ti[t_md1BI].free = ti[t_md2BI].free = builtin_free;
|
||||||
bi_N = tag(0, TAG_TAG);
|
|
||||||
bi_noVar = tag(1, TAG_TAG);
|
|
||||||
bi_badHdr = tag(2, TAG_TAG);
|
|
||||||
bi_optOut = tag(3, TAG_TAG);
|
|
||||||
bi_noFill = tag(5, TAG_TAG);
|
|
||||||
assert((MD1_TAG>>1) == (MD2_TAG>>1)); // just to be sure it isn't changed incorrectly, `isMd` depends on this
|
assert((MD1_TAG>>1) == (MD2_TAG>>1)); // just to be sure it isn't changed incorrectly, `isMd` depends on this
|
||||||
|
|
||||||
#define FA(N,X) { B t=bi_##N = mm_alloc(sizeof(BFn), t_funBI, ftag(FUN_TAG)); BFn*f=c(BFn,t); f->c2=N##_c2 ; f->c1=N##_c1 ; f->extra=pf_##N; f->ident=bi_N; f->uc1=def_fn_uc1; f->ucw=def_fn_ucw; gc_add(t); }
|
#define FA(N,X) { B t=bi_##N = mm_alloc(sizeof(BFn), t_funBI, ftag(FUN_TAG)); BFn*f=c(BFn,t); f->c2=N##_c2 ; f->c1=N##_c1 ; f->extra=pf_##N; f->ident=bi_N; f->uc1=def_fn_uc1; f->ucw=def_fn_ucw; gc_add(t); }
|
||||||
|
|||||||
2
src/vm.c
2
src/vm.c
@ -39,7 +39,7 @@ enum {
|
|||||||
LOCU = 31, // N0,N1; like LOCO but overrides the slot with bi_optOut
|
LOCU = 31, // N0,N1; like LOCO but overrides the slot with bi_optOut
|
||||||
EXTO, EXTM, EXTU, // alternate versions of LOC_ for extended variables
|
EXTO, EXTM, EXTU, // alternate versions of LOC_ for extended variables
|
||||||
ADDI, ADDU, // PUSH with required increment & not required increment
|
ADDI, ADDU, // PUSH with required increment & not required increment
|
||||||
BC_SIZE = 32
|
BC_SIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
#define FOR_BC(F) F(PUSH) F(VARO) F(VARM) F(ARRO) F(ARRM) F(FN1C) F(FN2C) F(OP1D) F(OP2D) F(TR2D) \
|
#define FOR_BC(F) F(PUSH) F(VARO) F(VARM) F(ARRO) F(ARRM) F(FN1C) F(FN2C) F(OP1D) F(OP2D) F(TR2D) \
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user