object* fixup_data(object* obj) { if (aging->contains_p(obj) || tenured->contains_p(obj)) { return obj; } // Is there another forwarding pointer? while (obj->forwarding_pointer_p()) { object* dest = obj->forwarding_pointer(); obj = dest; } if (aging->contains_p(obj) || tenured->contains_p(obj)) { return obj; } cell size = obj->size(); object* newpointer = aging->allot(size); if (!newpointer) throw must_start_gc_again(); memcpy(newpointer, obj, size); obj->forward_to(newpointer); return newpointer; }
object *promote_object(object *untagged) { cell size = untagged->size(); object *newpointer = target->allot(size); if(!newpointer) throw must_start_gc_again(); memcpy(newpointer,untagged,size); untagged->forward_to(newpointer); policy.promoted_object(newpointer); return newpointer; }