14
16:- module(virtualize_source,
17 [
18cnas/3,
19nb_current_or_nil/2,
20safe_virtualize/3,
21same_terms/2,
22decl_wrapped/4,
23sd_goal_expansion/3,
24skipped_dirs/1,
25swc/0,
26virtualize_code/3,
27virtualize_code_each/4,
28virtualize_code_fa/5,
29virtualize_ereq/2,
30virtualize_source/3,
31virtualize_source_file/0,
32virtualize_source_file/1,
33virtualize_source_file/2,
34could_safe_virtualize/0,
35vwc/0
36]). 37
38:- set_module(class(library)). 39:- reexport(library(must_trace)). 40:- reexport(library(loop_check)). 41
42
43:- module_transparent((
44cnas/3,
45nb_current_or_nil/2,
46safe_virtualize/3,
47same_terms/2,
48decl_wrapped/4,
49sd_goal_expansion/3,
50skipped_dirs/1,
51swc/0,
52virtualize_code/3,
53virtualize_code_each/4,
54virtualize_code_fa/5,
55virtualize_ereq/2,
56virtualize_source/3,
57virtualize_source_file/0,
58virtualize_source_file/1,
59virtualize_source_file/2,
60vwc/0
61 )). 62
63:- module_transparent((virtualize_ereq_source/0)). 64:- use_module(predicate_inheritance).
65:- use_module(retry_undefined).
66
67
68
69:- meta_predicate map_compound_args(3,*,*,*). 70:- meta_predicate map_compound_args(2,*,*). 71
72:- module_transparent(declared_to_wrap/3). 73
74
75:- thread_local(t_l:disable_px/0). 76
77:- reexport(library(hook_database)). 78
79nb_current_or_nil(N,V):- quietly((nb_current(N,V)->true;V=[])).
80
89
90:- multifile(baseKB:ignore_file_mpreds/1). 91:- dynamic(baseKB:ignore_file_mpreds/1). 92
93:- asserta((baseKB:ignore_file_mpreds(M):- skipped_dirs(M))). 94
95skipped_dirs(Dir):-skipped_dirs0(M),exists_directory(M),absolute_file_name(M,Dir).
96skipped_dirs0(M):-expand_file_search_path(swi(''),M).
97skipped_dirs0(M):-expand_file_search_path(pack(logicmoo_util),M).
98skipped_dirs0(M):-expand_file_search_path(pack('swish/..'),M).
99skipped_dirs0(M):-expand_file_search_path(pack('wam_common_lisp/..'),M).
101
102:- dynamic(lmconf:should_virtualize_source_file/2). 103
105ignore_mpreds_in_file:-if_defined(t_l:disable_px,fail),!.
106ignore_mpreds_in_file:-prolog_load_context(file,F),ignore_mpreds_in_file(F),!.
107ignore_mpreds_in_file:-prolog_load_context(source,F),\+prolog_load_context(file,F),ignore_mpreds_in_file(F),!.
108
109ignore_mpreds_in_file(F):-nonvar(F),if_defined(baseKB:registered_mpred_file(F),fail),!,fail.
110ignore_mpreds_in_file(S):- lmconf:should_virtualize_source_file(S,true),!,fail.
111ignore_mpreds_in_file(F):-use_file_filter_cached(baseKB:ignore_file_mpreds(F)).
112
113use_file_filter_cached(Module:Check):-
114 Check =..[Include,F],
115 (Module:Check *-> true ;
116 ((call(Module:Include,Base),
117 (Base=F -> true ;
118 (atom(F),atom(Base),
119 (atom_concat(Base,_,F);atom_concat(_,Base,F)),
120 asserta(Module:Check)))))).
121
122:- asserta(baseKB:ignore_file_mpreds('.data')).
128get_virtualizer_mode(ge,F,A,HowIn):- suggest_m(M), declared_to_wrap(M,F,A,HowOut),!,must(HowIn=HowOut),HowOut\==never.
129
140
141:- multifile(baseKB:safe_wrap/4). 142:- module_transparent(baseKB:safe_wrap/4). 143:- dynamic(baseKB:safe_wrap/4). 144
145declared_to_wrap(_M,O,_,_):- bad_functor_check(O),!,trace_or_throw(bad_functor_check(O)),fail.
146declared_to_wrap(_M,mtHybrid,1,clause_b).
147declared_to_wrap(_M,F,A,on_x_debug):- integer(A),virtualize_safety(F,A).
148declared_to_wrap(M,F,A,HowIn):- clause_b(safe_wrap(M,F,A,HowIn)),!.
149declared_to_wrap(_,F,A,HowIn):- clause_b(safe_wrap(_,F,A,HowIn)),!.
150declared_to_wrap(_M,F,A,dbreq):- virtualize_dbreq(F,A), virtualize_dbreq_source.
151declared_to_wrap(M,F,A,ereq):- clause_b(mpred_prop(M,F,A,prologHybrid)),!.
152declared_to_wrap(M,F,A,ereq):- virtualize_m_ereq(M,F,A), virtualize_ereq_source.
153declared_to_wrap(M,F,A,_):- prolog_load_context(module,M),never_virtualize(M:F/A),!,fail.
154declared_to_wrap(M,F,A,_):- clause_b(mpred_prop(M,F,A,prologBuiltin)),!,fail.
155declared_to_wrap(M,F,A,call_u):- clause_b(mpred_prop(M,F,A,_)),!.
156
157declared_to_wrap(M,F,A,ereq):- atom(F),integer(A),
158 functor(Goal,F,A),
159 160 baseKB = M,
161 predicate_property(M:Goal,defined),
162 \+ predicate_property(M:Goal,static),!.
163 164
165
166
167
168is_dynamic_module(user).
169is_dynamic_module(baseKB).
170is_dynamic_module(lmcache).
171is_dynamic_module(lmconf).
172is_dynamic_module(tlbugger).
173is_dynamic_module(t_l).
174is_dynamic_module(prolog).
175is_dynamic_module(eggdrop).
176is_dynamic_module(M):- clause_b(mtHybrid(M)).
177
178is_static_module(system).
179is_static_module(file_scope).
180is_static_module(mpred_core).
181is_static_module(M):- is_dynamic_module(M),!,fail.
182is_static_module(M):- module_property(M,class(development)),!,fail.
183is_static_module(M):- module_property(M,class(library)),!.
184is_static_module(M):- module_property(M,class(system)),!.
185
187virtualize_dbreq_source :- prolog_load_context(source,F),
188 (atom_concat('common_logic_',_,F);atom_concat('logicmoo_',_,F);atom_concat('mpred_',_,F)),!.
189virtualize_dbreq_source :- prolog_load_context(module,M), \+ is_static_module(M).
191
192virtualize_ereq_source :- prolog_load_context(module,M), member(M,['mpred_core','mpred_expansion']),!,fail.
193virtualize_ereq_source.
194
195bad_functor_check(O):-var(O).
196bad_functor_check(:):- !,dumpST,dtrace.
199
200
202virtualize_safety(O,_):- bad_functor_check(O),!,fail.
203
204virtualize_safety((=..),2).
205virtualize_safety(functor,3).
206virtualize_safety(arg,3).
207virtualize_safety(is,2).
211
213
214
215never_virtualize(O):- bad_functor_check(O),!,fail.
216never_virtualize(_:','/2):-!,fail.
217never_virtualize(_:F/_):- !, never_virtualize_atom(F),!.
218never_virtualize(thread_util:_/A):-integer(A). 219never_virtualize(M:F/A):- clause_b(mpred_prop(M,F,A,prologBuiltin)),!.
220never_virtualize(_M:F/A):- current_predicate(mpred_core:F/A),!.
221never_virtualize(M:F/A):- functor(P,F,A),source_file(M:P,_SF),
222 \+ predicate_property(M:P,meta_predicate(_)),
223 \+ predicate_property(M:P,transparent),
224 225 ain(baseKB:mpred_prop(M,F,A,prologBuiltin)).
226never_virtualize(M:F/A):- functor(P,F,A),source_file(M:P,SF),
227 \+ predicate_property(M:P,meta_predicate(_)),
228 \+ predicate_property(M:P,transparent), !,
229 dmsg(never_virtualize(M:F/A,SF)),
230 aina(baseKB:mpred_prop(M,F,A,prologBuiltin)).
231never_virtualize(_:F/_):- never_virtualize_atom(F),!.
232never_virtualize(_:FA):- !,never_virtualize(FA),!.
233
234never_virtualize_atom(Atom):- \+ atom(Atom),!,fail.
235never_virtualize_atom(F):- functor(C,F,1),predicate_property(system:C,static),
236 \+ predicate_property(system:C,transparent).
237never_virtualize_atom(ereq).
238never_virtualize_atom(dbreq).
239never_virtualize_atom(call_u).
240never_virtualize_atom(on_x_debug).
241never_virtualize_atom(clause_u).
242never_virtualize_atom(lookup_u).
243never_virtualize_atom(clause_b).
244never_virtualize_atom(('.')).
245never_virtualize_atom(('[]')).
246never_virtualize_atom(('[|]')).
247never_virtualize_atom(add).
248never_virtualize_atom(dmsg).
249never_virtualize_atom(member).
250never_virtualize_atom(fully_expand).
251never_virtualize_atom(wdmsg).
252never_virtualize_atom(trace_or_throw).
253
254
255never_virtualize_atom(padd).
256never_virtualize_atom(del).
257never_virtualize_atom(ain_expanded).
258never_virtualize_atom(meta_predicate).
259never_virtualize_atom(dynamic).
260never_virtualize_atom(clr).
261never_virtualize_atom(ain).
262never_virtualize_atom(props).
263never_virtualize_atom(=).
264never_virtualize_atom(==).
265never_virtualize_atom(iprop).
266never_virtualize_atom(aina).
267never_virtualize_atom(decl_as).
268never_virtualize_atom(ainz).
269never_virtualize_atom((':-')).
270never_virtualize_atom(F):- suggest_m(M), clause_b(mpred_prop(M,F,_,pfcBuiltin)). 272
273never_virtualize_atom(Atom):- never_virtualize2(Atom).
274never_virtualize_atom(Atom):- atom(Atom),!,atom_concat('mpred_',_,Atom). 275
276
277never_virtualize2((/)).
278never_virtualize2((//)).
279never_virtualize2(call).
280never_virtualize2(fix_mp).
281never_virtualize2(apply).
282
283plz_never_virtualize(on_x_debug).
284
285
287virtualize_dbreq(O,_):- bad_functor_check(O),!,fail.
288virtualize_dbreq(abolish,1).
289virtualize_dbreq(abolish,2).
290virtualize_dbreq(assert,1).
291virtualize_dbreq(assert,2).
292virtualize_dbreq(asserta,1).
293virtualize_dbreq(asserta,2).
294virtualize_dbreq(assertz,1).
295virtualize_dbreq(assertz,2).
296virtualize_dbreq(nth_clause,3).
297virtualize_dbreq(clause,2).
298virtualize_dbreq(clause,3).
299virtualize_dbreq(retract,1).
300virtualize_dbreq(listing,1).
301virtualize_dbreq(clause_property,2).
302virtualize_dbreq(retractall,1).
303virtualize_dbreq(recorda,_).
304virtualize_dbreq(recordz,_).
305virtualize_dbreq(recorded,_).
306virtualize_dbreq(erase,1).
307
308
309
310
311virtualize_m_ereq(_M,F,A):- virtualize_ereq(F,A).
312virtualize_ereq(O,_):- bad_functor_check(O),!,fail.
313
315
318
319virtualize_ereq(t,_).
320virtualize_ereq(t,2).
321virtualize_ereq(t,3).
322
323virtualize_ereq(functorDeclares,1).
324
325virtualize_ereq(mtCore,1).
326virtualize_ereq(mtProlog,1).
327virtualize_ereq(mtHybrid,1).
328virtualize_ereq(mtExact,1).
329virtualize_ereq(mtGlobal,1).
330virtualize_ereq(arity,2).
331
332
333virtualize_ereq(lambda,5).
334
335virtualize_ereq(mpred_f,_).
336virtualize_ereq(mpred_f,4).
337virtualize_ereq(mpred_f,5).
338virtualize_ereq(mpred_f,6).
339virtualize_ereq(mpred_f,7).
340virtualize_ereq(props,2).
341
342
343
344
345virtualize_ereq(mpred_prop,4).
346
347virtualize_ereq(pfcControlled,1).
348virtualize_ereq(pfcRHS,1).
349virtualize_ereq(predicateConventionMt,2).
350virtualize_ereq(prologBuiltin,1).
351virtualize_ereq(prologDynamic,1).
352virtualize_ereq(prologHybrid,1).
353virtualize_ereq(functorIsMacro,1).
354virtualize_ereq(prologSideEffects,1).
355
356virtualize_ereq(singleValuedInArg,2).
357virtualize_ereq(singleValuedInArgAX,3).
358virtualize_ereq(support_hilog,2).
359virtualize_ereq(rtNotForUnboundPredicates,1).
360
361virtualize_ereq(ttExpressionType,1).
362virtualize_ereq(ttRelationType,1).
363
364
365
366virtualize_ereq(spft,3).
367virtualize_ereq(==>,_).
368virtualize_ereq(<==>,_).
369virtualize_ereq((<--),2).
370
371
372virtualize_ereq(F,A):-virtualize_ereq_plz_move_dmiles(F,A).
373
375
376virtualize_ereq_plz_move_dmiles(call_OnEachLoad,1).
377
378virtualize_ereq_plz_move_dmiles(prologKIF,1).
379virtualize_ereq_plz_move_dmiles(prologPTTP,1).
380
381virtualize_ereq_plz_move_dmiles(use_ideep_swi,0).
382virtualize_ereq_plz_move_dmiles(meta_argtypes,1).
383virtualize_ereq_plz_move_dmiles(coerce_hook,_).
384virtualize_ereq_plz_move_dmiles(agent_text_command,_).
385virtualize_ereq_plz_move_dmiles(agent_command,_).
386virtualize_ereq_plz_move_dmiles(isa,2).
387virtualize_ereq_plz_move_dmiles(genls,2).
388virtualize_ereq_plz_move_dmiles(nameString,2).
389virtualize_ereq_plz_move_dmiles(argIsa,3).
390virtualize_ereq_plz_move_dmiles(argQuotedIsa,3).
391virtualize_ereq_plz_move_dmiles(cyckb_t_e2c,3).
392virtualize_ereq_plz_move_dmiles(cyckb_t_e2c,4).
393virtualize_ereq_plz_move_dmiles(cyckb_t_e2c,_).
394virtualize_ereq_plz_move_dmiles(completeExtentEnumerable,1).
395virtualize_ereq_plz_move_dmiles(completelyAssertedCollection,1).
396virtualize_ereq_plz_move_dmiles(constrain_args_pttp,2).
397virtualize_ereq_plz_move_dmiles(cycPlus2,2).
398virtualize_ereq_plz_move_dmiles(cycPred,2).
399virtualize_ereq_plz_move_dmiles(decided_not_was_isa,2).
400virtualize_ereq_plz_move_dmiles(mudKeyword,2).
401virtualize_ereq_plz_move_dmiles(resultIsa,2).
402virtualize_ereq_plz_move_dmiles(tCol,1).
403virtualize_ereq_plz_move_dmiles(tPred,1).
404virtualize_ereq_plz_move_dmiles(tRelation,1).
405virtualize_ereq_plz_move_dmiles(tAgent,1).
406virtualize_ereq_plz_move_dmiles(tCol,1).
407virtualize_ereq_plz_move_dmiles(ttTemporalType,1).
408
424
425
426
427virtualize_args_as(Which,Args):- descend_ge(Which),Args=Which.
428virtualize_args_as(Goal,Args):- sanity((arg(1,Goal,Var),var(Var))), predicate_property(Goal,meta_predicate(Args)).
431
432descend_ge(':-'((:),0)).
433descend_ge(':-'((-),0)).
434descend_ge(( :- 0)).
435descend_ge('{}'(0)).
436descend_ge('must'(0)).
437descend_ge('quietly'(0)).
438descend_ge('sanity'(0)).
439descend_ge('->'(0,0)).
440descend_ge(';'(0,0)).
441descend_ge('==>'(-,-)).
442descend_ge('==>'(-)).
443descend_ge('<--'(-,-)).
444descend_ge(z(if)).
445descend_ge(z(_)):-!,fail.
446descend_ge(Which):-functor(Which,F,_),!,descend_ge(z(F)),!.
447
448:- nb_linkval('$xform_arity',xform_arity(_C,_F,_A)). 449
450xform_arity(C,F,A):-var(C),!,sanity(var(F)),must(var(A)), nb_getval('$xform_arity',xform_arity(C,F,A)),!.
451xform_arity(C,F,A):-atom(C),!,C=F,ignore(clause_b(arity(F,A))).
452xform_arity(F/A,F,A):-atom(F),!.
453xform_arity(F//Am2,F,A):- integer(Am2),!, A is Am2+2.
454xform_arity(C,F,A):- compound(C), functor(C,F,A).
455
456xform(_,_):-!,fail.
457xform(Var,Out):- \+compound(Var),!,Out=Var.
458xform(Nonvar,Out):- \+ current_prolog_flag(subclause_expansion,true),!,Nonvar=Out.
462xform(hybrid_support(F,A),mpred_prop(_M,F,A,prologHybrid)):-!.
464xform(mpred_prop(M,F,A,P),mpred_prop(M,F,A,P)):-!.
465
466
467xform(PC,mpred_prop(M,F,A,P)):- current_assertion_module(M), PC=..[P,C],is_reltype(P),!,xform_arity(C,F,A).
468xform(PFA,mpred_prop(M,F,A,P)):- defaultAssertMt(M),PFA=..[P,F,A],is_reltype(P),!.
469xform(In,PART):- map_compound_args(xform,In,PART),!.
470
473is_reltype(Var):-var(Var),!,fail.
474is_reltype(pfcControlled).
475is_reltype(prologHybrid).
476is_reltype(prologBuiltin).
477is_reltype(P):-clause_b(ttRelationType(P)).
478
479
480cannot_descend_expansion(_,In):- \+ compound(In),!.
481cannot_descend_expansion(ge,In):- strip_module(In,M,FA),functor(FA,F,A),!,never_virtualize(M:F/A).
482
483
484virtualize_code(_,In,Out):- \+ compound(In),!,In=Out.
485virtualize_code(_,functor(P,F,A),cfunctor(P,F,A)):-!.
486virtualize_code(_,(SWC,REST),(SWC,REST)):- (swc==SWC ,!. 487virtualize_code(X,(VWC,In),(Out)):- vwc==VWC,!,virtualize_code(X,In,Out).
488virtualize_code(_,P=..In,cnas(P,H,T)):- nonvar(In),In=[H|T],!.
489virtualize_code(_,P=..In,on_x_debug(P=..In)):-!.
490virtualize_code(_,functor(P,F,A),on_x_debug(functor(P,F,A))):-!.
492virtualize_code(X,(G1,G2),(O1,O2)):- !,virtualize_code(X,G1,O1),!,virtualize_code(X,G2,O2),!.
493virtualize_code(X,\+ G1,call_u(\+ G1)):- virtualize_code(X,G1,O1), \+ same_terms(G1,O1),!.
494virtualize_code(X, \+ (G1), \+ (O1)):- !, virtualize_code(X,G1,O1),!.
495virtualize_code(X,must(G1),must(O1)):- !, virtualize_code(X,G1,O1),!.
496virtualize_code(X,sanity(G1),sanity(O1)):- !, virtualize_code(X,G1,O1),!.
497virtualize_code(X,setof(In,G1,Out),setof(In,O1,Out)):- virtualize_code(X,G1,O1),!.
498virtualize_code(X,catch(G1,E,G2),catch(O1,E,O2)):- !,virtualize_code(X,G1,O1),!,virtualize_code(X,G2,O2),!.
499virtualize_code(_,(G1 \= G2),(G1 \= G2)):-!.
500virtualize_code(_,(G1 == G2),(G1 == G2)):-!.
501virtualize_code(_,(G1 \== G2),(G1 \== G2)):-!.
502virtualize_code(_,(G1 = G2),(G1 = G2)):-!.
503virtualize_code(X,(G1;G2),(O1;O2)):- !,virtualize_code(X,G1,O1),!,virtualize_code(X,G2,O2),!.
504virtualize_code(X,(G1->G2),(O1->O2)):- !,virtualize_code(X,G1,O1),!,virtualize_code(X,G2,O2),!.
505virtualize_code(ge,M:In,ereq(In)):- M==abox,!.
506virtualize_code(ge,M:In,M:In):- M==dif,!.
507virtualize_code(ge,M:mtProlog(C),M:mtProlog(C)):- M==baseKB,!.
508
509virtualize_code(_,M:In,M:PART):- \+ compound(In),!,In=PART.
510
519
520virtualize_code(X,M:In,PART):- !, ((functor(In,F,A),virtualize_code_fa(X,M:In,F,A,PART))->true;(M:In=PART)),!.
521virtualize_code(X,In,PART):- !, ((functor(In,F,A),virtualize_code_fa(X,In,F,A,PART))->true;In=PART),!.
526
527virtualize_code_fa(X,M:In,F,A,M:PART):-!,virtualize_code_fa(X,In,F,A,PART).
528virtualize_code_fa(X,In,_,_,In):- cannot_descend_expansion(X,In),!. 529virtualize_code_fa(X,In,F,A,PART):- get_virtualizer_mode(X,F,A,How),!,must(safe_virtualize(In,How,PART)).
530virtualize_code_fa(X,In,F,A,PART):- X==ge, functor(ArgModes,F,A),
531 Args=ArgModes,
532 virtualize_args_as(Args,ArgModes),!,
533 map_compound_args(virtualize_code_each(X),ArgModes,In,PART),!.
534
536
537virtualize_special_outside(X,In):- functor(In,F,A),get_virtualizer_mode(X,F,A,_How),!.
538virtualize_special_outside(X,In):- arg(_,In,Arg), \+cannot_descend_expansion(X,Arg),virtualize_special_outside(X,In).
539
540virtualize_code_each(X,Arg,In,Out):- var(Arg),!,virtualize_code_each(X,(+),In,Out).
541virtualize_code_each(X,Arg,In,Out):- (integer(Arg); Arg == +; Arg == * ) -> virtualize_code(X,In,Out),!.
542virtualize_code_each(X,-,In,Out):- current_predicate(mpred_expansion_file/0), if_defined(fully_expand_head(X,In,Out)),!.
543virtualize_code_each(_,_,In,Out):- must(Out=In).
544
545
546
547map_compound_args(Pred,In,Out):- must(( compound(In), In=..[F|InL],maplist(Pred,InL,OutL),Out=..[F|OutL])).
548
549map_compound_args(Pred,Args,In,Out):- must(( compound(Args), compound(In), Args=..[_|ArgsL],In=..[F|InL],maplist(Pred,ArgsL,InL,OutL),Out=..[F|OutL])).
550
551could_safe_virtualize:-
552 is_file_virtualize_allowed,
553 prolog_load_context(module,M),
554 \+ clause_b(mtHybrid(M)),
555 \+ ((current_prolog_flag(dialect_pfc,fwc);
556 (source_location(F,_W),( atom_concat(_,'.pfc.pl',F);atom_concat(_,'.plmoo',F);atom_concat(_,'.clif',F);atom_concat(_,'.pfc',F))))).
557
561virtualize_source(X,In,Out):- virtualize_code(X,In,Out),!.
570safe_virtualize(Goal,How,Out):- must(safe_virtualize_0(Goal,How,call(MHow,MGoal))),!,
571 safe_univ(Out,[MHow,MGoal]).
572
573safe_virtualize_0(M:Goal,M:How,call(How,M:Goal)).
574safe_virtualize_0(M:Goal,How,call(How,M:Goal)).
575safe_virtualize_0(Goal,baseKB:How,call(How,Goal)).
576safe_virtualize_0(Goal,M:How,call(How,M:Goal)).
577safe_virtualize_0(Goal,How,call(How,Goal)).
578
579
580
581virtualize_source_file:-
582 prolog_load_context(source,F),virtualize_source_file(F),
583 prolog_load_context(file,F1),virtualize_source_file(F1).
584
585virtualize_source_file(F1):- virtualize_source_file(F1,true).
586
587virtualize_source_file(F1,Value):-
588 absolute_file_name(F1,F,[file_type(prolog),access(read),file_errors(error)]),
589 retractall(lmconf:should_virtualize_source_file(F,_)),
590 asserta(lmconf:should_virtualize_source_file(F,Value)).
591
592
593virtualized_goal_expansion(Head, In,Out):-
594 strip_module(In,_,In0),compound(In0),
595 (sd_goal_expansion(In,In0,Out)->
596 nop((( \+ same_terms(In,Out), \+ same_terms(In0,Out)) ->
597 ((
598 dmsg( virtualized_goal_expansion(Head,In,_)),
599 dmsg( be4 :- In),
600 dmsg( out :- Out)))))).
601
602is_file_virtualize_allowed:- prolog_load_context(file,F),lmconf:should_virtualize_source_file(F,false),!,fail.
603is_file_virtualize_allowed:- prolog_load_context(source,F),lmconf:should_virtualize_source_file(F,false),!,fail.
604is_file_virtualize_allowed:-
605 prolog_load_context(source,S),
606 (is_file_virtualize_allowed(S)-> true ;
607 (prolog_load_context(file,F),F\==S,is_file_virtualize_allowed(F))).
608
609
610is_file_virtualize_allowed(S):- lmconf:should_virtualize_source_file(S,TF),!,TF==true.
611is_file_virtualize_allowed(S):- atom_concat(_,'.plv',S).
613
614decl_wrapped(M,F,A,How):-
615 assert_if_new(rdf_rewrite:arity(F,A)), 616 assert_if_new(baseKB:safe_wrap(M,F,A,How)).
617 618
620swc.
621
623vwc :- throw('Code was missed by virtualizer!').
624
626sd_goal_expansion(_,(VWC,In),Out):- vwc==VWC,!,must((callable(In),virtualize_source(ge,In,Out))).
627sd_goal_expansion(In,_,Out):- compound(In),virtualize_source(ge,In,Out).
628
635same_terms(A,B):-A==B,!.
636same_terms(A,B):-A=@=B,!.
637same_terms(A,B):-A=@=B,!,A=B.
638same_terms(A,B):- \+ \+ A = B,!,fail.
639same_terms(A,B):- ( \+ compound(A) ; \+ compound(B)),!,fail.
640same_terms(M:A,B):-atom(M),!,same_terms(A,B).
641same_terms(A,M:B):-atom(M),!,same_terms(A,B).
642same_terms(In,on_x_debug(Out)):- !, same_terms(In,Out).
643same_terms(on_x_debug(Out),In):- !, same_terms(In,Out).
644same_terms(In,dbreq(Out)):- !, same_terms(In,Out).
645same_terms(A=..[P|AA],cnas(B,P,BB)):-!,same_terms(A,B),same_terms(AA,BB).
646same_terms((A,AA),(B,BB)):-!,same_terms(A,B),same_terms(AA,BB).
647same_terms([A|AA],[B|BB]):-!,same_terms(A,B),same_terms(AA,BB).
648same_terms((A;AA),(B;BB)):-!,same_terms(A,B),same_terms(AA,BB).
649same_terms((A:-AA),(B:-BB)):-!,same_terms(A,B),same_terms(AA,BB).
650same_terms(AAA,BBB):- AAA=..[F|AA],BBB=..[F|BB],!,same_terms(AA,BB).
651
652
653
654
655:- fixup_exports. 656
657:- if(false). 658
659:- multifile(system:file_body_expansion/2). 660:- dynamic(system:file_body_expansion/2). 661:- use_module(system:library(subclause_expansion)). 662system:file_body_expansion(Head,In,Out):- compound(In),
663 is_file_virtualize_allowed,
664 virtualized_goal_expansion(Head, In,Out).
665
666
667
668:- else. 669
670:- multifile(system:goal_expansion/4). 671:- dynamic(system:goal_expansion/4). 672:- module_transparent(system:goal_expansion/4). 673system:goal_expansion(In,P,Out,PO):-
674 notrace((compound(In), nonvar(P))),
675 notrace((nb_current('$term', Head :- FileTerm),In == FileTerm)),
676 notrace(is_file_virtualize_allowed)->
677 virtualized_goal_expansion(Head,In,Out)-> PO=P.
678
679:- endif.