]> Repositorios git - scryer-prolog.git/commitdiff
be aware of temporary variables of stackless iterator in term_variables (#1383)
authorMark Thom <[email protected]>
Fri, 1 Apr 2022 00:18:04 +0000 (18:18 -0600)
committerMark Thom <[email protected]>
Fri, 1 Apr 2022 00:20:41 +0000 (18:20 -0600)
src/machine/system_calls.rs

index 531f24363beb33206bb4f31a13518fc6002571e1..aa70337e0d60eb445aa8477233e39a95260e61a7 100644 (file)
@@ -4905,12 +4905,17 @@ impl Machine {
         let mut seen_set = IndexSet::new();
 
         {
+            let orig_heap_len = self.machine_st.heap.len();
             let mut iter = stackless_preorder_iter(&mut self.machine_st.heap, stored_v);
 
             while let Some(addr) = iter.next() {
                 let addr = unmark_cell_bits!(addr);
 
-                if addr.is_var() {
+                if addr.is_var() && addr.get_value() < orig_heap_len {
+                    // the length check is so we don't catalog
+                    // temporary variables created by the iterator,
+                    // that will be deleted when the iterator is
+                    // dropped, into seen_set.
                     seen_set.insert(addr);
                 }
             }