From: Mark Thom Date: Tue, 16 Oct 2018 04:11:55 +0000 (-0600) Subject: correctly handle anonymous variables when reading X-Git-Tag: v0.8.110~331 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=720426648ea6f26d61346af1ff2ef71d0a266cd0;p=scryer-prolog.git correctly handle anonymous variables when reading --- 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);