From 720426648ea6f26d61346af1ff2ef71d0a266cd0 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Mon, 15 Oct 2018 22:11:55 -0600 Subject: [PATCH] correctly handle anonymous variables when reading --- src/prolog/read.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/prolog/read.rs b/src/prolog/read.rs index 8ea8c414..2a40aa94 100644 --- a/src/prolog/read.rs +++ b/src/prolog/read.rs @@ -118,12 +118,21 @@ pub(crate) fn write_term_to_heap(term: &Term, machine_st: &mut MachineState) -> } }, &TermRef::AnonVar(Level::Root) - | &TermRef::Var(Level::Root, ..) - | &TermRef::Constant(Level::Root, ..) => + | &TermRef::Var(Level::Root, ..) + | &TermRef::Constant(Level::Root, ..) => machine_st.heap.push(HeapCellValue::Addr(term.as_addr(h))), - &TermRef::AnonVar(_) => - continue, + &TermRef::AnonVar(_) => { + if let Some((arity, site_h)) = queue.pop_front() { + if arity > 1 { + queue.push_front((arity - 1, site_h + 1)); + } + } + + continue; + }, &TermRef::Var(_, _, ref var) => { + let v = var.as_str(); + if let Some((arity, site_h)) = queue.pop_front() { if let Some(addr) = var_dict.get(var).cloned() { machine_st.heap[site_h] = HeapCellValue::Addr(addr); -- 2.54.0