return;
case WEAK:
- case STABLE_NAME:
+ case PRIM:
+ case MUT_PRIM:
copy_tag(p,info,q,sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen,tag);
return;
}
}
- case TREC_HEADER:
- copy(p,info,q,sizeofW(StgTRecHeader),gen);
- return;
-
- case TVAR_WATCH_QUEUE:
- copy(p,info,q,sizeofW(StgTVarWatchQueue),gen);
- return;
-
- case TVAR:
- copy(p,info,q,sizeofW(StgTVar),gen);
- return;
-
case TREC_CHUNK:
copy(p,info,q,sizeofW(StgTRecChunk),gen);
return;
- case ATOMIC_INVARIANT:
- copy(p,info,q,sizeofW(StgAtomicInvariant),gen);
- return;
-
- case INVARIANT_CHECK_QUEUE:
- copy(p,info,q,sizeofW(StgInvariantCheckQueue),gen);
- return;
-
default:
barf("evacuate: strange closure type %d", (int)(INFO_PTR_TO_STRUCT(info)->type));
}
} while (info_ptr == (W_)&stg_WHITEHOLE_info);
// make sure someone else didn't get here first...
- if (IS_FORWARDING_PTR(p) ||
+ if (IS_FORWARDING_PTR(info_ptr) ||
INFO_PTR_TO_STRUCT(info_ptr)->type != THUNK_SELECTOR) {
// v. tricky now. The THUNK_SELECTOR has been evacuated
// by another thread, and is now either a forwarding ptr or IND.