/* -----------------------------------------------------------------------------
- * $Id: GC.c,v 1.4 1999/01/06 12:15:35 simonm Exp $
+ * $Id: GC.c,v 1.5 1999/01/06 12:27:47 simonm Exp $
*
* Two-space garbage collector
*
case RET_BIG:
case RET_VEC_BIG:
{
+ StgPtr q;
StgLargeBitmap *large_bitmap;
nat i;
for (i=0; i<large_bitmap->size; i++) {
bitmap = large_bitmap->bitmap[i];
+ q = p + sizeof(W_) * 8;
while (bitmap != 0) {
if ((bitmap & 1) == 0) {
(StgClosure *)*p = evacuate((StgClosure *)*p);
p++;
bitmap = bitmap >> 1;
}
+ if (i+1 < large_bitmap->size) {
+ while (p < q) {
+ (StgClosure *)*p = evacuate((StgClosure *)*p);
+ p++;
+ }
+ }
}
/* and don't forget to follow the SRT */
barf("scavenge_stack: weird activation record found on stack.\n");
}
}
-}
+}
/*-----------------------------------------------------------------------------
scavenge the large object list.