system_predicate/1 was broken
This commit is contained in:
parent
e4f5264ded
commit
832599d220
32
pl/preds.yap
32
pl/preds.yap
@ -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))
|
||||||
|
).
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user