remove dynamic code indices when modules are redefined.

This commit is contained in:
Mark Thom
2019-03-09 14:19:49 -07:00
parent 9f398b2552
commit 0d41b27abb

View 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);