]> git.eshelyaron.com Git - sweep.git/commitdiff
; Improve detection of unsafe goal extraction
authorEshel Yaron <me@eshelyaron.com>
Sun, 8 Oct 2023 10:35:09 +0000 (12:35 +0200)
committerEshel Yaron <me@eshelyaron.com>
Sun, 8 Oct 2023 10:35:09 +0000 (12:35 +0200)
* sweep.pl (sweep_extract_goal_update_safety/4): Adjust.
* sweeprolog-tests.el: Add more tests.

sweep.pl
sweeprolog-tests.el

index 0e61e2886ed06c438beb75af6b22789df5030d4f..62151512a2f5fbfb621d0eefa75ea5f02df5e807 100644 (file)
--- a/sweep.pl
+++ b/sweep.pl
@@ -1843,11 +1843,13 @@ sweep_extract_goal_update_clause_string((_;_), 2, [AltPos,_], ClauseString0, Off
     string_concat(ClauseString1, ClauseAfterAlt, ClauseString).
 sweep_extract_goal_update_clause_string(_, _, _, ClauseString, Offset, ClauseString, Offset).
 
-sweep_extract_goal_update_safety((_,_), _, Safe, Safe) :-
+sweep_extract_goal_update_safety((_,_), _, _, false) :-
     !.
-sweep_extract_goal_update_safety((_;_), _, Safe, Safe) :-
+sweep_extract_goal_update_safety((_;_), _, _, false) :-
     !.
-sweep_extract_goal_update_safety((_->_), 2, Safe, Safe) :-
+sweep_extract_goal_update_safety((_->_), 2, _, false) :-
+    !.
+sweep_extract_goal_update_safety((_*->_), 2, _, false) :-
     !.
 sweep_extract_goal_update_safety(_, _, _, true).
 
index 86d7136516496d2eafe96ef23dd1329ec5172620..b65c6031d869338489b738d64d0c6c29d7542935 100644 (file)
@@ -1852,6 +1852,42 @@ bbb(A, B, C, D) :-
     C = D"
                        "true" "foo" 0 nil))))
 
+(sweeprolog-deftest extract-region-to-predicate-cut-1 ()
+  "Test `sweeprolog-extract-region-to-predicate' in presence of a cut."
+  ""
+  (should
+   (equal
+    (sweeprolog--extract-goal "
+bar :-
+    call((foo, ! ; baz)).
+"
+     12 32 "spam")
+    '("spam" "spam" ":-" "call((foo, ! ; baz))" "true" "spam" 0 nil))))
+
+(sweeprolog-deftest extract-region-to-predicate-cut-2 ()
+  "Test `sweeprolog-extract-region-to-predicate' in presence of a cut."
+  ""
+  (should
+   (equal
+    (sweeprolog--extract-goal "
+bar :-
+    call((foo, ! ; baz)).
+"
+     17 31 "spam")
+    '("spam" "spam" ":-" "(foo, ! ; baz)" "true" "spam" 0 nil))))
+
+(sweeprolog-deftest extract-region-to-predicate-cut-3 ()
+  "Test `sweeprolog-extract-region-to-predicate' in presence of a cut."
+  ""
+  (should
+   (equal
+    (sweeprolog--extract-goal "
+bar :-
+    call((foo, ! ; baz)).
+"
+     18 24 "spam")
+    '("spam" "spam" ":-" "foo, !" nil "spam" 0 nil))))
+
 (sweeprolog-deftest extract-region-to-predicate-dcg ()
                     "Test `sweeprolog-extract-region-to-predicate'."
                     ""