fix garbage collector not to try to garbage collect when we ask for large

chunks of stack in a single go.


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1684 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc
2006-08-07 18:51:44 +00:00
parent f69ba78f02
commit 0f714371e5
16 changed files with 74 additions and 44 deletions

View File

@@ -313,7 +313,7 @@ CopyTerm(Term inp, UInt arity) {
XREGS[arity+1] = t;
H = Hi-1;
if (res == -1) { /* handle overflow */
if (!Yap_gc(arity+1, ENV, P)) {
if (!Yap_gcl((ASP-H)*sizeof(CELL), arity+1, ENV, P)) {
Yap_Error(OUT_OF_STACK_ERROR, TermNil, Yap_ErrorMessage);
return FALSE;
}
@@ -350,7 +350,7 @@ CopyTerm(Term inp, UInt arity) {
H = Hi;
XREGS[arity+1] = t;
if (res == -1) { /* handle overflow */
if (!Yap_gc(arity+1, ENV, P)) {
if (!Yap_gcl((ASP-H)*sizeof(CELL), arity+1, ENV, P)) {
Yap_Error(OUT_OF_STACK_ERROR, TermNil, Yap_ErrorMessage);
return FALSE;
}
@@ -387,7 +387,7 @@ CopyTerm(Term inp, UInt arity) {
H = HB0;
XREGS[arity+1] = t;
if (res == -1) {
if (!Yap_gc(arity+1, ENV, P)) {
if (!Yap_gcl((ASP-H)*sizeof(CELL),arity+1, ENV, P)) {
Yap_Error(OUT_OF_STACK_ERROR, TermNil, Yap_ErrorMessage);
return FALSE;
}
@@ -631,7 +631,7 @@ CopyTermNoDelays(Term inp) {
if (res) {
H = Hi;
if (res == -1) { /* handle overflow */
if (!Yap_gc(2, ENV, P)) {
if (!Yap_gcl((ASP-H)*sizeof(CELL), 2, ENV, P)) {
Yap_Error(OUT_OF_STACK_ERROR, TermNil, Yap_ErrorMessage);
return(FALSE);
}
@@ -664,7 +664,7 @@ CopyTermNoDelays(Term inp) {
if (res) {
H = HB0;
if (res == -1) {
if (!Yap_gc(2, ENV, P)) {
if (!Yap_gcl((ASP-H)*sizeof(CELL), 2, ENV, P)) {
Yap_Error(OUT_OF_STACK_ERROR, TermNil, Yap_ErrorMessage);
return(FALSE);
}
@@ -809,6 +809,7 @@ static Term vars_in_complex_term(register CELL *pt0, register CELL *pt0_end, Ter
clean_tr(TR0);
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
H = InitialH;
Yap_Error_Size = (ASP-H)*sizeof(CELL);
return 0L;
}
@@ -840,7 +841,7 @@ p_variables_in_term(void) /* variables in term t */
ArityOfFunctor(f), ARG2);
}
if (out == 0L) {
if (!Yap_gc(3, ENV, P)) {
if (!Yap_gcl(Yap_Error_Size, 3, ENV, P)) {
Yap_Error(OUT_OF_STACK_ERROR, TermNil, "in term_variables");
return FALSE;
}
@@ -871,7 +872,7 @@ p_term_variables(void) /* variables in term t */
ArityOfFunctor(f), TermNil);
}
if (out == 0L) {
if (!Yap_gc(2, ENV, P)) {
if (!Yap_gcl((ASP-H)*sizeof(CELL), 2, ENV, P)) {
Yap_Error(OUT_OF_STACK_ERROR, TermNil, "in term_variables");
return FALSE;
}
@@ -902,7 +903,7 @@ p_term_variables3(void) /* variables in term t */
ArityOfFunctor(f), ARG3);
}
if (out == 0L) {
if (!Yap_gc(3, ENV, P)) {
if (!Yap_gcl((ASP-H)*sizeof(CELL), 3, ENV, P)) {
Yap_Error(OUT_OF_STACK_ERROR, TermNil, "in term_variables");
return FALSE;
}
@@ -1681,7 +1682,7 @@ p_variant(void) /* variant terms t1 and t2 */
}
error:
if (out == -1) {
if (!Yap_gc(2, ENV, P)) {
if (!Yap_gcl((ASP-H)*sizeof(CELL), 2, ENV, P)) {
Yap_Error(OUT_OF_STACK_ERROR, TermNil, "in variant");
return FALSE;
}