#endif
STATIC_INLINE void
-copy_tag(StgClosure **p, StgClosure *src, nat size, step *stp)
+copy_tag(StgClosure **p, StgClosure *src, nat size, step *stp, StgWord tag)
{
StgPtr to, tagged_to, from;
nat i;
return evacuate(p); // does the failed_to_evac stuff
}
#else
+ ASSERT(n_gc_threads == 1);
info = (W_)src->header.info;
src->header.info = &stg_EVACUATED_info;
#endif
(StgClosure *)CHARLIKE_CLOSURE((StgChar)w)
);
}
- if (q->header.info == Izh_con_info &&
+ else if (q->header.info == Izh_con_info &&
(StgInt)w >= MIN_INTLIKE && (StgInt)w <= MAX_INTLIKE) {
*p = TAG_CLOSURE(tag,
(StgClosure *)INTLIKE_CLOSURE((StgInt)w)
StgClosure *e = ((StgEvacuated*)q)->evacuee;
*p = e;
if (stp < gct->evac_step) { // optimisation
- if (HEAP_ALLOCED(e) && Bdescr((P_)e)->step < gct->evac_step) {
+ if (Bdescr((P_)e)->step < gct->evac_step) {
gct->failed_to_evac = rtsTrue;
TICK_GC_FAILED_PROMOTION();
}
barf("evacuate");
}
+
+#undef copy
+#undef copy_tag
+#undef copyPart
+#undef evacuate