From bc81ff28d8923891e585959b06e2edeeb3c19883 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Tue, 16 Jun 2020 19:03:07 -0600 Subject: [PATCH] cover Addr::Fixnum when not referenced as an Addr::Con, undefine dynamic predicate definitions from within modules too (#588) --- src/machine/dynamic_database.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/machine/dynamic_database.rs b/src/machine/dynamic_database.rs index 17a21d06..6fc01b4c 100644 --- a/src/machine/dynamic_database.rs +++ b/src/machine/dynamic_database.rs @@ -66,6 +66,9 @@ impl Machine { } } } + Addr::Fixnum(arity) => { + usize::try_from(arity).unwrap() + } Addr::Usize(n) => { n } @@ -98,6 +101,18 @@ impl Machine { } 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)) { set_code_index!(idx, IndexPtr::DynamicUndefined, clause_name!("user")); } @@ -258,7 +273,12 @@ impl Machine { 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)); -- 2.54.0