optimise -> for type tests

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1024 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc
2004-03-10 14:59:55 +00:00
parent 39044cd21c
commit 2e3221a68d
7 changed files with 325 additions and 211 deletions

View File

@@ -9,10 +9,11 @@
**************************************************************************
* *
* File: computils.c *
* Last rev: *
* mods: *
* comments: some useful routines for YAP's compiler *
* *
* Last rev: $Date: 2004-03-10 14:59:55 $ *
* $Log: not supported by cvs2svn $ *
* *
*************************************************************************/
#ifdef SCCS
static char SccsId[] = "%W% %G%";
@@ -76,9 +77,9 @@ Yap_AllocCMem (int size, struct intermediates *cip)
int
Yap_is_a_test_pred (Term arg, Term mod)
{
if (IsVarTerm (arg))
if (IsVarTerm (arg)) {
return FALSE;
else if (IsAtomTerm (arg)) {
} else if (IsAtomTerm (arg)) {
Atom At = AtomOfTerm (arg);
PredEntry *pe = RepPredProp(PredPropByAtom(At, mod));
if (EndOfPAEntr(pe))
@@ -86,10 +87,17 @@ Yap_is_a_test_pred (Term arg, Term mod)
return pe->PredFlags & TestPredFlag;
} else if (IsApplTerm (arg)) {
Functor f = FunctorOfTerm (arg);
PredEntry *pe = RepPredProp(PredPropByFunc(f, mod));
if (EndOfPAEntr(pe))
return FALSE;
return pe->PredFlags & (TestPredFlag|BinaryTestPredFlag);
PredEntry *pe = RepPredProp(PredPropByFunc(f, mod));
if (EndOfPAEntr(pe))
return FALSE;
if (pe->PredFlags & AsmPredFlag) {
int op = pe->PredFlags & 0x7f;
if (op >= _atom && op <= _primitive) {
return TRUE;
}
return FALSE;
}
return pe->PredFlags & (TestPredFlag|BinaryTestPredFlag);
} else {
return FALSE;
}