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
|
||||
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 ← (@+0‿9‿10‿13)∾"'""" # 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("∾")"∾˜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"
|
||||
_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 ← ≡◶⟨@⊸≤◶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
|
||||
Long ← {¯2↓∾𝕩∾¨<","∾@+10}
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user