changes to import

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2080 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2008-02-07 22:34:45 +00:00
parent 9b4c83ddb2
commit a65a9d67ad
4 changed files with 99 additions and 75 deletions

View File

@ -7,7 +7,7 @@
<title>YAP change log</title>
<link rel=stylesheet href="changes.css" type="text/css">
</head>
xb
<body>
@ -17,6 +17,9 @@
<h2>Yap-5.1.3:</h2>
<ul>
<li> SPEEDUP: quickly check if we are importing an undefined goal.</li>
<li> FIXED: current_predicate/1 should enumerate all predicates
visible (obs from Nicos Angelopoulos).</li>
<li> NEW: time/1 (based on the SWI-Prolog time/1 predicate; request from Paulo Moura).</li>
<li> FIXED: with 64 bits indexing would separate ints from atoms (obs from A N Saravanaraj).</li>
<li> FIXED: duplicated clause when starting from trace (obs from A N Saravanaraj).</li>

View File

@ -810,21 +810,15 @@ not(G) :- \+ '$execute'(G).
'$undefp'([M|G]) :-
% make sure we do not loop on undefined predicates
% for undefined_predicates.
(
recorded('$import','$import'(NM,M,Goal,G,_,_),_)
;
'$enter_undefp',
'$find_undefp_handler'(G,M,Goal,NM), !,
once('$find_undefp_handler'(G,M,Goal,NM))
),
!,
'$execute0'(Goal,NM).
'$find_undefp_handler'(G,M,NG,S) :-
recorded('$import','$import'(S,M,NG,G,_,_),_),
S \= M, % can't try importing from the module itself.
!,
'$exit_undefp'.
/*
'$find_undefp_handler'(G,M,NG,M) :-
'$is_expand_goal_or_meta_predicate'(G,M),
'$system_catch'(goal_expansion(G, M, NG), user, _, fail), !,
'$exit_undefp'.
*/
'$find_undefp_handler'(G,M,NG,user) :-
\+ '$undefined'(unknown_predicate_handler(_,_,_), user),
'$system_catch'(unknown_predicate_handler(G,M,NG), user, Error, '$leave_undefp'(Error)), !,

View File

@ -884,3 +884,92 @@ predicate_erased_statistics(M:P,NCls,Sz,ISz) :- !,
predicate_erased_statistics(P,NCls,Sz,ISz) :-
'$current_module'(M),
'$predicate_erased_statistics'(M:P,NCls,Sz,_,ISz).
current_predicate(A,T) :- var(T), !, % only for the predicate
'$current_module'(M),
'$current_predicate_no_modules'(M,A,T).
current_predicate(A,M:T) :- % module specified
var(M), !,
current_module(M),
M \= prolog,
'$current_predicate_no_modules'(M,A,T).
current_predicate(A,M:T) :- % module specified
nonvar(T),
!,
functor(T,A,_),
'$pred_exists'(T,M).
current_predicate(A,M:T) :- % module specified
!,
'$current_predicate_no_modules'(M,A,T).
current_predicate(A,T) :- % only for the predicate
'$current_module'(M),
'$current_predicate_no_modules'(M,A,T).
current_predicate(F) :- var(F), !, % only for the predicate
'$current_module'(M),
'$current_predicate3'(M,F).
current_predicate(M:F) :- % module specified
var(M), !,
'$current_module'(M),
M \= prolog,
'$current_predicate3'(M,F).
current_predicate(M:F) :- % module specified
!,
'$current_predicate3'(M,F).
current_predicate(S) :- % only for the predicate
'$current_module'(M),
'$current_predicate3'(M,S).
system_predicate(A,P) :-
'$current_predicate_no_modules'(prolog,A,P),
\+ '$hidden'(A).
system_predicate(P) :-
'$current_module'(M),
'$system_predicate'(P,M).
'$current_predicate_no_modules'(M,A,T) :-
'$current_predicate'(M,A,Arity),
functor(T,A,Arity),
'$pred_exists'(T,M).
'$current_predicate3'(M,A/Arity) :- nonvar(A), nonvar(Arity), !,
(
'$current_predicate'(M,A,Arity)
->
functor(T,A,Arity),
'$pred_exists'(T,M)
;
'$current_predicate'(prolog,A,Arity)
->
functor(T,A,Arity),
'$pred_exists'(T,M)
;
recorded('$import','$import'(NM,M,G,T,A,Arity),_)
->
'$pred_exists'(G,NM)
).
'$current_predicate3'(M,A/Arity) :- !,
(
'$current_predicate'(M,A,Arity),
functor(T,A,Arity),
'$pred_exists'(T,M)
;
'$current_predicate'(prolog,A,Arity),
functor(T,A,Arity),
'$pred_exists'(T,M)
;
recorded('$import','$import'(NM,M,G,T,A,Arity),_),
functor(T,A,Arity),
'$pred_exists'(G,NM)
).
'$current_predicate3'(M,BadSpec) :- % only for the predicate
'$do_error'(type_error(predicate_indicator,BadSpec),current_predicate(M:BadSpec)).
current_key(A,K) :-
'$current_predicate'(idb,A,Arity),
functor(K,A,Arity).
current_key(A,K) :-
'$current_immediate_key'(A,K).

View File

@ -381,68 +381,6 @@ current_atom(A) :- % generate
current_atom(A) :- % generate
'$current_wide_atom'(A).
current_predicate(A,T) :- var(T), !, % only for the predicate
'$current_module'(M),
'$current_predicate_no_modules'(M,A,T).
current_predicate(A,M:T) :- % module specified
var(M), !,
current_module(M),
M \= prolog,
'$current_predicate_no_modules'(M,A,T).
current_predicate(A,M:T) :- % module specified
nonvar(T),
!,
functor(T,A,_),
'$pred_exists'(T,M).
current_predicate(A,M:T) :- % module specified
!,
'$current_predicate_no_modules'(M,A,T).
current_predicate(A,T) :- % only for the predicate
'$current_module'(M),
'$current_predicate_no_modules'(M,A,T).
current_predicate(F) :- var(F), !, % only for the predicate
'$current_module'(M),
'$current_predicate3'(M,F).
current_predicate(M:F) :- % module specified
var(M), !,
'$current_module'(M),
M \= prolog,
'$current_predicate3'(M,F).
current_predicate(M:F) :- % module specified
!,
'$current_predicate3'(M,F).
current_predicate(S) :- % only for the predicate
'$current_module'(M),
'$current_predicate3'(M,S).
system_predicate(A,P) :-
'$current_predicate_no_modules'(prolog,A,P),
\+ '$hidden'(A).
system_predicate(P) :-
'$current_module'(M),
'$system_predicate'(P,M).
'$current_predicate_no_modules'(M,A,T) :-
'$current_predicate'(M,A,Arity),
functor(T,A,Arity),
'$pred_exists'(T,M).
'$current_predicate3'(M,A/Arity) :- !,
'$current_predicate'(M,A,Arity),
functor(T,A,Arity),
'$pred_exists'(T,M).
'$current_predicate3'(M,BadSpec) :- % only for the predicate
'$do_error'(type_error(predicate_indicator,BadSpec),current_predicate(M:BadSpec)).
current_key(A,K) :-
'$current_predicate'(idb,A,Arity),
functor(K,A,Arity).
current_key(A,K) :-
'$current_immediate_key'(A,K).
%%% The unknown predicate,
% informs about what the user wants to be done when
% there are no clauses for a certain predicate */