| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | #define TRUST_FAIL_INSTINIT
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef CUT_C
 | 
					
						
							|  |  |  | #define TRUST_FAIL_CUT_C \
 | 
					
						
							|  |  |  | 	while (POP_CHOICE_POINT(B->cp_b)) \ | 
					
						
							|  |  |  | 	    POP_EXECUTE(); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef YAPOR
 | 
					
						
							|  |  |  | #define TRUST_FAIL_YAPOR \
 | 
					
						
							|  |  |  |     choiceptr cut_pt; \ | 
					
						
							|  |  |  |     cut_pt = B->cp_b; \ | 
					
						
							|  |  |  |     CUT_prune_to(cut_pt); \ | 
					
						
							|  |  |  |     B = cut_pt; | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define TRUST_FAIL_NOYAPOR \
 | 
					
						
							|  |  |  |       B = B->cp_b; \ | 
					
						
							|  |  |  | 	  return external_labels[0]; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef YAPOR
 | 
					
						
							|  |  |  | #define LBL_SHARED_FAIL \
 | 
					
						
							|  |  |  |       B = Get_LOCAL_top_cp(); \ | 
					
						
							|  |  |  |       SET_BB(PROTECT_FROZEN_B(B)); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define OP_FAIL_INSTINIT \
 | 
					
						
							|  |  |  |       print_instruction((*_PREG), ON_NATIVE); \ | 
					
						
							|  |  |  |       if (PP) { \ | 
					
						
							|  |  |  | 	UNLOCK(PP->PELock); \ | 
					
						
							|  |  |  | 	PP = NULL; \ | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef LOW_LEVEL_TRACER
 | 
					
						
							|  |  |  | #if defined(YAPOR) || defined(THREADS)
 | 
					
						
							|  |  |  | #define LBL_FAIL_INSTINIT \
 | 
					
						
							|  |  |  |       if ((char*)ExpEnv.debug_struc.pprint_me.native_backtrack != 0 && (char*)ExpEnv.debug_struc.pprint_me.native_backtrack != (char*)0x1) { \ | 
					
						
							|  |  |  | 	    fprintf(stderr, "%s:%d\n", __FILE__, __LINE__); \ | 
					
						
							|  |  |  | 		fprintf(stderr, "%s", (char*)ExpEnv.debug_struc.pprint_me.native_backtrack); \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  |       print_instruction((*_PREG), ON_NATIVE); \ | 
					
						
							|  |  |  |       BLOCKADDRESS = (CELL)(*_PREG); \ | 
					
						
							|  |  |  |       { \ | 
					
						
							|  |  |  | 	register tr_fr_ptr pt0 = TR; \ | 
					
						
							|  |  |  | 	if (PP) { \ | 
					
						
							|  |  |  | 	  UNLOCK(PP->PELock); \ | 
					
						
							|  |  |  | 	  PP = NULL; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	(*_PREG) = B->cp_ap; \ | 
					
						
							|  |  |  | 	save_pc(); \ | 
					
						
							|  |  |  | 	CACHE_TR(B->cp_tr); \ | 
					
						
							|  |  |  | 	PREFETCH_OP((*_PREG)); \ | 
					
						
							|  |  |  |       while (1) { \ | 
					
						
							|  |  |  | 	if (pt0 == S_TR) { \ | 
					
						
							|  |  |  | 	  SP = SP0; \ | 
					
						
							|  |  |  |     LBL_FAIL_LOW_LEVEL_TRACER | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define LBL_FAIL_INSTINIT \
 | 
					
						
							|  |  |  | 	  if ((char*)ExpEnv.debug_struc.pprint_me.native_backtrack != 0 && (char*)ExpEnv.debug_struc.pprint_me.native_backtrack != (char*)0x1) { \ | 
					
						
							|  |  |  | 	    fprintf(stderr, "%s:%d\n", __FILE__, __LINE__); \ | 
					
						
							|  |  |  | 		fprintf(stderr, "%s", (char*)ExpEnv.debug_struc.pprint_me.native_backtrack); \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  |       print_instruction((*_PREG), ON_NATIVE); \ | 
					
						
							|  |  |  |       BLOCKADDRESS = (CELL)(*_PREG); \ | 
					
						
							|  |  |  |       { \ | 
					
						
							|  |  |  | 	register tr_fr_ptr pt0 = TR; \ | 
					
						
							|  |  |  | 	(*_PREG) = B->cp_ap; \ | 
					
						
							|  |  |  | 	save_pc(); \ | 
					
						
							|  |  |  | 	CACHE_TR(B->cp_tr); \ | 
					
						
							|  |  |  | 	PREFETCH_OP((*_PREG)); \ | 
					
						
							|  |  |  |       while (1) { \ | 
					
						
							|  |  |  | 	if (pt0 == S_TR) { \ | 
					
						
							|  |  |  | 	  SP = SP0; \ | 
					
						
							|  |  |  |     LBL_FAIL_LOW_LEVEL_TRACER | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #else /* LOW_LEVEL_TRACER */
 | 
					
						
							|  |  |  | #if defined(YAPOR) || defined(THREADS)
 | 
					
						
							|  |  |  | #define LBL_FAIL_INSTINIT \
 | 
					
						
							|  |  |  |       if ((char*)ExpEnv.debug_struc.pprint_me.native_backtrack != 0 && (char*)ExpEnv.debug_struc.pprint_me.native_backtrack != (char*)0x1) { \ | 
					
						
							|  |  |  | 	    fprintf(stderr, "%s:%d\n", __FILE__, __LINE__); \ | 
					
						
							|  |  |  | 		fprintf(stderr, "%s", (char*)ExpEnv.debug_struc.pprint_me.native_backtrack); \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  |       print_instruction((*_PREG), ON_NATIVE); \ | 
					
						
							|  |  |  |       BLOCKADDRESS = (CELL)(*_PREG); \ | 
					
						
							|  |  |  |       { \ | 
					
						
							|  |  |  | 	register tr_fr_ptr pt0 = TR; \ | 
					
						
							|  |  |  | 	if (PP) { \ | 
					
						
							|  |  |  | 	  UNLOCK(PP->PELock); \ | 
					
						
							|  |  |  | 	  PP = NULL; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	(*_PREG) = B->cp_ap; \ | 
					
						
							|  |  |  | 	save_pc(); \ | 
					
						
							|  |  |  | 	CACHE_TR(B->cp_tr); \ | 
					
						
							|  |  |  | 	PREFETCH_OP((*_PREG)); \ | 
					
						
							|  |  |  |       while (1) { \ | 
					
						
							|  |  |  | 	if (pt0 == S_TR) { \ | 
					
						
							|  |  |  | 	  SP = SP0; \ | 
					
						
							|  |  |  |     LBL_FAIL_POST_LOW_LEVEL_TRACER | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define LBL_FAIL_INSTINIT \
 | 
					
						
							|  |  |  |       if ((char*)ExpEnv.debug_struc.pprint_me.native_backtrack != 0 && (char*)ExpEnv.debug_struc.pprint_me.native_backtrack != (char*)0x1) { \ | 
					
						
							|  |  |  | 	    fprintf(stderr, "%s:%d\n", __FILE__, __LINE__); \ | 
					
						
							|  |  |  | 		fprintf(stderr, "%s", (char*)ExpEnv.debug_struc.pprint_me.native_backtrack); \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  |       print_instruction((*_PREG), ON_NATIVE); \ | 
					
						
							|  |  |  |       BLOCKADDRESS = (CELL)(*_PREG); \ | 
					
						
							|  |  |  |       { \ | 
					
						
							|  |  |  | 	register tr_fr_ptr pt0 = TR; \ | 
					
						
							|  |  |  | 	(*_PREG) = B->cp_ap; \ | 
					
						
							|  |  |  | 	save_pc(); \ | 
					
						
							|  |  |  | 	CACHE_TR(B->cp_tr); \ | 
					
						
							|  |  |  | 	PREFETCH_OP((*_PREG)); \ | 
					
						
							|  |  |  |       while (1) { \ | 
					
						
							|  |  |  | 	if (pt0 == S_TR) { \ | 
					
						
							|  |  |  | 	  SP = SP0; \ | 
					
						
							|  |  |  |     LBL_FAIL_POST_LOW_LEVEL_TRACER | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif /* LOW_LEVEL_TRACER */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef LOW_LEVEL_TRACER
 | 
					
						
							|  |  |  | #ifdef TABLING
 | 
					
						
							|  |  |  | #ifdef THREADS_CONSUMER_SHARING
 | 
					
						
							|  |  |  | #ifdef DETERMINISTIC_TABLING
 | 
					
						
							|  |  |  | #define LBL_FAIL_LOW_LEVEL_TRACER \
 | 
					
						
							|  |  |  | 	  if (Yap_do_low_level_trace) { \ | 
					
						
							|  |  |  | 	    int go_on = TRUE; \ | 
					
						
							|  |  |  | 	    yamop *ipc = (*_(*_PREG)); \ | 
					
						
							|  |  |  | 	    while (go_on) { \ | 
					
						
							|  |  |  | 	      op_numbers opnum = Yap_op_from_opcode(ipc->opc); \ | 
					
						
							|  |  |  | 	      go_on = FALSE; \ | 
					
						
							|  |  |  | 	      switch (opnum) { \ | 
					
						
							|  |  |  | 	      case _table_load_answer: \ | 
					
						
							|  |  |  | 		  { \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_loader, LOAD_CP(B)->cp_pred_entry, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 	      case _table_try_answer: \ | 
					
						
							|  |  |  | 	      case _table_retry_me: \ | 
					
						
							|  |  |  | 	      case _table_trust_me: \ | 
					
						
							|  |  |  | 	      case _table_retry: \ | 
					
						
							|  |  |  | 	      case _table_trust: \ | 
					
						
							|  |  |  | 	      case _table_completion: \ | 
					
						
							|  |  |  | 	      case _table_answer_resolution_completion: \ | 
					
						
							|  |  |  | 		if (IS_DET_GEN_CP(B)) { \ | 
					
						
							|  |  |  | 		  low_level_trace(retry_table_generator, DET_GEN_CP(B)->cp_pred_entry, NULL); \ | 
					
						
							|  |  |  | 		} else \ | 
					
						
							|  |  |  |         { \ | 
					
						
							|  |  |  | 		  low_level_trace(retry_table_generator, GEN_CP(B)->cp_pred_entry, (CELL *)(GEN_CP(B) + 1)); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 	      case _table_answer_resolution: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_consumer, CONS_CP(B)->cp_pred_entry, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  |               case _trie_trust_var: \ | 
					
						
							|  |  |  |               case _trie_retry_var: \ | 
					
						
							|  |  |  |               case _trie_trust_var_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_var_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_val: \ | 
					
						
							|  |  |  |               case _trie_retry_val: \ | 
					
						
							|  |  |  |               case _trie_trust_val_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_val_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_atom: \ | 
					
						
							|  |  |  |               case _trie_retry_atom: \ | 
					
						
							|  |  |  |               case _trie_trust_atom_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_atom_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_null: \ | 
					
						
							|  |  |  |               case _trie_retry_null: \ | 
					
						
							|  |  |  |               case _trie_trust_null_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_null_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_appl: \ | 
					
						
							|  |  |  |               case _trie_retry_appl: \ | 
					
						
							|  |  |  |               case _trie_trust_appl_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_appl_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_extension: \ | 
					
						
							|  |  |  |               case _trie_retry_extension: \ | 
					
						
							|  |  |  |               case _trie_trust_double: \ | 
					
						
							|  |  |  |               case _trie_retry_double: \ | 
					
						
							|  |  |  |               case _trie_trust_longint: \ | 
					
						
							|  |  |  |               case _trie_retry_longint: \ | 
					
						
							|  |  |  |               case _trie_trust_gterm: \ | 
					
						
							|  |  |  |               case _trie_retry_gterm: \ | 
					
						
							|  |  |  | 	    { \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_loader, UndefCode, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  |     LBL_FAIL_POST_LOW_LEVEL_TRACER | 
					
						
							|  |  |  | #else /* DETERMINISTIC_TABLING */
 | 
					
						
							|  |  |  | #define LBL_FAIL_LOW_LEVEL_TRACER \
 | 
					
						
							|  |  |  | 	  if (Yap_do_low_level_trace) { \ | 
					
						
							|  |  |  | 	    int go_on = TRUE; \ | 
					
						
							|  |  |  | 	    yamop *ipc = (*_PREG); \ | 
					
						
							|  |  |  | 	    while (go_on) { \ | 
					
						
							|  |  |  | 	      op_numbers opnum = Yap_op_from_opcode(ipc->opc); \ | 
					
						
							|  |  |  | 	      go_on = FALSE; \ | 
					
						
							|  |  |  | 	      switch (opnum) { \ | 
					
						
							|  |  |  | 	      case _table_load_answer: \ | 
					
						
							|  |  |  | 		  { \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_loader, LOAD_CP(B)->cp_pred_entry, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 	      case _table_try_answer: \ | 
					
						
							|  |  |  | 	      case _table_retry_me: \ | 
					
						
							|  |  |  | 	      case _table_trust_me: \ | 
					
						
							|  |  |  | 	      case _table_retry: \ | 
					
						
							|  |  |  | 	      case _table_trust: \ | 
					
						
							|  |  |  | 	      case _table_completion: \ | 
					
						
							|  |  |  | 	      case _table_answer_resolution_completion: \ | 
					
						
							|  |  |  |         { \ | 
					
						
							|  |  |  | 		  low_level_trace(retry_table_generator, GEN_CP(B)->cp_pred_entry, (CELL *)(GEN_CP(B) + 1)); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 	      case _table_answer_resolution: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_consumer, CONS_CP(B)->cp_pred_entry, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  |               case _trie_trust_var: \ | 
					
						
							|  |  |  |               case _trie_retry_var: \ | 
					
						
							|  |  |  |               case _trie_trust_var_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_var_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_val: \ | 
					
						
							|  |  |  |               case _trie_retry_val: \ | 
					
						
							|  |  |  |               case _trie_trust_val_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_val_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_atom: \ | 
					
						
							|  |  |  |               case _trie_retry_atom: \ | 
					
						
							|  |  |  |               case _trie_trust_atom_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_atom_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_null: \ | 
					
						
							|  |  |  |               case _trie_retry_null: \ | 
					
						
							|  |  |  |               case _trie_trust_null_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_null_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_appl: \ | 
					
						
							|  |  |  |               case _trie_retry_appl: \ | 
					
						
							|  |  |  |               case _trie_trust_appl_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_appl_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_extension: \ | 
					
						
							|  |  |  |               case _trie_retry_extension: \ | 
					
						
							|  |  |  |               case _trie_trust_double: \ | 
					
						
							|  |  |  |               case _trie_retry_double: \ | 
					
						
							|  |  |  |               case _trie_trust_longint: \ | 
					
						
							|  |  |  |               case _trie_retry_longint: \ | 
					
						
							|  |  |  |               case _trie_trust_gterm: \ | 
					
						
							|  |  |  |               case _trie_retry_gterm: \ | 
					
						
							|  |  |  | 	    { \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_loader, UndefCode, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  |     LBL_FAIL_POST_LOW_LEVEL_TRACER | 
					
						
							|  |  |  | #endif /* DETERMINISTIC_TABLING */
 | 
					
						
							|  |  |  | #else /* THREADS_CONSUMER_SHARING */
 | 
					
						
							|  |  |  | #ifdef DETERMINISTIC_TABLING
 | 
					
						
							|  |  |  | #define LBL_FAIL_LOW_LEVEL_TRACER \
 | 
					
						
							|  |  |  | 	  if (Yap_do_low_level_trace) { \ | 
					
						
							|  |  |  | 	    int go_on = TRUE; \ | 
					
						
							|  |  |  | 	    yamop *ipc = (*_PREG); \ | 
					
						
							|  |  |  | 	    while (go_on) { \ | 
					
						
							|  |  |  | 	      op_numbers opnum = Yap_op_from_opcode(ipc->opc); \ | 
					
						
							|  |  |  | 	      go_on = FALSE; \ | 
					
						
							|  |  |  | 	      switch (opnum) { \ | 
					
						
							|  |  |  | 	      case _table_load_answer: \ | 
					
						
							|  |  |  | 		  { \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_loader, LOAD_CP(B)->cp_pred_entry, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 	      case _table_try_answer: \ | 
					
						
							|  |  |  | 	      case _table_retry_me: \ | 
					
						
							|  |  |  | 	      case _table_trust_me: \ | 
					
						
							|  |  |  | 	      case _table_retry: \ | 
					
						
							|  |  |  | 	      case _table_trust: \ | 
					
						
							|  |  |  | 	      case _table_completion: \ | 
					
						
							|  |  |  | 		if (IS_DET_GEN_CP(B)) { \ | 
					
						
							|  |  |  | 		  low_level_trace(retry_table_generator, DET_GEN_CP(B)->cp_pred_entry, NULL); \ | 
					
						
							|  |  |  | 		} else \ | 
					
						
							|  |  |  |         { \ | 
					
						
							|  |  |  | 		  low_level_trace(retry_table_generator, GEN_CP(B)->cp_pred_entry, (CELL *)(GEN_CP(B) + 1)); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 	      case _table_answer_resolution: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_consumer, CONS_CP(B)->cp_pred_entry, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  |               case _trie_trust_var: \ | 
					
						
							|  |  |  |               case _trie_retry_var: \ | 
					
						
							|  |  |  |               case _trie_trust_var_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_var_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_val: \ | 
					
						
							|  |  |  |               case _trie_retry_val: \ | 
					
						
							|  |  |  |               case _trie_trust_val_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_val_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_atom: \ | 
					
						
							|  |  |  |               case _trie_retry_atom: \ | 
					
						
							|  |  |  |               case _trie_trust_atom_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_atom_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_null: \ | 
					
						
							|  |  |  |               case _trie_retry_null: \ | 
					
						
							|  |  |  |               case _trie_trust_null_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_null_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_appl: \ | 
					
						
							|  |  |  |               case _trie_retry_appl: \ | 
					
						
							|  |  |  |               case _trie_trust_appl_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_appl_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_extension: \ | 
					
						
							|  |  |  |               case _trie_retry_extension: \ | 
					
						
							|  |  |  |               case _trie_trust_double: \ | 
					
						
							|  |  |  |               case _trie_retry_double: \ | 
					
						
							|  |  |  |               case _trie_trust_longint: \ | 
					
						
							|  |  |  |               case _trie_retry_longint: \ | 
					
						
							|  |  |  |               case _trie_trust_gterm: \ | 
					
						
							|  |  |  |               case _trie_retry_gterm: \ | 
					
						
							|  |  |  | 	    { \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_loader, UndefCode, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  |     LBL_FAIL_POST_LOW_LEVEL_TRACER | 
					
						
							|  |  |  | #else /* DETERMINISTIC_TABLING */
 | 
					
						
							|  |  |  | #define LBL_FAIL_LOW_LEVEL_TRACER \
 | 
					
						
							|  |  |  | 	  if (Yap_do_low_level_trace) { \ | 
					
						
							|  |  |  | 	    int go_on = TRUE; \ | 
					
						
							|  |  |  | 	    yamop *ipc = (*_PREG); \ | 
					
						
							|  |  |  | 	    while (go_on) { \ | 
					
						
							|  |  |  | 	      op_numbers opnum = Yap_op_from_opcode(ipc->opc); \ | 
					
						
							|  |  |  | 	      go_on = FALSE; \ | 
					
						
							|  |  |  | 	      switch (opnum) { \ | 
					
						
							|  |  |  | 	      case _table_load_answer: \ | 
					
						
							|  |  |  | 		  { \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_loader, LOAD_CP(B)->cp_pred_entry, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 	      case _table_try_answer: \ | 
					
						
							|  |  |  | 	      case _table_retry_me: \ | 
					
						
							|  |  |  | 	      case _table_trust_me: \ | 
					
						
							|  |  |  | 	      case _table_retry: \ | 
					
						
							|  |  |  | 	      case _table_trust: \ | 
					
						
							|  |  |  | 	      case _table_completion: \ | 
					
						
							|  |  |  |         { \ | 
					
						
							|  |  |  | 		  low_level_trace(retry_table_generator, GEN_CP(B)->cp_pred_entry, (CELL *)(GEN_CP(B) + 1)); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 	      case _table_answer_resolution: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_consumer, CONS_CP(B)->cp_pred_entry, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  |               case _trie_trust_var: \ | 
					
						
							|  |  |  |               case _trie_retry_var: \ | 
					
						
							|  |  |  |               case _trie_trust_var_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_var_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_val: \ | 
					
						
							|  |  |  |               case _trie_retry_val: \ | 
					
						
							|  |  |  |               case _trie_trust_val_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_val_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_atom: \ | 
					
						
							|  |  |  |               case _trie_retry_atom: \ | 
					
						
							|  |  |  |               case _trie_trust_atom_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_atom_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_null: \ | 
					
						
							|  |  |  |               case _trie_retry_null: \ | 
					
						
							|  |  |  |               case _trie_trust_null_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_null_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_appl: \ | 
					
						
							|  |  |  |               case _trie_retry_appl: \ | 
					
						
							|  |  |  |               case _trie_trust_appl_in_pair: \ | 
					
						
							|  |  |  |               case _trie_retry_appl_in_pair: \ | 
					
						
							|  |  |  |               case _trie_trust_extension: \ | 
					
						
							|  |  |  |               case _trie_retry_extension: \ | 
					
						
							|  |  |  |               case _trie_trust_double: \ | 
					
						
							|  |  |  |               case _trie_retry_double: \ | 
					
						
							|  |  |  |               case _trie_trust_longint: \ | 
					
						
							|  |  |  |               case _trie_retry_longint: \ | 
					
						
							|  |  |  |               case _trie_trust_gterm: \ | 
					
						
							|  |  |  |               case _trie_retry_gterm: \ | 
					
						
							|  |  |  | 	    { \ | 
					
						
							|  |  |  | 		low_level_trace(retry_table_loader, UndefCode, NULL); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  |     LBL_FAIL_POST_LOW_LEVEL_TRACER | 
					
						
							|  |  |  | #endif /* DETERMINISTIC_TABLING */
 | 
					
						
							|  |  |  | #endif /* THREADS_CONSUMER_SHARING */
 | 
					
						
							|  |  |  | #endif /* TABLING */
 | 
					
						
							|  |  |  | #define LBL_FAIL_LOW_LEVEL_TRACER \
 | 
					
						
							|  |  |  | 	  if (Yap_do_low_level_trace) { \ | 
					
						
							|  |  |  | 	    int go_on = TRUE; \ | 
					
						
							|  |  |  | 	    yamop *ipc = (*_PREG); \ | 
					
						
							|  |  |  | 	    while (go_on) { \ | 
					
						
							|  |  |  | 	      op_numbers opnum = Yap_op_from_opcode(ipc->opc); \ | 
					
						
							|  |  |  | 	      go_on = FALSE; \ | 
					
						
							|  |  |  | 	      switch (opnum) { \ | 
					
						
							|  |  |  | 	      case _or_else: \ | 
					
						
							|  |  |  | 	      case _or_last: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							|  |  |  | 		low_level_trace(retry_or, (PredEntry *)ipc, &(B->cp_a1)); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      case _retry2: \ | 
					
						
							|  |  |  | 	      case _retry3: \ | 
					
						
							|  |  |  | 	      case _retry4: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							|  |  |  | 		ipc = NEXTOP(ipc,l); \ | 
					
						
							|  |  |  | 		go_on = TRUE; \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      case _jump: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 		ipc = ipc->u.l.l; \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		go_on = TRUE; \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      case _retry_c: \ | 
					
						
							|  |  |  | 	      case _retry_userc: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 		low_level_trace(retry_pred, ipc->u.OtapFs.p, B->cp_args); \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      case _retry_profiled: \ | 
					
						
							|  |  |  | 	      case _count_retry: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							|  |  |  | 		ipc = NEXTOP(ipc,p); \ | 
					
						
							|  |  |  | 		go_on = TRUE; \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      case _retry_me: \ | 
					
						
							|  |  |  | 	      case _trust_me: \ | 
					
						
							|  |  |  | 	      case _count_retry_me: \ | 
					
						
							|  |  |  | 	      case _count_trust_me: \ | 
					
						
							|  |  |  | 	      case _profiled_retry_me: \ | 
					
						
							|  |  |  | 	      case _profiled_trust_me: \ | 
					
						
							|  |  |  | 	      case _retry_and_mark: \ | 
					
						
							|  |  |  | 	      case _profiled_retry_and_mark: \ | 
					
						
							|  |  |  | 	      case _retry: \ | 
					
						
							|  |  |  | 	      case _trust: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 		low_level_trace(retry_pred, ipc->u.Otapl.p, B->cp_args); \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      case _try_logical: \ | 
					
						
							|  |  |  | 	      case _retry_logical: \ | 
					
						
							|  |  |  | 	      case _profiled_retry_logical: \ | 
					
						
							|  |  |  | 	      case _count_retry_logical: \ | 
					
						
							|  |  |  | 	      case _trust_logical: \ | 
					
						
							|  |  |  | 	      case _profiled_trust_logical: \ | 
					
						
							|  |  |  | 	      case _count_trust_logical: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 		low_level_trace(retry_pred, ipc->u.OtILl.d->ClPred, B->cp_args); \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      case _Nstop: \ | 
					
						
							|  |  |  | 	      case _Ystop: \ | 
					
						
							|  |  |  | 		{ \ | 
					
						
							|  |  |  | 		low_level_trace(retry_pred, NULL, B->cp_args); \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      default: \ | 
					
						
							|  |  |  | 		break; \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  |     LBL_FAIL_POST_LOW_LEVEL_TRACER | 
					
						
							|  |  |  | #endif	/* LOW_LEVEL_TRACER */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  | #define LBL_FAIL_POST_LOW_LEVEL_TRACER \
 | 
					
						
							|  |  |  | 	  if (pt0 < TR_FZ || pt0 > (ADDR)CurrentTrailTop+MinTrailGap) \ | 
					
						
							|  |  |  | 	    { \ | 
					
						
							|  |  |  | 	      TR = TR_FZ; \ | 
					
						
							|  |  |  | 	      TRAIL_LINK(pt0); \ | 
					
						
							|  |  |  | 	    } else \ | 
					
						
							|  |  |  |         { \ | 
					
						
							|  |  |  |       RESTORE_TR(); \ | 
					
						
							|  |  |  |         } \ | 
					
						
							|  |  |  |       GONext(); \ | 
					
						
							|  |  |  | 	  break; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	register CELL d1; \ | 
					
						
							|  |  |  | 	d1 = TrailTerm(pt0-1); \ | 
					
						
							|  |  |  | 	pt0--; \ | 
					
						
							|  |  |  |     LBL_FAIL_VARTERM | 
					
						
							|  |  |  | #else /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #define LBL_FAIL_POST_LOW_LEVEL_TRACER \
 | 
					
						
							|  |  |  | 	  if (pt0 < TR_FZ) \ | 
					
						
							|  |  |  | 	    { \ | 
					
						
							|  |  |  | 	      TR = TR_FZ; \ | 
					
						
							|  |  |  | 	      TRAIL_LINK(pt0); \ | 
					
						
							|  |  |  | 	    } else \ | 
					
						
							|  |  |  |         { \ | 
					
						
							|  |  |  |       RESTORE_TR(); \ | 
					
						
							|  |  |  |         } \ | 
					
						
							|  |  |  | 	  break; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	register CELL d1; \ | 
					
						
							|  |  |  | 	d1 = TrailTerm(pt0-1); \ | 
					
						
							|  |  |  | 	pt0--; \ | 
					
						
							|  |  |  |     LBL_FAIL_VARTERM | 
					
						
							|  |  |  | #endif /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #else /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #define LBL_FAIL_POST_LOW_LEVEL_TRACER \
 | 
					
						
							|  |  |  |         { \ | 
					
						
							|  |  |  |       RESTORE_TR(); \ | 
					
						
							|  |  |  |         } \ | 
					
						
							|  |  |  | 	  break; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	register CELL d1; \ | 
					
						
							|  |  |  | 	d1 = TrailTerm(pt0-1); \ | 
					
						
							|  |  |  | 	pt0--; \ | 
					
						
							|  |  |  |     LBL_FAIL_VARTERM | 
					
						
							|  |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(YAPOR_SBA) && defined(YAPOR)
 | 
					
						
							|  |  |  | #define LBL_FAIL_VARTERM \
 | 
					
						
							|  |  |  | 	if (IsVarTerm(d1)) { \ | 
					
						
							|  |  |  | 	  if (Unsigned((Int)(d1)-(Int)(H_FZ)) > \ | 
					
						
							|  |  |  | 	      Unsigned((Int)(B_FZ)-(Int)(H_FZ))) { \ | 
					
						
							|  |  |  | 	    RESET_VARIABLE(STACK_TO_SBA(d1)); \ | 
					
						
							|  |  |  | 	  } else \ | 
					
						
							|  |  |  |       { \ | 
					
						
							|  |  |  | 	    RESET_VARIABLE(d1); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  | 	  continue; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_INIT | 
					
						
							|  |  |  | #else /* defined(YAPOR_SBA) && defined(YAPOR) */
 | 
					
						
							|  |  |  | #define LBL_FAIL_VARTERM \
 | 
					
						
							|  |  |  | 	if (IsVarTerm(d1)) { \ | 
					
						
							|  |  |  |       { \ | 
					
						
							|  |  |  | 	    RESET_VARIABLE(d1); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  | 	  continue; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_INIT | 
					
						
							|  |  |  | #endif /* defined(YAPOR_SBA) && defined(YAPOR) */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(TERM_EXTENSIONS) || defined(FROZEN_STACKS) || defined(MULTI_ASSIGNMENT_VARIABLES)
 | 
					
						
							|  |  |  | #ifdef LIMIT_TABLING
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	if (IsPairTerm(d1)) \ | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							|  |  |  | 	    if ((ADDR) pt1 == LOCAL_TrailBase) { \ | 
					
						
							|  |  |  | 	      sg_fr_ptr sg_fr = (sg_fr_ptr) TrailVal(pt0); \ | 
					
						
							|  |  |  | 	      TrailTerm(pt0) = AbsPair((CELL *)(pt0 - 1)); \ | 
					
						
							|  |  |  | 	      SgFr_state(sg_fr)--; \ | 
					
						
							|  |  |  | 	      insert_into_global_sg_fr_list(sg_fr); \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    if ( \ | 
					
						
							|  |  |  | 		(ADDR) pt1 >= HeapTop \ | 
					
						
							|  |  |  | 		) \ | 
					
						
							|  |  |  |             { \ | 
					
						
							|  |  |  | 	      pt0 = (tr_fr_ptr) pt1; \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    if (pt0 < TR_FZ) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #else /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	if (IsPairTerm(d1)) \ | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							|  |  |  | 	    if ((ADDR) pt1 == LOCAL_TrailBase) { \ | 
					
						
							|  |  |  | 	      sg_fr_ptr sg_fr = (sg_fr_ptr) TrailVal(pt0); \ | 
					
						
							|  |  |  | 	      TrailTerm(pt0) = AbsPair((CELL *)(pt0 - 1)); \ | 
					
						
							|  |  |  | 	      SgFr_state(sg_fr)--; \ | 
					
						
							|  |  |  | 	      insert_into_global_sg_fr_list(sg_fr); \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    if ( \ | 
					
						
							|  |  |  | 		IN_BETWEEN(LOCAL_TrailBase, pt1, (ADDR)CurrentTrailTop+MinTrailGap) \ | 
					
						
							|  |  |  | 		) \ | 
					
						
							|  |  |  |             { \ | 
					
						
							|  |  |  | 	      pt0 = (tr_fr_ptr) pt1; \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    if (pt0 < TR_FZ) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #endif /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #else /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	if (IsPairTerm(d1)) \ | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							|  |  |  | 	    if ((ADDR) pt1 == LOCAL_TrailBase) { \ | 
					
						
							|  |  |  | 	      sg_fr_ptr sg_fr = (sg_fr_ptr) TrailVal(pt0); \ | 
					
						
							|  |  |  | 	      TrailTerm(pt0) = AbsPair((CELL *)(pt0 - 1)); \ | 
					
						
							|  |  |  | 	      SgFr_state(sg_fr)--; \ | 
					
						
							|  |  |  | 	      insert_into_global_sg_fr_list(sg_fr); \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #else /* LIMIT_TABLING */
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	if (IsPairTerm(d1)) \ | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							|  |  |  | 	    if ( \ | 
					
						
							|  |  |  | 		(ADDR) pt1 >= HeapTop \ | 
					
						
							|  |  |  | 		) \ | 
					
						
							|  |  |  |             { \ | 
					
						
							|  |  |  | 	      pt0 = (tr_fr_ptr) pt1; \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    if (pt0 < TR_FZ) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #else /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	if (IsPairTerm(d1)) \ | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							|  |  |  | 	    if ( \ | 
					
						
							|  |  |  | 		IN_BETWEEN(LOCAL_TrailBase, pt1, (ADDR)CurrentTrailTop+MinTrailGap) \ | 
					
						
							|  |  |  | 		) \ | 
					
						
							|  |  |  |             { \ | 
					
						
							|  |  |  | 	      pt0 = (tr_fr_ptr) pt1; \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    if (pt0 < TR_FZ) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #endif /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #else /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	if (IsPairTerm(d1)) \ | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #endif /* LIMIT_TABLING */
 | 
					
						
							|  |  |  | #else /* defined(TERM_EXTENSIONS) || defined(FROZEN_STACKS) || defined(MULTI_ASSIGNMENT_VARIABLES) */
 | 
					
						
							|  |  |  | #ifdef LIMIT_TABLING
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							|  |  |  | 	    if ((ADDR) pt1 == LOCAL_TrailBase) { \ | 
					
						
							|  |  |  | 	      sg_fr_ptr sg_fr = (sg_fr_ptr) TrailVal(pt0); \ | 
					
						
							|  |  |  | 	      TrailTerm(pt0) = AbsPair((CELL *)(pt0 - 1)); \ | 
					
						
							|  |  |  | 	      SgFr_state(sg_fr)--; \ | 
					
						
							|  |  |  | 	      insert_into_global_sg_fr_list(sg_fr); \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    if ( \ | 
					
						
							|  |  |  | 		(ADDR) pt1 >= HeapTop \ | 
					
						
							|  |  |  | 		) \ | 
					
						
							|  |  |  |             { \ | 
					
						
							|  |  |  | 	      pt0 = (tr_fr_ptr) pt1; \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    if (pt0 < TR_FZ) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #else /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							|  |  |  | 	    if ((ADDR) pt1 == LOCAL_TrailBase) { \ | 
					
						
							|  |  |  | 	      sg_fr_ptr sg_fr = (sg_fr_ptr) TrailVal(pt0); \ | 
					
						
							|  |  |  | 	      TrailTerm(pt0) = AbsPair((CELL *)(pt0 - 1)); \ | 
					
						
							|  |  |  | 	      SgFr_state(sg_fr)--; \ | 
					
						
							|  |  |  | 	      insert_into_global_sg_fr_list(sg_fr); \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    if ( \ | 
					
						
							|  |  |  | 		IN_BETWEEN(LOCAL_TrailBase, pt1, (ADDR)CurrentTrailTop+MinTrailGap) \ | 
					
						
							|  |  |  | 		) \ | 
					
						
							|  |  |  |             { \ | 
					
						
							|  |  |  | 	      pt0 = (tr_fr_ptr) pt1; \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    if (pt0 < TR_FZ) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #endif /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #else /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							|  |  |  | 	    if ((ADDR) pt1 == LOCAL_TrailBase) { \ | 
					
						
							|  |  |  | 	      sg_fr_ptr sg_fr = (sg_fr_ptr) TrailVal(pt0); \ | 
					
						
							|  |  |  | 	      TrailTerm(pt0) = AbsPair((CELL *)(pt0 - 1)); \ | 
					
						
							|  |  |  | 	      SgFr_state(sg_fr)--; \ | 
					
						
							|  |  |  | 	      insert_into_global_sg_fr_list(sg_fr); \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #else /* LIMIT_TABLING */
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							|  |  |  | 	    if ( \ | 
					
						
							|  |  |  | 		(ADDR) pt1 >= HeapTop \ | 
					
						
							|  |  |  | 		) \ | 
					
						
							|  |  |  |             { \ | 
					
						
							|  |  |  | 	      pt0 = (tr_fr_ptr) pt1; \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    if (pt0 < TR_FZ) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #else /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							|  |  |  | 	    if ( \ | 
					
						
							|  |  |  | 		IN_BETWEEN(LOCAL_TrailBase, pt1, (ADDR)CurrentTrailTop+MinTrailGap) \ | 
					
						
							|  |  |  | 		) \ | 
					
						
							|  |  |  |             { \ | 
					
						
							|  |  |  | 	      pt0 = (tr_fr_ptr) pt1; \ | 
					
						
							|  |  |  | 	      continue; \ | 
					
						
							|  |  |  | 	    } else \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    if (pt0 < TR_FZ) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #endif /* YAPOR_SBA */
 | 
					
						
							|  |  |  | #else /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_INIT \
 | 
					
						
							|  |  |  | 	  { \ | 
					
						
							|  |  |  | 	    register CELL flags; \ | 
					
						
							|  |  |  | 	    CELL *pt1 = RepPair(d1); \ | 
					
						
							| 
									
										
										
										
											2015-01-18 01:32:13 +00:00
										 |  |  | 	      if (IN_BETWEEN(H0,pt1,H)) { \ | 
					
						
							| 
									
										
										
										
											2014-07-12 23:30:14 -05:00
										 |  |  | 		if (IsAttVar(pt1)) { \ | 
					
						
							|  |  |  | 		  continue; \ | 
					
						
							|  |  |  | 		} else if (*pt1 == (CELL)FunctorBigInt) { \ | 
					
						
							|  |  |  | 		  Yap_CleanOpaqueVariable(pt1); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  |     LBL_FAIL_PAIRTERM_END_APPL | 
					
						
							|  |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #endif /* LIMIT_TABLING */
 | 
					
						
							|  |  |  | #endif /* defined(TERM_EXTENSIONS) || defined(FROZEN_STACKS) || defined(MULTI_ASSIGNMENT_VARIABLES) */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if MULTIPLE_STACKS
 | 
					
						
							|  |  |  | #if PARALLEL_YAP
 | 
					
						
							|  |  |  | #ifdef MULTI_ASSIGNMENT_VARIABLES
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_END_APPL \
 | 
					
						
							|  |  |  | 	    flags = *pt1; \ | 
					
						
							|  |  |  | 	    if (FlagOn(DBClMask, flags)) { \ | 
					
						
							|  |  |  | 	      DBRef dbr = DBStructFlagsToDBStruct(pt1); \ | 
					
						
							|  |  |  | 	      int erase; \ | 
					
						
							|  |  |  | 	      LOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      DEC_DBREF_COUNT(dbr); \ | 
					
						
							|  |  |  | 	      erase = (dbr->Flags & ErasedMask) && (dbr->ref_count == 0); \ | 
					
						
							|  |  |  | 	      UNLOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      if (erase) { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		Yap_ErDBE(dbr); \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } else { \ | 
					
						
							|  |  |  | 	      if (flags & LogUpdMask) { \ | 
					
						
							|  |  |  | 		if (flags & IndexMask) { \ | 
					
						
							|  |  |  | 		  LogUpdIndex *cl = ClauseFlagsToLogUpdIndex(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PredEntry *ap = cl->ClPred; \ | 
					
						
							|  |  |  | 		  PELOCK(8,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } else if (cl->ClFlags & DirtyMask) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_CleanUpIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} else { \ | 
					
						
							|  |  |  | 		  LogUpdClause *cl = ClauseFlagsToLogUpdClause(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PredEntry *ap = cl->ClPred; \ | 
					
						
							|  |  |  | 		  PELOCK(9,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdCl(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } else { \ | 
					
						
							|  |  |  | 		DynamicClause *cl = ClauseFlagsToDynamicClause(pt1); \ | 
					
						
							|  |  |  | 		int erase; \ | 
					
						
							|  |  |  | 		LOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		UNLOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		if (erase) { \ | 
					
						
							|  |  |  | 		  saveregs(); \ | 
					
						
							|  |  |  | 		  Yap_ErCl(cl); \ | 
					
						
							|  |  |  | 		  setregs(); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    continue; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	else { \ | 
					
						
							|  |  |  | 	  CELL *pt = RepAppl(d1); \ | 
					
						
							|  |  |  | 	  --pt0; \ | 
					
						
							|  |  |  | 	  pt[0] = TrailVal(pt0); \ | 
					
						
							|  |  |  | 	  pt[0] = TrailTerm(pt0-1); \ | 
					
						
							|  |  |  | 	  pt0 -= 2; \ | 
					
						
							|  |  |  | 	  continue; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	ENDCACHE_TR(); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #else /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_END_APPL \
 | 
					
						
							|  |  |  | 	    flags = *pt1; \ | 
					
						
							|  |  |  | 	    if (FlagOn(DBClMask, flags)) { \ | 
					
						
							|  |  |  | 	      DBRef dbr = DBStructFlagsToDBStruct(pt1); \ | 
					
						
							|  |  |  | 	      int erase; \ | 
					
						
							|  |  |  | 	      LOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      DEC_DBREF_COUNT(dbr); \ | 
					
						
							|  |  |  | 	      erase = (dbr->Flags & ErasedMask) && (dbr->ref_count == 0); \ | 
					
						
							|  |  |  | 	      UNLOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      if (erase) { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		Yap_ErDBE(dbr); \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } else { \ | 
					
						
							|  |  |  | 	      if (flags & LogUpdMask) { \ | 
					
						
							|  |  |  | 		if (flags & IndexMask) { \ | 
					
						
							|  |  |  | 		  LogUpdIndex *cl = ClauseFlagsToLogUpdIndex(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PredEntry *ap = cl->ClPred; \ | 
					
						
							|  |  |  | 		  PELOCK(8,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } else if (cl->ClFlags & DirtyMask) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_CleanUpIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} else { \ | 
					
						
							|  |  |  | 		  LogUpdClause *cl = ClauseFlagsToLogUpdClause(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PredEntry *ap = cl->ClPred; \ | 
					
						
							|  |  |  | 		  PELOCK(9,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdCl(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } else { \ | 
					
						
							|  |  |  | 		DynamicClause *cl = ClauseFlagsToDynamicClause(pt1); \ | 
					
						
							|  |  |  | 		int erase; \ | 
					
						
							|  |  |  | 		LOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		UNLOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		if (erase) { \ | 
					
						
							|  |  |  | 		  saveregs(); \ | 
					
						
							|  |  |  | 		  Yap_ErCl(cl); \ | 
					
						
							|  |  |  | 		  setregs(); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    continue; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	else { \ | 
					
						
							|  |  |  | 	  CELL *pt = RepAppl(d1); \ | 
					
						
							|  |  |  | 	  pt[0] = TrailTerm(pt0-1); \ | 
					
						
							|  |  |  | 	  pt0 -= 2; \ | 
					
						
							|  |  |  | 	  continue; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	ENDCACHE_TR(); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #else /* MULTI_ASSIGNMENT_VARIABLES */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_END_APPL \
 | 
					
						
							|  |  |  | 	    flags = *pt1; \ | 
					
						
							|  |  |  | 	    if (FlagOn(DBClMask, flags)) { \ | 
					
						
							|  |  |  | 	      DBRef dbr = DBStructFlagsToDBStruct(pt1); \ | 
					
						
							|  |  |  | 	      int erase; \ | 
					
						
							|  |  |  | 	      LOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      DEC_DBREF_COUNT(dbr); \ | 
					
						
							|  |  |  | 	      erase = (dbr->Flags & ErasedMask) && (dbr->ref_count == 0); \ | 
					
						
							|  |  |  | 	      UNLOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      if (erase) { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		Yap_ErDBE(dbr); \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } else { \ | 
					
						
							|  |  |  | 	      if (flags & LogUpdMask) { \ | 
					
						
							|  |  |  | 		if (flags & IndexMask) { \ | 
					
						
							|  |  |  | 		  LogUpdIndex *cl = ClauseFlagsToLogUpdIndex(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PredEntry *ap = cl->ClPred; \ | 
					
						
							|  |  |  | 		  PELOCK(8,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } else if (cl->ClFlags & DirtyMask) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_CleanUpIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} else { \ | 
					
						
							|  |  |  | 		  LogUpdClause *cl = ClauseFlagsToLogUpdClause(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PredEntry *ap = cl->ClPred; \ | 
					
						
							|  |  |  | 		  PELOCK(9,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdCl(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } else { \ | 
					
						
							|  |  |  | 		DynamicClause *cl = ClauseFlagsToDynamicClause(pt1); \ | 
					
						
							|  |  |  | 		int erase; \ | 
					
						
							|  |  |  | 		LOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		UNLOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		if (erase) { \ | 
					
						
							|  |  |  | 		  saveregs(); \ | 
					
						
							|  |  |  | 		  Yap_ErCl(cl); \ | 
					
						
							|  |  |  | 		  setregs(); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    continue; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	ENDCACHE_TR(); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #endif /* MULTI_ASSIGNMENT_VARIABLES */
 | 
					
						
							|  |  |  | #else /* PARALLEL_YAP */
 | 
					
						
							|  |  |  | #ifdef MULTI_ASSIGNMENT_VARIABLES
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_END_APPL \
 | 
					
						
							|  |  |  | 	    flags = *pt1; \ | 
					
						
							|  |  |  | 	    if (FlagOn(DBClMask, flags)) { \ | 
					
						
							|  |  |  | 	      DBRef dbr = DBStructFlagsToDBStruct(pt1); \ | 
					
						
							|  |  |  | 	      int erase; \ | 
					
						
							|  |  |  | 	      LOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      DEC_DBREF_COUNT(dbr); \ | 
					
						
							|  |  |  | 	      erase = (dbr->Flags & ErasedMask) && (dbr->ref_count == 0); \ | 
					
						
							|  |  |  | 	      UNLOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      if (erase) { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		Yap_ErDBE(dbr); \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } else { \ | 
					
						
							|  |  |  | 	      if (flags & LogUpdMask) { \ | 
					
						
							|  |  |  | 		if (flags & IndexMask) { \ | 
					
						
							|  |  |  | 		  LogUpdIndex *cl = ClauseFlagsToLogUpdIndex(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PELOCK(8,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } else if (cl->ClFlags & DirtyMask) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_CleanUpIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} else { \ | 
					
						
							|  |  |  | 		  LogUpdClause *cl = ClauseFlagsToLogUpdClause(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PELOCK(9,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdCl(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } else { \ | 
					
						
							|  |  |  | 		DynamicClause *cl = ClauseFlagsToDynamicClause(pt1); \ | 
					
						
							|  |  |  | 		int erase; \ | 
					
						
							|  |  |  | 		LOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		UNLOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		if (erase) { \ | 
					
						
							|  |  |  | 		  saveregs(); \ | 
					
						
							|  |  |  | 		  Yap_ErCl(cl); \ | 
					
						
							|  |  |  | 		  setregs(); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    continue; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	else { \ | 
					
						
							|  |  |  | 	  CELL *pt = RepAppl(d1); \ | 
					
						
							|  |  |  | 	  --pt0; \ | 
					
						
							|  |  |  | 	  pt[0] = TrailVal(pt0); \ | 
					
						
							|  |  |  | 	  continue; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	ENDCACHE_TR(); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #else /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_END_APPL \
 | 
					
						
							|  |  |  | 	    flags = *pt1; \ | 
					
						
							|  |  |  | 	    if (FlagOn(DBClMask, flags)) { \ | 
					
						
							|  |  |  | 	      DBRef dbr = DBStructFlagsToDBStruct(pt1); \ | 
					
						
							|  |  |  | 	      int erase; \ | 
					
						
							|  |  |  | 	      LOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      DEC_DBREF_COUNT(dbr); \ | 
					
						
							|  |  |  | 	      erase = (dbr->Flags & ErasedMask) && (dbr->ref_count == 0); \ | 
					
						
							|  |  |  | 	      UNLOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      if (erase) { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		Yap_ErDBE(dbr); \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } else { \ | 
					
						
							|  |  |  | 	      if (flags & LogUpdMask) { \ | 
					
						
							|  |  |  | 		if (flags & IndexMask) { \ | 
					
						
							|  |  |  | 		  LogUpdIndex *cl = ClauseFlagsToLogUpdIndex(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PELOCK(8,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } else if (cl->ClFlags & DirtyMask) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_CleanUpIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} else { \ | 
					
						
							|  |  |  | 		  LogUpdClause *cl = ClauseFlagsToLogUpdClause(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PELOCK(9,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdCl(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } else { \ | 
					
						
							|  |  |  | 		DynamicClause *cl = ClauseFlagsToDynamicClause(pt1); \ | 
					
						
							|  |  |  | 		int erase; \ | 
					
						
							|  |  |  | 		LOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		UNLOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		if (erase) { \ | 
					
						
							|  |  |  | 		  saveregs(); \ | 
					
						
							|  |  |  | 		  Yap_ErCl(cl); \ | 
					
						
							|  |  |  | 		  setregs(); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    continue; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	else { \ | 
					
						
							|  |  |  | 	  CELL *pt = RepAppl(d1); \ | 
					
						
							|  |  |  | 	  pt[0] = TrailTerm(pt0-1); \ | 
					
						
							|  |  |  | 	  pt0 -= 2; \ | 
					
						
							|  |  |  | 	  continue; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	ENDCACHE_TR(); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #else /* MULTI_ASSIGNMENT_VARIABLES */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_END_APPL \
 | 
					
						
							|  |  |  | 	    flags = *pt1; \ | 
					
						
							|  |  |  | 	    if (FlagOn(DBClMask, flags)) { \ | 
					
						
							|  |  |  | 	      DBRef dbr = DBStructFlagsToDBStruct(pt1); \ | 
					
						
							|  |  |  | 	      int erase; \ | 
					
						
							|  |  |  | 	      LOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      DEC_DBREF_COUNT(dbr); \ | 
					
						
							|  |  |  | 	      erase = (dbr->Flags & ErasedMask) && (dbr->ref_count == 0); \ | 
					
						
							|  |  |  | 	      UNLOCK(dbr->lock); \ | 
					
						
							|  |  |  | 	      if (erase) { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		Yap_ErDBE(dbr); \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } else { \ | 
					
						
							|  |  |  | 	      if (flags & LogUpdMask) { \ | 
					
						
							|  |  |  | 		if (flags & IndexMask) { \ | 
					
						
							|  |  |  | 		  LogUpdIndex *cl = ClauseFlagsToLogUpdIndex(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PELOCK(8,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } else if (cl->ClFlags & DirtyMask) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_CleanUpIndex(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} else { \ | 
					
						
							|  |  |  | 		  LogUpdClause *cl = ClauseFlagsToLogUpdClause(pt1); \ | 
					
						
							|  |  |  | 		  int erase; \ | 
					
						
							|  |  |  | 		  PELOCK(9,ap); \ | 
					
						
							|  |  |  | 		  DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		  erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		  if (erase) { \ | 
					
						
							|  |  |  | 		    saveregs(); \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdCl(cl); \ | 
					
						
							|  |  |  | 		    setregs(); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		  UNLOCK(ap->PELock); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } else { \ | 
					
						
							|  |  |  | 		DynamicClause *cl = ClauseFlagsToDynamicClause(pt1); \ | 
					
						
							|  |  |  | 		int erase; \ | 
					
						
							|  |  |  | 		LOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		DEC_CLREF_COUNT(cl); \ | 
					
						
							|  |  |  | 		erase = (cl->ClFlags & ErasedMask) && !(cl->ClRefCount); \ | 
					
						
							|  |  |  | 		UNLOCK(cl->ClLock); \ | 
					
						
							|  |  |  | 		if (erase) { \ | 
					
						
							|  |  |  | 		  saveregs(); \ | 
					
						
							|  |  |  | 		  Yap_ErCl(cl); \ | 
					
						
							|  |  |  | 		  setregs(); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    continue; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	ENDCACHE_TR(); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #endif /* MULTI_ASSIGNMENT_VARIABLES */
 | 
					
						
							|  |  |  | #endif /* PARALLEL_YAP */
 | 
					
						
							|  |  |  | #else /* MULTIPLE_STACKS */
 | 
					
						
							|  |  |  | #ifdef MULTI_ASSIGNMENT_VARIABLES
 | 
					
						
							|  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_END_APPL \
 | 
					
						
							|  |  |  | 	    flags = *pt1; \ | 
					
						
							|  |  |  | 	    ResetFlag(InUseMask, flags); \ | 
					
						
							|  |  |  | 	    *pt1 = flags; \ | 
					
						
							|  |  |  | 	    if (FlagOn((ErasedMask|DirtyMask), flags)) { \ | 
					
						
							|  |  |  | 	      if (FlagOn(DBClMask, flags)) { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		Yap_ErDBE(DBStructFlagsToDBStruct(pt1)); \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } else { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		if (flags & LogUpdMask) { \ | 
					
						
							|  |  |  | 		  if (flags & IndexMask) { \ | 
					
						
							|  |  |  | 		    if (FlagOn(ErasedMask, flags)) { \ | 
					
						
							|  |  |  | 		      Yap_ErLogUpdIndex(ClauseFlagsToLogUpdIndex(pt1)); \ | 
					
						
							|  |  |  | 		    } else { \ | 
					
						
							|  |  |  | 		      Yap_CleanUpIndex(ClauseFlagsToLogUpdIndex(pt1)); \ | 
					
						
							|  |  |  | 		    } \ | 
					
						
							|  |  |  | 		  } else { \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdCl(ClauseFlagsToLogUpdClause(pt1)); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		} else { \ | 
					
						
							|  |  |  | 		  Yap_ErCl(ClauseFlagsToDynamicClause(pt1)); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    continue; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	else { \ | 
					
						
							|  |  |  | 	  CELL *pt = RepAppl(d1); \ | 
					
						
							|  |  |  | 	  --pt0; \ | 
					
						
							|  |  |  | 	  pt[0] = TrailVal(pt0); \ | 
					
						
							|  |  |  | 	  continue; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	ENDCACHE_TR(); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #else /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_END_APPL \
 | 
					
						
							|  |  |  | 	    flags = *pt1; \ | 
					
						
							|  |  |  | 	    ResetFlag(InUseMask, flags); \ | 
					
						
							|  |  |  | 	    *pt1 = flags; \ | 
					
						
							|  |  |  | 	    if (FlagOn((ErasedMask|DirtyMask), flags)) { \ | 
					
						
							|  |  |  | 	      if (FlagOn(DBClMask, flags)) { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		Yap_ErDBE(DBStructFlagsToDBStruct(pt1)); \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } else { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		if (flags & LogUpdMask) { \ | 
					
						
							|  |  |  | 		  if (flags & IndexMask) { \ | 
					
						
							|  |  |  | 		    if (FlagOn(ErasedMask, flags)) { \ | 
					
						
							|  |  |  | 		      Yap_ErLogUpdIndex(ClauseFlagsToLogUpdIndex(pt1)); \ | 
					
						
							|  |  |  | 		    } else { \ | 
					
						
							|  |  |  | 		      Yap_CleanUpIndex(ClauseFlagsToLogUpdIndex(pt1)); \ | 
					
						
							|  |  |  | 		    } \ | 
					
						
							|  |  |  | 		  } else { \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdCl(ClauseFlagsToLogUpdClause(pt1)); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		} else { \ | 
					
						
							|  |  |  | 		  Yap_ErCl(ClauseFlagsToDynamicClause(pt1)); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    continue; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	else { \ | 
					
						
							|  |  |  | 	  CELL *pt = RepAppl(d1); \ | 
					
						
							|  |  |  | 	  pt[0] = TrailTerm(pt0-1); \ | 
					
						
							|  |  |  | 	  pt0 -= 2; \ | 
					
						
							|  |  |  | 	  continue; \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | 	ENDCACHE_TR(); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  | #else /* MULTI_ASSIGNMENT_VARIABLES */
 | 
					
						
							|  |  |  | #define LBL_FAIL_PAIRTERM_END_APPL \
 | 
					
						
							|  |  |  | 	    flags = *pt1; \ | 
					
						
							|  |  |  | 	    ResetFlag(InUseMask, flags); \ | 
					
						
							|  |  |  | 	    *pt1 = flags; \ | 
					
						
							|  |  |  | 	    if (FlagOn((ErasedMask|DirtyMask), flags)) { \ | 
					
						
							|  |  |  | 	      if (FlagOn(DBClMask, flags)) { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		Yap_ErDBE(DBStructFlagsToDBStruct(pt1)); \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } else { \ | 
					
						
							|  |  |  | 		saveregs(); \ | 
					
						
							|  |  |  | 		if (flags & LogUpdMask) { \ | 
					
						
							|  |  |  | 		  if (flags & IndexMask) { \ | 
					
						
							|  |  |  | 		    if (FlagOn(ErasedMask, flags)) { \ | 
					
						
							|  |  |  | 		      Yap_ErLogUpdIndex(ClauseFlagsToLogUpdIndex(pt1)); \ | 
					
						
							|  |  |  | 		    } else { \ | 
					
						
							|  |  |  | 		      Yap_CleanUpIndex(ClauseFlagsToLogUpdIndex(pt1)); \ | 
					
						
							|  |  |  | 		    } \ | 
					
						
							|  |  |  | 		  } else { \ | 
					
						
							|  |  |  | 		    Yap_ErLogUpdCl(ClauseFlagsToLogUpdClause(pt1)); \ | 
					
						
							|  |  |  | 		  } \ | 
					
						
							|  |  |  | 		} else { \ | 
					
						
							|  |  |  | 		  Yap_ErCl(ClauseFlagsToDynamicClause(pt1)); \ | 
					
						
							|  |  |  | 		} \ | 
					
						
							|  |  |  | 		setregs(); \ | 
					
						
							|  |  |  | 	      } \ | 
					
						
							|  |  |  | 	    } \ | 
					
						
							|  |  |  | 	    continue; \ | 
					
						
							|  |  |  | 	  } \ | 
					
						
							|  |  |  | 	ENDCACHE_TR(); \ | 
					
						
							|  |  |  |       } \ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | #endif /* MULTI_ASSIGNMENT_VARIABLES */
 | 
					
						
							|  |  |  | #endif /* MULTIPLE_STACKS */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define LBL_FAIL_END \
 | 
					
						
							|  |  |  |       BLOCK = (CELL)LBL_FAIL_END; |