From b6f77f4e6f47c812cfba25a9c908f17491f664fd Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Mon, 16 May 2022 20:45:45 -0600 Subject: [PATCH] check asserta/2, assertz/2, abolish/2 for uninstantiated Module variables (#1475) --- src/lib/builtins.pl | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/lib/builtins.pl b/src/lib/builtins.pl index be7b2cd3..3ddd056e 100644 --- a/src/lib/builtins.pl +++ b/src/lib/builtins.pl @@ -860,7 +860,8 @@ module_asserta_clause(Head, Body, Module) :- ). asserta_clause(Head, Body) :- - ( var(Head) -> throw(error(instantiation_error, asserta/1)) + ( var(Head) -> + throw(error(instantiation_error, asserta/1)) ; callable(Head), functor(Head, Name, Arity) -> ( Name == (:), Arity =:= 2 -> @@ -876,7 +877,8 @@ asserta_clause(Head, Body) :- call_asserta(Head, Body, Name, Arity, user) ; '$no_such_predicate'(user, Head) -> call_asserta(Head, Body, Name, Arity, user) - ; throw(error(permission_error(modify, static_procedure, Name/Arity), asserta/1)) + ; throw(error(permission_error(modify, static_procedure, Name/Arity), + asserta/1)) ) ; throw(error(type_error(callable, Head), asserta/1)) ). @@ -885,6 +887,9 @@ asserta_clause(Head, Body) :- asserta(Clause0) :- loader:strip_module(Clause0, Module, Clause), + ( var(Module) -> Module = user + ; true + ), ( Clause \= (_ :- _) -> Head = Clause, Body = true, @@ -941,6 +946,9 @@ assertz_clause(Head, Body) :- assertz(Clause0) :- loader:strip_module(Clause0, Module, Clause), + ( var(Module) -> Module = user + ; true + ), ( Clause \= (_ :- _) -> Head = Clause, Body = true, @@ -1088,6 +1096,9 @@ abolish(Pred) :- ( var(Pred) -> throw(error(instantiation_error, abolish/1)) ; Pred = Module:InnerPred -> + ( var(Module) -> Module = user + ; true + ), module_abolish(InnerPred, Module) ; Pred = Name/Arity -> ( var(Name) -> -- 2.54.0