let mut counter : usize = max_reg_used; // r + 1;
- for t in terms {
+ for t in terms {
if t.is_variable() && !variable_allocs.contains_key(t.name()) {
counter += 1;
variable_allocs.insert(t.name(), (counter, false));
max_reg_used = counter;
for t in terms.iter().rev() {
- let r = if t.is_variable() {
- variable_allocs.get(t.name()).unwrap().0
- } else {
+ if t.is_variable() {
+ counter -= 1;
+ continue;
+ }
+
+ let r = {
let oc = counter;
counter -= 1;
oc
&Term::Clause(ref atom, ref terms) =>
stack.push(IntTerm::UnfinishedClause(r, atom, terms)),
_ => {}
- };
+ };
}
},
IntTerm::FinishedAtom(r, atom) =>
} else {
query.push(MachineInstruction::SetValue(counter));
counter += 1;
- }
+ }
}
max_reg_used = counter - 1;
let program = compile_fact(&fact);
ms = MachineState::new();
- ms.program = Some(program);
-
+ ms.program = Some(program);
+
println!("Program stored.");
},
Ok(TopLevel::Query(query)) => {