]> Repositorios git - scryer-prolog.git/commitdiff
remove QueryTermRef from Allocator
authorMark Thom <[email protected]>
Sun, 12 Nov 2017 00:00:10 +0000 (17:00 -0700)
committerMark Thom <[email protected]>
Sun, 12 Nov 2017 00:00:10 +0000 (17:00 -0700)
src/prolog/allocator.rs
src/prolog/codegen.rs
src/prolog/debray_allocator.rs
src/prolog/naive_allocator.rs

index 2df627ace7f4246df6daec2b15579683e1700e79..c3a3e79bcac882d3a69c0954f5b71baf1a405e9d 100644 (file)
@@ -18,7 +18,7 @@ pub trait Allocator<'a>
     fn reset(&mut self);
     fn reset_contents(&mut self) {}
 
-    fn advance(&mut self, GenContext, QueryTermRef<'a>);
+    fn advance(&mut self, GenContext, usize);
     fn advance_arg(&mut self);
 
     fn bindings(&self) -> &AllocVarDict<'a>;
index b8625a2375289a98a180901ccfc665247c12c3be..0a6b7851a9679737fbf017297c7c84775445268c 100644 (file)
@@ -311,7 +311,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
                                         let mut target = Vec::new();
 
                                         // reset self.marker.arg_c to 1.
-                                        self.marker.advance(term_loc, *term);
+                                        self.marker.advance(term_loc, term.arity());
                                         self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
 
                                         code.push(Line::Query(target));
@@ -354,7 +354,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
                                         let mut target = Vec::new();
 
                                         // reset self.marker.arg_c to 1.
-                                        self.marker.advance(term_loc, *term);
+                                        self.marker.advance(term_loc, term.arity());
                                         self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
 
                                         code.push(Line::Query(target));
@@ -380,7 +380,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
                                         let mut target = Vec::new();
 
                                         // reset self.marker.arg_c to 1.
-                                        self.marker.advance(term_loc, *term);
+                                        self.marker.advance(term_loc, term.arity());
                                         self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
 
                                         code.push(Line::Query(target));
@@ -389,7 +389,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
                                 }
                         },
                     _ if chunk_num == 0 => {
-                        self.marker.advance(GenContext::Head, *term);
+                        self.marker.advance(GenContext::Head, term.arity());
 
                         let iter = term.post_order_iter();
                         code.push(Line::Query(self.compile_target(iter, term_loc, is_exposed)));
@@ -445,7 +445,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
         let &Rule { head: (ref p0, ref p1), ref clauses } = rule;
         let mut code = Vec::new();
 
-        self.marker.advance(GenContext::Head, QueryTermRef::Term(p0));
+        self.marker.advance(GenContext::Head, p0.arity());
         self.compile_seq_prelude(&conjunct_info, &mut code);
 
         if p0.is_clause() {
@@ -504,7 +504,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
         let iter = ChunkedIterator::from_fact(term);
 
         self.collect_var_data(iter);
-        self.marker.advance(GenContext::Head, QueryTermRef::Term(term));
+        self.marker.advance(GenContext::Head, term.arity());
 
         let mut code = Vec::new();
 
@@ -527,7 +527,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
                           index: usize,
                           is_exposed: bool)
     {
-        self.marker.advance(term_loc, term);
+        self.marker.advance(term_loc, term.arity());
 
         let iter = term.post_order_iter();
         let compiled_query = Line::Query(self.compile_target(iter, term_loc, is_exposed));
index 0c1f8dcd5ec3a8033986f16fd7a4976d5ad939cc..44e3800f4d3612a6940979c16c34e505fb85e360 100644 (file)
@@ -348,8 +348,8 @@ impl<'a> Allocator<'a> for DebrayAllocator<'a>
         self.bindings
     }
     
-    fn advance(&mut self, _: GenContext, term: QueryTermRef<'a>) {
+    fn advance(&mut self, _: GenContext, arity: usize) {
         self.arg_c   = 1;
-        self.temp_lb = term.arity() + 1;
+        self.temp_lb = arity + 1;
     }
 }
index c4588f35adb71521fee540f07a9709b0e76657c0..4b1f13c7bd72aac99c3f2d6a50a42765a2167ab1 100644 (file)
@@ -129,13 +129,13 @@ impl<'a> Allocator<'a> for NaiveAllocator<'a>
         self.bindings.clear();
     }
     
-    fn advance(&mut self, term_loc: GenContext, term: QueryTermRef<'a>) {
+    fn advance(&mut self, term_loc: GenContext, arity: usize) {
         if let GenContext::Head = term_loc {
             self.arg_c  = 1;
-            self.temp_c = max(term.arity() + 1, self.temp_c);
+            self.temp_c = max(arity + 1, self.temp_c);
         } else {
             self.arg_c  = 1;
-            self.temp_c = term.arity() + 1;
+            self.temp_c = arity + 1;
         }
     }