From: Mark Thom Date: Tue, 22 Apr 2025 03:25:50 +0000 (-0700) Subject: make self.s_offset use bytes in case of HeapPtr::PStr in UnifyVoid (#2897) X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=c0804c1f6d9f674592bbce5da3fa9d8ebae3ec3d;p=scryer-prolog.git make self.s_offset use bytes in case of HeapPtr::PStr in UnifyVoid (#2897) --- diff --git a/src/machine/dispatch.rs b/src/machine/dispatch.rs index 254f9adc..94b26ad3 100644 --- a/src/machine/dispatch.rs +++ b/src/machine/dispatch.rs @@ -3072,9 +3072,19 @@ impl Machine { } &Instruction::UnifyVoid(n) => { match self.machine_st.mode { - MachineMode::Read => { - self.machine_st.s_offset += n; - } + MachineMode::Read => match &self.machine_st.s { + HeapPtr::HeapCell(_) => self.machine_st.s_offset += n, + &HeapPtr::PStr(pstr_loc) => { + debug_assert!(n <= 2); + let mut char_iter = self.machine_st.heap.char_iter(pstr_loc); + + // this only matters in the case that n == 1, but the case + // analysis isn't worth doing since the effect is benign if n == + // 2 + self.machine_st.s_offset += + char_iter.next().unwrap().len_utf8(); + } + }, MachineMode::Write => { let h = self.machine_st.heap.cell_len();