variant and subsumes with coroutining should always reset to slot, not to

value.


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@906 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2003-10-28 16:20:44 +00:00
parent 5e4816eb5a
commit 77bb5fed93
4 changed files with 118 additions and 100 deletions

182
C/absmi.c
View File

@ -465,7 +465,7 @@ Yap_absmi(int inp)
ENDOp();
/* profiled_retry Label,NArgs */
Op(retry_profiled, l);
Op(retry_profiled, p);
LOCK(PREG->u.p.p->StatisticsForPred.lock);
PREG->u.p.p->StatisticsForPred.NOfRetries++;
UNLOCK(PREG->u.p.p->StatisticsForPred.lock);
@ -1458,88 +1458,102 @@ Yap_absmi(int inp)
SP = SP0;
#ifdef LOW_LEVEL_TRACER
if (Yap_do_low_level_trace) {
op_numbers opnum = Yap_op_from_opcode(PREG->opc);
restart_cp:
switch (opnum) {
int go_on = TRUE;
yamop *ipc = PREG;
while (go_on) {
go_on = FALSE;
op_numbers opnum = Yap_op_from_opcode(ipc->opc);
switch (opnum) {
#ifdef TABLING
case _table_answer_resolution:
{
PredEntry *pe = ENV_ToP(B->cp_cp);
op_numbers caller_op = Yap_op_from_opcode(ENV_ToOp(B->cp_cp));
/* first condition checks if this was a meta-call */
if ((caller_op != _call && caller_op != _fcall) || pe == NULL) {
low_level_trace(retry_table_consumer, NULL, NULL);
} else {
low_level_trace(retry_table_consumer, pe, NULL);
case _table_answer_resolution:
{
PredEntry *pe = ENV_ToP(B->cp_cp);
op_numbers caller_op = Yap_op_from_opcode(ENV_ToOp(B->cp_cp));
/* first condition checks if this was a meta-call */
if ((caller_op != _call && caller_op != _fcall) || pe == NULL) {
low_level_trace(retry_table_consumer, NULL, NULL);
} else {
low_level_trace(retry_table_consumer, pe, NULL);
}
}
}
case _table_completion:
{
PredEntry *pe = ENV_ToP(B->cp_cp);
op_numbers caller_op = Yap_op_from_opcode(ENV_ToOp(B->cp_cp));
/* first condition checks if this was a meta-call */
if ((caller_op != _call && caller_op != _fcall) || pe == NULL) {
low_level_trace(retry_table_producer, NULL, NULL);
} else {
low_level_trace(retry_table_producer, pe, (CELL *)(((gen_cp_ptr)B)+1));
case _table_completion:
{
PredEntry *pe = ENV_ToP(B->cp_cp);
op_numbers caller_op = Yap_op_from_opcode(ENV_ToOp(B->cp_cp));
/* first condition checks if this was a meta-call */
if ((caller_op != _call && caller_op != _fcall) || pe == NULL) {
low_level_trace(retry_table_producer, NULL, NULL);
} else {
low_level_trace(retry_table_producer, pe, (CELL *)(((gen_cp_ptr)B)+1));
}
}
}
break;
case _trie_retry_var:
case _trie_retry_val:
case _trie_retry_atom:
case _trie_retry_list:
case _trie_retry_struct:
case _trie_trust_var:
case _trie_trust_val:
case _trie_trust_atom:
case _trie_trust_list:
case _trie_trust_struct:
low_level_trace(retry_table_consumer, NULL, NULL);
break;
case _table_retry_me:
case _table_trust_me:
low_level_trace(retry_pred, PREG->u.lds.p, (CELL *)(((gen_cp_ptr)B)+1));
break;
break;
case _trie_retry_var:
case _trie_retry_val:
case _trie_retry_atom:
case _trie_retry_list:
case _trie_retry_struct:
case _trie_trust_var:
case _trie_trust_val:
case _trie_trust_atom:
case _trie_trust_list:
case _trie_trust_struct:
low_level_trace(retry_table_consumer, NULL, NULL);
break;
case _table_retry_me:
case _table_trust_me:
low_level_trace(retry_pred, ipc->u.lds.p, (CELL *)(((gen_cp_ptr)B)+1));
break;
#endif
case _or_else:
case _or_last:
low_level_trace(retry_or, (PredEntry *)PREG, &(B->cp_a1));
break;
case _trust_logical_pred:
low_level_trace(retry_pred, NEXTOP(PREG,l)->u.ld.p, B->cp_args);
break;
case _retry_c:
case _retry_userc:
low_level_trace(retry_pred, PREG->u.lds.p, B->cp_args);
break;
case _retry_profiled:
opnum = Yap_op_from_opcode(NEXTOP(B->cp_ap,l)->opc);
goto restart_cp;
case _retry_me:
case _trust_me:
case _profiled_retry_me:
case _profiled_trust_me:
case _retry_me0:
case _trust_me0:
case _retry_me1:
case _trust_me1:
case _retry_me2:
case _trust_me2:
case _retry_me3:
case _trust_me3:
case _retry_me4:
case _trust_me4:
case _retry_and_mark:
case _profiled_retry_and_mark:
case _retry:
case _retry_killed:
case _trust:
case _trust_killed:
low_level_trace(retry_pred, PREG->u.ld.p, B->cp_args);
break;
default:
break;
case _or_else:
case _or_last:
low_level_trace(retry_or, (PredEntry *)ipc, &(B->cp_a1));
break;
case _trust_logical_pred:
ipc = NEXTOP(ipc,l);
go_on = TRUE;
break;
case _retry_c:
case _retry_userc:
low_level_trace(retry_pred, ipc->u.lds.p, B->cp_args);
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_me0:
case _trust_me0:
case _retry_me1:
case _trust_me1:
case _retry_me2:
case _trust_me2:
case _retry_me3:
case _trust_me3:
case _retry_me4:
case _trust_me4:
case _retry_and_mark:
case _profiled_retry_and_mark:
case _retry:
case _retry_killed:
case _trust:
case _trust_killed:
low_level_trace(retry_pred, ipc->u.ld.p, B->cp_args);
break;
case _Nstop:
case _Ystop:
low_level_trace(retry_pred, NULL, B->cp_args);
break;
default:
break;
}
}
}
#endif /* LOW_LEVEL_TRACER */
@ -6668,7 +6682,7 @@ Yap_absmi(int inp)
if (IsPairTerm(d0)) {
/* pair */
#endif
PREG = (yamop *) (PREG->u.ollll.l1);
PREG = PREG->u.ollll.l1;
SREG = RepPair(d0);
ALWAYS_GONext();
}
@ -6677,18 +6691,18 @@ Yap_absmi(int inp)
#endif
if (d0 == TermNil) {
/* empty list */
PREG = (yamop *) (PREG->u.ollll.l2);
PREG = PREG->u.ollll.l2;
JMPNext();
}
else {
/* appl or constant */
if (IsApplTerm(d0)) {
SREG = RepAppl(d0);
PREG = (yamop *) (PREG->u.ollll.l3);
PREG = PREG->u.ollll.l3;
JMPNext();
} else {
I_R = d0;
PREG = (yamop *) (PREG->u.ollll.l3);
PREG = PREG->u.ollll.l3;
JMPNext();
}
}
@ -6702,7 +6716,7 @@ Yap_absmi(int inp)
#endif
ENDP(pt0);
/* variable */
PREG = (yamop *) (PREG->u.ollll.l4);
PREG = PREG->u.ollll.l4;
JMPNext();
ENDD(d0);
}

View File

@ -289,10 +289,12 @@ decrease_log_indices(LogUpdIndex *c, yamop *suspend_code)
case _index_blob:
ipc = NEXTOP(ipc,e);
break;
case _retry:
case _retry_killed:
case _retry_profiled:
case _count_retry:
ipc = NEXTOP(ipc,p);
break;
case _retry:
case _retry_killed:
case _trust:
case _trust_killed:
decrease_ref_counter(ipc->u.ld.d, beg, end, suspend_code);

View File

@ -203,17 +203,19 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args)
break;
case retry_pred:
send_tracer_message("FAIL ", NULL, 0, NULL, args);
mname = RepAtom(AtomOfTerm(Yap_Module_Name((CODEADDR)pred)))->StrOfAE;
arity = pred->ArityOfPE;
if (pred->ModuleOfPred == 2) {
s = "recorded";
arity = 3;
} else if (arity == 0) {
s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE;
} else {
s = RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE;
if (pred != NULL) {
mname = RepAtom(AtomOfTerm(Yap_Module_Name((CODEADDR)pred)))->StrOfAE;
arity = pred->ArityOfPE;
if (pred->ModuleOfPred == 2) {
s = "recorded";
arity = 3;
} else if (arity == 0) {
s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE;
} else {
s = RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE;
}
send_tracer_message("RETRY: ", s, arity, mname, args);
}
send_tracer_message("RETRY: ", s, arity, mname, args);
break;
}
}

