From d8bd4fbea6fb97e69d33f9f7ce012daa2306e6fd Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Fri, 30 Apr 2021 20:36:56 -0600 Subject: [PATCH] fail when retracting undefined dynamic predicates (#918) --- src/lib/builtins.pl | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/lib/builtins.pl b/src/lib/builtins.pl index c95de3f5..c08b4af9 100644 --- a/src/lib/builtins.pl +++ b/src/lib/builtins.pl @@ -847,7 +847,7 @@ asserta_clause(Head, Body) :- asserta(Clause) :- ( Clause \= (_ :- _) -> Head = Clause, - Body = user:true, + Body = true, asserta_clause(Head, Body) ; Clause = (Head :- Body) -> asserta_clause(Head, Body) @@ -897,7 +897,7 @@ assertz_clause(Head, Body) :- assertz(Clause) :- ( Clause \= (_ :- _) -> Head = Clause, - Body = user:true, + Body = true, assertz_clause(Head, Body) ; Clause = (Head :- Body) -> assertz_clause(Head, Body) @@ -926,7 +926,9 @@ retract_module_clause(Head, Body, Module) :- ( var(Head) -> throw(error(instantiation_error, retract/1)) ; callable(Head), functor(Head, Name, Arity) -> - ( '$head_is_dynamic'(Module, Head) -> + ( '$no_such_predicate'(Module, Head) -> + '$fail' + ; '$head_is_dynamic'(Module, Head) -> ( Module == user -> call_retract(Head, Body, Name, Arity) ; call_module_retract(Head, Body, Name, Arity, Module) @@ -970,10 +972,10 @@ retract_clause(Head, Body) :- arg(1, Head, Module), arg(2, Head, F), retract_module_clause(F, Body, Module) - ; '$head_is_dynamic'(user, Head) -> - call_retract(Head, Body, Name, Arity) ; '$no_such_predicate'(user, Head) -> '$fail' + ; '$head_is_dynamic'(user, Head) -> + call_retract(Head, Body, Name, Arity) ; throw(error(permission_error(modify, static_procedure, Name/Arity), retract/1)) ) ; throw(error(type_error(callable, Head), retract/1)) -- 2.54.0