]> Repositorios git - scryer-prolog.git/commitdiff
unify '' to [] in unify_complete_string (#1292, #1288)
authorMark Thom <[email protected]>
Sat, 26 Feb 2022 06:01:08 +0000 (23:01 -0700)
committerMark Thom <[email protected]>
Sat, 26 Feb 2022 06:01:08 +0000 (23:01 -0700)
src/machine/machine_state_impl.rs

index 85fac0315097a7c59cc03a941ba86da945c608ac..5003d14a5b772399cad40c6c44af8c16659d37e8 100644 (file)
@@ -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();