From 0d41b27abb88bb5b9501a84f126d2bb9f5462f0d Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 9 Mar 2019 14:19:49 -0700 Subject: [PATCH] remove dynamic code indices when modules are redefined. --- src/prolog/machine/compile.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/prolog/machine/compile.rs b/src/prolog/machine/compile.rs index 8bb2ee45..5d5e0fc1 100644 --- a/src/prolog/machine/compile.rs +++ b/src/prolog/machine/compile.rs @@ -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(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); -- 2.54.0