4 tr_fr_ptr pt0, pt1, pbase, ptop;
5 pbase = B->cp_tr, ptop = TR;
11 if (d1 < (CELL)HBREG || d1 > Unsigned(B->cp_b)) {
13 TrailVal(pt0) = TrailVal(pt1);
17 }
else if (IsPairTerm(d1)) {
18 CELL *pt = RepPair(d1);
20 if ((ADDR)pt == LOCAL_TrailBase) {
24 insert_into_global_sg_fr_list(sg_fr);
27 if (IN_BETWEEN(LOCAL_TrailBase, pt, LOCAL_TrailTop)) {
31 }
else if (IN_BETWEEN(H0, pt, HR) && IsApplTerm(HeadOfTerm(d1))) {
32 RESET_VARIABLE(&TrailTerm(pt1));
33 Term t = HeadOfTerm(d1);
36 if (f == FunctorBigInt) {
37 Int tag = Yap_blob_tag(t);
38 GLOBAL_OpaqueHandlers[tag].cut_handler(d1);
45 }
else if ((*pt & (LogUpdMask | IndexMask)) == (LogUpdMask | IndexMask)) {
48#if defined(THREADS) || defined(YAPOR)
54 cl->ClFlags &= ~InUseMask;
55 erase = (cl->ClFlags & (ErasedMask | DirtyMask)) && !(cl->ClRefCount);
59 if (cl->ClFlags & ErasedMask)
60 Yap_ErLogUpdIndex(cl);
65 RESET_VARIABLE(&TrailTerm(pt0));
66 RESET_VARIABLE(&TrailVal(pt0));
70 TrailVal(pt0) = TrailVal(pt1);
74 }
else if (IsApplTerm(d1)) {
75 if (IN_BETWEEN(HBREG, RepAppl(d1), B->cp_b)) {
77 RESET_VARIABLE(&TrailTerm(pt0));
78 RESET_VARIABLE(&TrailVal(pt0));
80 RESET_VARIABLE(&TrailVal(pt0));
81 RESET_VARIABLE(&TrailTerm(pt0));
85 TrailVal(pt0) = TrailVal(pt1);
87 TrailVal(pt0 - 1) = TrailVal(pt1 - 1);
88 TrailTerm(pt0 - 1) = TrailTerm(pt1 - 1);
94 TrailVal(pt0) = TrailVal(pt1);
104 memmove(pbase, pt0, size *
sizeof(
struct trail_frame));
106 memmove(pbase + size, ptop, (TR - ptop) *
sizeof(
struct trail_frame));
115 pt1 = pt0 = B->cp_tr;
120 if (d1 < (CELL)HBREG || d1 > Unsigned(B->cp_b)) {
122 TrailVal(pt0) = TrailVal(pt1);
127 RESET_VARIABLE(&TrailTerm(pt0));
128 RESET_VARIABLE(&TrailVal(pt0));
132 }
else if (IsApplTerm(d1)) {
133 if (IN_BETWEEN(HBREG, RepAppl(d1), B->cp_b)) {
135 RESET_VARIABLE(&TrailTerm(pt0));
136 RESET_VARIABLE(&TrailVal(pt0));
138 RESET_VARIABLE(&TrailTerm(pt0));
139 RESET_VARIABLE(&TrailVal(pt0));
143 RESET_VARIABLE(&TrailTerm(pt0));
144 RESET_VARIABLE(&TrailVal(pt0));
146 RESET_VARIABLE(&TrailTerm(pt0));
147 RESET_VARIABLE(&TrailVal(pt0));
149 RESET_VARIABLE(&TrailTerm(pt0));
150 RESET_VARIABLE(&TrailVal(pt0));
156 TrailVal(pt0) = TrailVal(pt1);
158 TrailVal(pt0 + 1) = TrailVal(pt1 + 1);
159 TrailTerm(pt0 + 1) = TrailTerm(pt1 + 1);
163 TrailTerm(pt0 + 1) = TrailTerm(pt1 + 1);
164 TrailTerm(pt0) = TrailTerm(pt0 + 2) = d1;
165 RESET_VARIABLE(&TrailTerm(pt0+2));
170 }
else if (IsPairTerm(d1)) {
171 CELL *pt = RepPair(d1);
173 else if (IN_BETWEEN(H0, pt, HR) && IsApplTerm(HeadOfTerm(d1))) {
174 Term t = HeadOfTerm(d1);
176 if (f == FunctorBigInt) {
177 RESET_VARIABLE(&TrailTerm(pt1));
178 Int tag = Yap_blob_tag(t);
179 GLOBAL_OpaqueHandlers[tag].cut_handler(d1);
180 }
else if ((*pt & (LogUpdMask | IndexMask)) ==
181 (LogUpdMask | IndexMask)) {
183#if defined(YAPOR) || defined(THREADS)
190 cl->ClFlags &= ~InUseMask;
191 erase = (cl->ClFlags & (DirtyMask | ErasedMask)) && !(cl->ClRefCount);
195 if (cl->ClFlags & ErasedMask)
196 Yap_ErLogUpdIndex(cl);
198 Yap_CleanUpIndex(cl);
201 RESET_VARIABLE(&TrailTerm(pt0));