diff --git a/C/attvar.c b/C/attvar.c index 471e45443..d883ea86e 100644 --- a/C/attvar.c +++ b/C/attvar.c @@ -115,7 +115,6 @@ CopyAttVar(CELL *orig, CELL ***to_visit_ptr, CELL *res) } else if (IsAtomicTerm(t)) { newv->Atts[2*j+1] = t; } else { -#ifdef RATIONAL_TREES to_visit[0] = attv->Atts+2*j; to_visit[1] = attv->Atts+2*j+1; to_visit[2] = newv->Atts+2*j+1; @@ -123,12 +122,6 @@ CopyAttVar(CELL *orig, CELL ***to_visit_ptr, CELL *res) /* fool the system into thinking we had a variable there */ attv->Atts[2*j+1] = AbsAppl(H); to_visit += 4; -#else - to_visit[0] = attv->Atts+2*j; - to_visit[1] = attv->Atts+2*j+1; - to_visit[2] = newv->Atts+2*j+1; - to_visit += 3; -#endif } } *to_visit_ptr = to_visit; diff --git a/C/corout.c b/C/corout.c index 3a04863e9..4321b537b 100644 --- a/C/corout.c +++ b/C/corout.c @@ -315,7 +315,8 @@ copy_suspended_goals(sus_record *pt, CELL ***to_visit_ptr) to_visit[0] = &(pt->SG)-1; to_visit[1] = &(pt->SG); to_visit[2] = &(gf->SG); - *to_visit_ptr = to_visit+3; + to_visit[3] = (CELL *)(*to_visit[0]); + *to_visit_ptr = to_visit+4; #ifdef MULTI_ASSIGNMENT_VARIABLES gf->NS = UpdateSVarList(gf); #endif diff --git a/C/utilpreds.c b/C/utilpreds.c index 218969454..b691d82a7 100644 --- a/C/utilpreds.c +++ b/C/utilpreds.c @@ -59,8 +59,8 @@ copy_complex_term(register CELL *pt0, register CELL *pt0_end, CELL *ptf, CELL *H { CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace(); - tr_fr_ptr TR0 = TR; CELL *HB0 = HB; + tr_fr_ptr TR0 = TR; #ifdef COROUTINING CELL *dvars = NULL; #endif @@ -185,41 +185,20 @@ copy_complex_term(register CELL *pt0, register CELL *pt0_end, CELL *ptf, CELL *H if (IsAttachedTerm((CELL)ptd0)) { /* if unbound, call the standard copy term routine */ CELL **bp[1]; - tr_fr_ptr CurTR; + + if (dvars == NULL) { + dvars = (CELL *)Yap_ReadTimedVar(DelayedVars); + } if (ptd0 >= dvars) { *ptf++ = (CELL) ptd0; } else { - if (dvars == NULL) { - dvars = (CELL *)Yap_ReadTimedVar(DelayedVars); - } bp[0] = to_visit; - CurTR = TR; HB = HB0; if (!attas[ExtFromCell(ptd0)].copy_term_op(ptd0, bp, ptf)) { goto overflow; } to_visit = bp[0]; HB = HLow; - if (CurTR != TR) { - /* Problem here is that the attached routine might - * have changed the list of suspended goals and stored - * new entries in the trail. This should be quite - * rare, so for simplicity we just swap cells from - * bottom and top of Trail, not nice but not worth - * complicating everything else. - */ - CELL *pt1 = (CELL *)TR0; - CELL *pt2 = (CELL *)CurTR; - - while (pt2 < (CELL *)TR) { - CELL o = *pt1; - pt1++; - pt2++; - pt1[-1] = pt2[-1]; - pt2[-1] = o; - } - TR0 = (tr_fr_ptr)pt1; - } ptf++; Bind_Global(ptd0, ptf[-1]); }