/** * Called when the immix::GC object wishes to mark an object. * * @returns true if the object is not already marked, and in the Immix * space; otherwise false. */ inline bool mark_address(memory::Address addr, immix::MarkStack& ms, bool push = true) { Object* obj = addr.as<Object>(); if(obj->marked_p(object_memory_->mark())) return false; obj->mark(object_memory_, object_memory_->mark()); gc_->inc_marked_objects(); if(push) ms.push_back(addr); // If this is a young object, let the GC know not to try and mark // the block it's in. return obj->in_immix_p(); }
bool mark_address(immix::Address addr, immix::MarkStack& ms) { Object* obj = addr.as<Object>(); if(obj->marked_p()) return false; obj->mark(gc_->which_mark()); gc_->inc_marked_objects(); ms.push_back(addr); if(obj->in_immix_p()) return true; // If this is a young object, let the GC know not to try and mark // the block it's in. return false; }