diff --git a/src/lib.rs b/src/lib.rs index dc7d132..d002b19 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -131,6 +131,28 @@ pub fn eval_mem<'a>(bf_str: &&str, mem: &'a mut [u8], pointer: &mut usize) -> Re continue } if char == '[' { + + // if current is 0 + if mem[*pointer] == 0 { + // skip the loop completely + let mut p = pos.clone(); + loop { + if p == progsize { + return Err( + BrainFuckError::new(format!("Unmatched '[' ({})", pos), mem) + ); + } + + if chars[p] == ']' { + pos = p + 1; + break; + } + + p += 1; + } + continue + } + loop_stack.push(pos); continue }