]> Repositorios git - scryer-prolog.git/commitdiff
dereference variables when looking for string terminators
authorMark Thom <[email protected]>
Sat, 11 Dec 2021 00:16:15 +0000 (17:16 -0700)
committerMark Thom <[email protected]>
Fri, 7 Jan 2022 04:44:41 +0000 (21:44 -0700)
src/types.rs

index 16805981d6a12fe54eb8dbaeabb6e5b01c94b36e..b4278f4144dff3fdfa45679c60621f9aaa6a8a5a 100644 (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
                 }