]> Repositorios git - scryer-prolog.git/commitdiff
clamp lower_bound_of_target_clause index (#840)
authorMark <[email protected]>
Mon, 18 Dec 2023 22:21:30 +0000 (15:21 -0700)
committerMark <[email protected]>
Mon, 18 Dec 2023 22:21:30 +0000 (15:21 -0700)
src/machine/compile.rs
src/machine/load_state.rs

index 048631aeae10cc69173e4f9efe3e75b547041553..d1c3e016839a1ddb7944c5c45ee437dbbadb7762 100644 (file)
@@ -49,7 +49,7 @@ fn lower_bound_of_target_clause(skeleton: &mut PredicateSkeleton, target_pos: us
 
     let index = target_pos - 1;
 
-    if let Some(index_loc) = skeleton.clauses[index]
+    let index = if let Some(index_loc) = skeleton.clauses[index]
         .opt_arg_index_key
         .switch_on_term_loc()
     {
@@ -66,7 +66,9 @@ fn lower_bound_of_target_clause(skeleton: &mut PredicateSkeleton, target_pos: us
         }
     } else {
         index
-    }
+    };
+
+    index.clamp(0, skeleton.clauses.len() - 1)
 }
 
 fn derelictize_try_me_else(
index 456cfb9aa7b4ba73193905c271cde61bcb152efb..f340ad0331cc1995ae17722e69e37af5dbd303a1 100644 (file)
@@ -504,13 +504,9 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
             if !code_index.is_undefined() && !code_index.is_dynamic_undefined() {
                 let old_index_ptr = code_index.replace(IndexPtr::undefined());
 
-                self.payload
-                    .retraction_info
-                    .push_record(RetractionRecord::ReplacedModulePredicate(
-                        module_name,
-                        *key,
-                        old_index_ptr,
-                    ));
+                self.payload.retraction_info.push_record(
+                    RetractionRecord::ReplacedModulePredicate(module_name, *key, old_index_ptr),
+                );
             }
         }