remove dynamic code indices when modules are redefined.
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user