From: Mark Thom Date: Sat, 26 Feb 2022 06:01:08 +0000 (-0700) Subject: unify '' to [] in unify_complete_string (#1292, #1288) X-Git-Tag: v0.9.0^2~14 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=775bd3a08bcc42acaf6fcc790a9cd444a41469ed;p=scryer-prolog.git unify '' to [] in unify_complete_string (#1292, #1288) --- diff --git a/src/machine/machine_state_impl.rs b/src/machine/machine_state_impl.rs index 85fac031..5003d14a 100644 --- a/src/machine/machine_state_impl.rs +++ b/src/machine/machine_state_impl.rs @@ -333,11 +333,20 @@ impl MachineState { pub fn unify_complete_string(&mut self, atom: Atom, value: HeapCellValue) { if let Some(r) = value.as_var() { - self.bind(r, atom_as_cstr_cell!(atom)); + if atom == atom!("") { + self.bind(r, atom_as_cell!(atom!("[]"))); + } else { + self.bind(r, atom_as_cstr_cell!(atom)); + } + return; } read_heap_cell!(value, + (HeapCellValueTag::Atom, (cstr_atom, arity)) if atom == atom!("") => { + debug_assert_eq!(arity, 0); + self.fail = cstr_atom != atom!("[]"); + } (HeapCellValueTag::CStr, cstr_atom) => { self.fail = atom != cstr_atom; } @@ -713,7 +722,6 @@ impl MachineState { pub fn unify(&mut self) { let mut tabu_list: IndexSet<(usize, usize)> = IndexSet::new(); - // self.fail = false; while !(self.pdl.is_empty() || self.fail) { let s1 = self.pdl.pop().unwrap();