void DOMGCOutputConstraint::executeImpl(SlotVisitor& visitor)
{
    Heap& heap = m_vm.heap;
    
    if (heap.mutatorExecutionVersion() == m_lastExecutionVersion)
        return;
    
    m_lastExecutionVersion = heap.mutatorExecutionVersion();
    
    m_clientData.forEachOutputConstraintSpace(
        [&] (Subspace& subspace) {
            auto func = [] (SlotVisitor& visitor, HeapCell* heapCell, HeapCell::Kind) {
                SetRootMarkReasonScope rootScope(visitor, SlotVisitor::RootMarkReason::DOMGCOutput);
                JSCell* cell = static_cast<JSCell*>(heapCell);
                cell->methodTable(visitor.vm())->visitOutputConstraints(cell, visitor);
            };
            
            visitor.addParallelConstraintTask(subspace.forEachMarkedCellInParallel(func));
        });
}