From: Mark Thom Date: Sat, 9 Mar 2019 21:19:49 +0000 (-0700) Subject: remove dynamic code indices when modules are redefined. X-Git-Tag: v0.8.110~188 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=0d41b27abb88bb5b9501a84f126d2bb9f5462f0d;p=scryer-prolog.git remove dynamic code indices when modules are redefined. --- 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);