dereference variables when looking for string terminators

This commit is contained in:
Mark Thom
2021-12-10 17:16:15 -07:00
parent b24df6e195
commit 3974b6e6cd

View File

@@ -344,6 +344,8 @@ impl HeapCellValue {
#[inline]
pub fn is_string_terminator(mut self, heap: &[HeapCellValue]) -> bool {
use crate::machine::heap::*;
loop {
return read_heap_cell!(self,
(HeapCellValueTag::Atom, (name, arity)) => {
@@ -356,6 +358,16 @@ impl HeapCellValue {
self = heap[h];
continue;
}
(HeapCellValueTag::AttrVar | HeapCellValueTag::Var, h) => {
let cell = heap_bound_store(heap, heap_bound_deref(heap, heap[h]));
if cell.is_var() {
return false;
}
self = cell;
continue;
}
(HeapCellValueTag::PStrOffset, pstr_offset) => {
heap[pstr_offset].get_tag() == HeapCellValueTag::CStr
}