12 while (POP_CHOICE_POINT(B->cp_b)) {
31 B = Get_LOCAL_top_cp();
32 SET_BB(PROTECT_FROZEN_B(B));
45 check_stack(NoStackFail, HR);
50 register tr_fr_ptr pt0 = TR;
51#if defined(YAPOR) || defined(THREADS)
64#ifdef LOW_LEVEL_TRACER
65 if (Yap_do_low_level_trace) {
70 op_numbers opnum = Yap_op_from_opcode(ipc->opc);
75 case _table_load_answer:
76 low_level_trace(retry_table_loader, LOAD_CP(B)->cp_pred_entry, NULL);
78 case _table_try_answer:
83 case _table_completion:
84#ifdef THREADS_CONSUMER_SHARING
85 case _table_answer_resolution_completion:
87#ifdef DETERMINISTIC_TABLING
89 low_level_trace(retry_table_generator, DET_GEN_CP(B)->cp_pred_entry,
93 low_level_trace(retry_table_generator, GEN_CP(B)->cp_pred_entry,
94 (CELL *)(GEN_CP(B) + 1));
96 case _table_answer_resolution:
97 low_level_trace(retry_table_consumer, CONS_CP(B)->cp_pred_entry,
100 case _trie_trust_var:
101 case _trie_retry_var:
102 case _trie_trust_var_in_pair:
103 case _trie_retry_var_in_pair:
104 case _trie_trust_val:
105 case _trie_retry_val:
106 case _trie_trust_val_in_pair:
107 case _trie_retry_val_in_pair:
108 case _trie_trust_atom:
109 case _trie_retry_atom:
110 case _trie_trust_atom_in_pair:
111 case _trie_retry_atom_in_pair:
112 case _trie_trust_null:
113 case _trie_retry_null:
114 case _trie_trust_null_in_pair:
115 case _trie_retry_null_in_pair:
116 case _trie_trust_pair:
117 case _trie_retry_pair:
118 case _trie_trust_appl:
119 case _trie_retry_appl:
120 case _trie_trust_appl_in_pair:
121 case _trie_retry_appl_in_pair:
122 case _trie_trust_extension:
123 case _trie_retry_extension:
124 case _trie_trust_double:
125 case _trie_retry_double:
126 case _trie_trust_longint:
127 case _trie_retry_longint:
128 case _trie_trust_gterm:
129 case _trie_retry_gterm:
130 low_level_trace(retry_table_loader, UndefHook, NULL);
135 low_level_trace(retry_or, NULL, NULL);
140 ipc = NEXTOP(ipc, l);
150 if (ipc->y_u.OtapFs.p->ArityOfPE)
151 low_level_trace(retry_pred, ipc->y_u.OtapFs.p, B->cp_args);
153 low_level_trace(retry_pred, ipc->y_u.OtapFs.p, NULL);
156 case _retry_profiled:
158 ipc = NEXTOP(ipc, p);
163 case _count_retry_me:
164 case _count_trust_me:
165 case _profiled_retry_me:
166 case _profiled_trust_me:
167 case _retry_and_mark:
168 case _profiled_retry_and_mark:
171 if (ipc->y_u.Otapl.p && ipc->y_u.Otapl.p->ArityOfPE)
172 low_level_trace(retry_pred, ipc->y_u.Otapl.p, B->cp_args);
174 low_level_trace(retry_pred, ipc->y_u.Otapl.p, NULL);
178 case _profiled_retry_logical:
179 case _count_retry_logical:
181 case _profiled_trust_logical:
182 case _count_trust_logical:
183 if (ipc->y_u.OtILl.d->ClPred
184 &&ipc->y_u.OtILl.d->ClPred->ArityOfPE)
185 low_level_trace(retry_pred, ipc->y_u.OtILl.d->ClPred, B->cp_args);
187 low_level_trace(retry_pred, ipc->y_u.OtILl.d->ClPred, NULL);
191 low_level_trace(retry_pred, NULL, NULL);
201 if (pt0 < TR_FZ || pt0 > (ADDR)CurrentTrailTop + MinTrailGap)
214 d1 = TrailTerm(pt0 - 1);
217#if defined(YAPOR_SBA) && defined(YAPOR)
219 if (Unsigned((Int)(d1) - (Int)(H_FZ)) >
220 Unsigned((Int)(B_FZ) - (Int)(H_FZ))) {
221 RESET_VARIABLE(STACK_TO_SBA(d1));
230#if defined(TERM_EXTENSIONS) || defined(FROZEN_STACKS) || \
231 defined(MULTI_ASSIGNMENT_VARIABLES)
236 CELL *pt1 = RepPair(d1);
238 if ((ADDR)pt1 == LOCAL_TrailBase) {
240 TrailTerm(pt0) = AbsPair((CELL *)(pt0 - 1));
243 insert_into_global_sg_fr_list(sg_fr);
253 IN_BETWEEN(LOCAL_TrailBase, pt1, (ADDR)CurrentTrailTop + MinTrailGap)
256 pt0 = (tr_fr_ptr)pt1;
260 if (IN_BETWEEN(H0, pt1, HR)) {
265 RESET_VARIABLE(&TrailTerm(pt0));
266 RESET_VARIABLE(&TrailVal(pt0));
267 Yap_CleanOpaqueVariable(d1);
282 if (FlagOn(DBClMask, flags)) {
283 DBRef dbr = DBStructFlagsToDBStruct(pt1);
287 DEC_DBREF_COUNT(dbr);
288 erase = (dbr->Flags & ErasedMask) && (dbr->ref_count == 0);
296 if (flags & LogUpdMask) {
297 if (flags & IndexMask) {
306 erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount);
312 Yap_ErLogUpdIndex(cl);
314 }
else if (cl->ClFlags & DirtyMask) {
319 Yap_CleanUpIndex(cl);
334 erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount);
352 erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount);
365 ResetFlag(InUseMask, flags);
367 if (FlagOn((ErasedMask | DirtyMask), flags)) {
368 if (FlagOn(DBClMask, flags)) {
370 Yap_ErDBE(DBStructFlagsToDBStruct(pt1));
374 if (flags & LogUpdMask) {
375 if (flags & IndexMask) {
376 if (FlagOn(ErasedMask, flags)) {
377 Yap_ErLogUpdIndex(ClauseFlagsToLogUpdIndex(pt1));
379 Yap_CleanUpIndex(ClauseFlagsToLogUpdIndex(pt1));
382 Yap_ErLogUpdCl(ClauseFlagsToLogUpdClause(pt1));
385 Yap_ErCl(ClauseFlagsToDynamicClause(pt1));
393#ifdef MULTI_ASSIGNMENT_VARIABLES
396 CELL *pt = RepAppl(d1);
402 pt[0] = TrailVal(pt0);
404 pt[0] = TrailTerm(pt0 - 1);
421 d0 = interrupt_fail(PASS_REGS1);