]> Repositorios git - scryer-prolog.git/commitdiff
Revert "improve performance of lower_bound_of_target_clause (#1598)"
authorMark <[email protected]>
Fri, 15 Dec 2023 07:42:58 +0000 (00:42 -0700)
committerMark <[email protected]>
Fri, 15 Dec 2023 07:42:58 +0000 (00:42 -0700)
This reverts commit 8938331915c53e34be8f98002fe8d56d8b7ada08.

src/lib/builtins.pl
src/machine/compile.rs

index 1a2b35d4e17ebc9803c02d0e8d60f441d1d4da91..9cb533d1f2d8e87da43709483d83007260252b1c 100644 (file)
@@ -1238,7 +1238,6 @@ call_retract_helper(Head, Body, P, Module) :-
        ClauseQualifier = builtins
     ;  ClauseQualifier = Module
     ),
-    '$debug_hook',
     ClauseQualifier:'$clause'(Head, Body),
     '$get_clause_p'(Head, P, Module).
 
index da2e4bc1ba7a54ea826e4bc0d3ad9a6fcd385553..296d076f05e0d39e274b31c9975f3e9e5185ef3a 100644 (file)
@@ -42,38 +42,42 @@ pub(super) fn bootstrapping_compile(
     Ok(())
 }
 
-fn lower_bound_of_target_clause(skeleton: &mut PredicateSkeleton, target_pos: usize) -> usize {
+fn lower_bound_of_target_clause(skeleton: &PredicateSkeleton, target_pos: usize) -> usize {
     if target_pos == 0 {
         return 0;
     }
 
-    let index = target_pos - 1;
-    let arg_num = skeleton.clauses[index].opt_arg_index_key.arg_num();
+    let arg_num = skeleton.clauses[target_pos - 1].opt_arg_index_key.arg_num();
 
     if arg_num == 0 {
-        return index;
+        return target_pos - 1;
     }
 
-    skeleton
-        .clauses[target_pos]
-        .opt_arg_index_key
-        .switch_on_term_loc()
-        .map(|index_loc| {
-            let search_result = skeleton.clauses.make_contiguous()
-                [0 .. skeleton.core.clause_assert_margin]
-                .partition_point(|clause_index_info| {
-                    clause_index_info.clause_start > index_loc
-                });
-
-            if search_result < skeleton.core.clause_assert_margin {
-                search_result
-            } else {
-                skeleton.clauses.make_contiguous()[skeleton.core.clause_assert_margin ..]
-                    .partition_point(|clause_index_info| {
-                        clause_index_info.clause_start < index_loc
-                    }) + skeleton.core.clause_assert_margin
+    let mut index_loc_opt = None;
+
+    for index in (0..target_pos).rev() {
+        let current_arg_num = skeleton.clauses[index].opt_arg_index_key.arg_num();
+
+        if current_arg_num == 0 || current_arg_num != arg_num {
+            return index + 1;
+        }
+
+        if let Some(index_loc) = index_loc_opt {
+            let current_index_loc = skeleton.clauses[index]
+                .opt_arg_index_key
+                .switch_on_term_loc();
+
+            if Some(index_loc) != current_index_loc {
+                return index + 1;
             }
-        }).unwrap_or(index)
+        } else {
+            index_loc_opt = skeleton.clauses[index]
+                .opt_arg_index_key
+                .switch_on_term_loc();
+        }
+    }
+
+    0
 }
 
 fn derelictize_try_me_else(