]> Repositorios git - scryer-prolog.git/commitdiff
correct non-termination of expand_goal and expand_term
authorMark Thom <[email protected]>
Sat, 15 Dec 2018 02:10:38 +0000 (19:10 -0700)
committerMark Thom <[email protected]>
Sat, 15 Dec 2018 02:10:38 +0000 (19:10 -0700)
src/prolog/instructions.rs

index 03974b8a8d6966dd43a5ff64213aa90e227a1c0a..c025d2c9ae277d60648269a29b53564b710b2d24 100644 (file)
@@ -914,12 +914,14 @@ impl PartialOrd<CodePtr> for CodePtr {
 impl PartialOrd<LocalCodePtr> for LocalCodePtr {
     fn partial_cmp(&self, other: &LocalCodePtr) -> Option<Ordering> {
         match (self, other) {
-            (&LocalCodePtr::DirEntry(p1), &LocalCodePtr::DirEntry(p2)) =>
-                p1.partial_cmp(&p2),
-            (&LocalCodePtr::DirEntry(..), &LocalCodePtr::TopLevel(_, _)) =>
-                Some(Ordering::Less),
-            (&LocalCodePtr::TopLevel(_, p1), &LocalCodePtr::TopLevel(_, ref p2)) =>
+            (&LocalCodePtr::InSituDirEntry(p1), &LocalCodePtr::DirEntry(ref p2))
+          | (&LocalCodePtr::DirEntry(p1), &LocalCodePtr::DirEntry(ref p2))
+          | (&LocalCodePtr::UserTermExpansion(p1), &LocalCodePtr::UserTermExpansion(ref p2))
+          | (&LocalCodePtr::UserGoalExpansion(p1), &LocalCodePtr::UserGoalExpansion(ref p2))
+          | (&LocalCodePtr::TopLevel(_, p1), &LocalCodePtr::TopLevel(_, ref p2)) =>
                 p1.partial_cmp(p2),
+            (_, &LocalCodePtr::TopLevel(_, _)) =>
+                Some(Ordering::Less),
             _ => Some(Ordering::Greater)
         }
     }