fix bug in infinite lists.
This commit is contained in:
parent
2e2e2deb91
commit
1a9244bce2
10
C/dbase.c
10
C/dbase.c
@ -663,7 +663,7 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
|||||||
/* we will need to link afterwards */
|
/* we will need to link afterwards */
|
||||||
ap2 = RepAppl(d0);
|
ap2 = RepAppl(d0);
|
||||||
#ifdef RATIONAL_TREES
|
#ifdef RATIONAL_TREES
|
||||||
if (ap2 >= tbase && ap2 < StoPoint) {
|
if (ap2 >= tbase && ap2 <= StoPoint) {
|
||||||
db_check_trail(dbg->lr+1);
|
db_check_trail(dbg->lr+1);
|
||||||
*dbg->lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
*dbg->lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
||||||
*StoPoint++ = d0;
|
*StoPoint++ = d0;
|
||||||
@ -759,10 +759,10 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
|||||||
else if (IsPairTerm(d0)) {
|
else if (IsPairTerm(d0)) {
|
||||||
/* we will need to link afterwards */
|
/* we will need to link afterwards */
|
||||||
CELL *ap2 = RepPair(d0);
|
CELL *ap2 = RepPair(d0);
|
||||||
if (ap2 >= tbase && ap2 < StoPoint) {
|
if (ap2 >= tbase && ap2 <= StoPoint) {
|
||||||
*StoPoint++ = d0;
|
|
||||||
db_check_trail(dbg->lr+1);
|
db_check_trail(dbg->lr+1);
|
||||||
*dbg->lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
*dbg->lr++ = ToSmall((CELL)(StoPoint)-(CELL)(tbase));
|
||||||
|
*StoPoint++ = d0;
|
||||||
++pt0;
|
++pt0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -786,7 +786,7 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
|||||||
do {
|
do {
|
||||||
lp = RepPair(tt);
|
lp = RepPair(tt);
|
||||||
|
|
||||||
if (lp >= tbase && lp < StoPoint) {
|
if (lp >= tbase && lp <= StoPoint) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
CheckDBOverflow(2);
|
CheckDBOverflow(2);
|
||||||
@ -801,7 +801,7 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
|
|||||||
IsPairTerm(tt) &&
|
IsPairTerm(tt) &&
|
||||||
/* have same direction to avoid infinite terms X = [a|X] */
|
/* have same direction to avoid infinite terms X = [a|X] */
|
||||||
(RepPair(tt)-lp)*direction > 0);
|
(RepPair(tt)-lp)*direction > 0);
|
||||||
if (lp >= tbase && lp < StoPoint) {
|
if (lp >= tbase && lp <= StoPoint) {
|
||||||
CodeMax[-1] = tt;
|
CodeMax[-1] = tt;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user