func main[] : I64 let src: String = "++++++++[>+>++++<<-]>++>>+<[-[>>+<<-]+>>]>+[-<<<[->[+[-]+>++>>>-<<]<[<]>>++++++[<<+++++>>-]+<<++.[-]<<]>.>+[>>]>+]" let src_len: I64 = strlen(src) let i: I64 = 0 let memory: Ptr = calloc(1, 30000) let p: I64 = 0 while i < src_len let op: U8 = String.nth(src, i) if op == '>' p = p + 1 else if op == '<' p = p - 1 else if op == '+' String.set(memory, p, String.nth(memory, p)+1) else if op == '-' String.set(memory, p, String.nth(memory, p)-1) else if op == '.' printf("%c", String.nth(memory, p)) else if op == ',' String.set(memory, p, getchar()) else if op == '[' if !String.nth(memory, p) i = i + 1 let opened: I64 = 0 while i < src_len && !(String.nth(src, i) == ']' && !opened) if String.nth(src, i) == '[' opened = opened + 1 else if String.nth(src, i) == ']' opened = opened - 1 i = i + 1 else if op == ']' if String.nth(memory, p) i = i - 1 let closed: I64 = 0 while i >= 0 && !(String.nth(src, i) == '[' && !closed) if String.nth(src, i) == ']' closed = closed + 1 else if String.nth(src, i) == '[' closed = closed - 1 i = i - 1 i = i + 1