From: Mark Thom Date: Sat, 23 Mar 2019 15:43:05 +0000 (-0600) Subject: do not print unbound vars at toplevel X-Git-Tag: v0.8.110~161 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=0b79ae0524c6d49b7d1b24c4a7f2bb778ccefa05;p=scryer-prolog.git do not print unbound vars at toplevel --- 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.");