cover Addr::Fixnum when not referenced as an Addr::Con, undefine dynamic predicate definitions from within modules too (#588)
This commit is contained in:
@@ -66,6 +66,9 @@ impl Machine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Addr::Fixnum(arity) => {
|
||||||
|
usize::try_from(arity).unwrap()
|
||||||
|
}
|
||||||
Addr::Usize(n) => {
|
Addr::Usize(n) => {
|
||||||
n
|
n
|
||||||
}
|
}
|
||||||
@@ -98,6 +101,18 @@ impl Machine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn make_undefined(&mut self, name: ClauseName, arity: usize) {
|
fn make_undefined(&mut self, name: ClauseName, arity: usize) {
|
||||||
|
let module_name = name.owning_module();
|
||||||
|
|
||||||
|
match self.indices.modules.get(&module_name) {
|
||||||
|
Some(ref module) => {
|
||||||
|
if let Some(idx) = module.code_dir.get(&(name.clone(), arity)) {
|
||||||
|
set_code_index!(idx, IndexPtr::DynamicUndefined, module_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(idx) = self.indices.code_dir.get(&(name, arity)) {
|
if let Some(idx) = self.indices.code_dir.get(&(name, arity)) {
|
||||||
set_code_index!(idx, IndexPtr::DynamicUndefined, clause_name!("user"));
|
set_code_index!(idx, IndexPtr::DynamicUndefined, clause_name!("user"));
|
||||||
}
|
}
|
||||||
@@ -258,7 +273,12 @@ impl Machine {
|
|||||||
unreachable!()
|
unreachable!()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
Addr::Fixnum(arity) => {
|
||||||
|
usize::try_from(arity).unwrap()
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
unreachable!()
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let (mut name, arity) = self.get_predicate_key(temp_v!(1), temp_v!(2));
|
let (mut name, arity) = self.get_predicate_key(temp_v!(1), temp_v!(2));
|
||||||
|
|||||||
Reference in New Issue
Block a user