]> Repositorios git - scryer-prolog.git/commitdiff
compare '[]' in pstr_comparator of compare_term_test (#1299)
authorMark Thom <[email protected]>
Sat, 26 Feb 2022 06:57:27 +0000 (23:57 -0700)
committerMark Thom <[email protected]>
Sat, 26 Feb 2022 06:57:27 +0000 (23:57 -0700)
src/machine/machine_state_impl.rs

index 5003d14a5b772399cad40c6c44af8c16659d37e8..fc60afccdbec745f1dc18a5b85542b85171a1d40 100644 (file)
@@ -1641,8 +1641,8 @@ impl MachineState {
                             PStrCmpResult::Ordered(ordering) => Some(ordering),
                             _ => {
                                 if iter1.num_steps() == 0 && iter2.num_steps() == 0 {
-                                    return match iter2.focus.get_tag() {
-                                        HeapCellValueTag::CStr | HeapCellValueTag::PStrLoc => {
+                                    return read_heap_cell!(iter2.focus,
+                                        (HeapCellValueTag::CStr | HeapCellValueTag::PStrLoc) => {
                                             let result = stalled_pstr_iter_handler(iter2, iter1, pdl);
 
                                             if let Some(ordering) = result {
@@ -1653,10 +1653,17 @@ impl MachineState {
                                                 result
                                             }
                                         }
+                                        (HeapCellValueTag::Atom, (name, arity)) => {
+                                            if name == atom!("[]") && arity == 0 {
+                                                return Some(Ordering::Greater);
+                                            } else {
+                                                stalled_pstr_iter_handler(iter1, iter2, pdl)
+                                            }
+                                        }
                                         _ => {
                                             stalled_pstr_iter_handler(iter1, iter2, pdl)
                                         }
-                                    };
+                                    );
                                 }
 
                                 pdl.push(iter2.focus);