warn when overwriting a predicate (#848)
This commit is contained in:
@@ -1293,6 +1293,26 @@ fn mergeable_indexed_subsequences(
|
|||||||
false
|
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> {
|
impl<'a> LoadState<'a> {
|
||||||
fn compile_standalone_clause(
|
fn compile_standalone_clause(
|
||||||
&mut self,
|
&mut self,
|
||||||
@@ -1403,7 +1423,7 @@ impl<'a> LoadState<'a> {
|
|||||||
predicates.compilation_target.clone(),
|
predicates.compilation_target.clone(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
match self
|
match self
|
||||||
.wam
|
.wam
|
||||||
@@ -1440,6 +1460,8 @@ impl<'a> LoadState<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print_overwrite_warning(&predicates.compilation_target, code_index.get(), &key);
|
||||||
|
|
||||||
set_code_index(
|
set_code_index(
|
||||||
&mut self.retraction_info,
|
&mut self.retraction_info,
|
||||||
&predicates.compilation_target,
|
&predicates.compilation_target,
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ pub(super) fn set_code_index(
|
|||||||
code_index.set(code_ptr);
|
code_index.set(code_ptr);
|
||||||
RetractionRecord::AddedUserPredicate(key)
|
RetractionRecord::AddedUserPredicate(key)
|
||||||
} else {
|
} else {
|
||||||
// TODO: emit warning about overwriting previous record
|
|
||||||
let replaced = code_index.replace(code_ptr);
|
let replaced = code_index.replace(code_ptr);
|
||||||
RetractionRecord::ReplacedUserPredicate(key, replaced)
|
RetractionRecord::ReplacedUserPredicate(key, replaced)
|
||||||
}
|
}
|
||||||
@@ -45,7 +44,6 @@ pub(super) fn set_code_index(
|
|||||||
code_index.set(code_ptr);
|
code_index.set(code_ptr);
|
||||||
RetractionRecord::AddedModulePredicate(module_name.clone(), key)
|
RetractionRecord::AddedModulePredicate(module_name.clone(), key)
|
||||||
} else {
|
} else {
|
||||||
// TODO: emit warning about overwriting previous record
|
|
||||||
let replaced = code_index.replace(code_ptr);
|
let replaced = code_index.replace(code_ptr);
|
||||||
RetractionRecord::ReplacedModulePredicate(module_name.clone(), key, replaced)
|
RetractionRecord::ReplacedModulePredicate(module_name.clone(), key, replaced)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user