emit indexing instructions in single clauses of dynamic predicates
This commit is contained in:
@@ -1156,7 +1156,7 @@ impl<'b> CodeGenerator<'b> {
|
||||
if let Some(arg) = arg {
|
||||
let index = code.len();
|
||||
|
||||
if clauses.len() > 1 {
|
||||
if clauses.len() > 1 || self.settings.is_dynamic() {
|
||||
code_offsets.index_term(arg, index, &mut clause_index_info, self.atom_tbl);
|
||||
}
|
||||
}
|
||||
@@ -1178,7 +1178,7 @@ impl<'b> CodeGenerator<'b> {
|
||||
code.extend(clause_code.into_iter());
|
||||
}
|
||||
|
||||
let index_code = if clauses.len() > 1 {
|
||||
let index_code = if clauses.len() > 1 || self.settings.is_dynamic() {
|
||||
code_offsets.compute_indices(skip_stub_try_me_else)
|
||||
} else {
|
||||
vec![]
|
||||
|
||||
@@ -998,29 +998,19 @@ impl Machine {
|
||||
match self.find_living_dynamic_else(p + next_i) {
|
||||
Some(_) => {
|
||||
self.retry_me_else(next_i);
|
||||
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
}
|
||||
None => {
|
||||
self.trust_me();
|
||||
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
self.trust_me();
|
||||
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
}
|
||||
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1079,29 +1069,19 @@ impl Machine {
|
||||
match self.find_living_dynamic_else(p + next_i) {
|
||||
Some(_) => {
|
||||
self.retry_me_else(next_i);
|
||||
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
}
|
||||
None => {
|
||||
self.trust_me();
|
||||
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
self.trust_me();
|
||||
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
}
|
||||
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user