diff --git a/C/utilpreds.c b/C/utilpreds.c
index d65cdca05..1f20a9cb4 100644
--- a/C/utilpreds.c
+++ b/C/utilpreds.c
@@ -1,54 +1,57 @@
/*************************************************************************
- * *
- * YAP Prolog *
- * *
- * Yap Prolog was developed at NCCUP - Universidade do Porto *
- * *
- * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
- *
- **************************************************************************
- * *
- * File: utilpreds.c * Last rev: 4/03/88
- ** mods: * comments: new utility predicates for YAP *
- * *
- *************************************************************************/
+* *
+* YAP Prolog *
+* *
+* Yap Prolog was developed at NCCUP - Universidade do Porto *
+* *
+* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
+* *
+**************************************************************************
+* *
+* File: utilpreds.c *
+* Last rev: 4/03/88 *
+* mods: *
+* comments: new utility predicates for YAP *
+* *
+*************************************************************************/
#ifdef SCCS
-static char SccsId[] = "@(#)utilpreds.c 1.3";
+static char SccsId[] = "@(#)utilpreds.c 1.3";
#endif
/**
* @addtogroup Terms
*/
-#include "absmi.h"
+#include "absmi.h"
#include "YapHeap.h"
-#include "attvar.h"
#include "yapio.h"
+#include "attvar.h"
#ifdef HAVE_STRING_H
#include "string.h"
#endif
typedef struct {
- Term old_var;
- Term new_var;
-} * vcell;
+ Term old_var;
+ Term new_var;
+} *vcell;
-static int copy_complex_term(CELL *, CELL *, int, int, CELL *,
- CELL *CACHE_TYPE);
-static CELL vars_in_complex_term(CELL *, CELL *, Term CACHE_TYPE);
-static Int p_non_singletons_in_term(USES_REGS1);
-static CELL non_singletons_in_complex_term(CELL *, CELL *CACHE_TYPE);
-static Int p_variables_in_term(USES_REGS1);
-static Int ground_complex_term(CELL *, CELL *CACHE_TYPE);
-static Int p_ground(USES_REGS1);
-static Int p_copy_term(USES_REGS1);
-static Int var_in_complex_term(CELL *, CELL *, Term CACHE_TYPE);
+
+static int copy_complex_term(CELL *, CELL *, int, int, CELL *, CELL * CACHE_TYPE);
+static CELL vars_in_complex_term(CELL *, CELL *, Term CACHE_TYPE);
+static Int p_non_singletons_in_term( USES_REGS1);
+static CELL non_singletons_in_complex_term(CELL *, CELL * CACHE_TYPE);
+static Int p_variables_in_term( USES_REGS1 );
+static Int ground_complex_term(CELL *, CELL * CACHE_TYPE);
+static Int p_ground( USES_REGS1 );
+static Int p_copy_term( USES_REGS1 );
+static Int var_in_complex_term(CELL *, CELL *, Term CACHE_TYPE);
#ifdef DEBUG
-static Int p_force_trail_expansion(USES_REGS1);
+static Int p_force_trail_expansion( USES_REGS1 );
#endif /* DEBUG */
-static inline void clean_tr(tr_fr_ptr TR0 USES_REGS) {
+static inline void
+clean_tr(tr_fr_ptr TR0 USES_REGS) {
if (TR != TR0) {
do {
Term p = TrailTerm(--TR);
@@ -57,7 +60,8 @@ static inline void clean_tr(tr_fr_ptr TR0 USES_REGS) {
}
}
-static inline void clean_dirty_tr(tr_fr_ptr TR0 USES_REGS) {
+static inline void
+clean_dirty_tr(tr_fr_ptr TR0 USES_REGS) {
if (TR != TR0) {
tr_fr_ptr pt = TR0;
@@ -69,218 +73,217 @@ static inline void clean_dirty_tr(tr_fr_ptr TR0 USES_REGS) {
}
}
-static int copy_complex_term(CELL *pt0, CELL *pt0_end, int share, int newattvs,
- CELL *ptf, CELL *HLow USES_REGS) {
+static int
+copy_complex_term(CELL *pt0, CELL *pt0_end, int share, int newattvs, CELL *ptf, CELL *HLow USES_REGS)
+{
- struct cp_frame *to_visit0,
- *to_visit = (struct cp_frame *)Yap_PreAllocCodeSpace();
+ struct cp_frame *to_visit0, *to_visit = (struct cp_frame *)Yap_PreAllocCodeSpace() ;
CELL *HB0 = HB;
tr_fr_ptr TR0 = TR;
int ground = TRUE;
HB = HR;
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, copy_term_unk);
- copy_term_nvar : {
- if (IsPairTerm(d0)) {
- CELL *ap2 = RepPair(d0);
- if (ap2 >= HB && ap2 < HR) {
- /* If this is newer than the current term, just reuse */
- *ptf++ = d0;
- continue;
- }
- *ptf = AbsPair(HR);
- ptf++;
+ copy_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ CELL *ap2 = RepPair(d0);
+ if (ap2 >= HB && ap2 < HR) {
+ /* If this is newer than the current term, just reuse */
+ *ptf++ = d0;
+ continue;
+ }
+ *ptf = AbsPair(HR);
+ ptf++;
#ifdef RATIONAL_TREES
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->oldv = *pt0;
- to_visit->ground = ground;
- /* fool the system into thinking we had a variable there */
- *pt0 = AbsPair(HR);
- to_visit++;
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->oldv = *pt0;
+ to_visit->ground = ground;
+ /* fool the system into thinking we had a variable there */
+ *pt0 = AbsPair(HR);
+ to_visit ++;
#else
- if (pt0 < pt0_end) {
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->ground = ground;
- to_visit++;
- }
+ if (pt0 < pt0_end) {
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->ground = ground;
+ to_visit ++;
+ }
#endif
- ground = TRUE;
- pt0 = ap2 - 1;
- pt0_end = ap2 + 1;
- ptf = HR;
- HR += 2;
- if (HR > ASP - 2048) {
- goto overflow;
- }
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- if (ap2 >= HB && ap2 <= HR) {
- /* If this is newer than the current term, just reuse */
- *ptf++ = d0;
- continue;
- }
- f = (Functor)(*ap2);
+ ground = TRUE;
+ pt0 = ap2 - 1;
+ pt0_end = ap2 + 1;
+ ptf = HR;
+ HR += 2;
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ if (ap2 >= HB && ap2 <= HR) {
+ /* If this is newer than the current term, just reuse */
+ *ptf++ = d0;
+ continue;
+ }
+ f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
+ if (IsExtensionFunctor(f)) {
#if MULTIPLE_STACKS
- if (f == FunctorDBRef) {
- DBRef entryref = DBRefOfTerm(d0);
- if (entryref->Flags & LogUpdMask) {
- LogUpdClause *luclause = (LogUpdClause *)entryref;
- PELOCK(100, luclause->ClPred);
- UNLOCK(luclause->ClPred->PELock);
- } else {
- LOCK(entryref->lock);
- TRAIL_REF(entryref); /* So that fail will erase it */
- INC_DBREF_COUNT(entryref);
- UNLOCK(entryref->lock);
- }
- *ptf++ = d0; /* you can just copy other extensions. */
- } else
+ if (f == FunctorDBRef) {
+ DBRef entryref = DBRefOfTerm(d0);
+ if (entryref->Flags & LogUpdMask) {
+ LogUpdClause *luclause = (LogUpdClause *)entryref;
+ PELOCK(100,luclause->ClPred);
+ UNLOCK(luclause->ClPred->PELock);
+ } else {
+ LOCK(entryref->lock);
+ TRAIL_REF(entryref); /* So that fail will erase it */
+ INC_DBREF_COUNT(entryref);
+ UNLOCK(entryref->lock);
+ }
+ *ptf++ = d0; /* you can just copy other extensions. */
+ } else
#endif
- if (!share) {
- UInt sz;
+ if (!share) {
+ UInt sz;
- *ptf++ = AbsAppl(HR); /* you can just copy other extensions. */
- /* make sure to copy floats */
- if (f == FunctorDouble) {
- sz = sizeof(Float) / sizeof(CELL) + 2;
- } else if (f == FunctorLongInt) {
- sz = 3;
- } else if (f == FunctorString) {
- sz = 3 + ap2[1];
- } else {
- CELL *pt = ap2 + 1;
- sz = 2 + sizeof(MP_INT) +
- (((MP_INT *)(pt + 1))->_mp_alloc * sizeof(mp_limb_t));
- }
- if (HR + sz > ASP - 2048) {
- goto overflow;
- }
- memmove((void *)HR, (void *)ap2, sz * sizeof(CELL));
- HR += sz;
- } else {
- *ptf++ = d0; /* you can just copy other extensions. */
- }
- continue;
- }
- *ptf = AbsAppl(HR);
- ptf++;
- /* store the terms to visit */
+ *ptf++ = AbsAppl(HR); /* you can just copy other extensions. */
+ /* make sure to copy floats */
+ if (f== FunctorDouble) {
+ sz = sizeof(Float)/sizeof(CELL)+2;
+ } else if (f== FunctorLongInt) {
+ sz = 3;
+ } else if (f== FunctorString) {
+ sz = 3+ap2[1];
+ } else {
+ CELL *pt = ap2+1;
+ sz = 2+sizeof(MP_INT)+(((MP_INT *)(pt+1))->_mp_alloc*sizeof(mp_limb_t));
+ }
+ if (HR+sz > ASP - 2048) {
+ goto overflow;
+ }
+ memmove((void *)HR, (void *)ap2, sz*sizeof(CELL));
+ HR += sz;
+ } else {
+ *ptf++ = d0; /* you can just copy other extensions. */
+ }
+ continue;
+ }
+ *ptf = AbsAppl(HR);
+ ptf++;
+ /* store the terms to visit */
#ifdef RATIONAL_TREES
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->oldv = *pt0;
- to_visit->ground = ground;
- /* fool the system into thinking we had a variable there */
- *pt0 = AbsAppl(HR);
- to_visit++;
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->oldv = *pt0;
+ to_visit->ground = ground;
+ /* fool the system into thinking we had a variable there */
+ *pt0 = AbsAppl(HR);
+ to_visit ++;
#else
- if (pt0 < pt0_end) {
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->ground = ground;
- to_visit++;
- }
+ if (pt0 < pt0_end) {
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->ground = ground;
+ to_visit ++;
+ }
#endif
- ground = (f != FunctorMutable);
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
- /* store the functor for the new term */
- HR[0] = (CELL)f;
- ptf = HR + 1;
- HR += 1 + d0;
- if (HR > ASP - 2048) {
- goto overflow;
+ ground = (f != FunctorMutable);
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ /* store the functor for the new term */
+ HR[0] = (CELL)f;
+ ptf = HR+1;
+ HR += 1+d0;
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
+ } else {
+ /* just copy atoms or integers */
+ *ptf++ = d0;
}
- } else {
- /* just copy atoms or integers */
- *ptf++ = d0;
+ continue;
}
- continue;
- }
derefa_body(d0, ptd0, copy_term_unk, copy_term_nvar);
ground = FALSE;
if (ptd0 >= HLow && ptd0 < HR) {
/* we have already found this cell */
- *ptf++ = (CELL)ptd0;
+ *ptf++ = (CELL) ptd0;
} else
#if COROUTINING
- if (newattvs && IsAttachedTerm((CELL)ptd0)) {
- /* if unbound, call the standard copy term routine */
- struct cp_frame *bp;
+ if (newattvs && IsAttachedTerm((CELL)ptd0)) {
+ /* if unbound, call the standard copy term routine */
+ struct cp_frame *bp;
- CELL new;
+ CELL new;
- bp = to_visit;
- if (!GLOBAL_attas[ExtFromCell(ptd0)].copy_term_op(ptd0, &bp,
- ptf PASS_REGS)) {
- goto overflow;
- }
- to_visit = bp;
- new = *ptf;
- Bind_NonAtt(ptd0, new);
- ptf++;
- } else {
+ bp = to_visit;
+ if (!GLOBAL_attas[ExtFromCell(ptd0)].copy_term_op(ptd0, &bp, ptf PASS_REGS)) {
+ goto overflow;
+ }
+ to_visit = bp;
+ new = *ptf;
+ Bind_NonAtt(ptd0, new);
+ ptf++;
+ } else {
#endif
- /* first time we met this term */
- RESET_VARIABLE(ptf);
- if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
- /* Trail overflow */
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
- goto trail_overflow;
- }
- }
- Bind_NonAtt(ptd0, (CELL)ptf);
- ptf++;
+ /* first time we met this term */
+ RESET_VARIABLE(ptf);
+ if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
+ /* Trail overflow */
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
+ goto trail_overflow;
+ }
+ }
+ Bind_NonAtt(ptd0, (CELL)ptf);
+ ptf++;
#ifdef COROUTINING
}
#endif
}
/* Do we still have compound terms to visit */
if (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
if (ground && share) {
CELL old = to_visit->oldv;
- CELL *newp = to_visit->to - 1;
+ CELL *newp = to_visit->to-1;
CELL new = *newp;
*newp = old;
if (IsApplTerm(new))
- HR = RepAppl(new);
+ HR = RepAppl(new);
else
- HR = RepPair(new);
+ HR = RepPair(new);
}
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
@@ -297,7 +300,7 @@ loop:
HB = HB0;
return ground;
-overflow:
+ overflow:
/* oops, we're in trouble */
HR = HLow;
/* we've done it */
@@ -305,7 +308,7 @@ overflow:
HB = HB0;
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -324,7 +327,7 @@ trail_overflow:
HB = HB0;
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -332,15 +335,15 @@ trail_overflow:
}
#endif
{
- tr_fr_ptr oTR = TR;
+ tr_fr_ptr oTR = TR;
reset_trail(TR0);
- if (!Yap_growtrail((oTR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
+ if (!Yap_growtrail((oTR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
return -4;
}
return -2;
}
-heap_overflow:
+ heap_overflow:
/* oops, we're in trouble */
HR = HLow;
/* we've done it */
@@ -348,7 +351,7 @@ heap_overflow:
HB = HB0;
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -356,45 +359,50 @@ heap_overflow:
}
#endif
reset_trail(TR0);
- LOCAL_Error_Size = (ADDR)AuxSp - (ADDR)to_visit0;
+ LOCAL_Error_Size = (ADDR)AuxSp-(ADDR)to_visit0;
return -3;
-}
+ }
-static Term handle_cp_overflow(int res, tr_fr_ptr TR0, UInt arity, Term t) {
+
+static Term
+handle_cp_overflow(int res, tr_fr_ptr TR0, UInt arity, Term t)
+{
CACHE_REGS
- XREGS[arity + 1] = t;
- switch (res) {
+ XREGS[arity+1] = t;
+ switch(res) {
case -1:
- if (!Yap_gcl((ASP - HR) * sizeof(CELL), arity + 1, ENV, gc_P(P, CP))) {
+ if (!Yap_gcl((ASP-HR)*sizeof(CELL), arity+1, ENV, gc_P(P,CP))) {
Yap_Error(RESOURCE_ERROR_STACK, TermNil, LOCAL_ErrorMessage);
return 0L;
}
- return Deref(XREGS[arity + 1]);
+ return Deref(XREGS[arity+1]);
case -2:
- return Deref(XREGS[arity + 1]);
- case -3: {
- UInt size = LOCAL_Error_Size;
- LOCAL_Error_Size = 0L;
- if (size > 4 * 1024 * 1024)
- size = 4 * 1024 * 1024;
- if (!Yap_ExpandPreAllocCodeSpace(size, NULL, TRUE)) {
- Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, TermNil, LOCAL_ErrorMessage);
- return 0L;
+ return Deref(XREGS[arity+1]);
+ case -3:
+ {
+ UInt size = LOCAL_Error_Size;
+ LOCAL_Error_Size = 0L;
+ if (size > 4*1024*1024)
+ size = 4*1024*1024;
+ if (!Yap_ExpandPreAllocCodeSpace(size, NULL, TRUE)) {
+ Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, TermNil, LOCAL_ErrorMessage);
+ return 0L;
+ }
}
- }
- return Deref(XREGS[arity + 1]);
+ return Deref(XREGS[arity+1]);
case -4:
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), FALSE)) {
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), FALSE)) {
Yap_Error(RESOURCE_ERROR_TRAIL, TermNil, LOCAL_ErrorMessage);
return 0L;
}
- return Deref(XREGS[arity + 1]);
+ return Deref(XREGS[arity+1]);
default:
return 0L;
}
}
-static Term CopyTerm(Term inp, UInt arity, int share, int newattvs USES_REGS) {
+static Term
+CopyTerm(Term inp, UInt arity, int share, int newattvs USES_REGS) {
Term t = Deref(inp);
tr_fr_ptr TR0 = TR;
@@ -406,14 +414,13 @@ static Term CopyTerm(Term inp, UInt arity, int share, int newattvs USES_REGS) {
restart_attached:
*HR = t;
- Hi = HR + 1;
+ Hi = HR+1;
HR += 2;
- if ((res = copy_complex_term(Hi - 2, Hi - 1, share, newattvs, Hi,
- Hi PASS_REGS)) < 0) {
- HR = Hi - 1;
- if ((t = handle_cp_overflow(res, TR0, arity, t)) == 0L)
- return FALSE;
- goto restart_attached;
+ if ((res = copy_complex_term(Hi-2, Hi-1, share, newattvs, Hi, Hi PASS_REGS)) < 0) {
+ HR = Hi-1;
+ if ((t = handle_cp_overflow(res, TR0, arity, t))== 0L)
+ return FALSE;
+ goto restart_attached;
}
return Hi[0];
}
@@ -433,15 +440,14 @@ static Term CopyTerm(Term inp, UInt arity, int share, int newattvs USES_REGS) {
HR += 2;
{
int res;
- if ((res = copy_complex_term(ap - 1, ap + 1, share, newattvs, Hi,
- Hi PASS_REGS)) < 0) {
- HR = Hi;
- if ((t = handle_cp_overflow(res, TR0, arity, t)) == 0L)
- return FALSE;
- goto restart_list;
+ if ((res = copy_complex_term(ap-1, ap+1, share, newattvs, Hi, Hi PASS_REGS)) < 0) {
+ HR = Hi;
+ if ((t = handle_cp_overflow(res, TR0, arity, t))== 0L)
+ return FALSE;
+ goto restart_list;
} else if (res && share) {
- HR = Hi;
- return t;
+ HR = Hi;
+ return t;
}
}
return tf;
@@ -457,69 +463,74 @@ static Term CopyTerm(Term inp, UInt arity, int share, int newattvs USES_REGS) {
ap = RepAppl(t);
tf = AbsAppl(HR);
HR[0] = (CELL)f;
- HR += 1 + ArityOfFunctor(f);
- if (HR > ASP - 128) {
+ HR += 1+ArityOfFunctor(f);
+ if (HR > ASP-128) {
HR = HB0;
- if ((t = handle_cp_overflow(-1, TR0, arity, t)) == 0L)
- return FALSE;
+ if ((t = handle_cp_overflow(-1, TR0, arity, t))== 0L)
+ return FALSE;
goto restart_appl;
} else {
int res;
- if ((res = copy_complex_term(ap, ap + ArityOfFunctor(f), share, newattvs,
- HB0 + 1, HB0 PASS_REGS)) < 0) {
- HR = HB0;
- if ((t = handle_cp_overflow(res, TR0, arity, t)) == 0L)
- return FALSE;
- goto restart_appl;
+ if ((res = copy_complex_term(ap, ap+ArityOfFunctor(f), share, newattvs, HB0+1, HB0 PASS_REGS)) < 0) {
+ HR = HB0;
+ if ((t = handle_cp_overflow(res, TR0, arity, t))== 0L)
+ return FALSE;
+ goto restart_appl;
} else if (res && share && FunctorOfTerm(t) != FunctorMutable) {
- HR = HB0;
- return t;
+ HR = HB0;
+ return t;
}
}
return tf;
}
}
-Term Yap_CopyTerm(Term inp) {
+Term
+Yap_CopyTerm(Term inp) {
CACHE_REGS
return CopyTerm(inp, 0, TRUE, TRUE PASS_REGS);
}
-Term Yap_CopyTermNoShare(Term inp) {
+Term
+Yap_CopyTermNoShare(Term inp) {
CACHE_REGS
return CopyTerm(inp, 0, FALSE, FALSE PASS_REGS);
}
-static Int p_copy_term(USES_REGS1) /* copy term t to a new instance */
+static Int
+p_copy_term( USES_REGS1 ) /* copy term t to a new instance */
{
Term t = CopyTerm(ARG1, 2, TRUE, TRUE PASS_REGS);
if (t == 0L)
return FALSE;
/* be careful, there may be a stack shift here */
- return Yap_unify(ARG2, t);
+ return Yap_unify(ARG2,t);
}
-static Int p_duplicate_term(USES_REGS1) /* copy term t to a new instance */
+static Int
+p_duplicate_term( USES_REGS1 ) /* copy term t to a new instance */
{
Term t = CopyTerm(ARG1, 2, FALSE, TRUE PASS_REGS);
if (t == 0L)
return FALSE;
/* be careful, there may be a stack shift here */
- return Yap_unify(ARG2, t);
+ return Yap_unify(ARG2,t);
}
static Int
-p_copy_term_no_delays(USES_REGS1) /* copy term t to a new instance */
+p_copy_term_no_delays( USES_REGS1 ) /* copy term t to a new instance */
{
Term t = CopyTerm(ARG1, 2, TRUE, FALSE PASS_REGS);
if (t == 0L) {
return FALSE;
}
/* be careful, there may be a stack shift here */
- return (Yap_unify(ARG2, t));
+ return(Yap_unify(ARG2,t));
}
+
+
typedef struct bp_frame {
CELL *start_cp;
CELL *end_cp;
@@ -528,144 +539,149 @@ typedef struct bp_frame {
CELL oldv;
} bp_frame_t;
+
+
typedef struct copy_frame {
CELL *start_cp;
CELL *end_cp;
CELL *to;
} copy_frame_t;
-static Term add_to_list(Term inp, Term v, Term t PASS_REGS) {
+static Term
+add_to_list( Term inp, Term v, Term t PASS_REGS)
+{
Term ta[2];
ta[0] = v;
ta[1] = t;
- return MkPairTerm(Yap_MkApplTerm(FunctorEq, 2, ta), inp);
+ return MkPairTerm(Yap_MkApplTerm( FunctorEq, 2, ta ), inp);
}
-static int break_rationals_complex_term(CELL *pt0, CELL *pt0_end, CELL *ptf,
- Term *vout, Term vin,
- CELL *HLow USES_REGS) {
- struct bp_frame *to_visit0,
- *to_visit = (struct bp_frame *)Yap_PreAllocCodeSpace();
+static int
+break_rationals_complex_term(CELL *pt0, CELL *pt0_end, CELL *ptf, Term *vout, Term vin,CELL *HLow USES_REGS)
+{
+
+ struct bp_frame *to_visit0, *to_visit = (struct bp_frame *)Yap_PreAllocCodeSpace() ;
CELL *HB0 = HB;
tr_fr_ptr TR0 = TR;
HB = HR;
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, copy_term_unk);
- copy_term_nvar : {
- if (IsPairTerm(d0)) {
- CELL *ap2 = RepPair(d0);
- fprintf(stderr, "%ld \n", RepPair(ap2[0]) - ptf);
- if (IsVarTerm(ap2[0]) && IN_BETWEEN(HB, (ap2[0]), HR)) {
- Term v = MkVarTerm();
- *ptf = v;
- vin = add_to_list(vin, (CELL)(ptf), AbsPair(ptf));
- ptf++;
- continue;
- }
- if (to_visit + 1 >= (struct bp_frame *)AuxSp) {
- goto heap_overflow;
- }
- *ptf++ = (CELL)(HR);
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->oldp = ap2;
- d0 = to_visit->oldv = ap2[0];
- /* fool the system into thinking we had a variable there */
- to_visit++;
- pt0 = ap2;
- pt0_end = ap2 + 1;
- ptf = HR;
- *ap2 = AbsPair(HR);
- HR += 2;
- if (HR > ASP - 2048) {
- goto overflow;
- }
- if (IsVarTerm(d0) && d0 == (CELL)ap2) {
- RESET_VARIABLE(ptf);
- ptf++;
- continue;
- }
- d0 = Deref(d0);
- if (!IsVarTerm(d0)) {
- goto copy_term_nvar;
- } else {
- *ptf++ = d0;
- }
- continue;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0) + 1;
- f = (Functor)(ap2[-1]);
- if (IsExtensionFunctor(f)) {
- *ptf++ = d0; /* you can just copy other extensions. */
- continue;
- }
- if (IsApplTerm(ap2[0]) && IN_BETWEEN(HB, RepAppl(ap2[0]), HR)) {
- RESET_VARIABLE(ptf);
- vin = add_to_list(vin, (CELL)ptf, ap2[0]);
- ptf++;
- continue;
- }
+ copy_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ CELL *ap2 = RepPair(d0);
+ fprintf(stderr, "%ld \n", RepPair(ap2[0])- ptf);
+ if (IsVarTerm(ap2[0]) && IN_BETWEEN(HB, (ap2[0]),HR)) {
+ Term v = MkVarTerm();
+ *ptf = v;
+ vin = add_to_list(vin, (CELL)(ptf), AbsPair(ptf) );
+ ptf++;
+ continue;
+ }
+ if (to_visit+1 >= (struct bp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ *ptf++ = (CELL)(HR);
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->oldp = ap2;
+ d0 = to_visit->oldv = ap2[0];
+ /* fool the system into thinking we had a variable there */
+ to_visit ++;
+ pt0 = ap2;
+ pt0_end = ap2 + 1;
+ ptf = HR;
+ *ap2 = AbsPair(HR);
+ HR += 2;
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
+ if (IsVarTerm(d0) && d0 == (CELL)ap2) {
+ RESET_VARIABLE(ptf);
+ ptf++;
+ continue;
+ }
+ d0 = Deref(d0);
+ if (!IsVarTerm(d0)) {
+ goto copy_term_nvar;
+ } else {
+ *ptf++ = d0;
+ }
+ continue;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0)+1;
+ f = (Functor)(ap2[-1]);
+ if (IsExtensionFunctor(f)) {
+ *ptf++ = d0; /* you can just copy other extensions. */
+ continue;
+ }
+ if (IsApplTerm(ap2[0]) && IN_BETWEEN(HB, RepAppl(ap2[0]),HR)) {
+ RESET_VARIABLE(ptf);
+ vin = add_to_list(vin, (CELL)ptf, ap2[0] );
+ ptf++;
+ continue;
+ }
- arity_t arity = ArityOfFunctor(f);
- if (to_visit + 1 >= (struct bp_frame *)AuxSp) {
- goto heap_overflow;
- }
- *ptf++ = AbsAppl(HR);
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->oldp = ap2;
- d0 = to_visit->oldv = ap2[0];
- /* fool the system into thinking we had a variable there */
- to_visit++;
- pt0 = ap2;
- pt0_end = ap2 + (arity - 1);
- ptf = HR;
- if (HR > ASP - 2048) {
- goto overflow;
- }
- *ptf++ = (CELL)f;
- *ap2 = AbsAppl(HR);
- HR += (arity + 1);
- if (IsVarTerm(d0) && d0 == (CELL)(ap2)) {
- RESET_VARIABLE(ptf);
- ptf++;
- continue;
- }
- d0 = Deref(d0);
- if (!IsVarTerm(d0)) {
- goto copy_term_nvar;
+ arity_t arity = ArityOfFunctor(f);
+ if (to_visit+1 >= (struct bp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ *ptf++ = AbsAppl(HR);
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->oldp = ap2;
+ d0 = to_visit->oldv = ap2[0];
+ /* fool the system into thinking we had a variable there */
+ to_visit ++;
+ pt0 = ap2;
+ pt0_end = ap2 + (arity-1);
+ ptf = HR;
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
+ *ptf++ =(CELL)f;
+ *ap2 = AbsAppl(HR);
+ HR += (arity+1);
+ if (IsVarTerm(d0) && d0 == (CELL)(ap2)) {
+ RESET_VARIABLE(ptf);
+ ptf++;
+ continue;
+ }
+ d0 = Deref(d0);
+ if (!IsVarTerm(d0)) {
+ goto copy_term_nvar;
+ } else {
+ *ptf++ = d0;
+ }
+ continue;
} else {
- *ptf++ = d0;
+ /* just copy atoms or integers */
+ *ptf++ = d0;
}
continue;
- } else {
- /* just copy atoms or integers */
- *ptf++ = d0;
}
- continue;
- }
derefa_body(d0, ptd0, copy_term_unk, copy_term_nvar);
- *ptf++ = (CELL)ptd0;
+ *ptf++ = (CELL) ptd0;
}
/* Do we still have compound terms to visit */
if (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
*to_visit->oldp = to_visit->oldv;
ptf = to_visit->to;
pt0 = to_visit->start_cp;
@@ -678,7 +694,7 @@ loop:
*vout = vin;
return true;
-overflow:
+ overflow:
/* oops, we're in trouble */
HR = HLow;
/* we've done it */
@@ -686,7 +702,7 @@ overflow:
HB = HB0;
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -697,7 +713,7 @@ overflow:
/* follow chain of multi-assigned variables */
return -1;
-heap_overflow:
+ heap_overflow:
/* oops, we're in trouble */
HR = HLow;
/* we've done it */
@@ -705,7 +721,7 @@ heap_overflow:
HB = HB0;
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -713,11 +729,13 @@ heap_overflow:
}
#endif
reset_trail(TR0);
- LOCAL_Error_Size = (ADDR)AuxSp - (ADDR)to_visit0;
+ LOCAL_Error_Size = (ADDR)AuxSp-(ADDR)to_visit0;
return -3;
}
-Term Yap_BreakRational(Term inp, UInt arity, Term *to, Term ti USES_REGS) {
+
+ Term
+Yap_BreakRational(Term inp, UInt arity, Term *to, Term ti USES_REGS) {
Term t = Deref(inp);
Term tii = ti;
tr_fr_ptr TR0 = TR;
@@ -726,7 +744,7 @@ Term Yap_BreakRational(Term inp, UInt arity, Term *to, Term ti USES_REGS) {
*to = ti;
return t;
} else if (IsPrimitiveTerm(t)) {
- *to = ti;
+ *to = ti;
return t;
} else if (IsPairTerm(t)) {
CELL *ap;
@@ -738,17 +756,16 @@ Term Yap_BreakRational(Term inp, UInt arity, Term *to, Term ti USES_REGS) {
HR += 2;
{
Int res;
- if ((res = break_rationals_complex_term(ap - 1, ap + 1, Hi, to, ti,
- Hi PASS_REGS)) < 0) {
- HR = Hi;
- if ((t = handle_cp_overflow(res, TR0, arity, t)) == 0L)
- return FALSE;
- goto restart_list;
+ if ((res = break_rationals_complex_term(ap-1, ap+1, Hi, to, ti, Hi PASS_REGS)) < 0) {
+ HR = Hi;
+ if ((t = handle_cp_overflow(res, TR0, arity, t))== 0L)
+ return FALSE;
+ goto restart_list;
} else if (*to == tii) {
- HR = Hi;
- return t;
+ HR = Hi;
+ return t;
} else {
- return AbsPair(Hi);
+ return AbsPair(Hi);
}
}
} else {
@@ -766,42 +783,41 @@ Term Yap_BreakRational(Term inp, UInt arity, Term *to, Term ti USES_REGS) {
ap = RepAppl(t);
HR[0] = (CELL)f;
arity = ArityOfFunctor(f);
- HR += 1 + arity;
+ HR += 1+arity;
- {
+ {
Int res;
- if ((res = break_rationals_complex_term(ap, ap + (arity), HB0 + 1, to, ti,
- HB0 PASS_REGS)) < 0) {
- HR = HB0;
- if ((t = handle_cp_overflow(res, TR0, arity, t)) == 0L)
- return FALSE;
- goto restart_appl;
+ if ((res = break_rationals_complex_term(ap, ap+(arity), HB0+1, to, ti, HB0 PASS_REGS)) < 0) {
+ HR = HB0;
+ if ((t = handle_cp_overflow(res, TR0, arity, t))== 0L)
+ return FALSE;
+ goto restart_appl;
} else if (*to == ti) {
- HR = HB0;
- return t;
+ HR = HB0;
+ return t;
} else {
- return AbsAppl(HB0);
+ return AbsAppl(HB0);
}
}
}
}
-static int break_complex_term(CELL *pt0, CELL *pt0_end, CELL *ptf, Term *of,
- Term oi, CELL *HLow USES_REGS) {
+ static int
+break_complex_term(CELL *pt0, CELL *pt0_end, CELL *ptf, Term *of, Term oi, CELL *HLow USES_REGS)
+{
- struct copy_frame *to_visit0,
- *to_visit = (struct copy_frame *)Yap_PreAllocCodeSpace();
+ struct copy_frame *to_visit0, *to_visit = (struct copy_frame *)Yap_PreAllocCodeSpace();
CELL *HB0 = HB;
tr_fr_ptr TR0 = TR;
CELL new = 0L;
HB = HLow;
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
if (new) {
@@ -811,92 +827,91 @@ loop:
new = 0L;
}
deref_head(d0, break_rationals_unk);
- break_rationals_nvar : {
- CELL first;
- CELL *newp;
- if (IsPairTerm(d0)) {
- CELL *ap2 = RepPair(d0);
+ break_rationals_nvar:
+ {
+ CELL first;
+ CELL *newp;
+ if (IsPairTerm(d0)) {
+ CELL *ap2 = RepPair(d0);
- if (IsVarTerm(first = *ap2) && (newp = (CELL *)first) && newp >= HB &&
- newp < HR) {
- // found a marked term:
- found_term:
- if (!IsVarTerm(*newp)) {
- Term v = (CELL)newp, t = *newp;
- RESET_VARIABLE(newp);
- oi = add_to_list(oi, v, t PASS_REGS);
- }
- *ptf++ = (CELL)newp;
- continue;
+ if (IsVarTerm(first = *ap2) && (newp = (CELL*)first) && newp >= HB && newp < HR) {
+ // found a marked term:
+ found_term:
+ if (!IsVarTerm(*newp)) {
+ Term v = (CELL)newp, t = *newp;
+ RESET_VARIABLE(newp);
+ oi = add_to_list( oi, v, t PASS_REGS);
+ }
+ *ptf++ = (CELL)newp;
+ continue;
+ }
+ new = (CELL)ptf;
+ *ptf++ = AbsPair(HR);
+ if (pt0 < pt0_end) {
+ if (to_visit+1 >= (struct copy_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit ++;
+ }
+ pt0 = ap2 - 1;
+ pt0_end = ap2 + 1;
+ ptf = HR;
+ HR += 2;
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
+ if (IsExtensionFunctor(f)) {
+ *ptf++ = d0; /* you can just share extensions, what about DB? */
+ continue;
+ }
+ if (IsVarTerm(first = ap2[1]) && (newp = (CELL*)first) && newp >= HB && newp < HR) {
+ goto found_term;
+ }
+ // new
+ /* store the terms to visit */
+ new = (CELL)ptf;
+ *ptf++ = AbsAppl(HR);
+ if (pt0 < pt0_end) {
+ if (to_visit+1 >= (struct copy_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit ++;
+ }
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ /* store the functor for the new term */
+ HR[0] = (CELL)f;
+ ptf = HR+1;
+ HR += 1+d0;
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
+ } else {
+ /* just copy atoms or integers */
+ *ptf++ = d0;
}
- new = (CELL)ptf;
- *ptf++ = AbsPair(HR);
- if (pt0 < pt0_end) {
- if (to_visit + 1 >= (struct copy_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit++;
- }
- pt0 = ap2 - 1;
- pt0_end = ap2 + 1;
- ptf = HR;
- HR += 2;
- if (HR > ASP - 2048) {
- goto overflow;
- }
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- *ptf++ = d0; /* you can just share extensions, what about DB? */
- continue;
- }
- if (IsVarTerm(first = ap2[1]) && (newp = (CELL *)first) && newp >= HB &&
- newp < HR) {
- goto found_term;
- }
- // new
- /* store the terms to visit */
- new = (CELL)ptf;
- *ptf++ = AbsAppl(HR);
- if (pt0 < pt0_end) {
- if (to_visit + 1 >= (struct copy_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit++;
- }
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
- /* store the functor for the new term */
- HR[0] = (CELL)f;
- ptf = HR + 1;
- HR += 1 + d0;
- if (HR > ASP - 2048) {
- goto overflow;
- }
- } else {
- /* just copy atoms or integers */
- *ptf++ = d0;
+ continue;
}
- continue;
- }
derefa_body(d0, ptd0, break_rationals_unk, break_rationals_nvar);
*ptf++ = d0;
}
/* Do we still have compound terms to visit */
if (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -909,14 +924,14 @@ loop:
*of = oi;
return TRUE;
-overflow:
+ overflow:
/* oops, we're in trouble */
HR = HLow;
/* we've done it */
/* restore our nice, friendly, term to its original state */
HB = HB0;
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -925,24 +940,25 @@ overflow:
/* follow chain of multi-assigned variables */
return -1;
-heap_overflow:
+ heap_overflow:
/* oops, we're in trouble */
HR = HLow;
/* we've done it */
/* restore our nice, friendly, term to its original state */
HB = HB0;
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
}
reset_trail(TR0);
- LOCAL_Error_Size = (ADDR)AuxSp - (ADDR)to_visit0;
+ LOCAL_Error_Size = (ADDR)AuxSp-(ADDR)to_visit0;
return -3;
}
-Term Yap_BreakTerm(Term inp, UInt arity, Term *to, Term ti USES_REGS) {
+ Term
+Yap_BreakTerm(Term inp, UInt arity, Term *to, Term ti USES_REGS) {
Term t = Deref(inp);
tr_fr_ptr TR0 = TR;
@@ -952,7 +968,7 @@ Term Yap_BreakTerm(Term inp, UInt arity, Term *to, Term ti USES_REGS) {
} else if (IsPrimitiveTerm(t)) {
*to = ti;
return t;
- } else {
+ } else {
CELL *ap;
CELL *Hi = HR;
@@ -962,30 +978,36 @@ Term Yap_BreakTerm(Term inp, UInt arity, Term *to, Term ti USES_REGS) {
{
int res;
- if ((res = break_complex_term(ap - 1, ap, Hi, to, ti, Hi PASS_REGS)) <
- 0) {
- HR = Hi;
- if ((t = handle_cp_overflow(res, TR0, arity, t)) == 0L)
- return FALSE;
- goto restart_term;
+ if ((res = break_complex_term(ap-1, ap, Hi, to, ti, Hi PASS_REGS)) < 0) {
+ HR = Hi;
+ if ((t = handle_cp_overflow(res, TR0, arity, t))== 0L)
+ return FALSE;
+ goto restart_term;
}
}
return Hi[0];
}
}
-static Int p_break_rational(USES_REGS1) {
+
+static Int
+p_break_rational( USES_REGS1 )
+{
Term tf;
return Yap_unify(ARG2, Yap_BreakTerm(ARG1, 4, &tf, ARG4 PASS_REGS)) &&
- Yap_unify(tf, ARG3);
+ Yap_unify(tf, ARG3);
}
-static Int p_break_rational3(USES_REGS1) {
+
+static Int
+p_break_rational3( USES_REGS1 )
+{
Term tf;
return Yap_unify(ARG2, Yap_BreakTerm(ARG1, 4, &tf, TermNil PASS_REGS)) &&
- Yap_unify(tf, ARG3);
+ Yap_unify(tf, ARG3);
}
+
/*
FAST EXPORT ROUTINE. Export a Prolog term to something like:
@@ -1003,262 +1025,266 @@ static Int p_break_rational3(USES_REGS1) {
*/
-static inline CELL *CellDifH(CELL *hptr, CELL *hlow) {
- return (CELL *)((char *)hptr - (char *)hlow);
+static inline
+CELL *CellDifH(CELL *hptr, CELL *hlow)
+{
+ return (CELL *)((char *)hptr-(char *)hlow);
}
-#define AdjustSizeAtom(X) (((CELL)(X) + (8 - 1)) & ~(8 - 1))
+#define AdjustSizeAtom(X) (((CELL)(X)+(8-1)) & ~(8-1))
-static inline CELL *AdjustSize(CELL *x, char *buf) {
- UInt offset = (char *)x - buf;
- return (CELL *)(buf + AdjustSizeAtom(offset));
+static inline
+CELL *AdjustSize(CELL *x, char *buf)
+{
+ UInt offset = (char *)x-buf;
+ return (CELL*)(buf+AdjustSizeAtom(offset));
}
/* export an atom from the symbol table to a buffer */
-static inline Atom export_atom(Atom at, char **hpp, char *buf, size_t len) {
+static inline
+Atom export_atom(Atom at, char **hpp, char *buf, size_t len)
+{
char *ptr, *p0;
size_t sz;
ptr = *hpp;
- ptr = (char *)AdjustSize((CELL *)ptr, buf);
+ ptr = (char *)AdjustSize((CELL*)ptr, buf);
p0 = ptr;
*ptr++ = 0;
sz = strlen(RepAtom(at)->StrOfAE);
- if (sz + 1 >= len)
+ if (sz + 1 >= len)
return (Atom)NULL;
strcpy(ptr, RepAtom(at)->StrOfAE);
- *hpp = ptr + (sz + 1);
- return (Atom)(p0 - buf);
+ *hpp = ptr+(sz+1);
+ return (Atom)(p0-buf);
}
/* place a buffer: first arity then the atom */
-static inline Functor export_functor(Functor f, char **hpp, char *buf,
- size_t len) {
+static inline
+Functor export_functor(Functor f, char **hpp, char *buf, size_t len)
+{
CELL *hptr = AdjustSize((CELL *)*hpp, buf);
UInt arity = ArityOfFunctor(f);
- if (2 * sizeof(CELL) >= len)
+ if (2*sizeof(CELL) >= len)
return NULL;
hptr[0] = arity;
- *hpp = (char *)(hptr + 1);
+ *hpp = (char *)(hptr+1);
if (!export_atom(NameOfFunctor(f), hpp, buf, len))
return NULL;
/* increment so that it cannot be mistaken with a functor on the stack,
(increment is used as a tag ........01
*/
- return (Functor)(((char *)hptr - buf) + 1);
+ return (Functor)(((char *)hptr-buf)+1);
}
-#define export_derefa_body(D, A, LabelUnk, LabelNonVar) \
- do { \
- if ((CELL *)(D) < CellDifH(HR, HLow)) { \
- (A) = (CELL *)(D); \
- break; \
- } \
- (A) = (CELL *)(D); \
- (D) = *(CELL *)(D); \
- if (!IsVarTerm(D)) \
- goto LabelNonVar; \
- LabelUnk:; \
- } while (Unsigned(A) != (D))
+#define export_derefa_body(D,A,LabelUnk,LabelNonVar) \
+ do { \
+ if ((CELL *)(D) < CellDifH(HR,HLow)) { (A) = (CELL *)(D); break; } \
+ (A) = (CELL *)(D); \
+ (D) = *(CELL *)(D); \
+ if(!IsVarTerm(D)) goto LabelNonVar; \
+ LabelUnk: ; \
+ } while (Unsigned(A) != (D))
-static int export_term_to_buffer(Term inpt, char *buf, char *bptr, CELL *t0,
- CELL *tf, size_t len) {
+
+static int
+export_term_to_buffer(Term inpt, char *buf, char *bptr, CELL *t0 , CELL *tf, size_t len)
+{
char *td = bptr;
CELL *bf = (CELL *)buf;
- if (buf + len < (char *)((CELL *)td + (tf - t0))) {
+ if (buf + len < (char *)((CELL *)td + (tf-t0))) {
return FALSE;
}
- memmove((void *)td, (void *)t0, (tf - t0) * sizeof(CELL));
- bf[0] = (td - buf);
- bf[1] = (tf - t0);
+ memmove((void *)td, (void *)t0, (tf-t0)* sizeof(CELL));
+ bf[0] = (td-buf);
+ bf[1] = (tf-t0);
bf[2] = inpt;
- return bf[0] + sizeof(CELL) * bf[1];
+ return bf[0]+sizeof(CELL)*bf[1];
}
-static size_t export_complex_term(Term tf, CELL *pt0, CELL *pt0_end, char *buf,
- size_t len0, int newattvs, CELL *ptf,
- CELL *HLow USES_REGS) {
- struct cp_frame *to_visit0,
- *to_visit = (struct cp_frame *)Yap_PreAllocCodeSpace();
+
+static size_t
+export_complex_term(Term tf, CELL *pt0, CELL *pt0_end, char * buf, size_t len0, int newattvs, CELL *ptf, CELL *HLow USES_REGS)
+{
+ struct cp_frame *to_visit0, *to_visit = (struct cp_frame *)Yap_PreAllocCodeSpace();
CELL *HB0 = HB;
tr_fr_ptr TR0 = TR;
int ground = TRUE;
- char *bptr = buf + 3 * sizeof(CELL);
+ char *bptr = buf+ 3*sizeof(CELL);
size_t len = len0;
HB = HLow;
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, export_term_unk);
- export_term_nvar : {
- if (IsPairTerm(d0)) {
- CELL *ap2 = RepPair(d0);
- if (ap2 < CellDifH(HR, HLow)) {
- /* If this is newer than the current term, just reuse */
- *ptf++ = d0;
- continue;
- }
- *ptf = AbsPair(CellDifH(HR, HLow));
- ptf++;
+ export_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ CELL *ap2 = RepPair(d0);
+ if (ap2 < CellDifH(HR,HLow)) {
+ /* If this is newer than the current term, just reuse */
+ *ptf++ = d0;
+ continue;
+ }
+ *ptf = AbsPair(CellDifH(HR,HLow));
+ ptf++;
#ifdef RATIONAL_TREES
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->oldv = *pt0;
- to_visit->ground = ground;
- /* fool the system into thinking we had a variable there */
- *pt0 = AbsPair(CellDifH(HR, HLow));
- to_visit++;
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->oldv = *pt0;
+ to_visit->ground = ground;
+ /* fool the system into thinking we had a variable there */
+ *pt0 = AbsPair(CellDifH(HR,HLow));
+ to_visit ++;
#else
- if (pt0 < pt0_end) {
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->ground = ground;
- to_visit++;
- }
+ if (pt0 < pt0_end) {
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->ground = ground;
+ to_visit ++;
+ }
#endif
- pt0 = ap2 - 1;
- pt0_end = ap2 + 1;
- ptf = HR;
- HR += 2;
- if (HR > ASP - 2048) {
- goto overflow;
- }
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- if (ap2 < CellDifH(HR, HLow)) {
- /* If this is newer than the current term, just reuse */
- *ptf++ = d0;
- continue;
- }
- f = (Functor)(*ap2);
+ pt0 = ap2 - 1;
+ pt0_end = ap2 + 1;
+ ptf = HR;
+ HR += 2;
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ if (ap2 < CellDifH(HR,HLow)) {
+ /* If this is newer than the current term, just reuse */
+ *ptf++ = d0;
+ continue;
+ }
+ f = (Functor)(*ap2);
- *ptf++ = AbsAppl(CellDifH(HR, HLow));
- if (IsExtensionFunctor(f)) {
- UInt sz;
+ *ptf++ = AbsAppl(CellDifH(HR,HLow));
+ if (IsExtensionFunctor(f)) {
+ UInt sz;
- /* make sure to export floats */
- if (f == FunctorDouble) {
- sz = sizeof(Float) / sizeof(CELL) + 2;
- } else if (f == FunctorLongInt) {
- sz = 3;
- } else if (f == FunctorString) {
- sz = 3 + ap2[1];
- } else {
- CELL *pt = ap2 + 1;
- sz = 2 + sizeof(MP_INT) +
- (((MP_INT *)(pt + 1))->_mp_alloc * sizeof(mp_limb_t));
- }
- if (HR + sz > ASP - 2048) {
- goto overflow;
- }
- memmove((void *)HR, (void *)ap2, sz * sizeof(CELL));
- HR += sz;
- continue;
- }
- /* store the terms to visit */
+ /* make sure to export floats */
+ if (f== FunctorDouble) {
+ sz = sizeof(Float)/sizeof(CELL)+2;
+ } else if (f== FunctorLongInt) {
+ sz = 3;
+ } else if (f== FunctorString) {
+ sz = 3+ap2[1];
+ } else {
+ CELL *pt = ap2+1;
+ sz = 2+sizeof(MP_INT)+(((MP_INT *)(pt+1))->_mp_alloc*sizeof(mp_limb_t));
+ }
+ if (HR+sz > ASP - 2048) {
+ goto overflow;
+ }
+ memmove((void *)HR, (void *)ap2, sz*sizeof(CELL));
+ HR += sz;
+ continue;
+ }
+ /* store the terms to visit */
#ifdef RATIONAL_TREES
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->oldv = *pt0;
- to_visit->ground = ground;
- /* fool the system into thinking we had a variable there */
- *pt0 = AbsAppl(HR);
- to_visit++;
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->oldv = *pt0;
+ to_visit->ground = ground;
+ /* fool the system into thinking we had a variable there */
+ *pt0 = AbsAppl(HR);
+ to_visit ++;
#else
- if (pt0 < pt0_end) {
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->ground = ground;
- to_visit++;
- }
+ if (pt0 < pt0_end) {
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->ground = ground;
+ to_visit ++;
+ }
#endif
- ground = (f != FunctorMutable);
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
- /* store the functor for the new term */
- ptf = HR + 1;
- HR += 1 + d0;
- if (HR > ASP - 2048) {
- goto overflow;
- }
- ptf[-1] = (CELL)export_functor(f, &bptr, buf, len);
- len = len0 - (bptr - buf);
- if (HR > ASP - 2048) {
- goto overflow;
- }
- } else {
- if (IsAtomTerm(d0)) {
- *ptf = MkAtomTerm(export_atom(AtomOfTerm(d0), &bptr, buf, len));
- ptf++;
- len = len0 - (bptr - buf);
+ ground = (f != FunctorMutable);
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ /* store the functor for the new term */
+ ptf = HR+1;
+ HR += 1+d0;
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
+ ptf[-1] = (CELL)export_functor(f, &bptr, buf, len);
+ len = len0 - (bptr-buf);
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
} else {
- *ptf++ = d0;
+ if (IsAtomTerm(d0)) {
+ *ptf = MkAtomTerm(export_atom(AtomOfTerm(d0), &bptr, buf, len));
+ ptf++;
+ len = len0 - (bptr-buf);
+ } else {
+ *ptf++ = d0;
+ }
}
+ continue;
}
- continue;
- }
export_derefa_body(d0, ptd0, export_term_unk, export_term_nvar);
ground = FALSE;
- if (ptd0 < CellDifH(HR, HLow)) {
+ if (ptd0 < CellDifH(HR,HLow)) {
/* we have already found this cell */
- *ptf++ = (CELL)ptd0;
+ *ptf++ = (CELL) ptd0;
} else {
#if COROUTINING
if (newattvs && IsAttachedTerm((CELL)ptd0) && FALSE) {
- /* if unbound, call the standard export term routine */
- struct cp_frame *bp;
+ /* if unbound, call the standard export term routine */
+ struct cp_frame *bp;
- CELL new;
+ CELL new;
- bp = to_visit;
- if (!GLOBAL_attas[ExtFromCell(ptd0)].copy_term_op(ptd0, &bp,
- ptf PASS_REGS)) {
- goto overflow;
- }
- to_visit = bp;
- new = *ptf;
- Bind_NonAtt(ptd0, new);
- ptf++;
+ bp = to_visit;
+ if (!GLOBAL_attas[ExtFromCell(ptd0)].copy_term_op(ptd0, &bp, ptf PASS_REGS)) {
+ goto overflow;
+ }
+ to_visit = bp;
+ new = *ptf;
+ Bind_NonAtt(ptd0, new);
+ ptf++;
} else {
#endif
- /* first time we met this term */
- *ptf = (CELL)CellDifH(ptf, HLow);
- if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
- /* Trail overflow */
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
- goto trail_overflow;
- }
- }
- Bind_NonAtt(ptd0, (CELL)ptf);
- ptf++;
+ /* first time we met this term */
+ *ptf = (CELL)CellDifH(ptf,HLow);
+ if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
+ /* Trail overflow */
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
+ goto trail_overflow;
+ }
+ }
+ Bind_NonAtt(ptd0, (CELL)ptf);
+ ptf++;
#ifdef COROUTINING
}
#endif
@@ -1266,7 +1292,7 @@ loop:
}
/* Do we still have compound terms to visit */
if (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -1282,7 +1308,7 @@ loop:
HB = HB0;
return export_term_to_buffer(tf, buf, bptr, HLow, HR, len0);
-overflow:
+ overflow:
/* oops, we're in trouble */
HR = HLow;
/* we've done it */
@@ -1290,7 +1316,7 @@ overflow:
HB = HB0;
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -1309,7 +1335,7 @@ trail_overflow:
HB = HB0;
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -1317,15 +1343,15 @@ trail_overflow:
}
#endif
{
- tr_fr_ptr oTR = TR;
+ tr_fr_ptr oTR = TR;
reset_trail(TR0);
- if (!Yap_growtrail((oTR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
+ if (!Yap_growtrail((oTR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
return -4;
}
return -2;
}
-heap_overflow:
+ heap_overflow:
/* oops, we're in trouble */
HR = HLow;
/* we've done it */
@@ -1333,7 +1359,7 @@ heap_overflow:
HB = HB0;
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -1341,12 +1367,12 @@ heap_overflow:
}
#endif
reset_trail(TR0);
- LOCAL_Error_Size = (ADDR)AuxSp - (ADDR)to_visit0;
+ LOCAL_Error_Size = (ADDR)AuxSp-(ADDR)to_visit0;
return -3;
}
-static size_t ExportTerm(Term inp, char *buf, size_t len, UInt arity,
- int newattvs USES_REGS) {
+static size_t
+ExportTerm(Term inp, char * buf, size_t len, UInt arity, int newattvs USES_REGS) {
Term t = Deref(inp);
tr_fr_ptr TR0 = TR;
size_t res = 0;
@@ -1354,62 +1380,73 @@ static size_t ExportTerm(Term inp, char *buf, size_t len, UInt arity,
do {
if (IsVarTerm(t) || IsIntTerm(t)) {
- return export_term_to_buffer(t, buf, buf + 3 * sizeof(CELL), &inp, &inp,
- len);
+ return export_term_to_buffer(t, buf, buf+ 3*sizeof(CELL), &inp, &inp, len);
}
if (IsAtomTerm(t)) {
Atom at = AtomOfTerm(t);
- char *b = buf + 3 * sizeof(CELL);
- export_atom(at, &b, b, len - 3 * sizeof(CELL));
+ char *b = buf+3*sizeof(CELL);
+ export_atom(at, &b, b, len-3*sizeof(CELL));
return export_term_to_buffer(t, buf, b, &inp, &inp, len);
}
if ((Int)res < 0) {
HR = Hi;
TR = TR0;
- if ((t = handle_cp_overflow(res, TR0, arity, t)) == 0L)
- return res;
+ if ((t = handle_cp_overflow(res, TR0, arity, t))== 0L)
+ return res;
}
Hi = HR;
TR0 = TR;
- res = export_complex_term(inp, &t - 1, &t, buf, len, newattvs, Hi,
- Hi PASS_REGS);
+ res = export_complex_term(inp, &t-1, &t, buf, len, newattvs, Hi, Hi PASS_REGS);
} while ((Int)res < 0);
return res;
}
-size_t Yap_ExportTerm(Term inp, char *buf, size_t len, UInt arity) {
+size_t
+Yap_ExportTerm(Term inp, char * buf, size_t len, UInt arity) {
CACHE_REGS
return ExportTerm(inp, buf, len, arity, TRUE PASS_REGS);
}
-static CELL *ShiftPtr(CELL t, char *base) { return (CELL *)(base + t); }
-static Atom addAtom(Atom t, char *buf) {
- char *s = buf + (UInt)t;
-
- if (!*s) {
- return Yap_LookupAtom(s + 1);
- }
- return NULL;
+static CELL *
+ShiftPtr(CELL t, char *base)
+{
+ return (CELL *)(base+t);
}
-static UInt FetchFunctor(CELL *pt, char *buf) {
- CELL *ptr = (CELL *)(buf + (*pt - 1));
+static Atom
+addAtom(Atom t, char *buf)
+{
+ char *s = buf+(UInt)t;
+
+ if (!*s) {
+ return Yap_LookupAtom(s+1);
+ }
+ return NULL;
+}
+
+static UInt
+FetchFunctor(CELL *pt, char *buf)
+{
+ CELL *ptr = (CELL *)(buf+(*pt-1));
// do arity first
UInt arity = *ptr++;
Atom name, at;
// and then an atom
ptr = AdjustSize(ptr, buf);
- name = (Atom)((char *)ptr - buf);
+ name = (Atom)((char *)ptr-buf);
at = addAtom(name, buf);
*pt = (CELL)Yap_MkFunctor(at, arity);
return arity;
}
+
static CELL *import_compound(CELL *hp, char *abase, char *buf, CELL *amax);
static CELL *import_pair(CELL *hp, char *abase, char *buf, CELL *amax);
-static CELL *import_arg(CELL *hp, char *abase, char *buf, CELL *amax) {
+static CELL *
+import_arg(CELL *hp, char *abase, char *buf, CELL *amax)
+{
Term t = *hp;
if (IsVarTerm(t)) {
hp[0] = (CELL)ShiftPtr(t, abase);
@@ -1431,26 +1468,31 @@ static CELL *import_arg(CELL *hp, char *abase, char *buf, CELL *amax) {
return amax;
}
-static CELL *import_compound(CELL *hp, char *abase, char *buf, CELL *amax) {
+static CELL *
+import_compound(CELL *hp, char *abase, char *buf, CELL *amax)
+{
Functor f = (Functor)*hp;
UInt ar, i;
if (!((CELL)f & 1) && IsExtensionFunctor(f))
return amax;
ar = FetchFunctor(hp, buf);
- for (i = 1; i <= ar; i++) {
- amax = import_arg(hp + i, abase, buf, amax);
+ for (i=1; i<=ar; i++) {
+ amax = import_arg(hp+i, abase, buf, amax);
}
return amax;
}
-static CELL *import_pair(CELL *hp, char *abase, char *buf, CELL *amax) {
+static CELL *
+import_pair(CELL *hp, char *abase, char *buf, CELL *amax)
+{
amax = import_arg(hp, abase, buf, amax);
- amax = import_arg(hp + 1, abase, buf, amax);
+ amax = import_arg(hp+1, abase, buf, amax);
return amax;
}
-Term Yap_ImportTerm(char *buf) {
+Term
+Yap_ImportTerm(char * buf) {
CACHE_REGS
CELL *bc = (CELL *)buf;
size_t sz = bc[1];
@@ -1461,18 +1503,18 @@ Term Yap_ImportTerm(char *buf) {
else if (IsIntTerm(tinp))
return tinp;
else if (IsAtomTerm(tinp)) {
- tret = MkAtomTerm(addAtom(NULL, (char *)(bc + 3)));
+ tret = MkAtomTerm(addAtom(NULL,(char *)(bc+3)));
return tret;
}
// call the gc/stack shifter mechanism
// if not enough stack available
while (HR + sz > ASP - 4096) {
- if (!Yap_gcl((sz + 4096) * sizeof(CELL), PP->ArityOfPE, ENV, gc_P(P, CP))) {
+ if (!Yap_gcl( (sz+4096)*sizeof(CELL), PP->ArityOfPE, ENV, gc_P(P,CP))) {
Yap_Error(RESOURCE_ERROR_STACK, TermNil, LOCAL_ErrorMessage);
return 0L;
}
}
- memmove(HR, buf + bc[0], sizeof(CELL) * sz);
+ memmove(HR, buf+bc[0], sizeof(CELL)*sz);
if (IsApplTerm(tinp)) {
tret = AbsAppl(HR);
import_compound(HR, (char *)HR, buf, HR);
@@ -1484,17 +1526,20 @@ Term Yap_ImportTerm(char *buf) {
return tret;
}
-size_t Yap_SizeOfExportedTerm(char *buf) {
+size_t
+Yap_SizeOfExportedTerm(char * buf) {
CELL *bc = (CELL *)buf;
- return bc[0] + bc[1] * sizeof(CELL);
+ return bc[0]+bc[1]*sizeof(CELL);
}
-static Int p_export_term(USES_REGS1) {
+static Int
+p_export_term( USES_REGS1 )
+{
size_t sz = 4096, osz;
char *export_buf;
do {
- export_buf = malloc(sz);
+ export_buf = malloc(sz);
if (!export_buf)
return FALSE;
if (!(osz = Yap_ExportTerm(ARG1, export_buf, sz, 1))) {
@@ -1502,19 +1547,23 @@ static Int p_export_term(USES_REGS1) {
free(export_buf);
}
} while (!osz);
- return Yap_unify(ARG3, MkIntegerTerm(osz)) &&
- Yap_unify(ARG2, MkIntegerTerm((Int)export_buf));
+ return Yap_unify(ARG3,MkIntegerTerm(osz)) &&
+ Yap_unify(ARG2, MkIntegerTerm((Int)export_buf));
}
-static Int p_import_term(USES_REGS1) {
+static Int
+p_import_term( USES_REGS1 )
+{
char *export_buf = (char *)IntegerOfTerm(Deref(ARG1));
if (!export_buf)
return FALSE;
- Int out = Yap_unify(ARG2, Yap_ImportTerm(export_buf));
+ Int out = Yap_unify(ARG2,Yap_ImportTerm(export_buf));
return out;
}
-static Int p_kill_exported_term(USES_REGS1) {
+static Int
+p_kill_exported_term( USES_REGS1 )
+{
char *export_buf = (char *)IntegerOfTerm(Deref(ARG1));
if (!export_buf)
return FALSE;
@@ -1522,8 +1571,9 @@ static Int p_kill_exported_term(USES_REGS1) {
return TRUE;
}
-static Term vars_in_complex_term(register CELL *pt0, register CELL *pt0_end,
- Term inp USES_REGS) {
+
+static Term vars_in_complex_term(register CELL *pt0, register CELL *pt0_end, Term inp USES_REGS)
+{
register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace();
register tr_fr_ptr TR0 = TR;
@@ -1531,82 +1581,84 @@ static Term vars_in_complex_term(register CELL *pt0, register CELL *pt0_end,
CELL output = AbsPair(HR);
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, vars_in_term_unk);
- vars_in_term_nvar : {
- if (IsPairTerm(d0)) {
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ vars_in_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- continue;
- }
- /* store the terms to visit */
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
+ if (IsExtensionFunctor(f)) {
+ continue;
+ }
+ /* store the terms to visit */
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ }
+ continue;
}
- continue;
- }
+
derefa_body(d0, ptd0, vars_in_term_unk, vars_in_term_nvar);
/* do or pt2 are unbound */
*ptd0 = TermNil;
/* leave an empty slot to fill in later */
- if (HR + 1024 > ASP) {
+ if (HR+1024 > ASP) {
goto global_overflow;
}
- HR[1] = AbsPair(HR + 2);
+ HR[1] = AbsPair(HR+2);
HR += 2;
HR[-2] = (CELL)ptd0;
/* next make sure noone will see this as a variable again */
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
/* Trail overflow */
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
- goto trail_overflow;
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
+ goto trail_overflow;
}
}
TrailTerm(TR++) = (CELL)ptd0;
@@ -1632,17 +1684,17 @@ loop:
/* close the list */
Term t2 = Deref(inp);
if (IsVarTerm(t2)) {
- RESET_VARIABLE(HR - 1);
- Yap_unify((CELL)(HR - 1), inp);
+ RESET_VARIABLE(HR-1);
+ Yap_unify((CELL)(HR-1),inp);
} else {
- HR[-1] = t2; /* don't need to trail */
+ HR[-1] = t2; /* don't need to trail */
}
- return (output);
+ return(output);
} else {
- return (inp);
+ return(inp);
}
-trail_overflow:
+ trail_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -1651,14 +1703,14 @@ trail_overflow:
}
#endif
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
- LOCAL_Error_Size = (TR - TR0) * sizeof(tr_fr_ptr *);
+ LOCAL_Error_Size = (TR-TR0)*sizeof(tr_fr_ptr *);
clean_tr(TR0 PASS_REGS);
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH;
return 0L;
-aux_overflow:
- LOCAL_Error_Size = (to_visit - to_visit0) * sizeof(CELL **);
+ aux_overflow:
+ LOCAL_Error_Size = (to_visit-to_visit0)*sizeof(CELL **);
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -1672,7 +1724,7 @@ aux_overflow:
HR = InitialH;
return 0L;
-global_overflow:
+ global_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -1684,11 +1736,14 @@ global_overflow:
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH;
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
- LOCAL_Error_Size = (ASP - HR) * sizeof(CELL);
+ LOCAL_Error_Size = (ASP-HR)*sizeof(CELL);
return 0L;
+
}
-static int expand_vts(int args USES_REGS) {
+static int
+expand_vts( int args USES_REGS )
+{
UInt expand = LOCAL_Error_Size;
yap_error_number yap_errno = LOCAL_Error_TYPE;
@@ -1701,13 +1756,13 @@ static int expand_vts(int args USES_REGS) {
}
} else if (yap_errno == RESOURCE_ERROR_AUXILIARY_STACK) {
/* Aux space overflow */
- if (expand > 4 * 1024 * 1024)
- expand = 4 * 1024 * 1024;
+ if (expand > 4*1024*1024)
+ expand = 4*1024*1024;
if (!Yap_ExpandPreAllocCodeSpace(expand, NULL, TRUE)) {
return FALSE;
}
} else {
- if (!Yap_gcl(expand, 3, ENV, gc_P(P, CP))) {
+ if (!Yap_gcl(expand, 3, ENV, gc_P(P,CP))) {
Yap_Error(RESOURCE_ERROR_STACK, TermNil, "in term_variables");
return FALSE;
}
@@ -1716,12 +1771,13 @@ static int expand_vts(int args USES_REGS) {
}
static Int
-p_variables_in_term(USES_REGS1) /* variables in term t */
+p_variables_in_term( USES_REGS1 ) /* variables in term t */
{
Term out, inp;
int count;
-restart:
+
+ restart:
count = 0;
inp = Deref(ARG2);
while (!IsVarTerm(inp) && IsPairTerm(inp)) {
@@ -1732,11 +1788,11 @@ restart:
TrailTerm(TR++) = t;
count++;
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
- clean_tr(TR - count PASS_REGS);
- if (!Yap_growtrail(count * sizeof(tr_fr_ptr *), FALSE)) {
- return FALSE;
- }
- goto restart;
+ clean_tr(TR-count PASS_REGS);
+ if (!Yap_growtrail(count*sizeof(tr_fr_ptr *), FALSE)) {
+ return FALSE;
+ }
+ goto restart;
}
}
inp = TailOfTerm(inp);
@@ -1746,35 +1802,39 @@ restart:
if (IsVarTerm(t)) {
out = AbsPair(HR);
HR += 2;
- RESET_VARIABLE(HR - 2);
- RESET_VARIABLE(HR - 1);
- Yap_unify((CELL)(HR - 2), ARG1);
- Yap_unify((CELL)(HR - 1), ARG2);
- } else if (IsPrimitiveTerm(t))
+ RESET_VARIABLE(HR-2);
+ RESET_VARIABLE(HR-1);
+ Yap_unify((CELL)(HR-2),ARG1);
+ Yap_unify((CELL)(HR-1),ARG2);
+ } else if (IsPrimitiveTerm(t))
out = ARG2;
else if (IsPairTerm(t)) {
- out =
- vars_in_complex_term(RepPair(t) - 1, RepPair(t) + 1, ARG2 PASS_REGS);
- } else {
+ out = vars_in_complex_term(RepPair(t)-1,
+ RepPair(t)+1, ARG2 PASS_REGS);
+ }
+ else {
Functor f = FunctorOfTerm(t);
- out = vars_in_complex_term(RepAppl(t), RepAppl(t) + ArityOfFunctor(f),
- ARG2 PASS_REGS);
+ out = vars_in_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(f), ARG2 PASS_REGS);
}
if (out == 0L) {
- if (!expand_vts(3 PASS_REGS))
- return FALSE;
+ if (!expand_vts( 3 PASS_REGS ))
+ return FALSE;
}
} while (out == 0L);
- clean_tr(TR - count PASS_REGS);
- return Yap_unify(ARG3, out);
+ clean_tr(TR-count PASS_REGS);
+ return Yap_unify(ARG3,out);
}
-static Int p_term_variables(USES_REGS1) /* variables in term t */
+
+static Int
+p_term_variables( USES_REGS1 ) /* variables in term t */
{
Term out;
if (!Yap_IsListOrPartialListTerm(ARG2)) {
- Yap_Error(TYPE_ERROR_LIST, ARG2, "term_variables/2");
+ Yap_Error(TYPE_ERROR_LIST,ARG2,"term_variables/2");
return FALSE;
}
@@ -1782,55 +1842,60 @@ static Int p_term_variables(USES_REGS1) /* variables in term t */
Term t = Deref(ARG1);
if (IsVarTerm(t)) {
Term out = Yap_MkNewPairTerm();
- return Yap_unify(t, HeadOfTerm(out)) &&
- Yap_unify(TermNil, TailOfTerm(out)) && Yap_unify(out, ARG2);
- } else if (IsPrimitiveTerm(t)) {
+ return
+ Yap_unify(t,HeadOfTerm(out)) &&
+ Yap_unify(TermNil, TailOfTerm(out)) &&
+ Yap_unify(out, ARG2);
+ } else if (IsPrimitiveTerm(t)) {
return Yap_unify(TermNil, ARG2);
} else if (IsPairTerm(t)) {
- out = vars_in_complex_term(RepPair(t) - 1, RepPair(t) + 1,
- TermNil PASS_REGS);
- } else {
+ out = vars_in_complex_term(RepPair(t)-1,
+ RepPair(t)+1, TermNil PASS_REGS);
+ }
+ else {
Functor f = FunctorOfTerm(t);
- out = vars_in_complex_term(RepAppl(t), RepAppl(t) + ArityOfFunctor(f),
- TermNil PASS_REGS);
+ out = vars_in_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(f), TermNil PASS_REGS);
}
if (out == 0L) {
- if (!expand_vts(3 PASS_REGS))
- return FALSE;
+ if (!expand_vts( 3 PASS_REGS ))
+ return FALSE;
}
} while (out == 0L);
- return Yap_unify(ARG2, out);
+ return Yap_unify(ARG2,out);
}
/**
* Exports a nil-terminated list with all the variables in a term.
* @param[t] the term
- * @param[arity] the arity of the calling predicate (required for exact garbage
- * collection).
+ * @param[arity] the arity of the calling predicate (required for exact garbage collection).
* @param[USES_REGS] threading
*/
-Term Yap_TermVariables(
- Term t, UInt arity USES_REGS) /* variables in term t */
+Term
+Yap_TermVariables( Term t, UInt arity USES_REGS ) /* variables in term t */
{
Term out;
- do {
+ do {
t = Deref(t);
if (IsVarTerm(t)) {
return MkPairTerm(t, TermNil);
- } else if (IsPrimitiveTerm(t)) {
+ } else if (IsPrimitiveTerm(t)) {
return TermNil;
} else if (IsPairTerm(t)) {
- out = vars_in_complex_term(RepPair(t) - 1, RepPair(t) + 1,
- TermNil PASS_REGS);
- } else {
+ out = vars_in_complex_term(RepPair(t)-1,
+ RepPair(t)+1, TermNil PASS_REGS);
+ }
+ else {
Functor f = FunctorOfTerm(t);
- out = vars_in_complex_term(RepAppl(t), RepAppl(t) + ArityOfFunctor(f),
- TermNil PASS_REGS);
+ out = vars_in_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(f), TermNil PASS_REGS);
}
if (out == 0L) {
- if (!expand_vts(arity PASS_REGS))
- return FALSE;
+ if (!expand_vts( arity PASS_REGS ))
+ return FALSE;
}
} while (out == 0L);
return out;
@@ -1841,134 +1906,136 @@ typedef struct att_rec {
CELL oval;
} att_rec_t;
-static Term attvars_in_complex_term(register CELL *pt0, register CELL *pt0_end,
- Term inp USES_REGS) {
+static Term attvars_in_complex_term(register CELL *pt0, register CELL *pt0_end, Term inp USES_REGS)
+{
int lvl = push_text_stack();
- att_rec_t *to_visit0, *to_visit = Malloc(1024 * sizeof(att_rec_t));
+ att_rec_t *to_visit0, *to_visit = Malloc(1024*sizeof(att_rec_t));
att_rec_t *to_visit_max;
register tr_fr_ptr TR0 = TR;
CELL *InitialH = HR;
CELL output = AbsPair(HR);
to_visit0 = to_visit;
- to_visit_max = to_visit0 + 1024;
-restart:
+ to_visit_max = to_visit0+1024;
+ restart:
do {
- while (pt0 < pt0_end) {
- register CELL d0;
- register CELL *ptd0;
- ++pt0;
- ptd0 = pt0;
- d0 = *ptd0;
- deref_head(d0, attvars_in_term_unk);
- attvars_in_term_nvar : {
+ while (pt0 < pt0_end) {
+ register CELL d0;
+ register CELL *ptd0;
+ ++ pt0;
+ ptd0 = pt0;
+ d0 = *ptd0;
+ deref_head(d0, attvars_in_term_unk);
+ attvars_in_term_nvar:
+ {
if (IsPairTerm(d0)) {
if (to_visit + 32 >= to_visit_max) {
goto aux_overflow;
}
{
CELL *npt0 = RepPair(d0);
- if (IsAtomicTerm(Deref(npt0[0]))) {
+ if(IsAtomicTerm(Deref(npt0[0]))) {
pt0 = npt0;
pt0_end = pt0 + 1;
continue;
}
}
#ifdef RATIONAL_TREES
- to_visit->beg = pt0;
- to_visit->end = pt0_end;
- to_visit->oval = *pt0;
- to_visit++;
- *pt0 = TermNil;
+ to_visit->beg = pt0;
+ to_visit->end = pt0_end;
+ to_visit->oval = *pt0;
+ to_visit ++;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = pt0 + 2;
+ pt0 = RepPair(d0) - 1;
+ pt0_end = pt0+2;
} else if (IsApplTerm(d0)) {
Functor f;
- CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- continue;
- }
- /* store the terms to visit */
- if (to_visit + 32 >= to_visit_max) {
- goto aux_overflow;
- }
+ CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
+ if (IsExtensionFunctor(f)) {
+ continue;
+ }
+ /* store the terms to visit */
+ if (to_visit + 32 >= to_visit_max) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit->beg = pt0;
- to_visit->end = pt0_end;
- to_visit->oval = *pt0;
- to_visit++;
- *pt0 = TermNil;
+ to_visit->beg = pt0;
+ to_visit->end = pt0_end;
+ to_visit->oval = *pt0;
+ to_visit ++;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- arity_t a = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + a;
+ arity_t a = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + a;
}
continue;
}
- derefa_body(d0, ptd0, attvars_in_term_unk, attvars_in_term_nvar);
- if (IsAttVar(ptd0)) {
- /* do or pt2 are unbound */
- *ptd0 = TermNil;
- /* next make sure noone will see this as a variable again */
- if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
- /* Trail overflow */
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
- goto trail_overflow;
- }
- }
- TrailTerm(TR++) = (CELL)ptd0;
- /* leave an empty slot to fill in later */
- if (HR + 1024 > ASP) {
- goto global_overflow;
- }
- HR[1] = AbsPair(HR + 2);
- HR += 2;
- HR[-2] = (CELL)ptd0;
- /* store the terms to visit */
- if (to_visit + 32 >= to_visit_max) {
- goto aux_overflow;
+
+ derefa_body(d0, ptd0, attvars_in_term_unk, attvars_in_term_nvar);
+ if (IsAttVar(ptd0)) {
+ /* do or pt2 are unbound */
+ *ptd0 = TermNil;
+ /* next make sure noone will see this as a variable again */
+ if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
+ /* Trail overflow */
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
+ goto trail_overflow;
}
+ }
+ TrailTerm(TR++) = (CELL)ptd0;
+ /* leave an empty slot to fill in later */
+ if (HR+1024 > ASP) {
+ goto global_overflow;
+ }
+ HR[1] = AbsPair(HR+2);
+ HR += 2;
+ HR[-2] = (CELL)ptd0;
+ /* store the terms to visit */
+ if (to_visit + 32 >= to_visit_max) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit->beg = pt0;
- to_visit->end = pt0_end;
- to_visit->oval = *pt0;
- to_visit++;
- *pt0 = TermNil;
+ to_visit->beg = pt0;
+ to_visit->end = pt0_end;
+ to_visit->oval = *pt0;
+ to_visit ++;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
-#endif
- pt0 = &RepAttVar(ptd0)->Value;
- pt0_end = &RepAttVar(ptd0)->Atts;
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
}
- continue;
+#endif
+ pt0 = &RepAttVar(ptd0)->Value;
+ pt0_end = &RepAttVar(ptd0)->Atts;
}
- /* Do we still have compound terms to visit */
- if (to_visit == to_visit0)
- break;
+ continue;
+ }
+ /* Do we still have compound terms to visit */
+ if (to_visit == to_visit0)
+ break;
#ifdef RATIONAL_TREES
- to_visit--;
+ to_visit --;
pt0 = to_visit->beg;
pt0_end = to_visit->end;
*pt0 = to_visit->oval;
@@ -1977,95 +2044,101 @@ restart:
pt0 = to_visit[0];
pt0_end = to_visit[1];
#endif
- } while (true);
+ } while(true);
clean_tr(TR0 PASS_REGS);
- pop_text_stack(lvl);
+ pop_text_stack(lvl);
if (HR != InitialH) {
/* close the list */
Term t2 = Deref(inp);
if (IsVarTerm(t2)) {
- RESET_VARIABLE(HR - 1);
- Yap_unify((CELL)(HR - 1), t2);
+ RESET_VARIABLE(HR-1);
+ Yap_unify((CELL)(HR-1), t2);
} else {
- HR[-1] = t2; /* don't need to trail */
+ HR[-1] = t2; /* don't need to trail */
}
- return (output);
+ return(output);
} else {
- return (inp);
+ return(inp);
}
-trail_overflow:
+ trail_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->beg;
*pt0 = to_visit->oval;
}
#endif
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
- LOCAL_Error_Size = (TR - TR0) * sizeof(tr_fr_ptr *);
+ LOCAL_Error_Size = (TR-TR0)*sizeof(tr_fr_ptr *);
clean_tr(TR0 PASS_REGS);
- pop_text_stack(lvl);
+ pop_text_stack(lvl);
HR = InitialH;
return 0L;
-aux_overflow : {
- size_t d1 = to_visit - to_visit0;
- size_t d2 = to_visit_max - to_visit0;
- to_visit0 = Realloc(to_visit0, d2 * sizeof(CELL *) + 64 * 1024);
- to_visit = to_visit0 + d1;
- to_visit_max = to_visit0 + (d2 + (64 * 1024)) / sizeof(CELL **);
+ aux_overflow:
+ {
+ size_t d1 = to_visit-to_visit0;
+ size_t d2 = to_visit_max-to_visit0;
+ to_visit0 = Realloc(to_visit0,d2*sizeof(CELL*)+64*1024);
+ to_visit = to_visit0+d1;
+ to_visit_max = to_visit0+(d2+(64*1024))/sizeof(CELL **);
}
- pt0--;
- goto restart;
+pt0--;
+goto restart;
-global_overflow:
+ global_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->beg;
*pt0 = to_visit->oval;
}
#endif
clean_tr(TR0 PASS_REGS);
- pop_text_stack(lvl);
+pop_text_stack(lvl);
HR = InitialH;
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
- LOCAL_Error_Size = (ASP - HR) * sizeof(CELL);
+ LOCAL_Error_Size = (ASP-HR)*sizeof(CELL);
return 0L;
+
}
-static Int p_term_attvars(USES_REGS1) /* variables in term t */
+static Int
+p_term_attvars( USES_REGS1 ) /* variables in term t */
{
Term out;
do {
Term t = Deref(ARG1);
if (IsVarTerm(t)) {
- out = attvars_in_complex_term(VarOfTerm(t) - 1, VarOfTerm(t) + 1,
- TermNil PASS_REGS);
- } else if (IsPrimitiveTerm(t)) {
+ out = attvars_in_complex_term(VarOfTerm(t)-1,
+ VarOfTerm(t)+1, TermNil PASS_REGS);
+ } else if (IsPrimitiveTerm(t)) {
return Yap_unify(TermNil, ARG2);
} else if (IsPairTerm(t)) {
- out = attvars_in_complex_term(RepPair(t) - 1, RepPair(t) + 1,
- TermNil PASS_REGS);
- } else {
+ out = attvars_in_complex_term(RepPair(t)-1,
+ RepPair(t)+1, TermNil PASS_REGS);
+ }
+ else {
Functor f = FunctorOfTerm(t);
if (IsExtensionFunctor(f))
- return Yap_unify(TermNil, ARG2);
- out = attvars_in_complex_term(RepAppl(t), RepAppl(t) + ArityOfFunctor(f),
- TermNil PASS_REGS);
+ return Yap_unify(TermNil, ARG2);
+ out = attvars_in_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(f), TermNil PASS_REGS);
}
if (out == 0L) {
- if (!expand_vts(3 PASS_REGS))
- return FALSE;
+ if (!expand_vts( 3 PASS_REGS ))
+ return FALSE;
}
} while (out == 0L);
- return Yap_unify(ARG2, out);
+ return Yap_unify(ARG2,out);
}
-static Int p_term_variables3(USES_REGS1) /* variables in term t */
+static Int
+p_term_variables3( USES_REGS1 ) /* variables in term t */
{
Term out;
@@ -2073,29 +2146,34 @@ static Int p_term_variables3(USES_REGS1) /* variables in term t */
Term t = Deref(ARG1);
if (IsVarTerm(t)) {
Term out = Yap_MkNewPairTerm();
- return Yap_unify(t, HeadOfTerm(out)) &&
- Yap_unify(ARG3, TailOfTerm(out)) && Yap_unify(out, ARG2);
- } else if (IsPrimitiveTerm(t)) {
+ return
+ Yap_unify(t,HeadOfTerm(out)) &&
+ Yap_unify(ARG3, TailOfTerm(out)) &&
+ Yap_unify(out, ARG2);
+ } else if (IsPrimitiveTerm(t)) {
return Yap_unify(ARG2, ARG3);
} else if (IsPairTerm(t)) {
- out =
- vars_in_complex_term(RepPair(t) - 1, RepPair(t) + 1, ARG3 PASS_REGS);
- } else {
+ out = vars_in_complex_term(RepPair(t)-1,
+ RepPair(t)+1, ARG3 PASS_REGS);
+ }
+ else {
Functor f = FunctorOfTerm(t);
- out = vars_in_complex_term(RepAppl(t), RepAppl(t) + ArityOfFunctor(f),
- ARG3 PASS_REGS);
+ out = vars_in_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(f), ARG3 PASS_REGS);
}
if (out == 0L) {
- if (!expand_vts(3 PASS_REGS))
- return FALSE;
+ if (!expand_vts( 3 PASS_REGS ))
+ return FALSE;
}
} while (out == 0L);
- return Yap_unify(ARG2, out);
+ return Yap_unify(ARG2,out);
}
-static Term vars_within_complex_term(register CELL *pt0, register CELL *pt0_end,
- Term inp USES_REGS) {
+
+static Term vars_within_complex_term(register CELL *pt0, register CELL *pt0_end, Term inp USES_REGS)
+{
register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace();
register tr_fr_ptr TR0 = TR;
@@ -2110,82 +2188,83 @@ static Term vars_within_complex_term(register CELL *pt0, register CELL *pt0_end,
*ptr = TermFoundVar;
TrailTerm(TR++) = t;
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
- goto trail_overflow;
- }
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
+ goto trail_overflow;
+ }
}
}
inp = TailOfTerm(inp);
}
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, vars_within_term_unk);
- vars_within_term_nvar : {
- if (IsPairTerm(d0)) {
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ vars_within_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- continue;
- }
- /* store the terms to visit */
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
+ if (IsExtensionFunctor(f)) {
+ continue;
+ }
+ /* store the terms to visit */
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
- } else if (d0 == TermFoundVar) {
- /* leave an empty slot to fill in later */
- if (HR + 1024 > ASP) {
- goto global_overflow;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ } else if (d0 == TermFoundVar) {
+ /* leave an empty slot to fill in later */
+ if (HR+1024 > ASP) {
+ goto global_overflow;
+ }
+ HR[1] = AbsPair(HR+2);
+ HR += 2;
+ HR[-2] = (CELL)ptd0;
+ *ptd0 = TermNil;
}
- HR[1] = AbsPair(HR + 2);
- HR += 2;
- HR[-2] = (CELL)ptd0;
- *ptd0 = TermNil;
+ continue;
}
- continue;
- }
derefa_body(d0, ptd0, vars_within_term_unk, vars_within_term_nvar);
}
@@ -2213,7 +2292,7 @@ loop:
return TermNil;
}
-trail_overflow:
+ trail_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2222,14 +2301,14 @@ trail_overflow:
}
#endif
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
- LOCAL_Error_Size = (TR - TR0) * sizeof(tr_fr_ptr *);
+ LOCAL_Error_Size = (TR-TR0)*sizeof(tr_fr_ptr *);
clean_tr(TR0 PASS_REGS);
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH;
return 0L;
-aux_overflow:
- LOCAL_Error_Size = (to_visit - to_visit0) * sizeof(CELL **);
+ aux_overflow:
+ LOCAL_Error_Size = (to_visit-to_visit0)*sizeof(CELL **);
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2243,7 +2322,7 @@ aux_overflow:
HR = InitialH;
return 0L;
-global_overflow:
+ global_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2255,41 +2334,44 @@ global_overflow:
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH;
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
- LOCAL_Error_Size = (ASP - HR) * sizeof(CELL);
+ LOCAL_Error_Size = (ASP-HR)*sizeof(CELL);
return 0L;
+
}
static Int
-p_variables_within_term(USES_REGS1) /* variables within term t */
+p_variables_within_term( USES_REGS1 ) /* variables within term t */
{
Term out;
do {
Term t = Deref(ARG2);
if (IsVarTerm(t)) {
- out = vars_within_complex_term(VarOfTerm(t) - 1, VarOfTerm(t),
- Deref(ARG1) PASS_REGS);
+ out = vars_within_complex_term(VarOfTerm(t)-1,
+ VarOfTerm(t), Deref(ARG1) PASS_REGS);
- } else if (IsPrimitiveTerm(t))
+ } else if (IsPrimitiveTerm(t))
out = TermNil;
else if (IsPairTerm(t)) {
- out = vars_within_complex_term(RepPair(t) - 1, RepPair(t) + 1,
- Deref(ARG1) PASS_REGS);
- } else {
+ out = vars_within_complex_term(RepPair(t)-1,
+ RepPair(t)+1, Deref(ARG1) PASS_REGS);
+ }
+ else {
Functor f = FunctorOfTerm(t);
- out = vars_within_complex_term(RepAppl(t), RepAppl(t) + ArityOfFunctor(f),
- Deref(ARG1) PASS_REGS);
+ out = vars_within_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(f), Deref(ARG1) PASS_REGS);
}
if (out == 0L) {
- if (!expand_vts(3 PASS_REGS))
- return FALSE;
+ if (!expand_vts( 3 PASS_REGS ))
+ return FALSE;
}
} while (out == 0L);
- return Yap_unify(ARG3, out);
+ return Yap_unify(ARG3,out);
}
-static Term new_vars_in_complex_term(register CELL *pt0, register CELL *pt0_end,
- Term inp USES_REGS) {
+static Term new_vars_in_complex_term(register CELL *pt0, register CELL *pt0_end, Term inp USES_REGS)
+{
register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace();
register tr_fr_ptr TR0 = TR;
CELL *InitialH = HR;
@@ -2303,89 +2385,90 @@ static Term new_vars_in_complex_term(register CELL *pt0, register CELL *pt0_end,
*ptr = TermFoundVar;
TrailTerm(TR++) = t;
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
- goto trail_overflow;
- }
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
+ goto trail_overflow;
+ }
}
}
inp = TailOfTerm(inp);
}
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, vars_within_term_unk);
- vars_within_term_nvar : {
- if (IsPairTerm(d0)) {
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ vars_within_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- continue;
- }
- /* store the terms to visit */
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
+ if (IsExtensionFunctor(f)) {
+ continue;
+ }
+ /* store the terms to visit */
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ }
+ continue;
}
- continue;
- }
derefa_body(d0, ptd0, vars_within_term_unk, vars_within_term_nvar);
/* do or pt2 are unbound */
*ptd0 = TermNil;
/* leave an empty slot to fill in later */
- if (HR + 1024 > ASP) {
+ if (HR+1024 > ASP) {
goto global_overflow;
}
- HR[1] = AbsPair(HR + 2);
+ HR[1] = AbsPair(HR+2);
HR += 2;
HR[-2] = (CELL)ptd0;
/* next make sure noone will see this as a variable again */
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
/* Trail overflow */
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
- goto trail_overflow;
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
+ goto trail_overflow;
}
}
TrailTerm(TR++) = (CELL)ptd0;
@@ -2414,7 +2497,7 @@ loop:
return TermNil;
}
-trail_overflow:
+ trail_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2423,14 +2506,14 @@ trail_overflow:
}
#endif
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
- LOCAL_Error_Size = (TR - TR0) * sizeof(tr_fr_ptr *);
+ LOCAL_Error_Size = (TR-TR0)*sizeof(tr_fr_ptr *);
clean_tr(TR0 PASS_REGS);
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH;
return 0L;
-aux_overflow:
- LOCAL_Error_Size = (to_visit - to_visit0) * sizeof(CELL **);
+ aux_overflow:
+ LOCAL_Error_Size = (to_visit-to_visit0)*sizeof(CELL **);
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2444,7 +2527,7 @@ aux_overflow:
HR = InitialH;
return 0L;
-global_overflow:
+ global_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2456,122 +2539,125 @@ global_overflow:
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH;
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
- LOCAL_Error_Size = (ASP - HR) * sizeof(CELL);
+ LOCAL_Error_Size = (ASP-HR)*sizeof(CELL);
return 0L;
+
}
static Int
-p_new_variables_in_term(USES_REGS1) /* variables within term t */
+p_new_variables_in_term( USES_REGS1 ) /* variables within term t */
{
Term out;
do {
Term t = Deref(ARG2);
if (IsVarTerm(t)) {
- out = new_vars_in_complex_term(VarOfTerm(t) - 1, VarOfTerm(t),
- Deref(ARG1) PASS_REGS);
+ out = new_vars_in_complex_term(VarOfTerm(t)-1,
+ VarOfTerm(t), Deref(ARG1) PASS_REGS);
- } else if (IsPrimitiveTerm(t))
+ } else if (IsPrimitiveTerm(t))
out = TermNil;
else if (IsPairTerm(t)) {
- out = new_vars_in_complex_term(RepPair(t) - 1, RepPair(t) + 1,
- Deref(ARG1) PASS_REGS);
- } else {
+ out = new_vars_in_complex_term(RepPair(t)-1,
+ RepPair(t)+1, Deref(ARG1) PASS_REGS);
+ }
+ else {
Functor f = FunctorOfTerm(t);
- out = new_vars_in_complex_term(RepAppl(t), RepAppl(t) + ArityOfFunctor(f),
- Deref(ARG1) PASS_REGS);
+ out = new_vars_in_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(f), Deref(ARG1) PASS_REGS);
}
if (out == 0L) {
- if (!expand_vts(3 PASS_REGS))
- return FALSE;
+ if (!expand_vts( 3 PASS_REGS ))
+ return FALSE;
}
} while (out == 0L);
- return Yap_unify(ARG3, out);
+ return Yap_unify(ARG3,out);
}
-static Term free_vars_in_complex_term(register CELL *pt0,
- register CELL *pt0_end,
- tr_fr_ptr TR0 USES_REGS) {
+static Term free_vars_in_complex_term(register CELL *pt0, register CELL *pt0_end, tr_fr_ptr TR0 USES_REGS)
+{
register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace();
CELL *InitialH = HR;
*HR++ = MkAtomTerm(AtomDollar);
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, vars_within_term_unk);
- vars_within_term_nvar : {
- if (IsPairTerm(d0)) {
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ vars_within_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- continue;
- }
- /* store the terms to visit */
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
+ if (IsExtensionFunctor(f)) {
+ continue;
+ }
+ /* store the terms to visit */
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ }
+ continue;
}
- continue;
- }
derefa_body(d0, ptd0, vars_within_term_unk, vars_within_term_nvar);
/* do or pt2 are unbound */
*ptd0 = TermNil;
/* leave an empty slot to fill in later */
- if (HR + 1024 > ASP) {
+ if (HR+1024 > ASP) {
goto global_overflow;
}
- HR[0] = (CELL)ptd0;
- HR++;
+ HR[0] = (CELL)ptd0;
+ HR ++;
/* next make sure noone will see this as a variable again */
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
/* Trail overflow */
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
- goto trail_overflow;
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
+ goto trail_overflow;
}
}
TrailTerm(TR++) = (CELL)ptd0;
@@ -2593,14 +2679,14 @@ loop:
clean_tr(TR0 PASS_REGS);
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
- if (HR != InitialH + 1) {
- InitialH[0] = (CELL)Yap_MkFunctor(AtomDollar, (HR - InitialH) - 1);
+ if (HR != InitialH+1) {
+ InitialH[0] = (CELL)Yap_MkFunctor(AtomDollar, (HR-InitialH)-1);
return AbsAppl(InitialH);
} else {
return MkAtomTerm(AtomDollar);
}
-trail_overflow:
+ trail_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2609,14 +2695,14 @@ trail_overflow:
}
#endif
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
- LOCAL_Error_Size = (TR - TR0) * sizeof(tr_fr_ptr *);
+ LOCAL_Error_Size = (TR-TR0)*sizeof(tr_fr_ptr *);
clean_tr(TR0 PASS_REGS);
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH;
return 0L;
-aux_overflow:
- LOCAL_Error_Size = (to_visit - to_visit0) * sizeof(CELL **);
+ aux_overflow:
+ LOCAL_Error_Size = (to_visit-to_visit0)*sizeof(CELL **);
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2630,7 +2716,7 @@ aux_overflow:
HR = InitialH;
return 0L;
-global_overflow:
+ global_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2642,77 +2728,78 @@ global_overflow:
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH;
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
- LOCAL_Error_Size = (ASP - HR) * sizeof(CELL);
+ LOCAL_Error_Size = (ASP-HR)*sizeof(CELL);
return 0L;
+
}
-static Term bind_vars_in_complex_term(register CELL *pt0,
- register CELL *pt0_end,
- tr_fr_ptr TR0 USES_REGS) {
+static Term bind_vars_in_complex_term(register CELL *pt0, register CELL *pt0_end, tr_fr_ptr TR0 USES_REGS)
+{
register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace();
CELL *InitialH = HR;
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, vars_within_term_unk);
- vars_within_term_nvar : {
- if (IsPairTerm(d0)) {
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ vars_within_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- continue;
- }
- /* store the terms to visit */
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
+ if (IsExtensionFunctor(f)) {
+ continue;
+ }
+ /* store the terms to visit */
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ }
+ continue;
}
- continue;
- }
derefa_body(d0, ptd0, vars_within_term_unk, vars_within_term_nvar);
/* do or pt2 are unbound */
@@ -2720,8 +2807,8 @@ loop:
/* next make sure noone will see this as a variable again */
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
/* Trail overflow */
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
- goto trail_overflow;
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
+ goto trail_overflow;
}
}
TrailTerm(TR++) = (CELL)ptd0;
@@ -2744,7 +2831,7 @@ loop:
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
return TermNil;
-trail_overflow:
+ trail_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2753,14 +2840,14 @@ trail_overflow:
}
#endif
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
- LOCAL_Error_Size = (TR - TR0) * sizeof(tr_fr_ptr *);
+ LOCAL_Error_Size = (TR-TR0)*sizeof(tr_fr_ptr *);
clean_tr(TR0 PASS_REGS);
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH;
return 0L;
-aux_overflow:
- LOCAL_Error_Size = (to_visit - to_visit0) * sizeof(CELL **);
+ aux_overflow:
+ LOCAL_Error_Size = (to_visit-to_visit0)*sizeof(CELL **);
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2773,10 +2860,11 @@ aux_overflow:
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH;
return 0L;
+
}
static Int
-p_free_variables_in_term(USES_REGS1) /* variables within term t */
+p_free_variables_in_term( USES_REGS1 ) /* variables within term t */
{
Term out;
Term t, t0;
@@ -2789,56 +2877,60 @@ p_free_variables_in_term(USES_REGS1) /* variables within term t */
while (!IsVarTerm(t) && IsApplTerm(t)) {
Functor f = FunctorOfTerm(t);
if (f == FunctorHat) {
- out = bind_vars_in_complex_term(RepAppl(t), RepAppl(t) + 1,
- TR0 PASS_REGS);
- if (out == 0L) {
- goto trail_overflow;
- }
+ out = bind_vars_in_complex_term(RepAppl(t),
+ RepAppl(t)+1, TR0 PASS_REGS);
+ if (out == 0L) {
+ goto trail_overflow;
+ }
} else if (f == FunctorModule) {
- found_module = ArgOfTerm(1, t);
+ found_module = ArgOfTerm(1, t);
} else if (f == FunctorCall) {
- t = ArgOfTerm(1, t);
- continue;
+ t = ArgOfTerm(1, t);
+ continue;
} else if (f == FunctorExecuteInMod) {
- found_module = ArgOfTerm(2, t);
- t = ArgOfTerm(1, t);
- continue;
+ found_module = ArgOfTerm(2, t);
+ t = ArgOfTerm(1, t);
+ continue;
} else {
- break;
+ break;
}
- t = ArgOfTerm(2, t);
+ t = ArgOfTerm(2,t);
}
if (IsVarTerm(t)) {
- out = free_vars_in_complex_term(VarOfTerm(t) - 1, VarOfTerm(t),
- TR0 PASS_REGS);
+ out = free_vars_in_complex_term(VarOfTerm(t)-1,
+ VarOfTerm(t), TR0 PASS_REGS);
- } else if (IsPrimitiveTerm(t))
+ } else if (IsPrimitiveTerm(t))
out = TermNil;
else if (IsPairTerm(t)) {
- out = free_vars_in_complex_term(RepPair(t) - 1, RepPair(t) + 1,
- TR0 PASS_REGS);
- } else {
+ out = free_vars_in_complex_term(RepPair(t)-1,
+ RepPair(t)+1, TR0 PASS_REGS);
+ }
+ else {
Functor f = FunctorOfTerm(t);
- out = free_vars_in_complex_term(
- RepAppl(t), RepAppl(t) + ArityOfFunctor(f), TR0 PASS_REGS);
+ out = free_vars_in_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(f), TR0 PASS_REGS);
}
if (out == 0L) {
trail_overflow:
- if (!expand_vts(3 PASS_REGS))
- return FALSE;
+ if (!expand_vts( 3 PASS_REGS ))
+ return FALSE;
}
} while (out == 0L);
- if (found_module && t != t0) {
+ if (found_module && t!=t0) {
Term ts[2];
ts[0] = found_module;
ts[1] = t;
t = Yap_MkApplTerm(FunctorModule, 2, ts);
}
- return Yap_unify(ARG2, t) && Yap_unify(ARG3, out);
+ return
+ Yap_unify(ARG2, t) &&
+ Yap_unify(ARG3,out);
}
-static Term non_singletons_in_complex_term(register CELL *pt0,
- register CELL *pt0_end USES_REGS) {
+static Term non_singletons_in_complex_term(register CELL *pt0, register CELL *pt0_end USES_REGS)
+{
register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace();
register tr_fr_ptr TR0 = TR;
@@ -2846,76 +2938,78 @@ static Term non_singletons_in_complex_term(register CELL *pt0,
CELL output = AbsPair(HR);
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, vars_in_term_unk);
- vars_in_term_nvar : {
- if (IsPairTerm(d0)) {
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ vars_in_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
+ if (IsExtensionFunctor(f)) {
- continue;
- }
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ continue;
+ }
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
- } else if (d0 == TermFoundVar) {
- CELL *pt2 = pt0;
- while (IsVarTerm(*pt2))
- pt2 = (CELL *)(*pt2);
- HR[0] = (CELL)pt2;
- HR[1] = AbsPair(HR + 2);
- HR += 2;
- *pt2 = TermRefoundVar;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ } else if (d0 == TermFoundVar) {
+ CELL *pt2 = pt0;
+ while(IsVarTerm(*pt2))
+ pt2 = (CELL *)(*pt2);
+ HR[1] = AbsPair(HR+2);
+ HR += 2;
+ HR[-2] = (CELL)pt2;
+ *pt2 = TermRefoundVar;
+ }
+ continue;
}
- continue;
- }
+
derefa_body(d0, ptd0, vars_in_term_unk, vars_in_term_nvar);
/* do or pt2 are unbound */
@@ -2941,14 +3035,14 @@ loop:
clean_tr(TR0 PASS_REGS);
if (HR != InitialH) {
/* close the list */
- RESET_VARIABLE(HR - 1);
- Yap_unify((CELL)(HR - 1), ARG2);
+ RESET_VARIABLE(HR-1);
+ Yap_unify((CELL)(HR-1),ARG2);
return output;
} else {
return ARG2;
}
-aux_overflow:
+ aux_overflow:
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
to_visit -= 3;
@@ -2959,13 +3053,13 @@ aux_overflow:
clean_tr(TR0 PASS_REGS);
if (HR != InitialH) {
/* close the list */
- RESET_VARIABLE(HR - 1);
+ RESET_VARIABLE(HR-1);
}
return 0L;
}
-static Int p_non_singletons_in_term(
- USES_REGS1) /* non_singletons in term t */
+static Int
+p_non_singletons_in_term( USES_REGS1 ) /* non_singletons in term t */
{
Term t;
Term out;
@@ -2973,35 +3067,35 @@ static Int p_non_singletons_in_term(
while (TRUE) {
t = Deref(ARG1);
if (IsVarTerm(t)) {
- out = ARG2;
- } else if (IsPrimitiveTerm(t)) {
+ out = MkPairTerm(t,ARG2);
+ } else if (IsPrimitiveTerm(t)) {
out = ARG2;
} else if (IsPairTerm(t)) {
- out = non_singletons_in_complex_term(RepPair(t) - 1,
- RepPair(t) + 1 PASS_REGS);
+ out = non_singletons_in_complex_term(RepPair(t)-1,
+ RepPair(t)+1 PASS_REGS);
} else {
- out = non_singletons_in_complex_term(
- RepAppl(t), RepAppl(t) + ArityOfFunctor(FunctorOfTerm(t)) PASS_REGS);
+ out = non_singletons_in_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(FunctorOfTerm(t)) PASS_REGS);
}
if (out != 0L) {
- return Yap_unify(ARG3, out);
+ return Yap_unify(ARG3,out);
} else {
if (!Yap_ExpandPreAllocCodeSpace(0, NULL, TRUE)) {
- Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, ARG1,
- "overflow in singletons");
- return FALSE;
+ Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, ARG1, "overflow in singletons");
+ return FALSE;
}
}
}
}
-static Int ground_complex_term(register CELL *pt0,
- register CELL *pt0_end USES_REGS) {
+static Int ground_complex_term(register CELL *pt0, register CELL *pt0_end USES_REGS)
+{
register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace();
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
@@ -3010,59 +3104,61 @@ loop:
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, vars_in_term_unk);
- vars_in_term_nvar : {
- if (IsPairTerm(d0)) {
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ vars_in_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- continue;
- }
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ if (IsExtensionFunctor(f)) {
+ continue;
+ }
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ }
+ continue;
}
- continue;
- }
+
derefa_body(d0, ptd0, vars_in_term_unk, vars_in_term_nvar);
#ifdef RATIONAL_TREES
@@ -3091,7 +3187,7 @@ loop:
}
return TRUE;
-aux_overflow:
+ aux_overflow:
/* unwind stack */
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
@@ -3103,77 +3199,81 @@ aux_overflow:
return -1;
}
-bool Yap_IsGroundTerm(Term t) {
+bool Yap_IsGroundTerm(Term t)
+{
CACHE_REGS
while (TRUE) {
Int out;
if (IsVarTerm(t)) {
return FALSE;
- } else if (IsPrimitiveTerm(t)) {
+ } else if (IsPrimitiveTerm(t)) {
return TRUE;
} else if (IsPairTerm(t)) {
- if ((out = ground_complex_term(RepPair(t) - 1,
- RepPair(t) + 1 PASS_REGS)) >= 0) {
- return out != 0;
+ if ((out =ground_complex_term(RepPair(t)-1,
+ RepPair(t)+1 PASS_REGS)) >= 0) {
+ return out != 0;
}
} else {
Functor fun = FunctorOfTerm(t);
if (IsExtensionFunctor(fun))
- return TRUE;
- else if ((out = ground_complex_term(
- RepAppl(t), RepAppl(t) + ArityOfFunctor(fun) PASS_REGS)) >=
- 0) {
- return out != 0;
+ return TRUE;
+ else if ((out = ground_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(fun) PASS_REGS)) >= 0) {
+ return out != 0;
}
}
if (out < 0) {
*HR++ = t;
if (!Yap_ExpandPreAllocCodeSpace(0, NULL, TRUE)) {
- Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, ARG1, "overflow in ground");
- return false;
+ Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, ARG1, "overflow in ground");
+ return false;
}
t = *--HR;
}
}
}
-static Int p_ground(USES_REGS1) /* ground(+T) */
+static Int
+p_ground( USES_REGS1 ) /* ground(+T) */
{
return Yap_IsGroundTerm(Deref(ARG1));
}
-static int SizeOfExtension(Term t) {
+static int
+SizeOfExtension(Term t)
+{
Functor f = FunctorOfTerm(t);
- if (f == FunctorDouble) {
- return 2 + sizeof(Float) / sizeof(CELL);
+ if (f== FunctorDouble) {
+ return 2 + sizeof(Float)/sizeof(CELL);
}
- if (f == FunctorString) {
+ if (f== FunctorString) {
return 3 + RepAppl(t)[1];
}
- if (f == FunctorLongInt) {
- return 2 + sizeof(Float) / sizeof(CELL);
+ if (f== FunctorLongInt) {
+ return 2 + sizeof(Float)/sizeof(CELL);
}
- if (f == FunctorDBRef) {
+ if (f== FunctorDBRef) {
return 0;
}
- if (f == FunctorBigInt) {
- CELL *pt = RepAppl(t) + 2;
- return 3 + sizeof(MP_INT) +
- (((MP_INT *)(pt))->_mp_alloc * sizeof(mp_limb_t));
+ if (f== FunctorBigInt) {
+ CELL *pt = RepAppl(t)+2;
+ return 3+sizeof(MP_INT)+(((MP_INT *)(pt))->_mp_alloc*sizeof(mp_limb_t));
}
return 0;
}
-static Int sz_ground_complex_term(register CELL *pt0, register CELL *pt0_end,
- int ground USES_REGS) {
+
+static Int sz_ground_complex_term(register CELL *pt0, register CELL *pt0_end, int ground USES_REGS)
+{
register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace();
Int sz = 0;
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
@@ -3182,62 +3282,64 @@ loop:
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, vars_in_term_unk);
- vars_in_term_nvar : {
- if (IsPairTerm(d0)) {
- sz += 2;
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ vars_in_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ sz += 2;
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- sz += SizeOfExtension(d0);
- continue;
- }
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ if (IsExtensionFunctor(f)) {
+ sz += SizeOfExtension(d0);
+ continue;
+ }
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- d0 = ArityOfFunctor(f);
- sz += (1 + d0);
- pt0 = ap2;
- pt0_end = ap2 + d0;
+ d0 = ArityOfFunctor(f);
+ sz += (1+d0);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ }
+ continue;
}
- continue;
- }
+
derefa_body(d0, ptd0, vars_in_term_unk, vars_in_term_nvar);
if (!ground)
@@ -3268,7 +3370,7 @@ loop:
}
return sz;
-aux_overflow:
+ aux_overflow:
/* unwind stack */
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
@@ -3280,117 +3382,124 @@ aux_overflow:
return -1;
}
-int Yap_SizeGroundTerm(Term t, int ground) {
+int
+Yap_SizeGroundTerm(Term t, int ground)
+{
CACHE_REGS
if (IsVarTerm(t)) {
if (!ground)
return 1;
return 0;
- } else if (IsPrimitiveTerm(t)) {
+ } else if (IsPrimitiveTerm(t)) {
return 1;
} else if (IsPairTerm(t)) {
- int sz = sz_ground_complex_term(RepPair(t) - 1, RepPair(t) + 1,
- ground PASS_REGS);
+ int sz = sz_ground_complex_term(RepPair(t)-1, RepPair(t)+1, ground PASS_REGS);
if (sz <= 0)
return sz;
- return sz + 2;
- } else {
- int sz = 0;
- Functor fun = FunctorOfTerm(t);
+ return sz+2;
+} else {
+ int sz = 0;
+ Functor fun = FunctorOfTerm(t);
- if (IsExtensionFunctor(fun))
- return 1 + SizeOfExtension(t);
+ if (IsExtensionFunctor(fun))
+ return 1+ SizeOfExtension(t);
- sz = sz_ground_complex_term(RepAppl(t), RepAppl(t) + ArityOfFunctor(fun),
- ground PASS_REGS);
- if (sz <= 0)
- return sz;
- return 1 + ArityOfFunctor(fun) + sz;
+ sz = sz_ground_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(fun),
+ ground PASS_REGS);
+ if (sz <= 0)
+ return sz;
+ return 1+ArityOfFunctor(fun)+sz;
}
}
-static Int var_in_complex_term(register CELL *pt0, register CELL *pt0_end,
- Term v USES_REGS) {
+static Int var_in_complex_term(register CELL *pt0,
+ register CELL *pt0_end,
+ Term v USES_REGS)
+{
register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace();
register tr_fr_ptr TR0 = TR;
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, var_in_term_unk);
- var_in_term_nvar : {
- if (IsPairTerm(d0)) {
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
+ var_in_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ continue;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
+
+ if (IsExtensionFunctor(f)) {
+
+ continue;
+ }
+ if (to_visit + 1024 >= (CELL **)AuxSp) {
+ goto aux_overflow;
+ }
+#ifdef RATIONAL_TREES
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = (CELL *)*pt0;
+ to_visit += 3;
+ *pt0 = TermNil;
+#else
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit += 2;
+ }
+#endif
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ }
continue;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
-
- if (IsExtensionFunctor(f)) {
-
- continue;
- }
- if (to_visit + 1024 >= (CELL **)AuxSp) {
- goto aux_overflow;
- }
-#ifdef RATIONAL_TREES
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = (CELL *)*pt0;
- to_visit += 3;
- *pt0 = TermNil;
-#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
- }
-#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
}
- continue;
- }
+
deref_body(d0, ptd0, var_in_term_unk, var_in_term_nvar);
if ((CELL)ptd0 == v) { /* we found it */
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit -= 3;
- pt0 = to_visit[0];
- *pt0 = (CELL)to_visit[2];
+ to_visit -= 3;
+ pt0 = to_visit[0];
+ *pt0 = (CELL)to_visit[2];
}
#endif
clean_tr(TR0 PASS_REGS);
- return (TRUE);
+ return(TRUE);
}
/* do or pt2 are unbound */
*ptd0 = TermNil;
@@ -3421,7 +3530,8 @@ loop:
clean_tr(TR0 PASS_REGS);
return FALSE;
-aux_overflow:
+
+ aux_overflow:
/* unwind stack */
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
@@ -3433,30 +3543,34 @@ aux_overflow:
return -1;
}
-static Int var_in_term(Term v,
- Term t USES_REGS) /* variables in term t */
+static Int
+var_in_term(Term v, Term t USES_REGS) /* variables in term t */
{
if (IsVarTerm(t)) {
- return (v == t);
+ return(v == t);
} else if (IsPrimitiveTerm(t)) {
- return (FALSE);
+ return(FALSE);
} else if (IsPairTerm(t)) {
- return (var_in_complex_term(RepPair(t) - 1, RepPair(t) + 1, v PASS_REGS));
- } else
- return (var_in_complex_term(RepAppl(t),
- RepAppl(t) + ArityOfFunctor(FunctorOfTerm(t)),
- v PASS_REGS));
+ return(var_in_complex_term(RepPair(t)-1,
+ RepPair(t)+1,v PASS_REGS));
+ }
+ else return(var_in_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(FunctorOfTerm(t)),v PASS_REGS));
}
-static Int p_var_in_term(USES_REGS1) {
- return (var_in_term(Deref(ARG2), Deref(ARG1) PASS_REGS));
+static Int
+p_var_in_term( USES_REGS1 )
+{
+ return(var_in_term(Deref(ARG2), Deref(ARG1) PASS_REGS));
}
/* The code for TermHash was originally contributed by Gertjen Van Noor */
/* This code with max_depth == -1 will loop for infinite trees */
+
//-----------------------------------------------------------------------------
// MurmurHash2, by Austin Appleby
@@ -3471,188 +3585,200 @@ static Int p_var_in_term(USES_REGS1) {
// 2. It will not produce the same results on little-endian and big-endian
// machines.
-static unsigned int MurmurHashNeutral2(const void *key, int len,
- unsigned int seed) {
- const unsigned int m = 0x5bd1e995;
- const int r = 24;
+static unsigned int
+MurmurHashNeutral2 ( const void * key, int len, unsigned int seed )
+{
+ const unsigned int m = 0x5bd1e995;
+ const int r = 24;
- unsigned int h = seed ^ len;
+ unsigned int h = seed ^ len;
- const unsigned char *data = (const unsigned char *)key;
+ const unsigned char * data = (const unsigned char *)key;
- while (len >= 4) {
- unsigned int k;
+ while(len >= 4)
+ {
+ unsigned int k;
- k = data[0];
- k |= data[1] << 8;
- k |= data[2] << 16;
- k |= data[3] << 24;
+ k = data[0];
+ k |= data[1] << 8;
+ k |= data[2] << 16;
+ k |= data[3] << 24;
- k *= m;
- k ^= k >> r;
- k *= m;
+ k *= m;
+ k ^= k >> r;
+ k *= m;
- h *= m;
- h ^= k;
+ h *= m;
+ h ^= k;
- data += 4;
- len -= 4;
- }
+ data += 4;
+ len -= 4;
+ }
- switch (len) {
- case 3:
- h ^= data[2] << 16;
- case 2:
- h ^= data[1] << 8;
- case 1:
- h ^= data[0];
- h *= m;
- };
+ switch(len)
+ {
+ case 3: h ^= data[2] << 16;
+ case 2: h ^= data[1] << 8;
+ case 1: h ^= data[0];
+ h *= m;
+ };
- h ^= h >> 13;
- h *= m;
- h ^= h >> 15;
+ h ^= h >> 13;
+ h *= m;
+ h ^= h >> 15;
- return h;
+ return h;
}
-static CELL *addAtomToHash(CELL *st, Atom at) {
+static CELL *
+addAtomToHash(CELL *st, Atom at)
+{
unsigned int len;
- char *c = RepAtom(at)->StrOfAE;
- int ulen = strlen(c);
- /* fix hashing over empty atom */
- if (!ulen) {
- return st;
- }
- if (ulen % CellSize == 0) {
- len = ulen / CellSize;
- } else {
- len = ulen / CellSize;
- len++;
- }
- st[len - 1] = 0L;
- strncpy((char *)st, c, ulen);
- return st + len;
+ char *c = RepAtom(at)->StrOfAE;
+ int ulen = strlen(c);
+ /* fix hashing over empty atom */
+ if (!ulen) {
+ return st;
+ }
+ if (ulen % CellSize == 0) {
+ len = ulen/CellSize;
+ } else {
+ len = ulen/CellSize;
+ len++;
+ }
+ st[len-1] = 0L;
+ strncpy((char *)st, c, ulen);
+ return st+len;
}
typedef struct visited {
CELL *start;
- CELL *end;
+ CELL *end;
CELL old;
UInt vdepth;
} visited_t;
-static CELL *hash_complex_term(register CELL *pt0, register CELL *pt0_end,
- Int depth, CELL *st, int variant USES_REGS) {
- register visited_t *to_visit0,
- *to_visit = (visited_t *)Yap_PreAllocCodeSpace();
+static CELL *
+hash_complex_term(register CELL *pt0,
+ register CELL *pt0_end,
+ Int depth,
+ CELL *st,
+ int variant USES_REGS)
+{
+ register visited_t *to_visit0, *to_visit = (visited_t *)Yap_PreAllocCodeSpace();
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, hash_complex_unk);
- hash_complex_nvar : {
- if (st + 1024 >= ASP) {
- goto global_overflow;
- }
- if (IsAtomOrIntTerm(d0)) {
- if (d0 != TermFoundVar) {
- if (IsAtomTerm(d0)) {
- st = addAtomToHash(st, AtomOfTerm(d0));
- } else {
- *st++ = IntOfTerm(d0);
- }
+ hash_complex_nvar:
+ {
+ if (st + 1024 >= ASP) {
+ goto global_overflow;
}
- continue;
- } else if (IsPairTerm(d0)) {
- st = addAtomToHash(st, AtomDot);
- if (depth == 1)
- continue;
- if (to_visit + 256 >= (visited_t *)AuxSp) {
- goto aux_overflow;
- }
- to_visit->start = pt0;
- to_visit->end = pt0_end;
- to_visit->old = *pt0;
- to_visit->vdepth = depth;
- to_visit++;
- depth--;
- *pt0 = TermFoundVar;
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- continue;
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
+ if (IsAtomOrIntTerm(d0)) {
+ if (d0 != TermFoundVar) {
+ if (IsAtomTerm(d0)) {
+ st = addAtomToHash(st, AtomOfTerm(d0));
+ } else {
+ *st++ = IntOfTerm(d0);
+ }
+ }
+ continue;
+ } else if (IsPairTerm(d0)) {
+ st = addAtomToHash(st, AtomDot);
+ if (depth == 1)
+ continue;
+ if (to_visit + 256 >= (visited_t *)AuxSp) {
+ goto aux_overflow;
+ }
+ to_visit->start = pt0;
+ to_visit->end = pt0_end;
+ to_visit->old = *pt0;
+ to_visit->vdepth = depth;
+ to_visit++;
+ depth--;
+ *pt0 = TermFoundVar;
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ continue;
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- CELL fc = (CELL)f;
+ if (IsExtensionFunctor(f)) {
+ CELL fc = (CELL)f;
- switch (fc) {
+ switch(fc) {
- case (CELL)FunctorDBRef:
- *st++ = fc;
- break;
- case (CELL)FunctorLongInt:
- *st++ = LongIntOfTerm(d0);
- break;
- case (CELL)FunctorString:
- memmove(st, RepAppl(d0), (3 + RepAppl(d0)[1]) * sizeof(CELL));
- st += 3 + RepAppl(d0)[1];
- break;
+ case (CELL)FunctorDBRef:
+ *st++ = fc;
+ break;
+ case (CELL)FunctorLongInt:
+ *st++ = LongIntOfTerm(d0);
+ break;
+ case (CELL)FunctorString:
+ memmove(st, RepAppl(d0), (3+RepAppl(d0)[1])*sizeof(CELL));
+ st += 3+RepAppl(d0)[1];
+ break;
#ifdef USE_GMP
- case (CELL)FunctorBigInt: {
- CELL *pt = RepAppl(d0);
- Int sz = sizeof(MP_INT) + 1 +
- (((MP_INT *)(pt + 2))->_mp_alloc * sizeof(mp_limb_t));
+ case (CELL)FunctorBigInt:
+ {
+ CELL *pt = RepAppl(d0);
+ Int sz =
+ sizeof(MP_INT)+1+
+ (((MP_INT *)(pt+2))->_mp_alloc*sizeof(mp_limb_t));
- if (st + (1024 + sz / CellSize) >= ASP) {
- goto global_overflow;
- }
- /* then the actual number */
- memmove((void *)(st + 1), (void *)(pt + 1), sz);
- st = st + sz / CellSize;
- } break;
+ if (st + (1024 + sz/CellSize) >= ASP) {
+ goto global_overflow;
+ }
+ /* then the actual number */
+ memmove((void *)(st+1), (void *)(pt+1), sz);
+ st = st+sz/CellSize;
+ }
+ break;
#endif
- case (CELL)FunctorDouble: {
- CELL *pt = RepAppl(d0);
- *st++ = pt[1];
-#if SIZEOF_DOUBLE == 2 * SIZEOF_INT_P
- *st++ = pt[2];
+ case (CELL)FunctorDouble:
+ {
+ CELL *pt = RepAppl(d0);
+ *st++ = pt[1];
+#if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
+ *st++ = pt[2];
#endif
- break;
- }
- }
- continue;
+ break;
+ }
+ }
+ continue;
+ }
+ st = addAtomToHash(st, NameOfFunctor(f));
+ if (depth == 1)
+ continue;
+ if (to_visit + 1024 >= (visited_t *)AuxSp) {
+ goto aux_overflow;
+ }
+ to_visit->start = pt0;
+ to_visit->end = pt0_end;
+ to_visit->old = *pt0;
+ to_visit->vdepth = depth;
+ to_visit++;
+ depth--;
+ *pt0 = TermFoundVar;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
}
- st = addAtomToHash(st, NameOfFunctor(f));
- if (depth == 1)
- continue;
- if (to_visit + 1024 >= (visited_t *)AuxSp) {
- goto aux_overflow;
- }
- to_visit->start = pt0;
- to_visit->end = pt0_end;
- to_visit->old = *pt0;
- to_visit->vdepth = depth;
- to_visit++;
- depth--;
- *pt0 = TermFoundVar;
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
+ continue;
}
- continue;
- }
+
deref_body(d0, ptd0, hash_complex_unk, hash_complex_nvar);
if (!variant)
@@ -3671,50 +3797,50 @@ loop:
}
return st;
-aux_overflow:
+ aux_overflow:
/* unwind stack */
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start;
*pt0 = to_visit->old;
}
return (CELL *)-1;
-global_overflow:
+ global_overflow:
/* unwind stack */
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start;
*pt0 = to_visit->old;
}
- return (CELL *)-2;
+ return (CELL *) -2;
}
-Int Yap_TermHash(Term t, Int size, Int depth, int variant) {
+Int
+Yap_TermHash(Term t, Int size, Int depth, int variant)
+{
CACHE_REGS
unsigned int i1;
Term t1 = Deref(t);
while (TRUE) {
- CELL *ar = hash_complex_term(&t1 - 1, &t1, depth, HR, FALSE PASS_REGS);
+ CELL *ar = hash_complex_term(&t1-1, &t1, depth, HR, FALSE PASS_REGS);
if (ar == (CELL *)-1) {
if (!Yap_ExpandPreAllocCodeSpace(0, NULL, TRUE)) {
- Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, ARG1,
- "overflow in term_hash");
- return FALSE;
+ Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, ARG1, "overflow in term_hash");
+ return FALSE;
}
t1 = Deref(ARG1);
- } else if (ar == (CELL *)-2) {
- if (!Yap_gcl((ASP - HR) * sizeof(CELL), 0, ENV, gc_P(P, CP))) {
- Yap_Error(RESOURCE_ERROR_STACK, TermNil, "in term_hash");
- return FALSE;
+ } else if(ar == (CELL *)-2) {
+ if (!Yap_gcl((ASP-HR)*sizeof(CELL), 0, ENV, gc_P(P,CP))) {
+ Yap_Error(RESOURCE_ERROR_STACK, TermNil, "in term_hash");
+ return FALSE;
}
t1 = Deref(ARG1);
} else if (ar == NULL) {
return FALSE;
} else {
- i1 = MurmurHashNeutral2((const void *)HR, CellSize * (ar - HR),
- 0x1a3be34a);
+ i1 = MurmurHashNeutral2((const void *)HR, CellSize*(ar-HR),0x1a3be34a);
break;
}
}
@@ -3722,7 +3848,9 @@ Int Yap_TermHash(Term t, Int size, Int depth, int variant) {
return i1 % size;
}
-static Int p_term_hash(USES_REGS1) {
+static Int
+p_term_hash( USES_REGS1 )
+{
unsigned int i1;
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
@@ -3731,57 +3859,56 @@ static Int p_term_hash(USES_REGS1) {
Int size, depth;
if (IsVarTerm(t2)) {
- Yap_Error(INSTANTIATION_ERROR, t2, "term_hash/4");
- return (FALSE);
+ Yap_Error(INSTANTIATION_ERROR,t2,"term_hash/4");
+ return(FALSE);
}
if (!IsIntegerTerm(t2)) {
- Yap_Error(TYPE_ERROR_INTEGER, t2, "term_hash/4");
- return (FALSE);
+ Yap_Error(TYPE_ERROR_INTEGER,t2,"term_hash/4");
+ return(FALSE);
}
depth = IntegerOfTerm(t2);
if (depth == 0) {
- if (IsVarTerm(t1))
- return (TRUE);
- return (Yap_unify(ARG4, MkIntTerm(0)));
+ if (IsVarTerm(t1)) return(TRUE);
+ return(Yap_unify(ARG4,MkIntTerm(0)));
}
if (IsVarTerm(t3)) {
- Yap_Error(INSTANTIATION_ERROR, t3, "term_hash/4");
- return (FALSE);
+ Yap_Error(INSTANTIATION_ERROR,t3,"term_hash/4");
+ return(FALSE);
}
if (!IsIntegerTerm(t3)) {
- Yap_Error(TYPE_ERROR_INTEGER, t3, "term_hash/4");
- return (FALSE);
+ Yap_Error(TYPE_ERROR_INTEGER,t3,"term_hash/4");
+ return(FALSE);
}
size = IntegerOfTerm(t3);
while (TRUE) {
- CELL *ar = hash_complex_term(&t1 - 1, &t1, depth, HR, FALSE PASS_REGS);
+ CELL *ar = hash_complex_term(&t1-1, &t1, depth, HR, FALSE PASS_REGS);
if (ar == (CELL *)-1) {
if (!Yap_ExpandPreAllocCodeSpace(0, NULL, TRUE)) {
- Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, ARG1,
- "overflow in term_hash");
- return FALSE;
+ Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, ARG1, "overflow in term_hash");
+ return FALSE;
}
t1 = Deref(ARG1);
- } else if (ar == (CELL *)-2) {
- if (!Yap_gcl((ASP - HR) * sizeof(CELL), 4, ENV, gc_P(P, CP))) {
- Yap_Error(RESOURCE_ERROR_STACK, TermNil, "in term_hash");
- return FALSE;
+ } else if(ar == (CELL *)-2) {
+ if (!Yap_gcl((ASP-HR)*sizeof(CELL), 4, ENV, gc_P(P,CP))) {
+ Yap_Error(RESOURCE_ERROR_STACK, TermNil, "in term_hash");
+ return FALSE;
}
t1 = Deref(ARG1);
} else if (ar == NULL) {
return FALSE;
} else {
- i1 = MurmurHashNeutral2((const void *)HR, CellSize * (ar - HR),
- 0x1a3be34a);
+ i1 = MurmurHashNeutral2((const void *)HR, CellSize*(ar-HR),0x1a3be34a);
break;
}
}
/* got the seed and hash from SWI-Prolog */
result = MkIntegerTerm(i1 % size);
- return Yap_unify(ARG4, result);
+ return Yap_unify(ARG4,result);
}
-static Int p_instantiated_term_hash(USES_REGS1) {
+static Int
+p_instantiated_term_hash( USES_REGS1 )
+{
unsigned int i1;
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
@@ -3790,173 +3917,170 @@ static Int p_instantiated_term_hash(USES_REGS1) {
Int size, depth;
if (IsVarTerm(t2)) {
- Yap_Error(INSTANTIATION_ERROR, t2, "term_hash/4");
- return (FALSE);
+ Yap_Error(INSTANTIATION_ERROR,t2,"term_hash/4");
+ return(FALSE);
}
if (!IsIntegerTerm(t2)) {
- Yap_Error(TYPE_ERROR_INTEGER, t2, "term_hash/4");
- return (FALSE);
+ Yap_Error(TYPE_ERROR_INTEGER,t2,"term_hash/4");
+ return(FALSE);
}
depth = IntegerOfTerm(t2);
if (depth == 0) {
- if (IsVarTerm(t1))
- return (TRUE);
- return (Yap_unify(ARG4, MkIntTerm(0)));
+ if (IsVarTerm(t1)) return(TRUE);
+ return(Yap_unify(ARG4,MkIntTerm(0)));
}
if (IsVarTerm(t3)) {
- Yap_Error(INSTANTIATION_ERROR, t3, "term_hash/4");
- return (FALSE);
+ Yap_Error(INSTANTIATION_ERROR,t3,"term_hash/4");
+ return(FALSE);
}
if (!IsIntegerTerm(t3)) {
- Yap_Error(TYPE_ERROR_INTEGER, t3, "term_hash/4");
- return (FALSE);
+ Yap_Error(TYPE_ERROR_INTEGER,t3,"term_hash/4");
+ return(FALSE);
}
size = IntegerOfTerm(t3);
while (TRUE) {
- CELL *ar = hash_complex_term(&t1 - 1, &t1, depth, HR, TRUE PASS_REGS);
+ CELL *ar = hash_complex_term(&t1-1, &t1, depth, HR, TRUE PASS_REGS);
if (ar == (CELL *)-1) {
if (!Yap_ExpandPreAllocCodeSpace(0, NULL, TRUE)) {
- Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, ARG1,
- "overflow in term_hash");
- return FALSE;
+ Yap_Error(RESOURCE_ERROR_AUXILIARY_STACK, ARG1, "overflow in term_hash");
+ return FALSE;
}
t1 = Deref(ARG1);
- } else if (ar == (CELL *)-2) {
- if (!Yap_gcl((ASP - HR) * sizeof(CELL), 4, ENV, gc_P(P, CP))) {
- Yap_Error(RESOURCE_ERROR_STACK, TermNil, "in term_hash");
- return FALSE;
+ } else if(ar == (CELL *)-2) {
+ if (!Yap_gcl((ASP-HR)*sizeof(CELL), 4, ENV, gc_P(P,CP))) {
+ Yap_Error(RESOURCE_ERROR_STACK, TermNil, "in term_hash");
+ return FALSE;
}
t1 = Deref(ARG1);
} else if (ar == NULL) {
return FALSE;
} else {
- i1 = MurmurHashNeutral2((const void *)HR, CellSize * (ar - HR),
- 0x1a3be34a);
+ i1 = MurmurHashNeutral2((const void *)HR, CellSize*(ar-HR),0x1a3be34a);
break;
}
}
/* got the seed and hash from SWI-Prolog */
result = MkIntegerTerm(i1 % size);
- return Yap_unify(ARG4, result);
+ return Yap_unify(ARG4,result);
}
-static int variant_complex(register CELL *pt0, register CELL *pt0_end,
- register CELL *pt1 USES_REGS) {
+static int variant_complex(register CELL *pt0, register CELL *pt0_end, register
+ CELL *pt1 USES_REGS)
+{
tr_fr_ptr OLDTR = TR;
register CELL **to_visit = (CELL **)ASP;
/* make sure that unification always forces trailing */
HBREG = HR;
-loop:
+
+ loop:
while (pt0 < pt0_end) {
register CELL d0, d1;
- ++pt0;
- ++pt1;
+ ++ pt0;
+ ++ pt1;
d0 = Derefa(pt0);
d1 = Derefa(pt1);
if (IsVarTerm(d0)) {
if (IsVarTerm(d1)) {
- CELL *pt0 = VarOfTerm(d0);
- CELL *pt1 = VarOfTerm(d1);
- if (pt0 >= HBREG || pt1 >= HBREG) {
- /* one of the variables has been found before */
- if (VarOfTerm(d0) + 1 == VarOfTerm(d1))
- continue;
- goto fail;
- } else {
- /* two new occurrences of the same variable */
- Term n0 = MkVarTerm(), n1 = MkVarTerm();
- Bind_Global(VarOfTerm(d0), n0);
- Bind_Global(VarOfTerm(d1), n1);
- }
- continue;
+ CELL *pt0 = VarOfTerm(d0);
+ CELL *pt1 = VarOfTerm(d1);
+ if (pt0 >= HBREG || pt1 >= HBREG) {
+ /* one of the variables has been found before */
+ if (VarOfTerm(d0)+1 == VarOfTerm(d1)) continue;
+ goto fail;
+ } else {
+ /* two new occurrences of the same variable */
+ Term n0 = MkVarTerm(), n1 = MkVarTerm();
+ Bind_Global(VarOfTerm(d0), n0);
+ Bind_Global(VarOfTerm(d1), n1);
+ }
+ continue;
} else {
- goto fail;
+ goto fail;
}
} else if (IsVarTerm(d1)) {
goto fail;
} else {
- if (d0 == d1)
- continue;
+ if (d0 == d1) continue;
else if (IsAtomOrIntTerm(d0)) {
- goto fail;
+ goto fail;
} else if (IsPairTerm(d0)) {
- if (!IsPairTerm(d1)) {
- goto fail;
- }
+ if (!IsPairTerm(d1)) {
+ goto fail;
+ }
#ifdef RATIONAL_TREES
- /* now link the two structures so that no one else will */
- /* come here */
- to_visit -= 4;
- if ((CELL *)to_visit < HR + 1024)
- goto out_of_stack;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = (CELL *)*pt0;
- *pt0 = d1;
+ /* now link the two structures so that no one else will */
+ /* come here */
+ to_visit -= 4;
+ if ((CELL *)to_visit < HR+1024)
+ goto out_of_stack;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = (CELL *)*pt0;
+ *pt0 = d1;
#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit -= 3;
- if ((CELL *)to_visit < HR + 1024)
- goto out_of_stack;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- }
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit -= 3;
+ if ((CELL *)to_visit < HR+1024)
+ goto out_of_stack;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ }
#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- pt1 = RepPair(d1) - 1;
- continue;
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ pt1 = RepPair(d1) - 1;
+ continue;
} else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2, *ap3;
- if (!IsApplTerm(d1)) {
- goto fail;
- } else {
- /* store the terms to visit */
- Functor f2;
- ap2 = RepAppl(d0);
- ap3 = RepAppl(d1);
- f = (Functor)(*ap2);
- f2 = (Functor)(*ap3);
- if (f != f2)
- goto fail;
- if (IsExtensionFunctor(f)) {
- if (!unify_extension(f, d0, ap2, d1))
- goto fail;
- continue;
- }
+ register Functor f;
+ register CELL *ap2, *ap3;
+ if (!IsApplTerm(d1)) {
+ goto fail;
+ } else {
+ /* store the terms to visit */
+ Functor f2;
+ ap2 = RepAppl(d0);
+ ap3 = RepAppl(d1);
+ f = (Functor)(*ap2);
+ f2 = (Functor)(*ap3);
+ if (f != f2)
+ goto fail;
+ if (IsExtensionFunctor(f)) {
+ if (!unify_extension(f, d0, ap2, d1))
+ goto fail;
+ continue;
+ }
#ifdef RATIONAL_TREES
- /* now link the two structures so that no one else will */
- /* come here */
- to_visit -= 4;
- if ((CELL *)to_visit < HR + 1024)
- goto out_of_stack;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = (CELL *)*pt0;
- *pt0 = d1;
+ /* now link the two structures so that no one else will */
+ /* come here */
+ to_visit -= 4;
+ if ((CELL *)to_visit < HR+1024)
+ goto out_of_stack;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = (CELL *)*pt0;
+ *pt0 = d1;
#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit -= 3;
- if ((CELL *)to_visit < HR + 1024)
- goto out_of_stack;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- }
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit -= 3;
+ if ((CELL *)to_visit < HR+1024)
+ goto out_of_stack;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ }
#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
- pt1 = ap3;
- continue;
- }
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ pt1 = ap3;
+ continue;
+ }
}
}
}
@@ -3980,13 +4104,13 @@ loop:
HR = HBREG;
/* untrail all bindings made by variant */
while (TR != (tr_fr_ptr)OLDTR) {
- CELL *pt1 = (CELL *)TrailTerm(--TR);
+ CELL *pt1 = (CELL *) TrailTerm(--TR);
RESET_VARIABLE(pt1);
}
HBREG = B->cp_h;
return TRUE;
-out_of_stack:
+ out_of_stack:
HR = HBREG;
/* untrail all bindings made by variant */
#ifdef RATIONAL_TREES
@@ -3999,13 +4123,14 @@ out_of_stack:
}
#endif
while (TR != (tr_fr_ptr)OLDTR) {
- CELL *pt1 = (CELL *)TrailTerm(--TR);
+ CELL *pt1 = (CELL *) TrailTerm(--TR);
RESET_VARIABLE(pt1);
}
HBREG = B->cp_h;
return -1;
-fail:
+
+ fail:
/* failure */
HR = HBREG;
#ifdef RATIONAL_TREES
@@ -4019,14 +4144,16 @@ fail:
#endif
/* untrail all bindings made by variant */
while (TR != (tr_fr_ptr)OLDTR) {
- CELL *pt1 = (CELL *)TrailTerm(--TR);
+ CELL *pt1 = (CELL *) TrailTerm(--TR);
RESET_VARIABLE(pt1);
}
HBREG = B->cp_h;
return FALSE;
}
-static bool is_variant(Term t1, Term t2, int parity USES_REGS) {
+static bool
+is_variant(Term t1, Term t2, int parity USES_REGS)
+{
int out;
if (t1 == t2)
@@ -4038,37 +4165,36 @@ static bool is_variant(Term t1, Term t2, int parity USES_REGS) {
} else if (IsVarTerm(t2))
return false;
if (IsAtomOrIntTerm(t1)) {
- return (t1 == t2);
+ return(t1 == t2);
}
if (IsPairTerm(t1)) {
if (IsPairTerm(t2)) {
- out = variant_complex(RepPair(t1) - 1, RepPair(t1) + 1,
- RepPair(t2) - 1 PASS_REGS);
- if (out < 0)
- goto error;
+ out = variant_complex(RepPair(t1)-1,
+ RepPair(t1)+1,
+ RepPair(t2)-1 PASS_REGS);
+ if (out < 0) goto error;
return out != 0;
- } else
- return false;
+ }
+ else return false;
}
if (!IsApplTerm(t2)) {
return false;
} else {
Functor f1 = FunctorOfTerm(t1);
- if (f1 != FunctorOfTerm(t2))
- return (FALSE);
+ if (f1 != FunctorOfTerm(t2)) return(FALSE);
if (IsExtensionFunctor(f1)) {
- return (unify_extension(f1, t1, RepAppl(t1), t2));
+ return(unify_extension(f1, t1, RepAppl(t1), t2));
}
- out = variant_complex(RepAppl(t1), RepAppl(t1) + ArityOfFunctor(f1),
- RepAppl(t2) PASS_REGS);
- if (out < 0)
- goto error;
+ out = variant_complex(RepAppl(t1),
+ RepAppl(t1)+ArityOfFunctor(f1),
+ RepAppl(t2) PASS_REGS);
+ if (out < 0) goto error;
return out != 0;
}
-error:
+ error:
if (out == -1) {
- if (!Yap_gcl((ASP - HR) * sizeof(CELL), parity, ENV, gc_P(P, CP))) {
+ if (!Yap_gcl((ASP-HR)*sizeof(CELL), parity, ENV, gc_P(P,CP))) {
Yap_Error(RESOURCE_ERROR_STACK, TermNil, "in variant");
return FALSE;
}
@@ -4077,30 +4203,36 @@ error:
return false;
}
-bool Yap_Variant(Term t1, Term t2) {
+bool
+Yap_Variant(Term t1, Term t2)
+{
CACHE_REGS
return is_variant(t1, t2, 0 PASS_REGS);
}
-static Int p_variant(USES_REGS1) /* variant terms t1 and t2 */
+static Int
+p_variant( USES_REGS1 ) /* variant terms t1 and t2 */
{
return is_variant(Deref(ARG1), Deref(ARG2), 2 PASS_REGS);
}
-static int subsumes_complex(register CELL *pt0, register CELL *pt0_end,
- register CELL *pt1 USES_REGS) {
+
+static int subsumes_complex(register CELL *pt0, register CELL *pt0_end, register
+ CELL *pt1 USES_REGS)
+{
register CELL **to_visit = (CELL **)ASP;
tr_fr_ptr OLDTR = TR, new_tr;
UInt write_mode = TRUE;
+
HBREG = HR;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0, d1;
Int our_write_mode = write_mode;
- ++pt0;
- ++pt1;
+ ++ pt0;
+ ++ pt1;
/* this is a version of Derefa that checks whether we are trying to
do something evil */
{
@@ -4108,12 +4240,14 @@ loop:
restart_d0:
if (npt0 >= HBREG) {
- our_write_mode = FALSE;
+ our_write_mode = FALSE;
}
d0 = *npt0;
- if (IsVarTerm(d0) && d0 != (CELL)npt0) {
- npt0 = (CELL *)d0;
- goto restart_d0;
+ if (IsVarTerm(d0) &&
+ d0 != (CELL)npt0
+ ) {
+ npt0 = (CELL *)d0;
+ goto restart_d0;
}
}
{
@@ -4121,117 +4255,116 @@ loop:
restart_d1:
d1 = *npt1;
- if (IsVarTerm(d1) && d1 != (CELL)npt1) {
- /* never dereference through a variable from the left-side */
- if (npt1 >= HBREG) {
- goto fail;
- } else {
- npt1 = (CELL *)d1;
- goto restart_d1;
- }
+ if (IsVarTerm(d1)
+ && d1 != (CELL)npt1
+ ) {
+ /* never dereference through a variable from the left-side */
+ if (npt1 >= HBREG) {
+ goto fail;
+ } else {
+ npt1 = (CELL *)d1;
+ goto restart_d1;
+ }
}
}
if (IsVarTerm(d0)) {
if (our_write_mode) {
- /* generate a new binding */
- CELL *pt0 = VarOfTerm(d0);
- Term new = MkVarTerm();
+ /* generate a new binding */
+ CELL *pt0 = VarOfTerm(d0);
+ Term new = MkVarTerm();
- Bind_Global(pt0, new);
- if (d0 != d1) { /* avoid loops */
- Bind_Global(VarOfTerm(new), d1);
- if (Yap_rational_tree_loop(VarOfTerm(new) - 1, VarOfTerm(new),
- (CELL **)AuxSp, (CELL **)AuxBase))
- goto fail;
- }
+ Bind_Global(pt0, new);
+ if (d0 != d1) { /* avoid loops */
+ Bind_Global(VarOfTerm(new), d1);
+ if (Yap_rational_tree_loop(VarOfTerm(new)-1,VarOfTerm(new),(CELL **)AuxSp,(CELL **)AuxBase))
+ goto fail;
+ }
} else {
- if (d0 == d1)
- continue;
- goto fail;
+ if (d0 == d1) continue;
+ goto fail;
}
continue;
} else if (IsVarTerm(d1)) {
goto fail;
} else {
- if (d0 == d1)
- continue;
+ if (d0 == d1) continue;
else if (IsAtomOrIntTerm(d0)) {
- goto fail;
+ goto fail;
} else if (IsPairTerm(d0)) {
- if (!IsPairTerm(d1)) {
- goto fail;
- }
+ if (!IsPairTerm(d1)) {
+ goto fail;
+ }
#ifdef RATIONAL_TREES
- /* now link the two structures so that no one else will */
- /* come here */
- to_visit -= 5;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = (CELL *)*pt0;
- to_visit[4] = (CELL *)write_mode;
- *pt0 = d1;
+ /* now link the two structures so that no one else will */
+ /* come here */
+ to_visit -= 5;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = (CELL *)*pt0;
+ to_visit[4] = (CELL *)write_mode;
+ *pt0 = d1;
#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit -= 4;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = (CELL *)write_mode;
- }
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit -= 4;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = (CELL *)write_mode;
+ }
#endif
- write_mode = our_write_mode;
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- pt1 = RepPair(d1) - 1;
- continue;
+ write_mode = our_write_mode;
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ pt1 = RepPair(d1) - 1;
+ continue;
} else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2, *ap3;
- if (!IsApplTerm(d1)) {
- goto fail;
- } else {
- /* store the terms to visit */
- Functor f2;
- ap2 = RepAppl(d0);
- ap3 = RepAppl(d1);
- f = (Functor)(*ap2);
- f2 = (Functor)(*ap3);
- if (f != f2)
- goto fail;
- if (IsExtensionFunctor(f)) {
- if (!unify_extension(f, d0, ap2, d1))
- goto fail;
- continue;
- }
+ register Functor f;
+ register CELL *ap2, *ap3;
+ if (!IsApplTerm(d1)) {
+ goto fail;
+ } else {
+ /* store the terms to visit */
+ Functor f2;
+ ap2 = RepAppl(d0);
+ ap3 = RepAppl(d1);
+ f = (Functor)(*ap2);
+ f2 = (Functor)(*ap3);
+ if (f != f2)
+ goto fail;
+ if (IsExtensionFunctor(f)) {
+ if (!unify_extension(f, d0, ap2, d1))
+ goto fail;
+ continue;
+ }
#ifdef RATIONAL_TREES
- /* now link the two structures so that no one else will */
- /* come here */
- to_visit -= 5;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = (CELL *)*pt0;
- to_visit[4] = (CELL *)write_mode;
- *pt0 = d1;
+ /* now link the two structures so that no one else will */
+ /* come here */
+ to_visit -= 5;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = (CELL *)*pt0;
+ to_visit[4] = (CELL *)write_mode;
+ *pt0 = d1;
#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit -= 4;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = (CELL *)write_mode;
- }
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit -= 4;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = (CELL *)write_mode;
+ }
#endif
- write_mode = our_write_mode;
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
- pt1 = ap3;
- continue;
- }
+ write_mode = our_write_mode;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ pt1 = ap3;
+ continue;
+ }
}
}
}
@@ -4242,7 +4375,7 @@ loop:
pt0_end = to_visit[1];
pt1 = to_visit[2];
*pt0 = (CELL)to_visit[3];
- write_mode = (Int)to_visit[4];
+ write_mode = (Int)to_visit[ 4];
to_visit += 5;
#else
pt0 = to_visit[0];
@@ -4259,7 +4392,7 @@ loop:
new_tr = TR;
while (TR != OLDTR) {
/* cell we bound */
- CELL *pt1 = (CELL *)TrailTerm(--TR);
+ CELL *pt1 = (CELL *) TrailTerm(--TR);
/* cell we created */
CELL *npt1 = (CELL *)*pt1;
/* shorten the chain */
@@ -4273,7 +4406,7 @@ loop:
HBREG = B->cp_h;
return TRUE;
-fail:
+ fail:
HR = HBREG;
#ifdef RATIONAL_TREES
while (to_visit < (CELL **)ASP) {
@@ -4286,14 +4419,15 @@ fail:
#endif
/* untrail all bindings made by variant */
while (TR != (tr_fr_ptr)OLDTR) {
- CELL *pt1 = (CELL *)TrailTerm(--TR);
+ CELL *pt1 = (CELL *) TrailTerm(--TR);
RESET_VARIABLE(pt1);
}
HBREG = B->cp_h;
return FALSE;
}
-static Int p_subsumes(USES_REGS1) /* subsumes terms t1 and t2 */
+static Int
+p_subsumes( USES_REGS1 ) /* subsumes terms t1 and t2 */
{
Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2);
@@ -4302,51 +4436,53 @@ static Int p_subsumes(USES_REGS1) /* subsumes terms t1 and t2 */
return (TRUE);
if (IsVarTerm(t1)) {
YapBind(VarOfTerm(t1), t2);
- if (Yap_rational_tree_loop(VarOfTerm(t1) - 1, VarOfTerm(t1), (CELL **)AuxSp,
- (CELL **)AuxBase))
+ if (Yap_rational_tree_loop(VarOfTerm(t1)-1,VarOfTerm(t1),(CELL **)AuxSp,(CELL **)AuxBase))
return FALSE;
return TRUE;
} else if (IsVarTerm(t2))
- return (FALSE);
+ return(FALSE);
if (IsAtomOrIntTerm(t1)) {
- return (t1 == t2);
+ return(t1 == t2);
}
if (IsPairTerm(t1)) {
if (IsPairTerm(t2)) {
- return (subsumes_complex(RepPair(t1) - 1, RepPair(t1) + 1,
- RepPair(t2) - 1 PASS_REGS));
- } else
- return (FALSE);
+ return(subsumes_complex(RepPair(t1)-1,
+ RepPair(t1)+1,
+ RepPair(t2)-1 PASS_REGS));
+ }
+ else return (FALSE);
} else {
Functor f1;
- if (!IsApplTerm(t2))
- return (FALSE);
+ if (!IsApplTerm(t2)) return(FALSE);
f1 = FunctorOfTerm(t1);
if (f1 != FunctorOfTerm(t2))
- return (FALSE);
+ return(FALSE);
if (IsExtensionFunctor(f1)) {
- return (unify_extension(f1, t1, RepAppl(t1), t2));
+ return(unify_extension(f1, t1, RepAppl(t1), t2));
}
- return (subsumes_complex(RepAppl(t1), RepAppl(t1) + ArityOfFunctor(f1),
- RepAppl(t2) PASS_REGS));
+ return(subsumes_complex(RepAppl(t1),
+ RepAppl(t1)+ArityOfFunctor(f1),
+ RepAppl(t2) PASS_REGS));
}
}
-static int term_subsumer_complex(register CELL *pt0, register CELL *pt0_end,
- register CELL *pt1, CELL *npt USES_REGS) {
+
+static int term_subsumer_complex(register CELL *pt0, register CELL *pt0_end, register
+ CELL *pt1, CELL *npt USES_REGS)
+{
register CELL **to_visit = (CELL **)ASP;
tr_fr_ptr OLDTR = TR;
int out;
CELL *bindings = NULL, *tbindings = NULL;
HB = HR;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0, d1;
- ++pt0;
- ++pt1;
+ ++ pt0;
+ ++ pt1;
d0 = Derefa(pt0);
d1 = Derefa(pt1);
if (d0 == d1) {
@@ -4357,38 +4493,38 @@ loop:
match = VarOfTerm(d0);
if (match >= HB) {
- while (match >= HB) {
- /* chained to a sequence */
- if (Yap_eq(d1, match[1])) {
- *npt++ = match[2];
- break;
- }
- omatch = match;
- match = (CELL *)match[3];
- }
- /* found a match */
- if (match >= HB)
- continue;
- /* could not find a match, add to end of chain */
- RESET_VARIABLE(HR); /* key */
- HR[1] = d1; /* comparison value */
- HR[2] = (CELL)npt; /* new value */
- HR[3] = (CELL)match; /* end of chain points back to first cell */
- omatch[3] = (CELL)HR;
- HR += 4;
- RESET_VARIABLE(npt);
- npt++;
- continue;
+ while (match >= HB) {
+ /* chained to a sequence */
+ if (Yap_eq(d1, match[1]) ) {
+ *npt++ = match[2];
+ break;
+ }
+ omatch = match;
+ match = (CELL *)match[3];
+ }
+ /* found a match */
+ if (match >= HB)
+ continue;
+ /* could not find a match, add to end of chain */
+ RESET_VARIABLE(HR); /* key */
+ HR[1] = d1; /* comparison value */
+ HR[2] = (CELL)npt; /* new value */
+ HR[3] = (CELL)match; /* end of chain points back to first cell */
+ omatch[3] = (CELL)HR;
+ HR+=4;
+ RESET_VARIABLE(npt);
+ npt++;
+ continue;
}
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
- goto trail_overflow;
+ goto trail_overflow;
}
RESET_VARIABLE(HR);
HR[1] = d1;
HR[2] = (CELL)npt;
HR[3] = d0;
YapBind(VarOfTerm(d0), (CELL)HR);
- HR += 4;
+ HR+=4;
RESET_VARIABLE(npt);
npt++;
continue;
@@ -4396,26 +4532,26 @@ loop:
CELL *match = bindings;
while (match) {
- if (match[0] == d0 && match[1] == d1) {
- *npt++ = match[2];
- break;
- }
- match = (CELL *)match[3];
+ if (match[0] == d0 && match[1] == d1) {
+ *npt++ = match[2];
+ break;
+ }
+ match = (CELL *)match[3];
}
if (match) {
- continue;
+ continue;
}
if (bindings) {
- *tbindings = (CELL)HR;
+ *tbindings = (CELL)HR;
} else {
- bindings = HR;
+ bindings = HR;
}
HR[0] = d0;
HR[1] = d1;
- HR[2] = AbsPair(HR + 4);
+ HR[2] = AbsPair(HR+4);
HR[3] = (CELL)NULL;
- tbindings = HR + 3;
- HR += 4;
+ tbindings = HR+3;
+ HR+=4;
*npt++ = AbsPair(HR);
#ifdef RATIONAL_TREES
/* now link the two structures so that no one else will */
@@ -4429,11 +4565,11 @@ loop:
#else
/* store the terms to visit */
if (pt0 < pt0_end) {
- to_visit -= 4;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = npt;
+ to_visit -= 4;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = npt;
}
#endif
pt0 = RepPair(d0) - 1;
@@ -4441,8 +4577,8 @@ loop:
pt1 = RepPair(d1) - 1;
npt = HR;
HR += 2;
- if (HR > (CELL *)to_visit - 1024)
- goto stack_overflow;
+ if (HR > (CELL *)to_visit -1024)
+ goto stack_overflow;
continue;
} else if (IsApplTerm(d0) && IsApplTerm(d1)) {
CELL *ap2 = RepAppl(d0);
@@ -4450,65 +4586,65 @@ loop:
Functor f = (Functor)(*ap2);
Functor f2 = (Functor)(*ap3);
if (f == f2) {
- CELL *match = bindings;
+ CELL *match = bindings;
- if (IsExtensionFunctor(f)) {
- if (unify_extension(f, d0, ap2, d1)) {
- *npt++ = d0;
- continue;
- }
- }
- while (match) {
- if (match[0] == d0 && match[1] == d1) {
- *npt++ = match[2];
- break;
- }
- match = (CELL *)match[3];
- }
- if (match) {
- continue;
- }
- if (bindings) {
- *tbindings = (CELL)HR;
- } else {
- bindings = HR;
- }
- HR[0] = d0;
- HR[1] = d1;
- HR[2] = AbsAppl(HR + 4);
- HR[3] = (CELL)NULL;
- tbindings = HR + 3;
- HR += 4;
- *npt++ = AbsAppl(HR);
+ if (IsExtensionFunctor(f)) {
+ if (unify_extension(f, d0, ap2, d1)) {
+ *npt++ = d0;
+ continue;
+ }
+ }
+ while (match) {
+ if (match[0] == d0 && match[1] == d1) {
+ *npt++ = match[2];
+ break;
+ }
+ match = (CELL *)match[3];
+ }
+ if (match) {
+ continue;
+ }
+ if (bindings) {
+ *tbindings = (CELL)HR;
+ } else {
+ bindings = HR;
+ }
+ HR[0] = d0;
+ HR[1] = d1;
+ HR[2] = AbsAppl(HR+4);
+ HR[3] = (CELL)NULL;
+ tbindings = HR+3;
+ HR+=4;
+ *npt++ = AbsAppl(HR);
#ifdef RATIONAL_TREES
- /* now link the two structures so that no one else will */
- /* come here */
- to_visit -= 5;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = tbindings;
- to_visit[4] = npt;
+ /* now link the two structures so that no one else will */
+ /* come here */
+ to_visit -= 5;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = tbindings;
+ to_visit[4] = npt;
#else
- /* store the terms to visit */
- if (pt0 < pt0_end) {
- to_visit -= 4;
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit[2] = pt1;
- to_visit[3] = npt;
- }
+ /* store the terms to visit */
+ if (pt0 < pt0_end) {
+ to_visit -= 4;
+ to_visit[0] = pt0;
+ to_visit[1] = pt0_end;
+ to_visit[2] = pt1;
+ to_visit[3] = npt;
+ }
#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
- pt1 = ap3;
- npt = HR;
- *npt++ = (CELL)f;
- HR += d0;
- if (HR > (CELL *)to_visit - 1024)
- goto stack_overflow;
- continue;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ pt1 = ap3;
+ npt = HR;
+ *npt++ = (CELL)f;
+ HR += d0;
+ if (HR > (CELL *)to_visit -1024)
+ goto stack_overflow;
+ continue;
}
}
RESET_VARIABLE(npt);
@@ -4521,7 +4657,7 @@ loop:
pt0_end = to_visit[1];
pt1 = to_visit[2];
tbindings = to_visit[3];
- npt = to_visit[4];
+ npt = to_visit[ 4];
if (!tbindings) {
bindings = NULL;
}
@@ -4537,25 +4673,27 @@ loop:
}
out = 1;
-complete:
+ complete:
/* get rid of intermediate variables */
while (TR != OLDTR) {
- CELL *pt1 = (CELL *)TrailTerm(--TR);
+ CELL *pt1 = (CELL *) TrailTerm(--TR);
RESET_VARIABLE(pt1);
}
HBREG = B->cp_h;
return out;
-stack_overflow:
+ stack_overflow:
out = -1;
goto complete;
-trail_overflow:
+ trail_overflow:
out = -2;
goto complete;
+
}
-static Int p_term_subsumer(USES_REGS1) /* term_subsumer terms t1 and t2 */
+static Int
+p_term_subsumer( USES_REGS1 ) /* term_subsumer terms t1 and t2 */
{
int out = 0;
@@ -4565,38 +4703,38 @@ static Int p_term_subsumer(USES_REGS1) /* term_subsumer terms t1 and t2 */
CELL *oldH = HR;
if (t1 == t2)
- return Yap_unify(ARG3, t1);
+ return Yap_unify(ARG3,t1);
if (IsPairTerm(t1) && IsPairTerm(t2)) {
Term tf = AbsAppl(HR);
HR += 2;
HB = HR;
- if ((out = term_subsumer_complex(RepPair(t1) - 1, RepPair(t1) + 1,
- RepPair(t2) - 1, HR - 2 PASS_REGS)) >
- 0) {
- HB = B->cp_h;
- return Yap_unify(ARG3, tf);
+ if ((out = term_subsumer_complex(RepPair(t1)-1,
+ RepPair(t1)+1,
+ RepPair(t2)-1, HR-2 PASS_REGS)) > 0) {
+ HB = B->cp_h;
+ return Yap_unify(ARG3,tf);
}
- } else if (IsApplTerm(t1) && IsApplTerm(t2)) {
+ } else if (IsApplTerm(t1) && IsApplTerm(t2)) {
Functor f1;
if ((f1 = FunctorOfTerm(t1)) == FunctorOfTerm(t2)) {
- if (IsExtensionFunctor(f1)) {
- if (unify_extension(f1, t1, RepAppl(t1), t2)) {
- return Yap_unify(ARG3, t1);
- }
- } else {
- Term tf = AbsAppl(HR);
- UInt ar = ArityOfFunctor(f1);
- HR[0] = (CELL)f1;
- HR += 1 + ar;
- HB = HR;
- if ((out = term_subsumer_complex(
- RepAppl(t1), RepAppl(t1) + ArityOfFunctor(f1), RepAppl(t2),
- HR - ar PASS_REGS)) > 0) {
- HB = B->cp_h;
- return Yap_unify(ARG3, tf);
- }
- }
+ if (IsExtensionFunctor(f1)) {
+ if (unify_extension(f1, t1, RepAppl(t1), t2)) {
+ return Yap_unify(ARG3,t1);
+ }
+ } else {
+ Term tf = AbsAppl(HR);
+ UInt ar = ArityOfFunctor(f1);
+ HR[0] = (CELL)f1;
+ HR += 1+ar;
+ HB = HR;
+ if ((out = term_subsumer_complex(RepAppl(t1),
+ RepAppl(t1)+ArityOfFunctor(f1),
+ RepAppl(t2), HR-ar PASS_REGS)) > 0) {
+ HB = B->cp_h;
+ return Yap_unify(ARG3,tf);
+ }
+ }
}
}
HB = B->cp_h;
@@ -4605,16 +4743,16 @@ static Int p_term_subsumer(USES_REGS1) /* term_subsumer terms t1 and t2 */
} else {
HR = oldH;
if (out == -1) {
- if (!Yap_gcl((ASP - HR) * sizeof(CELL), 0, ENV, gc_P(P, CP))) {
- Yap_Error(RESOURCE_ERROR_STACK, TermNil, "in term_subsumer");
- return FALSE;
- }
+ if (!Yap_gcl((ASP-HR)*sizeof(CELL), 0, ENV, gc_P(P,CP))) {
+ Yap_Error(RESOURCE_ERROR_STACK, TermNil, "in term_subsumer");
+ return FALSE;
+ }
} else {
- /* Trail overflow */
- if (!Yap_growtrail(0, FALSE)) {
- Yap_Error(RESOURCE_ERROR_TRAIL, TermNil, "in term_subsumer");
- return FALSE;
- }
+ /* Trail overflow */
+ if (!Yap_growtrail(0, FALSE)) {
+ Yap_Error(RESOURCE_ERROR_TRAIL, TermNil, "in term_subsumer");
+ return FALSE;
+ }
}
}
}
@@ -4622,8 +4760,10 @@ static Int p_term_subsumer(USES_REGS1) /* term_subsumer terms t1 and t2 */
}
#ifdef DEBUG
-static Int p_force_trail_expansion(USES_REGS1) {
- Int i = IntOfTerm(Deref(ARG1)) * 1024, j = 0;
+static Int
+p_force_trail_expansion( USES_REGS1 )
+{
+ Int i = IntOfTerm(Deref(ARG1))*1024, j = 0;
tr_fr_ptr OTR = TR;
for (j = 0; j < i; j++) {
@@ -4632,55 +4772,75 @@ static Int p_force_trail_expansion(USES_REGS1) {
}
TR = OTR;
- return (TRUE);
+ return(TRUE);
}
-static Int camacho_dum(USES_REGS1) {
+static Int
+camacho_dum( USES_REGS1 )
+{
Term t1, t2;
- int max = 3;
+ int max = 3;
/* build output list */
t1 = TermNil;
t2 = MkPairTerm(MkIntegerTerm(max), t1);
- return (Yap_unify(t2, ARG1));
+ return(Yap_unify(t2, ARG1));
}
+
+
#endif /* DEBUG */
-bool Yap_IsListTerm(Term t) {
+bool
+Yap_IsListTerm(Term t)
+{
Term *tailp;
Yap_SkipList(&t, &tailp);
return *tailp == TermNil;
}
-static Int p_is_list(USES_REGS1) { return Yap_IsListTerm(Deref(ARG1)); }
+static Int
+p_is_list( USES_REGS1 )
+{
+ return Yap_IsListTerm(Deref(ARG1));
+}
-bool Yap_IsListOrPartialListTerm(Term t) {
+bool
+Yap_IsListOrPartialListTerm(Term t)
+{
Term *tailp, tail;
Yap_SkipList(&t, &tailp);
tail = *tailp;
return tail == TermNil || IsVarTerm(tail);
}
-static Int p_is_list_or_partial_list(USES_REGS1) {
+static Int
+p_is_list_or_partial_list( USES_REGS1 )
+{
return Yap_IsListOrPartialListTerm(Deref(ARG1));
}
-static Term numbervar(Int id USES_REGS) {
+static Term
+numbervar(Int id USES_REGS)
+{
Term ts[1];
ts[0] = MkIntegerTerm(id);
return Yap_MkApplTerm(FunctorDollarVar, 1, ts);
}
-static Term numbervar_singleton(USES_REGS1) {
+static Term
+numbervar_singleton(USES_REGS1)
+{
Term ts[1];
ts[0] = MkIntegerTerm(-1);
return Yap_MkApplTerm(FunctorDollarVar, 1, ts);
}
-static void renumbervar(Term t, Int id USES_REGS) {
+static void
+renumbervar(Term t, Int id USES_REGS)
+{
Term *ts = RepAppl(t);
ts[1] = MkIntegerTerm(id);
}
@@ -4689,93 +4849,83 @@ extern int vsc;
int vsc;
-static Int numbervars_in_complex_term(register CELL *pt0,
- register CELL *pt0_end, Int numbv,
- int singles USES_REGS) {
+static Int numbervars_in_complex_term(register CELL *pt0, register CELL *pt0_end, Int numbv, int singles USES_REGS)
+{
int lvl = push_text_stack();
- att_rec_t *to_visit0, *to_visit = Malloc(1024 * sizeof(att_rec_t));
+ att_rec_t *to_visit0, *to_visit = Malloc(1024*sizeof(att_rec_t));
att_rec_t *to_visit_max;
register tr_fr_ptr TR0 = TR;
CELL *InitialH = HR;
to_visit0 = to_visit;
- to_visit_max = to_visit0 + 1024;
+ to_visit_max = to_visit0+1024;
loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, vars_in_term_unk);
- vars_in_term_nvar : {
- if (IsPairTerm(d0)) {
+ vars_in_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ if (to_visit + 32 >= to_visit_max) {
+ goto aux_overflow;
+ }
+ to_visit->beg = pt0;
+ to_visit->end = pt0_end;
+ to_visit->oval = *pt0;
+ to_visit ++;
+ *pt0 = TermNil;
+ pt0 = RepPair(d0) - 1;
+ pt0_end = RepPair(d0) + 1;
+ } else if (IsApplTerm(d0)) {
+ Functor f;
+ CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ f = (Functor)(*ap2);
+ if (IsExtensionFunctor(f)) {
+ continue;
+ }
+ if (singles && ap2 >= InitialH && ap2 < HR) {
+ renumbervar(d0, numbv++ PASS_REGS);
+ continue;
+ }
+ /* store the terms to visit */
if (to_visit + 32 >= to_visit_max) {
- goto aux_overflow;
+ goto aux_overflow;
}
-#ifdef RATIONAL_TREES
- to_visit->beg = pt0;
- to_visit->end = pt0_end;
- to_visit->oval = *pt0;
- to_visit++;
- *pt0 = TermNil;
-#else
- if (pt0 < pt0_end) {
- to_visit[0] = pt0;
- to_visit[1] = pt0_end;
- to_visit += 2;
+ to_visit->beg = pt0;
+ to_visit->end = pt0_end;
+ to_visit->oval = *pt0;
+ to_visit ++;
+ *pt0 = TermNil;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
}
-#endif
- pt0 = RepPair(d0) - 1;
- pt0_end = RepPair(d0) + 1;
- } else if (IsApplTerm(d0)) {
- Functor f;
- CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- continue;
- }
- if (singles && ap2 >= InitialH && ap2 < HR) {
- renumbervar(d0, numbv++ PASS_REGS);
- continue;
- }
- /* store the terms to visit */
- if (to_visit + 32 >= to_visit_max) {
- goto aux_overflow;
- }
-#ifdef RATIONAL_TREES
-#else
- to_visit->beg = pt0;
- to_visit->end = pt0_end;
- to_visit->oval = *pt0;
- to_visit++;
- *pt0 = TermNil;
-#endif
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
+ continue;
}
- continue;
- }
+
derefa_body(d0, ptd0, vars_in_term_unk, vars_in_term_nvar);
/* do or pt2 are unbound */
if (singles)
- *ptd0 = numbervar_singleton(PASS_REGS1);
+ *ptd0 = numbervar_singleton( PASS_REGS1 );
else
*ptd0 = numbervar(numbv++ PASS_REGS);
/* leave an empty slot to fill in later */
- if (HR + 1024 > ASP) {
+ if (HR+1024 > ASP) {
goto global_overflow;
}
/* next make sure noone will see this as a variable again */
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
/* Trail overflow */
- if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), TRUE)) {
- goto trail_overflow;
+ if (!Yap_growtrail((TR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
+ goto trail_overflow;
}
}
@@ -4786,16 +4936,10 @@ loop:
}
/* Do we still have compound terms to visit */
if (to_visit > to_visit0) {
-#ifdef RATIONAL_TREES
- to_visit--;
+ to_visit --;
pt0 = to_visit->beg;
pt0_end = to_visit->end;
*pt0 = to_visit->oval;
-#else
- to_visit -= 2;
- pt0 = to_visit[0];
- pt0_end = to_visit[1];
-#endif
goto loop;
}
@@ -4803,110 +4947,111 @@ loop:
pop_text_stack(lvl);
return numbv;
-trail_overflow:
-#ifdef RATIONAL_TREES
+ trail_overflow:
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->beg;
pt0_end = to_visit->end;
*pt0 = to_visit->oval;
}
-#endif
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL;
- LOCAL_Error_Size = (TR - TR0) * sizeof(tr_fr_ptr *);
+ LOCAL_Error_Size = (TR-TR0)*sizeof(tr_fr_ptr *);
clean_tr(TR0 PASS_REGS);
HR = InitialH;
pop_text_stack(lvl);
- return numbv - 1;
+ return numbv-1;
-aux_overflow : {
- size_t d1 = to_visit - to_visit0;
- size_t d2 = to_visit_max - to_visit0;
- to_visit0 = Realloc(to_visit0, d2 * sizeof(CELL *) + 64 * 1024);
- to_visit = to_visit0 + d1;
- to_visit_max = to_visit0 + (d2 + (64 * 1024)) / sizeof(CELL **);
+ aux_overflow:
+ {
+ size_t d1 = to_visit-to_visit0;
+ size_t d2 = to_visit_max-to_visit0;
+ to_visit0 = Realloc(to_visit0,d2*sizeof(CELL*)+64*1024);
+ to_visit = to_visit0+d1;
+ to_visit_max = to_visit0+(d2+(64*1024))/sizeof(CELL **);
}
- pt0--;
- goto loop;
+pt0--;
+goto loop;
-global_overflow:
-#ifdef RATIONAL_TREES
+ global_overflow:
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->beg;
pt0_end = to_visit->end;
*pt0 = to_visit->oval;
}
-#endif
clean_tr(TR0 PASS_REGS);
HR = InitialH;
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
- LOCAL_Error_Size = (ASP - HR) * sizeof(CELL);
+ LOCAL_Error_Size = (ASP-HR)*sizeof(CELL);
pop_text_stack(lvl);
- return numbv - 1;
+ return numbv-1;
+
}
-Int Yap_NumberVars(Term inp, Int numbv,
- bool handle_singles) /*
- * numbervariables in term t */
+Int
+Yap_NumberVars( Term inp, Int numbv, bool handle_singles ) /*
+ * numbervariables in term t */
{
CACHE_REGS
Int out;
Term t;
-restart:
+ restart:
t = Deref(inp);
if (IsVarTerm(t)) {
CELL *ptd0 = VarOfTerm(t);
TrailTerm(TR++) = (CELL)ptd0;
if (handle_singles) {
- *ptd0 = numbervar_singleton(PASS_REGS1);
+ *ptd0 = numbervar_singleton( PASS_REGS1 );
return numbv;
} else {
*ptd0 = numbervar(numbv PASS_REGS);
- return numbv + 1;
+ return numbv+1;
}
- } else if (IsPrimitiveTerm(t)) {
+ } else if (IsPrimitiveTerm(t)) {
return numbv;
} else if (IsPairTerm(t)) {
- out = numbervars_in_complex_term(RepPair(t) - 1, RepPair(t) + 1, numbv,
- handle_singles PASS_REGS);
+ out = numbervars_in_complex_term(RepPair(t)-1,
+ RepPair(t)+1, numbv, handle_singles PASS_REGS);
} else {
Functor f = FunctorOfTerm(t);
- out = numbervars_in_complex_term(RepAppl(t), RepAppl(t) + ArityOfFunctor(f),
- numbv, handle_singles PASS_REGS);
+ out = numbervars_in_complex_term(RepAppl(t),
+ RepAppl(t)+
+ ArityOfFunctor(f), numbv, handle_singles PASS_REGS);
}
if (out < numbv) {
- if (!expand_vts(3 PASS_REGS))
+ if (!expand_vts( 3 PASS_REGS ))
return FALSE;
goto restart;
}
return out;
}
-static Int p_numbervars(USES_REGS1) {
+static Int
+p_numbervars( USES_REGS1 )
+{
Term t2 = Deref(ARG2);
Int out;
if (IsVarTerm(t2)) {
- Yap_Error(INSTANTIATION_ERROR, t2, "numbervars/3");
+ Yap_Error(INSTANTIATION_ERROR,t2,"numbervars/3");
return FALSE;
}
if (!IsIntegerTerm(t2)) {
- Yap_Error(TYPE_ERROR_INTEGER, t2, "term_hash/4");
- return (FALSE);
+ Yap_Error(TYPE_ERROR_INTEGER,t2,"term_hash/4");
+ return(FALSE);
}
if ((out = Yap_NumberVars(ARG1, IntegerOfTerm(t2), FALSE)) < 0)
return FALSE;
return Yap_unify(ARG3, MkIntegerTerm(out));
}
-static int unnumber_complex_term(CELL *pt0, CELL *pt0_end, CELL *ptf,
- CELL *HLow, int share USES_REGS) {
+static int
+unnumber_complex_term(CELL *pt0, CELL *pt0_end, CELL *ptf, CELL *HLow, int share USES_REGS)
+{
- struct cp_frame *to_visit0,
- *to_visit = (struct cp_frame *)Yap_PreAllocCodeSpace();
+ struct cp_frame *to_visit0, *to_visit = (struct cp_frame *)Yap_PreAllocCodeSpace();
CELL *HB0 = HB;
tr_fr_ptr TR0 = TR;
int ground = share;
@@ -4914,171 +5059,158 @@ static int unnumber_complex_term(CELL *pt0, CELL *pt0_end, CELL *ptf,
HB = HLow;
to_visit0 = to_visit;
-loop:
+ loop:
while (pt0 < pt0_end) {
register CELL d0;
register CELL *ptd0;
- ++pt0;
+ ++ pt0;
ptd0 = pt0;
d0 = *ptd0;
deref_head(d0, unnumber_term_unk);
- unnumber_term_nvar : {
- if (IsPairTerm(d0)) {
- CELL *ap2 = RepPair(d0);
- if (ap2 >= HB && ap2 < HR) {
- /* If this is newer than the current term, just reuse */
- *ptf++ = d0;
- continue;
- }
- *ptf = AbsPair(HR);
- ptf++;
-#ifdef RATIONAL_TREES
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->oldv = *pt0;
- to_visit->ground = ground;
- /* fool the system into thinking we had a variable there */
- *pt0 = AbsPair(HR);
- to_visit++;
-#else
- if (pt0 < pt0_end) {
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->ground = ground;
- to_visit++;
- }
-#endif
- ground = share;
- pt0 = ap2 - 1;
- pt0_end = ap2 + 1;
- ptf = HR;
- HR += 2;
- if (HR > ASP - 2048) {
- goto overflow;
- }
- } else if (IsApplTerm(d0)) {
- register Functor f;
- register CELL *ap2;
- /* store the terms to visit */
- ap2 = RepAppl(d0);
- if (ap2 >= HB && ap2 <= HR) {
- /* If this is newer than the current term, just reuse */
- *ptf++ = d0;
- continue;
- }
- f = (Functor)(*ap2);
+ unnumber_term_nvar:
+ {
+ if (IsPairTerm(d0)) {
+ CELL *ap2 = RepPair(d0);
+ if (ap2 >= HB && ap2 < HR) {
+ /* If this is newer than the current term, just reuse */
+ *ptf++ = d0;
+ continue;
+ }
+ *ptf = AbsPair(HR);
+ ptf++;
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->oldv = *pt0;
+ to_visit->ground = ground;
+ /* fool the system into thinking we had a variable there */
+ *pt0 = AbsPair(HR);
+ to_visit ++;
+ ground = share;
+ pt0 = ap2 - 1;
+ pt0_end = ap2 + 1;
+ ptf = HR;
+ HR += 2;
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
+ } else if (IsApplTerm(d0)) {
+ register Functor f;
+ register CELL *ap2;
+ /* store the terms to visit */
+ ap2 = RepAppl(d0);
+ if (ap2 >= HB && ap2 <= HR) {
+ /* If this is newer than the current term, just reuse */
+ *ptf++ = d0;
+ continue;
+ }
+ f = (Functor)(*ap2);
- if (IsExtensionFunctor(f)) {
- *ptf++ = d0; /* you can just unnumber other extensions. */
- continue;
- }
- if (f == FunctorDollarVar) {
- Int id = IntegerOfTerm(ap2[1]);
- ground = FALSE;
- if (id < -1) {
- Yap_Error(RESOURCE_ERROR_STACK, TermNil,
- "unnumber vars cannot cope with VAR(-%d)", id);
- return 0L;
- }
- if (id <= max) {
- if (ASP - (max + 1) <= HR) {
- goto overflow;
- }
- /* we found this before? */
- if (ASP[-id - 1])
- *ptf++ = ASP[-id - 1];
- else {
- RESET_VARIABLE(ptf);
- ASP[-id - 1] = (CELL)ptf;
- ptf++;
- }
- continue;
- }
- /* alloc more space */
- if (ASP - (id + 1) <= HR) {
- goto overflow;
- }
- while (id > max) {
- ASP[-(id + 1)] = 0L;
- max++;
- }
- /* new variable */
- RESET_VARIABLE(ptf);
- ASP[-(id + 1)] = (CELL)ptf;
- ptf++;
- continue;
- }
- *ptf = AbsAppl(HR);
- ptf++;
- /* store the terms to visit */
+ if (IsExtensionFunctor(f)) {
+ *ptf++ = d0; /* you can just unnumber other extensions. */
+ continue;
+ }
+ if (f == FunctorDollarVar) {
+ Int id = IntegerOfTerm(ap2[1]);
+ ground = FALSE;
+ if (id < -1) {
+ Yap_Error(RESOURCE_ERROR_STACK, TermNil, "unnumber vars cannot cope with VAR(-%d)", id);
+ return 0L;
+ }
+ if (id <= max) {
+ if (ASP-(max+1) <= HR) {
+ goto overflow;
+ }
+ /* we found this before? */
+ if (ASP[-id-1])
+ *ptf++ = ASP[-id-1];
+ else {
+ RESET_VARIABLE(ptf);
+ ASP[-id-1] = (CELL)ptf;
+ ptf++;
+ }
+ continue;
+ }
+ /* alloc more space */
+ if (ASP-(id+1) <= HR) {
+ goto overflow;
+ }
+ while (id > max) {
+ ASP[-(id+1)] = 0L;
+ max++;
+ }
+ /* new variable */
+ RESET_VARIABLE(ptf);
+ ASP[-(id+1)] = (CELL)ptf;
+ ptf++;
+ continue;
+ }
+ *ptf = AbsAppl(HR);
+ ptf++;
+ /* store the terms to visit */
#ifdef RATIONAL_TREES
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->oldv = *pt0;
- to_visit->ground = ground;
- /* fool the system into thinking we had a variable there */
- *pt0 = AbsAppl(HR);
- to_visit++;
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->oldv = *pt0;
+ to_visit->ground = ground;
+ /* fool the system into thinking we had a variable there */
+ *pt0 = AbsAppl(HR);
+ to_visit ++;
#else
- if (pt0 < pt0_end) {
- if (to_visit + 1 >= (struct cp_frame *)AuxSp) {
- goto heap_overflow;
- }
- to_visit->start_cp = pt0;
- to_visit->end_cp = pt0_end;
- to_visit->to = ptf;
- to_visit->ground = ground;
- to_visit++;
- }
+ if (pt0 < pt0_end) {
+ if (to_visit+1 >= (struct cp_frame *)AuxSp) {
+ goto heap_overflow;
+ }
+ to_visit->start_cp = pt0;
+ to_visit->end_cp = pt0_end;
+ to_visit->to = ptf;
+ to_visit->ground = ground;
+ to_visit ++;
+ }
#endif
- ground = (f != FunctorMutable) && share;
- d0 = ArityOfFunctor(f);
- pt0 = ap2;
- pt0_end = ap2 + d0;
- /* store the functor for the new term */
- HR[0] = (CELL)f;
- ptf = HR + 1;
- HR += 1 + d0;
- if (HR > ASP - 2048) {
- goto overflow;
+ ground = (f != FunctorMutable) && share;
+ d0 = ArityOfFunctor(f);
+ pt0 = ap2;
+ pt0_end = ap2 + d0;
+ /* store the functor for the new term */
+ HR[0] = (CELL)f;
+ ptf = HR+1;
+ HR += 1+d0;
+ if (HR > ASP - 2048) {
+ goto overflow;
+ }
+ } else {
+ /* just unnumber atoms or integers */
+ *ptf++ = d0;
}
- } else {
- /* just unnumber atoms or integers */
- *ptf++ = d0;
+ continue;
}
- continue;
- }
derefa_body(d0, ptd0, unnumber_term_unk, unnumber_term_nvar);
/* this should never happen ? */
ground = FALSE;
- *ptf++ = (CELL)ptd0;
+ *ptf++ = (CELL) ptd0;
}
/* Do we still have compound terms to visit */
if (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
if (ground) {
CELL old = to_visit->oldv;
- CELL *newp = to_visit->to - 1;
+ CELL *newp = to_visit->to-1;
CELL new = *newp;
*newp = old;
if (IsApplTerm(new))
- HR = RepAppl(new);
+ HR = RepAppl(new);
else
- HR = RepPair(new);
+ HR = RepPair(new);
}
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
@@ -5095,7 +5227,7 @@ loop:
HB = HB0;
return ground;
-overflow:
+ overflow:
/* oops, we're in trouble */
HR = HLow;
/* we've done it */
@@ -5103,7 +5235,7 @@ overflow:
HB = HB0;
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -5114,7 +5246,7 @@ overflow:
/* follow chain of multi-assigned variables */
return -1;
-heap_overflow:
+ heap_overflow:
/* oops, we're in trouble */
HR = HLow;
/* we've done it */
@@ -5122,7 +5254,7 @@ heap_overflow:
HB = HB0;
#ifdef RATIONAL_TREES
while (to_visit > to_visit0) {
- to_visit--;
+ to_visit --;
pt0 = to_visit->start_cp;
pt0_end = to_visit->end_cp;
ptf = to_visit->to;
@@ -5130,11 +5262,13 @@ heap_overflow:
}
#endif
reset_trail(TR0);
- LOCAL_Error_Size = (ADDR)AuxSp - (ADDR)to_visit0;
+ LOCAL_Error_Size = (ADDR)AuxSp-(ADDR)to_visit0;
return -3;
}
-static Term UnnumberTerm(Term inp, UInt arity, int share USES_REGS) {
+
+static Term
+UnnumberTerm(Term inp, UInt arity, int share USES_REGS) {
Term t = Deref(inp);
tr_fr_ptr TR0 = TR;
@@ -5154,15 +5288,14 @@ static Term UnnumberTerm(Term inp, UInt arity, int share USES_REGS) {
HR += 2;
{
int res;
- if ((res = unnumber_complex_term(ap - 1, ap + 1, Hi, Hi,
- share PASS_REGS)) < 0) {
- HR = Hi;
- if ((t = handle_cp_overflow(res, TR0, arity, t)) == 0L)
- return FALSE;
- goto restart_list;
+ if ((res = unnumber_complex_term(ap-1, ap+1, Hi, Hi, share PASS_REGS)) < 0) {
+ HR = Hi;
+ if ((t = handle_cp_overflow(res, TR0, arity, t))== 0L)
+ return FALSE;
+ goto restart_list;
} else if (res) {
- HR = Hi;
- return t;
+ HR = Hi;
+ return t;
}
}
return tf;
@@ -5178,75 +5311,82 @@ static Term UnnumberTerm(Term inp, UInt arity, int share USES_REGS) {
ap = RepAppl(t);
tf = AbsAppl(HR);
HR[0] = (CELL)f;
- HR += 1 + ArityOfFunctor(f);
- if (HR > ASP - 128) {
+ HR += 1+ArityOfFunctor(f);
+ if (HR > ASP-128) {
HR = HB0;
- if ((t = handle_cp_overflow(-1, TR0, arity, t)) == 0L)
- return FALSE;
+ if ((t = handle_cp_overflow(-1, TR0, arity, t))== 0L)
+ return FALSE;
goto restart_appl;
} else {
int res;
- if ((res = unnumber_complex_term(ap, ap + ArityOfFunctor(f), HB0 + 1, HB0,
- share PASS_REGS)) < 0) {
- HR = HB0;
- if ((t = handle_cp_overflow(res, TR0, arity, t)) == 0L)
- return FALSE;
- goto restart_appl;
+ if ((res = unnumber_complex_term(ap, ap+ArityOfFunctor(f), HB0+1, HB0, share PASS_REGS)) < 0) {
+ HR = HB0;
+ if ((t = handle_cp_overflow(res, TR0, arity, t))== 0L)
+ return FALSE;
+ goto restart_appl;
} else if (res && FunctorOfTerm(t) != FunctorMutable) {
- HR = HB0;
- return t;
+ HR = HB0;
+ return t;
}
}
return tf;
}
}
-Term Yap_UnNumberTerm(Term inp, int share) {
+Term
+Yap_UnNumberTerm(Term inp, int share) {
CACHE_REGS
return UnnumberTerm(inp, 0, share PASS_REGS);
}
-static Int p_unnumbervars(USES_REGS1) {
+static Int
+p_unnumbervars( USES_REGS1 ) {
/* this should be a standard Prolog term, so we allow sharing? */
return Yap_unify(UnnumberTerm(ARG1, 2, FALSE PASS_REGS), ARG2);
}
-Int Yap_SkipList(Term *l, Term **tailp) {
+Int
+Yap_SkipList(Term *l, Term **tailp)
+{
Int length = 0;
Term *s; /* slow */
- Term v; /* temporary */
+ Term v; /* temporary */
- do_derefa(v, l, derefa_unk, derefa_nonvar);
+ do_derefa(v,l,derefa_unk,derefa_nonvar);
s = l;
- if (IsPairTerm(*l)) {
- intptr_t power = 1, lam = 0;
- do {
- if (power == lam) {
- s = l;
- power *= 2;
- lam = 0;
+ if ( IsPairTerm(*l) )
+ { intptr_t power = 1, lam = 0;
+ do
+ { if ( power == lam )
+ { s = l;
+ power *= 2;
+ lam = 0;
}
lam++;
length++;
- l = RepPair(*l) + 1;
- do_derefa(v, l, derefa2_unk, derefa2_nonvar);
- } while (*l != *s && IsPairTerm(*l));
+ l = RepPair(*l)+1;
+ do_derefa(v,l,derefa2_unk,derefa2_nonvar);
+ } while ( *l != *s && IsPairTerm(*l) );
}
*tailp = l;
return length;
}
-static Int p_skip_list(USES_REGS1) {
- Term *tail;
- Int len = Yap_SkipList(XREGS + 2, &tail);
- return Yap_unify(MkIntegerTerm(len), ARG1) && Yap_unify(*tail, ARG3);
+static Int
+p_skip_list( USES_REGS1 ) {
+ Term *tail;
+ Int len = Yap_SkipList(XREGS+2, &tail);
+
+ return Yap_unify(MkIntegerTerm(len), ARG1) &&
+ Yap_unify(*tail, ARG3);
}
-static Int p_skip_list4(USES_REGS1) {
+static Int
+p_skip_list4( USES_REGS1 ) {
Term *tail;
Int len, len1 = -1;
Term t2 = Deref(ARG2), t;
@@ -5262,21 +5402,26 @@ static Int p_skip_list4(USES_REGS1) {
}
}
/* we need len here */
- len = Yap_SkipList(XREGS + 1, &tail);
+ len = Yap_SkipList(XREGS+1, &tail);
t = *tail;
/* don't set M0 if full list, just check M */
if (t == TermNil) {
if (len1 >= 0) { /* ARG2 was bound */
- return len1 == len && Yap_unify(t, ARG4);
+ return
+ len1 == len &&
+ Yap_unify(t, ARG4);
} else {
return Yap_unify_constant(ARG4, TermNil) &&
- Yap_unify_constant(ARG2, MkIntegerTerm(len));
+ Yap_unify_constant(ARG2, MkIntegerTerm(len));
}
}
- return Yap_unify(MkIntegerTerm(len), ARG3) && Yap_unify(t, ARG4);
+ return Yap_unify(MkIntegerTerm(len), ARG3) &&
+ Yap_unify(t, ARG4);
}
-static Int p_free_arguments(USES_REGS1) {
+static Int
+p_free_arguments( USES_REGS1 )
+{
Term t = Deref(ARG1);
if (IsVarTerm(t))
return FALSE;
@@ -5294,34 +5439,33 @@ static Int p_free_arguments(USES_REGS1) {
if (IsExtensionFunctor(f))
return TRUE;
ar = ArityOfFunctor(f);
- for (i = 1; i <= ar; i++) {
+ for (i = 1 ; i <= ar; i++) {
Term ta = ArgOfTerm(i, t);
Int j;
ret = IsVarTerm(ta);
- if (!ret)
- break;
+ if (!ret) break;
/* stupid quadractic algorithm, but needs no testing for overflows */
- for (j = 1; j < i; j++) {
- ret = ArgOfTerm(j, t) != ta;
- if (!ret)
- break;
+ for (j = 1 ; j < i; j++) {
+ ret = ArgOfTerm(j, t) != ta;
+ if (!ret) break;
}
- if (!ret)
- break;
+ if (!ret) break;
}
return ret;
}
}
-static Int p_freshen_variables(USES_REGS1) {
+static Int
+p_freshen_variables( USES_REGS1 )
+{
Term t = Deref(ARG1);
Functor f = FunctorOfTerm(t);
UInt arity = ArityOfFunctor(f), i;
Term tn = Yap_MkNewApplTerm(f, arity);
- CELL *src = RepAppl(t) + 1;
- CELL *targ = RepAppl(tn) + 1;
- for (i = 0; i < arity; i++) {
+ CELL *src = RepAppl(t)+1;
+ CELL *targ = RepAppl(tn)+1;
+ for (i=0; i< arity; i++) {
RESET_VARIABLE(targ);
*VarOfTerm(*src) = (CELL)targ;
targ++;
@@ -5330,141 +5474,142 @@ static Int p_freshen_variables(USES_REGS1) {
return TRUE;
}
-static Int p_reset_variables(USES_REGS1) {
+static Int
+p_reset_variables( USES_REGS1 )
+{
Term t = Deref(ARG1);
Functor f = FunctorOfTerm(t);
UInt arity = ArityOfFunctor(f), i;
- CELL *src = RepAppl(t) + 1;
+ CELL *src = RepAppl(t)+1;
- for (i = 0; i < arity; i++) {
+ for (i=0; i< arity; i++) {
RESET_VARIABLE(VarOfTerm(*src));
src++;
}
return TRUE;
}
-void Yap_InitUtilCPreds(void) {
+void Yap_InitUtilCPreds(void)
+{
CACHE_REGS
Term cm = CurrentModule;
Yap_InitCPred("copy_term", 2, p_copy_term, 0);
- /** @pred copy_term(? _TI_,- _TF_) is iso
+/** @pred copy_term(? _TI_,- _TF_) is iso
- Term _TF_ is a variant of the original term _TI_, such that for
- each variable _V_ in the term _TI_ there is a new variable _V'_
- in term _TF_. Notice that:
+Term _TF_ is a variant of the original term _TI_, such that for
+each variable _V_ in the term _TI_ there is a new variable _V'_
+in term _TF_. Notice that:
- + suspended goals and attributes for attributed variables in _TI_ are also
- duplicated;
- + ground terms are shared between the new and the old term.
++ suspended goals and attributes for attributed variables in _TI_ are also duplicated;
++ ground terms are shared between the new and the old term.
- If you do not want any sharing to occur please use
- duplicate_term/2.
+If you do not want any sharing to occur please use
+duplicate_term/2.
- */
+*/
Yap_InitCPred("duplicate_term", 2, p_duplicate_term, 0);
- /** @pred duplicate_term(? _TI_,- _TF_)
+/** @pred duplicate_term(? _TI_,- _TF_)
- Term _TF_ is a variant of the original term _TI_, such that
- for each variable _V_ in the term _TI_ there is a new variable
- _V'_ in term _TF_, and the two terms do not share any
- structure. All suspended goals and attributes for attributed variables
- in _TI_ are also duplicated.
+Term _TF_ is a variant of the original term _TI_, such that
+for each variable _V_ in the term _TI_ there is a new variable
+ _V'_ in term _TF_, and the two terms do not share any
+structure. All suspended goals and attributes for attributed variables
+in _TI_ are also duplicated.
- Also refer to copy_term/2.
+Also refer to copy_term/2.
- */
+*/
Yap_InitCPred("copy_term_nat", 2, p_copy_term_no_delays, 0);
- /** @pred copy_term_nat(? _TI_,- _TF_)
+/** @pred copy_term_nat(? _TI_,- _TF_)
- As copy_term/2. Attributes however, are not copied but replaced
- by fresh variables.
+As copy_term/2. Attributes however, are not copied but replaced
+by fresh variables.
- */
+ */
Yap_InitCPred("ground", 1, p_ground, SafePredFlag);
- /** @pred ground( _T_) is iso
+/** @pred ground( _T_) is iso
- Succeeds if there are no free variables in the term _T_.
+Succeeds if there are no free variables in the term _T_.
- */
+*/
Yap_InitCPred("$variables_in_term", 3, p_variables_in_term, 0);
Yap_InitCPred("$free_variables_in_term", 3, p_free_variables_in_term, 0);
Yap_InitCPred("$non_singletons_in_term", 3, p_non_singletons_in_term, 0);
Yap_InitCPred("term_variables", 2, p_term_variables, 0);
- /** @pred term_variables(? _Term_, - _Variables_) is iso
+/** @pred term_variables(? _Term_, - _Variables_) is iso
- Unify _Variables_ with the list of all variables of term
- _Term_. The variables occur in the order of their first
- appearance when traversing the term depth-first, left-to-right.
+Unify _Variables_ with the list of all variables of term
+ _Term_. The variables occur in the order of their first
+appearance when traversing the term depth-first, left-to-right.
- */
+*/
Yap_InitCPred("term_variables", 3, p_term_variables3, 0);
Yap_InitCPred("term_attvars", 2, p_term_attvars, 0);
- /** @pred term_attvars(+ _Term_,- _AttVars_)
+/** @pred term_attvars(+ _Term_,- _AttVars_)
- _AttVars_ is a list of all attributed variables in _Term_ and
- its attributes. I.e., term_attvars/2 works recursively through
- attributes. This predicate is Cycle-safe.
+ _AttVars_ is a list of all attributed variables in _Term_ and
+its attributes. I.e., term_attvars/2 works recursively through
+attributes. This predicate is Cycle-safe.
- */
- Yap_InitCPred("is_list", 1, p_is_list, SafePredFlag | TestPredFlag);
- Yap_InitCPred("$is_list_or_partial_list", 1, p_is_list_or_partial_list,
- SafePredFlag | TestPredFlag);
+*/
+ Yap_InitCPred("is_list", 1, p_is_list, SafePredFlag|TestPredFlag);
+ Yap_InitCPred("$is_list_or_partial_list", 1, p_is_list_or_partial_list, SafePredFlag|TestPredFlag);
Yap_InitCPred("rational_term_to_tree", 4, p_break_rational, 0);
- /** @pred rational_term_to_tree(? _TI_,- _TF_, ?SubTerms, ?MoreSubterms)
+/** @pred rational_term_to_tree(? _TI_,- _TF_, ?SubTerms, ?MoreSubterms)
- The term _TF_ is a forest representation (without cycles and repeated
- terms) for the Prolog term _TI_. The term _TF_ is the main term. The
- difference list _SubTerms_-_MoreSubterms_ stores terms of the form
- _V=T_, where _V_ is a new variable occuring in _TF_, and _T_ is a copy
- of a sub-term from _TI_.
+The term _TF_ is a forest representation (without cycles and repeated
+terms) for the Prolog term _TI_. The term _TF_ is the main term. The
+difference list _SubTerms_-_MoreSubterms_ stores terms of the form
+_V=T_, where _V_ is a new variable occuring in _TF_, and _T_ is a copy
+of a sub-term from _TI_.
- */
+*/
Yap_InitCPred("term_factorized", 3, p_break_rational3, 0);
- /** @pred term_factorized(? _TI_,- _TF_, ?SubTerms)
+/** @pred term_factorized(? _TI_,- _TF_, ?SubTerms)
- Similar to rational_term_to_tree/4, but _SubTerms_ is a proper list.
+Similar to rational_term_to_tree/4, but _SubTerms_ is a proper list.
- */
+*/
Yap_InitCPred("=@=", 2, p_variant, 0);
Yap_InitCPred("numbervars", 3, p_numbervars, 0);
- /** @pred numbervars( _T_,+ _N1_,- _Nn_)
+/** @pred numbervars( _T_,+ _N1_,- _Nn_)
- Instantiates each variable in term _T_ to a term of the form:
- `$VAR( _I_)`, with _I_ increasing from _N1_ to _Nn_.
+Instantiates each variable in term _T_ to a term of the form:
+`$VAR( _I_)`, with _I_ increasing from _N1_ to _Nn_.
- */
+*/
Yap_InitCPred("unnumbervars", 2, p_unnumbervars, 0);
- /** @pred unnumbervars( _T_,+ _NT_)
+/** @pred unnumbervars( _T_,+ _NT_)
- Replace every `$VAR( _I_)` by a free variable.
+Replace every `$VAR( _I_)` by a free variable.
- */
+*/
/* use this carefully */
- Yap_InitCPred("$skip_list", 3, p_skip_list, SafePredFlag | TestPredFlag);
- Yap_InitCPred("$skip_list", 4, p_skip_list4, SafePredFlag | TestPredFlag);
+ Yap_InitCPred("$skip_list", 3, p_skip_list, SafePredFlag|TestPredFlag);
+ Yap_InitCPred("$skip_list", 4, p_skip_list4, SafePredFlag|TestPredFlag);
Yap_InitCPred("$free_arguments", 1, p_free_arguments, TestPredFlag);
CurrentModule = TERMS_MODULE;
Yap_InitCPred("variable_in_term", 2, p_var_in_term, 0);
@@ -5482,8 +5627,7 @@ void Yap_InitUtilCPreds(void) {
Yap_InitCPred("reset_variables", 1, p_reset_variables, 0);
CurrentModule = cm;
#ifdef DEBUG
- Yap_InitCPred("$force_trail_expansion", 1, p_force_trail_expansion,
- SafePredFlag);
+ Yap_InitCPred("$force_trail_expansion", 1, p_force_trail_expansion, SafePredFlag);
Yap_InitCPred("dum", 1, camacho_dum, SafePredFlag);
#endif
}