From: Mark Thom Date: Tue, 17 May 2022 02:45:45 +0000 (-0600) Subject: check asserta/2, assertz/2, abolish/2 for uninstantiated Module variables (#1475) X-Git-Tag: v0.9.1~26 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=b6f77f4e6f47c812cfba25a9c908f17491f664fd;p=scryer-prolog.git check asserta/2, assertz/2, abolish/2 for uninstantiated Module variables (#1475) --- 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) ->