ifix some wierd cases in indexing code:

would not look at next argument
problem with pvar as last clause (R Camacho).


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1337 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2005-07-05 18:32:32 +00:00
parent d62a9e2ffa
commit f6da8078ae

View File

@ -11,8 +11,11 @@
* File: index.c *
* comments: Indexing a Prolog predicate *
* *
* Last rev: $Date: 2005-06-04 07:27:34 $,$Author: ricroc $ *
* Last rev: $Date: 2005-07-05 18:32:32 $,$Author: vsc $ *
* $Log: not supported by cvs2svn $
* Revision 1.137 2005/06/04 07:27:34 ricroc
* long int support for tabling
*
* Revision 1.136 2005/06/03 08:26:32 ricroc
* float support for tabling
*
@ -462,12 +465,12 @@ insort(ClauseDef base[], CELL *p, CELL *q, int my_p)
/* copy to a new list of terms */
static
void msort(ClauseDef *base, Int *pt, Int size, int my_p)
void msort(ClauseDef *base, CELL *pt, Int size, int my_p)
{
if (size > 2) {
Int half_size = size / 2;
Int *pt_left, *pt_right, *end_pt, *end_pt_left;
CELL *pt_left, *pt_right, *end_pt, *end_pt_left;
int left_p, right_p;
if (size < 50) {
@ -881,6 +884,9 @@ has_cut(yamop *pc)
case _put_x_val:
pc = NEXTOP(pc,xx);
break;
case _put_xx_val:
pc = NEXTOP(pc,xxxx);
break;
/* instructions type yx */
case _get_y_var:
case _get_y_val:
@ -1528,6 +1534,25 @@ add_info(ClauseDef *clause, UInt regno)
}
cl = NEXTOP(cl,xx);
break;
case _put_xx_val:
if (regcopy_in(myregs, nofregs, cl->u.xxxx.xl1)) {
nofregs = add_regcopy(myregs, nofregs, cl->u.xxxx.xr1);
} else if (regcopy_in(myregs, nofregs, cl->u.xxxx.xr1) &&
(nofregs = delete_regcopy(myregs, nofregs, cl->u.xxxx.xr1)) == 0 &&
!ycopy) {
clause->Tag = (CELL)NULL;
return;
}
if (regcopy_in(myregs, nofregs, cl->u.xxxx.xl2)) {
nofregs = add_regcopy(myregs, nofregs, cl->u.xxxx.xr2);
} else if (regcopy_in(myregs, nofregs, cl->u.xxxx.xr2) &&
(nofregs = delete_regcopy(myregs, nofregs, cl->u.xxxx.xr2)) == 0 &&
!ycopy) {
clause->Tag = (CELL)NULL;
return;
}
cl = NEXTOP(cl,xxxx);
break;
case _glist_valx:
case _gl_void_varx:
case _gl_void_valx:
@ -3025,6 +3050,7 @@ groups_in(ClauseDef *min, ClauseDef *max, GroupDef *grp)
(!IsVarTerm(min->Tag)));
if (min <= max && min->Tag == (_var+1)*sizeof(CELL)) {
min++;
if (min < max)
goto restart_loop;
}
grp->LastClause = min-1;
@ -3578,7 +3604,7 @@ do_consts(GroupDef *grp, Term t, struct intermediates *cint, int compound_term,
if (ap->PredFlags & LogUpdatePredFlag && max > min)
ics->Label = suspend_indexing(min, max, ap, cint);
else
ics->Label = do_compound_index(min, max, sreg, cint, compound_term, arity, argno+1, nxtlbl, first, last_arg, clleft, top, TRUE);
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) {
ics->Label = suspend_indexing(min, max, cint->CurrentPred, cint);
} else {
@ -3668,7 +3694,7 @@ do_funcs(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int firs
} else {
sreg = NULL;
}
ifs->Label = do_compound_index(min, max, sreg, cint, 0, ArityOfFunctor(f), argno+1, nxtlbl, first, last_arg, clleft, top, TRUE);
ifs->Label = do_compound_index(min, max, sreg, cint, 0, ArityOfFunctor(f), argno, nxtlbl, first, last_arg, clleft, top, TRUE);
}
grp->FirstClause = min = max+1;
}
@ -3699,7 +3725,7 @@ do_pair(GroupDef *grp, Term t, struct intermediates *cint, UInt argno, int first
if (min != max && !IsPairTerm(t)) {
return suspend_indexing(min, max, cint->CurrentPred, cint);
}
return do_compound_index(min, max, (IsPairTerm(t) ? RepPair(t) : NULL), cint, 0, 2, argno+1, 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);
}
static void
@ -5520,7 +5546,7 @@ replace_index_block(ClauseUnion *parent_block, yamop *cod, yamop *ncod, PredEntr
c->u.ParentIndex = ncl;
c = c->SiblingIndex;
}
Yap_FreeCodeSpace((CODEADDR)cl);
Yap_FreeCodeSpace((char *)cl);
} else {
StaticIndex
*cl = ClauseCodeToStaticIndex(cod),
@ -5535,7 +5561,7 @@ replace_index_block(ClauseUnion *parent_block, yamop *cod, yamop *ncod, PredEntr
}
c->SiblingIndex = ncl;
}
Yap_FreeCodeSpace((CODEADDR)cl);
Yap_FreeCodeSpace((char *)cl);
}
}