fix current_pred
This commit is contained in:
parent
9fca32c7ac
commit
4489616b19
17
C/adtdefs.c
17
C/adtdefs.c
@ -779,11 +779,11 @@ ExpandPredHash(void)
|
||||
PredEntry *p = PredHash[i];
|
||||
|
||||
while (p) {
|
||||
Prop nextp = p->NextOfPE;
|
||||
PredEntry *nextp = p->NextPredOfHash;
|
||||
UInt hsh = PRED_HASH(p->FunctorOfPred, p->ModuleOfPred, new_size);
|
||||
p->NextOfPE = AbsPredProp(np[hsh]);
|
||||
p->NextPredOfHash = np[hsh];
|
||||
np[hsh] = p;
|
||||
p = RepPredProp(nextp);
|
||||
p = nextp;
|
||||
}
|
||||
}
|
||||
PredHashTableSize = new_size;
|
||||
@ -869,16 +869,17 @@ Yap_NewPredPropByFunctor(FunctorEntry *fe, Term cur_mod)
|
||||
|
||||
hsh = PRED_HASH(fe, pe->ModuleOfPred, PredHashTableSize);
|
||||
/* should be the first one */
|
||||
pe->NextOfPE = AbsPredProp(PredHash[hsh]);
|
||||
pe->NextPredOfHash = PredHash[hsh];
|
||||
PredHash[hsh] = pe;
|
||||
fe->PropsOfFE = AbsPredProp(p);
|
||||
p->NextOfPE = AbsPredProp(pe);
|
||||
} else {
|
||||
p->NextOfPE = AbsPredProp(PredHash[hsh]);
|
||||
p->NextPredOfHash = PredHash[hsh];
|
||||
PredHash[hsh] = p;
|
||||
p->NextOfPE = fe->PropsOfFE->NextOfPE;
|
||||
fe->PropsOfFE->NextOfPE = AbsPredProp(p);
|
||||
}
|
||||
WRITE_UNLOCK(PredHashRWLock);
|
||||
/* make sure that we have something here: note that this is not a valid pointer!! */
|
||||
RepPredProp(fe->PropsOfFE)->NextOfPE = fe->PropsOfFE;
|
||||
} else {
|
||||
fe->PropsOfFE = AbsPredProp(p);
|
||||
p->NextOfPE = NIL;
|
||||
@ -1048,7 +1049,7 @@ Yap_PredPropByFunctorNonThreadLocal(Functor f, Term cur_mod)
|
||||
FUNC_WRITE_UNLOCK(f);
|
||||
return AbsPredProp(p);
|
||||
}
|
||||
p = RepPredProp(p->NextOfPE);
|
||||
p = p->NextPredOfHash;
|
||||
}
|
||||
READ_UNLOCK(PredHashRWLock);
|
||||
}
|
||||
|
13
C/cdmgr.c
13
C/cdmgr.c
@ -2182,19 +2182,16 @@ static void
|
||||
mark_preds_with_this_func(Functor f, Prop p0)
|
||||
{
|
||||
PredEntry *pe = RepPredProp(p0);
|
||||
UInt i;
|
||||
|
||||
pe->PredFlags |= GoalExPredFlag;
|
||||
for (i = 0; i < PredHashTableSize; i++) {
|
||||
PredEntry *p = PredHash[i];
|
||||
Prop p = f->PropsOfFE;
|
||||
|
||||
/* search the whole pred table, kind of inneficient */
|
||||
while (p) {
|
||||
Prop nextp = p->NextOfPE;
|
||||
if (p->FunctorOfPred == f)
|
||||
p->PredFlags |= GoalExPredFlag;
|
||||
p = RepPredProp(nextp);
|
||||
}
|
||||
pe = RepPredProp(p);
|
||||
|
||||
pe->PredFlags |= GoalExPredFlag;
|
||||
p = nextp;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/*************************************************************************
|
||||
/*************************************************************************
|
||||
* *
|
||||
* YAP Prolog %W% %G%
|
||||
* *
|
||||
@ -754,6 +754,7 @@ typedef enum {
|
||||
will not be aligned on RISC machines */
|
||||
profile_data StatisticsForPred; /* enable profiling for predicate */
|
||||
struct pred_entry *NextPredOfModule; /* next pred for same module */
|
||||
struct pred_entry *NextPredOfHash ; /* next pred for same module */
|
||||
} PredEntry;
|
||||
#define PEProp ((PropFlags)(0x0000))
|
||||
|
||||
@ -1723,7 +1724,7 @@ GetPredPropByFuncHavingLock (FunctorEntry *fe, Term cur_mod)
|
||||
READ_UNLOCK(PredHashRWLock);
|
||||
return AbsPredProp(p);
|
||||
}
|
||||
p = RepPredProp(p->NextOfPE);
|
||||
p = p->NextPredOfHash;
|
||||
}
|
||||
READ_UNLOCK(PredHashRWLock);
|
||||
}
|
||||
@ -1781,7 +1782,7 @@ GetPredPropByFuncAndModHavingLock (FunctorEntry *fe, Term cur_mod)
|
||||
READ_UNLOCK(PredHashRWLock);
|
||||
return AbsPredProp(p);
|
||||
}
|
||||
p = RepPredProp(p->NextOfPE);
|
||||
p = p->NextPredOfHash;
|
||||
}
|
||||
READ_UNLOCK(PredHashRWLock);
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 36f99e3c3c978fef25f899dc4fab1ffee334d73c
|
||||
Subproject commit b36fdac2281b7eef141095375d81456410dbcd2f
|
Reference in New Issue
Block a user