Regex.emit: def of bend-kit-regex@0.8.0.0 Import: import bend-kit-regex@0.8.0.0/regex.bend as Regex Lines 642-663 of bend-kit-regex@0.8.0.0/regex.bend: https://jend.leeeet.dev/read.txt?path=bend-kit-regex@0.8.0.0/regex.bend&start_line=642&end_line=663 import Base # The instructions of n, placed at pc, in front of rest. ISplit tries x first. def emit(n: Node, +pc: U32, rest: List<&2, Inst>) -> List<&2, Inst>: match n: case NEmpty{}: rest case NSet{neg, items}: ISet{neg, items} <> rest case NAssert{k}: IAssert{k} <> rest case NCat{+a, b}: emit(a, pc, emit(b, (pc + size(a) : U32), rest)) case NAlt{+a, +b}: +j = (pc + 1 + size(a) : U32) ISplit{(pc + 1 : U32), (j + 1 : U32)} <> emit(a, (pc + 1 : U32), IJmp{(j + 1 + size(b) : U32)} <> emit(b, (j + 1 : U32), rest)) case NPlus{+g, +a}: +out = (pc + 1 + size(a) : U32) emit(a, pc, ISplit{Bool.pick(U32, g, pc, out), Bool.pick(U32, g, out, pc)} <> rest) case NQuest{+g, +a}: +out = (pc + 1 + size(a) : U32) ISplit{Bool.pick(U32, g, (pc + 1 : U32), out), Bool.pick(U32, g, out, (pc + 1 : U32))} <> emit(a, (pc + 1 : U32), rest) case NGroup{+i, a}: ISave{(2 * i : U32)} <> emit(a, (pc + 1 : U32), ISave{(2 * i + 1 : U32)} <> rest) Uses (8): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool.pick https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32.add https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32.mul https://jend.leeeet.dev/definition.txt?path=bend-kit-regex@0.8.0.0/regex.bend&name=Inst https://jend.leeeet.dev/definition.txt?path=bend-kit-regex@0.8.0.0/regex.bend&name=Node https://jend.leeeet.dev/definition.txt?path=bend-kit-regex@0.8.0.0/regex.bend&name=size