avoid generating suspensions on static code.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1714 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
3ac73c8881
commit
1e78b948dd
39
C/index.c
39
C/index.c
@ -11,8 +11,11 @@
|
|||||||
* File: index.c *
|
* File: index.c *
|
||||||
* comments: Indexing a Prolog predicate *
|
* comments: Indexing a Prolog predicate *
|
||||||
* *
|
* *
|
||||||
* Last rev: $Date: 2006-11-06 18:35:04 $,$Author: vsc $ *
|
* Last rev: $Date: 2006-11-08 01:53:08 $,$Author: vsc $ *
|
||||||
* $Log: not supported by cvs2svn $
|
* $Log: not supported by cvs2svn $
|
||||||
|
* Revision 1.175 2006/11/06 18:35:04 vsc
|
||||||
|
* 1estranha
|
||||||
|
*
|
||||||
* Revision 1.174 2006/10/25 02:31:07 vsc
|
* Revision 1.174 2006/10/25 02:31:07 vsc
|
||||||
* fix emulation of trust_logical
|
* fix emulation of trust_logical
|
||||||
*
|
*
|
||||||
@ -3903,7 +3906,8 @@ static UInt
|
|||||||
do_var_entries(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int first, int clleft, UInt nxtlbl){
|
do_var_entries(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int first, int clleft, UInt nxtlbl){
|
||||||
PredEntry *ap = cint->CurrentPred;
|
PredEntry *ap = cint->CurrentPred;
|
||||||
|
|
||||||
if (!IsVarTerm(t) || t != 0L) {
|
if ((!IsVarTerm(t) || t != 0L) &&
|
||||||
|
yap_flags[INDEXING_MODE_FLAG] != INDEX_MODE_SINGLE) {
|
||||||
return suspend_indexing(grp->FirstClause, grp->LastClause, ap, cint);
|
return suspend_indexing(grp->FirstClause, grp->LastClause, ap, cint);
|
||||||
}
|
}
|
||||||
return do_var_group(grp, cint, FALSE, first, clleft, nxtlbl, ap->ArityOfPE+1);
|
return do_var_group(grp, cint, FALSE, first, clleft, nxtlbl, ap->ArityOfPE+1);
|
||||||
@ -3938,12 +3942,21 @@ do_consts(GroupDef *grp, Term t, struct intermediates *cint, int compound_term,
|
|||||||
max != grp->LastClause) max++;
|
max != grp->LastClause) max++;
|
||||||
if (min != max) {
|
if (min != max) {
|
||||||
if (sreg != NULL) {
|
if (sreg != NULL) {
|
||||||
if (ap->PredFlags & LogUpdatePredFlag && max > min)
|
if (ap->PredFlags & LogUpdatePredFlag && max > min) {
|
||||||
ics->Label = suspend_indexing(min, max, ap, cint);
|
if (yap_flags[INDEXING_MODE_FLAG] == INDEX_MODE_SINGLE) {
|
||||||
else
|
ics->Label = do_index(min, max, cint, ap->ArityOfPE+1, nxtlbl, first, clleft, top);
|
||||||
ics->Label = do_compound_index(min, max, sreg, cint, compound_term, arity, argno, nxtlbl, first, last_arg, clleft, top, TRUE);
|
} else {
|
||||||
|
ics->Label = suspend_indexing(min, max, ap, cint);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ics->Label = do_compound_index(min, max, sreg, cint, compound_term, arity, argno, nxtlbl, first, last_arg, clleft, top, TRUE);
|
||||||
|
}
|
||||||
} else if (ap->PredFlags & LogUpdatePredFlag) {
|
} else if (ap->PredFlags & LogUpdatePredFlag) {
|
||||||
ics->Label = suspend_indexing(min, max, cint->CurrentPred, cint);
|
if (yap_flags[INDEXING_MODE_FLAG] == INDEX_MODE_SINGLE) {
|
||||||
|
ics->Label = do_index(min, max, cint, ap->ArityOfPE+1, nxtlbl, first, clleft, top);
|
||||||
|
} else {
|
||||||
|
ics->Label = suspend_indexing(min, max, cint->CurrentPred, cint);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ics->Label = do_index(min, max, cint, argno+1, nxtlbl, first, clleft, top);
|
ics->Label = do_index(min, max, cint, argno+1, nxtlbl, first, clleft, top);
|
||||||
}
|
}
|
||||||
@ -3977,7 +3990,11 @@ do_blobs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
|
|||||||
max != grp->LastClause) max++;
|
max != grp->LastClause) max++;
|
||||||
if (min != max &&
|
if (min != max &&
|
||||||
(ap->PredFlags & LogUpdatePredFlag)) {
|
(ap->PredFlags & LogUpdatePredFlag)) {
|
||||||
ics->Label = suspend_indexing(min, max, ap, cint);
|
if (yap_flags[INDEXING_MODE_FLAG] == INDEX_MODE_SINGLE) {
|
||||||
|
ics->Label = do_index(min, max, cint, ap->ArityOfPE+1, nxtlbl, first, clleft, top);
|
||||||
|
} else {
|
||||||
|
ics->Label = suspend_indexing(min, max, ap, cint);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ics->Label = do_index(min, max, cint, argno+1, nxtlbl, first, clleft, top);
|
ics->Label = do_index(min, max, cint, argno+1, nxtlbl, first, clleft, top);
|
||||||
}
|
}
|
||||||
@ -4060,7 +4077,11 @@ do_pair(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int first
|
|||||||
return (UInt)(min->CurrentCode);
|
return (UInt)(min->CurrentCode);
|
||||||
}
|
}
|
||||||
if (min != max && !IsPairTerm(t)) {
|
if (min != max && !IsPairTerm(t)) {
|
||||||
return suspend_indexing(min, max, cint->CurrentPred, cint);
|
if (yap_flags[INDEXING_MODE_FLAG] == INDEX_MODE_SINGLE) {
|
||||||
|
return do_index(min, max, cint, cint->CurrentPred->ArityOfPE+1, nxtlbl, first, clleft, top);
|
||||||
|
} else {
|
||||||
|
return suspend_indexing(min, max, cint->CurrentPred, cint);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return do_compound_index(min, max, (IsPairTerm(t) ? RepPair(t) : NULL), cint, 0, 2, argno, nxtlbl, first, last_arg, clleft, top, TRUE);
|
return do_compound_index(min, max, (IsPairTerm(t) ? RepPair(t) : NULL), cint, 0, 2, argno, nxtlbl, first, last_arg, clleft, top, TRUE);
|
||||||
}
|
}
|
||||||
|
@ -161,8 +161,6 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args)
|
|||||||
LOCK(Yap_heap_regs->low_level_trace_lock);
|
LOCK(Yap_heap_regs->low_level_trace_lock);
|
||||||
sc = Yap_heap_regs;
|
sc = Yap_heap_regs;
|
||||||
vsc_count++;
|
vsc_count++;
|
||||||
if (vsc_count < 59000)
|
|
||||||
return;
|
|
||||||
#ifdef COMMENTED
|
#ifdef COMMENTED
|
||||||
if (worker_id != 04 || worker_id != 03) return;
|
if (worker_id != 04 || worker_id != 03) return;
|
||||||
// if (vsc_count == 218280)
|
// if (vsc_count == 218280)
|
||||||
|
Reference in New Issue
Block a user