commit e9bfcfebc59533b20754cf50764babf548e8e88d
parent ec40277f547e2695d542b6e1134b4e238d81718e
Author: Walther Chen <walther.chen@gmail.com>
Date:   Sat, 12 Nov 2022 15:23:10 -0500

opt2: fix repeats for stdin/stdout

Diffstat:
Msrc/opt2.zig | 16+++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/opt2.zig b/src/opt2.zig @@ -215,7 +215,7 @@ test "opt2: parse basic 1" { // checking for missing `-` // Also for `[` not at beginning, and `]` at end - const src = ">[<<--]"; + const src = ">[--]"; const program = try parse(src, std.testing.allocator); defer program.deinit(); try std.testing.expectEqualSlices( @@ -264,8 +264,18 @@ fn interpret(program: Program, memory: []u8, rdr: anytype, wtr: anytype, alloc: .dec_ptr => dataptr -= op.value, .inc_data => memory[dataptr] += @intCast(u8, op.value), .dec_data => memory[dataptr] -= @intCast(u8, op.value), - .read_stdin => memory[dataptr] = try rdr.readByte(), - .write_stdout => try wtr.writeByte(memory[dataptr]), + .read_stdin => { + var i: usize = 0; + while (i < op.value) : (i += 1) { + memory[dataptr] = try rdr.readByte(); + } + }, + .write_stdout => { + var i: usize = 0; + while (i < op.value) : (i += 1) { + try wtr.writeByte(memory[dataptr]); + } + }, // jumps to next matching ']' if curr_data == 0 .jump_if_data_zero => if (memory[dataptr] == 0) { pc = op.value;