cover Addr::Fixnum when not referenced as an Addr::Con, undefine dynamic predicate definitions from within modules too (#588)

This commit is contained in:
Mark Thom
2020-06-16 19:03:07 -06:00
parent ba867e95c3
commit bc81ff28d8

View File

@@ -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));