From 0b79ae0524c6d49b7d1b24c4a7f2bb778ccefa05 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 23 Mar 2019 09:43:05 -0600 Subject: [PATCH] do not print unbound vars at toplevel --- src/prolog/machine/mod.rs | 13 ++++++++++++- src/prolog/write.rs | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/prolog/machine/mod.rs b/src/prolog/machine/mod.rs index 624dbefa..584aad87 100644 --- a/src/prolog/machine/mod.rs +++ b/src/prolog/machine/mod.rs @@ -249,7 +249,18 @@ impl Machine { Ok(()) } - + + pub fn remove_unbound_vars(&self, heap_locs: &mut HeapVarDict) { + for (var, addr) in heap_locs.clone() { + match self.machine_st.store(self.machine_st.deref(addr.clone())) { + new_addr => + if addr.is_ref() && new_addr == addr { + heap_locs.remove(&var); + } + } + } + } + pub fn add_batched_code(&mut self, code: Code, code_dir: CodeDir) { // error detection has finished, so update the master index of keys. diff --git a/src/prolog/write.rs b/src/prolog/write.rs index 59c82ac2..78c59ba8 100644 --- a/src/prolog/write.rs +++ b/src/prolog/write.rs @@ -373,6 +373,8 @@ pub fn print(wam: &mut Machine, result: EvalSession) { match result { EvalSession::InitialQuerySuccess(alloc_locs, mut heap_locs) => { loop { + wam.remove_unbound_vars(&mut heap_locs); + if wam.or_stack_is_empty() { if heap_locs.is_empty() { println!("true."); -- 2.54.0