add missing permission error in compile_assert (#2271)
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
Reference in New Issue
Block a user