always print variable bindings before names (#865)

This commit is contained in:
Mark Thom
2021-03-17 19:27:53 -06:00
parent 7937ccee30
commit 6c23d7aec8

View File

@@ -831,21 +831,16 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
} }
match self.heap_locs.get(&addr).cloned() { match self.heap_locs.get(&addr).cloned() {
Some(var) => { Some(var) if addr.is_ref() => {
if !self.printed_vars.contains(&addr) { iter.stack().pop();
self.printed_vars.insert(addr);
return iter.next();
} else {
iter.stack().pop();
push_space_if_amb!(self, &var, { push_space_if_amb!(self, &var, {
self.append_str(&var); self.append_str(&var);
}); });
return None; return None;
}
} }
None => { var_opt => {
let offset = match functor_location(&addr) { let offset = match functor_location(&addr) {
Some(offset) => offset, Some(offset) => offset,
None => { None => {
@@ -858,17 +853,32 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
if reps > 0 { if reps > 0 {
self.cyclic_terms.insert(addr, reps - 1); self.cyclic_terms.insert(addr, reps - 1);
} else { } else {
push_space_if_amb!(self, "...", { match var_opt {
self.append_str("..."); Some(var) => {
}); push_space_if_amb!(self, &var, {
self.append_str(&var);
});
iter.stack().pop(); iter.stack().pop();
self.cyclic_terms.insert(addr, 2); }
None => {
push_space_if_amb!(self, "...", {
self.append_str("...");
});
iter.stack().pop();
self.cyclic_terms.insert(addr, 2);
}
}
return None; return None;
} }
} else if self.machine_st.is_cyclic_term(addr.clone()) { } else if self.machine_st.is_cyclic_term(addr.clone()) {
self.cyclic_terms.insert(addr, 2); if var_opt.is_some() {
self.cyclic_terms.insert(addr, 0);
} else {
self.cyclic_terms.insert(addr, 2);
}
} else { } else {
self.record_children_as_non_cyclic(&addr); self.record_children_as_non_cyclic(&addr);
self.non_cyclic_terms.insert(offset); self.non_cyclic_terms.insert(offset);