From: Mark Thom Date: Sat, 15 Dec 2018 02:10:38 +0000 (-0700) Subject: correct non-termination of expand_goal and expand_term X-Git-Tag: v0.8.110~313 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=47a1cfaddc554f1735207da1649e0b7678925c59;p=scryer-prolog.git correct non-termination of expand_goal and expand_term --- diff --git a/src/prolog/instructions.rs b/src/prolog/instructions.rs index 03974b8a..c025d2c9 100644 --- a/src/prolog/instructions.rs +++ b/src/prolog/instructions.rs @@ -914,12 +914,14 @@ impl PartialOrd for CodePtr { impl PartialOrd for LocalCodePtr { fn partial_cmp(&self, other: &LocalCodePtr) -> Option { 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) } }