View File

@ -1331,7 +1331,7 @@ static int variant_complex(register CELL *pt0, register CELL *pt0_end, register
to_visit[0] = pt0;
to_visit[1] = pt0_end;
to_visit[2] = pt1;
to_visit[3] = (CELL *)d0;
to_visit[3] = (CELL *)*pt0;
*pt0 = d1;
#else
/* store the terms to visit */
@ -1372,7 +1372,7 @@ static int variant_complex(register CELL *pt0, register CELL *pt0_end, register
to_visit[0] = pt0;
to_visit[1] = pt0_end;
to_visit[2] = pt1;
to_visit[3] = (CELL *)d0;
to_visit[3] = (CELL *)*pt0;
*pt0 = d1;
#else
/* store the terms to visit */
@ -1525,7 +1525,7 @@ static int subsumes_complex(register CELL *pt0, register CELL *pt0_end, register
to_visit[0] = pt0;
to_visit[1] = pt0_end;
to_visit[2] = pt1;
to_visit[3] = (CELL *)d0;
to_visit[3] = (CELL *)*pt0;
*pt0 = d1;
#else
/* store the terms to visit */
@ -1566,7 +1566,7 @@ static int subsumes_complex(register CELL *pt0, register CELL *pt0_end, register
to_visit[0] = pt0;
to_visit[1] = pt0_end;
to_visit[2] = pt1;
to_visit[3] = (CELL *)d0;
to_visit[3] = (CELL *)*pt0;
*pt0 = d1;
#else
/* store the terms to visit */