[WTF][JSC] Make JSC and WTF aggressively-fast-malloced
authorysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Aug 2019 20:57:15 +0000 (20:57 +0000)
committerysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Aug 2019 20:57:15 +0000 (20:57 +0000)
https://bugs.webkit.org/show_bug.cgi?id=200611

Reviewed by Saam Barati.

Source/JavaScriptCore:

This patch aggressively puts many classes into FastMalloc. In JSC side, we grep `std::make_unique` etc. to find potentially system-malloc-allocated classes.
After this patch, all the JSC related allocations in JetStream2 cli is done from bmalloc. In the future, it would be nice that we add `WTF::makeUnique<T>` helper
function and throw a compile error if `T` is not FastMalloc annotated[1].

Putting WebKit classes in FastMalloc has many benefits.

1. Simply, it is fast.
2. vmmap can tell the amount of memory used for WebKit.
3. bmalloc can isolate WebKit memory allocation from the rest of the world. This is useful since we can know more about what component is corrupting the memory
   from the memory corruption crash.

[1]: https://bugs.webkit.org/show_bug.cgi?id=200620

* API/ObjCCallbackFunction.mm:
* assembler/AbstractMacroAssembler.h:
* b3/B3PhiChildren.h:
* b3/air/AirAllocateRegistersAndStackAndGenerateCode.h:
* b3/air/AirDisassembler.h:
* bytecode/AccessCaseSnippetParams.h:
* bytecode/CallVariant.h:
* bytecode/DeferredSourceDump.h:
* bytecode/ExecutionCounter.h:
* bytecode/GetByIdStatus.h:
* bytecode/GetByIdVariant.h:
* bytecode/InByIdStatus.h:
* bytecode/InByIdVariant.h:
* bytecode/InstanceOfStatus.h:
* bytecode/InstanceOfVariant.h:
* bytecode/PutByIdStatus.h:
* bytecode/PutByIdVariant.h:
* bytecode/ValueProfile.h:
* dfg/DFGAbstractInterpreter.h:
* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::newVariableAccessData):
* dfg/DFGFlowIndexing.h:
* dfg/DFGFlowMap.h:
* dfg/DFGLiveCatchVariablePreservationPhase.cpp:
(JSC::DFG::LiveCatchVariablePreservationPhase::newVariableAccessData):
* dfg/DFGMaximalFlushInsertionPhase.cpp:
(JSC::DFG::MaximalFlushInsertionPhase::newVariableAccessData):
* dfg/DFGOSRExit.h:
* dfg/DFGSpeculativeJIT.h:
* dfg/DFGVariableAccessData.h:
* disassembler/ARM64/A64DOpcode.h:
* inspector/remote/socket/RemoteInspectorMessageParser.h:
* inspector/remote/socket/RemoteInspectorSocket.h:
* inspector/remote/socket/RemoteInspectorSocketEndpoint.h:
* jit/PCToCodeOriginMap.h:
* runtime/BasicBlockLocation.h:
* runtime/DoublePredictionFuzzerAgent.h:
* runtime/JSRunLoopTimer.h:
* runtime/PromiseDeferredTimer.h:
(JSC::PromiseDeferredTimer::create): PromiseDeferredTimer should be allocated as `Ref<>` instead of `std::unique_ptr` since it is inheriting ThreadSafeRefCounted<>.
Holding such a class with std::unique_ptr could lead to potentially dangerous operations (like, someone holds it with Ref<> while it is deleted by std::unique_ptr<>).
* runtime/RandomizingFuzzerAgent.h:
* runtime/SymbolTable.h:
* runtime/VM.cpp:
(JSC::VM::VM):
* runtime/VM.h:
* tools/JSDollarVM.cpp:
* tools/SigillCrashAnalyzer.cpp:
* wasm/WasmFormat.h:
* wasm/WasmMemory.cpp:
* wasm/WasmSignature.h:
* yarr/YarrJIT.h:

Source/WebCore:

Changed the accessor since we changed std::unique_ptr to Ref for this field.

No behavior change.

* bindings/js/WorkerScriptController.cpp:
(WebCore::WorkerScriptController::addTimerSetNotification):
(WebCore::WorkerScriptController::removeTimerSetNotification):

Source/WTF:

WTF has many data structures, in particular, containers. And these containers can be allocated like `std::make_unique<Container>()`.
Without WTF_MAKE_FAST_ALLOCATED, this container itself is allocated from the system malloc. This patch attaches WTF_MAKE_FAST_ALLOCATED
more aggressively not to allocate them from the system malloc. And we add some `final` to containers and classes that would be never inherited.

* wtf/Assertions.cpp:
* wtf/Atomics.h:
* wtf/AutodrainedPool.h:
* wtf/Bag.h:
(WTF::Bag::Bag): Deleted.
(WTF::Bag::~Bag): Deleted.
(WTF::Bag::clear): Deleted.
(WTF::Bag::add): Deleted.
(WTF::Bag::iterator::iterator): Deleted.
(WTF::Bag::iterator::operator! const): Deleted.
(WTF::Bag::iterator::operator* const): Deleted.
(WTF::Bag::iterator::operator++): Deleted.
(WTF::Bag::iterator::operator== const): Deleted.
(WTF::Bag::iterator::operator!= const): Deleted.
(WTF::Bag::begin): Deleted.
(WTF::Bag::begin const): Deleted.
(WTF::Bag::end const): Deleted.
(WTF::Bag::isEmpty const): Deleted.
(WTF::Bag::unwrappedHead const): Deleted.
* wtf/BitVector.h:
(WTF::BitVector::BitVector): Deleted.
(WTF::BitVector::~BitVector): Deleted.
(WTF::BitVector::operator=): Deleted.
(WTF::BitVector::size const): Deleted.
(WTF::BitVector::ensureSize): Deleted.
(WTF::BitVector::quickGet const): Deleted.
(WTF::BitVector::quickSet): Deleted.
(WTF::BitVector::quickClear): Deleted.
(WTF::BitVector::get const): Deleted.
(WTF::BitVector::contains const): Deleted.
(WTF::BitVector::set): Deleted.
(WTF::BitVector::add): Deleted.
(WTF::BitVector::ensureSizeAndSet): Deleted.
(WTF::BitVector::clear): Deleted.
(WTF::BitVector::remove): Deleted.
(WTF::BitVector::merge): Deleted.
(WTF::BitVector::filter): Deleted.
(WTF::BitVector::exclude): Deleted.
(WTF::BitVector::bitCount const): Deleted.
(WTF::BitVector::isEmpty const): Deleted.
(WTF::BitVector::findBit const): Deleted.
(WTF::BitVector::isEmptyValue const): Deleted.
(WTF::BitVector::isDeletedValue const): Deleted.
(WTF::BitVector::isEmptyOrDeletedValue const): Deleted.
(WTF::BitVector::operator== const): Deleted.
(WTF::BitVector::hash const): Deleted.
(WTF::BitVector::iterator::iterator): Deleted.
(WTF::BitVector::iterator::operator* const): Deleted.
(WTF::BitVector::iterator::operator++): Deleted.
(WTF::BitVector::iterator::isAtEnd const): Deleted.
(WTF::BitVector::iterator::operator== const): Deleted.
(WTF::BitVector::iterator::operator!= const): Deleted.
(WTF::BitVector::begin const): Deleted.
(WTF::BitVector::end const): Deleted.
(WTF::BitVector::bitsInPointer): Deleted.
(WTF::BitVector::maxInlineBits): Deleted.
(WTF::BitVector::byteCount): Deleted.
(WTF::BitVector::makeInlineBits): Deleted.
(WTF::BitVector::cleanseInlineBits): Deleted.
(WTF::BitVector::bitCount): Deleted.
(WTF::BitVector::findBitFast const): Deleted.
(WTF::BitVector::findBitSimple const): Deleted.
(WTF::BitVector::OutOfLineBits::numBits const): Deleted.
(WTF::BitVector::OutOfLineBits::numWords const): Deleted.
(WTF::BitVector::OutOfLineBits::bits): Deleted.
(WTF::BitVector::OutOfLineBits::bits const): Deleted.
(WTF::BitVector::OutOfLineBits::OutOfLineBits): Deleted.
(WTF::BitVector::isInline const): Deleted.
(WTF::BitVector::outOfLineBits const): Deleted.
(WTF::BitVector::outOfLineBits): Deleted.
(WTF::BitVector::bits): Deleted.
(WTF::BitVector::bits const): Deleted.
* wtf/Bitmap.h:
(WTF::Bitmap::size): Deleted.
(WTF::Bitmap::iterator::iterator): Deleted.
(WTF::Bitmap::iterator::operator* const): Deleted.
(WTF::Bitmap::iterator::operator++): Deleted.
(WTF::Bitmap::iterator::operator== const): Deleted.
(WTF::Bitmap::iterator::operator!= const): Deleted.
(WTF::Bitmap::begin const): Deleted.
(WTF::Bitmap::end const): Deleted.
* wtf/Box.h:
* wtf/BumpPointerAllocator.h:
* wtf/CPUTime.h:
* wtf/CheckedBoolean.h:
* wtf/CommaPrinter.h:
(WTF::CommaPrinter::CommaPrinter): Deleted.
(WTF::CommaPrinter::dump const): Deleted.
(WTF::CommaPrinter::didPrint const): Deleted.
* wtf/CompactPointerTuple.h:
(WTF::CompactPointerTuple::encodeType): Deleted.
(WTF::CompactPointerTuple::decodeType): Deleted.
(WTF::CompactPointerTuple::CompactPointerTuple): Deleted.
(WTF::CompactPointerTuple::pointer const): Deleted.
(WTF::CompactPointerTuple::setPointer): Deleted.
(WTF::CompactPointerTuple::type const): Deleted.
(WTF::CompactPointerTuple::setType): Deleted.
* wtf/CompilationThread.h:
(WTF::CompilationScope::CompilationScope): Deleted.
(WTF::CompilationScope::~CompilationScope): Deleted.
(WTF::CompilationScope::leaveEarly): Deleted.
* wtf/CompletionHandler.h:
(WTF::CompletionHandler<Out):
(WTF::Detail::CallableWrapper<CompletionHandler<Out):
(WTF::CompletionHandlerCallingScope::CompletionHandlerCallingScope): Deleted.
(WTF::CompletionHandlerCallingScope::~CompletionHandlerCallingScope): Deleted.
(WTF::CompletionHandlerCallingScope::CompletionHandler<void): Deleted.
* wtf/ConcurrentBuffer.h:
(WTF::ConcurrentBuffer::ConcurrentBuffer): Deleted.
(WTF::ConcurrentBuffer::~ConcurrentBuffer): Deleted.
(WTF::ConcurrentBuffer::growExact): Deleted.
(WTF::ConcurrentBuffer::grow): Deleted.
(WTF::ConcurrentBuffer::array const): Deleted.
(WTF::ConcurrentBuffer::operator[]): Deleted.
(WTF::ConcurrentBuffer::operator[] const): Deleted.
(WTF::ConcurrentBuffer::createArray): Deleted.
* wtf/ConcurrentPtrHashSet.h:
(WTF::ConcurrentPtrHashSet::contains): Deleted.
(WTF::ConcurrentPtrHashSet::add): Deleted.
(WTF::ConcurrentPtrHashSet::size const): Deleted.
(WTF::ConcurrentPtrHashSet::Table::maxLoad const): Deleted.
(WTF::ConcurrentPtrHashSet::hash): Deleted.
(WTF::ConcurrentPtrHashSet::cast): Deleted.
(WTF::ConcurrentPtrHashSet::containsImpl const): Deleted.
(WTF::ConcurrentPtrHashSet::addImpl): Deleted.
* wtf/ConcurrentVector.h:
(WTF::ConcurrentVector::~ConcurrentVector): Deleted.
(WTF::ConcurrentVector::size const): Deleted.
(WTF::ConcurrentVector::isEmpty const): Deleted.
(WTF::ConcurrentVector::at): Deleted.
(WTF::ConcurrentVector::at const): Deleted.
(WTF::ConcurrentVector::operator[]): Deleted.
(WTF::ConcurrentVector::operator[] const): Deleted.
(WTF::ConcurrentVector::first): Deleted.
(WTF::ConcurrentVector::first const): Deleted.
(WTF::ConcurrentVector::last): Deleted.
(WTF::ConcurrentVector::last const): Deleted.
(WTF::ConcurrentVector::takeLast): Deleted.
(WTF::ConcurrentVector::append): Deleted.
(WTF::ConcurrentVector::alloc): Deleted.
(WTF::ConcurrentVector::removeLast): Deleted.
(WTF::ConcurrentVector::grow): Deleted.
(WTF::ConcurrentVector::begin): Deleted.
(WTF::ConcurrentVector::end): Deleted.
(WTF::ConcurrentVector::segmentExistsFor): Deleted.
(WTF::ConcurrentVector::segmentFor): Deleted.
(WTF::ConcurrentVector::subscriptFor): Deleted.
(WTF::ConcurrentVector::ensureSegmentsFor): Deleted.
(WTF::ConcurrentVector::ensureSegment): Deleted.
(WTF::ConcurrentVector::allocateSegment): Deleted.
* wtf/Condition.h:
(WTF::Condition::waitUntil): Deleted.
(WTF::Condition::waitFor): Deleted.
(WTF::Condition::wait): Deleted.
(WTF::Condition::notifyOne): Deleted.
(WTF::Condition::notifyAll): Deleted.
* wtf/CountingLock.h:
(WTF::CountingLock::LockHooks::lockHook): Deleted.
(WTF::CountingLock::LockHooks::unlockHook): Deleted.
(WTF::CountingLock::LockHooks::parkHook): Deleted.
(WTF::CountingLock::LockHooks::handoffHook): Deleted.
(WTF::CountingLock::tryLock): Deleted.
(WTF::CountingLock::lock): Deleted.
(WTF::CountingLock::unlock): Deleted.
(WTF::CountingLock::isHeld const): Deleted.
(WTF::CountingLock::isLocked const): Deleted.
(WTF::CountingLock::Count::operator bool const): Deleted.
(WTF::CountingLock::Count::operator== const): Deleted.
(WTF::CountingLock::Count::operator!= const): Deleted.
(WTF::CountingLock::tryOptimisticRead): Deleted.
(WTF::CountingLock::validate): Deleted.
(WTF::CountingLock::doOptimizedRead): Deleted.
(WTF::CountingLock::tryOptimisticFencelessRead): Deleted.
(WTF::CountingLock::fencelessValidate): Deleted.
(WTF::CountingLock::doOptimizedFencelessRead): Deleted.
(WTF::CountingLock::getCount): Deleted.
* wtf/CrossThreadQueue.h:
* wtf/CrossThreadTask.h:
* wtf/CryptographicallyRandomNumber.cpp:
* wtf/DataMutex.h:
* wtf/DateMath.h:
* wtf/Deque.h:
(WTF::Deque::size const): Deleted.
(WTF::Deque::isEmpty const): Deleted.
(WTF::Deque::begin): Deleted.
(WTF::Deque::end): Deleted.
(WTF::Deque::begin const): Deleted.
(WTF::Deque::end const): Deleted.
(WTF::Deque::rbegin): Deleted.
(WTF::Deque::rend): Deleted.
(WTF::Deque::rbegin const): Deleted.
(WTF::Deque::rend const): Deleted.
(WTF::Deque::first): Deleted.
(WTF::Deque::first const): Deleted.
(WTF::Deque::last): Deleted.
(WTF::Deque::last const): Deleted.
(WTF::Deque::append): Deleted.
* wtf/Dominators.h:
* wtf/DoublyLinkedList.h:
* wtf/Expected.h:
* wtf/FastBitVector.h:
* wtf/FileMetadata.h:
* wtf/FileSystem.h:
* wtf/GraphNodeWorklist.h:
* wtf/GregorianDateTime.h:
(WTF::GregorianDateTime::GregorianDateTime): Deleted.
(WTF::GregorianDateTime::year const): Deleted.
(WTF::GregorianDateTime::month const): Deleted.
(WTF::GregorianDateTime::yearDay const): Deleted.
(WTF::GregorianDateTime::monthDay const): Deleted.
(WTF::GregorianDateTime::weekDay const): Deleted.
(WTF::GregorianDateTime::hour const): Deleted.
(WTF::GregorianDateTime::minute const): Deleted.
(WTF::GregorianDateTime::second const): Deleted.
(WTF::GregorianDateTime::utcOffset const): Deleted.
(WTF::GregorianDateTime::isDST const): Deleted.
(WTF::GregorianDateTime::setYear): Deleted.
(WTF::GregorianDateTime::setMonth): Deleted.
(WTF::GregorianDateTime::setYearDay): Deleted.
(WTF::GregorianDateTime::setMonthDay): Deleted.
(WTF::GregorianDateTime::setWeekDay): Deleted.
(WTF::GregorianDateTime::setHour): Deleted.
(WTF::GregorianDateTime::setMinute): Deleted.
(WTF::GregorianDateTime::setSecond): Deleted.
(WTF::GregorianDateTime::setUtcOffset): Deleted.
(WTF::GregorianDateTime::setIsDST): Deleted.
(WTF::GregorianDateTime::operator tm const): Deleted.
(WTF::GregorianDateTime::copyFrom): Deleted.
* wtf/HashTable.h:
* wtf/Hasher.h:
* wtf/HexNumber.h:
* wtf/Indenter.h:
* wtf/IndexMap.h:
* wtf/IndexSet.h:
* wtf/IndexSparseSet.h:
* wtf/IndexedContainerIterator.h:
* wtf/Insertion.h:
* wtf/IteratorAdaptors.h:
* wtf/IteratorRange.h:
* wtf/KeyValuePair.h:
* wtf/ListHashSet.h:
(WTF::ListHashSet::begin): Deleted.
(WTF::ListHashSet::end): Deleted.
(WTF::ListHashSet::begin const): Deleted.
(WTF::ListHashSet::end const): Deleted.
(WTF::ListHashSet::random): Deleted.
(WTF::ListHashSet::random const): Deleted.
(WTF::ListHashSet::rbegin): Deleted.
(WTF::ListHashSet::rend): Deleted.
(WTF::ListHashSet::rbegin const): Deleted.
(WTF::ListHashSet::rend const): Deleted.
* wtf/Liveness.h:
* wtf/LocklessBag.h:
(WTF::LocklessBag::LocklessBag): Deleted.
(WTF::LocklessBag::add): Deleted.
(WTF::LocklessBag::iterate): Deleted.
(WTF::LocklessBag::consumeAll): Deleted.
(WTF::LocklessBag::consumeAllWithNode): Deleted.
(WTF::LocklessBag::~LocklessBag): Deleted.
* wtf/LoggingHashID.h:
* wtf/MD5.h:
* wtf/MachSendRight.h:
* wtf/MainThreadData.h:
* wtf/Markable.h:
* wtf/MediaTime.h:
* wtf/MemoryPressureHandler.h:
* wtf/MessageQueue.h:
(WTF::MessageQueue::MessageQueue): Deleted.
* wtf/MetaAllocator.h:
* wtf/MonotonicTime.h:
(WTF::MonotonicTime::MonotonicTime): Deleted.
(WTF::MonotonicTime::fromRawSeconds): Deleted.
(WTF::MonotonicTime::infinity): Deleted.
(WTF::MonotonicTime::nan): Deleted.
(WTF::MonotonicTime::secondsSinceEpoch const): Deleted.
(WTF::MonotonicTime::approximateMonotonicTime const): Deleted.
(WTF::MonotonicTime::operator bool const): Deleted.
(WTF::MonotonicTime::operator+ const): Deleted.
(WTF::MonotonicTime::operator- const): Deleted.
(WTF::MonotonicTime::operator% const): Deleted.
(WTF::MonotonicTime::operator+=): Deleted.
(WTF::MonotonicTime::operator-=): Deleted.
(WTF::MonotonicTime::operator== const): Deleted.
(WTF::MonotonicTime::operator!= const): Deleted.
(WTF::MonotonicTime::operator< const): Deleted.
(WTF::MonotonicTime::operator> const): Deleted.
(WTF::MonotonicTime::operator<= const): Deleted.
(WTF::MonotonicTime::operator>= const): Deleted.
(WTF::MonotonicTime::isolatedCopy const): Deleted.
(WTF::MonotonicTime::encode const): Deleted.
(WTF::MonotonicTime::decode): Deleted.
* wtf/NaturalLoops.h:
* wtf/NoLock.h:
* wtf/OSAllocator.h:
* wtf/OptionSet.h:
* wtf/Optional.h:
* wtf/OrderMaker.h:
* wtf/Packed.h:
(WTF::alignof):
* wtf/PackedIntVector.h:
(WTF::PackedIntVector::PackedIntVector): Deleted.
(WTF::PackedIntVector::operator=): Deleted.
(WTF::PackedIntVector::size const): Deleted.
(WTF::PackedIntVector::ensureSize): Deleted.
(WTF::PackedIntVector::resize): Deleted.
(WTF::PackedIntVector::clearAll): Deleted.
(WTF::PackedIntVector::get const): Deleted.
(WTF::PackedIntVector::set): Deleted.
(WTF::PackedIntVector::mask): Deleted.
* wtf/PageBlock.h:
* wtf/ParallelJobsOpenMP.h:
* wtf/ParkingLot.h:
* wtf/PriorityQueue.h:
(WTF::PriorityQueue::size const): Deleted.
(WTF::PriorityQueue::isEmpty const): Deleted.
(WTF::PriorityQueue::enqueue): Deleted.
(WTF::PriorityQueue::peek const): Deleted.
(WTF::PriorityQueue::dequeue): Deleted.
(WTF::PriorityQueue::decreaseKey): Deleted.
(WTF::PriorityQueue::increaseKey): Deleted.
(WTF::PriorityQueue::begin const): Deleted.
(WTF::PriorityQueue::end const): Deleted.
(WTF::PriorityQueue::isValidHeap const): Deleted.
(WTF::PriorityQueue::parentOf): Deleted.
(WTF::PriorityQueue::leftChildOf): Deleted.
(WTF::PriorityQueue::rightChildOf): Deleted.
(WTF::PriorityQueue::siftUp): Deleted.
(WTF::PriorityQueue::siftDown): Deleted.
* wtf/RandomDevice.h:
* wtf/Range.h:
* wtf/RangeSet.h:
(WTF::RangeSet::RangeSet): Deleted.
(WTF::RangeSet::~RangeSet): Deleted.
(WTF::RangeSet::add): Deleted.
(WTF::RangeSet::contains const): Deleted.
(WTF::RangeSet::overlaps const): Deleted.
(WTF::RangeSet::clear): Deleted.
(WTF::RangeSet::dump const): Deleted.
(WTF::RangeSet::dumpRaw const): Deleted.
(WTF::RangeSet::begin const): Deleted.
(WTF::RangeSet::end const): Deleted.
(WTF::RangeSet::addAll): Deleted.
(WTF::RangeSet::compact): Deleted.
(WTF::RangeSet::overlapsNonEmpty): Deleted.
(WTF::RangeSet::subsumesNonEmpty): Deleted.
(WTF::RangeSet::findRange const): Deleted.
* wtf/RecursableLambda.h:
* wtf/RedBlackTree.h:
(WTF::RedBlackTree::Node::successor const): Deleted.
(WTF::RedBlackTree::Node::predecessor const): Deleted.
(WTF::RedBlackTree::Node::successor): Deleted.
(WTF::RedBlackTree::Node::predecessor): Deleted.
(WTF::RedBlackTree::Node::reset): Deleted.
(WTF::RedBlackTree::Node::parent const): Deleted.
(WTF::RedBlackTree::Node::setParent): Deleted.
(WTF::RedBlackTree::Node::left const): Deleted.
(WTF::RedBlackTree::Node::setLeft): Deleted.
(WTF::RedBlackTree::Node::right const): Deleted.
(WTF::RedBlackTree::Node::setRight): Deleted.
(WTF::RedBlackTree::Node::color const): Deleted.
(WTF::RedBlackTree::Node::setColor): Deleted.
(WTF::RedBlackTree::RedBlackTree): Deleted.
(WTF::RedBlackTree::insert): Deleted.
(WTF::RedBlackTree::remove): Deleted.
(WTF::RedBlackTree::findExact const): Deleted.
(WTF::RedBlackTree::findLeastGreaterThanOrEqual const): Deleted.
(WTF::RedBlackTree::findGreatestLessThanOrEqual const): Deleted.
(WTF::RedBlackTree::first const): Deleted.
(WTF::RedBlackTree::last const): Deleted.
(WTF::RedBlackTree::size): Deleted.
(WTF::RedBlackTree::isEmpty): Deleted.
(WTF::RedBlackTree::treeMinimum): Deleted.
(WTF::RedBlackTree::treeMaximum): Deleted.
(WTF::RedBlackTree::treeInsert): Deleted.
(WTF::RedBlackTree::leftRotate): Deleted.
(WTF::RedBlackTree::rightRotate): Deleted.
(WTF::RedBlackTree::removeFixup): Deleted.
* wtf/ResourceUsage.h:
* wtf/RunLoop.cpp:
* wtf/RunLoopTimer.h:
* wtf/SHA1.h:
* wtf/Seconds.h:
(WTF::Seconds::Seconds): Deleted.
(WTF::Seconds::value const): Deleted.
(WTF::Seconds::minutes const): Deleted.
(WTF::Seconds::seconds const): Deleted.
(WTF::Seconds::milliseconds const): Deleted.
(WTF::Seconds::microseconds const): Deleted.
(WTF::Seconds::nanoseconds const): Deleted.
(WTF::Seconds::minutesAs const): Deleted.
(WTF::Seconds::secondsAs const): Deleted.
(WTF::Seconds::millisecondsAs const): Deleted.
(WTF::Seconds::microsecondsAs const): Deleted.
(WTF::Seconds::nanosecondsAs const): Deleted.
(WTF::Seconds::fromMinutes): Deleted.
(WTF::Seconds::fromHours): Deleted.
(WTF::Seconds::fromMilliseconds): Deleted.
(WTF::Seconds::fromMicroseconds): Deleted.
(WTF::Seconds::fromNanoseconds): Deleted.
(WTF::Seconds::infinity): Deleted.
(WTF::Seconds::nan): Deleted.
(WTF::Seconds::operator bool const): Deleted.
(WTF::Seconds::operator+ const): Deleted.
(WTF::Seconds::operator- const): Deleted.
(WTF::Seconds::operator* const): Deleted.
(WTF::Seconds::operator/ const): Deleted.
(WTF::Seconds::operator% const): Deleted.
(WTF::Seconds::operator+=): Deleted.
(WTF::Seconds::operator-=): Deleted.
(WTF::Seconds::operator*=): Deleted.
(WTF::Seconds::operator/=): Deleted.
(WTF::Seconds::operator%=): Deleted.
(WTF::Seconds::operator== const): Deleted.
(WTF::Seconds::operator!= const): Deleted.
(WTF::Seconds::operator< const): Deleted.
(WTF::Seconds::operator> const): Deleted.
(WTF::Seconds::operator<= const): Deleted.
(WTF::Seconds::operator>= const): Deleted.
(WTF::Seconds::isolatedCopy const): Deleted.
(WTF::Seconds::encode const): Deleted.
(WTF::Seconds::decode): Deleted.
* wtf/SegmentedVector.h:
(WTF::SegmentedVector::~SegmentedVector): Deleted.
(WTF::SegmentedVector::size const): Deleted.
(WTF::SegmentedVector::isEmpty const): Deleted.
(WTF::SegmentedVector::at): Deleted.
(WTF::SegmentedVector::at const): Deleted.
(WTF::SegmentedVector::operator[]): Deleted.
(WTF::SegmentedVector::operator[] const): Deleted.
(WTF::SegmentedVector::first): Deleted.
(WTF::SegmentedVector::first const): Deleted.
(WTF::SegmentedVector::last): Deleted.
(WTF::SegmentedVector::last const): Deleted.
(WTF::SegmentedVector::takeLast): Deleted.
(WTF::SegmentedVector::append): Deleted.
(WTF::SegmentedVector::alloc): Deleted.
(WTF::SegmentedVector::removeLast): Deleted.
(WTF::SegmentedVector::grow): Deleted.
(WTF::SegmentedVector::clear): Deleted.
(WTF::SegmentedVector::begin): Deleted.
(WTF::SegmentedVector::end): Deleted.
(WTF::SegmentedVector::shrinkToFit): Deleted.
(WTF::SegmentedVector::deleteAllSegments): Deleted.
(WTF::SegmentedVector::segmentExistsFor): Deleted.
(WTF::SegmentedVector::segmentFor): Deleted.
(WTF::SegmentedVector::subscriptFor): Deleted.
(WTF::SegmentedVector::ensureSegmentsFor): Deleted.
(WTF::SegmentedVector::ensureSegment): Deleted.
(WTF::SegmentedVector::allocateSegment): Deleted.
* wtf/SetForScope.h:
* wtf/SingleRootGraph.h:
* wtf/SinglyLinkedList.h:
* wtf/SmallPtrSet.h:
* wtf/SpanningTree.h:
* wtf/Spectrum.h:
* wtf/StackBounds.h:
* wtf/StackShot.h:
* wtf/StackShotProfiler.h:
* wtf/StackStats.h:
* wtf/StackTrace.h:
* wtf/StreamBuffer.h:
* wtf/SynchronizedFixedQueue.h:
(WTF::SynchronizedFixedQueue::create): Deleted.
(WTF::SynchronizedFixedQueue::open): Deleted.
(WTF::SynchronizedFixedQueue::close): Deleted.
(WTF::SynchronizedFixedQueue::isOpen): Deleted.
(WTF::SynchronizedFixedQueue::enqueue): Deleted.
(WTF::SynchronizedFixedQueue::dequeue): Deleted.
(WTF::SynchronizedFixedQueue::SynchronizedFixedQueue): Deleted.
* wtf/SystemTracing.h:
* wtf/ThreadGroup.h:
(WTF::ThreadGroup::create): Deleted.
(WTF::ThreadGroup::threads const): Deleted.
(WTF::ThreadGroup::getLock): Deleted.
(WTF::ThreadGroup::weakFromThis): Deleted.
* wtf/ThreadSpecific.h:
* wtf/ThreadingPrimitives.h:
(WTF::Mutex::impl): Deleted.
* wtf/TimeWithDynamicClockType.h:
(WTF::TimeWithDynamicClockType::TimeWithDynamicClockType): Deleted.
(WTF::TimeWithDynamicClockType::fromRawSeconds): Deleted.
(WTF::TimeWithDynamicClockType::secondsSinceEpoch const): Deleted.
(WTF::TimeWithDynamicClockType::clockType const): Deleted.
(WTF::TimeWithDynamicClockType::withSameClockAndRawSeconds const): Deleted.
(WTF::TimeWithDynamicClockType::operator bool const): Deleted.
(WTF::TimeWithDynamicClockType::operator+ const): Deleted.
(WTF::TimeWithDynamicClockType::operator- const): Deleted.
(WTF::TimeWithDynamicClockType::operator+=): Deleted.
(WTF::TimeWithDynamicClockType::operator-=): Deleted.
(WTF::TimeWithDynamicClockType::operator== const): Deleted.
(WTF::TimeWithDynamicClockType::operator!= const): Deleted.
* wtf/TimingScope.h:
* wtf/TinyLRUCache.h:
* wtf/TinyPtrSet.h:
* wtf/URLParser.cpp:
* wtf/URLParser.h:
* wtf/Unexpected.h:
* wtf/Variant.h:
* wtf/WTFSemaphore.h:
(WTF::Semaphore::Semaphore): Deleted.
(WTF::Semaphore::signal): Deleted.
(WTF::Semaphore::waitUntil): Deleted.
(WTF::Semaphore::waitFor): Deleted.
(WTF::Semaphore::wait): Deleted.
* wtf/WallTime.h:
(WTF::WallTime::WallTime): Deleted.
(WTF::WallTime::fromRawSeconds): Deleted.
(WTF::WallTime::infinity): Deleted.
(WTF::WallTime::nan): Deleted.
(WTF::WallTime::secondsSinceEpoch const): Deleted.
(WTF::WallTime::approximateWallTime const): Deleted.
(WTF::WallTime::operator bool const): Deleted.
(WTF::WallTime::operator+ const): Deleted.
(WTF::WallTime::operator- const): Deleted.
(WTF::WallTime::operator+=): Deleted.
(WTF::WallTime::operator-=): Deleted.
(WTF::WallTime::operator== const): Deleted.
(WTF::WallTime::operator!= const): Deleted.
(WTF::WallTime::operator< const): Deleted.
(WTF::WallTime::operator> const): Deleted.
(WTF::WallTime::operator<= const): Deleted.
(WTF::WallTime::operator>= const): Deleted.
(WTF::WallTime::isolatedCopy const): Deleted.
* wtf/WeakHashSet.h:
(WTF::WeakHashSet::WeakHashSetConstIterator::WeakHashSetConstIterator): Deleted.
(WTF::WeakHashSet::WeakHashSetConstIterator::get const): Deleted.
(WTF::WeakHashSet::WeakHashSetConstIterator::operator* const): Deleted.
(WTF::WeakHashSet::WeakHashSetConstIterator::operator-> const): Deleted.
(WTF::WeakHashSet::WeakHashSetConstIterator::operator++): Deleted.
(WTF::WeakHashSet::WeakHashSetConstIterator::skipEmptyBuckets): Deleted.
(WTF::WeakHashSet::WeakHashSetConstIterator::operator== const): Deleted.
(WTF::WeakHashSet::WeakHashSetConstIterator::operator!= const): Deleted.
(WTF::WeakHashSet::WeakHashSet): Deleted.
(WTF::WeakHashSet::begin const): Deleted.
(WTF::WeakHashSet::end const): Deleted.
(WTF::WeakHashSet::add): Deleted.
(WTF::WeakHashSet::remove): Deleted.
(WTF::WeakHashSet::contains const): Deleted.
(WTF::WeakHashSet::capacity const): Deleted.
(WTF::WeakHashSet::computesEmpty const): Deleted.
(WTF::WeakHashSet::hasNullReferences const): Deleted.
(WTF::WeakHashSet::computeSize const): Deleted.
(WTF::WeakHashSet::checkConsistency const): Deleted.
* wtf/WeakRandom.h:
(WTF::WeakRandom::WeakRandom): Deleted.
(WTF::WeakRandom::setSeed): Deleted.
(WTF::WeakRandom::seed const): Deleted.
(WTF::WeakRandom::get): Deleted.
(WTF::WeakRandom::getUint32): Deleted.
(WTF::WeakRandom::lowOffset): Deleted.
(WTF::WeakRandom::highOffset): Deleted.
(WTF::WeakRandom::nextState): Deleted.
(WTF::WeakRandom::generate): Deleted.
(WTF::WeakRandom::advance): Deleted.
* wtf/WordLock.h:
(WTF::WordLock::lock): Deleted.
(WTF::WordLock::unlock): Deleted.
(WTF::WordLock::isHeld const): Deleted.
(WTF::WordLock::isLocked const): Deleted.
(WTF::WordLock::isFullyReset const): Deleted.
* wtf/generic/MainThreadGeneric.cpp:
* wtf/glib/GMutexLocker.h:
* wtf/linux/CurrentProcessMemoryStatus.h:
* wtf/posix/ThreadingPOSIX.cpp:
(WTF::Semaphore::Semaphore): Deleted.
(WTF::Semaphore::~Semaphore): Deleted.
(WTF::Semaphore::wait): Deleted.
(WTF::Semaphore::post): Deleted.
* wtf/text/ASCIILiteral.h:
(WTF::ASCIILiteral::operator const char* const): Deleted.
(WTF::ASCIILiteral::fromLiteralUnsafe): Deleted.
(WTF::ASCIILiteral::null): Deleted.
(WTF::ASCIILiteral::characters const): Deleted.
(WTF::ASCIILiteral::ASCIILiteral): Deleted.
* wtf/text/AtomString.h:
(WTF::AtomString::operator=): Deleted.
(WTF::AtomString::isHashTableDeletedValue const): Deleted.
(WTF::AtomString::existingHash const): Deleted.
(WTF::AtomString::operator const String& const): Deleted.
(WTF::AtomString::string const): Deleted.
(WTF::AtomString::impl const): Deleted.
(WTF::AtomString::is8Bit const): Deleted.
(WTF::AtomString::characters8 const): Deleted.
(WTF::AtomString::characters16 const): Deleted.
(WTF::AtomString::length const): Deleted.
(WTF::AtomString::operator[] const): Deleted.
(WTF::AtomString::contains const): Deleted.
(WTF::AtomString::containsIgnoringASCIICase const): Deleted.
(WTF::AtomString::find const): Deleted.
(WTF::AtomString::findIgnoringASCIICase const): Deleted.
(WTF::AtomString::startsWith const): Deleted.
(WTF::AtomString::startsWithIgnoringASCIICase const): Deleted.
(WTF::AtomString::endsWith const): Deleted.
(WTF::AtomString::endsWithIgnoringASCIICase const): Deleted.
(WTF::AtomString::toInt const): Deleted.
(WTF::AtomString::toDouble const): Deleted.
(WTF::AtomString::toFloat const): Deleted.
(WTF::AtomString::percentage const): Deleted.
(WTF::AtomString::isNull const): Deleted.
(WTF::AtomString::isEmpty const): Deleted.
(WTF::AtomString::operator NSString * const): Deleted.
* wtf/text/AtomStringImpl.h:
(WTF::AtomStringImpl::lookUp): Deleted.
(WTF::AtomStringImpl::add): Deleted.
(WTF::AtomStringImpl::addWithStringTableProvider): Deleted.
* wtf/text/CString.h:
(WTF::CStringBuffer::data): Deleted.
(WTF::CStringBuffer::length const): Deleted.
(WTF::CStringBuffer::CStringBuffer): Deleted.
(WTF::CStringBuffer::mutableData): Deleted.
(WTF::CString::CString): Deleted.
(WTF::CString::data const): Deleted.
(WTF::CString::length const): Deleted.
(WTF::CString::isNull const): Deleted.
(WTF::CString::buffer const): Deleted.
(WTF::CString::isHashTableDeletedValue const): Deleted.
* wtf/text/ExternalStringImpl.h:
(WTF::ExternalStringImpl::freeExternalBuffer): Deleted.
* wtf/text/LineBreakIteratorPoolICU.h:
* wtf/text/NullTextBreakIterator.h:
* wtf/text/OrdinalNumber.h:
* wtf/text/StringBuffer.h:
* wtf/text/StringBuilder.h:
* wtf/text/StringConcatenateNumbers.h:
* wtf/text/StringHasher.h:
* wtf/text/StringImpl.h:
* wtf/text/StringView.cpp:
* wtf/text/StringView.h:
(WTF::StringView::left const): Deleted.
(WTF::StringView::right const): Deleted.
(WTF::StringView::underlyingStringIsValid const): Deleted.
(WTF::StringView::setUnderlyingString): Deleted.
* wtf/text/SymbolImpl.h:
(WTF::SymbolImpl::StaticSymbolImpl::StaticSymbolImpl): Deleted.
(WTF::SymbolImpl::StaticSymbolImpl::operator SymbolImpl&): Deleted.
(WTF::PrivateSymbolImpl::PrivateSymbolImpl): Deleted.
(WTF::RegisteredSymbolImpl::symbolRegistry const): Deleted.
(WTF::RegisteredSymbolImpl::clearSymbolRegistry): Deleted.
(WTF::RegisteredSymbolImpl::RegisteredSymbolImpl): Deleted.
* wtf/text/SymbolRegistry.h:
* wtf/text/TextBreakIterator.h:
* wtf/text/TextPosition.h:
* wtf/text/TextStream.h:
* wtf/text/WTFString.h:
(WTF::String::swap): Deleted.
(WTF::String::adopt): Deleted.
(WTF::String::isNull const): Deleted.
(WTF::String::isEmpty const): Deleted.
(WTF::String::impl const): Deleted.
(WTF::String::releaseImpl): Deleted.
(WTF::String::length const): Deleted.
(WTF::String::characters8 const): Deleted.
(WTF::String::characters16 const): Deleted.
(WTF::String::is8Bit const): Deleted.
(WTF::String::sizeInBytes const): Deleted.
(WTF::String::operator[] const): Deleted.
(WTF::String::find const): Deleted.
(WTF::String::findIgnoringASCIICase const): Deleted.
(WTF::String::reverseFind const): Deleted.
(WTF::String::contains const): Deleted.
(WTF::String::containsIgnoringASCIICase const): Deleted.
(WTF::String::startsWith const): Deleted.
(WTF::String::startsWithIgnoringASCIICase const): Deleted.
(WTF::String::hasInfixStartingAt const): Deleted.
(WTF::String::endsWith const): Deleted.
(WTF::String::endsWithIgnoringASCIICase const): Deleted.
(WTF::String::hasInfixEndingAt const): Deleted.
(WTF::String::append): Deleted.
(WTF::String::left const): Deleted.
(WTF::String::right const): Deleted.
(WTF::String::createUninitialized): Deleted.
(WTF::String::fromUTF8WithLatin1Fallback): Deleted.
(WTF::String::isAllASCII const): Deleted.
(WTF::String::isAllLatin1 const): Deleted.
(WTF::String::isSpecialCharacter const): Deleted.
(WTF::String::isHashTableDeletedValue const): Deleted.
(WTF::String::hash const): Deleted.
(WTF::String::existingHash const): Deleted.
* wtf/text/cf/TextBreakIteratorCF.h:
* wtf/text/icu/TextBreakIteratorICU.h:
* wtf/text/icu/UTextProviderLatin1.h:
* wtf/threads/BinarySemaphore.h:
(WTF::BinarySemaphore::waitFor): Deleted.
(WTF::BinarySemaphore::wait): Deleted.
* wtf/unicode/Collator.h:
* wtf/win/GDIObject.h:
* wtf/win/PathWalker.h:
* wtf/win/Win32Handle.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248546 268f45cc-cd09-0410-ab3c-d52691b4dbfc

