summaryrefslogtreecommitdiff
path: root/loader.pl
diff options
context:
space:
mode:
authorPeter Mikkelsen <peter@pmikkelsen.com>2021-07-22 18:24:58 +0000
committerPeter Mikkelsen <peter@pmikkelsen.com>2021-07-22 18:24:58 +0000
commit5fe8b9865cfbd7388b8f6355a73b1436d40cfb1e (patch)
treec7ec08d8435881d103223d22672ad3d07b4d821a /loader.pl
parentfd10cf6997473226272b397b0ff6ebd87bd4d161 (diff)
Make predicates private and static by default, and make them dynamic when using the dynamic/1 predicate
Diffstat (limited to 'loader.pl')
-rw-r--r--loader.pl14
1 files changed, 13 insertions, 1 deletions
diff --git a/loader.pl b/loader.pl
index 9126c1f..69fc2f9 100644
--- a/loader.pl
+++ b/loader.pl
@@ -70,8 +70,20 @@ handle_clause(Head, Body, Singletons, Module) :-
functor(Head, Name, Arity),
PredicateIndicator = Name / Arity,
warn_singletons(PredicateIndicator, Singletons),
- Module:assertz(Head :- Body).
+ Module:'$insert_clause'(Head :- Body).
+handle_directive(dynamic(PI), Module, Module) :-
+ is_nonvar(PI),
+ ( list(PI)
+ -> [First|Rest] = PI,
+ handle_directive(dynamic(First), Module, Module),
+ handle_directive(dynamic(Rest), Module, Module)
+ ; is_predicate_indicator(PI),
+ Name / Arity = PI,
+ functor(Tmp, Name, Arity),
+ Module:asserta(Tmp),
+ Module:retract(Tmp)
+ ).
handle_directive(op(Priority, Specifier, Operator), Module, Module) :-
Module:op(Priority, Specifier, Operator).
handle_directive(include(F), Module, NewModule) :-