From b7ff27af1bce071e7c92d7627a2a94e46e727997 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 25 Mar 2017 12:26:06 -0600 Subject: [PATCH] correct register overallocation --- src/prolog/codegen.rs | 16 ++++++---------- src/prolog/io.rs | 2 +- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/prolog/codegen.rs b/src/prolog/codegen.rs index 4c5592ae..69c327f6 100644 --- a/src/prolog/codegen.rs +++ b/src/prolog/codegen.rs @@ -234,12 +234,12 @@ impl<'a> TermMarker<'a> { } fn advance_at_head(&mut self, term: &'a Term) { - self.arg_c = 1; - self.temp_c = max(term.subterms(), self.temp_c) + 1; + self.arg_c = 1; + self.temp_c = max(term.subterms() + 1, self.temp_c); } fn advance(&mut self, term: &'a Term) { - self.arg_c = 1; + self.arg_c = 1; self.temp_c = term.subterms() + 1; } } @@ -339,13 +339,9 @@ impl<'a> CodeGenerator<'a> { Target::to_list(lvl, cell.get()) } - fn constant_subterm(&mut self, - cell: &'a Cell, - constant: &'a Constant) - -> Target + fn constant_subterm(&mut self, constant: &'a Constant) -> Target where Target: CompilationTarget<'a> { - self.marker.mark_non_var(Level::Deep, cell); Target::constant_subterm(constant.clone()) } @@ -407,8 +403,8 @@ impl<'a> CodeGenerator<'a> { self.anon_var_term(Level::Deep), &Term::Cons(ref cell, _, _) | &Term::Clause(ref cell, _, _) => self.non_var_subterm(cell), - &Term::Constant(ref cell, ref constant) => - self.constant_subterm(cell, constant), + &Term::Constant(_, ref constant) => + self.constant_subterm(constant), &Term::Var(ref cell, ref var) => self.var_term(Level::Deep, cell, var) } diff --git a/src/prolog/io.rs b/src/prolog/io.rs index 022c8471..1ae4e1ee 100644 --- a/src/prolog/io.rs +++ b/src/prolog/io.rs @@ -241,7 +241,7 @@ Each predicate must have the same name and arity."; EvalResult::EntrySuccess }, &Ok(TopLevel::Query(ref query)) => { - let compiled_query = cg.compile_query(&query); + let compiled_query = cg.compile_query(&query); wam.run_query(compiled_query, &cg) }, &Err(_) => { -- 2.54.0