From: Paulo Moura Date: Sun, 16 May 2021 22:49:21 +0000 (+0100) Subject: Fix current_predicate/1 predicate error checking X-Git-Tag: v0.9.0~63^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=0e263dd7536dff8a98ae6f94b62bbd45051c0b2a;p=scryer-prolog.git Fix current_predicate/1 predicate error checking --- diff --git a/src/lib/builtins.pl b/src/lib/builtins.pl index 334deb66..616a2b0d 100644 --- a/src/lib/builtins.pl +++ b/src/lib/builtins.pl @@ -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) ).