we don't need to wakeup variables that have no attributes, even if they have been bound.
This commit is contained in:
parent
117647f552
commit
8b6b9e9ac3
@ -137,6 +137,10 @@ WakeAttVar(CELL* pt1, CELL reg2)
|
|||||||
CELL *myH = H;
|
CELL *myH = H;
|
||||||
CELL *bind_ptr;
|
CELL *bind_ptr;
|
||||||
|
|
||||||
|
if (IsVarTerm(Deref(attv->Atts))) {
|
||||||
|
/* no attributes to wake */
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (IsVarTerm(reg2)) {
|
if (IsVarTerm(reg2)) {
|
||||||
if (pt1 == VarOfTerm(reg2))
|
if (pt1 == VarOfTerm(reg2))
|
||||||
return;
|
return;
|
||||||
|
@ -527,6 +527,8 @@ copy_complex_term(register CELL *pt0, register CELL *pt0_end, int share, int cop
|
|||||||
/* restore our nice, friendly, term to its original state */
|
/* restore our nice, friendly, term to its original state */
|
||||||
HB = HB0;
|
HB = HB0;
|
||||||
clean_dirty_tr(TR0);
|
clean_dirty_tr(TR0);
|
||||||
|
/* follow chain of multi-assigned variables */
|
||||||
|
close_attvar_chain(dvarsmin, dvarsmax);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
overflow:
|
overflow:
|
||||||
@ -545,6 +547,7 @@ copy_complex_term(register CELL *pt0, register CELL *pt0_end, int share, int cop
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
reset_trail(TR0);
|
reset_trail(TR0);
|
||||||
|
reset_attvars(dvarsmin, dvarsmax);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
heap_overflow:
|
heap_overflow:
|
||||||
@ -563,6 +566,7 @@ copy_complex_term(register CELL *pt0, register CELL *pt0_end, int share, int cop
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
reset_trail(TR0);
|
reset_trail(TR0);
|
||||||
|
reset_attvars(dvarsmin, dvarsmax);
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
trail_overflow:
|
trail_overflow:
|
||||||
@ -581,6 +585,7 @@ copy_complex_term(register CELL *pt0, register CELL *pt0_end, int share, int cop
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
reset_trail(TR0);
|
reset_trail(TR0);
|
||||||
|
reset_attvars(dvarsmin, dvarsmax);
|
||||||
return -4;
|
return -4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,20 +307,8 @@ copy_complex_term(CELL *pt0, CELL *pt0_end, int share, int newattvs, CELL *ptf,
|
|||||||
|
|
||||||
/* restore our nice, friendly, term to its original state */
|
/* restore our nice, friendly, term to its original state */
|
||||||
clean_dirty_tr(TR0);
|
clean_dirty_tr(TR0);
|
||||||
/* follow chain of multi-assigned variables */
|
close_attvar_chain(dvarsmin, dvarsmax);
|
||||||
if (dvarsmin) {
|
HB = HB0;
|
||||||
dvarsmin += 1;
|
|
||||||
do {
|
|
||||||
CELL *newv;
|
|
||||||
Bind(dvarsmin+1, dvarsmin[1]);
|
|
||||||
if (IsUnboundVar(dvarsmin))
|
|
||||||
break;
|
|
||||||
newv = CellPtr(*dvarsmin);
|
|
||||||
RESET_VARIABLE(dvarsmin);
|
|
||||||
dvarsmin = newv;
|
|
||||||
} while (TRUE);
|
|
||||||
HB = HB0;
|
|
||||||
}
|
|
||||||
return ground;
|
return ground;
|
||||||
|
|
||||||
overflow:
|
overflow:
|
||||||
@ -339,6 +327,8 @@ copy_complex_term(CELL *pt0, CELL *pt0_end, int share, int newattvs, CELL *ptf,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
reset_trail(TR0);
|
reset_trail(TR0);
|
||||||
|
/* follow chain of multi-assigned variables */
|
||||||
|
reset_attvars(dvarsmin, dvarsmax);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
trail_overflow:
|
trail_overflow:
|
||||||
@ -359,6 +349,7 @@ trail_overflow:
|
|||||||
{
|
{
|
||||||
tr_fr_ptr oTR = TR;
|
tr_fr_ptr oTR = TR;
|
||||||
reset_trail(TR0);
|
reset_trail(TR0);
|
||||||
|
reset_attvars(dvarsmin, dvarsmax);
|
||||||
if (!Yap_growtrail((oTR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
|
if (!Yap_growtrail((oTR-TR0)*sizeof(tr_fr_ptr *), TRUE)) {
|
||||||
return -4;
|
return -4;
|
||||||
}
|
}
|
||||||
@ -381,6 +372,7 @@ trail_overflow:
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
reset_trail(TR0);
|
reset_trail(TR0);
|
||||||
|
reset_attvars(dvarsmin, dvarsmax);
|
||||||
Yap_Error_Size = (ADDR)AuxSp-(ADDR)to_visit0;
|
Yap_Error_Size = (ADDR)AuxSp-(ADDR)to_visit0;
|
||||||
return -3;
|
return -3;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user