]> Repositorios git - scryer-prolog.git/commitdiff
Fix current_predicate/1 predicate error checking
authorPaulo Moura <[email protected]>
Sun, 16 May 2021 22:49:21 +0000 (23:49 +0100)
committerPaulo Moura <[email protected]>
Sun, 16 May 2021 22:49:21 +0000 (23:49 +0100)
src/lib/builtins.pl

index 334deb66cd744934ddd6aaa8233d9c5952bfffde..616a2b0d25fe631d744bf6fe4e57fa6dc9ba26e5 100644 (file)
@@ -1083,8 +1083,17 @@ abolish(Pred) :-
 
 
 current_predicate(Pred) :-
-    (  nonvar(Pred), Pred \= _ / _
-    -> throw(error(type_error(predicate_indicator, Pred), current_predicate/1))
+    (  var(Pred) ->
+       '$get_next_db_ref'(Ref, _),
+       '$iterate_db_refs'(Ref, Pred)
+    ;  Pred \= _/_ ->
+       throw(error(type_error(predicate_indicator, Pred), current_predicate/1))
+    ;  Pred = Name/Arity,
+       (  nonvar(Name), \+ atom(Name)
+       ;  nonvar(Arity), \+ integer(Arity)
+       ;  integer(Arity), Arity < 0
+       ) ->
+       throw(error(type_error(predicate_indicator, Pred), current_predicate/1))
     ;  '$get_next_db_ref'(Ref, _),
        '$iterate_db_refs'(Ref, Pred)
     ).