From e34bb583a19c42e5525278600d3f37988c1479b4 Mon Sep 17 00:00:00 2001 From: b1ek Date: Wed, 23 Aug 2023 16:34:20 +1000 Subject: [PATCH] skip the loop if current is 0 --- src/lib.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) 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 }