From: Mark Date: Tue, 18 Jul 2023 21:39:51 +0000 (-0600) Subject: dereference TermWriteResult variables sooner in read_term_body (#1894) X-Git-Tag: v0.9.2~39 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=85bc544fb9a4b37bef9802596348431558f2985e;p=scryer-prolog.git dereference TermWriteResult variables sooner in read_term_body (#1894) --- 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());