clean up atomic and var code.
This commit is contained in:
@@ -349,16 +349,24 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
|
|||||||
&Term::Constant(_, _) => {
|
&Term::Constant(_, _) => {
|
||||||
code.push(succeed!());
|
code.push(succeed!());
|
||||||
},
|
},
|
||||||
&Term::Var(ref vr, ref name) => {
|
&Term::Var(ref vr, ref name) =>
|
||||||
|
match self.marker.bindings().get(name) {
|
||||||
|
Some(&VarData::Temp(_, t, _)) if t != 0 =>
|
||||||
|
code.push(is_atomic!(RegType::Temp(t))),
|
||||||
|
Some(&VarData::Perm(p)) if p != 0 =>
|
||||||
|
code.push(is_atomic!(RegType::Perm(p))),
|
||||||
|
_ => {
|
||||||
let mut target = Vec::new();
|
let mut target = Vec::new();
|
||||||
|
|
||||||
self.marker.advance(term_loc, *term); // reset self.marker.arg_c to 1.
|
// reset self.marker.arg_c to 1.
|
||||||
|
self.marker.advance(term_loc, *term);
|
||||||
self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
|
self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
|
||||||
|
|
||||||
code.push(Line::Query(target));
|
code.push(Line::Query(target));
|
||||||
code.push(is_atomic!(vr.get().norm()));
|
code.push(is_atomic!(vr.get().norm()));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
},
|
||||||
&QueryTermRef::IsVar(inner_term) =>
|
&QueryTermRef::IsVar(inner_term) =>
|
||||||
match inner_term {
|
match inner_term {
|
||||||
&Term::Constant(_, _) | &Term::Clause(_, _, _) | &Term::Cons(_, _, _) => {
|
&Term::Constant(_, _) | &Term::Clause(_, _, _) | &Term::Cons(_, _, _) => {
|
||||||
@@ -367,15 +375,23 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
|
|||||||
&Term::AnonVar => {
|
&Term::AnonVar => {
|
||||||
code.push(succeed!());
|
code.push(succeed!());
|
||||||
},
|
},
|
||||||
&Term::Var(ref vr, ref name) => {
|
&Term::Var(ref vr, ref name) =>
|
||||||
|
match self.marker.bindings().get(name) {
|
||||||
|
Some(&VarData::Temp(_, t, _)) if t != 0 =>
|
||||||
|
code.push(is_var!(RegType::Temp(t))),
|
||||||
|
Some(&VarData::Perm(p)) if p != 0 =>
|
||||||
|
code.push(is_var!(RegType::Perm(p))),
|
||||||
|
_ => {
|
||||||
let mut target = Vec::new();
|
let mut target = Vec::new();
|
||||||
|
|
||||||
self.marker.advance(term_loc, *term); // reset self.marker.arg_c to 1.
|
// reset self.marker.arg_c to 1.
|
||||||
|
self.marker.advance(term_loc, *term);
|
||||||
self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
|
self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
|
||||||
|
|
||||||
code.push(Line::Query(target));
|
code.push(Line::Query(target));
|
||||||
code.push(is_var!(vr.get().norm()));
|
code.push(is_var!(vr.get().norm()));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
_ if chunk_num == 0 => {
|
_ if chunk_num == 0 => {
|
||||||
self.marker.advance(GenContext::Head, *term);
|
self.marker.advance(GenContext::Head, *term);
|
||||||
|
|||||||
Reference in New Issue
Block a user