_ => CompilationTarget::Module(module_name),
};
- let stub_gen = || match append_or_prepend {
- AppendOrPrepend::Append => functor_stub(atom!("assertz"), 1),
- AppendOrPrepend::Prepend => functor_stub(atom!("asserta"), 1),
+ let key = match append_or_prepend {
+ AppendOrPrepend::Append => (atom!("assertz"), 1),
+ AppendOrPrepend::Prepend => (atom!("asserta"), 1),
};
+ let stub_gen = || functor_stub(key.0, key.1);
+
let head = self.deref_register(2);
if head.is_var() {
.map(|code_idx| code_idx.get_tag())
.unwrap_or(IndexPtrTag::DynamicUndefined);
- idx_tag == IndexPtrTag::DynamicUndefined || idx_tag == IndexPtrTag::Undefined
+ if idx_tag == IndexPtrTag::Index {
+ return Err(SessionError::CannotOverwriteStaticProcedure((name, arity)));
+ } else {
+ idx_tag == IndexPtrTag::Undefined || idx_tag == IndexPtrTag::DynamicUndefined
+ }
} else if is_builtin {
return Err(SessionError::CannotOverwriteBuiltIn((name, arity)));
} else {
.into_iter()
.collect::<MachineStub>(),
),
+ SessionError::CannotOverwriteStaticProcedure(key) => self.permission_error(
+ Permission::Modify,
+ atom!("static_procedure"),
+ functor_stub(key.0, key.1)
+ .into_iter()
+ .collect::<MachineStub>(),
+ ),
SessionError::CannotOverwriteBuiltInModule(module) => {
self.permission_error(Permission::Modify, atom!("static_module"), module)
}
CompilationError(CompilationError),
CannotOverwriteBuiltIn(PredicateKey),
CannotOverwriteBuiltInModule(Atom),
+ CannotOverwriteStaticProcedure(PredicateKey),
ExistenceError(ExistenceError),
ModuleDoesNotContainExport(Atom, PredicateKey),
ModuleCannotImportSelf(Atom),