From dde03718e17ed9240191a47f74cfc23bbad56b4a Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 12 Jan 2024 22:01:01 -0700 Subject: [PATCH] fix additional tests (#2293) --- src/machine/unify.rs | 47 +++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/src/machine/unify.rs b/src/machine/unify.rs index 6415c8f1..91845887 100644 --- a/src/machine/unify.rs +++ b/src/machine/unify.rs @@ -229,39 +229,32 @@ pub(crate) trait Unifier: DerefMut { break 'outer; } } - (HeapCellValueTag::CStr, cstr) => { - let cstr_str = cstr.as_str(); - let mut cstr_chars_iter = cstr_str.chars(); - let mut char_len = 0; - - while let Some(c) = chars_iter.next() { - if Some(c) != cstr_chars_iter.next() { - machine_st.fail = true; - break 'outer; - } - - char_len += c.len_utf8(); - } + (HeapCellValueTag::CStr | HeapCellValueTag::PStrLoc) => { + machine_st.pdl.push(focus); - let chars_iter_focus = chars_iter.iter.focus; + match chars_iter.item.unwrap() { + PStrIteratee::Char(focus, _) | + PStrIteratee::PStrSegment(focus, _, 0) => { + machine_st.pdl.push(machine_st.heap[focus]); - machine_st.heap.pop(); - machine_st.heap.pop(); + machine_st.heap.pop(); + machine_st.heap.pop(); + } + PStrIteratee::PStrSegment(focus, _, n) => { + let segment = machine_st.heap[focus]; - let pstr_loc = if cstr_str.len() > char_len { - let h = machine_st.heap.len(); + machine_st.heap.pop(); + machine_st.heap.pop(); - machine_st.heap.push(string_as_cstr_cell!(cstr)); - machine_st.heap.push(pstr_offset_as_cell!(h)); - machine_st.heap.push(fixnum_as_cell!(Fixnum::build_with(char_len as i64))); + let h = machine_st.heap.len(); - pstr_loc_as_cell!(h+1) - } else { - empty_list_as_cell!() - }; + machine_st.pdl.push(pstr_loc_as_cell!(h+1)); - machine_st.pdl.push(chars_iter_focus); - machine_st.pdl.push(pstr_loc); + machine_st.heap.push(segment); + machine_st.heap.push(pstr_offset_as_cell!(h)); + machine_st.heap.push(fixnum_as_cell!(Fixnum::build_with(n as i64))); + } + } return; } -- 2.54.0