From: Mark Thom Date: Tue, 29 Oct 2019 06:06:51 +0000 (-0600) Subject: install asserted predicates into modules from initialization directives (#222) X-Git-Tag: v0.8.116~6 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=b90d69a45b8e545b1cce3e601cb4cd94028d8d6e;p=scryer-prolog.git install asserted predicates into modules from initialization directives (#222) --- diff --git a/src/prolog/machine/compile.rs b/src/prolog/machine/compile.rs index 2881c21c..36105baa 100644 --- a/src/prolog/machine/compile.rs +++ b/src/prolog/machine/compile.rs @@ -277,19 +277,19 @@ pub fn compile_term(wam: &mut Machine, packet: TopLevelPacket) -> EvalSession { } } -fn update_module_indices(wam: &Machine, module_name: ClauseName, mut indices: IndexStore) { - match wam.indices.modules.get(&module_name) { - Some(module) => { +fn update_module_indices(wam: &mut Machine, module_name: ClauseName, mut indices: IndexStore) { + match wam.indices.modules.get_mut(&module_name) { + Some(ref mut module) => { let code_dir = mem::replace(&mut indices.code_dir, CodeDir::new()); // replace the "user" module src's in the indices with module_name. for (key, idx) in code_dir.iter() { let p = idx.0.borrow().0; - - match module.code_dir.get(&key) { - Some(idx) => set_code_index!(idx, p, module_name.clone()), - _ => {} - } + + let idx = CodeIndex::dynamic_undefined(module_name.clone()); + let idx = module.code_dir.entry(key.clone()).or_insert(idx); + + set_code_index!(idx, p, module_name.clone()); match wam.indices.code_dir.get(&key) { Some(idx) => { @@ -419,6 +419,7 @@ impl ClauseCodeGenerator { } } + // compiles the latest version of clause/2. fn generate_clause_code( &mut self, dynamic_clause_map: &DynamicClauseMap, diff --git a/src/prolog/machine/mod.rs b/src/prolog/machine/mod.rs index dfd43ae2..7a6823a0 100644 --- a/src/prolog/machine/mod.rs +++ b/src/prolog/machine/mod.rs @@ -184,7 +184,8 @@ impl Machine { Ok(p) => { self.machine_st.attr_var_init.verify_attrs_loc = p; } - Err(_) => panic!("Machine::compile_special_forms() failed at VERIFY_ATTRS"), + Err(_) => + panic!("Machine::compile_special_forms() failed at VERIFY_ATTRS"), } match compile_special_form(self, parsing_stream(PROJECT_ATTRS.as_bytes()), project_attrs_src) @@ -192,7 +193,8 @@ impl Machine { Ok(p) => { self.machine_st.attr_var_init.project_attrs_loc = p; } - Err(e) => panic!("Machine::compile_special_forms() failed at PROJECT_ATTRS: {}", e), + Err(e) => + panic!("Machine::compile_special_forms() failed at PROJECT_ATTRS: {}", e), } }