system_predicate/1 was broken

This commit is contained in:
Vítor Santos Costa 2015-11-12 14:54:01 +00:00
parent e4f5264ded
commit 832599d220

View File

@ -655,25 +655,49 @@ is the atom _A_.
*/ */
system_predicate(A,T1) :- system_predicate(A,T1) :-
'$yap_strip_module'( T1, M, T), '$yap_strip_module'( T1, M, T),
'$system_predicate3'( A, M, T).
'$system_predicate3'( A, M, T) :-
( (
M \= prolog, M \= prolog,
'$current_predicate'(A, M, T0, system) '$current_predicate'(A, M, T, system)
; ;
'$imported_predicate'(T, M, SourceT, SourceMod), '$imported_predicate'(T, M, SourceT, SourceMod),
M \= prolog, M \= prolog,
functor(T, A, _), functor(T, A, _),
'$system_predicate'(SourceT, SourceMod) '$system_predicate'(SourceT, SourceMod)
; ;
'$current_predicate'(A, prolog, T0, system) '$current_predicate'(A, prolog, T, system)
). ).
/** @pred system_predicate( ?_P_ ) /** @pred system_predicate( ?_P_ )
Defines the relation: _P_ is a currently defined system predicate. Defines the relation: indicator _P_ refers to a currently defined system predicate.
*/ */
system_predicate(P0) :- system_predicate(P0) :-
strip_module(P0, M, P), strip_module(P0, M, P),
system_predicate(_, M:P).
(
var(P)
->
P = A/Arity,
'$system_predicate3'( A, M, T),
functor(T, A, Arity)
;
P = A//Arity2
->
'$system_predicate3'( A, M, T),
functor(T, A, Arity),
Arity2 is Arity+2
;
P = A/Arity
->
'$system_predicate3'( A, M, T),
functor(T, A, Arity)
;
'$do_error'(type_error(predicate_indicator,P),
system_predicate(P0))
).
/** /**