From dd3965cb3ca52e79ee4f30a7ee55a78401b739c1 Mon Sep 17 00:00:00 2001 From: dzaima Date: Wed, 3 Nov 2021 20:16:04 +0200 Subject: [PATCH] =?UTF-8?q?=E2=8B=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cc.bqn | 2 +- src/builtins.h | 2 +- src/builtins/sfns.c | 8 +++--- src/builtins/sysfn.c | 2 +- src/core/derv.c | 2 +- src/h.h | 2 +- src/load.c | 63 ++++++++++++++++++++++---------------------- 7 files changed, 41 insertions(+), 40 deletions(-) diff --git a/cc.bqn b/cc.bqn index b24ebb57..f670deff 100755 --- a/cc.bqn +++ b/cc.bqn @@ -38,7 +38,7 @@ _Lo ← {"B" MakeList 𝔽¨𝕩} glyphs ← Import "glyphs.bqn" _getComp ← { (4+2Γ—useInd)↑ <∘⊒∾˜ 5↑ (𝕗 Import "c.bqn"){𝔽} } useInd ← "-i"β‰‘βŠ‘args β‹„ argsβ†“Λœβ†©useInd -Comp ← ((<"inc(runtime["∾F∾"])"Λ™)¨↕62) glyphs _getComp ⊒ +Comp ← ((<"inc(runtime["∾F∾"])"Λ™)Β¨β†•β‰ βˆΎglyphs) glyphs _getComp ⊒ J ← ∾∾⟜(@+10)Β¨ Fout ← {((≠𝕩)β†‘βŸ¨Li β‹„ OAny _Lo β‹„ =β—ΆβŸ¨ONum,Li _Lo⟩ _Lo _Lo β‹„ (Li 2βŠΈβ†‘) _Lo β‹„ Li _Lo β‹„ OStr⟩) {π•Žπ•©}Β¨ 𝕩} diff --git a/src/builtins.h b/src/builtins.h index 5c43f084..32856fb9 100644 --- a/src/builtins.h +++ b/src/builtins.h @@ -4,7 +4,7 @@ /* arith.c*/A(add,"+") A(sub,"-") A(mul,"Γ—") A(div,"Γ·") A(pow,"⋆") A(root,"√") A(floor,"⌊") A(ceil,"⌈") A(stile,"|") A(eq,"=") \ /* arith.c*/A(ne,"β‰ ") D(le,"≀") D(ge,"β‰₯") A(lt,"<") A(gt,">") A(and,"∧") A(or,"∨") A(not,"Β¬") A(log,"⋆⁼") \ /* fns.c*/A(ud,"↕") A(fne,"β‰’") A(feq,"≑") A(ltack,"⊣") A(rtack,"⊒") A(indexOf,"⊐") A(memberOf,"∊") A(find,"⍷") A(count,"βŠ’") \ -/* sfns.c*/A(shape,"β₯Š") A(pick,"βŠ‘") A(pair,"{𝕨‿𝕩}") A(select,"⊏") A(slash,"/") A(join,"∾") A(couple,"≍") A(shiftb,"Β»") A(shifta,"Β«") A(take,"↑") A(drop,"↓") A(group,"βŠ”") A(reverse,"⌽") \ +/* sfns.c*/A(shape,"β₯Š") A(pick,"βŠ‘") A(pair,"β‹ˆ") A(select,"⊏") A(slash,"/") A(join,"∾") A(couple,"≍") A(shiftb,"Β»") A(shifta,"Β«") A(take,"↑") A(drop,"↓") A(group,"βŠ”") A(reverse,"⌽") \ /* sort.c*/A(gradeUp,"⍋") A(gradeDown,"⍒") \ /* everything before the definition of β€’Type is defined to be pure, and everything after is not */ \ /* 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") \ diff --git a/src/builtins/sfns.c b/src/builtins/sfns.c index f7b711cf..9591342c 100644 --- a/src/builtins/sfns.c +++ b/src/builtins/sfns.c @@ -128,20 +128,20 @@ B shape_c2(B t, B w, B x) { } if (bad && !good) thrM("β₯Š: 𝕨 too large"); if (unkPos!=-1) { - if (unkInd!=52 & unkInd!=6 & unkInd!=30 & unkInd!=25) thrM("β₯Š: 𝕨 must consist of natural numbers or ∘ ⌊ ⌽ ↑"); + if (unkInd!=53 & unkInd!=6 & unkInd!=31 & unkInd!=26) thrM("β₯Š: 𝕨 must consist of natural numbers or ∘ ⌊ ⌽ ↑"); if (nia==0) thrM("β₯Š: Can't compute axis when the rest of the shape is empty"); i64 div = xia/nia; i64 mod = xia%nia; usz item; bool fill = false; - if (unkInd == 52) { + if (unkInd == 53) { if (mod!=0) thrM("β₯Š: Shape must be exact when reshaping with ∘"); item = div; } else if (unkInd == 6) { item = div; - } else if (unkInd == 30) { + } else if (unkInd == 31) { item = mod? div+1 : div; - } else if (unkInd == 25) { + } else if (unkInd == 26) { item = mod? div+1 : div; fill = true; } else UD; diff --git a/src/builtins/sysfn.c b/src/builtins/sysfn.c index a0e74488..8b1fc822 100644 --- a/src/builtins/sysfn.c +++ b/src/builtins/sysfn.c @@ -63,7 +63,7 @@ B glyph_c1(B t, B x) { x = rtWrap_unwrap(x); #endif if (isPrim(x)) { - B r = m_c32(U"+-Γ—Γ·β‹†βˆšβŒŠβŒˆ|¬∧∨<>β‰ =≀β‰₯β‰‘β‰’βŠ£βŠ’β₯ŠβˆΎβ‰β†‘β†“β†•Β«Β»βŒ½β‰/β‹β’βŠβŠ‘βŠβŠ’βˆŠβ·βŠ”!Λ™ΛœΛ˜Β¨βŒœβΌΒ΄Λ`βˆ˜β—‹βŠΈβŸœβŒΎβŠ˜β—ΆβŽ‰βš‡βŸβŽŠ"[v(x)->flags-1]); + B r = m_c32(U"+-Γ—Γ·β‹†βˆšβŒŠβŒˆ|¬∧∨<>β‰ =≀β‰₯β‰‘β‰’βŠ£βŠ’β₯ŠβˆΎβ‰β‹ˆβ†‘β†“β†•Β«Β»βŒ½β‰/β‹β’βŠβŠ‘βŠβŠ’βˆŠβ·βŠ”!Λ™ΛœΛ˜Β¨βŒœβΌΒ΄Λ`βˆ˜β—‹βŠΈβŸœβŒΎβŠ˜β—ΆβŽ‰βš‡βŸβŽŠ"[v(x)->flags-1]); dec(x); return r; } diff --git a/src/core/derv.c b/src/core/derv.c index 4fa0b334..40d58f01 100644 --- a/src/core/derv.c +++ b/src/core/derv.c @@ -67,7 +67,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==44) return inc(d->f); + if (v(m1)->type==t_md1BI && v(m1)->flags==45) return inc(d->f); } return bi_N; } diff --git a/src/h.h b/src/h.h index 898d668a..f07ba5d2 100644 --- a/src/h.h +++ b/src/h.h @@ -71,7 +71,7 @@ #undef CATCH_ERRORS #endif -#define rtLen 63 +#define rtLen 64 #if CATCH_ERRORS #define PROPER_FILLS (EACH_FILLS&SFNS_FILLS) diff --git a/src/load.c b/src/load.c index 362bd77a..87d261a7 100644 --- a/src/load.c +++ b/src/load.c @@ -224,22 +224,23 @@ 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_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[] = { /* +-Γ—Γ·β‹†βˆšβŒŠβŒˆ|Β¬ */ 1,1,1,1,1,1,1,1,1,1, /* ∧∨<>β‰ =≀β‰₯≑≒ */ 1,1,1,1,1,1,1,1,1,1, - /* ⊣⊒β₯ŠβˆΎβ‰β†‘↓↕«» */ 1,1,1,1,1,1,1,1,1,1, - /* βŒ½β‰/β‹β’βŠβŠ‘βŠβŠ’βˆŠ */ 1,0,1,1,1,1,1,1,1,1, - /* β·βŠ”!Λ™ΛœΛ˜Β¨βŒœβΌΒ΄ */ 1,1,1,1,1,1,1,1,0,1, - /* ˝`βˆ˜β—‹βŠΈβŸœβŒΎβŠ˜β—ΆβŽ‰ */ 0,1,1,1,1,1,1,1,1,0, - /* βš‡βŸβŽŠ */ 0,1,1 + /* ⊣⊒β₯ŠβˆΎβ‰β‹ˆβ†‘↓↕« */ 1,1,1,1,1,0,1,1,1,1, + /* Β»βŒ½β‰/β‹β’βŠβŠ‘βŠβŠ’ */ 1,1,0,1,1,1,1,1,1,1, + /* βˆŠβ·βŠ”!Λ™ΛœΛ˜Β¨βŒœβΌ */ 1,1,1,1,1,1,1,1,1,0, + /* ´˝`βˆ˜β—‹βŠΈβŸœβŒΎβŠ˜β—Ά */ 1,0,1,1,1,1,1,1,1,1, + /* βŽ‰βš‡βŸβŽŠ */ 0,0,1,1 }; assert(sizeof(fruntime)/sizeof(B) == rtLen); for (u64 i = 0; i < rtLen; i++) inc(fruntime[i]); @@ -248,7 +249,7 @@ void load_init() { // very last init function #ifndef NO_RT B provide[] = {bi_type,bi_fill,bi_log,bi_grLen,bi_grOrd,bi_asrt,bi_add,bi_sub,bi_mul,bi_div,bi_pow,bi_floor,bi_eq,bi_le,bi_fne,bi_shape,bi_pick,bi_ud,bi_tbl,bi_scan,bi_fillBy,bi_val,bi_catch}; #ifndef ALL_R0 - B runtime_0[] = {bi_floor,bi_ceil,bi_stile,bi_lt,bi_gt,bi_ne,bi_ge,bi_rtack,bi_ltack,bi_join,bi_take,bi_drop,bi_select,bi_const,bi_swap,bi_each,bi_fold,bi_atop,bi_over,bi_before,bi_after,bi_cond,bi_repeat}; + B runtime_0[] = {bi_floor,bi_ceil,bi_stile,bi_lt,bi_gt,bi_ne,bi_ge,bi_rtack,bi_ltack,bi_join,bi_pair,bi_take,bi_drop,bi_select,bi_const,bi_swap,bi_each,bi_fold,bi_atop,bi_over,bi_before,bi_after,bi_cond,bi_repeat}; #else Block* runtime0_b = load_compImport( #include "gen/runtime0" @@ -274,22 +275,22 @@ void load_init() { // very last init function HArr_p runtimeH = m_harrUc(rtObjRaw); SGet(rtObjRaw) - rt_undo = Get(rtObjRaw, 48); gc_add(rt_undo); - rt_select = Get(rtObjRaw, 35); gc_add(rt_select); - rt_slash = Get(rtObjRaw, 32); gc_add(rt_slash); + 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, 27); gc_add(rt_ud); - rt_pick = Get(rtObjRaw, 36); gc_add(rt_pick); - rt_take = Get(rtObjRaw, 25); gc_add(rt_take); - rt_drop = Get(rtObjRaw, 26); gc_add(rt_drop); - rt_group = Get(rtObjRaw, 41); gc_add(rt_group); - rt_under = Get(rtObjRaw, 56); gc_add(rt_under); - rt_reverse = Get(rtObjRaw, 30); gc_add(rt_reverse); - rt_indexOf = Get(rtObjRaw, 37); gc_add(rt_indexOf); - rt_count = Get(rtObjRaw, 38); gc_add(rt_count); - rt_memberOf= Get(rtObjRaw, 39); gc_add(rt_memberOf); - rt_find = Get(rtObjRaw, 40); gc_add(rt_find); - rt_cell = Get(rtObjRaw, 45); gc_add(rt_cell); + 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); for (usz i = 0; i < rtLen; i++) { #ifdef RT_WRAP @@ -342,12 +343,12 @@ void load_init() { // very last init function print_allocStats(); exit(0); #else // use compiler - B prevAsrt = runtime[42]; - runtime[42] = bi_casrt; // horrible but GC is off so it's fiiiiiine + B prevAsrt = runtime[43]; + runtime[43] = bi_casrt; // horrible but GC is off so it's fiiiiiine Block* comp_b = load_compImport( #include "gen/compiler" ); - runtime[42] = prevAsrt; + runtime[43] = prevAsrt; load_comp = m_funBlock(comp_b, 0); ptr_dec(comp_b); gc_add(load_comp);