dereference variables when looking for string terminators
@@ -344,6 +344,8 @@ pub fn build_with(tag: HeapCellValueTag, value: u64) -> Self {
#[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 @@ pub fn is_string_terminator(mut self, heap: &[HeapCellValue]) -> bool {
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
}
