Skip to content

Commit

Permalink
fix additional tests (#2293)
Browse files Browse the repository at this point in the history
  • Loading branch information
mthom committed Jan 13, 2024
1 parent 60d34be commit dde0371
Showing 1 changed file with 20 additions and 27 deletions.
47 changes: 20 additions & 27 deletions src/machine/unify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -229,39 +229,32 @@ pub(crate) trait Unifier: DerefMut<Target = MachineState> {
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;
}
Expand Down

0 comments on commit dde0371

Please sign in to comment.