3 struct from_tenured_refs_copier : no_fixup {
4 tenured_space* tenured;
5 std::vector<cell> *mark_stack;
7 from_tenured_refs_copier(tenured_space* tenured,
8 std::vector<cell> *mark_stack)
9 : tenured(tenured), mark_stack(mark_stack) { }
11 object* fixup_data(object* obj) {
12 if (tenured->contains_p(obj)) {
16 // Is there another forwarding pointer?
17 while (obj->forwarding_pointer_p()) {
18 object* dest = obj->forwarding_pointer();
22 if (tenured->contains_p(obj)) {
26 cell size = obj->size();
27 object* newpointer = tenured->allot(size);
29 throw must_start_gc_again();
31 memcpy(newpointer, obj, size);
32 obj->forward_to(newpointer);
34 mark_stack->push_back((cell)newpointer);