get rid of global variables in dbase
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@994 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
41908d49cf
commit
3ecc66b7fd
164
C/dbase.c
164
C/dbase.c
@ -147,23 +147,23 @@ typedef BITS16 link_entry;
|
||||
|
||||
/* These global variables are necessary to build the data base
|
||||
structure */
|
||||
typedef struct db_globs {
|
||||
#ifdef IDB_LINK_TABLE
|
||||
static link_entry *lr = NULL, *LinkAr;
|
||||
link_entry *lr, *LinkAr;
|
||||
#endif
|
||||
/* we cannot call Error directly from within recorded(). These flags are used
|
||||
to delay for a while
|
||||
*/
|
||||
static DBRef *tofref; /* place the refs also up */
|
||||
|
||||
CELL *next_float = NULL;
|
||||
|
||||
DBRef *tofref; /* place the refs also up */
|
||||
#ifdef SFUNC
|
||||
static CELL *FathersPlace; /* Where the father was going when the term
|
||||
CELL *FathersPlace; /* Where the father was going when the term
|
||||
* was reached */
|
||||
static SFKeep *SFAr, *TopSF; /* Where are we putting our SFunctors */
|
||||
SFKeep *SFAr, *TopSF; /* Where are we putting our SFunctors */
|
||||
#endif
|
||||
DBRef found_one; /* Place where we started recording */
|
||||
} dbglobs;
|
||||
|
||||
static DBRef found_one; /* Place where we started recording */
|
||||
static dbglobs *s_dbg;
|
||||
|
||||
#ifdef SUPPORT_HASH_TABLES
|
||||
typedef struct {
|
||||
@ -189,11 +189,11 @@ STATIC_PROTO(Int cmpclls,(CELL *,CELL *,Int));
|
||||
STATIC_PROTO(Prop FindDBProp,(AtomEntry *, int, unsigned int, Term));
|
||||
STATIC_PROTO(CELL CalcKey, (Term));
|
||||
#ifdef COROUTINING
|
||||
STATIC_PROTO(CELL *MkDBTerm, (CELL *, CELL *, CELL *, CELL *, CELL *, CELL *,int *));
|
||||
STATIC_PROTO(CELL *MkDBTerm, (CELL *, CELL *, CELL *, CELL *, CELL *, CELL *,int *, struct db_globs *));
|
||||
#else
|
||||
STATIC_PROTO(CELL *MkDBTerm, (CELL *, CELL *, CELL *, CELL *, CELL *, int *));
|
||||
STATIC_PROTO(CELL *MkDBTerm, (CELL *, CELL *, CELL *, CELL *, CELL *, int *, struct db_globs *));
|
||||
#endif
|
||||
STATIC_PROTO(DBRef CreateDBStruct, (Term, DBProp, int, int *, UInt));
|
||||
STATIC_PROTO(DBRef CreateDBStruct, (Term, DBProp, int, int *, UInt, struct db_globs *));
|
||||
STATIC_PROTO(DBRef record, (int, Term, Term, Term));
|
||||
STATIC_PROTO(DBRef check_if_cons, (DBRef, Term));
|
||||
STATIC_PROTO(DBRef check_if_var, (DBRef));
|
||||
@ -201,7 +201,7 @@ STATIC_PROTO(DBRef check_if_wvars, (DBRef, unsigned int, CELL *));
|
||||
#ifdef IDB_LINK_TABLE
|
||||
STATIC_PROTO(int scheckcells, (int, CELL *, CELL *, link_entry *, CELL));
|
||||
#endif
|
||||
STATIC_PROTO(DBRef check_if_nvars, (DBRef, unsigned int, CELL *));
|
||||
STATIC_PROTO(DBRef check_if_nvars, (DBRef, unsigned int, CELL *, struct db_globs *));
|
||||
STATIC_PROTO(Int p_rcda, (void));
|
||||
STATIC_PROTO(Int p_rcdap, (void));
|
||||
STATIC_PROTO(Int p_rcdz, (void));
|
||||
@ -254,13 +254,13 @@ STATIC_PROTO(DBProp find_int_key, (Int));
|
||||
#define db_check_trail(x)
|
||||
#elif USE_SYSTEM_MALLOC
|
||||
#define db_check_trail(x) { \
|
||||
if (Unsigned(tofref) == Unsigned(x)) { \
|
||||
if (Unsigned(dbg->tofref) == Unsigned(x)) { \
|
||||
goto error_tr_overflow; \
|
||||
} \
|
||||
}
|
||||
#else
|
||||
#define db_check_trail(x) { \
|
||||
if (Unsigned(tofref) == Unsigned(x)) { \
|
||||
if (Unsigned(dbg->tofref) == Unsigned(x)) { \
|
||||
if(!Yap_growtrail (sizeof(CELL) * 16 * 1024L)) { \
|
||||
goto error_tr_overflow; \
|
||||
} \
|
||||
@ -369,15 +369,17 @@ static Int cmpclls(CELL *a,CELL *b,Int n)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int Yap_DBTrailOverflow(void)
|
||||
#if !THREADS
|
||||
int Yap_DBTrailOverflow()
|
||||
{
|
||||
#ifdef IDB_USE_MBIT
|
||||
return(FALSE);
|
||||
#endif
|
||||
#ifdef IDB_LINK_TABLE
|
||||
return((CELL *)lr > (CELL *)tofref - 2048);
|
||||
return((CELL *)s_dbg->lr > (CELL *)s_dbg->tofref - 2048);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/* get DB entry for ap/arity; */
|
||||
static Prop
|
||||
@ -633,7 +635,8 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
||||
#ifdef COROUTINING
|
||||
CELL *attachmentsp,
|
||||
#endif
|
||||
int *vars_foundp)
|
||||
int *vars_foundp,
|
||||
struct db_globs *dbg)
|
||||
{
|
||||
|
||||
#if THREADS
|
||||
@ -670,16 +673,16 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
||||
ap2 = RepAppl(d0);
|
||||
#ifdef RATIONAL_TREES
|
||||
if (ap2 >= tbase && ap2 < StoPoint) {
|
||||
*lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
||||
db_check_trail(lr);
|
||||
*dbg->lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
||||
db_check_trail(dbg->lr);
|
||||
*StoPoint++ = d0;
|
||||
++pt0;
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
#ifdef IDB_LINK_TABLE
|
||||
*lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
||||
db_check_trail(lr);
|
||||
*dbg->lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
||||
db_check_trail(dbg->lr);
|
||||
#endif
|
||||
f = (Functor)(*ap2);
|
||||
if (IsExtensionFunctor(f)) {
|
||||
@ -691,7 +694,7 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
||||
dbentry = DBRefOfTerm(d0);
|
||||
*StoPoint++ = d0;
|
||||
#ifdef IDB_LINK_TABLE
|
||||
lr--;
|
||||
dbg->lr--;
|
||||
#endif
|
||||
if (!(dbentry->Flags & StaticMask)) {
|
||||
if (dbentry->Flags & LogUpdMask) {
|
||||
@ -702,8 +705,8 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
||||
dbentry->NOfRefsTo++;
|
||||
}
|
||||
}
|
||||
*--tofref = dbentry;
|
||||
db_check_trail(lr);
|
||||
*--dbg->tofref = dbentry;
|
||||
db_check_trail(dbg->lr);
|
||||
/* just continue the loop */
|
||||
++ pt0;
|
||||
continue;
|
||||
@ -790,15 +793,15 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
||||
CELL *ap2 = RepPair(d0);
|
||||
if (ap2 >= tbase && ap2 < StoPoint) {
|
||||
*StoPoint++ = d0;
|
||||
*lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
||||
db_check_trail(lr);
|
||||
*dbg->lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
||||
db_check_trail(dbg->lr);
|
||||
++pt0;
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
#ifdef IDB_LINK_TABLE
|
||||
*lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
||||
db_check_trail(lr);
|
||||
*dbg->lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
||||
db_check_trail(dbg->lr);
|
||||
#endif
|
||||
#ifdef IDB_USE_MBIT
|
||||
*StoPoint++ =
|
||||
@ -883,8 +886,8 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
||||
/* the copy we keep will be the current displacement */
|
||||
*StoPoint = (CELL)StoPoint;
|
||||
StoPoint++;
|
||||
*lr++ = ToSmall(displacement);
|
||||
db_check_trail(lr);
|
||||
*dbg->lr++ = ToSmall(displacement);
|
||||
db_check_trail(dbg->lr);
|
||||
#endif
|
||||
#endif
|
||||
/* indicate we found variables */
|
||||
@ -920,8 +923,8 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
||||
} else {
|
||||
/* references need to be offset at read time */
|
||||
#ifdef IDB_LINK_TABLE
|
||||
*lr++ = ToSmall(displacement);
|
||||
db_check_trail(lr);
|
||||
*dbg->lr++ = ToSmall(displacement);
|
||||
db_check_trail(dbg->lr);
|
||||
#endif
|
||||
/* store the offset */
|
||||
#ifdef IDB_USE_MBIT
|
||||
@ -1046,7 +1049,7 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
||||
* they have appeared before, we will know by their position number
|
||||
*/
|
||||
static void
|
||||
sf_include(sfp)
|
||||
sf_include(SFKeep *sfp, struct db_globs *dbg)
|
||||
SFKeep *sfp;
|
||||
{
|
||||
Term Tm = sfp->SName;
|
||||
@ -1060,8 +1063,8 @@ sf_include(sfp)
|
||||
if (sfp->SFather != NIL)
|
||||
*(sfp->SFather) = AbsAppl(displacement);
|
||||
*StoPoint++ = FunctorOfTerm(Tm);
|
||||
*lr++ = ToSmall(displacement + 1);
|
||||
db_check_trail(lr);
|
||||
*dbg->lr++ = ToSmall(displacement + 1);
|
||||
db_check_trail(dbg->lr);
|
||||
*StoPoint++ = (Term) (displacement + 1);
|
||||
while (*tp) {
|
||||
arg_no = *tp++;
|
||||
@ -1069,8 +1072,8 @@ sf_include(sfp)
|
||||
if (IsVarTerm(tvalue)) {
|
||||
if (((VarKeep *) tvalue)->NOfVars != 0) {
|
||||
*StoPoint++ = arg_no;
|
||||
*lr++ = ToSmall(displacement + j);
|
||||
db_check_trail(lr);
|
||||
*dbg->lr++ = ToSmall(displacement + j);
|
||||
db_check_trail(dbg->lr);
|
||||
if (((VarKeep *) tvalue)->New == 0)
|
||||
*StoPoint++ = ((VarKeep *) tvalue)->New = Unsigned(displacement + j);
|
||||
else
|
||||
@ -1192,7 +1195,7 @@ scheckcells(int NOfCells, register CELL *m1, register CELL *m2, link_entry *lp,
|
||||
* mtchcells, if an error was an found, needs to test ........
|
||||
*/
|
||||
static DBRef
|
||||
check_if_nvars(DBRef p, unsigned int NOfCells, CELL *BTptr)
|
||||
check_if_nvars(DBRef p, unsigned int NOfCells, CELL *BTptr, struct db_globs *dbg)
|
||||
{
|
||||
CELL *memptr;
|
||||
|
||||
@ -1204,7 +1207,7 @@ check_if_nvars(DBRef p, unsigned int NOfCells, CELL *BTptr)
|
||||
return (p);
|
||||
memptr = CellPtr(p->DBT.Contents);
|
||||
#ifdef IDB_LINK_TABLE
|
||||
if (scheckcells(NOfCells, memptr, BTptr, LinkAr, Unsigned(p->DBT.Contents-1)))
|
||||
if (scheckcells(NOfCells, memptr, BTptr, dbg->LinkAr, Unsigned(p->DBT.Contents-1)))
|
||||
#else
|
||||
if (NOfCells == *memptr++
|
||||
&& cmpclls(memptr, BTptr, NOfCells))
|
||||
@ -1308,13 +1311,13 @@ CreateDBTermForVar(UInt extra_size)
|
||||
}
|
||||
|
||||
static DBRef
|
||||
CreateDBRefForAtom(Term Tm, DBProp p, int InFlag) {
|
||||
CreateDBRefForAtom(Term Tm, DBProp p, int InFlag, struct db_globs *dbg) {
|
||||
Register DBRef pp;
|
||||
SMALLUNSGN flag;
|
||||
|
||||
flag = DBAtomic;
|
||||
if (InFlag & MkIfNot && (found_one = check_if_cons(p->First, Tm)))
|
||||
return (found_one);
|
||||
if (InFlag & MkIfNot && (dbg->found_one = check_if_cons(p->First, Tm)))
|
||||
return dbg->found_one;
|
||||
pp = AllocDBSpace(DBLength(NIL));
|
||||
if (pp == NIL) {
|
||||
return generate_dberror_msg(OUT_OF_HEAP_ERROR, 0, "could not allocate space");
|
||||
@ -1334,11 +1337,11 @@ CreateDBRefForAtom(Term Tm, DBProp p, int InFlag) {
|
||||
}
|
||||
|
||||
static DBRef
|
||||
CreateDBRefForVar(Term Tm, DBProp p, int InFlag) {
|
||||
CreateDBRefForVar(Term Tm, DBProp p, int InFlag, struct db_globs *dbg) {
|
||||
Register DBRef pp;
|
||||
|
||||
if (InFlag & MkIfNot && (found_one = check_if_var(p->First)))
|
||||
return (found_one);
|
||||
if (InFlag & MkIfNot && (dbg->found_one = check_if_var(p->First)))
|
||||
return dbg->found_one;
|
||||
pp = AllocDBSpace(DBLength(NULL));
|
||||
if (pp == NULL) {
|
||||
return generate_dberror_msg(OUT_OF_HEAP_ERROR, 0, "could not allocate space");
|
||||
@ -1358,7 +1361,7 @@ CreateDBRefForVar(Term Tm, DBProp p, int InFlag) {
|
||||
}
|
||||
|
||||
static DBRef
|
||||
CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size, struct db_globs *dbg)
|
||||
{
|
||||
Register Term tt, *nar = NIL;
|
||||
SMALLUNSGN flag;
|
||||
@ -1395,9 +1398,9 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
#endif
|
||||
) {
|
||||
*pstat = TRUE;
|
||||
return CreateDBRefForVar(Tm, p, InFlag);
|
||||
return CreateDBRefForVar(Tm, p, InFlag, dbg);
|
||||
} else if (IsAtomOrIntTerm(Tm)) {
|
||||
return CreateDBRefForAtom(Tm, p, InFlag);
|
||||
return CreateDBRefForAtom(Tm, p, InFlag, dbg);
|
||||
}
|
||||
}
|
||||
{
|
||||
@ -1409,7 +1412,7 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
CELL attachments = 0;
|
||||
#endif
|
||||
|
||||
tofref = TmpRefBase;
|
||||
dbg->tofref = TmpRefBase;
|
||||
/* compound term */
|
||||
|
||||
if (p == NULL) {
|
||||
@ -1422,7 +1425,7 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
}
|
||||
ntp0 = ppt0->Contents;
|
||||
#ifdef IDB_LINK_TABLE
|
||||
lr = LinkAr = (link_entry *)TR;
|
||||
dbg->lr = dbg->LinkAr = (link_entry *)TR;
|
||||
#endif
|
||||
#ifdef COROUTINING
|
||||
/* attachment */
|
||||
@ -1430,7 +1433,8 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
tt = sizeof(CELL);
|
||||
ntp = MkDBTerm(VarOfTerm(Tm), VarOfTerm(Tm), ntp0, ntp0+1, ntp0-1,
|
||||
&attachments,
|
||||
&vars_found);
|
||||
&vars_found,
|
||||
dbg);
|
||||
if (ntp == NULL) {
|
||||
Yap_ReleasePreAllocCodeSpace((ADDR)pp0);
|
||||
return(NULL);
|
||||
@ -1444,7 +1448,7 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
#ifdef COROUTINING
|
||||
&attachments,
|
||||
#endif
|
||||
&vars_found);
|
||||
&vars_found, dbg);
|
||||
if (ntp == NULL) {
|
||||
Yap_ReleasePreAllocCodeSpace((ADDR)pp0);
|
||||
return(NULL);
|
||||
@ -1483,7 +1487,7 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
#ifdef COROUTINING
|
||||
&attachments,
|
||||
#endif
|
||||
&vars_found);
|
||||
&vars_found, dbg);
|
||||
if (ntp == NULL) {
|
||||
Yap_ReleasePreAllocCodeSpace((ADDR)pp0);
|
||||
return(NULL);
|
||||
@ -1497,10 +1501,11 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
}
|
||||
NOfCells = ntp - ntp0; /* End Of Code Info */
|
||||
#ifdef IDB_LINK_TABLE
|
||||
*lr++ = 0;
|
||||
NOfLinks = (lr - LinkAr);
|
||||
*dbg->lr++ = 0;
|
||||
NOfLinks = (dbg->lr - dbg->LinkAr);
|
||||
#endif
|
||||
if (vars_found || InFlag & InQueue) {
|
||||
|
||||
/*
|
||||
* Take into account the fact that one needs an entry
|
||||
* for the number of links
|
||||
@ -1508,7 +1513,7 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
flag = DBComplex;
|
||||
#ifdef IDB_LINK_TABLE
|
||||
CodeAbs++; /* We have one more cell */
|
||||
CodeAbs += CellPtr(lr) - CellPtr(LinkAr);
|
||||
CodeAbs += CellPtr(dbg->lr) - CellPtr(dbg->LinkAr);
|
||||
if ((CELL *)((char *)ntp0+(CELL)CodeAbs) > AuxSp) {
|
||||
Yap_Error_Size = (UInt)DBLength(CodeAbs);
|
||||
Yap_Error_TYPE = OUT_OF_HEAP_ERROR;
|
||||
@ -1516,26 +1521,26 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
return(NULL);
|
||||
}
|
||||
/* restore lr to NULL in case there is a TR overflow */
|
||||
lr = NULL;
|
||||
dbg->lr = NULL;
|
||||
#endif
|
||||
if ((InFlag & MkIfNot) && (found_one = check_if_wvars(p->First, NOfCells, ntp0))) {
|
||||
if ((InFlag & MkIfNot) && (dbg->found_one = check_if_wvars(p->First, NOfCells, ntp0))) {
|
||||
Yap_ReleasePreAllocCodeSpace((ADDR)pp0);
|
||||
return (found_one);
|
||||
return dbg->found_one;
|
||||
}
|
||||
} else {
|
||||
#ifdef IDB_LINK_TABLE
|
||||
/* make sure lr ends in 0 for check_if_nvars */
|
||||
/* restore lr to NULL in case there is a TR overflow */
|
||||
lr = NULL;
|
||||
dbg->lr = NULL;
|
||||
#endif
|
||||
flag = DBNoVars;
|
||||
if ((InFlag & MkIfNot) && (found_one = check_if_nvars(p->First, NOfCells, ntp0))) {
|
||||
if ((InFlag & MkIfNot) && (dbg->found_one = check_if_nvars(p->First, NOfCells, ntp0, dbg))) {
|
||||
Yap_ReleasePreAllocCodeSpace((ADDR)pp0);
|
||||
return (found_one);
|
||||
return dbg->found_one;
|
||||
}
|
||||
}
|
||||
if (tofref != TmpRefBase) {
|
||||
CodeAbs += (TmpRefBase - tofref) + 1;
|
||||
if (dbg->tofref != TmpRefBase) {
|
||||
CodeAbs += (TmpRefBase - dbg->tofref) + 1;
|
||||
if ((CELL *)((char *)ntp0+(CELL)CodeAbs) > AuxSp) {
|
||||
Yap_Error_Size = (UInt)DBLength(CodeAbs);
|
||||
Yap_Error_TYPE = OUT_OF_HEAP_ERROR;
|
||||
@ -1596,7 +1601,7 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
}
|
||||
#ifdef IDB_LINK_TABLE
|
||||
woar = (link_entry *)nar;
|
||||
memcpy((void *)woar,(const void *)LinkAr,(size_t)(NOfLinks*sizeof(link_entry)));
|
||||
memcpy((void *)woar,(const void *)dbg->LinkAr,(size_t)(NOfLinks*sizeof(link_entry)));
|
||||
woar += NOfLinks;
|
||||
#ifdef ALIGN_LONGS
|
||||
#if SIZEOF_INT_P==8
|
||||
@ -1626,7 +1631,7 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
}
|
||||
if (ppt != ppt0) {
|
||||
#ifdef IDB_LINK_TABLE
|
||||
linkblk(LinkAr, CellPtr(ppt->Contents-1), (CELL)ppt-(CELL)ppt0);
|
||||
linkblk(dbg->LinkAr, CellPtr(ppt->Contents-1), (CELL)ppt-(CELL)ppt0);
|
||||
#endif
|
||||
ppt->Entry = AdjustIDBPtr(tt,(CELL)ppt-(CELL)ppt0);
|
||||
#ifdef COROUTINING
|
||||
@ -1640,7 +1645,7 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size)
|
||||
DBRef *ptr = TmpRefBase, *rfnar = (DBRef *)nar;
|
||||
|
||||
*rfnar++ = NULL;
|
||||
while (ptr != tofref)
|
||||
while (ptr != dbg->tofref)
|
||||
*rfnar++ = *--ptr;
|
||||
ppt->DBRefs = rfnar;
|
||||
} else {
|
||||
@ -1658,18 +1663,20 @@ record(int Flag, Term key, Term t_data, Term t_code)
|
||||
Register DBProp p;
|
||||
Register DBRef x;
|
||||
int needs_vars;
|
||||
struct db_globs dbg;
|
||||
|
||||
|
||||
s_dbg = &dbg;
|
||||
dbg.found_one = NULL;
|
||||
#ifdef SFUNC
|
||||
FathersPlace = NIL;
|
||||
#endif
|
||||
if (EndOfPAEntr(p = FetchDBPropFromKey(twork, Flag & MkCode, TRUE, "record/3"))) {
|
||||
return(NULL);
|
||||
}
|
||||
if ((x = CreateDBStruct(t_data, p, Flag, &needs_vars, 0)) == NULL) {
|
||||
if ((x = CreateDBStruct(t_data, p, Flag, &needs_vars, 0, &dbg)) == NULL) {
|
||||
return (NULL);
|
||||
}
|
||||
if ((Flag & MkIfNot) && found_one)
|
||||
if ((Flag & MkIfNot) && dbg.found_one)
|
||||
return (NULL);
|
||||
TRAIL_REF(x);
|
||||
if (x->Flags & (DBNoVars|DBComplex))
|
||||
@ -1733,13 +1740,14 @@ record_at(int Flag, DBRef r0, Term t_data, Term t_code)
|
||||
Register DBProp p;
|
||||
Register DBRef x;
|
||||
int needs_vars;
|
||||
struct db_globs dbg;
|
||||
|
||||
|
||||
s_dbg = &dbg;
|
||||
#ifdef SFUNC
|
||||
FathersPlace = NIL;
|
||||
#endif
|
||||
p = r0->Parent;
|
||||
if ((x = CreateDBStruct(t_data, p, Flag, &needs_vars, 0)) == NULL) {
|
||||
if ((x = CreateDBStruct(t_data, p, Flag, &needs_vars, 0, &dbg)) == NULL) {
|
||||
return (NULL);
|
||||
}
|
||||
TRAIL_REF(x);
|
||||
@ -1813,9 +1821,11 @@ record_lu(PredEntry *pe, Term t, int position)
|
||||
DBTerm *x;
|
||||
LogUpdClause *cl;
|
||||
int needs_vars = FALSE;
|
||||
struct db_globs dbg;
|
||||
|
||||
s_dbg = &dbg;
|
||||
ipc = NEXTOP(((LogUpdClause *)NULL)->ClCode,e);
|
||||
if ((x = (DBTerm *)CreateDBStruct(t, NULL, 0, &needs_vars, (UInt)ipc)) == NULL) {
|
||||
if ((x = (DBTerm *)CreateDBStruct(t, NULL, 0, &needs_vars, (UInt)ipc, &dbg)) == NULL) {
|
||||
return NULL; /* crash */
|
||||
}
|
||||
cl = (LogUpdClause *)((ADDR)x-(UInt)ipc);
|
||||
@ -4610,10 +4620,12 @@ StoreTermInDB(Term t, int nargs)
|
||||
{
|
||||
DBTerm *x;
|
||||
int needs_vars;
|
||||
struct db_globs dbg;
|
||||
|
||||
s_dbg = &dbg;
|
||||
Yap_Error_Size = 0;
|
||||
while ((x = (DBTerm *)CreateDBStruct(t, (DBProp)NULL,
|
||||
InQueue, &needs_vars, 0)) == NULL) {
|
||||
InQueue, &needs_vars, 0, &dbg)) == NULL) {
|
||||
switch(Yap_Error_TYPE) {
|
||||
case YAP_NO_ERROR:
|
||||
#ifdef DEBUG
|
||||
@ -4655,9 +4667,11 @@ Yap_StoreTermInDB(Term t, int nargs) {
|
||||
DBTerm *
|
||||
Yap_StoreTermInDBPlusExtraSpace(Term t, UInt extra_size) {
|
||||
int needs_vars;
|
||||
struct db_globs dbg;
|
||||
|
||||
s_dbg = &dbg;
|
||||
return (DBTerm *)CreateDBStruct(t, (DBProp)NULL,
|
||||
InQueue, &needs_vars, extra_size);
|
||||
InQueue, &needs_vars, extra_size, &dbg);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user