fix clause to support new execute_cpred

This commit is contained in:
Vítor Santos Costa 2008-09-01 16:30:37 +01:00
parent 83ebf097df
commit 84ad9adff0

View File

@ -5044,12 +5044,18 @@ p_log_update_clause(void)
PredEntry *pe; PredEntry *pe;
Term t1 = Deref(ARG1); Term t1 = Deref(ARG1);
Int ret; Int ret;
yamop *new_cp;
if (P->opc == Yap_opcode(_execute_cpred)) {
new_cp = CP;
} else {
new_cp = P;
}
pe = get_pred(t1, Deref(ARG2), "clause/3"); pe = get_pred(t1, Deref(ARG2), "clause/3");
if (pe == NULL || EndOfPAEntr(pe)) if (pe == NULL || EndOfPAEntr(pe))
return FALSE; return FALSE;
LOCK(pe->PELock); LOCK(pe->PELock);
ret = fetch_next_lu_clause(pe, pe->CodeOfPred, t1, ARG3, ARG4, P, TRUE); ret = fetch_next_lu_clause(pe, pe->CodeOfPred, t1, ARG3, ARG4, new_cp, TRUE);
return ret; return ret;
} }
@ -5183,12 +5189,18 @@ p_log_update_clause_erase(void)
PredEntry *pe; PredEntry *pe;
Term t1 = Deref(ARG1); Term t1 = Deref(ARG1);
Int ret; Int ret;
yamop *new_cp;
if (P->opc == Yap_opcode(_execute_cpred)) {
new_cp = CP;
} else {
new_cp = P;
}
pe = get_pred(t1, Deref(ARG2), "clause/3"); pe = get_pred(t1, Deref(ARG2), "clause/3");
if (pe == NULL || EndOfPAEntr(pe)) if (pe == NULL || EndOfPAEntr(pe))
return FALSE; return FALSE;
LOCK(pe->PELock); LOCK(pe->PELock);
ret = fetch_next_lu_clause_erase(pe, pe->CodeOfPred, t1, ARG3, ARG4, P, TRUE); ret = fetch_next_lu_clause_erase(pe, pe->CodeOfPred, t1, ARG3, ARG4, new_cp, TRUE);
return ret; return ret;
} }
@ -5287,12 +5299,18 @@ p_log_update_clause0(void)
PredEntry *pe; PredEntry *pe;
Term t1 = Deref(ARG1); Term t1 = Deref(ARG1);
Int ret; Int ret;
yamop *new_cp;
if (P->opc == Yap_opcode(_execute_cpred)) {
new_cp = CP;
} else {
new_cp = P;
}
pe = get_pred(t1, Deref(ARG2), "clause/3"); pe = get_pred(t1, Deref(ARG2), "clause/3");
if (pe == NULL || EndOfPAEntr(pe)) if (pe == NULL || EndOfPAEntr(pe))
return FALSE; return FALSE;
LOCK(pe->PELock); LOCK(pe->PELock);
ret = fetch_next_lu_clause0(pe, pe->CodeOfPred, t1, ARG3, P, TRUE); ret = fetch_next_lu_clause0(pe, pe->CodeOfPred, t1, ARG3, new_cp, TRUE);
return ret; return ret;
} }
@ -5612,12 +5630,18 @@ p_static_clause(void)
{ {
PredEntry *pe; PredEntry *pe;
Term t1 = Deref(ARG1); Term t1 = Deref(ARG1);
yamop * new_cp;
if (P->opc == Yap_opcode(_execute_cpred)) {
new_cp = CP;
} else {
new_cp = P;
}
pe = get_pred(t1, Deref(ARG2), "clause/3"); pe = get_pred(t1, Deref(ARG2), "clause/3");
if (pe == NULL || EndOfPAEntr(pe)) if (pe == NULL || EndOfPAEntr(pe))
return FALSE; return FALSE;
LOCK(pe->PELock); LOCK(pe->PELock);
return fetch_next_static_clause(pe, pe->CodeOfPred, ARG1, ARG3, ARG4, P, TRUE); return fetch_next_static_clause(pe, pe->CodeOfPred, ARG1, ARG3, ARG4, new_cp, TRUE);
} }
static Int /* $hidden_predicate(P) */ static Int /* $hidden_predicate(P) */