void TypeProfilerLog::visit(SlotVisitor& visitor) { for (LogEntry* entry = m_logStartPtr; entry != m_currentLogEntryPtr; ++entry) { visitor.appendUnbarriered(entry->value); if (StructureID id = entry->structureID) { Structure* structure = visitor.heap()->structureIDTable().get(id); visitor.appendUnbarriered(structure); } } }
void HandleSet::visitStrongHandles(SlotVisitor& visitor) { Node* end = m_strongList.end(); for (Node* node = m_strongList.begin(); node != end; node = node->next()) { #if ENABLE(GC_VALIDATION) RELEASE_ASSERT(isLiveNode(node)); #endif visitor.appendUnbarriered(*node->slot()); } }
void Plan::checkLivenessAndVisitChildren(SlotVisitor& visitor) { if (!isKnownToBeLiveDuringGC()) return; cleanMustHandleValuesIfNecessary(); for (unsigned i = mustHandleValues.size(); i--;) visitor.appendUnbarriered(mustHandleValues[i]); visitor.appendUnbarriered(codeBlock); visitor.appendUnbarriered(codeBlock->alternative()); visitor.appendUnbarriered(profiledDFGCodeBlock); if (inlineCallFrames) { for (auto* inlineCallFrame : *inlineCallFrames) { ASSERT(inlineCallFrame->baselineCodeBlock.get()); visitor.appendUnbarriered(inlineCallFrame->baselineCodeBlock.get()); } } weakReferences.visitChildren(visitor); transitions.visitChildren(visitor); }
void WeakBlock::specializedVisit(ContainerType& container, SlotVisitor& visitor) { HeapVersion markingVersion = visitor.markingVersion(); size_t count = weakImplCount(); for (size_t i = 0; i < count; ++i) { WeakImpl* weakImpl = &weakImpls()[i]; if (weakImpl->state() != WeakImpl::Live) continue; WeakHandleOwner* weakHandleOwner = weakImpl->weakHandleOwner(); if (!weakHandleOwner) continue; JSValue jsValue = weakImpl->jsValue(); if (container.isMarkedConcurrently(markingVersion, jsValue.asCell())) continue; if (!weakHandleOwner->isReachableFromOpaqueRoots(Handle<Unknown>::wrapSlot(&const_cast<JSValue&>(jsValue)), weakImpl->context(), visitor)) continue; visitor.appendUnbarriered(jsValue); } }
void ShadowChicken::visitChildren(SlotVisitor& visitor) { for (unsigned i = m_logCursor - m_log; i--;) { JSObject* callee = m_log[i].callee; if (callee != Packet::tailMarker() && callee != Packet::throwMarker()) visitor.appendUnbarriered(callee); if (callee != Packet::throwMarker()) visitor.appendUnbarriered(m_log[i].scope); if (callee == Packet::tailMarker()) { visitor.appendUnbarriered(m_log[i].thisValue); visitor.appendUnbarriered(m_log[i].codeBlock); } } for (unsigned i = m_stack.size(); i--; ) { Frame& frame = m_stack[i]; visitor.appendUnbarriered(frame.thisValue); visitor.appendUnbarriered(frame.callee); if (frame.scope) visitor.appendUnbarriered(frame.scope); if (frame.codeBlock) visitor.appendUnbarriered(frame.codeBlock); } }