clean up cc.bqn, specialize small arrays
This commit is contained in:
parent
6598ccbc28
commit
64b3a4ae6a
33
cc.bqn
33
cc.bqn
@ -7,9 +7,12 @@ return ← 1≡⊑args
|
|||||||
args↓˜↩ return
|
args↓˜↩ return
|
||||||
path←(⊑args)∾"/src/"
|
path←(⊑args)∾"/src/"
|
||||||
args↓˜↩1
|
args↓˜↩1
|
||||||
L0 ← (0<≠)◶⟨"",1↓·∾","⊸∾¨⟩
|
Import ← {𝕨•Import path∾𝕩}
|
||||||
L ← {"m_caB(" ∾(•Repr≠𝕩)∾",(B[]){" ∾(L0𝕩)∾"})"}
|
FChars ← {𝕨•FChars path∾𝕩}
|
||||||
LI ← {"m_cai32("∾(•Repr≠𝕩)∾",(i32[]){"∾(L0𝕩)∾"})"}
|
FLines ← {𝕨•FLines path∾𝕩}
|
||||||
|
|
||||||
|
|
||||||
|
F ← •Repr # Format number
|
||||||
# Escape the special characters that appear in BQN sources.
|
# Escape the special characters that appear in BQN sources.
|
||||||
Esc←{
|
Esc←{
|
||||||
in ← (@+0‿9‿10‿13)∾"'""" # Null, Tab, LF, CR, and quotes
|
in ← (@+0‿9‿10‿13)∾"'""" # Null, Tab, LF, CR, and quotes
|
||||||
@ -18,23 +21,27 @@ Esc←{
|
|||||||
𝕩 ↩ i ⊏⟜out⌾((i<≠out)⊸/) 𝕩 # Replace
|
𝕩 ↩ i ⊏⟜out⌾((i<≠out)⊸/) 𝕩 # Replace
|
||||||
∾(i<≠in) /⟜"\"⊸∾¨ 𝕩 # Insert \
|
∾(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("∾")"∾˜s∾F∘| ⋄ "m_f64("∾s∾"1.0/0.0)"⟩𝕩} # Format number
|
||||||
|
OAny ← ≡◶⟨@⊸≤◶ONum‿OChr, OStr, ⊑⟩
|
||||||
|
|
||||||
|
List ← (0<≠)◶⟨"",1↓·∾","⊸∾¨⟩
|
||||||
|
ShortList ← {"m_lv"∾𝕨∾"_"∾(F≠𝕩)∾"("∾(List𝕩)∾")"}
|
||||||
|
LongList ← {"m_ca"∾𝕨∾"("∾(F≠𝕩)∾",("∾𝕨∾"[]){"∾(List𝕩)∾"})"}
|
||||||
|
MakeList ← (≠∘⊢>4˙)◶ShortList‿LongList
|
||||||
|
Li ← {"i32" MakeList F¨𝕩}
|
||||||
|
_Lo ← {"B" MakeList 𝔽¨𝕩}
|
||||||
|
|
||||||
Import ← {𝕨•Import path∾𝕩}
|
|
||||||
FChars ← {𝕨•FChars path∾𝕩}
|
|
||||||
FLines ← {𝕨•FLines path∾𝕩}
|
|
||||||
|
|
||||||
glyphs ← Import "glyphs.bqn"
|
glyphs ← Import "glyphs.bqn"
|
||||||
_getComp ← { (4+2×useInd)↑ <∘⊢∾˜ 5↑ (𝕗 Import "c.bqn"){𝔽} }
|
_getComp ← { (4+2×useInd)↑ <∘⊢∾˜ 5↑ (𝕗 Import "c.bqn"){𝔽} }
|
||||||
useInd ← "-i"≡⊑args ⋄ args↓˜↩useInd
|
useInd ← "-i"≡⊑args ⋄ args↓˜↩useInd
|
||||||
Comp ← ((<"inc(runtime["∾•Repr∾"])"˙)¨↕62) glyphs _getComp ⊢
|
Comp ← ((<"inc(runtime["∾F∾"])"˙)¨↕62) glyphs _getComp ⊢
|
||||||
J ← ∾∾⟜(@+10)¨
|
J ← ∾∾⟜(@+10)¨
|
||||||
Fconst ← ≡◶⟨@⊸≤◶Num‿Char, 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 ← 1⊸Fout
|
Frun ← 1⊸Fout
|
||||||
Long ← {¯2↓∾𝕩∾¨<","∾@+10}
|
Long ← {¯2↓∾𝕩∾¨<","∾@+10}
|
||||||
LFC ← Long∘Fout∘Comp
|
LFC ← Long∘Fout∘Comp
|
||||||
|
|||||||
12
src/load.c
12
src/load.c
@ -186,6 +186,18 @@ void bqn_setComp(B comp) { // consumes; doesn't unload old comp, but whatever
|
|||||||
gc_add(load_comp);
|
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
|
void load_init() { // very last init function
|
||||||
comp_currPath = bi_N;
|
comp_currPath = bi_N;
|
||||||
comp_currArgs = bi_N;
|
comp_currArgs = bi_N;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user