remove pstr_vec
This commit is contained in:
@@ -19,9 +19,17 @@ pub struct HeapPStrIter<'a> {
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum PStrCmpResult<'a> {
|
||||
ListMatch { list_loc: usize },
|
||||
CompletePStrMatch { chars_matched: usize, pstr_loc: usize },
|
||||
PartialPStrMatch { string: &'a str, var_loc: usize },
|
||||
ListMatch {
|
||||
list_loc: usize,
|
||||
},
|
||||
CompletePStrMatch {
|
||||
chars_matched: usize,
|
||||
pstr_loc: usize,
|
||||
},
|
||||
PartialPStrMatch {
|
||||
string: &'a str,
|
||||
var_loc: usize,
|
||||
},
|
||||
}
|
||||
|
||||
struct PStrIterStep {
|
||||
@@ -81,7 +89,7 @@ impl<'a> HeapPStrIter<'a> {
|
||||
if s.is_empty() {
|
||||
return Some(PStrCmpResult::CompletePStrMatch { chars_matched, pstr_loc: h });
|
||||
} else {
|
||||
let next_hare = Heap::neighboring_cell_offset(h + bytes_matched);
|
||||
let next_hare = Heap::pstr_tail_idx(h + bytes_matched);
|
||||
curr_hare = next_hare;
|
||||
}
|
||||
}
|
||||
@@ -179,11 +187,11 @@ impl<'a> HeapPStrIter<'a> {
|
||||
loop {
|
||||
read_heap_cell!(self.heap[curr_hare],
|
||||
(HeapCellValueTag::PStrLoc, h) => {
|
||||
let (s, tail_loc) = self.heap.scan_slice_to_str(h);
|
||||
let HeapStringScan { string, tail_idx } = self.heap.scan_slice_to_str(h);
|
||||
|
||||
return Ok(PStrIterStep {
|
||||
iteratee: PStrIteratee::PStrSlice { slice_loc: h, slice_len: s.len() },
|
||||
next_hare: tail_loc,
|
||||
iteratee: PStrIteratee::PStrSlice { slice_loc: h, slice_len: string.len() },
|
||||
next_hare: tail_idx,
|
||||
});
|
||||
}
|
||||
(HeapCellValueTag::Lis, h) => {
|
||||
@@ -319,7 +327,10 @@ impl<'a> Iterator for PStrCharsIter<'a> {
|
||||
self.item = self.iter.next();
|
||||
return Some(value);
|
||||
}
|
||||
PStrIteratee::PStrSlice { slice_loc, slice_len } => {
|
||||
PStrIteratee::PStrSlice {
|
||||
slice_loc,
|
||||
slice_len,
|
||||
} => {
|
||||
let s = self.iter.heap.slice_to_str(slice_loc, slice_len);
|
||||
|
||||
match s.chars().next() {
|
||||
@@ -353,7 +364,10 @@ mod test {
|
||||
let mut wam = MockWAM::new();
|
||||
|
||||
let pstr_cell = wam.machine_st.allocate_pstr("abc ").unwrap();
|
||||
wam.machine_st.heap.push_cell(empty_list_as_cell!()).unwrap();
|
||||
wam.machine_st
|
||||
.heap
|
||||
.push_cell(empty_list_as_cell!())
|
||||
.unwrap();
|
||||
|
||||
// not overwriting anything! 0 is an interstitial cell
|
||||
// reserved for use by the runtime
|
||||
@@ -364,7 +378,10 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
iter.next(),
|
||||
Some(PStrIteratee::PStrSlice { slice_loc: heap_index!(1), slice_len: "abc ".len() }),
|
||||
Some(PStrIteratee::PStrSlice {
|
||||
slice_loc: heap_index!(1),
|
||||
slice_len: "abc ".len()
|
||||
}),
|
||||
);
|
||||
assert_eq!(iter.next(), None);
|
||||
assert!(!iter.is_cyclic());
|
||||
@@ -384,7 +401,10 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
iter.next(),
|
||||
Some(PStrIteratee::PStrSlice { slice_loc: heap_index!(1), slice_len: "abc ".len() })
|
||||
Some(PStrIteratee::PStrSlice {
|
||||
slice_loc: heap_index!(1),
|
||||
slice_len: "abc ".len()
|
||||
})
|
||||
);
|
||||
assert_eq!(
|
||||
iter.next(),
|
||||
@@ -407,7 +427,10 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
iter.next(),
|
||||
Some(PStrIteratee::PStrSlice { slice_loc: heap_index!(1), slice_len: "abc ".len() })
|
||||
Some(PStrIteratee::PStrSlice {
|
||||
slice_loc: heap_index!(1),
|
||||
slice_len: "abc ".len()
|
||||
})
|
||||
);
|
||||
assert_eq!(
|
||||
iter.next(),
|
||||
@@ -552,7 +575,11 @@ mod test {
|
||||
section.push_cell(heap_loc_as_cell!(h));
|
||||
});
|
||||
|
||||
unify!(wam.machine_st, pstr_cell, pstr_loc_as_cell!(heap_index!(start)));
|
||||
unify!(
|
||||
wam.machine_st,
|
||||
pstr_cell,
|
||||
pstr_loc_as_cell!(heap_index!(start))
|
||||
);
|
||||
|
||||
assert!(!wam.machine_st.fail);
|
||||
|
||||
@@ -561,7 +588,9 @@ mod test {
|
||||
"abcdef"
|
||||
);
|
||||
assert_eq!(
|
||||
wam.machine_st.heap.slice_to_str(heap_index!(start), "abc".len()),
|
||||
wam.machine_st
|
||||
.heap
|
||||
.slice_to_str(heap_index!(start), "abc".len()),
|
||||
"abc"
|
||||
);
|
||||
assert_eq!(
|
||||
@@ -587,7 +616,10 @@ mod test {
|
||||
|
||||
assert_eq!(
|
||||
iter.next(),
|
||||
Some(PStrIteratee::PStrSlice { slice_loc: 'a'.len_utf8(), slice_len: "bc".len() })
|
||||
Some(PStrIteratee::PStrSlice {
|
||||
slice_loc: 'a'.len_utf8(),
|
||||
slice_len: "bc".len()
|
||||
})
|
||||
);
|
||||
|
||||
for _ in iter {}
|
||||
@@ -609,7 +641,11 @@ mod test {
|
||||
section.push_cell(empty_list_as_cell!());
|
||||
});
|
||||
|
||||
unify!(wam.machine_st, list_loc_as_cell!(start), pstr_loc_as_cell!(0));
|
||||
unify!(
|
||||
wam.machine_st,
|
||||
list_loc_as_cell!(start),
|
||||
pstr_loc_as_cell!(0)
|
||||
);
|
||||
|
||||
assert!(!wam.machine_st.fail);
|
||||
|
||||
@@ -629,7 +665,11 @@ mod test {
|
||||
section.push_cell(empty_list_as_cell!());
|
||||
});
|
||||
|
||||
unify!(wam.machine_st, list_loc_as_cell!(start), pstr_loc_as_cell!(0));
|
||||
unify!(
|
||||
wam.machine_st,
|
||||
list_loc_as_cell!(start),
|
||||
pstr_loc_as_cell!(0)
|
||||
);
|
||||
|
||||
assert_eq!(wam.machine_st.heap[2 + start], char_as_cell!('a'));
|
||||
assert!(!wam.machine_st.fail);
|
||||
@@ -652,7 +692,11 @@ mod test {
|
||||
section.push_cell(empty_list_as_cell!());
|
||||
});
|
||||
|
||||
unify!(wam.machine_st, list_loc_as_cell!(start), pstr_loc_as_cell!(0));
|
||||
unify!(
|
||||
wam.machine_st,
|
||||
list_loc_as_cell!(start),
|
||||
pstr_loc_as_cell!(0)
|
||||
);
|
||||
|
||||
assert_eq!(wam.machine_st.heap[start], char_as_cell!('a'));
|
||||
assert_eq!(wam.machine_st.heap[4 + start], char_as_cell!('b'));
|
||||
@@ -676,7 +720,11 @@ mod test {
|
||||
section.push_cell(empty_list_as_cell!());
|
||||
});
|
||||
|
||||
unify!(wam.machine_st, list_loc_as_cell!(start), pstr_loc_as_cell!(0));
|
||||
unify!(
|
||||
wam.machine_st,
|
||||
list_loc_as_cell!(start),
|
||||
pstr_loc_as_cell!(0)
|
||||
);
|
||||
|
||||
assert_eq!(wam.machine_st.heap[2 + start], char_as_cell!('a'));
|
||||
assert!(!wam.machine_st.fail);
|
||||
@@ -699,10 +747,17 @@ mod test {
|
||||
section.push_cell(heap_loc_as_cell!(5 + start));
|
||||
});
|
||||
|
||||
unify!(wam.machine_st, list_loc_as_cell!(start), pstr_loc_as_cell!(0));
|
||||
unify!(
|
||||
wam.machine_st,
|
||||
list_loc_as_cell!(start),
|
||||
pstr_loc_as_cell!(0)
|
||||
);
|
||||
|
||||
assert_eq!(wam.machine_st.heap[2 + start], char_as_cell!('a'));
|
||||
assert_eq!(wam.machine_st.heap[5 + start], pstr_loc_as_cell!(heap_index!(0) + 3));
|
||||
assert_eq!(
|
||||
wam.machine_st.heap[5 + start],
|
||||
pstr_loc_as_cell!(heap_index!(0) + 3)
|
||||
);
|
||||
assert!(!wam.machine_st.fail);
|
||||
|
||||
// #2293, test6.
|
||||
@@ -723,7 +778,11 @@ mod test {
|
||||
section.push_cell(empty_list_as_cell!());
|
||||
});
|
||||
|
||||
unify!(wam.machine_st, list_loc_as_cell!(start), pstr_loc_as_cell!(0));
|
||||
unify!(
|
||||
wam.machine_st,
|
||||
list_loc_as_cell!(start),
|
||||
pstr_loc_as_cell!(0)
|
||||
);
|
||||
|
||||
assert_eq!(wam.machine_st.heap[start], char_as_cell!('a'));
|
||||
assert_eq!(wam.machine_st.heap[4 + start], char_as_cell!('c'));
|
||||
@@ -750,7 +809,11 @@ mod test {
|
||||
section.push_cell(empty_list_as_cell!());
|
||||
});
|
||||
|
||||
unify!(wam.machine_st, list_loc_as_cell!(start), pstr_loc_as_cell!(0));
|
||||
unify!(
|
||||
wam.machine_st,
|
||||
list_loc_as_cell!(start),
|
||||
pstr_loc_as_cell!(0)
|
||||
);
|
||||
|
||||
assert_eq!(wam.machine_st.heap[2 + start], char_as_cell!('b'));
|
||||
assert_eq!(wam.machine_st.heap[6 + start], char_as_cell!('d'));
|
||||
|
||||
Reference in New Issue
Block a user