#!/usr/bin/env bqn
# Process BQN runtime
rtt ← ('0'-˜⊑)⍟= ⊑ •args∾2 # Runtime type: 0, 1, or all
rtn ← 2⊸≤◶⥊‿↕ rtt # File numbers included
glyphs ← •Import "glyphs.bqn"
# Provided values, to be passed in through the constants array
alias‿def ← (⊑¨ ⋈ 1⊸↓¨) ⟨"&Type","∩Fill","⍣Log",
"$GroupLen","%GroupOrd","⍝_fillBy_"⟩
keep ← "!+-×÷⋆⌊=≤≢⥊⊑↕⌜`⊘⎊"
chrext ← glyphs ∾¨ ((+´·∧`'_'=0‿¯1⊸⊏)¨def) ⊔ alias
Typ ← chrext⊸((+`≠¨)∘⊣⍋∾⊸⊐)
in0‿out0 ← ⟨"∩⍝+-×⌊=≤≢⥊⊑↕⌜⊘", "⌊⌈|<>≠≥⊢⊣∾⋈↑↓⊏˙˜¨´∘○⊸⟜◶⍟"⟩
in2 ← alias∾keep
out2 ← ∾glyphs
in‿out ← rtt ⊑ ⟨in0,out0⟩‿⟨⍷in2∾out0,out2⟩‿⟨in2,out2⟩
inputs ⇐ ⟨out0, (⍋Typ)⊸⊏in2⟩
need ⇐ Typ⊸⊔ in
GetRepls ← { c‿n←𝕩 ⋄ ⟨c,c⊣⌾((c∊⥊¨in)⊸/)n⟩∾¨⟨def,⥊¨alias⟩ }
⟨E_proc⟩ ← glyphs‿GetRepls •Import "pp.bqn"
rslt ← "⟨"∾"⟩"«∾","⊸∾¨out # Output all primitives
raw ← (•FChars "r"∾'0'⊸+∾".bqn"˙)¨ rtn
{𝕤⋄ raw∾˜↩⟨"glyphs←"""∾out∾"%"""⟩ ⋄ rslt∾˜↩"{PrimInd↩⊑𝕩⊐<⋄𝕩‿SetPrims‿SetInv}"}⍟⊢ ∨´1=rtn
raw ∾↩ ⟨rslt⟩
src ⇐ E_proc ∾∾⟜(@+10)¨ raw