]> Repositorios git - scryer-prolog.git/commitdiff
remove dynamic code indices when modules are redefined.
authorMark Thom <[email protected]>
Sat, 9 Mar 2019 21:19:49 +0000 (14:19 -0700)
committerMark Thom <[email protected]>
Sat, 9 Mar 2019 21:19:49 +0000 (14:19 -0700)
src/prolog/machine/compile.rs

index 8bb2ee45a0a53854fe1345bbad72d5bc1418305c..5d5e0fc1462bed66a3189f674d1dd380e26bcc9f 100644 (file)
@@ -342,6 +342,10 @@ fn add_module_code(wam: &mut Machine, mut module: Module, code: Code, mut indice
     module.code_dir.extend(code_dir);
     module.op_dir.extend(op_dir.into_iter());
 
+    for (name, arity) in module.code_dir.keys().cloned() {
+        wam.indices.dynamic_code_dir.remove(&(name.owning_module(), name, arity));
+    }
+    
     wam.add_module(module, code);
 }
 
@@ -353,7 +357,7 @@ fn add_non_module_code(wam: &mut Machine, dynamic_clause_map: DynamicClauseMap,
 
     let mut clause_code_generator = ClauseCodeGenerator::new(code.len());
     clause_code_generator.generate_clause_code(dynamic_clause_map, wam)?;
-
+    
     add_toplevel_code(wam, code, indices);
     clause_code_generator.add_clause_code(wam);
 
@@ -665,7 +669,7 @@ fn compile_work<R: Read>(compiler: &mut ListingCompiler, wam: &mut Machine, src:
         try_eval_session!(wam.check_toplevel_code(&results.toplevel_indices));
         try_eval_session!(clause_code_generator.generate_clause_code(results.dynamic_clause_map,
                                                                      wam));
-
+        
         add_module_code(wam, module, module_code, indices);
         add_toplevel_code(wam, toplvl_code, results.toplevel_indices);