Skip to content

Commit

Permalink
overwrite code indices of dynamic_undefined predicates (dynamic, mult…
Browse files Browse the repository at this point in the history
…ifile, discontiguous) on export
  • Loading branch information
mthom committed Jul 25, 2023
1 parent 49b4e4c commit 3b67ffa
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 11 deletions.
6 changes: 5 additions & 1 deletion src/machine/load_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ pub(super) fn import_module_exports<'a, LS: LoadState<'a>>(
meta_predicates.insert(key, meta_specs.clone());
}

if let Some(src_code_index) = imported_module.code_dir.get(&key) {
if let Some(src_code_index) = imported_module.code_dir.get(&key).cloned() {
let arena = &mut LS::machine_st(payload).arena;

let target_code_index = code_dir
Expand All @@ -148,6 +148,10 @@ pub(super) fn import_module_exports<'a, LS: LoadState<'a>>(
target_code_index,
src_code_index.get(),
);

if src_code_index.is_dynamic_undefined() {
code_dir.insert(key, src_code_index);
}
} else {
return Err(SessionError::ModuleDoesNotContainExport(
imported_module.module_decl.name,
Expand Down
13 changes: 3 additions & 10 deletions src/machine/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1631,23 +1631,16 @@ impl Machine {
usize,
) -> Result<(), SessionError>,
) -> CallResult {
let module_name = cell_as_atom!(
self.machine_st.store(self.machine_st.deref(self.machine_st.registers[1]))
);
let module_name = cell_as_atom!(self.deref_register(1));

let compilation_target = match module_name {
atom!("user") => CompilationTarget::User,
_ => CompilationTarget::Module(module_name),
};

let predicate_name = cell_as_atom!(
self.machine_st.store(self.machine_st.deref(self.machine_st.registers[2]))
);

let arity = self
.machine_st
.store(self.machine_st.deref(self.machine_st.registers[3]));
let predicate_name = cell_as_atom!(self.deref_register(2));

let arity = self.deref_register(3);
let arity = match Number::try_from(arity) {
Ok(Number::Integer(n)) if &*n >= &Integer::from(0) && &*n <= &Integer::from(MAX_ARITY) => Ok(n.to_usize().unwrap()),
Ok(Number::Fixnum(n)) if n.get_num() >= 0 && n.get_num() <= MAX_ARITY as i64 => {
Expand Down

0 comments on commit 3b67ffa

Please sign in to comment.