/* -----------------------------------------------------------------------------
- * $Id: GC.c,v 1.108 2001/07/25 09:14:21 simonmar Exp $
+ * $Id: GC.c,v 1.109 2001/07/25 12:18:26 simonmar Exp $
*
* (c) The GHC Team 1998-1999
*
scavenge_static();
}
- // scavenge objects in compacted generation
- if (mark_stack_bdescr != NULL && !mark_stack_empty()) {
- scavenge_mark_stack();
- flag = rtsTrue;
- }
-
/* When scavenging the older generations: Objects may have been
* evacuated from generations <= N into older generations, and we
* need to scavenge these objects. We're going to try to ensure that
{
long gen;
int st;
+
loop2:
+ // scavenge objects in compacted generation
+ if (mark_stack_bdescr != NULL && !mark_stack_empty()) {
+ scavenge_mark_stack();
+ flag = rtsTrue;
+ }
+
for (gen = RtsFlags.GcFlags.generations; --gen >= 0; ) {
for (st = generations[gen].n_steps; --st >= 0; ) {
if (gen == 0 && st == 0 && RtsFlags.GcFlags.generations > 1) {
case CONSTR_2_0:
((StgClosure *)p)->payload[1] = evacuate(((StgClosure *)p)->payload[1]);
((StgClosure *)p)->payload[0] = evacuate(((StgClosure *)p)->payload[0]);
- mark(p+1,Bdescr(p));
break;
case FUN_1_0:
case CONSTR_1_0:
case CONSTR_1_1:
((StgClosure *)p)->payload[0] = evacuate(((StgClosure *)p)->payload[0]);
- mark(p+1,Bdescr(p));
break;
case FUN_0_1:
scavenge_srt(info);
case CONSTR_0_1:
case CONSTR_0_2:
- mark(p+1,Bdescr(p));
break;
case FUN:
recordOldToNewPtrs((StgMutClosure *)p);
}
failed_to_evac = rtsFalse;
- mark(p+1,Bdescr(p));
break;
case MUT_VAR:
((StgMutVar *)p)->var = evacuate(((StgMutVar *)p)->var);
evac_gen = saved_evac_gen;
failed_to_evac = rtsFalse;
- mark(p+1,Bdescr(p));
break;
case MUT_CONS: