3#define TERMS_H #include "amidefs.h"
20#define to_visit stt->pt
21#define to_visit0 stt->pt0
22#define to_visit_end stt->max
29 Term t, *bindp, *arenap;
38#define IS_VISIT_MARKER(d0) (IsPairTerm(d0) && \
39 (copy_frame*)RepPair(d0) >= to_visit0 \
40&& (copy_frame*)RepPair(d0) <= to_visit)
42#define VISIT_MARK() AbsPair((CELL*)to_visit)
44#define VISIT_ENTRY(d0) (( copy_frame *)RepPair(d0))
46#define VISIT_TARGET(d0) ((( copy_frame *)RepPair(d0))->t)
48#define VISIT_REPLACED(d0) ((( copy_frame *)RepPair(d0))->oldv)
51#define VUNMARK(ptd0, d0) (*(ptd0) = (d0))
54#define VISITED(D0) IS_VISIT_MARKER(D0)
57#define VISIT_UNMARK(d0) (IS_VISIT_MARKER(d0)?(( copy_frame *)RepPair(d0))->oldv:d0)
59#define mderef_head(D, DM, Label) \
61 while (IS_VISIT_MARKER(D)){\
62 D = VISIT_REPLACED(D); } \
63 if (IsVarTerm(D)) goto Label \
65static inline bool init_stack(
Ystack_t *b)
72 b->max = (
copy_frame*)((
char*)(b->pt0)+LOCAL_aux_sz);
76 b->err = YAP_NO_ERROR;
77 return (b->pt0 != NULL);
81static inline size_t realloc_stack(
Ystack_t *stt) {
82 size_t delta = (
char*)stt->max-(
char*)stt->pt0, n=stt->pt-stt->pt0;
83 size_t nsz = delta > 1024*1024 ? delta+1024+1024 : 2*delta;
87 stt->max = stt->pt0+nsz;
88 for (stt->pt = stt->pt0; stt->pt < stt->pt0+n; stt->pt++) {
89 stt->pt->oldp[0] = VISIT_MARK();
95static inline void reset_stack(
Ystack_t *b) {
102static inline void reset_stack_but_not_trail(
Ystack_t *b) {
108#define mderef_body(D, DM, A, LabelUnk, LabelNonVar) \
115 while (IS_VISIT_MARKER(DM)){\
116 DM = VISIT_REPLACED(DM); } \
121#define POP_VISIT(A, DD)\
123if(IS_VISIT_MARKER(DD))\
124 {*A = (( copy_frame *)RepPair(dd))->oldv; }}
126#define PUSH_VISIT(A, DD, D)\
127{if(IS_VISIT_MARKER(DD)) {\
128 (( copy_frame *)RepPair(DD))->oldv = (D); *(A)=DD; }}
130#define TrailedMaBind(VP, D) \
132 DO_MATRAIL((VP), *(VP), (D)); \
138 { Term dd; POP_VISIT(A, dd); *A=D; PUSH_VISIT(A,dd,D); }
141 { Term dd; POP_VISIT(A, dd); YapBind(A,D); PUSH_VISIT(A,dd,D); }
143#define mBind_And_Trail(A,D) \
144 { Term dd; POP_VISIT(A, dd); Bind_and_Trail(A,D); PUSH_VISIT(A,dd,D); }
146#define mMaBind(A,D) \
147 { Term dd; POP_VISIT(A, dd); MaBind(A,D); PUSH_VISIT(A,dd,D); }
150#define mTrailedMaBind(A,D) \
151 { Term dd; POP_VISIT((A), dd); TrailedMaBind((A),(D)); PUSH_VISIT(A,dd,D); }
158unsigned long long vsc_cnt;
159#define COPY(t) if (!IsAtomOrIntTerm(t)){ fprintf(stderr,"+ %lld %s: ",vsc_count++,__FUNCTION__); Yap_DebugPlxWriteln(t);}
160#define OCOPY(t) { fprintf(stderr,"- %lld %s: ",vsc_count++,__FUNCTION__); Yap_DebugPlWriteln(t);if (vsc_count==12190) Yap_do_low_level_trace=1}
168#define GCIsPrimitiveTerm(X) ( IsAtomOrIntTerm(X))
171#define HEAP_PTR(val) (!GCIsPrimitiveTerm(val) && ONHEAP(GET_NEXT(val)))
182#define HEAP_TRAIL_ENTRY(val) ((IsVarTerm(val)) && \
183 ((H0 <= CellPtr(val) && CellPtr(val)\
185 (CellPtr(B) < CellPtr(val) && CellPtr(val) <= \
186 LCL0 && HEAP_PTR(val))))