import Builtins, CEI, Sys func sb(dsl_block, src_infos): Sys::println(src_infos) instrs := [] // A sequence of Converge instructions // Iterate over each line in the DSL block for line := dsl_block.split("\n").iter(): sp := line.stripped().split(" ") // Split the line into a list if sp[0] == "PUSH": ast_int := CEI::iint(Builtins::Int.new(sp[1])) instrs.append([| &stack.append(${ast_int}) |]) elif sp[0] == "ADD": instrs.extend([| rhs := &stack.pop() lhs := &stack.pop() &stack.append(lhs + rhs) |]) ast := [| func (): &stack := [] $c{instrs} return &stack[-1] |] Sys::println(CEI::pp_itree(ast)) return ast f := $<>: PUSH 2 PUSH ADD func main(): Sys::println(f())