add missing permission error in compile_assert (#2271)

This commit is contained in:
Mark
2024-01-04 13:53:46 -07:00
parent ec97ee5d41
commit 851ea2c45b
2 changed files with 18 additions and 4 deletions

View File

@@ -1972,11 +1972,13 @@ impl Machine {
_ => CompilationTarget::Module(module_name), _ => CompilationTarget::Module(module_name),
}; };
let stub_gen = || match append_or_prepend { let key = match append_or_prepend {
AppendOrPrepend::Append => functor_stub(atom!("assertz"), 1), AppendOrPrepend::Append => (atom!("assertz"), 1),
AppendOrPrepend::Prepend => functor_stub(atom!("asserta"), 1), AppendOrPrepend::Prepend => (atom!("asserta"), 1),
}; };
let stub_gen = || functor_stub(key.0, key.1);
let head = self.deref_register(2); let head = self.deref_register(2);
if head.is_var() { if head.is_var() {
@@ -2015,7 +2017,11 @@ impl Machine {
.map(|code_idx| code_idx.get_tag()) .map(|code_idx| code_idx.get_tag())
.unwrap_or(IndexPtrTag::DynamicUndefined); .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 { } else if is_builtin {
return Err(SessionError::CannotOverwriteBuiltIn((name, arity))); return Err(SessionError::CannotOverwriteBuiltIn((name, arity)));
} else { } else {

View File

@@ -488,6 +488,13 @@ impl MachineState {
.into_iter() .into_iter()
.collect::<MachineStub>(), .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) => { SessionError::CannotOverwriteBuiltInModule(module) => {
self.permission_error(Permission::Modify, atom!("static_module"), module) self.permission_error(Permission::Modify, atom!("static_module"), module)
} }
@@ -1005,6 +1012,7 @@ pub enum SessionError {
CompilationError(CompilationError), CompilationError(CompilationError),
CannotOverwriteBuiltIn(PredicateKey), CannotOverwriteBuiltIn(PredicateKey),
CannotOverwriteBuiltInModule(Atom), CannotOverwriteBuiltInModule(Atom),
CannotOverwriteStaticProcedure(PredicateKey),
ExistenceError(ExistenceError), ExistenceError(ExistenceError),
ModuleDoesNotContainExport(Atom, PredicateKey), ModuleDoesNotContainExport(Atom, PredicateKey),
ModuleCannotImportSelf(Atom), ModuleCannotImportSelf(Atom),