object* allot(cell size) { if (here + size > end) return NULL; object* obj = bump_allocator::allot(size); starts.record_object_start_offset(obj); return obj; }
object* allot(cell size) { object* obj = free_list_allocator<object>::allot(size); if (obj) { starts.record_object_start_offset(obj); return obj; } return NULL; }
void operator()(object *old_address, object *new_address, cell size) { slot_visitor<compaction_fixup> slot_forwarder(parent,fixup); slot_forwarder.visit_slots(new_address); code_block_visitor<compaction_fixup> code_forwarder(parent,fixup); code_forwarder.visit_object_code_block(new_address); starts->record_object_start_offset(new_address); }
void sweep() { free_list_allocator<object>::sweep(); starts.update_for_sweep(&this->state); }