bf

a simple toy bf compiler in hare, made for teaching!
Log | Files | Refs

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 };