From: Mark Thom Date: Mon, 21 May 2018 22:20:08 +0000 (-0600) Subject: get rid of spurious warning, add type error for skip_max_list X-Git-Tag: v0.8.110~458 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=b49c0f5d36295a8e574ed95e7131724817f2c878;p=scryer-prolog.git get rid of spurious warning, add type error for skip_max_list --- diff --git a/src/prolog/ast.rs b/src/prolog/ast.rs index 5fac17a5..30d5ac54 100644 --- a/src/prolog/ast.rs +++ b/src/prolog/ast.rs @@ -1609,6 +1609,18 @@ pub enum IndexPtr { #[derive(Clone)] pub struct CodeIndex(pub Rc>); +impl CodeIndex { + pub fn is_undefined(&self) -> bool { + let index_ptr = self.0.borrow().0; + + if let IndexPtr::Undefined = index_ptr { + true + } else { + false + } + } +} + #[derive(Clone)] pub struct ModuleCodeIndex(pub IndexPtr, pub ClauseName); diff --git a/src/prolog/machine/mod.rs b/src/prolog/machine/mod.rs index 6753fc91..ddbf0b37 100644 --- a/src/prolog/machine/mod.rs +++ b/src/prolog/machine/mod.rs @@ -57,7 +57,10 @@ impl<'a> SubModuleUser for MachineCodeIndex<'a> { fn insert_dir_entry(&mut self, name: ClauseName, arity: usize, idx: ModuleCodeIndex) { if let Some(ref mut code_idx) = self.code_dir.get_mut(&(name.clone(), arity)) { - println!("warning: overwriting {}/{}", &name, arity); + if !code_idx.is_undefined() { + println!("warning: overwriting {}/{}", &name, arity); + } + set_code_index!(code_idx, idx.0, idx.1); return; diff --git a/src/prolog/machine/system_calls.rs b/src/prolog/machine/system_calls.rs index a48f766c..cd78785f 100644 --- a/src/prolog/machine/system_calls.rs +++ b/src/prolog/machine/system_calls.rs @@ -148,9 +148,14 @@ impl MachineState { } else { self.fail = true; }, - _ => { + Addr::HeapCell(_) | Addr::StackCell(..) => { let stub = MachineError::functor_stub(clause_name!("$skip_max_list"), 4); return Err(self.error_form(MachineError::instantiation_error(), stub)); + }, + addr => { + let stub = MachineError::functor_stub(clause_name!("$skip_max_list"), 4); + return Err(self.error_form(MachineError::type_error(ValidType::Integer, addr), + stub)); } };