194 files changed:
Source/JavaScriptCore/API/ObjCCallbackFunction.mm
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/assembler/AbstractMacroAssembler.h
Source/JavaScriptCore/b3/B3PhiChildren.h
Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackAndGenerateCode.h
Source/JavaScriptCore/b3/air/AirDisassembler.h
Source/JavaScriptCore/bytecode/AccessCaseSnippetParams.h
Source/JavaScriptCore/bytecode/CallVariant.h
Source/JavaScriptCore/bytecode/DeferredSourceDump.h
Source/JavaScriptCore/bytecode/ExecutionCounter.h
Source/JavaScriptCore/bytecode/GetByIdStatus.h
Source/JavaScriptCore/bytecode/GetByIdVariant.h
Source/JavaScriptCore/bytecode/InByIdStatus.h
Source/JavaScriptCore/bytecode/InByIdVariant.h
Source/JavaScriptCore/bytecode/InstanceOfStatus.h
Source/JavaScriptCore/bytecode/InstanceOfVariant.h
Source/JavaScriptCore/bytecode/PutByIdStatus.h
Source/JavaScriptCore/bytecode/PutByIdVariant.h
Source/JavaScriptCore/bytecode/ValueProfile.h
Source/JavaScriptCore/dfg/DFGAbstractInterpreter.h
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
Source/JavaScriptCore/dfg/DFGFlowIndexing.h
Source/JavaScriptCore/dfg/DFGFlowMap.h
Source/JavaScriptCore/dfg/DFGLiveCatchVariablePreservationPhase.cpp
Source/JavaScriptCore/dfg/DFGMaximalFlushInsertionPhase.cpp
Source/JavaScriptCore/dfg/DFGOSRExit.h
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
Source/JavaScriptCore/dfg/DFGVariableAccessData.h
Source/JavaScriptCore/disassembler/ARM64/A64DOpcode.h
Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorMessageParser.h
Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorSocket.h
Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorSocketEndpoint.h
Source/JavaScriptCore/jit/PCToCodeOriginMap.h
Source/JavaScriptCore/runtime/BasicBlockLocation.h
Source/JavaScriptCore/runtime/DoublePredictionFuzzerAgent.h
Source/JavaScriptCore/runtime/JSRunLoopTimer.h
Source/JavaScriptCore/runtime/PromiseDeferredTimer.h
Source/JavaScriptCore/runtime/RandomizingFuzzerAgent.h
Source/JavaScriptCore/runtime/SymbolTable.h
Source/JavaScriptCore/runtime/VM.cpp
Source/JavaScriptCore/runtime/VM.h
Source/JavaScriptCore/tools/JSDollarVM.cpp
Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp
Source/JavaScriptCore/wasm/WasmFormat.h
Source/JavaScriptCore/wasm/WasmMemory.cpp
Source/JavaScriptCore/wasm/WasmSignature.h
Source/JavaScriptCore/yarr/YarrJIT.h
Source/WTF/ChangeLog
Source/WTF/wtf/Assertions.cpp
Source/WTF/wtf/Atomics.h
Source/WTF/wtf/AutodrainedPool.h
Source/WTF/wtf/Bag.h
Source/WTF/wtf/BitVector.h
Source/WTF/wtf/Bitmap.h
Source/WTF/wtf/Box.h
Source/WTF/wtf/BumpPointerAllocator.h
Source/WTF/wtf/CPUTime.h
Source/WTF/wtf/CheckedBoolean.h
Source/WTF/wtf/CommaPrinter.h
Source/WTF/wtf/CompactPointerTuple.h
Source/WTF/wtf/CompilationThread.h
Source/WTF/wtf/CompletionHandler.h
Source/WTF/wtf/ConcurrentBuffer.h
Source/WTF/wtf/ConcurrentPtrHashSet.h
Source/WTF/wtf/ConcurrentVector.h
Source/WTF/wtf/Condition.h
Source/WTF/wtf/CountingLock.h
Source/WTF/wtf/CrossThreadQueue.h
Source/WTF/wtf/CrossThreadTask.h
Source/WTF/wtf/CryptographicallyRandomNumber.cpp
Source/WTF/wtf/DataMutex.h
Source/WTF/wtf/DateMath.h
Source/WTF/wtf/Deque.h
Source/WTF/wtf/Dominators.h
Source/WTF/wtf/DoublyLinkedList.h
Source/WTF/wtf/Expected.h
Source/WTF/wtf/FastBitVector.h
Source/WTF/wtf/FileMetadata.h
Source/WTF/wtf/FileSystem.h
Source/WTF/wtf/GraphNodeWorklist.h
Source/WTF/wtf/GregorianDateTime.h
Source/WTF/wtf/HashTable.h
Source/WTF/wtf/Hasher.h
Source/WTF/wtf/HexNumber.h
Source/WTF/wtf/Indenter.h
Source/WTF/wtf/IndexMap.h
Source/WTF/wtf/IndexSet.h
Source/WTF/wtf/IndexSparseSet.h
Source/WTF/wtf/IndexedContainerIterator.h
Source/WTF/wtf/Insertion.h
Source/WTF/wtf/IteratorAdaptors.h
Source/WTF/wtf/IteratorRange.h
Source/WTF/wtf/KeyValuePair.h
Source/WTF/wtf/ListHashSet.h
Source/WTF/wtf/Liveness.h
Source/WTF/wtf/LocklessBag.h
Source/WTF/wtf/LoggingHashID.h
Source/WTF/wtf/MD5.h
Source/WTF/wtf/MachSendRight.h
Source/WTF/wtf/MainThreadData.h
Source/WTF/wtf/Markable.h
Source/WTF/wtf/MediaTime.h
Source/WTF/wtf/MemoryPressureHandler.h
Source/WTF/wtf/MessageQueue.h
Source/WTF/wtf/MetaAllocator.h
Source/WTF/wtf/MonotonicTime.h
Source/WTF/wtf/NaturalLoops.h
Source/WTF/wtf/NoLock.h
Source/WTF/wtf/OSAllocator.h
Source/WTF/wtf/OptionSet.h
Source/WTF/wtf/Optional.h
Source/WTF/wtf/OrderMaker.h
Source/WTF/wtf/Packed.h
Source/WTF/wtf/PackedIntVector.h
Source/WTF/wtf/PageBlock.h
Source/WTF/wtf/ParallelJobsOpenMP.h
Source/WTF/wtf/ParkingLot.h
Source/WTF/wtf/PriorityQueue.h
Source/WTF/wtf/RandomDevice.h
Source/WTF/wtf/Range.h
Source/WTF/wtf/RangeSet.h
Source/WTF/wtf/RecursableLambda.h
Source/WTF/wtf/RedBlackTree.h
Source/WTF/wtf/ResourceUsage.h
Source/WTF/wtf/RunLoop.cpp
Source/WTF/wtf/RunLoopTimer.h
Source/WTF/wtf/SHA1.h
Source/WTF/wtf/Seconds.h
Source/WTF/wtf/SegmentedVector.h
Source/WTF/wtf/SetForScope.h
Source/WTF/wtf/SingleRootGraph.h
Source/WTF/wtf/SinglyLinkedList.h
Source/WTF/wtf/SmallPtrSet.h
Source/WTF/wtf/SpanningTree.h
Source/WTF/wtf/Spectrum.h
Source/WTF/wtf/StackBounds.h
Source/WTF/wtf/StackShot.h
Source/WTF/wtf/StackShotProfiler.h
Source/WTF/wtf/StackStats.h
Source/WTF/wtf/StackTrace.h
Source/WTF/wtf/StreamBuffer.h
Source/WTF/wtf/SynchronizedFixedQueue.h
Source/WTF/wtf/SystemTracing.h
Source/WTF/wtf/ThreadGroup.h
Source/WTF/wtf/ThreadSpecific.h
Source/WTF/wtf/ThreadingPrimitives.h
Source/WTF/wtf/TimeWithDynamicClockType.h
Source/WTF/wtf/TimingScope.h
Source/WTF/wtf/TinyLRUCache.h
Source/WTF/wtf/TinyPtrSet.h
Source/WTF/wtf/URLParser.cpp
Source/WTF/wtf/URLParser.h
Source/WTF/wtf/Unexpected.h
Source/WTF/wtf/Variant.h
Source/WTF/wtf/WTFSemaphore.h
Source/WTF/wtf/WallTime.h
Source/WTF/wtf/WeakHashSet.h
Source/WTF/wtf/WeakRandom.h
Source/WTF/wtf/WordLock.h
Source/WTF/wtf/generic/MainThreadGeneric.cpp
Source/WTF/wtf/glib/GMutexLocker.h
Source/WTF/wtf/linux/CurrentProcessMemoryStatus.h
Source/WTF/wtf/posix/ThreadingPOSIX.cpp
Source/WTF/wtf/text/ASCIILiteral.h
Source/WTF/wtf/text/AtomString.h
Source/WTF/wtf/text/AtomStringImpl.h
Source/WTF/wtf/text/CString.h
Source/WTF/wtf/text/ExternalStringImpl.h
Source/WTF/wtf/text/LineBreakIteratorPoolICU.h
Source/WTF/wtf/text/NullTextBreakIterator.h
Source/WTF/wtf/text/OrdinalNumber.h
Source/WTF/wtf/text/StringBuffer.h
Source/WTF/wtf/text/StringBuilder.h
Source/WTF/wtf/text/StringConcatenateNumbers.h
Source/WTF/wtf/text/StringHasher.h
Source/WTF/wtf/text/StringImpl.h
Source/WTF/wtf/text/StringView.cpp
Source/WTF/wtf/text/StringView.h
Source/WTF/wtf/text/SymbolImpl.h
Source/WTF/wtf/text/SymbolRegistry.h
Source/WTF/wtf/text/TextBreakIterator.h
Source/WTF/wtf/text/TextPosition.h
Source/WTF/wtf/text/TextStream.h
Source/WTF/wtf/text/WTFString.h
Source/WTF/wtf/text/cf/TextBreakIteratorCF.h
Source/WTF/wtf/text/icu/TextBreakIteratorICU.h
Source/WTF/wtf/text/icu/UTextProviderLatin1.h
Source/WTF/wtf/threads/BinarySemaphore.h
Source/WTF/wtf/unicode/Collator.h
Source/WTF/wtf/win/GDIObject.h
Source/WTF/wtf/win/PathWalker.h
Source/WTF/wtf/win/Win32Handle.h
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/WorkerScriptController.cpp

