summaryrefslogtreecommitdiff
path: root/exec.ha
blob: 8b73c8b887ba1fe8d4547cd867d4c1c7979e044a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use io;
use os;

fn exec(bf: *Brainfuck, b: []const u8) void = {
	for (let i = 0z; i < len(b); i += 1) {
		switch (b[i]) {
		case '+' => bf.mem[bf.ptr] += 1;
		case '-' => bf.mem[bf.ptr] -= 1;
		case '<' =>
			if (bf.ptr > 0)
				bf.ptr -= 1
			else
				bf.ptr = mem_size - 1;
		case '>' =>
			if (bf.ptr < bf.ptr - 1)
				bf.ptr += 1
			else
				bf.ptr = 0;
		case '.' => io::write(os::stdout, bf.mem[bf.ptr..bf.ptr])!;
		case ',' => io::read(os::stdin, bf.mem[bf.ptr..bf.ptr])!;
		case => continue;
		};
	};
};