From 85bc544fb9a4b37bef9802596348431558f2985e Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 18 Jul 2023 15:39:51 -0600 Subject: [PATCH] dereference TermWriteResult variables sooner in read_term_body (#1894) --- src/machine/machine_state.rs | 15 +++++++++------ src/read.rs | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/machine/machine_state.rs b/src/machine/machine_state.rs index 142f5a98..d76e1cf1 100644 --- a/src/machine/machine_state.rs +++ b/src/machine/machine_state.rs @@ -563,17 +563,19 @@ impl MachineState { } ); - let term = self.registers[2]; - unify_fn!(*self, heap_loc, term); - let term = heap_loc; + unify_fn!(*self, heap_loc, self.registers[2]); if self.fail { return Ok(()); } + for var in term_write_result.var_dict.values_mut() { + *var = heap_bound_deref(&self.heap, *var); + } + let mut singleton_var_set: IndexMap = IndexMap::new(); - for cell in stackful_preorder_iter(&mut self.heap, &mut self.stack, term) { + for cell in stackful_preorder_iter(&mut self.heap, &mut self.stack, heap_loc) { let cell = unmark_cell_bits!(cell); if let Some(var) = cell.as_var() { @@ -609,8 +611,9 @@ impl MachineState { for (var_name, addr) in term_write_result.var_dict { if let Some(var) = addr.as_var() { - let idx = singleton_var_set.get_index_of(&var).unwrap(); - var_list.push((var_name, addr, idx)); + if let Some(idx) = singleton_var_set.get_index_of(&var) { + var_list.push((var_name, addr, idx)); + } } } diff --git a/src/read.rs b/src/read.rs index fac2e4e8..3afb4bf9 100644 --- a/src/read.rs +++ b/src/read.rs @@ -422,7 +422,7 @@ impl<'a, 'b> TermWriter<'a, 'b> { continue; } } - &TermRef::Var(_, _, ref var) => { + &TermRef::Var(.., ref var) => { if let Some((arity, site_h)) = self.queue.pop_front() { let var_key = VarKey::VarPtr(var.clone()); -- 2.54.0