bool JSWorkerLocationOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) { JSWorkerLocation* jsWorkerLocation = jsCast<JSWorkerLocation*>(handle.get().asCell()); if (!isObservable(jsWorkerLocation)) return false; WorkerLocation* root = &jsWorkerLocation->impl(); return visitor.containsOpaqueRoot(root); }
void JSWebGLRenderingContext::visitChildren(SlotVisitor& visitor) { ASSERT_GC_OBJECT_INHERITS(this, &s_info); COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag); ASSERT(structure()->typeInfo().overridesVisitChildren()); Base::visitChildren(visitor); visitor.addOpaqueRoot(impl()); }
void JSEventListener::visitJSFunction(SlotVisitor& visitor) { // If m_wrapper is 0, then m_jsFunction is zombied, and should never be accessed. if (!m_wrapper) return; visitor.appendUnbarrieredWeak(&m_jsFunction); }
void Arguments::visitChildren(SlotVisitor& visitor) { JSObject::visitChildren(visitor); if (d->registerArray) visitor.appendValues(d->registerArray.get(), d->numParameters); if (d->extraArguments) { unsigned numExtraArguments = d->numArguments - d->numParameters; visitor.appendValues(d->extraArguments, numExtraArguments); } visitor.append(&d->callee); if (d->activation) visitor.append(&d->activation); }
void ProxyRevoke::visitChildren(JSCell* cell, SlotVisitor& visitor) { ProxyRevoke* thisObject = jsCast<ProxyRevoke*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); visitor.append(&thisObject->m_proxy); }
void JSWebAssemblyMemory::visitChildren(JSCell* cell, SlotVisitor& visitor) { auto* thisObject = jsCast<JSWebAssemblyMemory*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); visitor.append(&thisObject->m_bufferWrapper); }
bool JSMutationObserverOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) { for (auto* node : jsCast<JSMutationObserver*>(handle.slot()->asCell())->wrapped().observedNodes()) { if (visitor.containsOpaqueRoot(root(node))) return true; } return false; }
void JSCustomGetterSetterFunction::visitChildren(JSCell* cell, SlotVisitor& visitor) { JSCustomGetterSetterFunction* thisObject = jsCast<JSCustomGetterSetterFunction*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); visitor.append(thisObject->m_getterSetter); }
void UnlinkedCodeBlock::visitChildren(JSCell* cell, SlotVisitor& visitor) { UnlinkedCodeBlock* thisObject = jsCast<UnlinkedCodeBlock*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); for (FunctionExpressionVector::iterator ptr = thisObject->m_functionDecls.begin(), end = thisObject->m_functionDecls.end(); ptr != end; ++ptr) visitor.append(ptr); for (FunctionExpressionVector::iterator ptr = thisObject->m_functionExprs.begin(), end = thisObject->m_functionExprs.end(); ptr != end; ++ptr) visitor.append(ptr); visitor.appendValues(thisObject->m_constantRegisters.data(), thisObject->m_constantRegisters.size()); if (thisObject->m_unlinkedInstructions) visitor.reportExtraMemoryVisited(thisObject->m_unlinkedInstructions->sizeInBytes()); if (thisObject->m_rareData) { for (size_t i = 0, end = thisObject->m_rareData->m_regexps.size(); i != end; i++) visitor.append(&thisObject->m_rareData->m_regexps[i]); } }
void FunctionRareData::visitChildren(JSCell* cell, SlotVisitor& visitor) { FunctionRareData* rareData = jsCast<FunctionRareData*>(cell); rareData->m_objectAllocationProfile.visitAggregate(visitor); rareData->m_internalFunctionAllocationProfile.visitAggregate(visitor); visitor.append(rareData->m_boundFunctionStructure); }
void InternalFunction::visitChildren(JSCell* cell, SlotVisitor& visitor) { InternalFunction* thisObject = jsCast<InternalFunction*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); visitor.append(&thisObject->m_originalName); }
bool JSMediaListOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) { JSMediaList* jsMediaList = static_cast<JSMediaList*>(handle.get().asCell()); if (!isObservable(jsMediaList)) return false; void* root = WebCore::root(jsMediaList->impl()); return visitor.containsOpaqueRoot(root); }
void DesiredWriteBarrier::visitChildren(SlotVisitor& visitor) { switch (m_type) { case ConstantType: { WriteBarrier<Unknown>& barrier = m_codeBlock->constants()[m_which.index]; visitor.append(&barrier); return; } case InlineCallFrameExecutableType: { InlineCallFrame* inlineCallFrame = m_which.inlineCallFrame; WriteBarrier<ScriptExecutable>& executable = inlineCallFrame->executable; visitor.append(&executable); return; } } RELEASE_ASSERT_NOT_REACHED(); }
bool JSStyleSheetOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) { JSStyleSheet* jsStyleSheet = jsCast<JSStyleSheet*>(handle.get().asCell()); if (!isObservable(jsStyleSheet)) return false; void* root = WebCore::root(&jsStyleSheet->impl()); return visitor.containsOpaqueRoot(root); }
void JSXMLHttpRequest::visitAdditionalChildren(SlotVisitor& visitor) { if (XMLHttpRequestUpload* upload = impl().optionalUpload()) visitor.addOpaqueRoot(upload); if (Document* responseDocument = impl().optionalResponseXML()) visitor.addOpaqueRoot(responseDocument); if (ArrayBuffer* responseArrayBuffer = impl().optionalResponseArrayBuffer()) visitor.addOpaqueRoot(responseArrayBuffer); if (Blob* responseBlob = impl().optionalResponseBlob()) visitor.addOpaqueRoot(responseBlob); if (m_response) visitor.append(&m_response); }
bool JSTestGenerateIsReachableOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) { JSTestGenerateIsReachable* jsTestGenerateIsReachable = jsCast<JSTestGenerateIsReachable*>(handle.get().asCell()); if (!isObservable(jsTestGenerateIsReachable)) return false; TestGenerateIsReachable* root = &jsTestGenerateIsReachable->impl(); return visitor.containsOpaqueRoot(root); }
void UnlinkedProgramCodeBlock::visitChildren(JSCell* cell, SlotVisitor& visitor) { UnlinkedProgramCodeBlock* thisObject = jsCast<UnlinkedProgramCodeBlock*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); for (size_t i = 0, end = thisObject->m_functionDeclarations.size(); i != end; i++) visitor.append(&thisObject->m_functionDeclarations[i].second); }
bool JSCSSStyleDeclarationOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) { JSCSSStyleDeclaration* jsCSSStyleDeclaration = static_cast<JSCSSStyleDeclaration*>(handle.get().asCell()); if (!isObservable(jsCSSStyleDeclaration)) return false; void* root = WebCore::root(jsCSSStyleDeclaration->impl()); return visitor.containsOpaqueRoot(root); }
bool JSWorkerNavigatorOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) { JSWorkerNavigator* jsWorkerNavigator = static_cast<JSWorkerNavigator*>(handle.get().asCell()); if (!isObservable(jsWorkerNavigator)) return false; WorkerNavigator* root = jsWorkerNavigator->impl(); return visitor.containsOpaqueRoot(root); }
bool JSWebGLLoseContextOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) { JSWebGLLoseContext* jsWebGLLoseContext = jsCast<JSWebGLLoseContext*>(handle.get().asCell()); if (!isObservable(jsWebGLLoseContext)) return false; WebGLRenderingContext* root = jsWebGLLoseContext->impl().context(); return visitor.containsOpaqueRoot(root); }
void RegExpPrototype::visitChildren(JSCell* cell, SlotVisitor& visitor) { RegExpPrototype* thisObject = jsCast<RegExpPrototype*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); visitor.append(&thisObject->m_emptyRegExp); }
void JSCallee::visitChildren(JSCell* cell, SlotVisitor& visitor) { JSCallee* thisObject = jsCast<JSCallee*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); visitor.append(&thisObject->m_scope); }
void Structure::visitChildren(JSCell* cell, SlotVisitor& visitor) { Structure* thisObject = jsCast<Structure*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info); ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren()); JSCell::visitChildren(thisObject, visitor); if (thisObject->m_globalObject) visitor.append(&thisObject->m_globalObject); if (!thisObject->isObject()) thisObject->m_cachedPrototypeChain.clear(); else { if (thisObject->m_prototype) visitor.append(&thisObject->m_prototype); if (thisObject->m_cachedPrototypeChain) visitor.append(&thisObject->m_cachedPrototypeChain); } if (thisObject->m_previous) visitor.append(&thisObject->m_previous); if (thisObject->m_specificValueInPrevious) visitor.append(&thisObject->m_specificValueInPrevious); if (thisObject->m_enumerationCache) visitor.append(&thisObject->m_enumerationCache); if (thisObject->m_propertyTable) { PropertyTable::iterator end = thisObject->m_propertyTable->end(); for (PropertyTable::iterator ptr = thisObject->m_propertyTable->begin(); ptr != end; ++ptr) { if (ptr->specificValue) visitor.append(&ptr->specificValue); } } }
void SparseArrayValueMap::visitChildren(JSCell* thisObject, SlotVisitor& visitor) { Base::visitChildren(thisObject, visitor); SparseArrayValueMap* thisMap = jsCast<SparseArrayValueMap*>(thisObject); iterator end = thisMap->m_map.end(); for (iterator it = thisMap->m_map.begin(); it != end; ++it) visitor.append(&it->value); }
void IntlNumberFormat::visitChildren(JSCell* cell, SlotVisitor& visitor) { IntlNumberFormat* thisObject = jsCast<IntlNumberFormat*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); visitor.append(thisObject->m_boundFormat); }
void JSStyleSheet::visitChildren(JSCell* cell, SlotVisitor& visitor) { JSStyleSheet* thisObject = jsCast<JSStyleSheet*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag); ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren()); Base::visitChildren(thisObject, visitor); visitor.addOpaqueRoot(root(&thisObject->impl())); }
void IntlDateTimeFormatConstructor::visitChildren(JSCell* cell, SlotVisitor& visitor) { IntlDateTimeFormatConstructor* thisObject = jsCast<IntlDateTimeFormatConstructor*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); Base::visitChildren(thisObject, visitor); visitor.append(&thisObject->m_dateTimeFormatStructure); }
void ProgramExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor) { ProgramExecutable* thisObject = jsCast<ProgramExecutable*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); ScriptExecutable::visitChildren(thisObject, visitor); visitor.append(thisObject->m_unlinkedProgramCodeBlock); if (ProgramCodeBlock* programCodeBlock = thisObject->m_programCodeBlock.get()) programCodeBlock->visitWeakly(visitor); }
void EvalExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor) { EvalExecutable* thisObject = jsCast<EvalExecutable*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); ScriptExecutable::visitChildren(thisObject, visitor); if (thisObject->m_evalCodeBlock) thisObject->m_evalCodeBlock->visitAggregate(visitor); visitor.append(&thisObject->m_unlinkedEvalCodeBlock); }
void UnlinkedCodeBlock::visitChildren(JSCell* cell, SlotVisitor& visitor) { UnlinkedCodeBlock* thisObject = jsCast<UnlinkedCodeBlock*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag); ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren()); Base::visitChildren(thisObject, visitor); visitor.append(&thisObject->m_symbolTable); for (FunctionExpressionVector::iterator ptr = thisObject->m_functionDecls.begin(), end = thisObject->m_functionDecls.end(); ptr != end; ++ptr) visitor.append(ptr); for (FunctionExpressionVector::iterator ptr = thisObject->m_functionExprs.begin(), end = thisObject->m_functionExprs.end(); ptr != end; ++ptr) visitor.append(ptr); visitor.appendValues(thisObject->m_constantRegisters.data(), thisObject->m_constantRegisters.size()); if (thisObject->m_rareData) { for (size_t i = 0, end = thisObject->m_rareData->m_regexps.size(); i != end; i++) visitor.append(&thisObject->m_rareData->m_regexps[i]); } }