From: Mark Thom Date: Tue, 2 Mar 2021 18:43:47 +0000 (-0700) Subject: warn when overwriting a predicate (#848) X-Git-Tag: v0.9.0~143 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=7ea9706c94d054d5ba45585bc9775f65010ca159;p=scryer-prolog.git warn when overwriting a predicate (#848) --- diff --git a/src/machine/compile.rs b/src/machine/compile.rs index bfea3f2f..eea744a2 100644 --- a/src/machine/compile.rs +++ b/src/machine/compile.rs @@ -1293,6 +1293,26 @@ fn mergeable_indexed_subsequences( false } +fn print_overwrite_warning( + compilation_target: &CompilationTarget, + code_ptr: IndexPtr, + key: &PredicateKey, +) { + if let CompilationTarget::Module(ref module_name) = compilation_target { + match module_name.as_str() { + "builtins" | "loader" => return, + _ => {} + } + } + + match code_ptr { + IndexPtr::DynamicUndefined | IndexPtr::Undefined => return, + _ => {} + } + + println!("Warning: overwriting {}/{}", key.0, key.1); +} + impl<'a> LoadState<'a> { fn compile_standalone_clause( &mut self, @@ -1403,7 +1423,7 @@ impl<'a> LoadState<'a> { predicates.compilation_target.clone(), ); } - } + }; match self .wam @@ -1440,6 +1460,8 @@ impl<'a> LoadState<'a> { } } + print_overwrite_warning(&predicates.compilation_target, code_index.get(), &key); + set_code_index( &mut self.retraction_info, &predicates.compilation_target, diff --git a/src/machine/load_state.rs b/src/machine/load_state.rs index b2567725..96f88d04 100644 --- a/src/machine/load_state.rs +++ b/src/machine/load_state.rs @@ -35,7 +35,6 @@ pub(super) fn set_code_index( code_index.set(code_ptr); RetractionRecord::AddedUserPredicate(key) } else { - // TODO: emit warning about overwriting previous record let replaced = code_index.replace(code_ptr); RetractionRecord::ReplacedUserPredicate(key, replaced) } @@ -45,7 +44,6 @@ pub(super) fn set_code_index( code_index.set(code_ptr); RetractionRecord::AddedModulePredicate(module_name.clone(), key) } else { - // TODO: emit warning about overwriting previous record let replaced = code_index.replace(code_ptr); RetractionRecord::ReplacedModulePredicate(module_name.clone(), key, replaced) }