]> Repositorios git - scryer-prolog.git/commitdiff
repair cyclic PStrLoc handling in heap_print.rs
authorMark Thom <[email protected]>
Fri, 18 Apr 2025 07:03:33 +0000 (00:03 -0700)
committerMark Thom <[email protected]>
Wed, 23 Apr 2025 06:33:11 +0000 (23:33 -0700)
src/heap_print.rs
src/machine/machine_state.rs

index f11fb4d57c419721ed0d151957b62f1a7353b5b5..c2b606576f014188a1c0d5e7a145629a170e87a1 100644 (file)
@@ -879,7 +879,12 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
                                     } else {
                                         debug_assert!(cell.is_ref());
 
-                                        let h = cell.get_value() as usize;
+                                        let h = if cell.get_tag() == HeapCellValueTag::PStrLoc {
+                                            self.iter.focus().value()
+                                        } else {
+                                            cell.get_value()
+                                        } as usize;
+
                                         self.iter.push_stack(IterStackLoc::iterable_loc(
                                             h,
                                             HeapOrStackTag::Heap,
@@ -909,7 +914,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
                                             orig_cell = cell;
                                             continue;
                                         }
-                                    }
+                                    };
                                 }
                             }
 
index 049f131cdf2f786d30d8c42b11dc50bfb6994830..7c8f1abe1bff3cf617c41c0402ad7198481e564d 100644 (file)
@@ -731,10 +731,6 @@ impl MachineState {
             )
         );
 
-        for var in term_write_result.var_dict.values_mut() {
-            *var = heap_bound_deref(&self.heap, *var);
-        }
-
         let mut var_list = Vec::with_capacity(singleton_var_set.len());
 
         for (var_name, addr) in term_write_result.var_dict {