From 7ea9706c94d054d5ba45585bc9775f65010ca159 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Tue, 2 Mar 2021 11:43:47 -0700 Subject: [PATCH] warn when overwriting a predicate (#848) --- src/machine/compile.rs | 24 +++++++++++++++++++++++- src/machine/load_state.rs | 2 -- 2 files changed, 23 insertions(+), 3 deletions(-) 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) } -- 2.54.0