return p;
}
- info = get_itbl(q);
+ info = q->header.info;
+
+ if (IS_FORWARDING_PTR(info)) {
+ // alive!
+ return (StgClosure*)UN_FORWARDING_PTR(info);
+ }
+
+ info = INFO_PTR_TO_STRUCT(info);
+
switch (info->type) {
case IND:
p = ((StgInd *)q)->indirectee;
continue;
- case EVACUATED:
- // alive!
- return ((StgEvacuated *)q)->evacuee;
-
case TSO:
if (((StgTSO *)q)->what_next == ThreadRelocated) {
p = (StgClosure *)((StgTSO *)q)->_link;