From cd89d71e0c1d38833ccccf4ddd216ca36132300c Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 8 Jan 2024 17:36:41 -0700 Subject: [PATCH] check for PStr in eager stackful preorder iterator before adding tail of PStrOffset (#2272) --- src/heap_iter.rs | 11 ++++++----- src/machine/system_calls.rs | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/heap_iter.rs b/src/heap_iter.rs index 4713aa63..9c9d417c 100644 --- a/src/heap_iter.rs +++ b/src/heap_iter.rs @@ -108,7 +108,7 @@ impl<'a> EagerStackfulPreOrderHeapIter<'a> { let var_value = self.heap[h]; self.heap[h].set_mark_bit(self.mark_phase); - if !(self.heap[h].is_var() && self.heap[h].get_value() as usize == h) { + if var_value.get_mark_bit() || !(self.heap[h].is_var() && self.heap[h].get_value() as usize == h) { self.iter_stack.push(var_value); continue; } @@ -125,12 +125,13 @@ impl<'a> EagerStackfulPreOrderHeapIter<'a> { continue; } - let value = self.heap[h+1]; - self.heap[h].set_mark_bit(self.mark_phase); - self.heap[h+1].set_mark_bit(self.mark_phase); - self.iter_stack.push(value); + if self.heap[h].get_tag() == HeapCellValueTag::PStr { + let value = self.heap[h+1]; + self.heap[h+1].set_mark_bit(self.mark_phase); + self.iter_stack.push(value); + } } _ => { } diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index dbcbacd0..f6c8388e 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -578,6 +578,7 @@ impl MachineState { ) } + #[inline] pub(crate) fn variable_set( &mut self, -- 2.54.0