inference count call_inline, fail on undefined index
This commit is contained in:
@@ -5014,6 +5014,11 @@ impl Machine {
|
||||
|
||||
if self.machine_st.fail {
|
||||
self.machine_st.backtrack();
|
||||
} else {
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
}
|
||||
}
|
||||
&Instruction::ExecuteInlineCallN(arity, _) => {
|
||||
@@ -5025,6 +5030,11 @@ impl Machine {
|
||||
|
||||
if self.machine_st.fail {
|
||||
self.machine_st.backtrack();
|
||||
} else {
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,15 +166,6 @@ impl CodeIndex {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn is_dynamic_undefined(&self) -> bool {
|
||||
match self.0.tag() {
|
||||
IndexPtrTag::DynamicUndefined => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn local(&self) -> Option<usize> {
|
||||
match self.0.tag() {
|
||||
IndexPtrTag::Index => Some(self.0.p() as usize),
|
||||
|
||||
@@ -1018,7 +1018,7 @@ impl Machine {
|
||||
let index_cell = self.machine_st.heap[s+goal_arity+1];
|
||||
|
||||
if let Some(code_index) = get_structure_index(index_cell) {
|
||||
if code_index.is_undefined() || code_index.is_dynamic_undefined() {
|
||||
if code_index.is_undefined() {
|
||||
self.machine_st.fail = true;
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user