]> Repositorios git - scryer-prolog.git/commitdiff
add missing permission error in compile_assert (#2271)
authorMark <[email protected]>
Thu, 4 Jan 2024 20:53:46 +0000 (13:53 -0700)
committerMark <[email protected]>
Thu, 4 Jan 2024 20:53:46 +0000 (13:53 -0700)
src/machine/loader.rs
src/machine/machine_errors.rs

index fb9b22bb936d5df33263be16b94f24c6cfa46305..ae2fad2b5132434800cff39e732b007f2b0c5805 100644 (file)
@@ -1972,11 +1972,13 @@ impl Machine {
             _ => 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() {
@@ -2015,7 +2017,11 @@ impl Machine {
                     .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 {
index 49d565100ebcddb2862bf78c86c341d426ac84fa..c2cbb4053ad69f9e89165afc751c82c6585c19e9 100644 (file)
@@ -488,6 +488,13 @@ impl MachineState {
                     .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)
             }
@@ -1005,6 +1012,7 @@ pub enum SessionError {
     CompilationError(CompilationError),
     CannotOverwriteBuiltIn(PredicateKey),
     CannotOverwriteBuiltInModule(Atom),
+    CannotOverwriteStaticProcedure(PredicateKey),
     ExistenceError(ExistenceError),
     ModuleDoesNotContainExport(Atom, PredicateKey),
     ModuleCannotImportSelf(Atom),