clean up cc.bqn, specialize small arrays

This commit is contained in:
dzaima 2021-07-22 19:46:50 +03:00
parent 6598ccbc28
commit 64b3a4ae6a
2 changed files with 32 additions and 13 deletions

33
cc.bqn
View File

@ -7,9 +7,12 @@ return ← 1≡⊑args
args˜ return
path(args)"/src/"
args˜1
L0 (0<)"",1·","¨
L {"m_caB(" (•Repr𝕩)",(B[]){" (L0𝕩)"})"}
LI {"m_cai32("(•Repr𝕩)",(i32[]){"(L0𝕩)"})"}
Import {𝕨•Import path𝕩}
FChars {𝕨•FChars path𝕩}
FLines {𝕨•FLines path𝕩}
F •Repr # Format number
# Escape the special characters that appear in BQN sources.
Esc{
in (@+091013)"'""" # Null, Tab, LF, CR, and quotes
@ -18,23 +21,27 @@ Esc←{
𝕩 i out((i<out)/) 𝕩 # Replace
(i<in) /"\"¨ 𝕩 # Insert \
}
Str "m_str32(U"""Esc""")"˙ # A BQN string
Char {"m_c32(U'"(Esc𝕩)"')"} # A BQN character
Num {s"-"/˜𝕩<0 =|"m_f64("")"˜s•Repr| "m_f64("s"1.0/0.0)"𝕩} # Format number
F •Repr # Format number
OStr "m_str32(U"""Esc""")"˙ # A BQN string
OChr {"m_c32(U'"(Esc𝕩)"')"} # A BQN character
ONum {s"-"/˜𝕩<0 =|"m_f64("")"˜sF| "m_f64("s"1.0/0.0)"𝕩} # Format number
OAny @ONumOChr, OStr,
List (0<)"",1·","¨
ShortList {"m_lv"𝕨"_"(F𝕩)"("(List𝕩)")"}
LongList {"m_ca"𝕨"("(F𝕩)",("𝕨"[]){"(List𝕩)"})"}
MakeList (>4˙)ShortListLongList
Li {"i32" MakeList F¨𝕩}
_Lo {"B" MakeList 𝔽¨𝕩}
Import {𝕨•Import path𝕩}
FChars {𝕨•FChars path𝕩}
FLines {𝕨•FLines path𝕩}
glyphs Import "glyphs.bqn"
_getComp { (4+2×useInd) <˜ 5 (𝕗 Import "c.bqn"){𝔽} }
useInd "-i"args args˜useInd
Comp ((<"inc(runtime["•Repr"])"˙)¨62) glyphs _getComp
Comp ((<"inc(runtime["F"])"˙)¨62) glyphs _getComp
J (@+10)¨
Fconst @NumChar, Str,
Fout {((𝕩)LI F¨ L Fconst¨ L (L =Num,L(LI F¨)¨¨)¨ L (LI ·F¨ 2)¨ L (LI F¨)¨ Str) {𝕎𝕩}¨ 𝕩}
Fout {((𝕩)Li OAny _Lo =ONum,Li _Lo _Lo _Lo (Li 2) _Lo Li _Lo OStr) {𝕎𝕩}¨ 𝕩}
Frun 1Fout
Long {¯2𝕩¨<","@+10}
LFC LongFoutComp

View File

@ -186,6 +186,18 @@ void bqn_setComp(B comp) { // consumes; doesn't unload old comp, but whatever
gc_add(load_comp);
}
static NOINLINE B m_lvB_0( ) { return emptyHVec(); }
static NOINLINE B m_lvB_1(B a ) { return m_v1(a); }
static NOINLINE B m_lvB_2(B a, B b ) { return m_v2(a,b); }
static NOINLINE B m_lvB_3(B a, B b, B c ) { return m_v3(a,b,c); }
static NOINLINE B m_lvB_4(B a, B b, B c, B d) { return m_v4(a,b,c,d); }
static NOINLINE B m_lvi32_0( ) { return emptyIVec(); }
static NOINLINE B m_lvi32_1(i32 a ) { i32* rp; B r = m_i32arrv(&rp,1); rp[0]=a; return r; }
static NOINLINE B m_lvi32_2(i32 a, i32 b ) { i32* rp; B r = m_i32arrv(&rp,2); rp[0]=a; rp[1]=b; return r; }
static NOINLINE B m_lvi32_3(i32 a, i32 b, i32 c ) { i32* rp; B r = m_i32arrv(&rp,3); rp[0]=a; rp[1]=b; rp[2]=c; return r; }
static NOINLINE B m_lvi32_4(i32 a, i32 b, i32 c, i32 d) { i32* rp; B r = m_i32arrv(&rp,4); rp[0]=a; rp[1]=b; rp[2]=c; rp[3]=d; return r; }
void load_init() { // very last init function
comp_currPath = bi_N;
comp_currArgs = bi_N;