From 8cfbaf8b30d050cc5b07e105045d93c7b58d5dc7 Mon Sep 17 00:00:00 2001 From: dzaima Date: Wed, 3 Nov 2021 20:28:00 +0200 Subject: [PATCH] enum of primitive numbering --- src/builtins.h | 10 +++++++++ src/builtins/md1.c | 34 ++++++++++++++--------------- src/builtins/sfns.c | 10 ++++----- src/core/derv.c | 3 ++- src/load.c | 52 ++++++++++++++++++++++----------------------- 5 files changed, 60 insertions(+), 49 deletions(-) diff --git a/src/builtins.h b/src/builtins.h index 32856fb9..9f656219 100644 --- a/src/builtins.h +++ b/src/builtins.h @@ -25,6 +25,16 @@ /* everything before the definition of •_while_ is defined to be pure, and everything after is not */ \ /*md2.c*/ A(while,"•_while_") +enum PrimNumbers { + /* +-×÷⋆√⌊⌈|¬ */ n_add , n_sub , n_mul , n_div , n_pow , n_root , n_floor , n_ceil , n_stile , n_not, + /* ∧∨<>≠=≤≥≡≢ */ n_and , n_or , n_lt , n_gt , n_ne , n_eq , n_le , n_ge , n_feq , n_fne, + /* ⊣⊢⥊∾≍⋈↑↓↕« */ n_ltack , n_rtack , n_shape , n_join , n_couple , n_pair , n_take , n_drop , n_ud , n_shifta, + /* »⌽⍉/⍋⍒⊏⊑⊐⊒ */ n_shiftb , n_reverse, n_transp, n_slash, n_gradeUp, n_gradeDown, n_select, n_pick , n_indexOf, n_count, + /* ∊⍷⊔!˙˜˘¨⌜⁼ */ n_memberOf, n_find , n_group , n_asrt , n_const , n_swap , n_cell , n_each , n_tbl , n_undo, + /* ´˝`∘○⊸⟜⌾⊘◶ */ n_fold , n_reduce , n_scan , n_atop , n_over , n_before , n_after , n_under, n_val , n_cond, + /* ⎉⚇⍟⎊ */ n_cells , n_depth2 , n_repeat, n_catch +}; + enum PrimFns { pf_none, #define F(N,X) pf_##N, FOR_PFN(F,F,F) diff --git a/src/builtins/md1.c b/src/builtins/md1.c index 58b71504..6977f2f0 100644 --- a/src/builtins/md1.c +++ b/src/builtins/md1.c @@ -107,26 +107,26 @@ B scan_c1(Md1D* d, B x) { B f = d->f; u8 xe = TI(x,elType); if (xr==1 && xe<=el_f64 && isFun(f) && v(f)->flags) { u8 rtid = v(f)->flags-1; - if (rtid==0) { // + + if (rtid==n_add) { // + if (iac)c=xp[i]; rp[i]=c; } dec(x); return r; } if (xe==el_i16) { i16* xp=i16any_ptr(x); i16* rp; B r=m_i16arrv(&rp, ia); i16 c=I16_MIN; for (usz i=0; ic)c=xp[i]; rp[i]=c; } dec(x); return r; } if (xe==el_i32) { i32* xp=i32any_ptr(x); i32* rp; B r=m_i32arrv(&rp, ia); i32 c=I32_MIN; for (usz i=0; ic)c=xp[i]; rp[i]=c; } dec(x); return r; } } - if (rtid==14) { // ≠ + if (rtid==n_ne) { // ≠ if (xe==el_bit) return scan_ne(0, x, ia); f64 x0 = IGetU(x,0).f; if (x0!=0 && x0!=1) goto base; if (xe==el_i8 ) { i8* xp=i8any_ptr (x); u64* rp; B r=m_bitarrv(&rp,ia); bool c=x0; rp[0]=c; for (usz i=1; if; if (xr==1 && q_i32(w) && xeflags) { u8 rtid = v(f)->flags-1; i32 wv = o2iu(w); - if (rtid==0) { // + + if (rtid==n_add) { // + if (xe==el_bit) { u64* xp=bitarr_ptr(x); i32* rp; B r=m_i32arrv(&rp, ia); i64 c=wv; for (usz i=0; ic)c=xp[i]; rp[i]=c; } dec(x); return r; } if (xe==el_i16 && wv==(i16)wv) { i16* xp=i16any_ptr(x); i16* rp; B r=m_i16arrv(&rp, ia); i16 c=wv; for (usz i=0; ic)c=xp[i]; rp[i]=c; } dec(x); return r; } if (xe==el_i32 && wv==(i32)wv) { i32* xp=i32any_ptr(x); i32* rp; B r=m_i32arrv(&rp, ia); i32 c=wv; for (usz i=0; ic)c=xp[i]; rp[i]=c; } dec(x); return r; } } - if (rtid==14) { // ≠ + if (rtid==n_ne) { // ≠ if (!q_ibit(wv)) goto base; bool c=wv; if (xe==el_bit) return scan_ne(-(u64)wv, x, ia); if (xe==el_i8 ) { i8* xp=i8any_ptr (x); u64* rp; B r=m_bitarrv(&rp, ia); for (usz i=0; if; u8 xe = TI(x,elType); if (isFun(f) && v(f)->flags && xe<=el_f64) { u8 rtid = v(f)->flags-1; - if (rtid==0) { // + + if (rtid==n_add) { // + if (xe==el_bit) { B r = m_f64(bit_sum(bitarr_ptr(x), ia)); dec(x); return r; } if (xe==el_i8 ) { i8* xp = i8any_ptr (x); i64 c=0; for (usz i=0; i>6); i++) if (~xp[i]){r=0;break;} if(~bitp_l1(xp,ia))r=0; dec(x);return m_i32(r); } if (xe==el_i8 ) { i8* xp = i8any_ptr (x); i32 c=1; for (usz i=0; ic) c=xp[i]; dec(x); return m_i32(c); } if (xe==el_i16) { i16* xp = i16any_ptr(x); i16 c=I16_MIN; for (usz i=0; ic) c=xp[i]; dec(x); return m_i32(c); } if (xe==el_i32) { i32* xp = i32any_ptr(x); i32 c=I32_MIN; for (usz i=0; ic) c=xp[i]; dec(x); return m_i32(c); } } - if (rtid==11) { // ∨ + if (rtid==n_or) { // ∨ if (xe==el_bit) { u64* xp = bitarr_ptr(x); bool r=0; for (usz i=0; i<(ia>>6); i++) if(xp[i]){r=1;break;} if(bitp_l0(xp,ia))r=1;dec(x); return m_i32(r); } if (xe==el_i8 ) { i8* xp = i8any_ptr (x); bool r=0; for (usz i=0; if; if (q_i32(w) && isFun(f) && v(f)->flags && xeflags-1; - if (rtid==0) { // + + if (rtid==n_add) { // + if (xe==el_bit) { B r = m_f64(wi + bit_sum(bitarr_ptr(x), ia)); dec(x); return r; } if (xe==el_i8 ) { i8* xp = i8any_ptr (x); i64 c=wi; for (usz i=0; i>6); i++) if (~xp[i]){r=0;break;} if(~bitp_l1(xp,ia))r=0; } dec(x); return m_i32(r); } if (xe==el_i8 ) { i8* xp = i8any_ptr (x); i32 c=wi; for (usz i=0; ic) c=xp[i]; dec(x); return m_i32(c); } if (xe==el_i16) { i16* xp = i16any_ptr(x); i32 c=wi; for (usz i=0; ic) c=xp[i]; dec(x); return m_i32(c); } if (xe==el_i32) { i32* xp = i32any_ptr(x); i32 c=wi; for (usz i=0; ic) c=xp[i]; dec(x); return m_i32(c); } } - if (rtid==11 && (wi&1)==wi) { // ∨ + if (rtid==n_or && (wi&1)==wi) { // ∨ if (xe==el_bit) { u64* xp = bitarr_ptr(x); bool r=wi; if (!r) { for (usz i=0; i<(ia>>6); i++) if(xp[i]){r=1;break;} if(bitp_l0(xp,ia))r=1; } dec(x); return m_i32(r); } if (xe==el_i8 ) { i8* xp = i8any_ptr (x); bool q=wi; for (usz i=0; im1); dec(((Md1D*)x)->f); } DEF_FREE(md2D) { dec(((Md2D*)x)->m2); dec(((Md2D*)x)->f); dec(((Md2D*)x)->g); } @@ -67,7 +68,7 @@ static B toConstant(B x) { // doesn't consume x if (v(x)->type == t_md1D) { Md1D* d = c(Md1D,x); B m1 = d->m1; - if (v(m1)->type==t_md1BI && v(m1)->flags==45) return inc(d->f); + if (v(m1)->type==t_md1BI && v(m1)->flags==n_const) return inc(d->f); } return bi_N; } diff --git a/src/load.c b/src/load.c index 87d261a7..08ae877c 100644 --- a/src/load.c +++ b/src/load.c @@ -224,13 +224,13 @@ void load_init() { // very last init function comp_currSrc = bi_N; gc_addFn(load_gcFn); B fruntime[] = { - /* +-×÷⋆√⌊⌈|¬ */ bi_add , bi_sub , bi_mul , bi_div , bi_pow , bi_root , bi_floor , bi_ceil , bi_stile , bi_not, - /* ∧∨<>≠=≤≥≡≢ */ bi_and , bi_or , bi_lt , bi_gt , bi_ne , bi_eq , bi_le , bi_ge , bi_feq , bi_fne, - /* ⊣⊢⥊∾≍⋈↑↓↕« */ bi_ltack , bi_rtack , bi_shape , bi_join , bi_couple , bi_pair , bi_take , bi_drop , bi_ud , bi_shifta, - /* »⌽⍉/⍋⍒⊏⊑⊐⊒ */ bi_shiftb , bi_reverse, bi_N , bi_slash, bi_gradeUp, bi_gradeDown, bi_select, bi_pick , bi_indexOf, bi_count, - /* ∊⍷⊔!˙˜˘¨⌜⁼ */ bi_memberOf,bi_find , bi_group , bi_asrt , bi_const , bi_swap , bi_cell , bi_each , bi_tbl , bi_N, - /* ´˝`∘○⊸⟜⌾⊘◶ */ bi_fold ,bi_N , bi_scan , bi_atop , bi_over , bi_before , bi_after , bi_under, bi_val , bi_cond, - /* ⎉⚇⍟⎊ */ bi_N ,bi_N , bi_repeat, bi_catch + /* +-×÷⋆√⌊⌈|¬ */ bi_add , bi_sub , bi_mul , bi_div , bi_pow , bi_root , bi_floor , bi_ceil , bi_stile , bi_not, + /* ∧∨<>≠=≤≥≡≢ */ bi_and , bi_or , bi_lt , bi_gt , bi_ne , bi_eq , bi_le , bi_ge , bi_feq , bi_fne, + /* ⊣⊢⥊∾≍⋈↑↓↕« */ bi_ltack , bi_rtack , bi_shape , bi_join , bi_couple , bi_pair , bi_take , bi_drop , bi_ud , bi_shifta, + /* »⌽⍉/⍋⍒⊏⊑⊐⊒ */ bi_shiftb , bi_reverse, bi_N , bi_slash, bi_gradeUp, bi_gradeDown, bi_select, bi_pick , bi_indexOf, bi_count, + /* ∊⍷⊔!˙˜˘¨⌜⁼ */ bi_memberOf, bi_find , bi_group , bi_asrt , bi_const , bi_swap , bi_cell , bi_each , bi_tbl , bi_N, + /* ´˝`∘○⊸⟜⌾⊘◶ */ bi_fold , bi_N , bi_scan , bi_atop , bi_over , bi_before , bi_after , bi_under, bi_val , bi_cond, + /* ⎉⚇⍟⎊ */ bi_N , bi_N , bi_repeat, bi_catch }; bool rtComplete[] = { @@ -275,22 +275,22 @@ void load_init() { // very last init function HArr_p runtimeH = m_harrUc(rtObjRaw); SGet(rtObjRaw) - rt_undo = Get(rtObjRaw, 49); gc_add(rt_undo); - rt_select = Get(rtObjRaw, 36); gc_add(rt_select); - rt_slash = Get(rtObjRaw, 33); gc_add(rt_slash); - rt_join = Get(rtObjRaw, 23); gc_add(rt_join); - rt_ud = Get(rtObjRaw, 28); gc_add(rt_ud); - rt_pick = Get(rtObjRaw, 37); gc_add(rt_pick); - rt_take = Get(rtObjRaw, 26); gc_add(rt_take); - rt_drop = Get(rtObjRaw, 27); gc_add(rt_drop); - rt_group = Get(rtObjRaw, 42); gc_add(rt_group); - rt_under = Get(rtObjRaw, 57); gc_add(rt_under); - rt_reverse = Get(rtObjRaw, 31); gc_add(rt_reverse); - rt_indexOf = Get(rtObjRaw, 38); gc_add(rt_indexOf); - rt_count = Get(rtObjRaw, 39); gc_add(rt_count); - rt_memberOf= Get(rtObjRaw, 40); gc_add(rt_memberOf); - rt_find = Get(rtObjRaw, 41); gc_add(rt_find); - rt_cell = Get(rtObjRaw, 46); gc_add(rt_cell); + rt_undo = Get(rtObjRaw, n_undo ); gc_add(rt_undo); + rt_select = Get(rtObjRaw, n_select ); gc_add(rt_select); + rt_slash = Get(rtObjRaw, n_slash ); gc_add(rt_slash); + rt_join = Get(rtObjRaw, n_join ); gc_add(rt_join); + rt_ud = Get(rtObjRaw, n_ud ); gc_add(rt_ud); + rt_pick = Get(rtObjRaw, n_pick ); gc_add(rt_pick); + rt_take = Get(rtObjRaw, n_take ); gc_add(rt_take); + rt_drop = Get(rtObjRaw, n_drop ); gc_add(rt_drop); + rt_group = Get(rtObjRaw, n_group ); gc_add(rt_group); + rt_under = Get(rtObjRaw, n_under ); gc_add(rt_under); + rt_reverse = Get(rtObjRaw, n_reverse ); gc_add(rt_reverse); + rt_indexOf = Get(rtObjRaw, n_indexOf ); gc_add(rt_indexOf); + rt_count = Get(rtObjRaw, n_count ); gc_add(rt_count); + rt_memberOf= Get(rtObjRaw, n_memberOf); gc_add(rt_memberOf); + rt_find = Get(rtObjRaw, n_find ); gc_add(rt_find); + rt_cell = Get(rtObjRaw, n_cell ); gc_add(rt_cell); for (usz i = 0; i < rtLen; i++) { #ifdef RT_WRAP @@ -343,12 +343,12 @@ void load_init() { // very last init function print_allocStats(); exit(0); #else // use compiler - B prevAsrt = runtime[43]; - runtime[43] = bi_casrt; // horrible but GC is off so it's fiiiiiine + B prevAsrt = runtime[n_asrt]; + runtime[n_asrt] = bi_casrt; // horrible but GC is off so it's fiiiiiine Block* comp_b = load_compImport( #include "gen/compiler" ); - runtime[43] = prevAsrt; + runtime[n_asrt] = prevAsrt; load_comp = m_funBlock(comp_b, 0); ptr_dec(comp_b); gc_add(load_comp);