}
pub(crate) fn scoped_clause_to_evacuable(&mut self) -> CallResult {
- let module_name = cell_as_atom!(self
- .machine_st
- .store(self.machine_st.deref(self.machine_st.registers[1])));
+ let target = self.deref_register(1);
+
+ let mut permission_error = || {
+ let err = self.machine_st.permission_error(
+ Permission::Modify,
+ atom!("static_procedure"),
+ functor_stub(atom!(":"), 2)
+ .into_iter()
+ .collect::<MachineStub>(),
+ );
+
+ self.machine_st
+ .error_form(err, functor_stub(atom!("load"), 1))
+ };
+
+ let module_name = read_heap_cell!(target,
+ (HeapCellValueTag::Atom, (name, arity)) => {
+ if arity == 0 {
+ name
+ } else {
+ return Err(permission_error());
+ }
+ }
+ _ => {
+ return Err(permission_error());
+ }
+ );
let loader = self.loader_from_heap_evacuable(temp_v!(3));