summaryrefslogtreecommitdiff
path: root/exec.ha
blob: 3950bac045a27dc6c48dcdd24f62c55363575a12 (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
25
26
27
28
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 + 1])!;
		case ',' =>
			io::read(os::stdin, bf.mem[bf.ptr .. bf.ptr + 1])!;
		case => continue;
		};
	};
};