improve JT

fix graph compatibility with SICStus
re-export declaration.


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2037 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc
2007-12-05 12:17:25 +00:00
parent c9c6b2e25c
commit 64d62f1e3e
33 changed files with 1135 additions and 460 deletions

View File

@@ -1169,4 +1169,60 @@ Yap_PutInSlot(long slot, Term t)
LCL0[slot] = t;
}
HoldEntry *
Yap_InitAtomHold(void)
{
HoldEntry *x = (HoldEntry *)Yap_AllocAtomSpace(sizeof(struct hold_entry));
x->KindOfPE = HoldProperty;
x->NextOfPE = NIL;
return x;
}
int
Yap_AtomGetHold(Atom at)
{
AtomEntry *ae = RepAtom(at);
PropEntry *pp, *opp = NULL;
WRITE_LOCK(ae->ARWLock);
pp = RepProp(ae->PropsOfAE);
while (!EndOfPAEntr(pp)) {
pp = RepProp(pp->NextOfPE);
opp = pp;
}
if (!pp) {
ae->PropsOfAE = AbsHoldProp(GlobalHoldEntry);
} else if (opp->KindOfPE != HoldProperty) {
opp->NextOfPE = AbsHoldProp(GlobalHoldEntry);
} else {
WRITE_UNLOCK(ae->ARWLock);
return FALSE;
}
WRITE_UNLOCK(ae->ARWLock);
return TRUE;
}
int
Yap_AtomReleaseHold(Atom at)
{
AtomEntry *ae = RepAtom(at);
PropEntry *pp, *opp = NULL;
WRITE_LOCK(ae->ARWLock);
pp = RepProp(ae->PropsOfAE);
while (!EndOfPAEntr(pp)) {
if (pp->KindOfPE == HoldProperty) {
if (!opp) {
ae->PropsOfAE = NIL;
} else {
opp->NextOfPE = NIL;
}
WRITE_UNLOCK(ae->ARWLock);
return TRUE;
}
pp = RepProp(pp->NextOfPE);
opp = pp;
}
WRITE_UNLOCK(ae->ARWLock);
return FALSE;
}