index c4e73a8..ee93282 100644 (file)
@@ -388,6 +388,7 @@ enum CallbackType {
 namespace JSC {
 
 class ObjCCallbackFunctionImpl {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     ObjCCallbackFunctionImpl(NSInvocation *invocation, CallbackType type, Class instanceClass, std::unique_ptr<CallbackArgument> arguments, std::unique_ptr<CallbackResult> result)
         : m_type(type)
index a7b4b81..172531f 100644 (file)
@@ -1,3 +1,76 @@
+2019-08-12  Yusuke Suzuki  <ysuzuki@apple.com>
+
+        [WTF][JSC] Make JSC and WTF aggressively-fast-malloced
+        https://bugs.webkit.org/show_bug.cgi?id=200611
+
+        Reviewed by Saam Barati.
+
+        This patch aggressively puts many classes into FastMalloc. In JSC side, we grep `std::make_unique` etc. to find potentially system-malloc-allocated classes.
+        After this patch, all the JSC related allocations in JetStream2 cli is done from bmalloc. In the future, it would be nice that we add `WTF::makeUnique<T>` helper
+        function and throw a compile error if `T` is not FastMalloc annotated[1].
+
+        Putting WebKit classes in FastMalloc has many benefits.
+
+        1. Simply, it is fast.
+        2. vmmap can tell the amount of memory used for WebKit.
+        3. bmalloc can isolate WebKit memory allocation from the rest of the world. This is useful since we can know more about what component is corrupting the memory
+           from the memory corruption crash.
+
+        [1]: https://bugs.webkit.org/show_bug.cgi?id=200620
+
+        * API/ObjCCallbackFunction.mm:
+        * assembler/AbstractMacroAssembler.h:
+        * b3/B3PhiChildren.h:
+        * b3/air/AirAllocateRegistersAndStackAndGenerateCode.h:
+        * b3/air/AirDisassembler.h:
+        * bytecode/AccessCaseSnippetParams.h:
+        * bytecode/CallVariant.h:
+        * bytecode/DeferredSourceDump.h:
+        * bytecode/ExecutionCounter.h:
+        * bytecode/GetByIdStatus.h:
+        * bytecode/GetByIdVariant.h:
+        * bytecode/InByIdStatus.h:
+        * bytecode/InByIdVariant.h:
+        * bytecode/InstanceOfStatus.h:
+        * bytecode/InstanceOfVariant.h:
+        * bytecode/PutByIdStatus.h:
+        * bytecode/PutByIdVariant.h:
+        * bytecode/ValueProfile.h:
+        * dfg/DFGAbstractInterpreter.h:
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::newVariableAccessData):
+        * dfg/DFGFlowIndexing.h:
+        * dfg/DFGFlowMap.h:
+        * dfg/DFGLiveCatchVariablePreservationPhase.cpp:
+        (JSC::DFG::LiveCatchVariablePreservationPhase::newVariableAccessData):
+        * dfg/DFGMaximalFlushInsertionPhase.cpp:
+        (JSC::DFG::MaximalFlushInsertionPhase::newVariableAccessData):
+        * dfg/DFGOSRExit.h:
+        * dfg/DFGSpeculativeJIT.h:
+        * dfg/DFGVariableAccessData.h:
+        * disassembler/ARM64/A64DOpcode.h:
+        * inspector/remote/socket/RemoteInspectorMessageParser.h:
+        * inspector/remote/socket/RemoteInspectorSocket.h:
+        * inspector/remote/socket/RemoteInspectorSocketEndpoint.h:
+        * jit/PCToCodeOriginMap.h:
+        * runtime/BasicBlockLocation.h:
+        * runtime/DoublePredictionFuzzerAgent.h:
+        * runtime/JSRunLoopTimer.h:
+        * runtime/PromiseDeferredTimer.h:
+        (JSC::PromiseDeferredTimer::create): PromiseDeferredTimer should be allocated as `Ref<>` instead of `std::unique_ptr` since it is inheriting ThreadSafeRefCounted<>.
+        Holding such a class with std::unique_ptr could lead to potentially dangerous operations (like, someone holds it with Ref<> while it is deleted by std::unique_ptr<>).
+        * runtime/RandomizingFuzzerAgent.h:
+        * runtime/SymbolTable.h:
+        * runtime/VM.cpp:
+        (JSC::VM::VM):
+        * runtime/VM.h:
+        * tools/JSDollarVM.cpp:
+        * tools/SigillCrashAnalyzer.cpp:
+        * wasm/WasmFormat.h:
+        * wasm/WasmMemory.cpp:
+        * wasm/WasmSignature.h:
+        * yarr/YarrJIT.h:
+
 2019-08-12  Chris Dumez  <cdumez@apple.com>
 
         Add threading assertions to RefCounted
index eecd0c5..f87b467 100644 (file)
@@ -54,6 +54,7 @@ struct OSRExit;
 }
 
 class AbstractMacroAssemblerBase {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     enum StatusCondition {
         Success,
index 1d2c73d..9520554 100644 (file)
@@ -35,6 +35,7 @@
 namespace JSC { namespace B3 {
 
 class PhiChildren {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     PhiChildren(Procedure&);
     ~PhiChildren();
index fc1a21d..f109253 100644 (file)
@@ -39,6 +39,9 @@ namespace B3 { namespace Air {
 class Code;
 
 class GenerateAndAllocateRegisters {
+    WTF_MAKE_FAST_ALLOCATED;
+    WTF_MAKE_NONMOVABLE(GenerateAndAllocateRegisters);
+
     struct TmpData {
         StackSlot* spillSlot;
         Reg reg;
index f8a2b68..a266264 100644 (file)
@@ -40,6 +40,7 @@ class Code;
 struct Inst;
 
 class Disassembler {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     Disassembler() = default;
 
index a834070..2c2ba5f 100644 (file)
@@ -41,6 +41,7 @@ public:
     }
 
     class SlowPathCallGenerator {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         virtual ~SlowPathCallGenerator() { }
         virtual CCallHelpers::JumpList generate(AccessGenerationState&, const RegisterSet& usedRegistersBySnippet, CCallHelpers&) = 0;
index 5a1c55c..56748c8 100644 (file)
@@ -61,6 +61,7 @@ namespace JSC {
 // cannot use WriteBarrier<> here because this gets used inside the compiler.
 
 class CallVariant {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit CallVariant(JSCell* callee = nullptr)
         : m_callee(callee)
index d42450b..b5a7bf2 100644 (file)
@@ -33,6 +33,7 @@ namespace JSC {
 class CodeBlock;
 
 class DeferredSourceDump {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     DeferredSourceDump(CodeBlock*);
     DeferredSourceDump(CodeBlock*, CodeBlock* rootCodeBlock, JITType rootJITType, unsigned callerBytecodeIndex);
index 6711be5..76743df 100644 (file)
@@ -53,6 +53,8 @@ inline int32_t formattedTotalExecutionCount(float value)
 
 template<CountingVariant countingVariant>
 class ExecutionCounter {
+    WTF_MAKE_FAST_ALLOCATED;
+    WTF_MAKE_NONMOVABLE(ExecutionCounter);
 public:
     ExecutionCounter();
     void forceSlowPathConcurrently(); // If you use this, checkIfThresholdCrossedAndSet() may still return false.
index 47675b7..383d586 100644 (file)
@@ -44,6 +44,7 @@ class ModuleNamespaceAccessCase;
 class StructureStubInfo;
 
 class GetByIdStatus {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     enum State : uint8_t {
         // It's uncached so we have no information.
index 8d6af00..10a252e 100644 (file)
@@ -40,6 +40,7 @@ class GetByIdStatus;
 struct DumpContext;
 
 class GetByIdVariant {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     GetByIdVariant(
         const StructureSet& structureSet = StructureSet(), PropertyOffset offset = invalidOffset,
index f686d2c..8aeb760 100644 (file)
@@ -40,6 +40,7 @@ class CodeBlock;
 class StructureStubInfo;
 
 class InByIdStatus {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     enum State {
         // It's uncached so we have no information.
index 429a1f5..589f9ff 100644 (file)
@@ -39,6 +39,7 @@ class InByIdStatus;
 struct DumpContext;
 
 class InByIdVariant {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     InByIdVariant(const StructureSet& = StructureSet(), PropertyOffset = invalidOffset, const ObjectPropertyConditionSet& = ObjectPropertyConditionSet());
 
index 9163c89..f0e20d9 100644 (file)
@@ -37,6 +37,7 @@ class CodeBlock;
 class StructureStubInfo;
 
 class InstanceOfStatus {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     enum State {
         // It's uncached so we have no information.
index 1f13bbe..1e5f790 100644 (file)
@@ -33,6 +33,7 @@ namespace JSC {
 class InstanceOfStatus;
 
 class InstanceOfVariant {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     InstanceOfVariant() = default;
     InstanceOfVariant(const StructureSet&, const ObjectPropertyConditionSet&, JSObject* prototype, bool isHit);
index 19b978a..92b1b1a 100644 (file)
@@ -43,6 +43,7 @@ class StructureStubInfo;
 typedef HashMap<CodeOrigin, StructureStubInfo*, CodeOriginApproximateHash> StubInfoMap;
 
 class PutByIdStatus {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     enum State {
         // It's uncached so we have no information.
index caadd32..f9b0168 100644 (file)
@@ -34,6 +34,7 @@ namespace JSC {
 class CallLinkStatus;
 
 class PutByIdVariant {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     enum Kind {
         NotSet,
index 4883b4b..07335a3 100644 (file)
@@ -181,6 +181,8 @@ struct ValueProfileAndOperand : public ValueProfile {
 };
 
 struct ValueProfileAndOperandBuffer {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     ValueProfileAndOperandBuffer(unsigned size)
         : m_size(size)
     {
index 974b0cf..caa3b75 100644 (file)
@@ -37,6 +37,7 @@ namespace JSC { namespace DFG {
 
 template<typename AbstractStateType>
 class AbstractInterpreter {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     AbstractInterpreter(Graph&, AbstractStateType&);
     ~AbstractInterpreter();
index d125cc3..3ae75af 100644 (file)
@@ -267,7 +267,7 @@ private:
     {
         ASSERT(!operand.isConstant());
         
-        m_graph.m_variableAccessData.append(VariableAccessData(operand));
+        m_graph.m_variableAccessData.append(operand);
         return &m_graph.m_variableAccessData.last();
     }
     
index bd66561..c608867 100644 (file)
@@ -36,6 +36,7 @@ namespace JSC { namespace DFG {
 // Node-keyed maps. The special part is that it also allocated indices for the shadow values of Phi
 // nodes, which is needed for any flow-sensitive analysis.
 class FlowIndexing {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     FlowIndexing(Graph&);
     ~FlowIndexing();
index 133500f..45f6aac 100644 (file)
@@ -38,6 +38,7 @@ namespace JSC { namespace DFG {
 // values of Phis. This makes it easy to do both of those things.
 template<typename T>
 class FlowMap {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     FlowMap(Graph& graph)
         : m_graph(graph)
index 2f4f5d1..9eb46ca 100644 (file)
@@ -220,7 +220,7 @@ public:
     {
         ASSERT(!operand.isConstant());
         
-        m_graph.m_variableAccessData.append(VariableAccessData(operand));
+        m_graph.m_variableAccessData.append(operand);
         return &m_graph.m_variableAccessData.last();
     }
 };
index 394a8e6..d04e8ff 100644 (file)
@@ -150,7 +150,7 @@ public:
     {
         ASSERT(!operand.isConstant());
         
-        m_graph.m_variableAccessData.append(VariableAccessData(operand));
+        m_graph.m_variableAccessData.append(operand);
         return &m_graph.m_variableAccessData.last();
     }
 };
index f5422ea..817c3cd 100644 (file)
@@ -171,6 +171,7 @@ private:
 };
 
 struct SpeculationFailureDebugInfo {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     CodeBlock* codeBlock;
     ExitKind kind;
     unsigned bytecodeOffset;
index 2ac0672..507d2fc 100644 (file)
@@ -1747,6 +1747,7 @@ public:
 // in order to make space available for another.
 
 class JSValueOperand {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit JSValueOperand(SpeculativeJIT* jit, Edge edge, OperandSpeculationMode mode = AutomaticOperandSpeculation)
         : m_jit(jit)
@@ -1902,6 +1903,7 @@ private:
 };
 
 class StorageOperand {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit StorageOperand(SpeculativeJIT* jit, Edge edge)
         : m_jit(jit)
@@ -1959,6 +1961,7 @@ private:
 enum ReuseTag { Reuse };
 
 class GPRTemporary {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     GPRTemporary();
     GPRTemporary(SpeculativeJIT*);
@@ -2029,6 +2032,7 @@ private:
 };
 
 class JSValueRegsTemporary {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     JSValueRegsTemporary();
     JSValueRegsTemporary(SpeculativeJIT*);
@@ -2049,7 +2053,7 @@ private:
 };
 
 class FPRTemporary {
-    WTF_MAKE_NONCOPYABLE(FPRTemporary);
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     FPRTemporary(FPRTemporary&&);
     FPRTemporary(SpeculativeJIT*);
@@ -2123,6 +2127,7 @@ private:
 };
 
 class JSValueRegsFlushedCallResult {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     JSValueRegsFlushedCallResult(SpeculativeJIT* jit)
 #if USE(JSVALUE64)
@@ -2164,6 +2169,7 @@ private:
 // a bail-out to the non-speculative path will be taken.
 
 class SpeculateInt32Operand {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit SpeculateInt32Operand(SpeculativeJIT* jit, Edge edge, OperandSpeculationMode mode = AutomaticOperandSpeculation)
         : m_jit(jit)
@@ -2222,6 +2228,7 @@ private:
 };
 
 class SpeculateStrictInt32Operand {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit SpeculateStrictInt32Operand(SpeculativeJIT* jit, Edge edge, OperandSpeculationMode mode = AutomaticOperandSpeculation)
         : m_jit(jit)
@@ -2270,6 +2277,7 @@ private:
 
 // Gives you a canonical Int52 (i.e. it's left-shifted by 16, low bits zero).
 class SpeculateInt52Operand {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit SpeculateInt52Operand(SpeculativeJIT* jit, Edge edge)
         : m_jit(jit)
@@ -2317,6 +2325,7 @@ private:
 
 // Gives you a strict Int52 (i.e. the payload is in the low 48 bits, high 16 bits are sign-extended).
 class SpeculateStrictInt52Operand {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit SpeculateStrictInt52Operand(SpeculativeJIT* jit, Edge edge)
         : m_jit(jit)
@@ -2365,6 +2374,7 @@ private:
 enum OppositeShiftTag { OppositeShift };
 
 class SpeculateWhicheverInt52Operand {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit SpeculateWhicheverInt52Operand(SpeculativeJIT* jit, Edge edge)
         : m_jit(jit)
@@ -2442,6 +2452,7 @@ private:
 };
 
 class SpeculateDoubleOperand {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit SpeculateDoubleOperand(SpeculativeJIT* jit, Edge edge)
         : m_jit(jit)
@@ -2489,7 +2500,7 @@ private:
 };
 
 class SpeculateCellOperand {
-    WTF_MAKE_NONCOPYABLE(SpeculateCellOperand);
+    WTF_MAKE_FAST_ALLOCATED;
 
 public:
     explicit SpeculateCellOperand(SpeculativeJIT* jit, Edge edge, OperandSpeculationMode mode = AutomaticOperandSpeculation)
@@ -2554,6 +2565,7 @@ private:
 };
 
 class SpeculateBooleanOperand {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit SpeculateBooleanOperand(SpeculativeJIT* jit, Edge edge, OperandSpeculationMode mode = AutomaticOperandSpeculation)
         : m_jit(jit)
index 5bb4de1..1d3892f 100644 (file)
@@ -44,6 +44,8 @@ struct Node;
 enum DoubleBallot { VoteValue, VoteDouble };
 
 class VariableAccessData : public UnionFind<VariableAccessData> {
+    WTF_MAKE_FAST_ALLOCATED;
+    WTF_MAKE_NONCOPYABLE(VariableAccessData);
 public:
     VariableAccessData();
     VariableAccessData(VirtualRegister local);
index c876eb5..0851d56 100644 (file)
@@ -33,6 +33,7 @@ namespace JSC { namespace ARM64Disassembler {
 class A64DOpcode {
 private:
     class OpcodeGroup {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         OpcodeGroup(uint32_t opcodeMask, uint32_t opcodePattern, const char* (*format)(A64DOpcode*))
             : m_opcodeMask(opcodeMask)
index ae059fd..8c9eaea 100644 (file)
@@ -33,6 +33,7 @@
 namespace Inspector {
 
 class MessageParser {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static Vector<uint8_t> createMessage(const uint8_t*, size_t);
 
index bcc609f..bd2c5af 100644 (file)
@@ -91,6 +91,7 @@ void markWaitingWritable(PollingDescriptor&);
 void clearWaitingWritable(PollingDescriptor&);
 
 struct Connection {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     std::unique_ptr<MessageParser> parser;
     Vector<uint8_t> sendBuffer;
     PlatformSocketType socket { INVALID_SOCKET_VALUE };
index 79657c2..70f2d7a 100644 (file)
@@ -43,6 +43,7 @@ class MessageParser;
 class RemoteInspectorConnectionClient;
 
 class JS_EXPORT_PRIVATE RemoteInspectorSocketEndpoint {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static std::unique_ptr<RemoteInspectorSocketEndpoint> create(RemoteInspectorConnectionClient* inspectorClient, const char* name)
     {
index 2a8f25f..9fb62b6 100644 (file)
@@ -44,6 +44,7 @@ class LinkBuffer;
 class PCToCodeOriginMapBuilder;
 
 class PCToCodeOriginMapBuilder {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(PCToCodeOriginMapBuilder);
     friend class PCToCodeOriginMap;
 
@@ -75,6 +76,7 @@ private:
 
 // FIXME: <rdar://problem/39436658>
 class PCToCodeOriginMap {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(PCToCodeOriginMap);
 public:
     PCToCodeOriginMap(PCToCodeOriginMapBuilder&&, LinkBuffer&);
index f3d0035..9564663 100644 (file)
@@ -36,6 +36,7 @@ class CCallHelpers;
 class LLIntOffsetsExtractor;
 
 class BasicBlockLocation {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef std::pair<int, int> Gap;
 
index e6a04d0..acf565d 100644 (file)
@@ -32,6 +32,7 @@ namespace JSC {
 class VM;
 
 class DoublePredictionFuzzerAgent final : public FuzzerAgent {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     DoublePredictionFuzzerAgent(VM&);
 
index d03da29..1193388 100644 (file)
@@ -77,7 +77,10 @@ public:
     private:
         Lock m_lock;
 
-        struct PerVMData {
+        class PerVMData {
+            WTF_MAKE_FAST_ALLOCATED;
+            WTF_MAKE_NONCOPYABLE(PerVMData);
+        public:
 #if USE(CF)
             PerVMData(Manager&) { }
 #else
index a52eb64..ca94f96 100644 (file)
@@ -42,8 +42,6 @@ class PromiseDeferredTimer : public JSRunLoopTimer {
 public:
     using Base = JSRunLoopTimer;
 
-    PromiseDeferredTimer(VM&);
-
     void doWork(VM&) override;
 
     void addPendingPromise(VM&, JSPromiseDeferred*, Vector<Strong<JSCell>>&& dependencies);
@@ -59,7 +57,14 @@ public:
 
     JS_EXPORT_PRIVATE void runRunLoop();
 
+    static Ref<PromiseDeferredTimer> create(VM& vm)
+    {
+        return adoptRef(*new PromiseDeferredTimer(vm));
+    }
+
 private:
+    PromiseDeferredTimer(VM&);
+
     HashMap<JSPromiseDeferred*, Vector<Strong<JSCell>>> m_pendingPromises;
     Lock m_taskLock;
     bool m_runTasks { true };
index 472277a..6c74ad0 100644 (file)
@@ -34,6 +34,7 @@ namespace JSC {
 class VM;
 
 class RandomizingFuzzerAgent final : public FuzzerAgent {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     RandomizingFuzzerAgent(VM&);
 
index 8b74a20..4d55e8c 100644 (file)
@@ -721,6 +721,7 @@ private:
     unsigned m_scopeType : 3; // ScopeType
     
     struct SymbolTableRareData {
+        WTF_MAKE_STRUCT_FAST_ALLOCATED;
         UniqueIDMap m_uniqueIDMap;
         OffsetToVariableMap m_offsetToVariableMap;
         UniqueTypeSetMap m_uniqueTypeSetMap;
index 7ad8af2..4e2d0d3 100644 (file)
@@ -292,7 +292,7 @@ VM::VM(VMType vmType, HeapType heapType)
     , clientData(0)
     , topEntryFrame(nullptr)
     , topCallFrame(CallFrame::noCaller())
-    , promiseDeferredTimer(std::make_unique<PromiseDeferredTimer>(*this))
+    , promiseDeferredTimer(PromiseDeferredTimer::create(*this))
     , m_atomStringTable(vmType == Default ? Thread::current().atomStringTable() : new AtomStringTable)
     , propertyNames(nullptr)
     , emptyList(new ArgList)
index c10f37e..e50f819 100644 (file)
@@ -548,7 +548,7 @@ public:
     Strong<JSCell> m_sentinelSetBucket;
     Strong<JSCell> m_sentinelMapBucket;
 
-    std::unique_ptr<PromiseDeferredTimer> promiseDeferredTimer;
+    Ref<PromiseDeferredTimer> promiseDeferredTimer;
     
     JSCell* currentlyDestructingCallbackObject;
     const ClassInfo* currentlyDestructingCallbackObjectClassInfo { nullptr };
index 5e9f8d1..c95917a 100644 (file)
@@ -177,6 +177,7 @@ private:
 };
 
 class ElementHandleOwner : public WeakHandleOwner {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     bool isReachableFromOpaqueRoots(Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor, const char** reason) override
     {
index 5a9d99a..8868677 100644 (file)
@@ -44,6 +44,8 @@ namespace JSC {
 struct SignalContext;
 
 class SigillCrashAnalyzer {
+    WTF_MAKE_FAST_ALLOCATED;
+    WTF_MAKE_NONCOPYABLE(SigillCrashAnalyzer);
 public:
     static SigillCrashAnalyzer& instance();
 
index 01a309c..0669bb4 100644 (file)
@@ -122,6 +122,7 @@ inline const char* makeString(ExternalKind kind)
 }
 
 struct Import {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     const Name module;
     const Name field;
     ExternalKind kind;
@@ -129,6 +130,7 @@ struct Import {
 };
 
 struct Export {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     const Name field;
     ExternalKind kind;
     unsigned kindIndex; // Index in the vector of the corresponding kind.
@@ -137,6 +139,7 @@ struct Export {
 String makeString(const Name& characters);
 
 struct Global {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     enum Mutability : uint8_t {
         // FIXME auto-generate this. https://bugs.webkit.org/show_bug.cgi?id=165231
         Mutable = 1,
@@ -157,12 +160,14 @@ struct Global {
 };
 
 struct FunctionData {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     size_t start;
     size_t end;
     Vector<uint8_t> data;
 };
 
 class I32InitExpr {
+    WTF_MAKE_FAST_ALLOCATED;
     enum Type : uint8_t {
         Global,
         Const
@@ -198,6 +203,7 @@ private:
 };
 
 struct Segment {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     uint32_t sizeInBytes;
     I32InitExpr offset;
     // Bytes are allocated at the end.
@@ -213,6 +219,7 @@ struct Segment {
 };
 
 struct Element {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     Element(uint32_t tableIndex, I32InitExpr offset)
         : tableIndex(tableIndex)
         , offset(offset)
@@ -224,6 +231,7 @@ struct Element {
 };
 
 class TableInformation {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     TableInformation()
     {
@@ -256,6 +264,7 @@ private:
 };
     
 struct CustomSection {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     Name name;
     Vector<uint8_t> payload;
 };
@@ -279,16 +288,19 @@ inline bool isValidNameType(Int val)
 }
 
 struct UnlinkedWasmToWasmCall {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     CodeLocationNearCall<WasmEntryPtrTag> callLocation;
     size_t functionIndexSpace;
 };
 
 struct Entrypoint {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     std::unique_ptr<B3::Compilation> compilation;
     RegisterAtOffsetList calleeSaveRegisters;
 };
 
 struct InternalFunction {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     CodeLocationDataLabelPtr<WasmEntryPtrTag> calleeMoveLocation;
     Entrypoint entrypoint;
 };
@@ -297,6 +309,7 @@ struct InternalFunction {
 // with all imports, and then all internal functions. WasmToWasmImportableFunction and FunctionIndexSpace are only
 // meant as fast lookup tables for these opcodes and do not own code.
 struct WasmToWasmImportableFunction {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     using LoadLocation = MacroAssemblerCodePtr<WasmEntryPtrTag>*;
     static ptrdiff_t offsetOfSignatureIndex() { return OBJECT_OFFSETOF(WasmToWasmImportableFunction, signatureIndex); }
     static ptrdiff_t offsetOfEntrypointLoadLocation() { return OBJECT_OFFSETOF(WasmToWasmImportableFunction, entrypointLoadLocation); }
index 5910382..fdeab94 100644 (file)
@@ -94,6 +94,8 @@ struct MemoryResult {
 };
 
 class MemoryManager {
+    WTF_MAKE_FAST_ALLOCATED;
+    WTF_MAKE_NONCOPYABLE(MemoryManager);
 public:
     MemoryManager()
         : m_maxFastMemoryCount(Options::maxNumWebAssemblyFastMemories())
index c6135d4..0493f47 100644 (file)
@@ -153,6 +153,7 @@ namespace JSC { namespace Wasm {
 // Note: signatures are never removed because that would require accounting for all WebAssembly.Module and which signatures they use. The maximum number of signatures is bounded, and isn't worth the counting overhead. We could clear everything when we reach zero outstanding WebAssembly.Module. https://bugs.webkit.org/show_bug.cgi?id=166037
 class SignatureInformation {
     WTF_MAKE_NONCOPYABLE(SignatureInformation);
+    WTF_MAKE_FAST_ALLOCATED;
 
     SignatureInformation();
 
index e607cca..6be814b 100644 (file)
@@ -57,6 +57,9 @@ enum class JITFailureReason : uint8_t {
 };
 
 class YarrCodeBlock {
+    WTF_MAKE_FAST_ALLOCATED;
+    WTF_MAKE_NONCOPYABLE(YarrCodeBlock);
+
     // Technically freeParenContext and parenContextSize are only used if ENABLE(YARR_JIT_ALL_PARENS_EXPRESSIONS) is set. Fortunately, all the calling conventions we support have caller save argument registers.
     using YarrJITCode8 = EncodedMatchResult (*)(const LChar* input, unsigned start, unsigned length, int* output, void* freeParenContext, unsigned parenContextSize) YARR_CALL;
     using YarrJITCode16 = EncodedMatchResult (*)(const UChar* input, unsigned start, unsigned length, int* output, void* freeParenContext, unsigned parenContextSize) YARR_CALL;
index 026f270..a62af77 100644 (file)
@@ -1,3 +1,703 @@
+2019-08-12  Yusuke Suzuki  <ysuzuki@apple.com>
+
+        [WTF][JSC] Make JSC and WTF aggressively-fast-malloced
+        https://bugs.webkit.org/show_bug.cgi?id=200611
+
+        Reviewed by Saam Barati.
+
+        WTF has many data structures, in particular, containers. And these containers can be allocated like `std::make_unique<Container>()`.
+        Without WTF_MAKE_FAST_ALLOCATED, this container itself is allocated from the system malloc. This patch attaches WTF_MAKE_FAST_ALLOCATED
+        more aggressively not to allocate them from the system malloc. And we add some `final` to containers and classes that would be never inherited.
+
+        * wtf/Assertions.cpp:
+        * wtf/Atomics.h:
+        * wtf/AutodrainedPool.h:
+        * wtf/Bag.h:
+        (WTF::Bag::Bag): Deleted.
+        (WTF::Bag::~Bag): Deleted.
+        (WTF::Bag::clear): Deleted.
+        (WTF::Bag::add): Deleted.
+        (WTF::Bag::iterator::iterator): Deleted.
+        (WTF::Bag::iterator::operator! const): Deleted.
+        (WTF::Bag::iterator::operator* const): Deleted.
+        (WTF::Bag::iterator::operator++): Deleted.
+        (WTF::Bag::iterator::operator== const): Deleted.
+        (WTF::Bag::iterator::operator!= const): Deleted.
+        (WTF::Bag::begin): Deleted.
+        (WTF::Bag::begin const): Deleted.
+        (WTF::Bag::end const): Deleted.
+        (WTF::Bag::isEmpty const): Deleted.
+        (WTF::Bag::unwrappedHead const): Deleted.
+        * wtf/BitVector.h:
+        (WTF::BitVector::BitVector): Deleted.
+        (WTF::BitVector::~BitVector): Deleted.
+        (WTF::BitVector::operator=): Deleted.
+        (WTF::BitVector::size const): Deleted.
+        (WTF::BitVector::ensureSize): Deleted.
+        (WTF::BitVector::quickGet const): Deleted.
+        (WTF::BitVector::quickSet): Deleted.
+        (WTF::BitVector::quickClear): Deleted.
+        (WTF::BitVector::get const): Deleted.
+        (WTF::BitVector::contains const): Deleted.
+        (WTF::BitVector::set): Deleted.
+        (WTF::BitVector::add): Deleted.
+        (WTF::BitVector::ensureSizeAndSet): Deleted.
+        (WTF::BitVector::clear): Deleted.
+        (WTF::BitVector::remove): Deleted.
+        (WTF::BitVector::merge): Deleted.
+        (WTF::BitVector::filter): Deleted.
+        (WTF::BitVector::exclude): Deleted.
+        (WTF::BitVector::bitCount const): Deleted.
+        (WTF::BitVector::isEmpty const): Deleted.
+        (WTF::BitVector::findBit const): Deleted.
+        (WTF::BitVector::isEmptyValue const): Deleted.
+        (WTF::BitVector::isDeletedValue const): Deleted.
+        (WTF::BitVector::isEmptyOrDeletedValue const): Deleted.
+        (WTF::BitVector::operator== const): Deleted.
+        (WTF::BitVector::hash const): Deleted.
+        (WTF::BitVector::iterator::iterator): Deleted.
+        (WTF::BitVector::iterator::operator* const): Deleted.
+        (WTF::BitVector::iterator::operator++): Deleted.
+        (WTF::BitVector::iterator::isAtEnd const): Deleted.
+        (WTF::BitVector::iterator::operator== const): Deleted.
+        (WTF::BitVector::iterator::operator!= const): Deleted.
+        (WTF::BitVector::begin const): Deleted.
+        (WTF::BitVector::end const): Deleted.
+        (WTF::BitVector::bitsInPointer): Deleted.
+        (WTF::BitVector::maxInlineBits): Deleted.
+        (WTF::BitVector::byteCount): Deleted.
+        (WTF::BitVector::makeInlineBits): Deleted.
+        (WTF::BitVector::cleanseInlineBits): Deleted.
+        (WTF::BitVector::bitCount): Deleted.
+        (WTF::BitVector::findBitFast const): Deleted.
+        (WTF::BitVector::findBitSimple const): Deleted.
+        (WTF::BitVector::OutOfLineBits::numBits const): Deleted.
+        (WTF::BitVector::OutOfLineBits::numWords const): Deleted.
+        (WTF::BitVector::OutOfLineBits::bits): Deleted.
+        (WTF::BitVector::OutOfLineBits::bits const): Deleted.
+        (WTF::BitVector::OutOfLineBits::OutOfLineBits): Deleted.
+        (WTF::BitVector::isInline const): Deleted.
+        (WTF::BitVector::outOfLineBits const): Deleted.
+        (WTF::BitVector::outOfLineBits): Deleted.
+        (WTF::BitVector::bits): Deleted.
+        (WTF::BitVector::bits const): Deleted.
+        * wtf/Bitmap.h:
+        (WTF::Bitmap::size): Deleted.
+        (WTF::Bitmap::iterator::iterator): Deleted.
+        (WTF::Bitmap::iterator::operator* const): Deleted.
+        (WTF::Bitmap::iterator::operator++): Deleted.
+        (WTF::Bitmap::iterator::operator== const): Deleted.
+        (WTF::Bitmap::iterator::operator!= const): Deleted.
+        (WTF::Bitmap::begin const): Deleted.
+        (WTF::Bitmap::end const): Deleted.
+        * wtf/Box.h:
+        * wtf/BumpPointerAllocator.h:
+        * wtf/CPUTime.h:
+        * wtf/CheckedBoolean.h:
+        * wtf/CommaPrinter.h:
+        (WTF::CommaPrinter::CommaPrinter): Deleted.
+        (WTF::CommaPrinter::dump const): Deleted.
+        (WTF::CommaPrinter::didPrint const): Deleted.
+        * wtf/CompactPointerTuple.h:
+        (WTF::CompactPointerTuple::encodeType): Deleted.
+        (WTF::CompactPointerTuple::decodeType): Deleted.
+        (WTF::CompactPointerTuple::CompactPointerTuple): Deleted.
+        (WTF::CompactPointerTuple::pointer const): Deleted.
+        (WTF::CompactPointerTuple::setPointer): Deleted.
+        (WTF::CompactPointerTuple::type const): Deleted.
+        (WTF::CompactPointerTuple::setType): Deleted.
+        * wtf/CompilationThread.h:
+        (WTF::CompilationScope::CompilationScope): Deleted.
+        (WTF::CompilationScope::~CompilationScope): Deleted.
+        (WTF::CompilationScope::leaveEarly): Deleted.
+        * wtf/CompletionHandler.h:
+        (WTF::CompletionHandler<Out):
+        (WTF::Detail::CallableWrapper<CompletionHandler<Out):
+        (WTF::CompletionHandlerCallingScope::CompletionHandlerCallingScope): Deleted.
+        (WTF::CompletionHandlerCallingScope::~CompletionHandlerCallingScope): Deleted.
+        (WTF::CompletionHandlerCallingScope::CompletionHandler<void): Deleted.
+        * wtf/ConcurrentBuffer.h:
+        (WTF::ConcurrentBuffer::ConcurrentBuffer): Deleted.
+        (WTF::ConcurrentBuffer::~ConcurrentBuffer): Deleted.
+        (WTF::ConcurrentBuffer::growExact): Deleted.
+        (WTF::ConcurrentBuffer::grow): Deleted.
+        (WTF::ConcurrentBuffer::array const): Deleted.
+        (WTF::ConcurrentBuffer::operator[]): Deleted.
+        (WTF::ConcurrentBuffer::operator[] const): Deleted.
+        (WTF::ConcurrentBuffer::createArray): Deleted.
+        * wtf/ConcurrentPtrHashSet.h:
+        (WTF::ConcurrentPtrHashSet::contains): Deleted.
+        (WTF::ConcurrentPtrHashSet::add): Deleted.
+        (WTF::ConcurrentPtrHashSet::size const): Deleted.
+        (WTF::ConcurrentPtrHashSet::Table::maxLoad const): Deleted.
+        (WTF::ConcurrentPtrHashSet::hash): Deleted.
+        (WTF::ConcurrentPtrHashSet::cast): Deleted.
+        (WTF::ConcurrentPtrHashSet::containsImpl const): Deleted.
+        (WTF::ConcurrentPtrHashSet::addImpl): Deleted.
+        * wtf/ConcurrentVector.h:
+        (WTF::ConcurrentVector::~ConcurrentVector): Deleted.
+        (WTF::ConcurrentVector::size const): Deleted.
+        (WTF::ConcurrentVector::isEmpty const): Deleted.
+        (WTF::ConcurrentVector::at): Deleted.
+        (WTF::ConcurrentVector::at const): Deleted.
+        (WTF::ConcurrentVector::operator[]): Deleted.
+        (WTF::ConcurrentVector::operator[] const): Deleted.
+        (WTF::ConcurrentVector::first): Deleted.
+        (WTF::ConcurrentVector::first const): Deleted.
+        (WTF::ConcurrentVector::last): Deleted.
+        (WTF::ConcurrentVector::last const): Deleted.
+        (WTF::ConcurrentVector::takeLast): Deleted.
+        (WTF::ConcurrentVector::append): Deleted.
+        (WTF::ConcurrentVector::alloc): Deleted.
+        (WTF::ConcurrentVector::removeLast): Deleted.
+        (WTF::ConcurrentVector::grow): Deleted.
+        (WTF::ConcurrentVector::begin): Deleted.
+        (WTF::ConcurrentVector::end): Deleted.
+        (WTF::ConcurrentVector::segmentExistsFor): Deleted.
+        (WTF::ConcurrentVector::segmentFor): Deleted.
+        (WTF::ConcurrentVector::subscriptFor): Deleted.
+        (WTF::ConcurrentVector::ensureSegmentsFor): Deleted.
+        (WTF::ConcurrentVector::ensureSegment): Deleted.
+        (WTF::ConcurrentVector::allocateSegment): Deleted.
+        * wtf/Condition.h:
+        (WTF::Condition::waitUntil): Deleted.
+        (WTF::Condition::waitFor): Deleted.
+        (WTF::Condition::wait): Deleted.
+        (WTF::Condition::notifyOne): Deleted.
+        (WTF::Condition::notifyAll): Deleted.
+        * wtf/CountingLock.h:
+        (WTF::CountingLock::LockHooks::lockHook): Deleted.
+        (WTF::CountingLock::LockHooks::unlockHook): Deleted.
+        (WTF::CountingLock::LockHooks::parkHook): Deleted.
+        (WTF::CountingLock::LockHooks::handoffHook): Deleted.
+        (WTF::CountingLock::tryLock): Deleted.
+        (WTF::CountingLock::lock): Deleted.
+        (WTF::CountingLock::unlock): Deleted.
+        (WTF::CountingLock::isHeld const): Deleted.
+        (WTF::CountingLock::isLocked const): Deleted.
+        (WTF::CountingLock::Count::operator bool const): Deleted.
+        (WTF::CountingLock::Count::operator== const): Deleted.
+        (WTF::CountingLock::Count::operator!= const): Deleted.
+        (WTF::CountingLock::tryOptimisticRead): Deleted.
+        (WTF::CountingLock::validate): Deleted.
+        (WTF::CountingLock::doOptimizedRead): Deleted.
+        (WTF::CountingLock::tryOptimisticFencelessRead): Deleted.
+        (WTF::CountingLock::fencelessValidate): Deleted.
+        (WTF::CountingLock::doOptimizedFencelessRead): Deleted.
+        (WTF::CountingLock::getCount): Deleted.
+        * wtf/CrossThreadQueue.h:
+        * wtf/CrossThreadTask.h:
+        * wtf/CryptographicallyRandomNumber.cpp:
+        * wtf/DataMutex.h:
+        * wtf/DateMath.h:
+        * wtf/Deque.h:
+        (WTF::Deque::size const): Deleted.
+        (WTF::Deque::isEmpty const): Deleted.
+        (WTF::Deque::begin): Deleted.
+        (WTF::Deque::end): Deleted.
+        (WTF::Deque::begin const): Deleted.
+        (WTF::Deque::end const): Deleted.
+        (WTF::Deque::rbegin): Deleted.
+        (WTF::Deque::rend): Deleted.
+        (WTF::Deque::rbegin const): Deleted.
+        (WTF::Deque::rend const): Deleted.
+        (WTF::Deque::first): Deleted.
+        (WTF::Deque::first const): Deleted.
+        (WTF::Deque::last): Deleted.
+        (WTF::Deque::last const): Deleted.
+        (WTF::Deque::append): Deleted.
+        * wtf/Dominators.h:
+        * wtf/DoublyLinkedList.h:
+        * wtf/Expected.h:
+        * wtf/FastBitVector.h:
+        * wtf/FileMetadata.h:
+        * wtf/FileSystem.h:
+        * wtf/GraphNodeWorklist.h:
+        * wtf/GregorianDateTime.h:
+        (WTF::GregorianDateTime::GregorianDateTime): Deleted.
+        (WTF::GregorianDateTime::year const): Deleted.
+        (WTF::GregorianDateTime::month const): Deleted.
+        (WTF::GregorianDateTime::yearDay const): Deleted.
+        (WTF::GregorianDateTime::monthDay const): Deleted.
+        (WTF::GregorianDateTime::weekDay const): Deleted.
+        (WTF::GregorianDateTime::hour const): Deleted.
+        (WTF::GregorianDateTime::minute const): Deleted.
+        (WTF::GregorianDateTime::second const): Deleted.
+        (WTF::GregorianDateTime::utcOffset const): Deleted.
+        (WTF::GregorianDateTime::isDST const): Deleted.
+        (WTF::GregorianDateTime::setYear): Deleted.
+        (WTF::GregorianDateTime::setMonth): Deleted.
+        (WTF::GregorianDateTime::setYearDay): Deleted.
+        (WTF::GregorianDateTime::setMonthDay): Deleted.
+        (WTF::GregorianDateTime::setWeekDay): Deleted.
+        (WTF::GregorianDateTime::setHour): Deleted.
+        (WTF::GregorianDateTime::setMinute): Deleted.
+        (WTF::GregorianDateTime::setSecond): Deleted.
+        (WTF::GregorianDateTime::setUtcOffset): Deleted.
+        (WTF::GregorianDateTime::setIsDST): Deleted.
+        (WTF::GregorianDateTime::operator tm const): Deleted.
+        (WTF::GregorianDateTime::copyFrom): Deleted.
+        * wtf/HashTable.h:
+        * wtf/Hasher.h:
+        * wtf/HexNumber.h:
+        * wtf/Indenter.h:
+        * wtf/IndexMap.h:
+        * wtf/IndexSet.h:
+        * wtf/IndexSparseSet.h:
+        * wtf/IndexedContainerIterator.h:
+        * wtf/Insertion.h:
+        * wtf/IteratorAdaptors.h:
+        * wtf/IteratorRange.h:
+        * wtf/KeyValuePair.h:
+        * wtf/ListHashSet.h:
+        (WTF::ListHashSet::begin): Deleted.
+        (WTF::ListHashSet::end): Deleted.
+        (WTF::ListHashSet::begin const): Deleted.
+        (WTF::ListHashSet::end const): Deleted.
+        (WTF::ListHashSet::random): Deleted.
+        (WTF::ListHashSet::random const): Deleted.
+        (WTF::ListHashSet::rbegin): Deleted.
+        (WTF::ListHashSet::rend): Deleted.
+        (WTF::ListHashSet::rbegin const): Deleted.
+        (WTF::ListHashSet::rend const): Deleted.
+        * wtf/Liveness.h:
+        * wtf/LocklessBag.h:
+        (WTF::LocklessBag::LocklessBag): Deleted.
+        (WTF::LocklessBag::add): Deleted.
+        (WTF::LocklessBag::iterate): Deleted.
+        (WTF::LocklessBag::consumeAll): Deleted.
+        (WTF::LocklessBag::consumeAllWithNode): Deleted.
+        (WTF::LocklessBag::~LocklessBag): Deleted.
+        * wtf/LoggingHashID.h:
+        * wtf/MD5.h:
+        * wtf/MachSendRight.h:
+        * wtf/MainThreadData.h:
+        * wtf/Markable.h:
+        * wtf/MediaTime.h:
+        * wtf/MemoryPressureHandler.h:
+        * wtf/MessageQueue.h:
+        (WTF::MessageQueue::MessageQueue): Deleted.
+        * wtf/MetaAllocator.h:
+        * wtf/MonotonicTime.h:
+        (WTF::MonotonicTime::MonotonicTime): Deleted.
+        (WTF::MonotonicTime::fromRawSeconds): Deleted.
+        (WTF::MonotonicTime::infinity): Deleted.
+        (WTF::MonotonicTime::nan): Deleted.
+        (WTF::MonotonicTime::secondsSinceEpoch const): Deleted.
+        (WTF::MonotonicTime::approximateMonotonicTime const): Deleted.
+        (WTF::MonotonicTime::operator bool const): Deleted.
+        (WTF::MonotonicTime::operator+ const): Deleted.
+        (WTF::MonotonicTime::operator- const): Deleted.
+        (WTF::MonotonicTime::operator% const): Deleted.
+        (WTF::MonotonicTime::operator+=): Deleted.
+        (WTF::MonotonicTime::operator-=): Deleted.
+        (WTF::MonotonicTime::operator== const): Deleted.
+        (WTF::MonotonicTime::operator!= const): Deleted.
+        (WTF::MonotonicTime::operator< const): Deleted.
+        (WTF::MonotonicTime::operator> const): Deleted.
+        (WTF::MonotonicTime::operator<= const): Deleted.
+        (WTF::MonotonicTime::operator>= const): Deleted.
+        (WTF::MonotonicTime::isolatedCopy const): Deleted.
+        (WTF::MonotonicTime::encode const): Deleted.
+        (WTF::MonotonicTime::decode): Deleted.
+        * wtf/NaturalLoops.h:
+        * wtf/NoLock.h:
+        * wtf/OSAllocator.h:
+        * wtf/OptionSet.h:
+        * wtf/Optional.h:
+        * wtf/OrderMaker.h:
+        * wtf/Packed.h:
+        (WTF::alignof):
+        * wtf/PackedIntVector.h:
+        (WTF::PackedIntVector::PackedIntVector): Deleted.
+        (WTF::PackedIntVector::operator=): Deleted.
+        (WTF::PackedIntVector::size const): Deleted.
+        (WTF::PackedIntVector::ensureSize): Deleted.
+        (WTF::PackedIntVector::resize): Deleted.
+        (WTF::PackedIntVector::clearAll): Deleted.
+        (WTF::PackedIntVector::get const): Deleted.
+        (WTF::PackedIntVector::set): Deleted.
+        (WTF::PackedIntVector::mask): Deleted.
+        * wtf/PageBlock.h:
+        * wtf/ParallelJobsOpenMP.h:
+        * wtf/ParkingLot.h:
+        * wtf/PriorityQueue.h:
+        (WTF::PriorityQueue::size const): Deleted.
+        (WTF::PriorityQueue::isEmpty const): Deleted.
+        (WTF::PriorityQueue::enqueue): Deleted.
+        (WTF::PriorityQueue::peek const): Deleted.
+        (WTF::PriorityQueue::dequeue): Deleted.
+        (WTF::PriorityQueue::decreaseKey): Deleted.
+        (WTF::PriorityQueue::increaseKey): Deleted.
+        (WTF::PriorityQueue::begin const): Deleted.
+        (WTF::PriorityQueue::end const): Deleted.
+        (WTF::PriorityQueue::isValidHeap const): Deleted.
+        (WTF::PriorityQueue::parentOf): Deleted.
+        (WTF::PriorityQueue::leftChildOf): Deleted.
+        (WTF::PriorityQueue::rightChildOf): Deleted.
+        (WTF::PriorityQueue::siftUp): Deleted.
+        (WTF::PriorityQueue::siftDown): Deleted.
+        * wtf/RandomDevice.h:
+        * wtf/Range.h:
+        * wtf/RangeSet.h:
+        (WTF::RangeSet::RangeSet): Deleted.
+        (WTF::RangeSet::~RangeSet): Deleted.
+        (WTF::RangeSet::add): Deleted.
+        (WTF::RangeSet::contains const): Deleted.
+        (WTF::RangeSet::overlaps const): Deleted.
+        (WTF::RangeSet::clear): Deleted.
+        (WTF::RangeSet::dump const): Deleted.
+        (WTF::RangeSet::dumpRaw const): Deleted.
+        (WTF::RangeSet::begin const): Deleted.
+        (WTF::RangeSet::end const): Deleted.
+        (WTF::RangeSet::addAll): Deleted.
+        (WTF::RangeSet::compact): Deleted.
+        (WTF::RangeSet::overlapsNonEmpty): Deleted.
+        (WTF::RangeSet::subsumesNonEmpty): Deleted.
+        (WTF::RangeSet::findRange const): Deleted.
+        * wtf/RecursableLambda.h:
+        * wtf/RedBlackTree.h:
+        (WTF::RedBlackTree::Node::successor const): Deleted.
+        (WTF::RedBlackTree::Node::predecessor const): Deleted.
+        (WTF::RedBlackTree::Node::successor): Deleted.
+        (WTF::RedBlackTree::Node::predecessor): Deleted.
+        (WTF::RedBlackTree::Node::reset): Deleted.
+        (WTF::RedBlackTree::Node::parent const): Deleted.
+        (WTF::RedBlackTree::Node::setParent): Deleted.
+        (WTF::RedBlackTree::Node::left const): Deleted.
+        (WTF::RedBlackTree::Node::setLeft): Deleted.
+        (WTF::RedBlackTree::Node::right const): Deleted.
+        (WTF::RedBlackTree::Node::setRight): Deleted.
+        (WTF::RedBlackTree::Node::color const): Deleted.
+        (WTF::RedBlackTree::Node::setColor): Deleted.
+        (WTF::RedBlackTree::RedBlackTree): Deleted.
+        (WTF::RedBlackTree::insert): Deleted.
+        (WTF::RedBlackTree::remove): Deleted.
+        (WTF::RedBlackTree::findExact const): Deleted.
+        (WTF::RedBlackTree::findLeastGreaterThanOrEqual const): Deleted.
+        (WTF::RedBlackTree::findGreatestLessThanOrEqual const): Deleted.
+        (WTF::RedBlackTree::first const): Deleted.
+        (WTF::RedBlackTree::last const): Deleted.
+        (WTF::RedBlackTree::size): Deleted.
+        (WTF::RedBlackTree::isEmpty): Deleted.
+        (WTF::RedBlackTree::treeMinimum): Deleted.
+        (WTF::RedBlackTree::treeMaximum): Deleted.
+        (WTF::RedBlackTree::treeInsert): Deleted.
+        (WTF::RedBlackTree::leftRotate): Deleted.
+        (WTF::RedBlackTree::rightRotate): Deleted.
+        (WTF::RedBlackTree::removeFixup): Deleted.
+        * wtf/ResourceUsage.h:
+        * wtf/RunLoop.cpp:
+        * wtf/RunLoopTimer.h:
+        * wtf/SHA1.h:
+        * wtf/Seconds.h:
+        (WTF::Seconds::Seconds): Deleted.
+        (WTF::Seconds::value const): Deleted.
+        (WTF::Seconds::minutes const): Deleted.
+        (WTF::Seconds::seconds const): Deleted.
+        (WTF::Seconds::milliseconds const): Deleted.
+        (WTF::Seconds::microseconds const): Deleted.
+        (WTF::Seconds::nanoseconds const): Deleted.
+        (WTF::Seconds::minutesAs const): Deleted.
+        (WTF::Seconds::secondsAs const): Deleted.
+        (WTF::Seconds::millisecondsAs const): Deleted.
+        (WTF::Seconds::microsecondsAs const): Deleted.
+        (WTF::Seconds::nanosecondsAs const): Deleted.
+        (WTF::Seconds::fromMinutes): Deleted.
+        (WTF::Seconds::fromHours): Deleted.
+        (WTF::Seconds::fromMilliseconds): Deleted.
+        (WTF::Seconds::fromMicroseconds): Deleted.
+        (WTF::Seconds::fromNanoseconds): Deleted.
+        (WTF::Seconds::infinity): Deleted.
+        (WTF::Seconds::nan): Deleted.
+        (WTF::Seconds::operator bool const): Deleted.
+        (WTF::Seconds::operator+ const): Deleted.
+        (WTF::Seconds::operator- const): Deleted.
+        (WTF::Seconds::operator* const): Deleted.
+        (WTF::Seconds::operator/ const): Deleted.
+        (WTF::Seconds::operator% const): Deleted.
+        (WTF::Seconds::operator+=): Deleted.
+        (WTF::Seconds::operator-=): Deleted.
+        (WTF::Seconds::operator*=): Deleted.
+        (WTF::Seconds::operator/=): Deleted.
+        (WTF::Seconds::operator%=): Deleted.
+        (WTF::Seconds::operator== const): Deleted.
+        (WTF::Seconds::operator!= const): Deleted.
+        (WTF::Seconds::operator< const): Deleted.
+        (WTF::Seconds::operator> const): Deleted.
+        (WTF::Seconds::operator<= const): Deleted.
+        (WTF::Seconds::operator>= const): Deleted.
+        (WTF::Seconds::isolatedCopy const): Deleted.
+        (WTF::Seconds::encode const): Deleted.
+        (WTF::Seconds::decode): Deleted.
+        * wtf/SegmentedVector.h:
+        (WTF::SegmentedVector::~SegmentedVector): Deleted.
+        (WTF::SegmentedVector::size const): Deleted.
+        (WTF::SegmentedVector::isEmpty const): Deleted.
+        (WTF::SegmentedVector::at): Deleted.
+        (WTF::SegmentedVector::at const): Deleted.
+        (WTF::SegmentedVector::operator[]): Deleted.
+        (WTF::SegmentedVector::operator[] const): Deleted.
+        (WTF::SegmentedVector::first): Deleted.
+        (WTF::SegmentedVector::first const): Deleted.
+        (WTF::SegmentedVector::last): Deleted.
+        (WTF::SegmentedVector::last const): Deleted.
+        (WTF::SegmentedVector::takeLast): Deleted.
+        (WTF::SegmentedVector::append): Deleted.
+        (WTF::SegmentedVector::alloc): Deleted.
+        (WTF::SegmentedVector::removeLast): Deleted.
+        (WTF::SegmentedVector::grow): Deleted.
+        (WTF::SegmentedVector::clear): Deleted.
+        (WTF::SegmentedVector::begin): Deleted.
+        (WTF::SegmentedVector::end): Deleted.
+        (WTF::SegmentedVector::shrinkToFit): Deleted.
+        (WTF::SegmentedVector::deleteAllSegments): Deleted.
+        (WTF::SegmentedVector::segmentExistsFor): Deleted.
+        (WTF::SegmentedVector::segmentFor): Deleted.
+        (WTF::SegmentedVector::subscriptFor): Deleted.
+        (WTF::SegmentedVector::ensureSegmentsFor): Deleted.
+        (WTF::SegmentedVector::ensureSegment): Deleted.
+        (WTF::SegmentedVector::allocateSegment): Deleted.
+        * wtf/SetForScope.h:
+        * wtf/SingleRootGraph.h:
+        * wtf/SinglyLinkedList.h:
+        * wtf/SmallPtrSet.h:
+        * wtf/SpanningTree.h:
+        * wtf/Spectrum.h:
+        * wtf/StackBounds.h:
+        * wtf/StackShot.h:
+        * wtf/StackShotProfiler.h:
+        * wtf/StackStats.h:
+        * wtf/StackTrace.h:
+        * wtf/StreamBuffer.h:
+        * wtf/SynchronizedFixedQueue.h:
+        (WTF::SynchronizedFixedQueue::create): Deleted.
+        (WTF::SynchronizedFixedQueue::open): Deleted.
+        (WTF::SynchronizedFixedQueue::close): Deleted.
+        (WTF::SynchronizedFixedQueue::isOpen): Deleted.
+        (WTF::SynchronizedFixedQueue::enqueue): Deleted.
+        (WTF::SynchronizedFixedQueue::dequeue): Deleted.
+        (WTF::SynchronizedFixedQueue::SynchronizedFixedQueue): Deleted.
+        * wtf/SystemTracing.h:
+        * wtf/ThreadGroup.h:
+        (WTF::ThreadGroup::create): Deleted.
+        (WTF::ThreadGroup::threads const): Deleted.
+        (WTF::ThreadGroup::getLock): Deleted.
+        (WTF::ThreadGroup::weakFromThis): Deleted.
+        * wtf/ThreadSpecific.h:
+        * wtf/ThreadingPrimitives.h:
+        (WTF::Mutex::impl): Deleted.
+        * wtf/TimeWithDynamicClockType.h:
+        (WTF::TimeWithDynamicClockType::TimeWithDynamicClockType): Deleted.
+        (WTF::TimeWithDynamicClockType::fromRawSeconds): Deleted.
+        (WTF::TimeWithDynamicClockType::secondsSinceEpoch const): Deleted.
+        (WTF::TimeWithDynamicClockType::clockType const): Deleted.
+        (WTF::TimeWithDynamicClockType::withSameClockAndRawSeconds const): Deleted.
+        (WTF::TimeWithDynamicClockType::operator bool const): Deleted.
+        (WTF::TimeWithDynamicClockType::operator+ const): Deleted.
+        (WTF::TimeWithDynamicClockType::operator- const): Deleted.
+        (WTF::TimeWithDynamicClockType::operator+=): Deleted.
+        (WTF::TimeWithDynamicClockType::operator-=): Deleted.
+        (WTF::TimeWithDynamicClockType::operator== const): Deleted.
+        (WTF::TimeWithDynamicClockType::operator!= const): Deleted.
+        * wtf/TimingScope.h:
+        * wtf/TinyLRUCache.h:
+        * wtf/TinyPtrSet.h:
+        * wtf/URLParser.cpp:
+        * wtf/URLParser.h:
+        * wtf/Unexpected.h:
+        * wtf/Variant.h:
+        * wtf/WTFSemaphore.h:
+        (WTF::Semaphore::Semaphore): Deleted.
+        (WTF::Semaphore::signal): Deleted.
+        (WTF::Semaphore::waitUntil): Deleted.
+        (WTF::Semaphore::waitFor): Deleted.
+        (WTF::Semaphore::wait): Deleted.
+        * wtf/WallTime.h:
+        (WTF::WallTime::WallTime): Deleted.
+        (WTF::WallTime::fromRawSeconds): Deleted.
+        (WTF::WallTime::infinity): Deleted.
+        (WTF::WallTime::nan): Deleted.
+        (WTF::WallTime::secondsSinceEpoch const): Deleted.
+        (WTF::WallTime::approximateWallTime const): Deleted.
+        (WTF::WallTime::operator bool const): Deleted.
+        (WTF::WallTime::operator+ const): Deleted.
+        (WTF::WallTime::operator- const): Deleted.
+        (WTF::WallTime::operator+=): Deleted.
+        (WTF::WallTime::operator-=): Deleted.
+        (WTF::WallTime::operator== const): Deleted.
+        (WTF::WallTime::operator!= const): Deleted.
+        (WTF::WallTime::operator< const): Deleted.
+        (WTF::WallTime::operator> const): Deleted.
+        (WTF::WallTime::operator<= const): Deleted.
+        (WTF::WallTime::operator>= const): Deleted.
+        (WTF::WallTime::isolatedCopy const): Deleted.
+        * wtf/WeakHashSet.h:
+        (WTF::WeakHashSet::WeakHashSetConstIterator::WeakHashSetConstIterator): Deleted.
+        (WTF::WeakHashSet::WeakHashSetConstIterator::get const): Deleted.
+        (WTF::WeakHashSet::WeakHashSetConstIterator::operator* const): Deleted.
+        (WTF::WeakHashSet::WeakHashSetConstIterator::operator-> const): Deleted.
+        (WTF::WeakHashSet::WeakHashSetConstIterator::operator++): Deleted.
+        (WTF::WeakHashSet::WeakHashSetConstIterator::skipEmptyBuckets): Deleted.
+        (WTF::WeakHashSet::WeakHashSetConstIterator::operator== const): Deleted.
+        (WTF::WeakHashSet::WeakHashSetConstIterator::operator!= const): Deleted.
+        (WTF::WeakHashSet::WeakHashSet): Deleted.
+        (WTF::WeakHashSet::begin const): Deleted.
+        (WTF::WeakHashSet::end const): Deleted.
+        (WTF::WeakHashSet::add): Deleted.
+        (WTF::WeakHashSet::remove): Deleted.
+        (WTF::WeakHashSet::contains const): Deleted.
+        (WTF::WeakHashSet::capacity const): Deleted.
+        (WTF::WeakHashSet::computesEmpty const): Deleted.
+        (WTF::WeakHashSet::hasNullReferences const): Deleted.
+        (WTF::WeakHashSet::computeSize const): Deleted.
+        (WTF::WeakHashSet::checkConsistency const): Deleted.
+        * wtf/WeakRandom.h:
+        (WTF::WeakRandom::WeakRandom): Deleted.
+        (WTF::WeakRandom::setSeed): Deleted.
+        (WTF::WeakRandom::seed const): Deleted.
+        (WTF::WeakRandom::get): Deleted.
+        (WTF::WeakRandom::getUint32): Deleted.
+        (WTF::WeakRandom::lowOffset): Deleted.
+        (WTF::WeakRandom::highOffset): Deleted.
+        (WTF::WeakRandom::nextState): Deleted.
+        (WTF::WeakRandom::generate): Deleted.
+        (WTF::WeakRandom::advance): Deleted.
+        * wtf/WordLock.h:
+        (WTF::WordLock::lock): Deleted.
+        (WTF::WordLock::unlock): Deleted.
+        (WTF::WordLock::isHeld const): Deleted.
+        (WTF::WordLock::isLocked const): Deleted.
+        (WTF::WordLock::isFullyReset const): Deleted.
+        * wtf/generic/MainThreadGeneric.cpp:
+        * wtf/glib/GMutexLocker.h:
+        * wtf/linux/CurrentProcessMemoryStatus.h:
+        * wtf/posix/ThreadingPOSIX.cpp:
+        (WTF::Semaphore::Semaphore): Deleted.
+        (WTF::Semaphore::~Semaphore): Deleted.
+        (WTF::Semaphore::wait): Deleted.
+        (WTF::Semaphore::post): Deleted.
+        * wtf/text/ASCIILiteral.h:
+        (WTF::ASCIILiteral::operator const char* const): Deleted.
+        (WTF::ASCIILiteral::fromLiteralUnsafe): Deleted.
+        (WTF::ASCIILiteral::null): Deleted.
+        (WTF::ASCIILiteral::characters const): Deleted.
+        (WTF::ASCIILiteral::ASCIILiteral): Deleted.
+        * wtf/text/AtomString.h:
+        (WTF::AtomString::operator=): Deleted.
+        (WTF::AtomString::isHashTableDeletedValue const): Deleted.
+        (WTF::AtomString::existingHash const): Deleted.
+        (WTF::AtomString::operator const String& const): Deleted.
+        (WTF::AtomString::string const): Deleted.
+        (WTF::AtomString::impl const): Deleted.
+        (WTF::AtomString::is8Bit const): Deleted.
+        (WTF::AtomString::characters8 const): Deleted.
+        (WTF::AtomString::characters16 const): Deleted.
+        (WTF::AtomString::length const): Deleted.
+        (WTF::AtomString::operator[] const): Deleted.
+        (WTF::AtomString::contains const): Deleted.
+        (WTF::AtomString::containsIgnoringASCIICase const): Deleted.
+        (WTF::AtomString::find const): Deleted.
+        (WTF::AtomString::findIgnoringASCIICase const): Deleted.
+        (WTF::AtomString::startsWith const): Deleted.
+        (WTF::AtomString::startsWithIgnoringASCIICase const): Deleted.
+        (WTF::AtomString::endsWith const): Deleted.
+        (WTF::AtomString::endsWithIgnoringASCIICase const): Deleted.
+        (WTF::AtomString::toInt const): Deleted.
+        (WTF::AtomString::toDouble const): Deleted.
+        (WTF::AtomString::toFloat const): Deleted.
+        (WTF::AtomString::percentage const): Deleted.
+        (WTF::AtomString::isNull const): Deleted.
+        (WTF::AtomString::isEmpty const): Deleted.
+        (WTF::AtomString::operator NSString * const): Deleted.
+        * wtf/text/AtomStringImpl.h:
+        (WTF::AtomStringImpl::lookUp): Deleted.
+        (WTF::AtomStringImpl::add): Deleted.
+        (WTF::AtomStringImpl::addWithStringTableProvider): Deleted.
+        * wtf/text/CString.h:
+        (WTF::CStringBuffer::data): Deleted.
+        (WTF::CStringBuffer::length const): Deleted.
+        (WTF::CStringBuffer::CStringBuffer): Deleted.
+        (WTF::CStringBuffer::mutableData): Deleted.
+        (WTF::CString::CString): Deleted.
+        (WTF::CString::data const): Deleted.
+        (WTF::CString::length const): Deleted.
+        (WTF::CString::isNull const): Deleted.
+        (WTF::CString::buffer const): Deleted.
+        (WTF::CString::isHashTableDeletedValue const): Deleted.
+        * wtf/text/ExternalStringImpl.h:
+        (WTF::ExternalStringImpl::freeExternalBuffer): Deleted.
+        * wtf/text/LineBreakIteratorPoolICU.h:
+        * wtf/text/NullTextBreakIterator.h:
+        * wtf/text/OrdinalNumber.h:
+        * wtf/text/StringBuffer.h:
+        * wtf/text/StringBuilder.h:
+        * wtf/text/StringConcatenateNumbers.h:
+        * wtf/text/StringHasher.h:
+        * wtf/text/StringImpl.h:
+        * wtf/text/StringView.cpp:
+        * wtf/text/StringView.h:
+        (WTF::StringView::left const): Deleted.
+        (WTF::StringView::right const): Deleted.
+        (WTF::StringView::underlyingStringIsValid const): Deleted.
+        (WTF::StringView::setUnderlyingString): Deleted.
+        * wtf/text/SymbolImpl.h:
+        (WTF::SymbolImpl::StaticSymbolImpl::StaticSymbolImpl): Deleted.
+        (WTF::SymbolImpl::StaticSymbolImpl::operator SymbolImpl&): Deleted.
+        (WTF::PrivateSymbolImpl::PrivateSymbolImpl): Deleted.
+        (WTF::RegisteredSymbolImpl::symbolRegistry const): Deleted.
+        (WTF::RegisteredSymbolImpl::clearSymbolRegistry): Deleted.
+        (WTF::RegisteredSymbolImpl::RegisteredSymbolImpl): Deleted.
+        * wtf/text/SymbolRegistry.h:
+        * wtf/text/TextBreakIterator.h:
+        * wtf/text/TextPosition.h:
+        * wtf/text/TextStream.h:
+        * wtf/text/WTFString.h:
+        (WTF::String::swap): Deleted.
+        (WTF::String::adopt): Deleted.
+        (WTF::String::isNull const): Deleted.
+        (WTF::String::isEmpty const): Deleted.
+        (WTF::String::impl const): Deleted.
+        (WTF::String::releaseImpl): Deleted.
+        (WTF::String::length const): Deleted.
+        (WTF::String::characters8 const): Deleted.
+        (WTF::String::characters16 const): Deleted.
+        (WTF::String::is8Bit const): Deleted.
+        (WTF::String::sizeInBytes const): Deleted.
+        (WTF::String::operator[] const): Deleted.
+        (WTF::String::find const): Deleted.
+        (WTF::String::findIgnoringASCIICase const): Deleted.
+        (WTF::String::reverseFind const): Deleted.
+        (WTF::String::contains const): Deleted.
+        (WTF::String::containsIgnoringASCIICase const): Deleted.
+        (WTF::String::startsWith const): Deleted.
+        (WTF::String::startsWithIgnoringASCIICase const): Deleted.
+        (WTF::String::hasInfixStartingAt const): Deleted.
+        (WTF::String::endsWith const): Deleted.
+        (WTF::String::endsWithIgnoringASCIICase const): Deleted.
+        (WTF::String::hasInfixEndingAt const): Deleted.
+        (WTF::String::append): Deleted.
+        (WTF::String::left const): Deleted.
+        (WTF::String::right const): Deleted.
+        (WTF::String::createUninitialized): Deleted.
+        (WTF::String::fromUTF8WithLatin1Fallback): Deleted.
+        (WTF::String::isAllASCII const): Deleted.
+        (WTF::String::isAllLatin1 const): Deleted.
+        (WTF::String::isSpecialCharacter const): Deleted.
+        (WTF::String::isHashTableDeletedValue const): Deleted.
+        (WTF::String::hash const): Deleted.
+        (WTF::String::existingHash const): Deleted.
+        * wtf/text/cf/TextBreakIteratorCF.h:
+        * wtf/text/icu/TextBreakIteratorICU.h:
+        * wtf/text/icu/UTextProviderLatin1.h:
+        * wtf/threads/BinarySemaphore.h:
+        (WTF::BinarySemaphore::waitFor): Deleted.
+        (WTF::BinarySemaphore::wait): Deleted.
+        * wtf/unicode/Collator.h:
+        * wtf/win/GDIObject.h:
+        * wtf/win/PathWalker.h:
+        * wtf/win/Win32Handle.h:
+
 2019-08-12  Chris Dumez  <cdumez@apple.com>
 
         Unreviewed, fix post landing review comments for r248533 from Darin.
index ffd050a..37fd2c8 100644 (file)
@@ -361,6 +361,7 @@ void WTFReportError(const char* file, int line, const char* function, const char
 }
 
 class WTFLoggingAccumulator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     void accumulate(const String&);
     void resetAccumulatedLogs();
index 1402833..3139ee1 100644 (file)
@@ -53,6 +53,8 @@ ALWAYS_INLINE bool hasFence(std::memory_order order)
 
 template<typename T>
 struct Atomic {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     // Don't pass a non-default value for the order parameter unless you really know
     // what you are doing and have thought about it very hard. The cost of seq_cst
     // is usually not high enough to justify the risk.
@@ -346,6 +348,7 @@ inline InternalDependencyType opaqueMixture(T value, Arguments... arguments)
 }
 
 class Dependency {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     Dependency()
         : m_value(0)
@@ -408,6 +411,8 @@ private:
 
 template<typename InputType, typename ValueType>
 struct InputAndValue {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     InputAndValue() { }
     
     InputAndValue(InputType input, ValueType value)
index b667f8e..b1f18a7 100644 (file)
@@ -41,6 +41,7 @@ namespace WTF {
 // It can be used in cross-platform code; will compile down to nothing for non-Cocoa platforms.
 
 class AutodrainedPool {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(AutodrainedPool);
 
 public:
index 7490ddd..49cf29e 100644 (file)
@@ -52,7 +52,7 @@ public:
 } // namespace Private
 
 template<typename T, typename PassedPtrTraits = DumbPtrTraits<T>>
-class Bag {
+class Bag final {
     WTF_MAKE_NONCOPYABLE(Bag);
     WTF_MAKE_FAST_ALLOCATED;
     using Node = Private::BagNode<T, PassedPtrTraits>;
@@ -95,6 +95,7 @@ public:
     }
     
     class iterator {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         iterator()
             : m_node(0)
index 5f75970..6967fbb 100644 (file)
@@ -60,7 +60,8 @@ namespace WTF {
 // juggle a lot of variable-length BitVectors and you're worried about wasting
 // space.
 
-class BitVector {
+class BitVector final {
+    WTF_MAKE_FAST_ALLOCATED;
 public: 
     BitVector()
         : m_bitsOrPointer(makeInlineBits(0))
@@ -297,6 +298,7 @@ public:
     }
     
     class iterator {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         iterator()
             : m_bitVector(nullptr)
index e423345..b5d30fd 100644 (file)
@@ -29,7 +29,7 @@
 namespace WTF {
 
 template<size_t bitmapSize, typename WordType = uint32_t>
-class Bitmap {
+class Bitmap final {
     WTF_MAKE_FAST_ALLOCATED;
     
     static_assert(sizeof(WordType) <= sizeof(unsigned), "WordType must not be bigger than unsigned");
@@ -70,6 +70,7 @@ public:
     size_t findBit(size_t startIndex, bool value) const;
     
     class iterator {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         iterator()
             : m_bitmap(nullptr)
index d67087f..0f16d72 100644 (file)
@@ -34,6 +34,7 @@ namespace WTF {
 // count to it.
 template<typename T>
 class Box {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     Box() = default;
     Box(Box&&) = default;
index 642ad66..d1bba03 100644 (file)
@@ -34,6 +34,7 @@ namespace WTF {
 #define MINIMUM_BUMP_POOL_SIZE 0x1000
 
 class BumpPointerPool {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     // ensureCapacity will check whether the current pool has capacity to
     // allocate 'size' bytes of memory  If it does not, it will attempt to
@@ -215,6 +216,7 @@ private:
 // This allocator is non-renetrant, it is encumbant on the clients to ensure
 // startAllocator() is not called again until stopAllocator() has been called.
 class BumpPointerAllocator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     BumpPointerAllocator()
         : m_head(0)
index d289660..e9886e7 100644 (file)
@@ -31,6 +31,8 @@
 namespace WTF {
 
 struct CPUTime {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     MonotonicTime cpuTime;
     Seconds userTime;
     Seconds systemTime;
index b27c795..5f0acea 100644 (file)
@@ -28,6 +28,7 @@
 #include <wtf/Assertions.h>
 
 class CheckedBoolean {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
 #if !ASSERT_DISABLED
     CheckedBoolean(const CheckedBoolean& other)
index 3695d0b..a148928 100644 (file)
@@ -29,7 +29,8 @@
 
 namespace WTF {
 
-class CommaPrinter {
+class CommaPrinter final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     CommaPrinter(const char* comma = ", ", const char* start = "")
         : m_comma(comma)
index 9075a60..21f7b2d 100644 (file)
@@ -35,7 +35,8 @@ namespace WTF {
 // In 64bit, we use the upper 5 bits and lower 3 bits (zero due to alignment) since these bits are safe to use even
 // with 5-level page tables where the effective pointer width is 57bits.
 template<typename PointerType, typename Type>
-class CompactPointerTuple {
+class CompactPointerTuple final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static_assert(sizeof(Type) == 1, "");
     static_assert(std::is_pointer<PointerType>::value, "");
index 06e7160..0fe1289 100644 (file)
@@ -29,7 +29,8 @@
 
 namespace WTF {
 
-class CompilationScope {
+class CompilationScope final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     CompilationScope()
         : m_oldValue(Thread::exchangeIsCompilationThread(true))
index 5fdd332..7f123ec 100644 (file)
@@ -35,6 +35,7 @@ template<typename> class CompletionHandler;
 // Wraps a Function to make sure it is always called once and only once.
 template <typename Out, typename... In>
 class CompletionHandler<Out(In...)> {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     CompletionHandler() = default;
 
@@ -75,6 +76,7 @@ namespace Detail {
 
 template<typename Out, typename... In>
 class CallableWrapper<CompletionHandler<Out(In...)>, Out, In...> : public CallableWrapperBase<Out, In...> {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit CallableWrapper(CompletionHandler<Out(In...)>&& completionHandler)
         : m_completionHandler(WTFMove(completionHandler))
@@ -88,7 +90,8 @@ private:
 
 } // namespace Detail
 
-class CompletionHandlerCallingScope {
+class CompletionHandlerCallingScope final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     CompletionHandlerCallingScope() = default;
 
index 6da7e28..fca29fd 100644 (file)
@@ -37,7 +37,7 @@ namespace WTF {
 // ConcurrentBuffer is suitable for when you plan to store immutable data and sometimes append to it.
 // It supports storing data that is not copy-constructable but bit-copyable.
 template<typename T>
-class ConcurrentBuffer {
+class ConcurrentBuffer final {
     WTF_MAKE_NONCOPYABLE(ConcurrentBuffer);
     WTF_MAKE_FAST_ALLOCATED;
 public:
index b782028..1c58b03 100644 (file)
@@ -52,7 +52,7 @@ namespace WTF {
 //
 // ConcurrentPtrHashSet's main user, the GC, sees a 98% nop add rate in Speedometer. That's why this
 // focuses so much on cases where the table does not change.
-class ConcurrentPtrHashSet {
+class ConcurrentPtrHashSet final {
     WTF_MAKE_NONCOPYABLE(ConcurrentPtrHashSet);
     WTF_MAKE_FAST_ALLOCATED;
 
index 77588b5..0b541b8 100644 (file)
@@ -36,6 +36,7 @@ namespace WTF {
 // An iterator for ConcurrentVector. It supports only the pre ++ operator
 template <typename T, size_t SegmentSize = 8> class ConcurrentVector;
 template <typename T, size_t SegmentSize = 8> class ConcurrentVectorIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 private:
     friend class ConcurrentVector<T, SegmentSize>;
 public:
@@ -94,7 +95,7 @@ private:
 // works because we guarantee shrinking the vector is impossible and that growing the vector doesn't
 // delete old vector spines.
 template <typename T, size_t SegmentSize>
-class ConcurrentVector {
+class ConcurrentVector final {
     friend class ConcurrentVectorIterator<T, SegmentSize>;
     WTF_MAKE_NONCOPYABLE(ConcurrentVector);
     WTF_MAKE_FAST_ALLOCATED;
index c60c576..815501f 100644 (file)
@@ -39,8 +39,9 @@ namespace WTF {
 // notifyAll() require just a load and branch for the fast case where no thread is waiting.
 // This condition variable, when used with WTF::Lock, can outperform a system condition variable
 // and lock by up to 58x.
-class Condition {
+class Condition final {
     WTF_MAKE_NONCOPYABLE(Condition);
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     // Condition will accept any kind of time and convert it internally, but this typedef tells
     // you what kind of time Condition would be able to use without conversions. However, if you
index 0c471b9..2ad24f0 100644 (file)
@@ -54,7 +54,7 @@ namespace WTF {
 //
 // The latter is important for us because some GC paths are known to be sensitive to fences on ARM.
 
-class CountingLock {
+class CountingLock final {
     WTF_MAKE_NONCOPYABLE(CountingLock);
     WTF_MAKE_FAST_ALLOCATED;
 
index 4905f7a..bc2b1ea 100644 (file)
@@ -36,7 +36,8 @@
 namespace WTF {
 
 template<typename DataType>
-class CrossThreadQueue {
+class CrossThreadQueue final {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(CrossThreadQueue);
 public:
     CrossThreadQueue() = default;
index 2982e0d..d02e16e 100644 (file)
@@ -34,6 +34,7 @@
 namespace WTF {
 
 class CrossThreadTask {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     CrossThreadTask() = default;
 
index 9000310..7ac4e18 100644 (file)
@@ -40,6 +40,7 @@ namespace WTF {
 namespace {
 
 class ARC4Stream {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     ARC4Stream();
 
index 32cf4ba..8a5c5ec 100644 (file)
@@ -26,6 +26,7 @@ namespace WTF {
 
 template<typename T>
 class DataMutex {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(DataMutex);
 public:
     template<typename ...Args>
index 8ba89e7..f9e2811 100644 (file)
@@ -57,6 +57,8 @@ enum TimeType {
 };
 
 struct LocalTimeOffset {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     LocalTimeOffset()
         : isDST(false)
         , offset(0)
index 2e00ff5..0d73465 100644 (file)
@@ -43,7 +43,7 @@ template<typename T, size_t inlineCapacity> class DequeIterator;
 template<typename T, size_t inlineCapacity> class DequeConstIterator;
 
 template<typename T, size_t inlineCapacity = 0>
-class Deque {
+class Deque final {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef T ValueType;
@@ -142,6 +142,7 @@ private:
 
 template<typename T, size_t inlineCapacity = 0>
 class DequeIteratorBase {
+    WTF_MAKE_FAST_ALLOCATED;
 protected:
     DequeIteratorBase();
     DequeIteratorBase(const Deque<T, inlineCapacity>*, size_t);
@@ -178,6 +179,7 @@ private:
 
 template<typename T, size_t inlineCapacity = 0>
 class DequeIterator : public DequeIteratorBase<T, inlineCapacity> {
+    WTF_MAKE_FAST_ALLOCATED;
 private:
     typedef DequeIteratorBase<T, inlineCapacity> Base;
     typedef DequeIterator<T, inlineCapacity> Iterator;
@@ -209,6 +211,7 @@ public:
 
 template<typename T, size_t inlineCapacity = 0>
 class DequeConstIterator : public DequeIteratorBase<T, inlineCapacity> {
+    WTF_MAKE_FAST_ALLOCATED;
 private:
     typedef DequeIteratorBase<T, inlineCapacity> Base;
     typedef DequeConstIterator<T, inlineCapacity> Iterator;
index c1faf61..4891c13 100644 (file)
@@ -38,6 +38,7 @@ namespace WTF {
 
 template<typename Graph>
 class Dominators {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     using List = typename Graph::List;
 
@@ -308,6 +309,7 @@ private:
     // list" (see http://dl.acm.org/citation.cfm?id=802184).
 
     class LengauerTarjan {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         LengauerTarjan(Graph& graph)
             : m_graph(graph)
@@ -475,6 +477,8 @@ private:
         }
 
         struct BlockData {
+            WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
             BlockData()
                 : parent(nullptr)
                 , preNumber(UINT_MAX)
@@ -500,6 +504,7 @@ private:
     };
 
     class NaiveDominators {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         NaiveDominators(Graph& graph)
             : m_graph(graph)
@@ -605,6 +610,8 @@ private:
     };
 
     struct ValidationContext {
+        WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
         ValidationContext(Graph& graph, Dominators& dominators)
             : graph(graph)
             , dominators(dominators)
@@ -669,6 +676,8 @@ private:
         NaiveDominators naiveDominators;
     
         struct Error {
+            WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
             typename Graph::Node from;
             typename Graph::Node to;
             const char* message;
@@ -726,6 +735,8 @@ private:
     }
     
     struct BlockData {
+        WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
         BlockData()
             : idomParent(nullptr)
             , preNumber(UINT_MAX)
index b9ac46b..ecef018 100644 (file)
@@ -65,7 +65,8 @@ template<typename T> inline T* DoublyLinkedListNode<T>::next() const
     return static_cast<const T*>(this)->m_next;
 }
 
-template<typename T> class DoublyLinkedList {
+template<typename T>
+class DoublyLinkedList {
 public:
     DoublyLinkedList();
     
index 6f36840..cae6811 100644 (file)
@@ -417,6 +417,7 @@ using base_select = typename std::conditional<
 
 template<class T, class E>
 class expected : private __expected_detail::base_select<T, E> {
+    WTF_MAKE_FAST_ALLOCATED;
     typedef __expected_detail::base_select<T, E> base;
 
 public:
index 9119a1d..a8ed6b8 100644 (file)
@@ -38,6 +38,7 @@ class PrintStream;
 inline size_t fastBitVectorArrayLength(size_t numBits) { return (numBits + 31) / 32; }
 
 class FastBitVectorWordView {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef FastBitVectorWordView ViewType;
     
@@ -66,6 +67,7 @@ private:
 };
 
 class FastBitVectorWordOwner {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef FastBitVectorWordView ViewType;
     
@@ -166,6 +168,7 @@ private:
 
 template<typename Left, typename Right>
 class FastBitVectorAndWords {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef FastBitVectorAndWords ViewType;
     
@@ -195,6 +198,7 @@ private:
     
 template<typename Left, typename Right>
 class FastBitVectorOrWords {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef FastBitVectorOrWords ViewType;
     
@@ -224,6 +228,7 @@ private:
     
 template<typename View>
 class FastBitVectorNotWords {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef FastBitVectorNotWords ViewType;
     
@@ -252,6 +257,7 @@ class FastBitVector;
 
 template<typename Words>
 class FastBitVectorImpl {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     FastBitVectorImpl()
         : m_words()
index 0bb88fc..d3a0a2a 100644 (file)
@@ -35,6 +35,8 @@
 namespace WTF {
 
 struct FileMetadata {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     // The last modification time of the file, in seconds.
     WallTime modificationTime;
 
index 5fc0bfe..805a0e4 100644 (file)
@@ -200,6 +200,7 @@ WTF_EXPORT_PRIVATE void makeSafeToUseMemoryMapForPath(const String&);
 WTF_EXPORT_PRIVATE bool unmapViewOfFile(void* buffer, size_t);
 
 class MappedFileData {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     MappedFileData() { }
     MappedFileData(MappedFileData&&);
index 4ae9975..dd12712 100644 (file)
@@ -31,6 +31,7 @@ namespace WTF {
 
 template<typename Node, typename Set = HashSet<Node>>
 class GraphNodeWorklist {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     GraphNodeWorklist() { }
     ~GraphNodeWorklist() { }
@@ -72,6 +73,8 @@ private:
 
 template<typename Node, typename T>
 struct GraphNodeWith {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     GraphNodeWith()
         : node()
         , data()
@@ -92,6 +95,7 @@ struct GraphNodeWith {
 
 template<typename Node, typename T, typename Set = HashSet<Node>>
 class ExtendedGraphNodeWorklist {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     ExtendedGraphNodeWorklist() { }
 
@@ -141,6 +145,8 @@ enum class GraphVisitOrder : uint8_t {
 
 template<typename Node>
 struct GraphNodeWithOrder {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     GraphNodeWithOrder()
         : node()
         , order(GraphVisitOrder::Pre)
@@ -161,6 +167,7 @@ struct GraphNodeWithOrder {
 
 template<typename Node, typename Set = HashSet<Node>>
 class PostOrderGraphNodeWorklist {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     PostOrderGraphNodeWorklist()
     {
index 49e93d0..25dd15c 100644 (file)
@@ -30,7 +30,8 @@
 
 namespace WTF {
 
-class GregorianDateTime {
+class GregorianDateTime final {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(GregorianDateTime);
 public:
     GregorianDateTime()
index 940b052..3b1e953 100644 (file)
@@ -105,6 +105,7 @@ namespace WTF {
 
     template<typename Key, typename Value, typename Extractor, typename HashFunctions, typename Traits, typename KeyTraits>
     class HashTableConstIterator : public std::iterator<std::forward_iterator_tag, Value, std::ptrdiff_t, const Value*, const Value&> {
+        WTF_MAKE_FAST_ALLOCATED;
     private:
         typedef HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits> HashTableType;
         typedef HashTableIterator<Key, Value, Extractor, HashFunctions, Traits, KeyTraits> iterator;
@@ -241,6 +242,7 @@ namespace WTF {
 
     template<typename Key, typename Value, typename Extractor, typename HashFunctions, typename Traits, typename KeyTraits>
     class HashTableIterator : public std::iterator<std::forward_iterator_tag, Value, std::ptrdiff_t, Value*, Value&> {
+        WTF_MAKE_FAST_ALLOCATED;
     private:
         typedef HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits> HashTableType;
         typedef HashTableIterator<Key, Value, Extractor, HashFunctions, Traits, KeyTraits> iterator;
@@ -311,6 +313,8 @@ namespace WTF {
 
 #if DUMP_HASHTABLE_STATS_PER_TABLE
         struct Stats {
+            WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
             Stats()
                 : numAccesses(0)
                 , numRehashes(0)
index 7ca3354..ad554e9 100644 (file)
@@ -29,6 +29,7 @@ namespace WTF {
 
 // Deprecated. Use Hasher instead.
 class IntegerHasher {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     void add(uint32_t integer)
     {
@@ -48,6 +49,7 @@ template<typename... Types> uint32_t computeHash(const Types&...);
 template<typename T, typename... OtherTypes> uint32_t computeHash(std::initializer_list<T>, std::initializer_list<OtherTypes>...);
 
 class Hasher {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     template<typename... Types> friend uint32_t computeHash(const Types&... values)
     {
index 2012b8f..624c998 100644 (file)
@@ -73,6 +73,8 @@ inline void appendUnsignedAsHexFixedSize(NumberType number, DestinationType& des
 }
 
 struct HexNumberBuffer {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     std::array<LChar, 16> characters;
     unsigned length;
 };
index 2109987..cded7c2 100644 (file)
@@ -31,6 +31,7 @@
 namespace WTF {
 
 class Indenter {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     Indenter(unsigned count = 0, String string = "  "_s)
         : m_count(count)
index 009ab9e..592bf64 100644 (file)
@@ -36,6 +36,7 @@ namespace WTF {
 
 template<typename Key, typename Value>
 class IndexMap {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     IndexMap() = default;
     IndexMap(IndexMap&&) = default;
index 11bb36f..1636527 100644 (file)
@@ -38,6 +38,7 @@ namespace WTF {
 // If you want a set of BasicBlocks, you do IndexSet<BasicBlock>. So, T = BasicBlock.
 template<typename T>
 class IndexSet {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     IndexSet()
     {
@@ -81,6 +82,7 @@ public:
 
     template<typename CollectionType>
     class Iterable {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         Iterable(const CollectionType& collection, const BitVector& set)
             : m_collection(collection)
@@ -89,6 +91,7 @@ public:
         }
 
         class iterator {
+            WTF_MAKE_FAST_ALLOCATED;
         public:
             iterator()
                 : m_collection(nullptr)
index b2fa7f2..ac239f2 100644 (file)
@@ -73,6 +73,7 @@ struct DefaultIndexSparseSetTraits<KeyValuePair<KeyType, ValueType>> {
 
 template<typename EntryType = unsigned, typename EntryTypeTraits = DefaultIndexSparseSetTraits<EntryType>, typename OverflowHandler = CrashOnOverflow>
 class IndexSparseSet {
+    WTF_MAKE_FAST_ALLOCATED;
     typedef Vector<EntryType, 0, OverflowHandler> ValueList;
 public:
     explicit IndexSparseSet(unsigned size);
index 3e9b9e3..feee790 100644 (file)
@@ -31,6 +31,7 @@ namespace WTF {
 
 template<class Container>
 class IndexedContainerIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     IndexedContainerIterator()
         : m_container(nullptr)
index 557d491..4f1d374 100644 (file)
@@ -29,6 +29,7 @@ namespace WTF {
 
 template<typename T>
 class Insertion {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     Insertion() { }
 
index 8ea421e..719db8d 100644 (file)
@@ -31,6 +31,7 @@ namespace WTF {
 
 template<typename Predicate, typename Iterator>
 class FilterIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     FilterIterator(Predicate pred, Iterator begin, Iterator end)
         : m_pred(WTFMove(pred))
@@ -75,6 +76,7 @@ inline FilterIterator<Predicate, Iterator> makeFilterIterator(Predicate&& pred,
 
 template<typename Transform, typename Iterator>
 class TransformIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     TransformIterator(Transform&& transform, Iterator&& iter)
         : m_transform(WTFMove(transform))
index 5d8fe4d..e7db57a 100644 (file)
@@ -31,6 +31,7 @@ namespace WTF {
 
 template<typename Iterator>
 class IteratorRange {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     IteratorRange(Iterator begin, Iterator end)
         : m_begin(WTFMove(begin))
@@ -66,6 +67,7 @@ IteratorRange<typename Container::const_reverse_iterator> makeReversedRange(cons
 
 template<typename Container, typename Iterator>
 class SizedIteratorRange {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     SizedIteratorRange(const Container& container, Iterator begin, Iterator end)
         : m_container(container)
index a3bf6b1..48da730 100644 (file)
@@ -31,6 +31,8 @@ namespace WTF {
 
 template<typename KeyTypeArg, typename ValueTypeArg>
 struct KeyValuePair {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     using KeyType = KeyTypeArg;
     using ValueType = ValueTypeArg;
 
index 59434bf..4b3a4e4 100644 (file)
@@ -45,7 +45,7 @@ template<typename ValueArg> struct ListHashSetNode;
 template<typename HashArg> struct ListHashSetNodeHashFunctions;
 template<typename HashArg> struct ListHashSetTranslator;
 
-template<typename ValueArg, typename HashArg = typename DefaultHash<ValueArg>::Hash> class ListHashSet {
+template<typename ValueArg, typename HashArg = typename DefaultHash<ValueArg>::Hash> class ListHashSet final {
     WTF_MAKE_FAST_ALLOCATED;
 private:
     typedef ListHashSetNode<ValueArg> Node;
@@ -185,6 +185,7 @@ template<typename HashArg> struct ListHashSetNodeHashFunctions {
 };
 
 template<typename ValueArg, typename HashArg> class ListHashSetIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 private:
     typedef ListHashSet<ValueArg, HashArg> ListHashSetType;
     typedef ListHashSetIterator<ValueArg, HashArg> iterator;
@@ -232,6 +233,7 @@ private:
 };
 
 template<typename ValueArg, typename HashArg> class ListHashSetConstIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 private:
     typedef ListHashSet<ValueArg, HashArg> ListHashSetType;
     typedef ListHashSetIterator<ValueArg, HashArg> iterator;
index f9f9cdf..469df3f 100644 (file)
@@ -53,6 +53,7 @@ public:
     
     // This calculator has to be run in reverse.
     class LocalCalc {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         LocalCalc(Liveness& liveness, typename CFG::Node block)
             : m_liveness(liveness)
@@ -66,6 +67,7 @@ public:
         }
 
         class Iterable {
+            WTF_MAKE_FAST_ALLOCATED;
         public:
             Iterable(Liveness& liveness)
                 : m_liveness(liveness)
@@ -73,6 +75,7 @@ public:
             }
 
             class iterator {
+                WTF_MAKE_FAST_ALLOCATED;
             public:
                 iterator(Adapter& adapter, Workset::const_iterator sparceSetIterator)
                     : m_adapter(adapter)
@@ -156,6 +159,7 @@ public:
 
     template<typename UnderlyingIterable>
     class Iterable {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         Iterable(Liveness& liveness, const UnderlyingIterable& iterable)
             : m_liveness(liveness)
@@ -164,6 +168,7 @@ public:
         }
 
         class iterator {
+            WTF_MAKE_FAST_ALLOCATED;
         public:
             iterator()
                 : m_liveness(nullptr)
@@ -230,6 +235,7 @@ public:
     Workset& workset() { return m_workset; }
     
     class LiveAtHead {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         LiveAtHead(Liveness& liveness)
             : m_liveness(liveness)
index ae897cb..f2e3d6f 100644 (file)
@@ -33,7 +33,8 @@ namespace WTF {
 // This a simple single consumer, multiple producer Bag data structure.
 
 template<typename T>
-class LocklessBag {
+class LocklessBag final {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(LocklessBag);
 public:
     struct Node {
index ffd5556..a85f715 100644 (file)
@@ -32,6 +32,7 @@
 namespace WTF {
 
 class LoggingHashID {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(LoggingHashID);
     
 public:
index e4f0a79..5daac07 100644 (file)
@@ -40,6 +40,7 @@
 namespace WTF {
 
 class MD5 {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     WTF_EXPORT_PRIVATE MD5();
 
index 0d46aea..00d7c1f 100644 (file)
@@ -32,6 +32,7 @@
 namespace WTF {
 
 class MachSendRight {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     WTF_EXPORT_PRIVATE static MachSendRight adopt(mach_port_t);
     WTF_EXPORT_PRIVATE static MachSendRight create(mach_port_t);
index d6d88c2..50c31c3 100644 (file)
@@ -27,6 +27,7 @@ namespace WTF {
 
 template<typename T>
 class MainThreadData {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     MainThreadData() { }
     explicit MainThreadData(T&& data)
index 3f5ab86..c2fb4d5 100644 (file)
@@ -83,6 +83,7 @@ struct IntegralMarkableTraits {
 // Otherwise, you should use Optional.
 template<typename T, typename Traits>
 class Markable {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     constexpr Markable()
         : m_value(Traits::emptyValue())
index 442d5ec..6daf112 100644 (file)
@@ -41,7 +41,7 @@ namespace WTF {
 
 class PrintStream;
 
-class WTF_EXPORT_PRIVATE MediaTime {
+class WTF_EXPORT_PRIVATE MediaTime final {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     enum {
@@ -154,6 +154,8 @@ inline MediaTime operator*(int32_t lhs, const MediaTime& rhs) { return rhs.opera
 WTF_EXPORT_PRIVATE extern MediaTime abs(const MediaTime& rhs);
 
 struct WTF_EXPORT_PRIVATE MediaTimeRange {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
+
     String toJSONString() const;
 
     const MediaTime start;
index 60c5fc3..1774954 100644 (file)
@@ -57,6 +57,7 @@ enum class Synchronous { No, Yes };
 typedef WTF::Function<void(Critical, Synchronous)> LowMemoryHandler;
 
 class MemoryPressureHandler {
+    WTF_MAKE_FAST_ALLOCATED;
     friend class WTF::NeverDestroyed<MemoryPressureHandler>;
 public:
     WTF_EXPORT_PRIVATE static MemoryPressureHandler& singleton();
@@ -95,6 +96,7 @@ public:
 #endif
 
     class ReliefLogger {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         explicit ReliefLogger(const char *log)
             : m_logString(log)
@@ -122,6 +124,7 @@ public:
 
     private:
         struct MemoryUsage {
+            WTF_MAKE_STRUCT_FAST_ALLOCATED;
             MemoryUsage() = default;
             MemoryUsage(size_t resident, size_t physical)
                 : resident(resident)
index 9d5950d..e9d4f97 100644 (file)
@@ -49,7 +49,8 @@ namespace WTF {
     // when messages are fetched from the queue.
     // Essentially, MessageQueue acts as a queue of std::unique_ptr<DataType>.
     template<typename DataType>
-    class MessageQueue {
+    class MessageQueue final {
+        WTF_MAKE_FAST_ALLOCATED;
         WTF_MAKE_NONCOPYABLE(MessageQueue);
     public:
         MessageQueue() : m_killed(false) { }
index d89a450..d8885d9 100644 (file)
@@ -82,6 +82,7 @@ public:
     
     // Atomic method for getting allocator statistics.
     struct Statistics {
+        WTF_MAKE_STRUCT_FAST_ALLOCATED;
         size_t bytesAllocated;
         size_t bytesReserved;
         size_t bytesCommitted;
index 13e72a8..d91d926 100644 (file)
@@ -37,7 +37,8 @@ class PrintStream;
 // possibly don't count downtime. This uses floating point internally so that you can reason about
 // infinity and other things that arise in math. It's acceptable to use this to wrap NaN times,
 // negative times, and infinite times, so long as they are all relative to the same clock.
-class MonotonicTime {
+class MonotonicTime final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static const ClockType clockType = ClockType::Monotonic;
     
index 8ca0ffe..749f171 100644 (file)
@@ -34,6 +34,7 @@ class NaturalLoops;
 
 template<typename Graph>
 class NaturalLoop {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     NaturalLoop()
         : m_graph(nullptr)
@@ -109,6 +110,7 @@ private:
 
 template<typename Graph>
 class NaturalLoops {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef std::array<unsigned, 2> InnerMostLoopIndices;
 
index c22e86f..accaac1 100644 (file)
@@ -30,6 +30,7 @@
 namespace WTF {
 
 class NoLock {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     void lock() { }
     void unlock() { }
index 4f42ece..771362b 100644 (file)
@@ -31,6 +31,7 @@
 namespace WTF {
 
 class OSAllocator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     enum Usage {
         UnknownUsage = -1,
index f18ff2c..f3f5903 100644 (file)
@@ -37,11 +37,13 @@ namespace WTF {
 // must be powers of two greater than 0. This class is useful as a replacement for passing a bitmask of
 // enumerators around.
 template<typename T> class OptionSet {
+    WTF_MAKE_FAST_ALLOCATED;
     static_assert(std::is_enum<T>::value, "T is not an enum type");
     typedef typename std::make_unsigned<typename std::underlying_type<T>::type>::type StorageType;
 
 public:
     template<typename StorageType> class Iterator {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         // Isolate the rightmost set bit.
         T operator*() const { return static_cast<T>(m_value & -m_value); }
index bf5a940..7716ba4 100644 (file)
@@ -45,6 +45,7 @@
 # include <stdexcept>
 # include <wtf/Assertions.h>
 # include <wtf/Compiler.h>
+# include <wtf/FastMalloc.h>
 # include <wtf/StdLibExtras.h>
 
 # define TR2_OPTIONAL_REQUIRES(...) typename std::enable_if<__VA_ARGS__::value, bool>::type = false
@@ -364,6 +365,7 @@ using OptionalBase = typename std::conditional<
 template <class T>
 class Optional : private OptionalBase<T>
 {
+  WTF_MAKE_FAST_ALLOCATED;
   static_assert( !std::is_same<typename std::decay<T>::type, nullopt_t>::value, "bad T" );
   static_assert( !std::is_same<typename std::decay<T>::type, std::in_place_t>::value, "bad T" );
 
@@ -580,6 +582,7 @@ public:
 template <class T>
 class Optional<T&>
 {
+  WTF_MAKE_FAST_ALLOCATED;
   static_assert( !std::is_same<T, nullopt_t>::value, "bad T" );
   static_assert( !std::is_same<T, std::in_place_t>::value, "bad T" );
   T* ref;
index 28e27ab..f6f2c99 100644 (file)
@@ -38,6 +38,7 @@ namespace WTF {
 // helper. Note that the type it operates on must be usable as a HashMap key.
 template<typename T>
 class OrderMaker {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(OrderMaker);
     
     struct Node : BasicRawSentinelNode<Node> {
index c5abdba..839d3c8 100644 (file)
@@ -34,6 +34,7 @@ namespace WTF {
 
 template<typename T>
 class Packed {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static constexpr bool isPackedType = true;
 
@@ -101,6 +102,7 @@ private:
 // we can use 4 bits in Darwin ARM64, we can compact cell pointer into 4 bytes (32 bits).
 template<typename T, size_t alignment = alignof(T)>
 class PackedAlignedPtr {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static_assert(hasOneBitSet(alignment), "Alignment needs to be power-of-two");
     static constexpr bool isPackedType = true;
index 3ac714f..31f2a72 100644 (file)
@@ -37,7 +37,8 @@ namespace WTF {
 // are relying on the sign being preserved.
 
 template<typename T, unsigned bitCount>
-class PackedIntVector {
+class PackedIntVector final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static_assert(bitCount, "bitCount must not be zero!");
     static_assert(bitCount < sizeof(void*) * 8, "bitCount must not exceed the address space limit!");
index e89211a..b52c39e 100644 (file)
@@ -34,6 +34,7 @@ inline bool isPageAligned(size_t size) { return !(size & (pageSize() - 1)); }
 inline bool isPowerOfTwo(size_t size) { return !(size & (size - 1)); }
 
 class PageBlock {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     PageBlock();
     PageBlock(const PageBlock&);
index 706bd80..6cf2802 100644 (file)
@@ -36,6 +36,7 @@ namespace WTF {
 
 class ParallelEnvironment {
     WTF_MAKE_NONCOPYABLE(ParallelEnvironment);
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef void (*ThreadFunction)(void*);
 
index dcdc529..8bc4278 100644 (file)
@@ -34,6 +34,8 @@ namespace WTF {
 class Thread;
 
 class ParkingLot {
+    WTF_MAKE_FAST_ALLOCATED;
+
     ParkingLot() = delete;
     ParkingLot(const ParkingLot&) = delete;
 
index f13f192..3c1632b 100644 (file)
@@ -38,7 +38,8 @@ namespace WTF {
 // 3) It has in-place decrease/increaseKey methods, although they are still O(n) rather than O(log(n)).
 
 template<typename T, bool (*isHigherPriority)(const T&, const T&) = &isLessThan<T>, size_t inlineCapacity = 0>
-class PriorityQueue {
+class PriorityQueue final {
+    WTF_MAKE_FAST_ALLOCATED;
     using BufferType = Vector<T, inlineCapacity>;
     using const_iterator = typename BufferType::const_iterator;
 public:
index 237fe55..411bde3 100644 (file)
@@ -33,6 +33,7 @@ namespace WTF {
 
 class RandomDevice {
     WTF_MAKE_NONCOPYABLE(RandomDevice);
+    WTF_MAKE_FAST_ALLOCATED;
 public:
 #if OS(DARWIN) || OS(FUCHSIA) || OS(WINDOWS)
     RandomDevice() = default;
index 23d0263..a199a68 100644 (file)
@@ -39,6 +39,7 @@ namespace WTF {
 
 template<typename PassedType>
 class Range {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef PassedType Type;
     
index e6d846c..2367ebf 100644 (file)
@@ -50,7 +50,8 @@ namespace WTF {
 // void T::dump(PrintStream&) const - some kind of dumping.
 
 template<typename RangeType>
-class RangeSet {
+class RangeSet final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef RangeType Range;
     typedef typename Range::Type Type;
index 082d229..008ade5 100644 (file)
@@ -31,6 +31,7 @@ namespace WTF {
 
 template<typename Functor>
 class RecursableLambda {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit RecursableLambda(Functor&& functor)
         : m_functor(std::forward<Functor>(functor))
index 19d11fd..e3d9688 100644 (file)
@@ -41,8 +41,9 @@ namespace WTF {
 // - The key type must implement operator< and ==.
 
 template<class NodeType, typename KeyType>
-class RedBlackTree {
+class RedBlackTree final {
     WTF_MAKE_NONCOPYABLE(RedBlackTree);
+    WTF_MAKE_FAST_ALLOCATED;
 private:
     enum Color {
         Red = 1,
index 5422e56..2a42471 100644 (file)
@@ -32,6 +32,7 @@ namespace WTF {
 #if PLATFORM(COCOA)
 
 struct TagInfo {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     size_t dirty { 0 };
     size_t reclaimable { 0 };
     size_t reserved { 0 };
index 757f92f..1be22d8 100644 (file)
@@ -36,6 +36,7 @@ static RunLoop* s_mainRunLoop;
 
 // Helper class for ThreadSpecificData.
 class RunLoop::Holder {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     Holder()
         : m_runLoop(adoptRef(*new RunLoop))
index 74d205f..a29b92d 100644 (file)
@@ -38,6 +38,7 @@ namespace WTF {
 
 class WTF_EXPORT_PRIVATE RunLoopTimerBase {
     WTF_MAKE_NONCOPYABLE(RunLoopTimerBase);
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     RunLoopTimerBase() { }
     WTF_EXPORT_PRIVATE virtual ~RunLoopTimerBase();
index 22f58cd..a1af8ca 100644 (file)
@@ -41,6 +41,7 @@
 namespace WTF {
 
 class SHA1 {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     WTF_EXPORT_PRIVATE SHA1();
 
index f78692a..6c53561 100644 (file)
@@ -35,7 +35,8 @@ class PrintStream;
 class TimeWithDynamicClockType;
 class WallTime;
 
-class Seconds {
+class Seconds final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     constexpr Seconds() { }
     
index e87939e..3babdf8 100644 (file)
@@ -36,6 +36,7 @@ namespace WTF {
     // An iterator for SegmentedVector. It supports only the pre ++ operator
     template <typename T, size_t SegmentSize = 8> class SegmentedVector;
     template <typename T, size_t SegmentSize = 8> class SegmentedVectorIterator {
+        WTF_MAKE_FAST_ALLOCATED;
     private:
         friend class SegmentedVector<T, SegmentSize>;
     public:
@@ -87,7 +88,7 @@ namespace WTF {
     // optimized for segmented vectors that get large; you may want to use
     // SegmentedVector<thingy, 1> if you don't expect a lot of entries.
     template <typename T, size_t SegmentSize>
-    class SegmentedVector {
+    class SegmentedVector final {
         friend class SegmentedVectorIterator<T, SegmentSize>;
         WTF_MAKE_NONCOPYABLE(SegmentedVector);
         WTF_MAKE_FAST_ALLOCATED;
index 785d9cb..13df48b 100644 (file)
@@ -42,6 +42,7 @@ namespace WTF {
 
 template<typename T>
 class SetForScope {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(SetForScope);
 public:
     SetForScope(T& scopedVariable)
index ff804de..d919135 100644 (file)
@@ -34,6 +34,7 @@ namespace WTF {
 
 template <typename Graph>
 class SingleRootGraphNode {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     // We use "#root" to refer to the synthetic root we have created.
     static const char* rootName() { return "#root"; };
@@ -82,6 +83,7 @@ private:
 
 template <typename Graph>
 class SingleRootGraphSet {
+    WTF_MAKE_FAST_ALLOCATED;
     using Node = SingleRootGraphNode<Graph>;
 public:
     SingleRootGraphSet() = default;
@@ -121,6 +123,7 @@ private:
 
 template<typename T, typename Graph>
 class SingleRootMap {
+    WTF_MAKE_FAST_ALLOCATED;
     using Node = SingleRootGraphNode<Graph>;
 public:
     SingleRootMap(Graph& graph)
index fc0d123..8036512 100644 (file)
@@ -27,7 +27,8 @@
 
 namespace WTF {
 
-template <typename Node> class SinglyLinkedList {
+template <typename Node>
+class SinglyLinkedList {
 public:
     SinglyLinkedList();
     
index d4a6e21..9447fe8 100644 (file)
@@ -34,6 +34,7 @@ namespace WTF {
 
 template<typename PtrType, unsigned SmallArraySize = 8>
 class SmallPtrSet {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(SmallPtrSet);
     static_assert(std::is_trivially_destructible<PtrType>::value, "We currently don't support non-trivially destructible pointer types.");
     static_assert(sizeof(PtrType) == sizeof(void*), "Only support pointer sized things.");
@@ -123,6 +124,7 @@ public:
     }
 
     class iterator {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         iterator& operator++()
         {
index 882d763..680eec2 100644 (file)
@@ -29,6 +29,7 @@
 
 template<typename Graph>
 class SpanningTree {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     SpanningTree(Graph& graph)
         : m_graph(graph)
@@ -75,6 +76,7 @@ public:
 
 private:
     struct Data {
+        WTF_MAKE_STRUCT_FAST_ALLOCATED;
         size_t pre;
         size_t post;
     };
index 62441eb..cb8d3bb 100644 (file)
@@ -33,6 +33,7 @@ namespace WTF {
 
 template<typename T, typename CounterType = unsigned>
 class Spectrum {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef typename HashMap<T, CounterType>::iterator iterator;
     typedef typename HashMap<T, CounterType>::const_iterator const_iterator;
@@ -71,6 +72,7 @@ public:
     const_iterator end() const { return m_map.end(); }
     
     struct KeyAndCount {
+        WTF_MAKE_STRUCT_FAST_ALLOCATED;
         KeyAndCount() { }
         
         KeyAndCount(const T& key, CounterType count)
index 9a3613a..4d9183b 100644 (file)
@@ -33,6 +33,8 @@
 namespace WTF {
 
 class StackBounds {
+    WTF_MAKE_FAST_ALLOCATED;
+
     // This 64k number was picked because a sampling of stack usage differences
     // between consecutive entries into one of the Interpreter::execute...()
     // functions was seen to be as high as 27k. Hence, 64k is chosen as a
index 7b3ad92..bfccf3d 100644 (file)
@@ -32,6 +32,7 @@
 namespace WTF {
 
 class StackShot {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     StackShot() { }
     
index 3d39b1d..362cd5e 100644 (file)
@@ -37,6 +37,7 @@
 namespace WTF {
 
 class StackShotProfiler {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     StackShotProfiler(unsigned numFrames, unsigned framesToSkip, unsigned stacksToReport)
         : m_numFrames(numFrames)
index 3e8a646..4f50647 100644 (file)
@@ -47,6 +47,7 @@ namespace WTF {
 #if !ENABLE(STACK_STATS) 
 
 class StackStats {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     // The CheckPoint class is for marking check points corresponding
     // each location in code where a stack recursion check is being done.
@@ -72,6 +73,7 @@ public:
 #else // ENABLE(STACK_STATS)
 
 class StackStats {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     // The CheckPoint class is for marking check points corresponding
     // each location in code where a stack recursion check is being done.
index 1ba251e..86ed4b8 100644 (file)
@@ -54,6 +54,7 @@ public:
     }
 
     class DemangleEntry {
+        WTF_MAKE_FAST_ALLOCATED;
     public:
         friend class StackTrace;
         const char* mangledName() const { return m_mangledName; }
index feb7592..26bbc8f 100644 (file)
@@ -34,7 +34,9 @@
 
 namespace WTF {
 
-template <typename T, size_t BlockSize> class StreamBuffer {
+template <typename T, size_t BlockSize>
+class StreamBuffer {
+    WTF_MAKE_FAST_ALLOCATED;
 private:
     typedef Vector<T> Block;
 public:
index 9bca714..10ad846 100644 (file)
@@ -33,7 +33,7 @@
 namespace WTF {
 
 template<typename T, size_t BufferSize>
-class SynchronizedFixedQueue : public ThreadSafeRefCounted<SynchronizedFixedQueue<T, BufferSize>> {
+class SynchronizedFixedQueue final : public ThreadSafeRefCounted<SynchronizedFixedQueue<T, BufferSize>> {
 public:
     static Ref<SynchronizedFixedQueue> create()
     {
index 75fdea9..e22aac5 100644 (file)
@@ -127,6 +127,7 @@ inline void tracePoint(TracePointCode code, uint64_t data1 = 0, uint64_t data2 =
 }
 
 class TraceScope {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
 
     TraceScope(TracePointCode entryCode, TracePointCode exitCode, uint64_t data1 = 0, uint64_t data2 = 0, uint64_t data3 = 0, uint64_t data4 = 0)
index f53ce31..7092acf 100644 (file)
@@ -34,7 +34,7 @@ namespace WTF {
 
 enum class ThreadGroupAddResult { NewlyAdded, AlreadyAdded, NotAdded };
 
-class ThreadGroup : public std::enable_shared_from_this<ThreadGroup> {
+class ThreadGroup final : public std::enable_shared_from_this<ThreadGroup> {
     WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(ThreadGroup);
 public:
@@ -42,7 +42,7 @@ public:
 
     static std::shared_ptr<ThreadGroup> create()
     {
-        return std::make_shared<ThreadGroup>();
+        return std::allocate_shared<ThreadGroup>(FastAllocator<ThreadGroup>());
     }
 
     WTF_EXPORT_PRIVATE ThreadGroupAddResult add(Thread&);
index c70df74..fd84540 100644 (file)
@@ -55,6 +55,7 @@ enum class CanBeGCThread {
 
 template<typename T, CanBeGCThread canBeGCThread = CanBeGCThread::False> class ThreadSpecific {
     WTF_MAKE_NONCOPYABLE(ThreadSpecific);
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     ThreadSpecific();
     bool isSet(); // Useful as a fast check to see if this thread has set this value.
index b42b52f..00937eb 100644 (file)
@@ -73,7 +73,7 @@ using ThreadSpecificKey = DWORD;
 #error "Not supported platform"
 #endif
 
-class Mutex {
+class Mutex final {
     WTF_MAKE_NONCOPYABLE(Mutex);
     WTF_MAKE_FAST_ALLOCATED;
 public:
@@ -96,7 +96,7 @@ private:
 
 typedef Locker<Mutex> MutexLocker;
 
-class ThreadCondition {
+class ThreadCondition final {
     WTF_MAKE_NONCOPYABLE(ThreadCondition);
     WTF_MAKE_FAST_ALLOCATED;
 public:
index b55c23f..212342e 100644 (file)
@@ -33,7 +33,8 @@ namespace WTF {
 
 class PrintStream;
 
-class TimeWithDynamicClockType {
+class TimeWithDynamicClockType final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     TimeWithDynamicClockType() { }
     
index 7c17e30..6e02783 100644 (file)
@@ -37,6 +37,7 @@ namespace WTF {
 // Mean scope durations are printed using WTFLogAlways every Nth call, where N is specified by logIterationInterval.
 
 class TimingScope {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(TimingScope);
 public:
     TimingScope(const char* name, unsigned logIterationInterval = 1)
index d06850c..d8bc7b8 100644 (file)
@@ -39,6 +39,7 @@ struct TinyLRUCachePolicy {
 
 template<typename KeyType, typename ValueType, size_t capacity = 4, typename Policy = TinyLRUCachePolicy<KeyType, ValueType>>
 class TinyLRUCache {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     const ValueType& get(const KeyType& key)
     {
index 524f067..5cb7d7f 100644 (file)
@@ -42,6 +42,7 @@ namespace WTF {
 
 template<typename T>
 class TinyPtrSet {
+    WTF_MAKE_FAST_ALLOCATED;
     static_assert(sizeof(T) == sizeof(void*), "It's in the title of the class.");
 public:
     TinyPtrSet()
index b353e73..d00ec79 100644 (file)
@@ -44,6 +44,7 @@ namespace WTF {
     
 template<typename CharacterType>
 class CodePointIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     ALWAYS_INLINE CodePointIterator() { }
     ALWAYS_INLINE CodePointIterator(const CharacterType* begin, const CharacterType* end)
index 3e3741a..da2ded0 100644 (file)
@@ -36,6 +36,7 @@ namespace WTF {
 template<typename CharacterType> class CodePointIterator;
 
 class URLParser {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     WTF_EXPORT_PRIVATE static bool allValuesEqual(const URL&, const URL&);
     WTF_EXPORT_PRIVATE static bool internalValuesConsistent(const URL&);
index 382afb3..dd920a1 100644 (file)
@@ -73,6 +73,7 @@ inline namespace fundamentals_v3 {
 
 template<class E>
 class unexpected {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     unexpected() = delete;
     template <class U = E>
index 6b8e90e..9da6ee9 100644 (file)
@@ -1440,6 +1440,7 @@ class Variant:
         private __variant_base<
     Variant<_Types...>,__all_trivially_destructible<_Types...>::__value>
 {
+    WTF_MAKE_FAST_ALLOCATED;
     typedef __variant_base<Variant<_Types...>,__all_trivially_destructible<_Types...>::__value> __base_type;
     friend __base_type;
     friend struct __copy_construct_op_table<Variant>;
@@ -1725,6 +1726,7 @@ public:
 template<>
 class Variant<>{
 public:
+    WTF_MAKE_FAST_ALLOCATED;
     Variant()=delete;
     
     constexpr bool valueless_by_exception() const __NOEXCEPT{
index 1ee5270..8ea5bef 100644 (file)
@@ -31,7 +31,7 @@
 
 namespace WTF {
 
-class Semaphore {
+class Semaphore final {
     WTF_MAKE_NONCOPYABLE(Semaphore);
     WTF_MAKE_FAST_ALLOCATED;
 public:
index 1541eab..52c96b6 100644 (file)
@@ -38,7 +38,8 @@ class PrintStream;
 // acceptable to use this to wrap NaN times, negative times, and infinite times, so long as they
 // are relative to the same clock. Use this only if wall clock time is needed. For elapsed time
 // measurement use MonotonicTime instead.
-class WallTime {
+class WallTime final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static const ClockType clockType = ClockType::Wall;
     
index 1bc3690..2c4d293 100644 (file)
@@ -41,7 +41,8 @@ template<> struct HashTraits<Ref<WeakPtrImpl>> : RefHashTraits<WeakPtrImpl> {
 };
 
 template <typename T>
-class WeakHashSet {
+class WeakHashSet final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     typedef HashSet<Ref<WeakPtrImpl>> WeakPtrImplSet;
     typedef typename WeakPtrImplSet::AddResult AddResult;
index 4757c95..ea17330 100644 (file)
@@ -38,7 +38,8 @@ namespace WTF {
 
 // The code used to generate random numbers are inlined manually in JIT code.
 // So it needs to stay in sync with the JIT one.
-class WeakRandom {
+class WeakRandom final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     WeakRandom(unsigned seed = cryptographicallyRandomNumber())
     {
index 589c671..1f7f083 100644 (file)
@@ -45,7 +45,7 @@ namespace WTF {
 // PrintStream uses this so that ParkingLot and Lock can use PrintStream. This means that if you
 // try to use dataLog to debug this code, you will have a bad time.
 
-class WordLock {
+class WordLock final {
     WTF_MAKE_NONCOPYABLE(WordLock);
     WTF_MAKE_FAST_ALLOCATED;
 public:
index 6d8e40f..a366101 100644 (file)
@@ -47,6 +47,7 @@ static pthread_t mainThread;
 #endif
 
 class MainThreadDispatcher {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     MainThreadDispatcher()
         : m_timer(RunLoop::main(), this, &MainThreadDispatcher::fired)
index 5efbff0..3d986e4 100644 (file)
@@ -58,6 +58,7 @@ struct MutexWrapper<GRecMutex> {
 
 template<typename T>
 class GMutexLocker {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(GMutexLocker);
 public:
     explicit GMutexLocker(T& mutex)
index 27b5b3e..6cb5132 100644 (file)
@@ -28,6 +28,7 @@
 namespace WTF {
 
 struct ProcessMemoryStatus {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     size_t size { 0 };
     size_t resident { 0 };
     size_t shared { 0 };
index 64cd1f7..dd558d8 100644 (file)
@@ -75,7 +75,7 @@ Thread::~Thread()
 }
 
 #if !OS(DARWIN)
-class Semaphore {
+class Semaphore final {
     WTF_MAKE_NONCOPYABLE(Semaphore);
     WTF_MAKE_FAST_ALLOCATED;
 public:
@@ -375,6 +375,7 @@ void Thread::resume()
 
 #if OS(DARWIN)
 struct ThreadStateMetadata {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     unsigned userCount;
     thread_state_flavor_t flavor;
 };
index 53644fa..7122885 100644 (file)
@@ -29,7 +29,7 @@ namespace WTF {
 
 class PrintStream;
 
-class ASCIILiteral {
+class ASCIILiteral final {
 public:
     operator const char*() const { return m_characters; }
 
index 9878192..ce0ba35 100644 (file)
@@ -34,7 +34,8 @@ namespace WTF {
 
 struct AtomStringHash;
 
-class AtomString {
+class AtomString final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     WTF_EXPORT_PRIVATE static void init();
 
index e35a9d3..b134247 100644 (file)
@@ -26,7 +26,7 @@ namespace WTF {
 
 class AtomStringTable;
 
-class AtomStringImpl : public UniquedStringImpl {
+class AtomStringImpl final : public UniquedStringImpl {
 public:
     WTF_EXPORT_PRIVATE static RefPtr<AtomStringImpl> lookUp(const LChar*, unsigned length);
     WTF_EXPORT_PRIVATE static RefPtr<AtomStringImpl> lookUp(const UChar*, unsigned length);
index be697c2..a02954d 100644 (file)
@@ -34,7 +34,7 @@ namespace WTF {
 
 // CStringBuffer is the ref-counted storage class for the characters in a CString.
 // The data is implicitly allocated 1 character longer than length(), as it is zero-terminated.
-class CStringBuffer : public RefCounted<CStringBuffer> {
+class CStringBuffer final : public RefCounted<CStringBuffer> {
 public:
     const char* data() { return mutableData(); }
     size_t length() const { return m_length; }
@@ -52,7 +52,8 @@ private:
 
 // A container for a null-terminated char array supporting copy-on-write
 // assignment.  The contained char array may be null.
-class CString {
+class CString final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     CString() { }
     WTF_EXPORT_PRIVATE CString(const char*);
index aade469..4a7ca25 100644 (file)
@@ -34,7 +34,7 @@ class ExternalStringImpl;
 
 using ExternalStringImplFreeFunction = Function<void(ExternalStringImpl*, void*, unsigned)>;
 
-class ExternalStringImpl : public StringImpl {
+class ExternalStringImpl final : public StringImpl {
 public:
     WTF_EXPORT_PRIVATE static Ref<ExternalStringImpl> create(const LChar* characters, unsigned length, ExternalStringImplFreeFunction&&);
     WTF_EXPORT_PRIVATE static Ref<ExternalStringImpl> create(const UChar* characters, unsigned length, ExternalStringImplFreeFunction&&);
index 2f678d1..e33e916 100644 (file)
@@ -35,6 +35,7 @@ namespace WTF {
 
 class LineBreakIteratorPool {
     WTF_MAKE_NONCOPYABLE(LineBreakIteratorPool);
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     LineBreakIteratorPool() = default;
 
index 42a6912..7f1836d 100644 (file)
@@ -23,6 +23,7 @@
 namespace WTF {
 
 class NullTextBreakIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     NullTextBreakIterator() = default;
     NullTextBreakIterator(const NullTextBreakIterator&) = delete;
index 75b07bc..9472546 100644 (file)
@@ -30,6 +30,7 @@ namespace WTF {
 // This type should be used instead of integer because 2 contradicting traditions can
 // call a first element '0' or '1' which makes integer type ambiguous.
 class OrdinalNumber {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static OrdinalNumber beforeFirst() { return OrdinalNumber(-1); }
     static OrdinalNumber fromZeroBasedInt(int zeroBasedInt) { return OrdinalNumber(zeroBasedInt); }
index 5dcfecd..af49ebb 100644 (file)
@@ -38,6 +38,7 @@ namespace WTF {
 template <typename CharType>
 class StringBuffer {
     WTF_MAKE_NONCOPYABLE(StringBuffer);
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit StringBuffer(unsigned length)
         : m_length(length)
index 18b66de..9427058 100644 (file)
@@ -49,6 +49,7 @@ namespace WTF {
 class StringBuilder {
     // Disallow copying since it's expensive and we don't want code to do it by accident.
     WTF_MAKE_NONCOPYABLE(StringBuilder);
+    WTF_MAKE_FAST_ALLOCATED;
 
 public:
     enum class OverflowHandler {
index a80fa3c..6a81a1f 100644 (file)
@@ -84,6 +84,7 @@ private:
 };
 
 class FormattedNumber {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static FormattedNumber fixedPrecision(double number, unsigned significantFigures = 6, TrailingZerosTruncatingPolicy trailingZerosTruncatingPolicy = TruncateTrailingZeros)
     {
index a994e87..b958004 100644 (file)
@@ -38,6 +38,7 @@ namespace WTF {
 static constexpr const unsigned stringHashingStartValue = 0x9E3779B9U;
 
 class StringHasher {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     static constexpr const unsigned flagCount = 8; // Save 8 bits for StringImpl to use as flags.
     static constexpr const unsigned maskHash = (1U << (sizeof(unsigned) * 8 - flagCount)) - 1;
index fddcdb3..152a410 100644 (file)
@@ -74,6 +74,7 @@ template<bool isSpecialCharacter(UChar), typename CharacterType> bool isAllSpeci
 #if STRING_STATS
 
 struct StringStats {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     void add8BitString(unsigned length, bool isSubString = false)
     {
         ++m_totalNumberStrings;
index 3125167..dcba060 100644 (file)
@@ -284,6 +284,7 @@ String normalizedNFC(const String& string)
 // Manage reference count manually so UnderlyingString does not need to be defined in the header.
 
 struct StringView::UnderlyingString {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     std::atomic_uint refCount { 1u };
     bool isValid { true };
     const StringImpl& string;
index f8dfcad..7addaea 100644 (file)
@@ -48,7 +48,8 @@ namespace WTF {
 
 // StringView is a non-owning reference to a string, similar to the proposed std::string_view.
 
-class StringView {
+class StringView final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     StringView();
 #if CHECK_STRINGVIEW_LIFETIME
@@ -232,6 +233,7 @@ WTF_EXPORT_PRIVATE String normalizedNFC(const String&);
 namespace WTF {
 
 struct StringViewWithUnderlyingString {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     StringView view;
     String underlyingString;
 };
@@ -402,6 +404,7 @@ inline const UChar* StringView::characters16() const
 }
 
 class StringView::UpconvertedCharacters {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit UpconvertedCharacters(const StringView&);
     operator const UChar*() const { return m_characters; }
@@ -660,6 +663,7 @@ inline bool equalIgnoringASCIICase(StringView a, const char* b)
 }
 
 class StringView::SplitResult {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     SplitResult(StringView, UChar separator, bool allowEmptyEntries);
 
@@ -674,6 +678,7 @@ private:
 };
 
 class StringView::GraphemeClusters {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit GraphemeClusters(const StringView&);
 
@@ -686,6 +691,7 @@ private:
 };
 
 class StringView::CodePoints {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit CodePoints(const StringView&);
 
@@ -698,6 +704,7 @@ private:
 };
 
 class StringView::CodeUnits {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit CodeUnits(const StringView&);
 
@@ -710,6 +717,7 @@ private:
 };
 
 class StringView::SplitResult::Iterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     StringView operator*() const;
 
@@ -734,6 +742,7 @@ private:
 };
 
 class StringView::GraphemeClusters::Iterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     Iterator() = delete;
     WTF_EXPORT_PRIVATE Iterator(const StringView&, unsigned index);
@@ -757,6 +766,7 @@ private:
 };
 
 class StringView::CodePoints::Iterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     Iterator(const StringView&, unsigned index);
 
@@ -773,6 +783,7 @@ private:
 };
 
 class StringView::CodeUnits::Iterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     Iterator(const StringView&, unsigned index);
 
index 42ff036..6d82d9e 100644 (file)
@@ -53,7 +53,7 @@ public:
     WTF_EXPORT_PRIVATE static Ref<SymbolImpl> createNullSymbol();
     WTF_EXPORT_PRIVATE static Ref<SymbolImpl> create(StringImpl& rep);
 
-    class StaticSymbolImpl : private StringImplShape {
+    class StaticSymbolImpl final : private StringImplShape {
         WTF_MAKE_NONCOPYABLE(StaticSymbolImpl);
     public:
         template<unsigned characterCount>
@@ -124,7 +124,7 @@ protected:
 };
 static_assert(sizeof(SymbolImpl) == sizeof(SymbolImpl::StaticSymbolImpl), "");
 
-class PrivateSymbolImpl : public SymbolImpl {
+class PrivateSymbolImpl final : public SymbolImpl {
 public:
     WTF_EXPORT_PRIVATE static Ref<PrivateSymbolImpl> createNullSymbol();
     WTF_EXPORT_PRIVATE static Ref<PrivateSymbolImpl> create(StringImpl& rep);
@@ -146,7 +146,7 @@ private:
     }
 };
 
-class RegisteredSymbolImpl : public SymbolImpl {
+class RegisteredSymbolImpl final : public SymbolImpl {
 private:
     friend class StringImpl;
     friend class SymbolImpl;
index 986763d..1ec203d 100644 (file)
@@ -76,6 +76,7 @@ template<> struct HashTraits<SymbolRegistryKey> : SimpleClassHashTraits<SymbolRe
 };
 
 class SymbolRegistry {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(SymbolRegistry);
 public:
     SymbolRegistry() = default;
index 1af1052..6481ed2 100644 (file)
@@ -43,6 +43,7 @@ typedef NullTextBreakIterator TextBreakIteratorPlatform;
 class TextBreakIteratorCache;
 
 class TextBreakIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     enum class Mode {
         Line,
@@ -108,6 +109,7 @@ private:
 class CachedTextBreakIterator;
 
 class TextBreakIteratorCache {
+    WTF_MAKE_FAST_ALLOCATED;
 // Use CachedTextBreakIterator instead of dealing with the cache directly.
 private:
     friend class NeverDestroyed<TextBreakIteratorCache>;
@@ -156,6 +158,7 @@ private:
 
 // RAII for TextBreakIterator and TextBreakIteratorCache.
 class CachedTextBreakIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     CachedTextBreakIterator(StringView string, TextBreakIterator::Mode mode, const AtomString& locale)
         : m_backing(TextBreakIteratorCache::singleton().take(string, mode, locale))
@@ -207,6 +210,7 @@ void closeLineBreakIterator(UBreakIterator*&);
 WTF_EXPORT_PRIVATE bool isWordTextBreak(UBreakIterator*);
 
 class LazyLineBreakIterator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     LazyLineBreakIterator()
     {
@@ -322,6 +326,7 @@ private:
 // Use this for general text processing, e.g. string truncation.
 
 class NonSharedCharacterBreakIterator {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(NonSharedCharacterBreakIterator);
 public:
     WTF_EXPORT_PRIVATE NonSharedCharacterBreakIterator(StringView);
index eafa7e9..de7aefd 100644 (file)
@@ -31,6 +31,7 @@ namespace WTF {
 // TextPosition structure specifies coordinates within an text resource. It is used mostly
 // for saving script source position.
 class TextPosition {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     TextPosition(OrdinalNumber line, OrdinalNumber column)
         : m_line(line)
index 0cc14cf..abc6824 100644 (file)
 namespace WTF {
 
 class TextStream {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     struct FormatNumberRespectingIntegers {
+        WTF_MAKE_STRUCT_FAST_ALLOCATED;
         FormatNumberRespectingIntegers(double number)
             : value(number) { }
 
@@ -108,6 +110,7 @@ public:
     }
 
     struct Repeat {
+        WTF_MAKE_STRUCT_FAST_ALLOCATED;
         Repeat(unsigned inWidth, char inCharacter)
             : width(inWidth), character(inCharacter)
         { }
index 0dd1567..9f48910 100644 (file)
@@ -78,7 +78,8 @@ template<bool isSpecialCharacter(UChar), typename CharacterType> bool isAllSpeci
 
 enum TrailingZerosTruncatingPolicy { KeepTrailingZeros, TruncateTrailingZeros };
 
-class String {
+class String final {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     // Construct a null string, distinguishable from an empty string.
     String() = default;
index d32aa4c..9baca8c 100644 (file)
@@ -26,6 +26,7 @@
 namespace WTF {
 
 class TextBreakIteratorCF {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     enum class Mode {
         Caret,
index d375723..85e20a6 100644 (file)
@@ -27,6 +27,7 @@
 namespace WTF {
 
 class TextBreakIteratorICU {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     enum class Mode {
         Line,
index 4d26b2b..337e826 100644 (file)
@@ -33,6 +33,7 @@ namespace WTF {
 const int UTextWithBufferInlineCapacity = 16;
 
 struct UTextWithBuffer {
+    WTF_MAKE_STRUCT_FAST_ALLOCATED;
     UText text;
     UChar buffer[UTextWithBufferInlineCapacity];
 };
index 9812b73..97ccbde 100644 (file)
@@ -32,7 +32,7 @@
 
 namespace WTF {
 
-class BinarySemaphore {
+class BinarySemaphore final {
     WTF_MAKE_NONCOPYABLE(BinarySemaphore);
     WTF_MAKE_FAST_ALLOCATED;
 public:
index 58b85e3..2e8aa25 100644 (file)
@@ -41,6 +41,7 @@ class StringView;
 #if UCONFIG_NO_COLLATION
 
 class Collator {
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit Collator(const char* = nullptr, bool = false) { }
 
@@ -51,6 +52,7 @@ public:
 #else
 
 class Collator {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(Collator);
 public:
     // The value nullptr is a special one meaning the system default locale.
index 11b93c2..b78a1c7 100644 (file)
@@ -39,6 +39,7 @@ template<typename T> void deleteObject(T);
 
 template<typename T> class GDIObject {
     WTF_MAKE_NONCOPYABLE(GDIObject);
+    WTF_MAKE_FAST_ALLOCATED;
 public:
     GDIObject() : m_object(0) { }
     GDIObject(std::nullptr_t) : m_object(0) { }
index 953ae2e..45dbabe 100644 (file)
@@ -30,6 +30,7 @@
 namespace WTF {
 
 class PathWalker {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(PathWalker);
 public:
     PathWalker(const WTF::String& directory, const WTF::String& pattern);
index aa7f490..f09ca83 100644 (file)
@@ -31,6 +31,7 @@
 namespace WTF {
 
 class Win32Handle {
+    WTF_MAKE_FAST_ALLOCATED;
     WTF_MAKE_NONCOPYABLE(Win32Handle);
 
 public:
index 88fcade..1b5dfc8 100644 (file)
@@ -1,3 +1,18 @@
+2019-08-12  Yusuke Suzuki  <ysuzuki@apple.com>
+
+        [WTF][JSC] Make JSC and WTF aggressively-fast-malloced
+        https://bugs.webkit.org/show_bug.cgi?id=200611
+
+        Reviewed by Saam Barati.
+
+        Changed the accessor since we changed std::unique_ptr to Ref for this field.
+
+        No behavior change.
+
+        * bindings/js/WorkerScriptController.cpp:
+        (WebCore::WorkerScriptController::addTimerSetNotification):
+        (WebCore::WorkerScriptController::removeTimerSetNotification):
+
 2019-08-12  Youenn Fablet  <youenn@apple.com>
 
         Make Blob::m_size an Optional
index 6f75d16..16a76c4 100644 (file)
@@ -250,7 +250,7 @@ void WorkerScriptController::addTimerSetNotification(JSC::JSRunLoopTimer::TimerN
 
     processTimer(m_vm->heap.fullActivityCallback());
     processTimer(m_vm->heap.edenActivityCallback());
-    processTimer(m_vm->promiseDeferredTimer.get());
+    processTimer(m_vm->promiseDeferredTimer.ptr());
 }
 
 void WorkerScriptController::removeTimerSetNotification(JSC::JSRunLoopTimer::TimerNotificationCallback callback)
@@ -263,7 +263,7 @@ void WorkerScriptController::removeTimerSetNotification(JSC::JSRunLoopTimer::Tim
 
     processTimer(m_vm->heap.fullActivityCallback());
     processTimer(m_vm->heap.edenActivityCallback());
-    processTimer(m_vm->promiseDeferredTimer.get());
+    processTimer(m_vm->promiseDeferredTimer.ptr());
 }
 
 void WorkerScriptController::attachDebugger(JSC::Debugger* debugger)