19:- module( expand_macros,
32:-
multifile allowed_module/2.
34:-
dynamic number_of_expansions/1.
36number_of_expansions(
0).
44compile_aux([
Clause|Clauses],
Module)
:-
59 compile_term([
Clause|Clauses],
Module)
63compile_term([
Clause|Clauses],
Module)
:-
65 compile_term(
Clauses,
Module).
67append_args(
Term,
Args,
NewTerm)
:-
68 Term =.. [
Meta|OldArgs],
69 append(
OldArgs,
Args,
GoalArgs),
70 NewTerm =.. [
Meta|GoalArgs].
72aux_preds(
Module:Meta,
MetaVars,
Pred,
PredVars,
Proto,
_,
OModule)
:- aux_preds,
73 aux_preds(
Meta,
MetaVars,
Pred,
PredVars,
Proto,
Module,
OModule).
74aux_preds(
Meta,
MetaVars,
Pred,
PredVars,
Proto,
Module,
Module)
:-
76 aux_args(
Args,
MetaVars,
PredArgs,
PredVars,
ProtoArgs),
77 Pred =.. [
F|PredArgs],
78 Proto =.. [
F|ProtoArgs].
80aux_args([], [], [], [], []).
81aux_args([
Arg|Args],
MVars, [
Arg|PArgs],
PVars, [
Arg|ProtoArgs])
:-
83 aux_args(
Args,
MVars,
PArgs,
PVars,
ProtoArgs).
84aux_args([
Arg|Args], [
Arg|MVars], [
PVar|PArgs], [
PVar|PVars], [
'_'|ProtoArgs])
:-
85 aux_args(
Args,
MVars,
PArgs,
PVars,
ProtoArgs).
87pred_name(
Macro,
Arity,
_ ,
Name)
:-
88 transformation_id(
Id),
90 atomic_concat([
'$$$__Auxiliary_predicate__ for',
Macro,
'/',
Arity,
' ',
Id],
Name).
92transformation_id(
Id)
:-
93 retract(number_of_expansions(
Id)),
95 assert(number_of_expansions(
Id1)).
98harmless_dcgexception(instantiation_error).
99harmless_dcgexception(type_error(callable,
_)).
102allowed_expansion(
QExpand)
:-
103 strip_module(
QExpand,
Mod,
Pred),
104 goal_expansion_allowed(
Pred,
Mod).
106goal_expansion_allowed(
Pred,
Mod)
:-
107 allowed_module(
Pred,
Mod),
108 once( prolog_load_context(
_,
_) ),
113allowed_module(checklist(
_,
_),expand_macros).
114allowed_module(checklist(
_,
_),apply_macros).
115allowed_module(checklist(
_,
_),maplist).
116allowed_module(maplist(
_,
_),expand_macros).
117allowed_module(maplist(
_,
_),apply_macros).
118allowed_module(maplist(
_,
_),maplist).
119allowed_module(maplist(
_,
_,
_),expand_macros).
120allowed_module(maplist(
_,
_,
_),apply_macros).
121allowed_module(maplist(
_,
_,
_),maplist).
122allowed_module(maplist(
_,
_,
_,
_),expand_macros).
123allowed_module(maplist(
_,
_,
_,
_),apply_macros).
124allowed_module(maplist(
_,
_,
_,
_),maplist).
125allowed_module(maplist(
_,
_,
_,
_,
_),expand_macros).
126allowed_module(maplist(
_,
_,
_,
_,
_),apply_macros).
127allowed_module(maplist(
_,
_,
_,
_,
_),maplist).
128allowed_module(maplist(
_,
_,
_,
_,
_,
_),expand_macros).
129allowed_module(maplist(
_,
_,
_,
_,
_,
_),apply_macros).
130allowed_module(maplist(
_,
_,
_,
_,
_,
_),maplist).
131allowed_module(selectlist(
_,
_,
_),expand_macros).
132allowed_module(selectlist(
_,
_,
_),apply_macros).
133allowed_module(selectlist(
_,
_,
_),maplist).
134allowed_module(include(
_,
_,
_),expand_macros).
135allowed_module(include(
_,
_,
_),apply_macros).
136allowed_module(include(
_,
_,
_),maplist).
137allowed_module(exclude(
_,
_,
_),expand_macros).
138allowed_module(exclude(
_,
_,
_),apply_macros).
139allowed_module(exclude(
_,
_,
_),maplist).
140allowed_module(partition(
_,
_,
_,
_),expand_macros).
141allowed_module(partition(
_,
_,
_,
_),apply_macros).
142allowed_module(partition(
_,
_,
_,
_),maplist).
143allowed_module(partition(
_,
_,
_,
_,
_),expand_macros).
144allowed_module(partition(
_,
_,
_,
_,
_),apply_macros).
145allowed_module(partition(
_,
_,
_,
_,
_),maplist).
146allowed_module(convlist(
_,
_,
_),expand_macros).
147allowed_module(convlist(
_,
_,
_),apply_macros).
148allowed_module(convlist(
_,
_,
_),maplist).
149allowed_module(sumlist(
_,
_,
_,
_),expand_macros).
150allowed_module(sumlist(
_,
_,
_,
_),apply_macros).
151allowed_module(sumlist(
_,
_,
_,
_),maplist).
152allowed_module(mapargs(
_,
_,
_),expand_macros).
153allowed_module(mapargs(
_,
_,
_),apply_macros).
154allowed_module(mapargs(
_,
_,
_),maplist).
155allowed_module(sumargs(
_,
_,
_,
_),expand_macros).
156allowed_module(sumargs(
_,
_,
_,
_),apply_macros).
157allowed_module(sumargs(
_,
_,
_,
_),maplist).
158allowed_module(mapnodes(
_,
_,
_),expand_macros).
159allowed_module(mapnodes(
_,
_,
_),apply_macros).
160allowed_module(mapnodes(
_,
_,
_),maplist).
161allowed_module(checknodes(
_,
_),expand_macros).
162allowed_module(checknodes(
_,
_),apply_macros).
163allowed_module(checknodes(
_,
_),maplist).
164allowed_module(sumnodes(
_,
_,
_,
_),expand_macros).
165allowed_module(sumnodes(
_,
_,
_,
_),apply_macros).
166allowed_module(sumnodes(
_,
_,
_,
_),maplist).
read_from_chars( + Chars, - Term)
append(? List1,? List2,? List3)