run.ha (564B)
1 use fmt; 2 3 export fn run(b: *block, arr: *[]u8, ptr: i32 = 0) void = { 4 for (let inst .. b) { 5 match (inst) { 6 case let nested: *block => 7 for (arr[ptr] != 0) 8 run(nested, arr, ptr); 9 case let c: u8 => 10 switch (c: rune) { 11 case '+' => arr[ptr] += 1; 12 case '-' => arr[ptr] -= 1; 13 case '>' => 14 ptr += 1; 15 if (ptr > (len(arr) - 1): i32) ptr = 0; 16 case '<' => 17 ptr -= 1; 18 if (ptr < 0) ptr = (len(arr) - 1): i32; 19 case ',' => arr[ptr] = 0; // TODO stdin 20 case '.' => fmt::print(arr[ptr]: rune)!; 21 case => abort(); 22 }; 23 }; 24 }; 25 };