hide_predicate
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@571 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
325cfeeadc
commit
5cc8ea1d52
43
C/cdmgr.c
43
C/cdmgr.c
@ -2241,6 +2241,48 @@ p_system_pred(void)
|
|||||||
return(pe->ModuleOfPred == 0 || pe->PredFlags & (UserCPredFlag|CPredFlag|BinaryTestPredFlag|AsmPredFlag|TestPredFlag));
|
return(pe->ModuleOfPred == 0 || pe->PredFlags & (UserCPredFlag|CPredFlag|BinaryTestPredFlag|AsmPredFlag|TestPredFlag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Int /* $system_predicate(P) */
|
||||||
|
p_hide_predicate(void)
|
||||||
|
{
|
||||||
|
PredEntry *pe;
|
||||||
|
|
||||||
|
Term t1 = Deref(ARG1);
|
||||||
|
SMALLUNSGN mod = LookupModule(Deref(ARG2));
|
||||||
|
|
||||||
|
restart_system_pred:
|
||||||
|
if (IsVarTerm(t1))
|
||||||
|
return (FALSE);
|
||||||
|
if (IsAtomTerm(t1)) {
|
||||||
|
pe = RepPredProp(GetPredPropByAtom(AtomOfTerm(t1), 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)) {
|
||||||
|
Error(INSTANTIATION_ERROR,ARG1,"hide_predicate/1");
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
if (!IsAtomTerm(nmod)) {
|
||||||
|
Error(TYPE_ERROR_ATOM,ARG1,"hide_predicate/1");
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
t1 = ArgOfTerm(2, t1);
|
||||||
|
goto restart_system_pred;
|
||||||
|
}
|
||||||
|
pe = RepPredProp(GetPredPropByFunc(funt, mod));
|
||||||
|
} else if (IsPairTerm(t1)) {
|
||||||
|
return (TRUE);
|
||||||
|
} else
|
||||||
|
return (FALSE);
|
||||||
|
if (EndOfPAEntr(pe))
|
||||||
|
return(FALSE);
|
||||||
|
pe->PredFlags |= HiddenPredFlag;
|
||||||
|
return(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
static Int /* $cut_transparent(P) */
|
static Int /* $cut_transparent(P) */
|
||||||
p_cut_transparent(void)
|
p_cut_transparent(void)
|
||||||
{
|
{
|
||||||
@ -2315,5 +2357,6 @@ InitCdMgr(void)
|
|||||||
InitCPred("$parent_pred", 3, p_parent_pred, SafePredFlag);
|
InitCPred("$parent_pred", 3, p_parent_pred, SafePredFlag);
|
||||||
InitCPred("$system_predicate", 2, p_system_pred, SafePredFlag);
|
InitCPred("$system_predicate", 2, p_system_pred, SafePredFlag);
|
||||||
InitCPred("$cut_transparent", 1, p_cut_transparent, SafePredFlag);
|
InitCPred("$cut_transparent", 1, p_cut_transparent, SafePredFlag);
|
||||||
|
InitCPred("$hide_predicate", 2, p_hide_predicate, SafePredFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -991,7 +991,7 @@ fast_tokenizer(void)
|
|||||||
if (ch == '\\' &&
|
if (ch == '\\' &&
|
||||||
yap_flags[CHARACTER_ESCAPE_FLAG] != CPROLOG_CHARACTER_ESCAPES) {
|
yap_flags[CHARACTER_ESCAPE_FLAG] != CPROLOG_CHARACTER_ESCAPES) {
|
||||||
/* escape sequence */
|
/* escape sequence */
|
||||||
ch = my_fgetch();
|
my_fgetch();
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 10:
|
case 10:
|
||||||
goto restart;
|
goto restart;
|
||||||
@ -1307,7 +1307,7 @@ fast_tokenizer(void)
|
|||||||
my_fgetch();
|
my_fgetch();
|
||||||
} else if (ch == '\\' && yap_flags[CHARACTER_ESCAPE_FLAG] != CPROLOG_CHARACTER_ESCAPES) {
|
} else if (ch == '\\' && yap_flags[CHARACTER_ESCAPE_FLAG] != CPROLOG_CHARACTER_ESCAPES) {
|
||||||
/* escape sequence */
|
/* escape sequence */
|
||||||
ch = my_fgetch();
|
my_fgetch();
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 10:
|
case 10:
|
||||||
/* just skip */
|
/* just skip */
|
||||||
|
@ -1375,6 +1375,12 @@ cont_current_predicate(void)
|
|||||||
UInt Arity;
|
UInt Arity;
|
||||||
Atom name;
|
Atom name;
|
||||||
|
|
||||||
|
while (pp != NULL) {
|
||||||
|
if (pp->PredFlags & HiddenPredFlag)
|
||||||
|
pp = pp->NextPredOfModule;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (pp == NULL)
|
if (pp == NULL)
|
||||||
cut_fail();
|
cut_fail();
|
||||||
EXTRA_CBACK_ARG(3,1) = (CELL)MkIntegerTerm((Int)(pp->NextPredOfModule));
|
EXTRA_CBACK_ARG(3,1) = (CELL)MkIntegerTerm((Int)(pp->NextPredOfModule));
|
||||||
|
@ -119,7 +119,7 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args)
|
|||||||
/* if (vsc_count > 500000) exit(0); */
|
/* if (vsc_count > 500000) exit(0); */
|
||||||
/* if (gc_calls < 1) return;*/
|
/* if (gc_calls < 1) return;*/
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
YP_fprintf(YP_stderr,"%llu, %p %p %x ", vsc_count, H, TR, *(CELL *)0x91ca260);
|
YP_fprintf(YP_stderr,"%llu, %p ", vsc_count, H);
|
||||||
#endif
|
#endif
|
||||||
/* check_trail_consistency(); */
|
/* check_trail_consistency(); */
|
||||||
if (pred == NULL) {
|
if (pred == NULL) {
|
||||||
|
@ -493,7 +493,7 @@ loop:
|
|||||||
to_visit[0] = pt0;
|
to_visit[0] = pt0;
|
||||||
to_visit[1] = pt0_end;
|
to_visit[1] = pt0_end;
|
||||||
to_visit[2] = pt1;
|
to_visit[2] = pt1;
|
||||||
to_visit[3] = *pt0;
|
to_visit[3] = (CELL *)*pt0;
|
||||||
*pt0 = d1;
|
*pt0 = d1;
|
||||||
#else
|
#else
|
||||||
/* store the terms to visit */
|
/* store the terms to visit */
|
||||||
@ -535,7 +535,7 @@ loop:
|
|||||||
to_visit[0] = pt0;
|
to_visit[0] = pt0;
|
||||||
to_visit[1] = pt0_end;
|
to_visit[1] = pt0_end;
|
||||||
to_visit[2] = pt1;
|
to_visit[2] = pt1;
|
||||||
to_visit[3] = *pt0;
|
to_visit[3] = (CELL *)*pt0;
|
||||||
*pt0 = d1;
|
*pt0 = d1;
|
||||||
#else
|
#else
|
||||||
/* store the terms to visit */
|
/* store the terms to visit */
|
||||||
|
20
docs/yap.tex
20
docs/yap.tex
@ -1534,6 +1534,26 @@ q(A):-
|
|||||||
A is 22.
|
A is 22.
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
@item hide(+@var{Atom})
|
||||||
|
@findex hide/1
|
||||||
|
@snindex hide/1
|
||||||
|
@cnindex hide/1
|
||||||
|
Make atom @var{Atom} invisible.
|
||||||
|
|
||||||
|
@item unhide(+@var{Atom})
|
||||||
|
@findex unhide/1
|
||||||
|
@snindex unhide/1
|
||||||
|
@cnindex unhide/1
|
||||||
|
Make hidden atom @var{Atom} visible.
|
||||||
|
|
||||||
|
|
||||||
|
@item hide_predicate(+@var{Pred})
|
||||||
|
@findex hide_predicate/1
|
||||||
|
@snindex hide_predicate/1
|
||||||
|
@cnindex hide_predicate/1
|
||||||
|
Make atom @var{Atom} invisible to @code{current_predicate/2},
|
||||||
|
@code{listing} and friends.
|
||||||
|
|
||||||
@item expand_exprs(-@var{O},+@var{N})
|
@item expand_exprs(-@var{O},+@var{N})
|
||||||
@findex expand_exprs/2
|
@findex expand_exprs/2
|
||||||
@snindex expand_exprs/2
|
@snindex expand_exprs/2
|
||||||
|
@ -162,6 +162,7 @@ Inline(IsValProperty, PropFlags, int, flags, (flags == ValProperty) )
|
|||||||
CodeOfPred holds the address of the correspondent C-function.
|
CodeOfPred holds the address of the correspondent C-function.
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
HiddenPredFlag = 0x2000000L, /* ! should ! across */
|
||||||
CArgsPredFlag = 0x1000000L, /* ! should ! across */
|
CArgsPredFlag = 0x1000000L, /* ! should ! across */
|
||||||
CutTransparentPredFlag = 0x800000L, /* ! should ! across */
|
CutTransparentPredFlag = 0x800000L, /* ! should ! across */
|
||||||
SourcePredFlag = 0x400000L, /* static predicate with source declaration */
|
SourcePredFlag = 0x400000L, /* static predicate with source declaration */
|
||||||
|
@ -564,6 +564,7 @@ source_module(Mod) :-
|
|||||||
findall(?,:,?),
|
findall(?,:,?),
|
||||||
findall(?,:,?,?),
|
findall(?,:,?,?),
|
||||||
freeze(?,:),
|
freeze(?,:),
|
||||||
|
hide_predicate(:),
|
||||||
if(:,:,:),
|
if(:,:,:),
|
||||||
incore(:),
|
incore(:),
|
||||||
listing(:),
|
listing(:),
|
||||||
|
21
pl/preds.yap
21
pl/preds.yap
@ -601,3 +601,24 @@ dynamic_predicate(P,Sem) :-
|
|||||||
'$flags'(T,Mod,F,F),
|
'$flags'(T,Mod,F,F),
|
||||||
F\/16'400000 \== 0.
|
F\/16'400000 \== 0.
|
||||||
|
|
||||||
|
hide_predicate(V) :- var(V), !,
|
||||||
|
throw(error(instantiation_error,hide_predicate(X))).
|
||||||
|
hide_predicate(M:P) :- !,
|
||||||
|
'$hide_predicate2'(P, M).
|
||||||
|
hide_predicate(P) :-
|
||||||
|
'$current_module'(M),
|
||||||
|
'$hide_predicate2'(M, P).
|
||||||
|
|
||||||
|
'$hide_predicate2'(V, M) :- var(V), !,
|
||||||
|
throw(error(instantiation_error,hide_predicate(M:V))).
|
||||||
|
'$hide_predicate2'(N/A, M) :- !,
|
||||||
|
functor(S,N,A),
|
||||||
|
'$hide_predicate'(S, M) .
|
||||||
|
'$hide_predicate2'(PredDesc, M) :-
|
||||||
|
throw(error(type_error(predicate_indicator,T),hide_predicate(M:PredDesc))).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user