/** * Allocates a new InflatedHeader object for the specified obj ObjectHeader. * * /param obj The ObjectHeader that is to be inflated. * /returns the InflatedHeader representing the new inflated object header. */ InflatedHeader* InflatedHeaders::allocate(ObjectHeader* obj) { bool needs_gc = false; InflatedHeader* header = allocator_->allocate(&needs_gc); header->set_object(obj); if(needs_gc) { state_->om->collect_mature_now = true; } return header; }
/** * Allocates a new InflatedHeader object for the specified obj ObjectHeader. * * /param obj The ObjectHeader that is to be inflated. * /returns the InflatedHeader representing the new inflated object header. */ InflatedHeader* InflatedHeaders::allocate(ObjectHeader* obj) { if(!free_list_) allocate_chunk(); InflatedHeader* header = free_list_; free_list_ = header->next(); in_use_++; header->set_object(obj); return header; }
void set_forward(ObjectHeader* fwd) { // If the header is inflated, repoint it. if(inflated_header_p()) { InflatedHeader* ih = deflate_header(); ih->set_object(fwd); fwd->set_inflated_header(ih); } flags().Forwarded = 1; // DO NOT USE klass() because we need to get around the // write barrier! ivars_ = reinterpret_cast<Object*>(fwd); }