bool JSObjectIsFunction(JSContextRef, JSObjectRef object) { if (!object) return false; CallData callData; JSCell* cell = toJS(object); return cell->methodTable()->getCallData(cell, callData) != CallTypeNone; }
bool JSObjectIsFunction(JSContextRef ctx, JSObjectRef object) { if (!object) return false; JSLockHolder locker(toJS(ctx)); CallData callData; JSCell* cell = toJS(object); return cell->methodTable()->getCallData(cell, callData) != CallType::None; }
bool JSObjectIsFunction(JSContextRef ctx, JSObjectRef object) { if (!object) return false; ExecState* exec = toJS(ctx); VM& vm = exec->vm(); JSLockHolder locker(vm); CallData callData; JSCell* cell = toJS(object); return cell->methodTable(vm)->getCallData(cell, callData) != CallType::None; }
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)); }); }