From: Mark Thom Date: Sun, 30 Apr 2017 19:59:11 +0000 (-0600) Subject: tweak head check X-Git-Tag: v0.8.110~739 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=e68e3cc1add38e7ba67dcfb0accb868a9ab74e68;p=scryer-prolog.git tweak head check --- diff --git a/src/prolog/debray_allocator.rs b/src/prolog/debray_allocator.rs index c5dbd4c1..6317173e 100644 --- a/src/prolog/debray_allocator.rs +++ b/src/prolog/debray_allocator.rs @@ -24,10 +24,10 @@ impl<'a> TermMarker<'a> { } } - fn occurs_shallowly_in_head(&self, var: &'a Var, term_loc: GenContext, r: usize) -> bool + fn occurs_shallowly_in_head(&self, var: &'a Var, r: usize) -> bool { - match (term_loc, self.bindings.get(var).unwrap()) { - (GenContext::Head, &VarData::Temp(_, _, ref tvd)) => + match self.bindings.get(var).unwrap() { + &VarData::Temp(_, _, ref tvd) => tvd.use_set.contains(&(GenContext::Head, r)), _ => false } @@ -304,11 +304,15 @@ impl<'a> TermMarker<'a> { } }, Level::Deep if is_new_var => - if self.occurs_shallowly_in_head(var, term_loc, r.reg_num()) { - target.push(Target::subterm_to_value(r)); + if let GenContext::Head = term_loc { + if self.occurs_shallowly_in_head(var, r.reg_num()) { + target.push(Target::subterm_to_value(r)); + } else { + target.push(Target::subterm_to_variable(r)); + } } else { target.push(Target::subterm_to_variable(r)); - }, + }, Level::Deep => target.push(Target::subterm_to_value(r)) };