fix current_pred

This commit is contained in:
Vítor Santos Costa 2015-04-19 04:13:12 +01:00
parent 9fca32c7ac
commit 4489616b19
4 changed files with 20 additions and 21 deletions

View File

@ -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);
}

View File

@ -2182,20 +2182,17 @@ 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;
}
}
}
static void

View File

@ -1,4 +1,4 @@
/*************************************************************************
/*************************************************************************
* *
* YAP Prolog %W% %G%
* *
@ -753,7 +753,8 @@ typedef enum {
/* This must be at an odd number of cells, otherwise it
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 *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