%% table(PIList) :-
%% throw(error(context_error(nodirective, table(PIList)), _)).
-instantiation_error(Var) :-
- throw(error(instantiation_error(Var), _)).
+%% instantiation_error(Var) :-
+%% throw(error(instantiation_error(Var), _)).
wrappers(Var) -->
{ var(Var), !,
}
}
+ pub(super) fn remove_replaced_module(&mut self, module_name: ClauseName) {
+ let removed_module = match self.wam.indices.modules.remove(&module_name) {
+ Some(module) => module,
+ None => return,
+ };
+
+ for (key, code_index) in &removed_module.code_dir {
+ if code_index.get() != IndexPtr::Undefined {
+ let old_index_ptr = code_index.replace(IndexPtr::Undefined);
+
+ self.retraction_info.push_record(
+ RetractionRecord::ReplacedModulePredicate(
+ module_name.clone(), key.clone(), old_index_ptr,
+ ),
+ );
+ }
+ }
+
+ self.wam.indices.modules.insert(module_name, removed_module);
+ }
+
pub(super) fn remove_module_exports(&mut self, module_name: ClauseName) {
let removed_module = match self.wam.indices.modules.remove(&module_name) {
Some(module) => module,
pub(crate) fn add_module(&mut self, module_decl: ModuleDecl, listing_src: ListingSource) {
let module_name = module_decl.name.clone();
+
self.remove_module_exports(module_name.clone());
+ self.remove_replaced_module(module_name.clone());
match self.wam.indices.modules.get_mut(&module_name) {
Some(module) => {