|
|
|
@ -63,18 +63,7 @@ impl<'a> SessionTx<'a> {
|
|
|
|
|
inner: Symbol::new(PROG_ENTRY, SourceSpan(0, 0)),
|
|
|
|
|
};
|
|
|
|
|
for (stratum, cur_prog) in strata.iter().enumerate() {
|
|
|
|
|
debug!("stratum {}", stratum);
|
|
|
|
|
for (rule_name, rule_set) in cur_prog {
|
|
|
|
|
stores.insert(rule_name.clone(), self.new_rule_store(rule_set.arity()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
early_return = self.semi_naive_magic_evaluate(
|
|
|
|
|
cur_prog,
|
|
|
|
|
&mut stores,
|
|
|
|
|
total_num_to_take,
|
|
|
|
|
num_to_skip,
|
|
|
|
|
poison.clone(),
|
|
|
|
|
)?;
|
|
|
|
|
if stratum > 0 {
|
|
|
|
|
// remove stores that have outlived their usefulness!
|
|
|
|
|
stores = stores
|
|
|
|
|
.into_iter()
|
|
|
|
@ -84,11 +73,24 @@ impl<'a> SessionTx<'a> {
|
|
|
|
|
}
|
|
|
|
|
match store_lifetimes.get(name) {
|
|
|
|
|
None => false,
|
|
|
|
|
Some(n) => *n > stratum,
|
|
|
|
|
Some(n) => *n >= stratum,
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.collect()
|
|
|
|
|
}
|
|
|
|
|
for (rule_name, rule_set) in cur_prog {
|
|
|
|
|
stores.insert(rule_name.clone(), self.new_rule_store(rule_set.arity()));
|
|
|
|
|
}
|
|
|
|
|
debug!("stratum {}", stratum);
|
|
|
|
|
|
|
|
|
|
early_return = self.semi_naive_magic_evaluate(
|
|
|
|
|
cur_prog,
|
|
|
|
|
&mut stores,
|
|
|
|
|
total_num_to_take,
|
|
|
|
|
num_to_skip,
|
|
|
|
|
poison.clone(),
|
|
|
|
|
)?;
|
|
|
|
|
}
|
|
|
|
|
let ret_area = stores.remove(&entry_symbol).ok_or(NoEntryError)?;
|
|
|
|
|
Ok((ret_area, early_return))
|
|
|
|
|
}
|
|
|
|
|