add stash_predicate and fix hide_predicate.
This commit is contained in:
parent
feb70d0146
commit
2607e59a16
47
C/cdmgr.c
47
C/cdmgr.c
@ -4420,7 +4420,7 @@ Yap_HidePred(PredEntry *pe)
|
||||
}
|
||||
|
||||
static Int /* $system_predicate(P) */
|
||||
p_hide_predicate( USES_REGS1 )
|
||||
p_stash_predicate( USES_REGS1 )
|
||||
{
|
||||
PredEntry *pe;
|
||||
|
||||
@ -4463,6 +4463,50 @@ p_hide_predicate( USES_REGS1 )
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static Int /* $system_predicate(P) */
|
||||
p_hide_predicate( USES_REGS1 )
|
||||
{
|
||||
PredEntry *pe;
|
||||
|
||||
Term t1 = Deref(ARG1);
|
||||
Term mod = Deref(ARG2);
|
||||
|
||||
restart_system_pred:
|
||||
if (IsVarTerm(t1))
|
||||
return (FALSE);
|
||||
if (IsAtomTerm(t1)) {
|
||||
Atom a = AtomOfTerm(t1);
|
||||
|
||||
pe = RepPredProp(Yap_GetPredPropByAtom(a, mod));
|
||||
} else if (IsApplTerm(t1)) {
|
||||
Functor funt = FunctorOfTerm(t1);
|
||||
if (IsExtensionFunctor(funt)) {
|
||||
return(FALSE);
|
||||
}
|
||||
if (funt == FunctorModule) {
|
||||
Term nmod = ArgOfTerm(1, t1);
|
||||
if (IsVarTerm(nmod)) {
|
||||
Yap_Error(INSTANTIATION_ERROR,ARG1,"hide_predicate/1");
|
||||
return(FALSE);
|
||||
}
|
||||
if (!IsAtomTerm(nmod)) {
|
||||
Yap_Error(TYPE_ERROR_ATOM,ARG1,"hide_predicate/1");
|
||||
return(FALSE);
|
||||
}
|
||||
t1 = ArgOfTerm(2, t1);
|
||||
goto restart_system_pred;
|
||||
}
|
||||
pe = RepPredProp(Yap_GetPredPropByFunc(funt, mod));
|
||||
} else if (IsPairTerm(t1)) {
|
||||
return TRUE;
|
||||
} else
|
||||
return FALSE;
|
||||
if (EndOfPAEntr(pe))
|
||||
return FALSE;
|
||||
pe->PredFlags |= HiddenPredFlag;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static Int /* $hidden_predicate(P) */
|
||||
p_hidden_predicate( USES_REGS1 )
|
||||
@ -6016,6 +6060,7 @@ Yap_InitCdMgr(void)
|
||||
Yap_InitCPred("$system_predicate", 2, p_system_pred, SafePredFlag);
|
||||
Yap_InitCPred("$all_system_predicate", 3, p_all_system_pred, SafePredFlag);
|
||||
Yap_InitCPred("$hide_predicate", 2, p_hide_predicate, SafePredFlag);
|
||||
Yap_InitCPred("$stash_predicate", 2, p_stash_predicate, SafePredFlag);
|
||||
Yap_InitCPred("$hidden_predicate", 2, p_hidden_predicate, SafePredFlag);
|
||||
Yap_InitCPred("$pred_for_code", 5, p_pred_for_code, SyncPredFlag);
|
||||
Yap_InitCPred("$current_stack", 1, p_current_stack, SyncPredFlag);
|
||||
|
@ -650,6 +650,7 @@ source_module(Mod) :-
|
||||
setup_call_cleanup(0,0,0),
|
||||
setup_call_catcher_cleanup(0,0,?,0),
|
||||
spy(:),
|
||||
stash_predicate(:),
|
||||
unknown(+,:),
|
||||
use_module(:),
|
||||
use_module(:,?),
|
||||
|
17
pl/preds.yap
17
pl/preds.yap
@ -791,6 +791,23 @@ dynamic_predicate(P,Sem) :-
|
||||
'$flags'(T,Mod,F,F),
|
||||
F\/0x00400000 =\= 0.
|
||||
|
||||
stash_predicate(V) :- var(V), !,
|
||||
'$do_error'(instantiation_error,stash_predicate(V)).
|
||||
stash_predicate(M:P) :- !,
|
||||
'$stash_predicate2'(P, M).
|
||||
stash_predicate(P) :-
|
||||
'$current_module'(M),
|
||||
'$stash_predicate2'(P, M).
|
||||
|
||||
'$stash_predicate2'(V, M) :- var(V), !,
|
||||
'$do_error'(instantiation_error,stash_predicate(M:V)).
|
||||
'$stash_predicate2'(N/A, M) :- !,
|
||||
functor(S,N,A),
|
||||
'$stash_predicate'(S, M) .
|
||||
'$stash_predicate2'(PredDesc, M) :-
|
||||
'$do_error'(type_error(predicate_indicator,PredDesc),stash_predicate(M:PredDesc)).
|
||||
|
||||
|
||||
hide_predicate(V) :- var(V), !,
|
||||
'$do_error'(instantiation_error,hide_predicate(V)).
|
||||
hide_predicate(M:P) :- !,
|
||||
|
Reference in New Issue
Block a user