]> Repositorios git - scryer-prolog.git/commitdiff
do not deref AttrVar binding in redo_attr_var_binding (#2059)
authorMark <[email protected]>
Thu, 28 Sep 2023 21:25:57 +0000 (15:25 -0600)
committerMark <[email protected]>
Thu, 28 Sep 2023 21:25:57 +0000 (15:25 -0600)
src/machine/system_calls.rs

index 897dab67365c30056529e811e2029d92f3886e13..daa119fc4e0461d2c59ec109b8dd15bbfe9b624e 100644 (file)
@@ -5659,7 +5659,9 @@ impl Machine {
     }
     #[inline(always)]
     pub(crate) fn redo_attr_var_binding(&mut self) {
-        let var = self.deref_register(1);
+        // registers[1] MUST NOT be dereferenced here. the original
+        // AttrVar binding site must be preserved.
+        let var = self.machine_st.registers[1];
         let value = self.deref_register(2);
 
         debug_assert_eq!(HeapCellValueTag::AttrVar, var.get_tag());