2018-04-26  Mark Lam  <mark.lam@apple.com>

        Gardening: Speculative build fix for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=184976
        <rdar://problem/39723901>

        Not reviewed.

        * wtf/PtrTag.h:
        (WTF::makePtrTagHash): Undo last speculative build fix that did not work for 64-bit.

2018-04-26  Andy VanWagoner  <thetalecrafter@gmail.com>

        [INTL] Implement Intl.PluralRules
        https://bugs.webkit.org/show_bug.cgi?id=184312

        Reviewed by JF Bastien.

        Added Intl.PluralRules feature flag.

        * wtf/FeatureDefines.h:

2018-04-25  Mark Lam  <mark.lam@apple.com>

        Gardening: Speculative build fix for Windows 32-bit to compensate for MSVC's lack of smarts.
        https://bugs.webkit.org/show_bug.cgi?id=184976
        <rdar://problem/39723901>

        Not reviewed.

        According to https://stackoverflow.com/questions/37658794/integer-constant-overflow-warning-in-constexpr,
        disabling the warning around the definition of the function will not disable it
        for all clients of the function.

        * wtf/PtrTag.h:
        (WTF::makePtrTagHash):

2018-04-25  Mark Lam  <mark.lam@apple.com>

        Push the definition of PtrTag down to the WTF layer.
        https://bugs.webkit.org/show_bug.cgi?id=184976
        <rdar://problem/39723901>

        Reviewed by Saam Barati.

        This is in preparation for doing pointer profiling at the WTF layer as well.
        Also deleted an unused ptrTag() function.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/PtrTag.h: Copied from Source/JavaScriptCore/runtime/PtrTag.h.
        (WTF::makePtrTagHash):
        (JSC::ptrTagName): Deleted.
        (JSC::tagForPtr): Deleted.
        (JSC::ptrTag): Deleted.
        (JSC::tagCodePtr): Deleted.
        (JSC::untagCodePtr): Deleted.
        (JSC::retagCodePtr): Deleted.
        (JSC::removeCodePtrTag): Deleted.
        (JSC::tagCFunctionPtr): Deleted.
        (JSC::untagCFunctionPtr): Deleted.
        (JSC::assertIsCFunctionPtr): Deleted.
        (JSC::assertIsNullOrCFunctionPtr): Deleted.
        (JSC::assertIsNotTagged): Deleted.
        (JSC::assertIsTagged): Deleted.
        (JSC::assertIsNullOrTagged): Deleted.
        (JSC::assertIsTaggedWith): Deleted.
        (JSC::assertIsNullOrTaggedWith): Deleted.

2018-04-25  Dean Jackson  <dino@apple.com>

        Make a better flag for system preview, and disable it where necessary
        https://bugs.webkit.org/show_bug.cgi?id=184968
        <rdar://problem/39686506>

        Reviewed by Eric Carlson.

        Add a new USE(SYSTEM_PREVIEW).

        * wtf/Platform.h:

2018-04-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r230971.
        https://bugs.webkit.org/show_bug.cgi?id=184939

        This fix was not appropriate (Requested by n_wang on #webkit).

        Reverted changeset:

        "AX: soft link libAccessibility.dylb"
        https://bugs.webkit.org/show_bug.cgi?id=184919
        https://trac.webkit.org/changeset/230971

2018-04-24  Nan Wang  <n_wang@apple.com>

        AX: soft link libAccessibility.dylb
        https://bugs.webkit.org/show_bug.cgi?id=184919

        Reviewed by Chris Fleizach.

        * wtf/cocoa/SoftLinking.h:

2018-04-23  Zalan Bujtas  <zalan@apple.com>

        [LayoutFormattingContext] Initial commit.
        https://bugs.webkit.org/show_bug.cgi?id=184896

        Reviewed by Antti Koivisto.

        * wtf/FeatureDefines.h:

2018-04-23  Per Arne Vollan  <pvollan@apple.com>

        Deactivate the WindowServer connection for the WebContent process.
        https://bugs.webkit.org/show_bug.cgi?id=184451
        <rdar://problem/38313938>

        Reviewed by Brent Fulgham.

        Defining ENABLE_WEBPROCESS_WINDOWSERVER_BLOCKING as 1 will deactivate the WindowServer connection
        for the WebContent process by enabling the call to 'CGSSetDenyWindowServerConnections(true)' on
        process startup. After calling this function, every attempt to establish a connection to the
        WindowServer from the WebContent process will fail, except for CA render server connections.

        * wtf/FeatureDefines.h:

2018-04-20  JF Bastien  <jfbastien@apple.com>

        Handle more JSON stringify OOM
        https://bugs.webkit.org/show_bug.cgi?id=184846
        <rdar://problem/39390672>

        Reviewed by Mark Lam.

        JSON stringification can OOM easily. Here's another case.

        * wtf/text/StringBuilderJSON.cpp:
        (WTF::StringBuilder::appendQuotedJSONString):

2018-04-18  Jer Noble  <jer.noble@apple.com>

        Don't put build products into WK_ALTERNATE_WEBKIT_SDK_PATH for engineering builds
        https://bugs.webkit.org/show_bug.cgi?id=184762

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-04-20  Daniel Bates  <dabates@apple.com>

        Remove code for compilers that did not support NSDMI for aggregates
        https://bugs.webkit.org/show_bug.cgi?id=184599

        Reviewed by Per Arne Vollan.

        Remove workaround for earlier Visual Studio versions that did not support non-static data
        member initializers (NSDMI) for aggregates. We have since updated all the build.webkit.org
        and EWS bots to a newer version that supports this feature.

        * wtf/Compiler.h:

2018-04-19  David Kilzer  <ddkilzer@apple.com>

        Enable Objective-C weak references
        <https://webkit.org/b/184789>
        <rdar://problem/39571716>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.

2018-04-19  Brady Eidson  <beidson@apple.com>

        Add globally-unique HistoryItem identifiers (and have WebKit2 adopt them).
        <rdar://problem/39533949> and https://bugs.webkit.org/show_bug.cgi?id=184750

        Reviewed by Ryosuke Niwa.

        * wtf/DebugUtilities.h:
        (WTF::debugString):

2018-04-19  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed, rolling out r230677.

        Introduced Netflix problems.

        Reverted changeset:

        "Deactivate the WindowServer connection for the WebContent process."
        https://bugs.webkit.org/show_bug.cgi?id=184451
        https://trac.webkit.org/changeset/230677

2018-04-19  Nan Wang  <n_wang@apple.com>

        AX: AOM: respect the accessibility setting for dispatching the accessible events
        https://bugs.webkit.org/show_bug.cgi?id=184619

        Reviewed by Ryosuke Niwa.

        * wtf/Platform.h:

2018-04-18  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] Layout Test js/date-constructor.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=140945

        Reviewed by Per Arne Vollan.

        * wtf/DateMath.cpp:
        (WTF::calculateDSTOffset):
        Move all shared calculations outside of the #if -- including the "jump forward a day" case that had been overlooked.

2018-04-17  Saam Barati  <sbarati@apple.com>

        Add system trace points for process launch and for initializeWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=184669

        Reviewed by Simon Fraser.

        This patch adds TracePointCodes to measure process launch time and
        WebProcess::initializeWebProcess time.
        
        It also renames the TracePoint function to tracePoint since WebKit style
        does not capitalize the first letter in function names.

        * wtf/SystemTracing.h:
        (WTF::tracePoint):
        (WTF::TraceScope::TraceScope):
        (WTF::TraceScope::~TraceScope):
        (WTF::TracePoint): Deleted.

2018-04-16  Andy Estes  <aestes@apple.com>

        [iOS] Enable WKPDFView by default
        https://bugs.webkit.org/show_bug.cgi?id=184675
        <rdar://problem/27885452>

        Reviewed by Darin Adler.

        * wtf/FeatureDefines.h:

2018-04-16  Per Arne Vollan  <pvollan@apple.com>

        Deactivate the WindowServer connection for the WebContent process.
        https://bugs.webkit.org/show_bug.cgi?id=184451
        <rdar://problem/38313938>

        Reviewed by Brent Fulgham.

        Defining ENABLE_WEBPROCESS_WINDOWSERVER_BLOCKING as 1 will deactivate the WindowServer connection
        for the WebContent process by enabling the call to 'CGSSetDenyWindowServerConnections(true)' on
        process startup. After calling this function, every attempt to establish a connection to the
        WindowServer from the WebContent process will fail, except for CA render server connections.

        * wtf/FeatureDefines.h:

2018-04-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r230659.
        https://bugs.webkit.org/show_bug.cgi?id=184633

        Landed prematurely (Requested by ap on #webkit).

        Reverted changeset:

        "Deactivate the WindowServer connection for the WebContent
        process."
        https://bugs.webkit.org/show_bug.cgi?id=184451
        https://trac.webkit.org/changeset/230659

2018-04-14  Per Arne Vollan  <pvollan@apple.com>

        Deactivate the WindowServer connection for the WebContent process.
        https://bugs.webkit.org/show_bug.cgi?id=184451
        <rdar://problem/38313938>

        Reviewed by Brent Fulgham.

        Defining ENABLE_WEBPROCESS_WINDOWSERVER_BLOCKING as 1 will deactivate the WindowServer connection
        for the WebContent process by enabling the call to 'CGSSetDenyWindowServerConnections(true)' on
        process startup. After calling this function, every attempt to establish a connection to the
        WindowServer from the WebContent process will fail, except for CA render server connections.

        * wtf/FeatureDefines.h:

2018-04-13  Chris Dumez  <cdumez@apple.com>

        Split WindowProxy handling out of ScriptController and into a new class owned by AbstractFrame
        https://bugs.webkit.org/show_bug.cgi?id=184591

        Reviewed by Sam Weinig.

        Add isEmpty() convenience method to SizedIteratorRange.

        * wtf/IteratorRange.h:
        (WTF::SizedIteratorRange::isEmpty const):

2018-04-13  Brady Eidson  <beidson@apple.com>

        Introduce SuspendedPageProxy to keep old web processes around after their WebPageProxy has been swapped to a new one.
        https://bugs.webkit.org/show_bug.cgi?id=184559

        Reviewed by Alex Christensen.

        * wtf/DebugUtilities.h:
        (WTF::debugString): Add a debug utility to easily construct a "const char*" that is released after a spin of the run loop.
          This greatly eases uses our String classes and functions inside of "%s" style environments like printf and LOG.

2018-04-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove unused crash hook functionality
        https://bugs.webkit.org/show_bug.cgi?id=183369

        Reviewed by Alexey Proskuryakov.

        WTFSetCrashHook and WTFInstallReportBacktraceOnCrashHook are not used on any platforms and
        can be removed.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:

2018-04-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Unreviewed, rolling out r230523.

        Introduced MotionMark regression

        Reverted changeset:

        "Deactivate the WindowServer connection for the WebContent
        process."
        https://bugs.webkit.org/show_bug.cgi?id=184451
        https://trac.webkit.org/changeset/230523

2018-04-11  Per Arne Vollan  <pvollan@apple.com>

        Deactivate the WindowServer connection for the WebContent process.
        https://bugs.webkit.org/show_bug.cgi?id=184451
        <rdar://problem/38313938>

        Reviewed by Brent Fulgham.

        Defining ENABLE_WEBPROCESS_WINDOWSERVER_BLOCKING as 1 will deactivate the WindowServer connection
        for the WebContent process by enabling the call to 'CGSSetDenyWindowServerConnections(true)' on
        process startup. After calling this function, every attempt to establish a connection to the
        WindowServer from the WebContent process will fail, except for CA render server connections.

        * wtf/FeatureDefines.h:

2018-04-10  Andy Estes  <aestes@apple.com>

        [iOS] Use PDFKit to render PDFs in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=184387

        Reviewed by Beth Dakin.

        * wtf/FeatureDefines.h: Defined ENABLE_WKLEGACYPDFVIEW and ENABLE_WKPDFVIEW.

2018-04-09  Mark Lam  <mark.lam@apple.com>

        Decorate method table entries to support pointer profiling.
        https://bugs.webkit.org/show_bug.cgi?id=184430
        <rdar://problem/39296190>

        Reviewed by Saam Barati.

        * wtf/PointerPreparations.h:

2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, use alignas(void*)
        https://bugs.webkit.org/show_bug.cgi?id=183508

        Very large alignment is not supported in MSVC.

        * wtf/Gigacage.cpp:
        * wtf/Gigacage.h:

2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use alignas instead of compiler-specific attributes
        https://bugs.webkit.org/show_bug.cgi?id=183508

        Reviewed by Mark Lam.

        Use alignas for g_gigacageBasePtr. We also add reinterpret_cast to fix
        compile errors in ARMv7 and MIPS JSCOnly ports.

        * wtf/Gigacage.cpp:
        * wtf/Gigacage.h:
        (Gigacage::basePtrs):

2018-04-06  Saam Barati  <sbarati@apple.com>

        bmalloc's tryLargeZeroedMemalignVirtual shouldn't treat the entire virtual size as dirty towards its footprint
        https://bugs.webkit.org/show_bug.cgi?id=184207

        Reviewed by Mark Lam.

        * wtf/Gigacage.cpp:
        (Gigacage::freeVirtualPages):

2018-04-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove StaticLock
        https://bugs.webkit.org/show_bug.cgi?id=184332

        Reviewed by Mark Lam.

        Now, WTF::StaticLock is `using StaticLock = Lock`. Lock just works
        in either static storage and dynamic storage. Remove StaticLock and
        always use Lock.

        We also remove StaticWordLock and StaticReadWriteLock. And we add
        WTF::RecursiveLock, which is RecursiveLockAdapter<Lock>.

        * wtf/HashTable.cpp:
        (WTF::HashTableStats::recordCollisionAtCount):
        (WTF::HashTableStats::dumpStats):
        * wtf/Language.cpp:
        (WTF::userPreferredLanguages):
        * wtf/Lock.h:
        * wtf/MainThread.cpp:
        (WTF::dispatchFunctionsFromMainThread):
        (WTF::callOnMainThread):
        * wtf/ParkingLot.cpp:
        * wtf/ReadWriteLock.h:
        * wtf/RecursiveLockAdapter.h:
        * wtf/StackStats.cpp:
        (WTF::StackStats::CheckPoint::CheckPoint):
        (WTF::StackStats::CheckPoint::~CheckPoint):
        (WTF::StackStats::probe):
        (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
        (WTF::StackStats::LayoutCheckPoint::~LayoutCheckPoint):
        * wtf/StackStats.h:
        * wtf/ThreadMessage.cpp:
        (WTF::sendMessageScoped):
        * wtf/ThreadingPthreads.cpp:
        * wtf/ThreadingWin.cpp:
        * wtf/WordLock.h:
        * wtf/cf/LanguageCF.cpp:
        (WTF::languagePreferencesDidChange):
        (WTF::platformUserPreferredLanguages):
        * wtf/dtoa.cpp:
        * wtf/text/AtomicStringImpl.cpp:
        * wtf/text/StringView.cpp:
        (WTF::StringView::invalidate):
        (WTF::StringView::adoptUnderlyingString):
        (WTF::StringView::setUnderlyingString):
        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::Collator::Collator):
        (WTF::Collator::~Collator):
        * wtf/win/LanguageWin.cpp:
        (WTF::platformLanguage):

2018-04-04  Brent Fulgham  <bfulgham@apple.com>

        Failures from mach port reference handling should be fatal
        https://bugs.webkit.org/show_bug.cgi?id=184202
        <rdar://problem/37771114>

        Reviewed by Anders Carlsson.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/MachSendRight.h: Copied from WebCore/platform/cocoa/MachSendRight.h.
        (WebCore::MachSendRight::operator bool const): Deleted.
        (WebCore::MachSendRight::sendRight const): Deleted.
        * wtf/PlatformMac.cmake:
        * wtf/cocoa/CPUTimeCocoa.mm:
        (WTF::CPUTime::forCurrentThread): Do proper cleanup if the port is invalid.
        * wtf/cocoa/MachSendRight.cpp: Copied from WebCore/platform/cocoa/MachSendRight.cpp.
        (WTF::retainSendRight):
        (WTF::releaseSendRight):
        (WTF::deallocateSendRightSafely):
        (WebCore::retainSendRight): Deleted.
        (WebCore::releaseSendRight): Deleted.
        (WebCore::MachSendRight::adopt): Deleted.
        (WebCore::MachSendRight::create): Deleted.
        (WebCore::MachSendRight::MachSendRight): Deleted.
        (WebCore::MachSendRight::~MachSendRight): Deleted.
        (WebCore::MachSendRight::operator=): Deleted.
        (WebCore::MachSendRight::copySendRight const): Deleted.
        (WebCore::MachSendRight::leakSendRight): Deleted.

2018-04-04  Youenn Fablet  <youenn@apple.com>

        Introduce a ThreadSafeRefCounted parameter to ensure being destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=183988

        Reviewed by Darin Adler.

        * wtf/ThreadSafeRefCounted.h:
        (WTF::ThreadSafeRefCounted::deref const):

2018-04-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove Atomics.cpp
        https://bugs.webkit.org/show_bug.cgi?id=184300

        Reviewed by Konstantin Tokarev.

        This Atomics.cpp is a workaround for GCC which version is < 4.8.
        Our compiler requirement is now 5.0.0. This workaround is no
        longer necessary.

        * wtf/Atomics.cpp: Removed.
        * wtf/CMakeLists.txt:

2018-04-03  Tomas Popela  <tpopela@redhat.com>

        Unreviewed, mute the unused parameter compilation warning

        Triggered on the PPC64 machine.

        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::signalHandlerSuspendResume):

2018-04-03  Tomas Popela  <tpopela@redhat.com>

        Unreviewed, fix the unused variable compilation warning

        Move the ucontext_t code under the HAVE(MACHINE_CONTEXT). Triggered
        on the PPC64 machine.

        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::signalHandlerSuspendResume):

2018-04-02  Saam Barati  <sbarati@apple.com>

        bmalloc should compute its own estimate of its footprint
        https://bugs.webkit.org/show_bug.cgi?id=184121

        Reviewed by Filip Pizlo.

        * wtf/FastMalloc.cpp:
        (WTF::fastCommitAlignedMemory):
        (WTF::fastDecommitAlignedMemory):
        * wtf/FastMalloc.h:

2018-03-30  Filip Pizlo  <fpizlo@apple.com>

        Strings and Vectors shouldn't do index masking
        https://bugs.webkit.org/show_bug.cgi?id=184193

        Reviewed by Mark Lam.

        * wtf/SizeLimits.cpp:
        * wtf/Vector.h:
        (WTF::VectorBufferBase::allocateBuffer):
        (WTF::VectorBufferBase::tryAllocateBuffer):
        (WTF::VectorBufferBase::reallocateBuffer):
        (WTF::VectorBufferBase::deallocateBuffer):
        (WTF::VectorBufferBase::releaseBuffer):
        (WTF::VectorBufferBase::VectorBufferBase):
        (WTF::VectorBuffer::allocateBuffer):
        (WTF::VectorBuffer::tryAllocateBuffer):
        (WTF::VectorBuffer::swap):
        (WTF::VectorBuffer::restoreInlineBufferIfNeeded):
        (WTF::Vector::at):
        (WTF::Vector::at const):
        (WTF::VectorBufferBase::updateMask): Deleted.
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::flagIsSymbol):
        (WTF::StringImpl::length const):
        (WTF::StringImplShape::StringImplShape):
        (WTF::StringImpl::at const):
        (WTF::StringImpl::tailOffset):
        (WTF::StringImpl::maskOffset): Deleted.
        (WTF::StringImpl::mask const): Deleted.
        * wtf/text/StringView.h:
        (WTF::StringView::StringView):
        (WTF::StringView::operator=):
        (WTF::StringView::initialize):
        (WTF::StringView::clear):
        (WTF::StringView::operator[] const):
        * wtf/text/WTFString.h:
        (WTF::String::length const):
        (WTF::String::mask const): Deleted.

2018-03-30  Mark Lam  <mark.lam@apple.com>

        Add pointer profiling support in baseline JIT and supporting files.
        https://bugs.webkit.org/show_bug.cgi?id=184200
        <rdar://problem/39057300>

        Reviewed by Filip Pizlo.

        * wtf/PointerPreparations.h:
        - Remove WTF_PREPARE_FUNCTION_POINTER_FOR_EXECUTION.  It is no longer needed.

2018-03-30  JF Bastien  <jfbastien@apple.com>

        WorkQueueWin: don't move rvalues
        https://bugs.webkit.org/show_bug.cgi?id=184190
        <rdar://problem/39049850>

        Reviewed by Mark Lam.

        As part of #184167 optional is now more frequently an rvalue
        reference, and moving its .value() is not a thing that should be
        done anymore.

        * wtf/win/WorkQueueWin.cpp:
        (WTF::WorkQueue::unregisterAndCloseHandle):

2018-03-30  JF Bastien  <jfbastien@apple.com>

        Remove CXX_REFERENCE_QUALIFIED_FUNCTIONS and optional's equivalent
        https://bugs.webkit.org/show_bug.cgi?id=184167
        <rdar://problem/39023130>

        Reviewed by Yusuke Suzuki.

        Remove COMPILER_SUPPORTS(CXX_REFERENCE_QUALIFIED_FUNCTIONS), it's
        supported by all compilers WebKit supports (it's a C++11 feature,
        *detection* of it with __has_extension was added to clang on May
        13th 2011, and VS2015 / GCC support it).

        Optional.h had a similar thing, ditch it too.

        * wtf/Compiler.h:
        * wtf/Optional.h:
        (std::optional::contained_val const):
        (std::optional::contained_val):
        * wtf/Ref.h:
        * wtf/RefPtr.h:
        * wtf/text/WTFString.cpp:
        * wtf/text/WTFString.h:

2018-03-30  JF Bastien  <jfbastien@apple.com>

        Introduce WTF_LAZY_INSTANTIATE
        https://bugs.webkit.org/show_bug.cgi?id=184169
        <rdar://problem/39023385>

        Reviewed by Mark Lam.

        As part of #184164 I'm adding some forwarding methods to
        WTF::String. These need to forward RetainPtr and CString, and
        usually that would require #include'ing RetainPtr.h and CString.h
        to WTFString.h which isn't really something we should do.

        Introduce WTF_LAZY_INSTANTIATE to forward-declare functions which
        just pass parameters to another function, and return whatever that
        other function returned, without having to include the return's /
        parameters' type header.

        Try it out here: godbolt.org/g/oV8G5Q

        * wtf/Forward.h:

2018-03-29  JF Bastien  <jfbastien@apple.com>

        Use Forward.h instead of forward-declaring WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=184172
        <rdar://problem/39026146>

        Reviewed by Yusuke Suzuki.

        As part of #184164 I'm changing WTF::String, and the forward
        declarations are just wrong because I'm making it templated. We
        should use Forward.h anyways, so do that instead.

        * wtf/Forward.h:
        * wtf/HashTraits.h:
        * wtf/PrintStream.h:

2018-03-29  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove WTF_EXPORTDATA and JS_EXPORTDATA
        https://bugs.webkit.org/show_bug.cgi?id=184170

        Reviewed by JF Bastien.

        Replace WTF_EXPORTDATA and JS_EXPORTDATA with
        WTF_EXPORT_PRIVATE and JS_EXPORT_PRIVATE respectively.

        * wtf/ExportMacros.h:
        * wtf/Gigacage.h:
        * wtf/HashTable.h:
        * wtf/Threading.h:
        * wtf/text/AtomicString.cpp:
        * wtf/text/AtomicString.h:
        * wtf/text/StringImpl.h:

2018-03-29  Ross Kirsling  <ross.kirsling@sony.com>

        MSVC __forceinline slows down JSC release build fivefold after r229391
        https://bugs.webkit.org/show_bug.cgi?id=184062

        Reviewed by Alex Christensen.

        * wtf/Compiler.h:
        Add ALWAYS_INLINE_EXCEPT_MSVC to support MSVC optimizer sensitivities.

2018-03-29  JF Bastien  <jfbastien@apple.com>

        Remove WTF_EXPORT_STRING_API
        https://bugs.webkit.org/show_bug.cgi?id=184168
        <rdar://problem/39023253>

        Reviewed by Yusuke Suzuki.

        Remove WTF_EXPORT_STRING_API as requested by a FIXME, and use
        WTF_EXPORT_PRIVATE instead.

        * wtf/ExportMacros.h:
        * wtf/text/AtomicString.h:
        * wtf/text/AtomicStringImpl.h:
        * wtf/text/StringImpl.h:
        * wtf/text/StringView.h:
        * wtf/text/SymbolImpl.h:
        * wtf/text/WTFString.h:

2018-03-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r230062.
        https://bugs.webkit.org/show_bug.cgi?id=184128

        Broke mac port. web content process crashes while loading any
        web page (Requested by rniwa on #webkit).

        Reverted changeset:

        "MSVC __forceinline slows down JSC release build fivefold
        after r229391"
        https://bugs.webkit.org/show_bug.cgi?id=184062
        https://trac.webkit.org/changeset/230062

2018-03-28  Ross Kirsling  <ross.kirsling@sony.com>

        MSVC __forceinline slows down JSC release build fivefold after r229391
        https://bugs.webkit.org/show_bug.cgi?id=184062

        Reviewed by Alex Christensen.

        * wtf/Compiler.h:
        Add ALWAYS_INLINE_EXCEPT_MSVC to support MSVC optimizer sensitivities.

2018-03-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Assertions.h: VC doesn't support GCC extension ##__VA_ARGS__
        https://bugs.webkit.org/show_bug.cgi?id=184076

        Reviewed by Alex Christensen.

        ##__VA_ARGS__ is used to define RELEASE_LOG, RELEASE_LOG_ERROR,
        RELEASE_LOG_IF, RELEASE_LOG_ERROR_IF, RELEASE_LOG_WITH_LEVEL,
        RELEASE_LOG_WITH_LEVEL_IF and RELEASE_LOG_INFO_IF.

        A macro using ##__VA_ARGS__,

          #define foo(format, ...) bar(format, ##__VA_ARGS__)

        can be defined without ##__VA_ARGS__:

          #define foo(...) bar(__VA_ARGS__)

        * wtf/Assertions.h: Use __VA_ARGS__ instead of ##__VA_ARGS__.

2018-03-28  Brent Fulgham  <bfulgham@apple.com>

        Avoid uninitialized mach ports
        https://bugs.webkit.org/show_bug.cgi?id=184090
        <rdar://problem/37261129>

        Reviewed by Chris Dumez.

        It is possible for mach_port_allocate to return an error, but we rarely check its return value. The value
        of the argument passed to mach_port_allocate is not guaranteed to be valid when it returns an error, so
        there is a potential for us to try to use invalid ports.

        We should always check return values, and ensure that the mach port variables we seek to initialize are
        kept in a valid state.

        Reviewed by Chris Dumez.

        * wtf/Threading.h: Initialize mach port.

2018-03-28  Robin Morisset  <rmorisset@apple.com>

        appendQuotedJSONString stops on arithmetic overflow instead of propagating it upwards
        https://bugs.webkit.org/show_bug.cgi?id=183894

        Reviewed by Saam Barati.

        appendQuotedJSONString now returns a bool indicating whether it succeeded, instead of silently failing when given a string too large
        to fit in 4GB.

        * wtf/text/StringBuilder.h:
        * wtf/text/StringBuilderJSON.cpp:
        (WTF::StringBuilder::appendQuotedJSONString):

2018-03-27  Per Arne Vollan  <pvollan@apple.com>

        The layout test fast/canvas/webgl/read-pixels-test.html is timing out.
        https://bugs.webkit.org/show_bug.cgi?id=183923
        <rdar://problem/38756869>

        Reviewed by Brent Fulgham.

        Add compile guard for blocking of the WindowServer in the WebProcess.

        * wtf/FeatureDefines.h:

2018-03-26  Tim Horton  <timothy_horton@apple.com>

        Add and adopt HAVE(CORE_ANIMATION_RENDER_SERVER)
        https://bugs.webkit.org/show_bug.cgi?id=184026
        <rdar://problem/38883321>

        Reviewed by Sam Weinig.

        * wtf/Platform.h:

2018-03-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        We should have SSE4 detection in the X86 MacroAssembler.
        https://bugs.webkit.org/show_bug.cgi?id=165363

        Reviewed by JF Bastien.

        GCC 5 supports clobbering PIC registers in inline ASM [1,2].

        [1]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47602
        [2]: https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=216154

        * wtf/Atomics.h:
        (WTF::x86_cpuid):

2018-03-26  Antoine Quint  <graouts@apple.com>

        [ASan] Allow Ref<> to be swapped
        https://bugs.webkit.org/show_bug.cgi?id=184017
        <rdar://problem/36336787>

        Reviewed by JF Bastien.

        Unpoison a Ref in various calls just like in ~Ref so that sorting a Vector<Ref<>> works with ASan on.

        * wtf/Ref.h:
        (WTF::Ref::assignToHashTableEmptyValue):
        (WTF::=):
        (WTF::U>::replace):

2018-03-26  Brent Fulgham  <bfulgham@apple.com>

        Warn against cookie access in the WebContent process using ProcessPrivilege assertions
        https://bugs.webkit.org/show_bug.cgi?id=183911
        <rdar://problem/38762306>

        Reviewed by Youenn Fablet.

        Extend the ProcessPrivilege API with the ability to add and remove individual
        privileges.

        * wtf/ProcessPrivilege.cpp:
        (WTF::addProcessPrivilege):
        (WTF::removeProcessPrivilege):
        * wtf/ProcessPrivilege.h:

2018-03-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        WebProcess memory monitor: use %zu format specifier for size_t
        https://bugs.webkit.org/show_bug.cgi?id=183997

        Reviewed by Michael Catanzaro.

        usse %zu format specifier for size_t instead of %lu.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::shrinkOrDie):
        (WTF::MemoryPressureHandler::measurementTimerFired):

2018-03-25  Tim Horton  <timothy_horton@apple.com>

        Add and adopt ENABLE(AIRPLAY_PICKER)
        https://bugs.webkit.org/show_bug.cgi?id=183992

        Reviewed by Daniel Bates.

        * wtf/FeatureDefines.h:

2018-03-23  Tim Horton  <timothy_horton@apple.com>

        Introduce and adopt HAVE(AUDIO_TOOLBOX_AUDIO_SESSION)
        https://bugs.webkit.org/show_bug.cgi?id=183954
        <rdar://problem/38808858>

        Reviewed by Dan Bernstein.

        * wtf/Platform.h:

2018-03-23  David Kilzer  <ddkilzer@apple.com>

        Stop using dispatch_set_target_queue()
        <https://webkit.org/b/183908>
        <rdar://problem/33553533>

        Reviewed by Daniel Bates.

        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::WorkQueue::platformInitialize): Remove !HAVE(QOS_CLASSES)
        code path since it's never used now that HAVE(QOS_CLASSES) is
        equivalent to PLATFORM(COCOA) in <wtf/Platform.h>.

2018-03-23  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        WebProcess memory monitor thresholds should be better tuned for embedded systems.
        https://bugs.webkit.org/show_bug.cgi?id=183773

        Reviewed by Yusuke Suzuki.

        Take into account the total system RAM for the thresholds calculation.

        For systems with more than 3GB the conservative and strict thresholds remain as they are,
        but for systems with less RAM the thresholds are dynamically configured as follows:

        - Conservative threshold (release non critical memory) if WebProcess using more than 33% of the total RAM.
        - Strict threshold (release all possible memory) if WebProcess using more than 50% of the total RAM.

        The Kill threshold is also modified. Now it is capped at 90% of the total RAM.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::thresholdForMemoryKillWithProcessState):
        (WTF::thresholdForPolicy):
        (WTF::MemoryPressureHandler::shrinkOrDie):

2018-03-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Add standard containers with FastAllocator specialization
        https://bugs.webkit.org/show_bug.cgi?id=183789

        Reviewed by Darin Adler.

        Sometimes we want standard containers due to various reasons.
        For example, WTF::HashMap lacks the ability to hold all the
        integer keys since it uses 0 for empty value and -1 for deleted
        value. However, using std::containers use std::allocator without
        specialization.

        This patch introduces WTF::{StdMap, StdSet, StdList, StdUnorderedMap, StdUnorderedSet}.
        They are standard containers with FastAllocator specialization.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/StdList.h: Copied from Source/JavaScriptCore/runtime/TypeLocationCache.h.
        * wtf/StdMap.h: Copied from Source/JavaScriptCore/runtime/TypeLocationCache.h.
        * wtf/StdSet.h: Copied from Source/JavaScriptCore/runtime/TypeLocationCache.h.
        * wtf/StdUnorderedMap.h: Copied from Source/JavaScriptCore/runtime/TypeLocationCache.h.
        * wtf/StdUnorderedSet.h: Copied from Source/JavaScriptCore/runtime/TypeLocationCache.h.

2018-03-22  Tim Horton  <timothy_horton@apple.com>

        Adopt USE(OPENGL[_ES]) in more places
        https://bugs.webkit.org/show_bug.cgi?id=183882
        <rdar://problem/37912195>

        Reviewed by Dan Bernstein.

        * wtf/Platform.h:

2018-03-20  Brent Fulgham  <bfulgham@apple.com>

        Create an assertion mechanism to ensure proper WebCore use in each WebKit Process
        https://bugs.webkit.org/show_bug.cgi?id=183806
        <rdar://problem/38694251>

        Reviewed by Ryosuke Niwa.

        Part of our security improvements involve better isolation between the different WebKit
        processes (UIProcess, WebContent, Networking, Storage, etc.).

        We need an assertion language we can use to protect certain critical APIs and code paths
        against accidental misuse.

        This patch adds a new enum type meant to represent different categories of program logic
        that we do not want used in the wrong process.

        This first patch just creates these types and makes them available. New assertions using
        these values will be added as we complete our work ensuring proper process isolation.

        In a method we want to protect, we can add an assertion describing the process privileges
        needed to execute the code. For example, for cookie access we might use this:

            ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies);

        At the launch of the UIProcess we would use this method to ensure all privileges are available:

            setProcessPrivileges(allPrivileges());

        In the network process, during platform initialization, we would use something like this:

            setProcessPrivileges({ ProcessPrivilege::CanAccessRawCookies, ProcessPrivilege::CanAccessCredentials });

        In the WebContent process, we would not set any privileges. We could just leave it as the
        default initialization, or use this:

            setProcessPrivileges({ });

        Later, when we attempt to execute the initial code, we would expect an assertion for the
        WebContent process, while Network and UIProcess pass the assertion.

        * WTF.xcodeproj/project.pbxproj: Add new files.
        * wtf/CMakeLists.txt: Ditto.
        * wtf/ProcessPrivilege.cpp: Added.
        (WTF::processPrivileges):
        (WTF::setProcessPrivileges):
        (WTF::hasProcessPrivilege):
        * wtf/ProcessPrivilege.h: Added.

2018-03-20  Tim Horton  <timothy_horton@apple.com>

        Introduce HAVE_MEDIA_PLAYER and HAVE_CORE_VIDEO
        https://bugs.webkit.org/show_bug.cgi?id=183803
        <rdar://problem/38690487>

        Reviewed by Sam Weinig.

        * wtf/Platform.h:

2018-03-20  Brian Burg  <bburg@apple.com>

        SLEEP_THREAD_FOR_DEBUGGER should not use fancy number literals
        https://bugs.webkit.org/show_bug.cgi?id=183792

        Reviewed by Timothy Hatcher.

        * wtf/DebugUtilities.h: Remove the '_s' since this won't
        compile when included by files compiled as Objective-C++.

2018-03-20  Tim Horton  <timothy_horton@apple.com>

        Add and adopt WK_PLATFORM_NAME and adjust default feature defines
        https://bugs.webkit.org/show_bug.cgi?id=183758
        <rdar://problem/38017644>

        Reviewed by Dan Bernstein.

        * wtf/FeatureDefines.h:

2018-03-19  Eric Carlson  <eric.carlson@apple.com>

        [Extra zoom mode] Require fullscreen for video playback
        https://bugs.webkit.org/show_bug.cgi?id=183742
        <rdar://problem/38235862>

        Reviewed by Jer Noble.

        * wtf/Platform.h:

2018-03-15  Tim Horton  <timothy_horton@apple.com>

        Avoid defining commonly-named system macros on all Cocoa platforms
        https://bugs.webkit.org/show_bug.cgi?id=183687

        Reviewed by Dan Bernstein.

        * wtf/Platform.h:

2018-03-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r229387
        https://bugs.webkit.org/show_bug.cgi?id=183639
        <rdar://problem/38448568>

        Reviewed by Dean Jackson.

        * wtf/Platform.h:

2018-03-13  Tim Horton  <timothy_horton@apple.com>

        Add and adopt WK_ALTERNATE_FRAMEWORKS_DIR in WTF and bmalloc
        https://bugs.webkit.org/show_bug.cgi?id=183576
        <rdar://problem/38396766>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/CopyWTFHeaders.xcconfig:
        * Configurations/WTF.xcconfig:
        * Configurations/mbmalloc.xcconfig:

2018-03-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix typo in a comment

        * wtf/Platform.h:

2018-03-12  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Forwarding headers of WTF and PAL are copied twice in Visual Studio builds
        https://bugs.webkit.org/show_bug.cgi?id=183240

        Reviewed by Alex Christensen.

        * wtf/CMakeLists.txt:
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/PlatformWin.cmake:

2018-03-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, include time.h
        https://bugs.webkit.org/show_bug.cgi?id=183312

        Attempt to fix oss-fuzz build.

        * wtf/CurrentTime.cpp:
        * wtf/unix/CPUTimeUnix.cpp:

2018-03-12  Yoav Weiss  <yoav@yoav.ws>

        Runtime flag for link prefetch and remove link subresource.
        https://bugs.webkit.org/show_bug.cgi?id=183540

        Reviewed by Chris Dumez.

        Remove the LINK_PREFETCH build time flag.

        * wtf/FeatureDefines.h:

2018-03-12  Mark Lam  <mark.lam@apple.com>

        Make a NativeFunction into a class to support pointer profiling.
        https://bugs.webkit.org/show_bug.cgi?id=183573
        <rdar://problem/38384697>

        Reviewed by Filip Pizlo.

        Changed Poisoned so that it can be used on tagged pointers as well.

        * wtf/Poisoned.h:

2018-03-11  Filip Pizlo  <fpizlo@apple.com>

        Split DirectArguments into JSValueOOB and JSValueStrict parts
        https://bugs.webkit.org/show_bug.cgi?id=183458

        Reviewed by Yusuke Suzuki.

        * wtf/MathExtras.h:
        (WTF::dynamicPoison): Deleted.

2018-03-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [Win] Use SRWLOCK and CONDITION_VARIABLE to simplify implementation
        https://bugs.webkit.org/show_bug.cgi?id=183541

        Reviewed by Darin Adler.

        After Windows Vista, Windows offers SRWLOCK and CONDITION_VARIABLE.
        They can simplify the implementation of our WTF::Mutex and WTF::ThreadCondition.

        C++ std::mutex and std::condition_variable uses std::chrono for their timed
        functions. Since std::chrono is not overflow-aware, we cannot reliably use
        this functionalities. This is why we still keep WTF::Mutex and WTF::ThreadCondition.
        They are used for ParkingLot.

        * wtf/ThreadingPrimitives.h:
        * wtf/ThreadingWin.cpp:
        (WTF::Mutex::Mutex):
        (WTF::Mutex::~Mutex):
        (WTF::Mutex::lock):
        (WTF::Mutex::tryLock):
        (WTF::Mutex::unlock):
        (WTF::absoluteTimeToWaitTimeoutInterval):
        (WTF::ThreadCondition::ThreadCondition):
        (WTF::ThreadCondition::~ThreadCondition):
        (WTF::ThreadCondition::wait):
        (WTF::ThreadCondition::timedWait):
        (WTF::ThreadCondition::signal):
        (WTF::ThreadCondition::broadcast):
        (WTF::PlatformCondition::timedWait): Deleted.
        (WTF::PlatformCondition::signal): Deleted.

2018-03-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r229436.
        https://bugs.webkit.org/show_bug.cgi?id=183542

        seems to have regressed wasm compile times by 10% (Requested
        by pizlo-mbp on #webkit).

        Reverted changeset:

        "bmalloc mutex should be adaptive"
        https://bugs.webkit.org/show_bug.cgi?id=177839
        https://trac.webkit.org/changeset/229436

2018-03-09  Mark Lam  <mark.lam@apple.com>

        [Re-landing] Prepare LLInt code to support pointer profiling.
        https://bugs.webkit.org/show_bug.cgi?id=183387
        <rdar://problem/38199678>

        Reviewed by JF Bastien.

        * wtf/Platform.h:

2018-03-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r229354 and r229364.
        https://bugs.webkit.org/show_bug.cgi?id=183492

        Breaks internal builds (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Prepare LLInt code to support pointer profiling."
        https://bugs.webkit.org/show_bug.cgi?id=183387
        https://trac.webkit.org/changeset/229354

        "Add support for ARM64E."
        https://bugs.webkit.org/show_bug.cgi?id=183398
        https://trac.webkit.org/changeset/229364

2018-03-08  Filip Pizlo  <fpizlo@apple.com>

        bmalloc mutex should be adaptive
        https://bugs.webkit.org/show_bug.cgi?id=177839

        Reviewed by Michael Saboff.
        
        Add some comments that I thought of while copy-pasting this code.

        Reland after failing to reproduce the WasmBench crash that caused it to get rolled out. Maybe that fixed
        itself somehow?

        * wtf/LockAlgorithmInlines.h:
        * wtf/WordLock.cpp:
        (WTF::WordLock::unlockSlow):

2018-03-08  Keith Miller  <keith_miller@apple.com>

        Disable JIT on Cocoa 32-bit ARM.
        https://bugs.webkit.org/show_bug.cgi?id=183426

        Reviewed by Michael Saboff.

        * wtf/Platform.h:

2018-03-08  Keith Miller  <keith_miller@apple.com>

        Use asm instead of __asm__ in WTFBreakpointTrap so MSVC builds
        https://bugs.webkit.org/show_bug.cgi?id=183465

        Reviewed by Michael Saboff.

        * wtf/Assertions.h:

2018-03-07  Filip Pizlo  <fpizlo@apple.com>

        Make it possible to randomize register allocation
        https://bugs.webkit.org/show_bug.cgi?id=183416

        Reviewed by Keith Miller.

        * wtf/MathExtras.h:
        (WTF::shuffleVector):

2018-03-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        [Win] Use __debugbreak for WTFBreakpointTrap
        https://bugs.webkit.org/show_bug.cgi?id=183450

        Reviewed by Mark Lam.

        This patch adds WTFBreakpointTrap() implementation for MSVC by using
        __debugbreak. It fixes build failure in Windows due to the use of
        WTFBreakpointTrap().

        * wtf/Assertions.h:

2018-03-08  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] RunLoop::wakeUp(): use a zero value instead of the monotonic time
        https://bugs.webkit.org/show_bug.cgi?id=183447

        Reviewed by Carlos Garcia Campos.

        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::wakeUp): Micro-optimize the wake-up schedule by using
        a zero value as the GSource ready time, instead of retrieving and using
        the current monotonic time.

2018-03-08  Tim Horton  <timothy_horton@apple.com>

        Don't have Celestial in minimal simulator configuration
        https://bugs.webkit.org/show_bug.cgi?id=183432
        <rdar://problem/38252985>

        Reviewed by Dan Bernstein.

        * wtf/Platform.h:

2018-03-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Set canInitializeWithMemset = true if T is an integral type
        https://bugs.webkit.org/show_bug.cgi?id=183357

        Reviewed by Darin Adler.

        This patch set `canInitializeWithMemset = true` if T is an integral type.
        This can offer a chance to use memset if we use UniqueArray<T> where T is
        an integral type. We also rename VectorTypeOperations::initialize to
        VectorTypeOperations::initializeIfNonPOD, VectorTypeOperations::forceInitialize
        to VectorTypeOperations::initialize respectively.

        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::RefCountedArray):
        * wtf/UniqueArray.h:
        * wtf/Vector.h:
        (WTF::VectorTypeOperations::initializeIfNonPOD):
        (WTF::VectorTypeOperations::initialize):
        (WTF::Vector::Vector):
        (WTF::Malloc>::resize):
        (WTF::Malloc>::grow):
        (WTF::VectorTypeOperations::forceInitialize): Deleted.
        * wtf/VectorTraits.h:

2018-03-07  Keith Miller  <keith_miller@apple.com>

        Meta-program setupArguments and callOperation
        https://bugs.webkit.org/show_bug.cgi?id=183263

        Rubber-stamped by Filip Pizlo.

        Add a new function traits struct that provides interesting
        information about the provided function pointer. Right now it only
        provides information for function pointers, in theory we could
        also get it to work for other types.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Bitmap.h:
        (WTF::WordType>::Bitmap):
        * wtf/CMakeLists.txt:
        * wtf/FunctionTraits.h: Added.
        (WTF::slotsForCCallArgument):
        (WTF::computeCCallSlots):
        (WTF::FunctionTraits<Result):

2018-03-07  Tim Horton  <timothy_horton@apple.com>

        Shuffle around some feature flags for minimal simulator mode
        https://bugs.webkit.org/show_bug.cgi?id=183419
        <rdar://problem/37694987>

        Reviewed by Beth Dakin.

        * wtf/FeatureDefines.h:
        * wtf/Platform.h:

2018-03-06  Mark Lam  <mark.lam@apple.com>

        Prepare LLInt code to support pointer profiling.
        https://bugs.webkit.org/show_bug.cgi?id=183387
        <rdar://problem/38199678>

        Reviewed by JF Bastien.

        * wtf/Platform.h:

2018-03-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r229330.
        https://bugs.webkit.org/show_bug.cgi?id=183379

        Broke some Apple internal code (Requested by ap on #webkit).

        Reverted changeset:

        "Remove unused crash hook functionality"
        https://bugs.webkit.org/show_bug.cgi?id=183369
        https://trac.webkit.org/changeset/229330

2018-03-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove unused crash hook functionality
        https://bugs.webkit.org/show_bug.cgi?id=183369

        Reviewed by Alexey Proskuryakov.

        WTFSetCrashHook and WTFInstallReportBacktraceOnCrashHook are not used on any platforms and
        can be removed.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:

2018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Fix std::make_unique / new[] using system malloc
        https://bugs.webkit.org/show_bug.cgi?id=182975

        Reviewed by JF Bastien.

        If we use `make_unique<char[]>(num)` or `new char[num]`, allocation is
        done by the system malloc instead of bmalloc. This patch fixes this issue
        by following three changes.

        1. Introduce UniqueArray<T>. It allocates memory from FastMalloc. While C++
        array with `new` need to hold the size to call destructor correctly, our
        UniqueArray only supports type T which does not have a non trivial destructor.
        It reduces the allocation size since we do not need to track the size of the
        array compared to standard `new T[]`. This is basically usable if we want to
        have raw array which pointer won't be changed even if the container is moved.
        In addition, we also extend UniqueArray<T> for types which have non trivial
        destructors.

        2. Use Vector<T> instead.

        3. Annotate allocated types with MAKE_FAST_ALLOCATED. Since it introduces
        new[] and delete[] operators, make_unique<T[]>(num) will allocate memory
        from FastMalloc.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Assertions.cpp:
        * wtf/CMakeLists.txt:
        * wtf/FastMalloc.h:
        (WTF::FastFree::operator() const):
        (WTF::FastFree<T::operator() const):
        * wtf/MallocPtr.h:
        (WTF::MallocPtr::operator bool const):
        * wtf/StackShot.h:
        (WTF::StackShot::StackShot):
        (WTF::StackShot::operator=):
        * wtf/SystemFree.h:
        (WTF::SystemFree<T::operator() const):
        * wtf/UniqueArray.h: Copied from Source/WebKit/Platform/win/LoggingWin.cpp.
        (WTF::makeUniqueArray):
        * wtf/Vector.h:
        (WTF::VectorTypeOperations::forceInitialize):

2018-03-05  Michael Saboff  <msaboff@apple.com>

        Start using MAP_JIT for macOS
        https://bugs.webkit.org/show_bug.cgi?id=183353

        Reviewed by Filip Pizlo.

        Unify setting this flag for both iOS and macOS.

        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::reserveAndCommit):

2018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, follow-up after r229209
        https://bugs.webkit.org/show_bug.cgi?id=183312

        Add RELEASE_ASSERT to ensure success.

        * wtf/cocoa/CPUTimeCocoa.mm:
        (WTF::CPUTime::forCurrentThread):
        * wtf/unix/CPUTimeUnix.cpp:
        (WTF::CPUTime::forCurrentThread):
        * wtf/win/CPUTimeWin.cpp:
        (WTF::CPUTime::forCurrentThread):

2018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, fix MediaTime test
        https://bugs.webkit.org/show_bug.cgi?id=183319

        __builtin_xxx_overflow writes overflowed data into ResultType value even if overflow happens.
        This is different from the original CheckedArithmetic semantics.

        * wtf/CheckedArithmetic.h:

2018-03-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Move currentCPUTime and sleep(Seconds) to CPUTime.h and Seconds.h respectively
        https://bugs.webkit.org/show_bug.cgi?id=183312

        Reviewed by Mark Lam.

        1. currentCPUTime to CPUTime.h. It is now defined as CPUTime::forCurrentThread.
        We also removes fallback implementation for currentCPUTime since (1) that implementation
        is wrong and (2) no environments we support needs this.

        2. sleep(Seconds) to Seconds.h. Since sleep(MonotonicTime) and sleep(WallTime) are defined
        in MonotonicTime.h and WallTime.h, this code move is natural.

        3. Remove wtf/CurrentTime.h since nothing is defined now. But we keep CurrentTime.cpp to
        consolidate various time-source implementations in one place.

        * WTF.xcodeproj/project.pbxproj:
        * benchmarks/ConditionSpeedTest.cpp:
        * benchmarks/LockFairnessTest.cpp:
        * benchmarks/LockSpeedTest.cpp:
        * wtf/CMakeLists.txt:
        * wtf/CPUTime.h:
        * wtf/CurrentTime.cpp:
        (WTF::currentCPUTime): Deleted.
        (WTF::sleep): Deleted.
        * wtf/CurrentTime.h: Removed.
        * wtf/DateMath.cpp:
        * wtf/DebugUtilities.h:
        * wtf/FastMalloc.cpp:
        * wtf/MainThread.cpp:
        * wtf/MonotonicTime.cpp:
        * wtf/ParkingLot.cpp:
        * wtf/Seconds.cpp:
        (WTF::sleep):
        * wtf/Seconds.h:
        * wtf/StackShotProfiler.h:
        * wtf/Stopwatch.h:
        * wtf/ThreadingPthreads.cpp:
        * wtf/ThreadingWin.cpp:
        * wtf/cocoa/CPUTimeCocoa.mm:
        (WTF::CPUTime::forCurrentThread):
        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        * wtf/linux/MemoryPressureHandlerLinux.cpp:
        * wtf/unix/CPUTimeUnix.cpp:
        (WTF::CPUTime::forCurrentThread):
        * wtf/win/CPUTimeWin.cpp:
        (WTF::CPUTime::forCurrentThread):
        * wtf/win/RunLoopWin.cpp:

2018-03-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use __builtin_xxx_overflow for CheckedArithmetic
        https://bugs.webkit.org/show_bug.cgi?id=183319

        Reviewed by Darin Adler.

        GCC and Clang has the builtins for arithmetic operations with overflow flags.
        CheckedArithmetic operations can be done with this builtins. Since the compiler
        can use overflow flags, potentially this is more efficient. CheckedArithmetic
        already has TestWebKitAPI tests and we ensured the tests pass.

        * wtf/CheckedArithmetic.h:

2018-03-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove RunLoop and RunLoop::Timer's interface using double as seconds
        https://bugs.webkit.org/show_bug.cgi?id=183293

        Reviewed by Alex Christensen.

        This patch mainly drops startRepeating(double) and startOneShot(double) interfaces.
        Use startRepeating(Seconds) and startOneShot(Seconds) instead.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor):
        * wtf/RunLoop.h:
        (WTF::RunLoop::TimerBase::startRepeating):
        (WTF::RunLoop::TimerBase::startOneShot):
        (WTF::RunLoop::TimerBase::startInternal):
        * wtf/RunLoopTimer.h:
        * wtf/RunLoopTimerCF.cpp:
        (WTF::RunLoopTimerBase::start):
        * wtf/cf/RunLoopCF.cpp:
        (WTF::RunLoop::runForDuration):
        (WTF::RunLoop::TimerBase::start):
        * wtf/generic/RunLoopGeneric.cpp:
        (WTF::RunLoop::TimerBase::start):
        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::TimerBase::start):
        * wtf/win/MemoryPressureHandlerWin.cpp:
        (WTF::MemoryPressureHandler::install):
        * wtf/win/RunLoopWin.cpp:
        (WTF::RunLoop::TimerBase::start):

2018-03-02  Christopher Reid  <chris.reid@sony.com>

        Build fix after r229174
        https://bugs.webkit.org/show_bug.cgi?id=183301

        Reviewed by Alex Christensen.

        Updating MemoryPressureHandler::holdOff to use Seconds instead of unsigned.

        * wtf/MemoryPressureHandler.cpp:

2018-03-02  Tim Horton  <timothy_horton@apple.com>

        Make it possible to build for iOS without Celestial
        https://bugs.webkit.org/show_bug.cgi?id=183295
        <rdar://problem/38074468>

        Reviewed by Dan Bernstein.

        * wtf/Platform.h:

2018-03-02  Tim Horton  <timothy_horton@apple.com>

        Make it possible to disable WKPDFView
        https://bugs.webkit.org/show_bug.cgi?id=183281
        <rdar://problem/38060815>

        Reviewed by Dan Bates.

        * wtf/FeatureDefines.h:

2018-03-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Annotate more classes with WTF_MAKE_FAST_ALLOCATED
        https://bugs.webkit.org/show_bug.cgi?id=183279

        Reviewed by JF Bastien.

        * wtf/SimpleStats.h:
        * wtf/ThreadGroup.h:

2018-03-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove monotonicallyIncreasingTime
        https://bugs.webkit.org/show_bug.cgi?id=182911

        Reviewed by Michael Catanzaro.

        This patch drops monotonicallyIncreasingTime and monotonicallyIncreasingTimeMS.
        We have MonotonicTime API instead. This offers strongly typed MonotonicTime,
        Seconds etc. This reduces the chance of bugs mixing doubles which represent milliseconds
        and seconds.

        Large part of this patch is mechanical one: replacing monotonicallyIncreasingTime with
        MonotonicTime, using MonotonicTime and Seconds instead of raw doubles.

        But this patch actually finds some bugs (but it is a bit difficult to show it as a test).
        One is mixing media time (CACurrentMediaTime()) and MonotonicTime. Basically they are
        super close because both uses mach_absolute_time(). But they would be slightly different.
        So we should not mix them.

        The second bug is GraphicsLayer::suspendAnimations(double). While CA ports (Apple, AppleWin,
        iOS etc.) use this double as MonotonicTime, GTK and WPE use this double as Seconds (timeOffset).
        This patch fixes it and now the signature becomes GraphicsLayer::suspendAnimations(MonotonicTime).

        In this patch, we still uses bunch of double for Seconds. But fixing them at this patch increases
        the size of this larger and larger. So some of them remains double. This should be fixed in
        subsequent patches.

        * benchmarks/ConditionSpeedTest.cpp:
        * benchmarks/LockSpeedTest.cpp:
        * wtf/CurrentTime.cpp:
        (WTF::MonotonicTime::now):
        (WTF::monotonicallyIncreasingTime): Deleted.
        * wtf/CurrentTime.h:
        (WTF::monotonicallyIncreasingTimeMS): Deleted.
        * wtf/MemoryPressureHandler.h:
        * wtf/MonotonicTime.cpp:
        (WTF::MonotonicTime::now): Deleted.
        * wtf/MonotonicTime.h:
        * wtf/ParkingLot.cpp:
        * wtf/Seconds.h:
        (WTF::Seconds::nan):
        * wtf/Stopwatch.h:
        (WTF::Stopwatch::reset):
        (WTF::Stopwatch::start):
        (WTF::Stopwatch::stop):
        (WTF::Stopwatch::elapsedTime):
        (WTF::Stopwatch::elapsedTimeSince):
        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        (WTF::MemoryPressureHandler::holdOff):
        (WTF::MemoryPressureHandler::respondToMemoryPressure):
        * wtf/linux/MemoryPressureHandlerLinux.cpp:
        (WTF::MemoryPressureHandler::EventFDPoller::EventFDPoller):
        (WTF::MemoryPressureHandler::holdOff):
        (WTF::MemoryPressureHandler::respondToMemoryPressure):
        * wtf/win/MemoryPressureHandlerWin.cpp:
        (WTF::MemoryPressureHandler::holdOff):

2018-03-02  Dan Bernstein  <mitz@apple.com>

        Safari uses WebContent.Development when loading injected bundle embedded in its app bundle
        https://bugs.webkit.org/show_bug.cgi?id=183275

        Reviewed by Tim Horton.

        * wtf/spi/cocoa/SecuritySPI.h: Declared SecTaskGetCodeSignStatus.

2018-02-27  Karlen Simonyan  <szkarlen@gmail.com>

        [Win64] JSCOnly compile error using VS2017 and cmake
        https://bugs.webkit.org/show_bug.cgi?id=183176

        Reviewed by Alex Christensen.

        * wtf/PlatformJSCOnly.cmake:

2018-02-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] User current executable name instead of g_get_prgname() for gst_init
        https://bugs.webkit.org/show_bug.cgi?id=183119

        Reviewed by Philippe Normand.

        Add getCurrentExecutableName() helper function to get the name of the current executable.

        * wtf/glib/GLibUtilities.cpp:
        (getCurrentExecutableName): Get the basename of getCurrentExecutablePath() falling back to g_get_prgname().
        * wtf/glib/GLibUtilities.h:

2018-02-23  John Wilander  <wilander@apple.com>

        Introduce ITP debug logging as an opt-in developer feature
        https://bugs.webkit.org/show_bug.cgi?id=183065
        <rdar://problem/37803761>

        Reviewed by Brent Fulgham.

        * wtf/Assertions.h:
            Introduces RELEASE_LOG_INFO() and RELEASE_LOG_INFO_IF().

2018-02-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        warning: unused variable 'InitialBufferSize' in Assertions.cpp
        https://bugs.webkit.org/show_bug.cgi?id=183076

        Reviewed by Yusuke Suzuki.

        * wtf/Assertions.cpp: Moved the definition of InitialBufferSize to inside #if.

2018-02-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove currentTime() / currentTimeMS()
        https://bugs.webkit.org/show_bug.cgi?id=183052

        Reviewed by Mark Lam.

        This patch removes WTF::currentTime() and WTF::currentTimeMS().
        We have fancy WallTime APIs. It has strong types like WallTime and Seconds,
        and this reduces the chance of bugs mixing doubles which represent milliseconds
        and seconds.

        * wtf/Condition.h:
        * wtf/CurrentTime.cpp:
        (WTF::currentTime):
        (WTF::WallTime::now):
        * wtf/CurrentTime.h:
        (WTF::currentTimeMS): Deleted.
        * wtf/DateMath.h:
        (WTF::jsCurrentTime):
        * wtf/ParkingLot.cpp:
        (WTF::ParkingLot::parkConditionallyImpl):
        * wtf/ThreadingPrimitives.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::ThreadCondition::timedWait):
        * wtf/ThreadingWin.cpp:
        (WTF::ThreadCondition::timedWait):
        (WTF::absoluteTimeToWaitTimeoutInterval):
        * wtf/WallTime.cpp:
        (WTF::WallTime::now): Deleted.
        * wtf/WallTime.h:

2018-02-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove sleep(double) and sleepMS(double) interfaces
        https://bugs.webkit.org/show_bug.cgi?id=183038

        Reviewed by Mark Lam.

        This patch removes sleep(double) and sleepMS(double) interfaces.
        We can just use sleep(Seconds) instead.

        * benchmarks/LockFairnessTest.cpp:
        * benchmarks/LockSpeedTest.cpp:
        * wtf/CurrentTime.cpp:
        (WTF::sleep):
        * wtf/CurrentTime.h:
        (WTF::sleepMS): Deleted.
        * wtf/DebugUtilities.h:
        * wtf/Seconds.cpp:
        (WTF::sleep): Deleted.
        * wtf/Seconds.h:
        * wtf/StackShotProfiler.h:

2018-02-21  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Use cmakeconfig.h rather than config.h and Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=182883

        Reviewed by Per Arne Vollan.

        * wtf/Platform.h:

2018-02-14  Brian Burg  <bburg@apple.com>

        Web Automation: combine session commands to resize and move top-level browsing contexts
        https://bugs.webkit.org/show_bug.cgi?id=182749
        <rdar://problem/37515170>

        Reviewed by Andy Estes.

        * wtf/JSONValues.h: add a getDouble() implementation that returns a std::optional<T>
        rather than using an out-parameter. I'd like to move more code to this style.

2018-02-20  Tim Horton  <timothy_horton@apple.com>

        Introduce HAVE(IOSURFACE_ACCELERATOR)
        https://bugs.webkit.org/show_bug.cgi?id=182955
        <rdar://problem/37699510>

        Reviewed by Sam Weinig.

        * wtf/Platform.h:

2018-02-20  Chris Dumez  <cdumez@apple.com>

        Provisional load may get committed before receiving the decidePolicyForNavigationResponse response
        https://bugs.webkit.org/show_bug.cgi?id=182720
        <rdar://problem/37515204>

        Reviewed by Alex Christensen.

        Add convenience CompletionHandlerCallingScope class which calls its CompletionHandler
        when destroyed, and provides a release() methods to manually call the completionHandler.

        * wtf/CompletionHandler.h:
        (WTF::CompletionHandlerCallingScope::CompletionHandlerCallingScope):
        (WTF::CompletionHandlerCallingScope::~CompletionHandlerCallingScope):
        (WTF::CompletionHandlerCallingScope::CompletionHandler<void):

2018-02-20  Tim Horton  <timothy_horton@apple.com>

        Always inline soft linking functions to work around a clang bug
        https://bugs.webkit.org/show_bug.cgi?id=182985
        <rdar://problem/37587017>

        Reviewed by Dan Bernstein.

        * wtf/cocoa/SoftLinking.h:
        In some cases, clang will emit a weak extern symbol for a re-declared
        symbol that has availability attributes on it. To avoid this, always
        inline to avoid emitting a second symbol.

2018-02-16  Dean Jackson  <dino@apple.com>

        Use OPENGL macros to be more clear about which OpenGL/ES WebGL uses on Cocoa
        https://bugs.webkit.org/show_bug.cgi?id=182894

        Reviewed by Tim Horton.

        If we're on a Cocoa platform, define USE_OPENGL/USE_OPENGL_ES
        depending on what we're actually going to use. In this case,
        they are exclusive, but it doesn't appear that other platforms
        use this approach. Ultimately the idea is to be more concerned
        with the type of OpenGL we're using, rather than the platform.

        * wtf/Platform.h: Define USE_OPENGL(_ES) for PLATFORM(COCOA).

2018-02-16  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out r228306 (custom memcpy/memset) because the bots say that it was not a
        progression.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/BitVector.cpp:
        (WTF::BitVector::setSlow):
        (WTF::BitVector::clearAll):
        (WTF::BitVector::resizeOutOfLine):
        * wtf/BitVector.h:
        (WTF::BitVector::OutOfLineBits::numWords const):
        (WTF::BitVector::wordCount): Deleted.
        * wtf/CMakeLists.txt:
        * wtf/ConcurrentBuffer.h:
        (WTF::ConcurrentBuffer::growExact):
        * wtf/FastBitVector.h:
        (WTF::FastBitVectorWordOwner::operator=):
        (WTF::FastBitVectorWordOwner::clearAll):
        (WTF::FastBitVectorWordOwner::set):
        * wtf/FastCopy.h: Removed.
        * wtf/FastMalloc.cpp:
        (WTF::fastZeroedMalloc):
        (WTF::fastStrDup):
        (WTF::tryFastZeroedMalloc):
        * wtf/FastZeroFill.h: Removed.
        * wtf/OSAllocator.h:
        (WTF::OSAllocator::reallocateCommitted):
        * wtf/StringPrintStream.cpp:
        (WTF::StringPrintStream::increaseSize):
        * wtf/Vector.h:
        * wtf/persistence/PersistentDecoder.cpp:
        (WTF::Persistence::Decoder::decodeFixedLengthData):
        * wtf/persistence/PersistentEncoder.cpp:
        (WTF::Persistence::Encoder::encodeFixedLengthData):
        * wtf/text/CString.cpp:
        (WTF::CString::init):
        (WTF::CString::copyBufferIfNeeded):
        * wtf/text/LineBreakIteratorPoolICU.h:
        (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::allocateBuffer):
        (WTF::StringBuilder::append):
        * wtf/text/StringConcatenate.h:
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::copyCharacters):
        * wtf/text/icu/UTextProvider.cpp:
        (WTF::uTextCloneImpl):
        * wtf/text/icu/UTextProviderLatin1.cpp:
        (WTF::uTextLatin1Clone):
        (WTF::openLatin1UTextProvider):
        * wtf/threads/Signals.cpp:

2018-02-16  Keith Miller  <keith_miller@apple.com>

        Remove unused line from Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=182871

        Reviewed by Mark Lam.

        * wtf/Platform.h:

2018-02-14  Michael Saboff  <msaboff@apple.com>

        REGRESSION(225695) : com.apple.WebKit.WebContent at com.apple.JavaScriptCore: JSC::RegExp::match + 630 :: stack overflow
        https://bugs.webkit.org/show_bug.cgi?id=182705

        Reviewed by Mark Lam.

        Moved the setting of ENABLE_YARR_JIT_ALL_PARENS_EXPRESSIONS to Platform.h since more than just the YARR
        code needs to know if that feature is enabled.

        * wtf/Platform.h:

2018-02-12  Mark Lam  <mark.lam@apple.com>

        Add more support for pointer preparations.
        https://bugs.webkit.org/show_bug.cgi?id=182703
        <rdar://problem/37469451>

        Reviewed by Saam Barati.

        * wtf/PointerPreparations.h:

2018-02-09  Ross Kirsling  <ross.kirsling@sony.com>

        Use REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR on any non-Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=182623

        Reviewed by Alex Christensen.

        * wtf/Platform.h:
        Simplify #if.

2018-02-08  Filip Pizlo  <fpizlo@apple.com>

        Experiment with alternative implementation of memcpy/memset
        https://bugs.webkit.org/show_bug.cgi?id=182563

        Reviewed by Michael Saboff and Mark Lam.
        
        Adds a faster x86_64-specific implementation of memcpy and memset. These versions go by
        different names than memcpy/memset and have a different API:
        
        WTF::fastCopy<T>(T* dst, T* src, size_t N): copies N values of type T from src to dst.
        WTF::fastZeroFill(T* dst, size_T N): writes N * sizeof(T) zeroes to dst.
        
        There are also *Bytes variants that take void* for dst and src and size_t numBytes. Those are
        most appropriate in places where the code is already computing bytes.
        
        These will just call memcpy/memset on platforms where the optimized versions are not supported.
        
        These new functions are not known to the compiler to be memcpy/memset. This has the effect that
        the compiler will not try to replace them with anything else. This could be good or bad:
        
        - It's *good* if the size is *not known* at compile time. In that case, by my benchmarks, these
          versions are faster than either the memcpy/memset call or whatever else the compiler could
          emit. This is because of a combination of inlining and the algorithm itself (see below).
        
        - It's *bad* if the size is *known* at compile time. In that case, the compiler could
          potentially emit a fully unrolled memcpy/memset. That might not happen if the size is large
          (even if it's known), but in this patch I avoid replacing any memcpy/memset calls when the
          size is a constant. In particular, this totally avoids the call overhead -- if the size is
          small, then the compiler will emit a nice inlined copy or set. If the size is large, then the
          most optimal thing to do is emit the shortest piece of code possible, and that's a call to
          memcpy/memset.
        
        It's unfortunate that you have to choose between them on your own. One way to avoid that might
        have been to override the memcpy/memset symbols, so that the compiler can still do its
        reasoning. But that's not quite right, since then we would lose inlining in the unknonw-size
        case. Also, it's possible that for some unknown-size cases, the compiler could choose to emit
        something on its own because it might think that some property of aliasing or alignment could
        help it. I think it's a bit better to use our own copy/set implementations even in those cases.
        Another way that I tried avoiding this is to detect inside fastCopy/fastZeroFill if the size is
        constant. But there is no good way to do that in C++. There is a builtin for doing that inside a
        macro, but that feels janky, so I didn't want to do it in this patch.
        
        The reason why these new fastCopy/fastZeroFill functions are faster is that:
        
        - They can be inlined. There is no function call. Only a few registers get clobbered. So, the
          impact on the quality of the code surrounding the memcpy/memset is smaller.
        
        - They use type information to select the implementation. For sizes that are multiples of 2, 4,
          or 8, the resulting code performs dramatically better on small arrays than memcpy because it
          uses fewer cycles. The difference is greatest for 2 and 4 byte types, since memcpy usually
          handles small arrays by tiering from a 8-byte word copy loop to a byte copy loop. So, for 2
          or 4 byte arrays, we use an algorithm that tiers from 8-byte word down to a 2-byte or 4-byte
          (depending on type) copy loop. So, for example, when copying a 16-bit string that has 1, 2, or
          3 characters, this means doing 1, 2, or 3 word copies rather than 2, 4, or 6 byte copies. For
          8-byte types, the resulting savings are mainly that there is no check to see if a tier-down to
          the byte-copy loop is needed -- so really that means reducing code size. 1-byte types don't
          get this inherent advantage over memcpy/memset, but they still benefit from all of the other
          advantages of these functions. Of course, this advantage isn't inherent to our approach. The
          compiler could also notice that the arguments to memcpy/memset have some alignment properties.
          It could do it even more generally than we do - for example a copy over bytes where the size
          is a multiple of 4 can use the 4-byte word algorithm. But based on my tests, the compiler does
          not do this (even though it does other things, like turn a memset call with a zero value
          argument into a bzero call).
        
        - They use a very nicely written word copy/set loop for small arrays. I spent a lot of time
          getting the assembly just right. When we use memcpy/memset, sometimes we would optimize the
          call by having a fast path word copy loop for small sizes. That's not necessary with this
          implementation, since the assembly copy loop gets inlined.
        
        - They use `rep movs` or `rep stos` for copies of 200 bytes or more. This decision benchmarks
          poorly on every synthetic memcpy/memset benchmark I have built, and so unsurprisingly, it's
          not what system memcpy/memset does. Most system memcpy/memset implementations end up doing
          some SSE for medium-sized copies,. However, I previously found that this decision is bad for
          one of the memset calls in GC (see clearArray() and friends in ArrayConventions.h|cpp) - I was
          able to make the overhead of that call virtually disappear by doing `rep stos` more
          aggressively. The theory behind this change is that it's not just the GC that prefers smaller
          `rep` threshold and no SSE. I am betting that `rep`ing more is better when the heap gets
          chaotic and the data being copied is used in interesting ways -- hence, synthetic
          memcpy/memset benchmarks think it's bad (they don't do enough chaotic memory accesses) while
          it's good for real-world uses. Also, when I previously worked on JVMs, I had found that the
          best memcpy/memset heuristics when dealing with GC'd objects in a crazy heap were different
          than any memcpy/memset in any system library.
        
        This appears to be a 0.9% speed-up on PLT. I'm not sure if it's more because of the inlining or
        the `rep`. I think it's both. I'll leave figuring out the exact tuning for future patches.

        * wtf/BitVector.cpp:
        (WTF::BitVector::setSlow):
        (WTF::BitVector::clearAll):
        (WTF::BitVector::resizeOutOfLine):
        * wtf/BitVector.h:
        (WTF::BitVector::wordCount):
        (WTF::BitVector::OutOfLineBits::numWords const):
        * wtf/ConcurrentBuffer.h:
        (WTF::ConcurrentBuffer::growExact):
        * wtf/FastBitVector.h:
        (WTF::FastBitVectorWordOwner::operator=):
        (WTF::FastBitVectorWordOwner::clearAll):
        (WTF::FastBitVectorWordOwner::set):
        * wtf/FastCopy.h: Added.
        (WTF::fastCopy):
        (WTF::fastCopyBytes):
        * wtf/FastMalloc.cpp:
        (WTF::fastZeroedMalloc):
        (WTF::fastStrDup):
        (WTF::tryFastZeroedMalloc):
        * wtf/FastZeroFill.h: Added.
        (WTF::fastZeroFill):
        (WTF::fastZeroFillBytes):
        * wtf/MD5.cpp:
        * wtf/OSAllocator.h:
        (WTF::OSAllocator::reallocateCommitted):
        * wtf/StringPrintStream.cpp:
        (WTF::StringPrintStream::increaseSize):
        * wtf/Vector.h:
        * wtf/persistence/PersistentDecoder.cpp:
        (WTF::Persistence::Decoder::decodeFixedLengthData):
        * wtf/persistence/PersistentEncoder.cpp:
        (WTF::Persistence::Encoder::encodeFixedLengthData):
        * wtf/text/CString.cpp:
        (WTF::CString::init):
        (WTF::CString::copyBufferIfNeeded):
        * wtf/text/LineBreakIteratorPoolICU.h:
        (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::allocateBuffer):
        (WTF::StringBuilder::append):
        * wtf/text/StringConcatenate.h:
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::copyCharacters):
        * wtf/text/icu/UTextProvider.cpp:
        (WTF::uTextCloneImpl):
        * wtf/text/icu/UTextProviderLatin1.cpp:
        (WTF::uTextLatin1Clone):
        (WTF::openLatin1UTextProvider):
        * wtf/threads/Signals.cpp:

2018-02-06  Darin Adler  <darin@apple.com>

        Event improvements
        https://bugs.webkit.org/show_bug.cgi?id=179591

        Reviewed by Chris Dumez.

        * wtf/text/OrdinalNumber.h: Added som missing const.
        * wtf/text/TextPosition.h: Ditto.

2018-02-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] fast/events/message-channel-gc-4.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=182104

        Reviewed by Carlos Garcia Campos.

        Revert r228001 because RunLoop::current isn't called in GC thread
        anymore since r228152.

        * wtf/RunLoop.cpp:
        (WTF::RunLoop::current): Removed a template argument
        CanBeGCThread::True of ThreadSpecific.

2018-02-05  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Fix build with ICU configured without collation support
        https://bugs.webkit.org/show_bug.cgi?id=182498

        Reviewed by Alex Christensen.

        WebKit has CollatorDefault.cpp providing necessary stubs when
        UCONFIG_NO_COLLATION is defined, however it is not included in cmake
        file list.

        * wtf/CMakeLists.txt:

2018-02-05  Alicia Boya García  <aboya@igalia.com>

        Fix bug in MediaTime comparison for negative values with different scale.
        https://bugs.webkit.org/show_bug.cgi?id=182433

        Reviewed by Xabier Rodriguez-Calvar.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::compare const):

2018-02-02  Mark Lam  <mark.lam@apple.com>

        More ARM64_32 fixes.
        https://bugs.webkit.org/show_bug.cgi?id=182441
        <rdar://problem/37162310>

        Reviewed by Dan Bernstein.

        My previous speculative ARM64_32 build fix in copyLCharsFromUCharSource() was wrong.
        I've now fixed it to choose the default implementation case instead of the ARM64
        case if the target is ARM64_32.

        * wtf/text/ASCIIFastPath.h:
        (WTF::copyLCharsFromUCharSource):

2018-02-02  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed build fix for JSCOnly on macOS after r227845.
        https://bugs.webkit.org/show_bug.cgi?id=182274

        Reverted part of r227845 that moved CommonCryptoSPI.h
        handling into PlatformMac, because it is needed for all
        ports which can be built on macOS.

        * wtf/CMakeLists.txt:
        * wtf/PlatformMac.cmake:

2018-02-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] fast/events/message-channel-gc-4.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=182104

        Reviewed by Carlos Garcia Campos.

        RELEASE_ASSERT of ThreadSpecific::set fails because
        RunLoop::current is called even in GC thread since r227275.

        * wtf/RunLoop.cpp:
        (WTF::RunLoop::current):
        Let the second template argument of ThreadSpecific CanBeGCThread::True.

2018-02-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Make RunLoop::TimerBase robust to its own deletion inside its source callback
        https://bugs.webkit.org/show_bug.cgi?id=182271

        Reviewed by Carlos Garcia Campos.

        RunLoopTimer::fired executes the user's callback, which could delete the RunLoopTimer
        itself. But the source callback is not prepared to handle this case. We can detect it
        easily, because TimerBase's destructor will call g_source_destroy(), which confusingly
        removes the GSource from its GMainContext without actually destroying the GSource. Then we
        can check if the GSource is still attached using g_source_is_destroyed().

        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::TimerBase::TimerBase):

2018-01-31  Saam Barati  <sbarati@apple.com>

        Replace tryLargeMemalignVirtual with tryLargeZeroedMemalignVirtual and use it to allocate large zeroed memory in Wasm
        https://bugs.webkit.org/show_bug.cgi?id=182064
        <rdar://problem/36840132>

        Reviewed by Geoffrey Garen.

        * wtf/Gigacage.cpp:
        (Gigacage::tryAllocateZeroedVirtualPages):
        (Gigacage::freeVirtualPages):
        (Gigacage::tryAllocateVirtualPages): Deleted.
        * wtf/Gigacage.h:
        * wtf/OSAllocator.h:

2018-01-31  Mark Lam  <mark.lam@apple.com>

        Fix some ARM64_32 build failures.
        https://bugs.webkit.org/show_bug.cgi?id=182356
        <rdar://problem/37057690>

        Reviewed by Michael Saboff.

        * wtf/MathExtras.h:
        (WTF::dynamicPoison):
        * wtf/text/ASCIIFastPath.h:
        (WTF::copyLCharsFromUCharSource):

2018-01-30  Mark Lam  <mark.lam@apple.com>

        Apply poisoning to TypedArray vector pointers.
        https://bugs.webkit.org/show_bug.cgi?id=182155
        <rdar://problem/36286266>

        Reviewed by JF Bastien.

        1. Added the ability to poison a CagedPtr.

        2. Prevent CagedPtr from being implicitly instantiated, and add operator= methods
           instead.  This is because implicitly instantiated CagedPtrs with a poisoned
           trait may silently use a wrong poison value.

        * wtf/CagedPtr.h:
        (WTF::CagedPtr::CagedPtr):
        (WTF::CagedPtr::get const):
        (WTF::CagedPtr::operator=):

2018-01-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Warning fix.
        https://bugs.webkit.org/show_bug.cgi?id=177007

        Reviewed by Yusuke Suzuki.

        A 32 bit integer should not be casted to a pointer directly in 64
        bit Windows. It should be casted to a uintptr_t beforehand.

        Rules for Using Pointers (Windows)
        https://msdn.microsoft.com/library/windows/desktop/aa384242

        * wtf/ThreadingWin.cpp (InvalidThread): Casted 0xbbadbeef to uintptr_t.

2018-01-30  Don Olmstead  <don.olmstead@sony.com>

        Unreviewed build fix for JSCOnly after r227845.
        https://bugs.webkit.org/show_bug.cgi?id=182274

        * wtf/PlatformJSCOnly.cmake:

2018-01-30  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make WTF headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182274

        Reviewed by Alex Christensen.

        * wtf/CMakeLists.txt:
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformWPE.cmake:
        * wtf/PlatformWin.cmake:

2018-01-30  Mark Lam  <mark.lam@apple.com>

        Move ENABLE_POISON to Platform.h.
        https://bugs.webkit.org/show_bug.cgi?id=182298
        <rdar://problem/37032686>

        Reviewed by Michael Saboff and JF Bastien.

        ENABLE_POISON belongs in Platform.h to ensure that all places that depend on
        ENABLE(POISON) will see it properly defined.

        * wtf/Platform.h:
        * wtf/Poisoned.h:

2018-01-26  Mark Lam  <mark.lam@apple.com>

        Add infrastructure for pointer preparation.
        https://bugs.webkit.org/show_bug.cgi?id=182191
        <rdar://problem/36889194>

        Reviewed by JF Bastien.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/PointerPreparations.h: Added.

2018-01-26  Chris Nardi  <cnardi@chromium.org>

        Addressing post-review comments after r226614
        https://bugs.webkit.org/show_bug.cgi?id=182151

        Reviewed by Myles C. Maxfield.

        * wtf/text/StringImpl.h:
        (WTF::isSpaceOrNewline):
        * wtf/text/TextBreakIterator.cpp:
        (WTF::numCodeUnitsInGraphemeClusters):
        * wtf/text/TextBreakIterator.h:

2018-01-26  Filip Pizlo  <fpizlo@apple.com>

        Fix style - need to use C comments.

        * wtf/Platform.h:

2018-01-26  Filip Pizlo  <fpizlo@apple.com>

        Disable TLS-based TLCs
        https://bugs.webkit.org/show_bug.cgi?id=182175

        Reviewed by Saam Barati.

        Add a flag for TLS-based TLCs and set it to 0. We can re-enable this feature when we need to use TLCs for
        actual thread-local allocation and when we fix the fact that WebCore context switches JSC VMs without telling
        us.

        * wtf/Platform.h:

2018-01-25  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix windows build.

        * wtf/MathExtras.h:
        (WTF::opaque):

2018-01-24  Filip Pizlo  <fpizlo@apple.com>

        DirectArguments should protect itself using dynamic poisoning and precise index masking
        https://bugs.webkit.org/show_bug.cgi?id=182086

        Reviewed by Saam Barati.
        
        Add helpers for:
        
        Dynamic poisoning: this means arranging to have the pointer you will dereference become an
        invalid pointer if the type check you were relying on would have failed.
        
        Precise index masking: a variant of index masking that does not depend on distancing. I figured
        I'd just try this first for DirectArguments, since I didn't think that arguments[i] was ever
        hot enough to warrant anything better. Turns out that in all of the benchmarks that care about
        arguments performance, we optimize things to the point that the index masking isn't on a hot
        path anymore. Turns out, it's neutral!

        * wtf/MathExtras.h:
        (WTF::preciseIndexMask):
        (WTF::dynamicPoison):

2018-01-25  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r227631; make USE_VIDEOTOOLBOX universally enabled on iOS.

        * wtf/Platform.h:

2018-01-25  Jer Noble  <jer.noble@apple.com>

        Move ImageDecoderAVFObjC from using AVSampleBufferGenerator to AVAssetReaderOutput for parsing
        https://bugs.webkit.org/show_bug.cgi?id=182091

        Reviewed by Eric Carlson.

        * wtf/Platform.h:

2018-01-25  Mark Lam  <mark.lam@apple.com>

        Rename the Poisoned::isPoisoned constant to Poisoned::isPoisonedType.
        https://bugs.webkit.org/show_bug.cgi?id=182143
        <rdar://problem/36880970>

        Reviewed by JF Bastien.

        This is so that it doesn't conflict with the isPoisoned() debugging methods that
        are normally not built.  Also renamed PoisonedUniquePtr::isPoisonedUniquePtr to
        PoisonedUniquePtr::isPoisonedUniquePtrType to be consistent.

        * wtf/Poisoned.h:
        * wtf/PoisonedUniquePtr.h:

2018-01-25  Filip Pizlo  <fpizlo@apple.com>

        JSC GC should support TLCs (thread local caches)
        https://bugs.webkit.org/show_bug.cgi?id=181559

        Reviewed by Mark Lam and Saam Barati.

        * wtf/Bitmap.h: Just fixing a compile error.

2018-01-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r227592.
        https://bugs.webkit.org/show_bug.cgi?id=182110

        it made ARM64 (Linux and iOS) crash (Requested by pizlo-mbp on
        #webkit).

        Reverted changeset:

        "JSC GC should support TLCs (thread local caches)"
        https://bugs.webkit.org/show_bug.cgi?id=181559
        https://trac.webkit.org/changeset/227592

2018-01-20  Filip Pizlo  <fpizlo@apple.com>

        JSC GC should support TLCs (thread local caches)
        https://bugs.webkit.org/show_bug.cgi?id=181559

        Reviewed by Mark Lam and Saam Barati.

        * wtf/Bitmap.h: Just fixing a compile error.

2018-01-23  Mark Lam  <mark.lam@apple.com>

        Update Poisoned pointers to take a Poison class instead of a uintptr_t&.
        https://bugs.webkit.org/show_bug.cgi?id=182017
        <rdar://problem/36795513>

        Reviewed by Filip Pizlo and JF Bastien.

        This paves the way for custom poison values which we'll need for use in
        TypedArrays later.

        * wtf/Bag.h:
        * wtf/DumbPtrTraits.h:
        (WTF::DumbPtrTraits::poison): Deleted.
        * wtf/DumbValueTraits.h:
        (WTF::DumbValueTraits::poison): Deleted.
        * wtf/Poisoned.h:
        (WTF::Poison::key):
        (WTF::Poisoned::swap):
        (WTF::Poisoned::poison const):
        (WTF::Poisoned::unpoison const):
        (WTF::Poisoned::poison):
        (WTF::Poisoned::unpoison):
        (WTF::PoisonedPtrTraits::swap):
        (WTF::PoisonedValueTraits::swap):
        (WTF::PoisonedPtrTraits::poison): Deleted.
        (WTF::PoisonedValueTraits::poison): Deleted.
        * wtf/PoisonedUniquePtr.h:
        * wtf/Ref.h:
        * wtf/RefCountedArray.h:
        * wtf/RefPtr.h:
        * wtf/WTFAssertions.cpp:

2018-01-23  Alex Christensen  <achristensen@webkit.org>

        Remove pre-Sierra-OS-specific code in WTF and JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=182028

        Reviewed by Keith Miller.

        * wtf/Platform.h:
        * wtf/mac/AppKitCompatibilityDeclarations.h:
        * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
        (WTF::MainThreadFunctionTracker::singleton): Deleted.
        (WTF::MainThreadFunctionTracker::callOnMainThread): Deleted.
        (WTF::MainThreadFunctionTracker::cancelCallOnMainThread): Deleted.
        (WTF::MainThreadFunctionTracker::addFunction): Deleted.
        (WTF::MainThreadFunctionTracker::removeIdentifier): Deleted.
        (WTF::MainThreadFunctionTracker::removeFunctions): Deleted.
        (WTF::callOnMainThread): Deleted.
        (WTF::cancelCallOnMainThread): Deleted.
        * wtf/spi/cocoa/SecuritySPI.h:
        * wtf/spi/darwin/dyldSPI.h:
        * wtf/text/icu/TextBreakIteratorICU.h:
        (WTF::TextBreakIteratorICU::TextBreakIteratorICU):
        (WTF::caretRules): Deleted.

2018-01-23  Filip Pizlo  <fpizlo@apple.com>

        JSC should use a speculation fence on VM entry/exit
        https://bugs.webkit.org/show_bug.cgi?id=181991

        Reviewed by JF Bastien and Mark Lam.
        
        Implement speculationFence as lfence on x86 and isb on ARM64. I'm not sure if isb is
        appropriate for all ARM64's.

        * wtf/Atomics.h:
        (WTF::speculationFence):
        (WTF::x86_lfence):

2018-01-22  Alex Christensen  <achristensen@webkit.org>

        Begin removing QTKit code
        https://bugs.webkit.org/show_bug.cgi?id=181951

        Reviewed by Jer Noble.

        * wtf/Platform.h:

2018-01-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a new feature flag for EXTRA_ZOOM_MODE and reintroduce AdditionalFeatureDefines.h
        https://bugs.webkit.org/show_bug.cgi?id=181918

        Reviewed by Tim Horton.

        Include AdditionalFeatureDefines.h, if possible. This allows WebKitAdditions to override
        the value of certain feature flags in the OpenSource WebKit repository.

        * wtf/Platform.h:

2018-01-19  Alex Christensen  <achristensen@webkit.org>

        Fix jsc-only build
        https://bugs.webkit.org/show_bug.cgi?id=181874

        Reviewed by JF Bastien.

        This makes "build-webkit --jsc-only" work on Mac!

        * wtf/PlatformJSCOnly.cmake:

2018-01-19  Keith Miller  <keith_miller@apple.com>

        HaveInternalSDK includes should be "#include?"
        https://bugs.webkit.org/show_bug.cgi?id=179670

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-01-19  Alexey Proskuryakov  <ap@apple.com>

        Update XPCSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=181827
        rdar://problem/36393031

        Reviewed by Daniel Bates.

        * wtf/spi/darwin/XPCSPI.h:

2018-01-18  Chris Dumez  <cdumez@apple.com>

        We should be able to terminate service workers that are unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=181563
        <rdar://problem/35280031>

        Reviewed by Alex Christensen.

        * wtf/ObjectIdentifier.h:
        (WTF::ObjectIdentifier::loggingString const):
        Allow using loggingString() from RELEASE_LOG().

2018-01-18  Dan Bernstein  <mitz@apple.com>

        [Xcode] Streamline and future-proof target-macOS-version-dependent build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=181803

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Updated.
        * Configurations/DebugRelease.xcconfig: Updated.

2018-01-17  Daniel Bates  <dabates@apple.com>

        REGRESSION (r222795): Cardiogram never signs in
        https://bugs.webkit.org/show_bug.cgi?id=181693
        <rdar://problem/36286293>

        Reviewed by Ryosuke Niwa.

        Add macro define for future iOS.

        * wtf/spi/darwin/dyldSPI.h:

2018-01-17  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile error: 'wtf/text/icu/TextBreakIteratorICU.h' not found.
        https://bugs.webkit.org/show_bug.cgi?id=181744
        <rdar://problem/36582562>

        Reviewed by Alex Christensen.

        Add WTF folders to forwarding headers directories.

        * wtf/PlatformWin.cmake:

2018-01-16  Per Arne Vollan  <pvollan@apple.com>

        [Win] JSC compile error in runtime/DateConversion.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=181690
        <rdar://problem/36480409>
 
        Reviewed by Brent Fulgham.

        Add 'text/win' folder to list of forwarding headers directories.
 
        * wtf/PlatformWin.cmake:

2018-01-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        Improve use of ExportMacros
        https://bugs.webkit.org/show_bug.cgi?id=181652

        Reviewed by Konstantin Tokarev.

        * wtf/ExportMacros.h: Simplify the #defines in this file.
        * wtf/Platform.h: Remove unneeded define. Remove comment that expects all ports to
          eventually enable the export macros. WPE will never want these. We don't currently want
          them for GTK either, though how we link GTK has been in flux recently.

2018-01-15  JF Bastien  <jfbastien@apple.com>

        Remove makePoisonedUnique
        https://bugs.webkit.org/show_bug.cgi?id=181630
        <rdar://problem/36498623>

        Reviewed by Mark Lam.

        I added a conversion from std::unique_ptr, so we can just use
        std::make_unique and it'll auto-poison when converted.

        * wtf/PoisonedUniquePtr.h:
        (WTF::makePoisonedUnique): Deleted.

2018-01-13  Mark Lam  <mark.lam@apple.com>

        Replace all use of ConstExprPoisoned with Poisoned.
        https://bugs.webkit.org/show_bug.cgi?id=181542
        <rdar://problem/36442138>

        Reviewed by JF Bastien.

        1. Removed ConstExprPoisoned and its artifacts.

        2. Consolidated Poisoned into PoisonedImpl.  PoisonedImpl is not more.

        3. Changed all clients of ConstExprPoisoned to use Poisoned instead.

        4. Worked around the GCC and Clang compiler bug that confuses an intptr_t&
           template arg with intptr_t.
           See use of std::enable_if_t<Other::isPoisoned> in Poisoned.h.

        5. Removed ENABLE(MIXED_POISON) since we now have a workaround (3) that makes it
           possible to use the mixed poison code.

        6. Also fixed broken implementation of comparison operators in Poisoned.

        * wtf/Bag.h:
        * wtf/DumbPtrTraits.h:
        (WTF::DumbPtrTraits::poison):
        * wtf/DumbValueTraits.h:
        (WTF::DumbValueTraits::poison):
        * wtf/Poisoned.h:
        (WTF::Poisoned::Poisoned):
        (WTF::Poisoned::operator== const):
        (WTF::Poisoned::operator!= const):
        (WTF::Poisoned::operator< const):
        (WTF::Poisoned::operator<= const):
        (WTF::Poisoned::operator> const):
        (WTF::Poisoned::operator>= const):
        (WTF::Poisoned::operator=):
        (WTF::Poisoned::swap):
        (WTF::swap):
        (WTF::PoisonedPtrTraits::poison):
        (WTF::PoisonedPtrTraits::swap):
        (WTF::PoisonedValueTraits::poison):
        (WTF::PoisonedValueTraits::swap):
        (WTF::PoisonedImpl::PoisonedImpl): Deleted.
        (WTF::PoisonedImpl::assertIsPoisoned const): Deleted.
        (WTF::PoisonedImpl::assertIsNotPoisoned const): Deleted.
        (WTF::PoisonedImpl::unpoisoned const): Deleted.
        (WTF::PoisonedImpl::clear): Deleted.
        (WTF::PoisonedImpl::operator* const): Deleted.
        (WTF::PoisonedImpl::operator-> const): Deleted.
        (WTF::PoisonedImpl::bits const): Deleted.
        (WTF::PoisonedImpl::operator! const): Deleted.
        (WTF::PoisonedImpl::operator bool const): Deleted.
        (WTF::PoisonedImpl::operator== const): Deleted.
        (WTF::PoisonedImpl::operator!= const): Deleted.
        (WTF::PoisonedImpl::operator< const): Deleted.
        (WTF::PoisonedImpl::operator<= const): Deleted.
        (WTF::PoisonedImpl::operator> const): Deleted.
        (WTF::PoisonedImpl::operator>= const): Deleted.
        (WTF::PoisonedImpl::operator=): Deleted.
        (WTF::PoisonedImpl::swap): Deleted.
        (WTF::PoisonedImpl::exchange): Deleted.
        (WTF::PoisonedImpl::poison): Deleted.
        (WTF::PoisonedImpl::unpoison): Deleted.
        (WTF::constExprPoisonRandom): Deleted.
        (WTF::makeConstExprPoison): Deleted.
        (WTF::ConstExprPoisonedPtrTraits::exchange): Deleted.
        (WTF::ConstExprPoisonedPtrTraits::swap): Deleted.
        (WTF::ConstExprPoisonedPtrTraits::unwrap): Deleted.
        (WTF::ConstExprPoisonedValueTraits::exchange): Deleted.
        (WTF::ConstExprPoisonedValueTraits::swap): Deleted.
        (WTF::ConstExprPoisonedValueTraits::unwrap): Deleted.
        * wtf/PoisonedUniquePtr.h:
        (WTF::PoisonedUniquePtr::PoisonedUniquePtr):
        (WTF::PoisonedUniquePtr::operator=):
        * wtf/Ref.h:
        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::RefCountedArray):
        * wtf/RefPtr.h:
        * wtf/WTFAssertions.cpp:

2018-01-12  JF Bastien  <jfbastien@apple.com>

        PoisonedWriteBarrier
        https://bugs.webkit.org/show_bug.cgi?id=181599
        <rdar://problem/36474351>

        Reviewed by Mark Lam.

        Supporting changes needed to allow poisoning of WriteBarrier
        objects.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/DumbPtrTraits.h:
        * wtf/DumbValueTraits.h: Copied from Source/WTF/wtf/DumbPtrTraits.h.
        (WTF::DumbValueTraits::exchange):
        (WTF::DumbValueTraits::swap):
        (WTF::DumbValueTraits::unwrap):
        * wtf/Forward.h:
        * wtf/Poisoned.h:
        (WTF::ConstExprPoisonedValueTraits::exchange):
        (WTF::ConstExprPoisonedValueTraits::swap):
        (WTF::ConstExprPoisonedValueTraits::unwrap):

2018-01-11  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        Remove noexcept from definition of std::tie()
        https://bugs.webkit.org/show_bug.cgi?id=181577

        Reviewed by Yusuke Suzuki.

        * wtf/StdLibExtras.h:
        (WTF::tie):

2018-01-11  Filip Pizlo  <fpizlo@apple.com>

        Reserve a fast TLS key for GC TLC
        https://bugs.webkit.org/show_bug.cgi?id=181539

        Reviewed by Alexey Proskuryakov.
        
        Who knew that thread-local caches would be a mitigation for timing attacks. Here's how it
        works: if we have TLCs then we can "context switch" them when we "context switch" origins. 
        This allows us to put some minimal distance between objects from different origins, which
        gives us the ability to allow small overflows when doing certain bounds checks without
        creating a useful Spectre information leak.
        
        So I think that means we have to implement thread-local caches (also known as thread-local
        allocation buffers, but I prefer the TLC terminology).

        * wtf/FastTLS.h:

2018-01-04  Filip Pizlo  <fpizlo@apple.com>

        CodeBlocks should be in IsoSubspaces
        https://bugs.webkit.org/show_bug.cgi?id=180884

        Reviewed by Saam Barati.
        
        Deque<>::contains() is helpful for a debug ASSERT.

        * wtf/Deque.h:
        (WTF::inlineCapacity>::contains):

2018-01-11  JF Bastien  <jfbastien@apple.com>

        NFC reorder headers
        https://bugs.webkit.org/show_bug.cgi?id=181521

        Reviewed by Darin Adler.

        Follow-up on r226752. I misunderstood the header include order
        style. No functional change.

        * wtf/Poisoned.h:
        * wtf/PoisonedUniquePtr.h:

2018-01-10  JF Bastien  <jfbastien@apple.com>

        Poison small JSObject derivatives which only contain pointers
        https://bugs.webkit.org/show_bug.cgi?id=181483
        <rdar://problem/36407127>

        Reviewed by Mark Lam.

        The associated JSC poisoning change requires some template
        "improvements" to our poisoning machinery. Worth noting is that
        I'm making PoisonedUniquePtr move-assignable and
        move-constructible from unique_ptr, which makes it a better
        drop-in replacement because we don't need to use
        makePoisonedUniquePtr. This means function-locals can be
        unique_ptr and get the nice RAII pattern, and once the function is
        done you can just move to the class' PoisonedUniquePtr without
        worrying.

        * wtf/Poisoned.h:
        (WTF::PoisonedImpl::PoisonedImpl):
        * wtf/PoisonedUniquePtr.h:
        (WTF::PoisonedUniquePtr::PoisonedUniquePtr):
        (WTF::PoisonedUniquePtr::operator=):

2018-01-10  Don Olmstead  <don.olmstead@sony.com>

        Add nullptr_t specialization of poison
        https://bugs.webkit.org/show_bug.cgi?id=181469

        Reviewed by JF Bastien.

        * wtf/Poisoned.h:
        (WTF::PoisonedImpl::poison):

2018-01-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r226667 and r226673.
        https://bugs.webkit.org/show_bug.cgi?id=181488

        This caused a flaky crash. (Requested by mlewis13 on #webkit).

        Reverted changesets:

        "CodeBlocks should be in IsoSubspaces"
        https://bugs.webkit.org/show_bug.cgi?id=180884
        https://trac.webkit.org/changeset/226667

        "REGRESSION (r226667): CodeBlocks should be in IsoSubspaces"
        https://bugs.webkit.org/show_bug.cgi?id=180884
        https://trac.webkit.org/changeset/226673

2018-01-04  Filip Pizlo  <fpizlo@apple.com>

        CodeBlocks should be in IsoSubspaces
        https://bugs.webkit.org/show_bug.cgi?id=180884

        Reviewed by Saam Barati.
        
        Deque<>::contains() is helpful for a debug ASSERT.

        * wtf/Deque.h:
        (WTF::inlineCapacity>::contains):

2018-01-08  Don Olmstead  <don.olmstead@sony.com>

        Add WTF_EXPORTs to UniStdExtras
        https://bugs.webkit.org/show_bug.cgi?id=181415

        Reviewed by Alex Christensen.

        * wtf/UniStdExtras.h:

2018-01-07  Mark Lam  <mark.lam@apple.com>

        Apply poisoning to more pointers in JSC.
        https://bugs.webkit.org/show_bug.cgi?id=181096
        <rdar://problem/36182970>

        Reviewed by JF Bastien.

        Added support for PoisonedBag and PoisonedRefCountedArray.

        * wtf/Bag.h:
        (WTF::Private::BagNode::BagNode):
        (WTF::Bag::Bag):
        (WTF::Bag::operator=):
        (WTF::Bag::clear):
        (WTF::Bag::add):
        (WTF::Bag::begin):
        (WTF::Bag::unwrappedHead):
        (WTF::Bag::Node::Node): Deleted.
        * wtf/BagToHashMap.h:
        (WTF::toHashMap):
        * wtf/Poisoned.h:
        (WTF::constExprPoisonRandom):
        (WTF::makeConstExprPoison):
        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::RefCountedArray):
        (WTF::RefCountedArray::clone const):
        (WTF::RefCountedArray::operator=):
        (WTF::RefCountedArray::~RefCountedArray):
        (WTF::RefCountedArray::refCount const):
        (WTF::RefCountedArray::size const):
        (WTF::RefCountedArray::data):
        (WTF::RefCountedArray::begin):
        (WTF::RefCountedArray::end):
        (WTF::RefCountedArray::data const):
        (WTF::RefCountedArray::begin const):
        (WTF::RefCountedArray::operator== const):
        (WTF::RefCountedArray::Header::fromPayload):
        * wtf/WTFAssertions.cpp:

2018-01-05  JF Bastien  <jfbastien@apple.com>

        WebAssembly: poison JS object's secrets
        https://bugs.webkit.org/show_bug.cgi?id=181339
        <rdar://problem/36325001>

        Reviewed by Mark Lam.

        swapping a poisoned pointer with a non-poisoned one (as is done in
        JSWebAssembyMemory::adopt) was missing.

        * wtf/Poisoned.h:
        (WTF::PoisonedImpl::swap):
        (WTF::ConstExprPoisonedPtrTraits::swap):

2018-01-05  David Kilzer  <ddkilzer@apple.com>

        Re-enable -Wcast-qual in WebCore for Apple ports
        <https://webkit.org/b/177895>
        <rdar://problem/34960830>

        Reviewed by Joseph Pecoraro.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr::fromStorageTypeHelper const): Add const_cast<>
        operator here since some CFTypes are not defined as const
        pointers, which triggers a warning in C++ source with
        -Wcast-qual when casting from CFTypeRef back to the original
        type.  Note that we use const_cast<CF_BRIDGED_TYPE(id) void*>()
        here (and in TypeCastsCF.h below) since this is what CFTypeRef
        is defined as in CFBase.h, but without the 'const' modifier.
        (WTF::RetainPtr::fromStorageType const): Ditto.

        * wtf/cf/TypeCastsCF.h: Use #pragma once.
        (WTF_DECLARE_CF_TYPE_TRAIT): Rename from DECLARE_CF_TYPE_TRAIT.
        Don't #undef it so that it can be used in other source files.
        (WTF_DECLARE_CF_MUTABLE_TYPE_TRAIT): Add new macro that is used
        for declaring CFMutable types.  The CFTypeID for CF_Foo_ and
        CFMutable_Foo_ are the same, so we have to use a different macro
        to declare type traits for those types.
        (WTF::dynamic_cf_cast): Add assertion to catch issues in Debug
        builds.
        (WTF::checked_cf_cast): Inline code from WTF::dynamic_cf_cast
        and change behavior to be more consistent between Debug and
        Release builds, as well as other "checked" functions.
        Previously this function would return nullptr in Release builds
        if nullptr or the wrong type of object was passed in, but crash
        in both cases on Debug builds.  The new behavior always returns
        nullptr if nullptr was passed in (but never crashes), and always
        crashes if the wrong type of object is passed in.

2018-01-04  Keith Miller  <keith_miller@apple.com>

        TypedArrays and Wasm should use index masking.
        https://bugs.webkit.org/show_bug.cgi?id=181313

        Reviewed by Michael Saboff.

        * wtf/MathExtras.h:
        (WTF::computeIndexingMask):

2018-01-03  Michael Saboff  <msaboff@apple.com>

        Disable SharedArrayBuffers from Web API
        https://bugs.webkit.org/show_bug.cgi?id=181266

        Reviewed by Saam Barati.

        Turn off SharedArrayBuffers using a compile time flag ENABLE_SHARED_ARRAY_BUFFER.

        * wtf/Platform.h:

2017-12-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove std::chrono completely
        https://bugs.webkit.org/show_bug.cgi?id=181186

        Reviewed by Alex Christensen.

        std::chrono's overflow unaware design is dangerous[1]. Even small code like
        `condition.wait_for(std::chrono::seconds::max())` is broken in some platforms
        due to overflow of std::chrono::time_point. So we intentionally avoid using
        std::chrono, and use WallTime, MonotonicTime, Seconds instead.

        This patch removes all the remaining use of std::chrono from WebKit tree.

        [1]: https://lists.webkit.org/pipermail/webkit-dev/2016-May/028242.html

        * wtf/CrossThreadCopier.h:
        Remove std::chrono support from cross thread copiers.
        * wtf/Forward.h:
        * wtf/MonotonicTime.h:
        (WTF::MonotonicTime::isolatedCopy const):
        Add isolatedCopy function.
        * wtf/RunLoop.h:
        (WTF::RunLoop::TimerBase::startRepeating):
        (WTF::RunLoop::TimerBase::startOneShot):
        Just remove these helpers.
        * wtf/Seconds.h:
        (WTF::Seconds::isolatedCopy const):
        Add isolatedCopy function.
        * wtf/WallTime.h:
        (WTF::WallTime::isolatedCopy const):
        Add isolatedCopy function.
        * wtf/persistence/PersistentCoders.h:
        (WTF::Persistence::Coder<Seconds>::encode):
        (WTF::Persistence::Coder<Seconds>::decode):
        (WTF::Persistence::Coder<WallTime>::encode):
        (WTF::Persistence::Coder<WallTime>::decode):
        Add persistent coder support for Seconds and WallTime.
        (WTF::Persistence::Coder<std::chrono::system_clock::time_point>::encode): Deleted.
        (WTF::Persistence::Coder<std::chrono::system_clock::time_point>::decode): Deleted.
        Remove std::chrono support from persistent coders.

2018-01-02  Mark Lam  <mark.lam@apple.com>

        Refactoring: Rename DummyClass to DummyStruct because it's a struct.
        https://bugs.webkit.org/show_bug.cgi?id=181230

        Reviewed by JF Bastien.

        * wtf/WTFAssertions.cpp:

2018-01-02  Mark Lam  <mark.lam@apple.com>

        Ensure that poisoned pointers do not look like double or int32 JSValues.
        https://bugs.webkit.org/show_bug.cgi?id=181221
        <rdar://problem/36248638>

        Reviewed by JF Bastien.

        Changed poison values to ensure that poisoned bits (i.e. pointer ^ poison)
        satisfies the following conditions:
        1. bits 48-63 are 0: this ensures that poisoned bits look like a pointer and
           not a double or int32 JSValue.
        2. bits 32-47 are not completely 0.
        3. bit 2 is never 0: this ensures that the poisoned value of a non-null pointer
           will never be null.
        4. bit 0-1 is always 0: this ensures that clients can still use the 2 bottom
           bits of the poisoned value as flag bits (just like they were able to do with
           pointer values).  The only difference is that bit 2 can no longer be used for
           flag bits because poisoned values need it to always be set.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/PointerAsserts.cpp: Removed.

        * wtf/Poisoned.cpp:
        (WTF::makePoison):
        - Updated to satisfy the above requirements.
        
        * wtf/Poisoned.h:
        (WTF::makeConstExprPoison):
        (WTF::makePoison): Deleted.

        * wtf/WTFAssertions.cpp: Copied from Source/WTF/wtf/PointerAsserts.cpp.
        - Renamed from PointerAsserts.cpp because we assert more things than just
          pointers here.
        - Added some assertions to test makeConstExprPoison() to ensure that it satisfies
          the above requirements.

2017-12-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove std::chrono if it is not used for ArgumentCoder or PersistentCoder
        https://bugs.webkit.org/show_bug.cgi?id=181174

        Reviewed by Konstantin Tokarev.

        Make WallTime more constexpr friendly. This change is already applied to MonoTonicTime.

        We would like to move std::{isfinite,isinf,isnan} overloadings from std:: to each class scope in a separate patch[1].

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

        * wtf/WallTime.h:
        (WTF::WallTime::WallTime):
        (WTF::WallTime::fromRawSeconds):
        (WTF::WallTime::infinity):
        (WTF::WallTime::secondsSinceEpoch const):
        (WTF::WallTime::operator bool const):
        (WTF::WallTime::operator+ const):
        (WTF::WallTime::operator- const):
        (WTF::WallTime::operator== const):
        (WTF::WallTime::operator!= const):
        (WTF::WallTime::operator< const):
        (WTF::WallTime::operator> const):
        (WTF::WallTime::operator<= const):
        (WTF::WallTime::operator>= const):

2017-12-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][CMake] Use add_custom_command to copy each forwarding header files
        https://bugs.webkit.org/show_bug.cgi?id=180921

        Reviewed by Brent Fulgham.

        * wtf/PlatformWin.cmake: Use WEBKIT_MAKE_FORWARDING_HEADERS.

2017-12-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Add clock_gettime based monotonicallyIncreasingTime implementation for Linux and BSDs
        https://bugs.webkit.org/show_bug.cgi?id=181175

        Reviewed by Michael Catanzaro.

        Use platform-provided POSIX APIs to get monotonic time.

        * wtf/CurrentTime.cpp:
        (WTF::monotonicallyIncreasingTime):

2017-12-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r225769): Build error with constexpr std::max // std::min in libdstdc++4
        https://bugs.webkit.org/show_bug.cgi?id=181160

        Reviewed by Myles C. Maxfield.

        In libstdc++-4 std::max and std::min are not annotated with constexpr.
        This patch adds a WTF::min and WTF::max for using where a constexpr result is expected.
        Related: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60271

        * wtf/StdLibExtras.h:
        (WTF::min):
        (WTF::max):

2017-12-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Remove std::chrono completely
        https://bugs.webkit.org/show_bug.cgi?id=181165

        Reviewed by Konstantin Tokarev.

        WTF::currentCPUTime now returns WTF::Seconds.
        We also add the implementaiton for Linux and FreeBSD.

        * wtf/CurrentTime.cpp:
        (WTF::currentCPUTime):
        * wtf/CurrentTime.h:

2017-12-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, try to fix the Sierra build after r226277.

        The macOS 10.12 SDK does not know about NSControlStateValue and some types of NSLevelIndicatorStyles, so these
        need to be declared in a separate section in AppKitCompatibilityDeclarations.h (rather than in the < macOS 10.12
        SDK #ifdef).

        * wtf/mac/AppKitCompatibilityDeclarations.h:

2017-12-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix build failures due to using deprecated AppKit symbols
        https://bugs.webkit.org/show_bug.cgi?id=181110
        <rdar://problem/36162865>

        Reviewed by Dan Bernstein and Tim Horton.

        When building with older macOS SDKs where some AppKit constants don't exist, define the modern constants to be
        equal to their deprecated counterparts. This allows us to just have the modern types in WebKit sources while
        avoiding breakage on old SDKs.

        This, along with many other symbols in the compability header, can be removed once WebKit stops supporting macOS
        10.11.

        * wtf/mac/AppKitCompatibilityDeclarations.h:

2017-12-21  Mark Lam  <mark.lam@apple.com>

        Add WTF::PoisonedUniquePtr to replace std::unique_ptr when poisoning is desired.
        https://bugs.webkit.org/show_bug.cgi?id=181062
        <rdar://problem/36167040>

        Reviewed by Chris Dumez.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/PointerAsserts.cpp: Copied from Source/WTF/wtf/RefPtr.cpp.
        - renamed file because we asserts all kinds of pointers in here, not just RefPtr.
        
        * wtf/Poisoned.h:
        - added a missing #include.
        - make constexpr poison values more scrambled.
        (WTF::makePoison):

        * wtf/PoisonedUniquePtr.h: Added.
        (WTF::PoisonedUniquePtr::PoisonedUniquePtr):
        (WTF::PoisonedUniquePtr::~PoisonedUniquePtr):
        (WTF::PoisonedUniquePtr::create):
        (WTF::PoisonedUniquePtr::operator=):
        (WTF::PoisonedUniquePtr::get const):
        (WTF::PoisonedUniquePtr::operator[] const):
        (WTF::PoisonedUniquePtr::clear):
        (WTF::PoisonedUniquePtr::destroy):
        (WTF::PoisonedUniquePtr::clearWithoutDestroy):
        (WTF::makePoisonedUnique):
        * wtf/RefPtr.cpp: Removed.

2017-12-21  Jeremy Jones  <jeremyj@apple.com>

        Element fullscreen interface should display the location
        https://bugs.webkit.org/show_bug.cgi?id=181006
        rdar://problem/36143176

        Reviewed by Simon Fraser.

        Add SecTrustCopyInfo SPI.

        * wtf/spi/cocoa/SecuritySPI.h:

2017-12-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake][WTF] Lowercase ForwardingHeaders directory name of WTF
        https://bugs.webkit.org/show_bug.cgi?id=181022

        Reviewed by Konstantin Tokarev.

        * wtf/CMakeLists.txt: Renamed ForwardingHeaders directory name WTF to wtf.
        * wtf/PlatformWin.cmake: Ditto.

2017-12-19  Brian Burg  <bburg@apple.com>

        SLEEP_THREAD_FOR_DEBUGGER() macro should try to print out the PID of the affected process
        https://bugs.webkit.org/show_bug.cgi?id=180947

        Reviewed by Joseph Pecoraro.

        * wtf/DebugUtilities.h:
        - Use sleep() from CurrentTime.h as it is more cross-platform.
        - Print a message with the process PID to simplify attaching to sleeping thread.
        - Include source location in case multiple such macros are being used.

2017-12-18  Daniel Bates  <dabates@apple.com>

        Conditionally forward declare NSMapTable SPI
        https://bugs.webkit.org/show_bug.cgi?id=180936
        <rdar://problem/35037796>

        Reviewed by Dan Bernstein.

        * wtf/spi/cocoa/NSMapTableSPI.h:

2017-12-16  Filip Pizlo  <fpizlo@apple.com>

        Vector index masking
        https://bugs.webkit.org/show_bug.cgi?id=180909

        Reviewed by Keith Miller.
        
        Adds index masking to StringImpl and Vector.
        
        Perf:
        
        - 0.4% slower on microbenchmarks.
        - Octane totally even.
        - Kraken may be 0.8% slower.
        - Speedometer is 0.8% slower with p = 0.008.
        - membuster is even:
            - snap2pre: 0.7% bigger w/ p = 0.26,
            - snap2post: 0.3% smaller w/ p = 0.81,
            - snap3pre: 1.2% bigger w/ p = 0.63,
            - snap3post: 0.4% smaller w/ p = 0.76.

        * wtf/MathExtras.h:
        (WTF::roundUpToPowerOfTwo):
        (WTF::maskForSize):
        * wtf/SizeLimits.cpp:
        * wtf/Vector.h:
        (WTF::VectorBufferBase::allocateBuffer):
        (WTF::VectorBufferBase::tryAllocateBuffer):
        (WTF::VectorBufferBase::reallocateBuffer):
        (WTF::VectorBufferBase::deallocateBuffer):
        (WTF::VectorBufferBase::releaseBuffer):
        (WTF::VectorBufferBase::VectorBufferBase):
        (WTF::VectorBufferBase::updateMask):
        (WTF::VectorBuffer::allocateBuffer):
        (WTF::VectorBuffer::tryAllocateBuffer):
        (WTF::VectorBuffer::swap):
        (WTF::VectorBuffer::restoreInlineBufferIfNeeded):
        (WTF::Vector::at):
        (WTF::Vector::at const):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::maskOffset):
        (WTF::StringImpl::mask const):
        (WTF::StringImplShape::StringImplShape):
        (WTF::StringImpl::at const):
        (WTF::StringImpl::tailOffset):
        * wtf/text/StringView.h:
        (WTF::StringView::StringView):
        (WTF::StringView::operator=):
        (WTF::StringView::initialize):
        (WTF::StringView::clear):
        (WTF::StringView::operator[] const):
        * wtf/text/WTFString.h:
        (WTF::String::mask const):

2017-12-18  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][Darwin] Do not define mach exceptions for GTK+

        Rubber-stamped by Michael Catanzaro.
        * wtf/Platform.h:

2017-12-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [FTL] NewArrayBuffer should be sinked if it is only used for spreading
        https://bugs.webkit.org/show_bug.cgi?id=179762

        Reviewed by Saam Barati.

        We add RecursableLambda<>. This can take a lambda and offer a way
        to call this lambda recursively without introducing additional allocations.

        C++ lambda is super useful in particular when we need to capture many
        variables as references. Passing many arguments to a usual function is not
        a good way. But C++ lambda does not allow us to easily call itself recursively.

        Our recursableLambda offers `self` function as a first argument of the
        given lambda. We can call this `self` recursively.

        auto targetFunction = recursableLambda([] (auto self, ...) -> resultType {
            self(...);
        });

        While `std::function<> func = [&func] { ... }` allows recursion, it causes
        heap allocation for std::function<>. `auto func = [&func] { ... }` causes
        a compile error since we need to deduce an actual type when capturing `func`.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/RecursableLambda.h: Added.
        (WTF::RecursableLambda::RecursableLambda):
        (WTF::RecursableLambda::operator() const):
        (WTF::recursableLambda):

2017-12-17  Mark Lam  <mark.lam@apple.com>

        Enhance Ref and RefPtr to be able to work with smart pointers.
        https://bugs.webkit.org/show_bug.cgi?id=180762
        <rdar://problem/36027122>

        Reviewed by JF Bastien and Darin Adler.

        This is so we can use them with ConstExprPoisoned pointers to make PoisonedRef
        and PoisonedRefPtr.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DumbPtrTraits.h: Added.
        (WTF::DumbPtrTraits::exchange):
        (WTF::DumbPtrTraits::swap):
        (WTF::DumbPtrTraits::unwrap):
        * wtf/Forward.h:
        * wtf/Poisoned.h:
        (WTF::ConstExprPoisonedPtrTraits::exchange):
        (WTF::ConstExprPoisonedPtrTraits::swap):
        (WTF::ConstExprPoisonedPtrTraits::unwrap):
        * wtf/Ref.h:
        (WTF::Ref::~Ref):
        (WTF::Ref::Ref):
        (WTF::Ref::ptrAllowingHashTableEmptyValue const):
        (WTF::Ref::ptrAllowingHashTableEmptyValue):
        (WTF::Ref::operator-> const):
        (WTF::Ref::get const):
        (WTF::Ref::operator T& const):
        (WTF::=):
        (WTF::U>::swap):
        (WTF::swap):
        (WTF::U>::replace):
        (WTF::static_reference_cast):
        (WTF::adoptRef):
        (WTF::is):
        (WTF::Ref<T>::swap): Deleted.
        (WTF::Ref<T>::replace): Deleted.
        (WTF::GetPtrHelper<Ref<T>>::getPtr): Deleted.
        * wtf/RefPtr.cpp: Added.
        * wtf/RefPtr.h:
        (WTF::RefPtr::RefPtr):
        (WTF::RefPtr::~RefPtr):
        (WTF::RefPtr::get const):
        (WTF::RefPtr::operator* const):
        (WTF::RefPtr::operator-> const):
        (WTF::U>::RefPtr):
        (WTF::U>::leakRef):
        (WTF::=):
        (WTF::U>::swap):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::static_pointer_cast):
        (WTF::adoptRef):
        (WTF::is):
        (WTF::RefPtr<T>::RefPtr): Deleted.
        (WTF::RefPtr<T>::leakRef): Deleted.
        (WTF::RefPtr<T>::swap): Deleted.

2017-12-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove unnecessary boolean result of start() functions
        https://bugs.webkit.org/show_bug.cgi?id=180856

        Reviewed by Darin Adler.

        CrossThreadTaskHandler's Thread is just released without calling
        either `waitForCompletion` or `detach`. It means that this resource
        of the thread is not released.

        * benchmarks/ConditionSpeedTest.cpp:
        * wtf/CrossThreadTaskHandler.cpp:
        (WTF::CrossThreadTaskHandler::CrossThreadTaskHandler):
        * wtf/CrossThreadTaskHandler.h:

2017-12-14  David Kilzer  <ddkilzer@apple.com>

        Enable -Wstrict-prototypes for WebKit
        <https://webkit.org/b/180757>
        <rdar://problem/36024132>

        Rubber-stamped by Joseph Pecoraro.

        * Configurations/Base.xcconfig:
        (CLANG_WARN_STRICT_PROTOTYPES): Add. Set to YES.
        * wtf/Assertions.h:
        (WTFReportBacktrace): Add 'void' to C function declaration.
        (WTFCrashHookFunction): Add 'void' to C function pointer declaration.
        (WTFInstallReportBacktraceOnCrashHook): Add 'void' to C function declaration.
        (WTFIsDebuggerAttached): Ditto.
        (WTFCrash): Ditto.
        (WTFCrashWithSecurityImplication): Ditto.

2017-12-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        Drop Thread::tryCreate
        https://bugs.webkit.org/show_bug.cgi?id=180808

        Reviewed by Darin Adler.

        We remove Thread::tryCreate. When thread creation fails, we have no way to keep WebKit working.
        Compared to tryMalloc, Thread::create always consumes fixed size of resource. If it fails,
        this is not due to arbitrary large user request. It is not reasonable that some thread creations
        are handled gracefully while the other thread creations are not.

        If we would like to have the limit of number of users' thread creation (like, calling `new Worker`
        so many times), we should have a soft limit instead of relying on system's hard limit.

        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::ThreadPrivate::tryLockFor):
        * wtf/Threading.cpp:
        (WTF::Thread::create):
        (WTF::Thread::tryCreate): Deleted.
        * wtf/Threading.h:
        (WTF::Thread::create): Deleted.

2017-12-13  Keith Miller  <keith_miller@apple.com>

        JSObjects should have a mask for loading indexed properties
        https://bugs.webkit.org/show_bug.cgi?id=180768

        Reviewed by Mark Lam.

        Add a clz that wraps the builtin clz intrinisics provided by
        various compilers. The clz function by default assumes that
        the input may be zero. On X86 this makes a difference because not
        all CPUs have LZCNT and BSR has undefined behavior on zero. On ARM,
        the zero check gets optimized away, regardless.

        * wtf/StdLibExtras.h:
        (std::clz):

2017-12-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r225769): Build errors with constexpr std::tie on older gcc
        https://bugs.webkit.org/show_bug.cgi?id=180692

        Reviewed by Carlos Garcia Campos.

        Due to libstdc++'s bug[1], std::tie is not annotated with constexpr in libstdc++ 5.
        This patch adds WTF::tie for a work around. Since we do not want to
        include <tuple> in StdLibExtras.h, we define this function for all
        the compilers.

        [1]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65978

        * wtf/StdLibExtras.h:

2017-12-13  Mark Lam  <mark.lam@apple.com>

        Fill out some Poisoned APIs, fix some bugs, and add some tests.
        https://bugs.webkit.org/show_bug.cgi?id=180724
        <rdar://problem/36006884>

        Reviewed by JF Bastien.

        Also rename Int32Poisoned to ConstExprPoisoned.  The key it takes is actually a
        uint32_t.  So, Int32 is really a misnomer.  In addition, the key needs to be a
        constexpr.  So, ConstExprPoisoned is a better name for it.

        * wtf/Poisoned.cpp:
        (WTF::makePoison):
        * wtf/Poisoned.h:
        (WTF::PoisonedImplHelper::asReference):
        (WTF::PoisonedImpl::PoisonedImpl):
        (WTF::PoisonedImpl::clear):
        (WTF::PoisonedImpl::operator* const):
        (WTF::PoisonedImpl::operator-> const):
        (WTF::PoisonedImpl::operator== const):
        (WTF::PoisonedImpl::operator!= const):
        (WTF::PoisonedImpl::operator< const):
        (WTF::PoisonedImpl::operator<= const):
        (WTF::PoisonedImpl::operator> const):
        (WTF::PoisonedImpl::operator>= const):
        (WTF::PoisonedImpl::operator=):
        (WTF::PoisonedImpl::swap):
        (WTF::PoisonedImpl::exchange):
        (WTF::swap):
        (WTF::makePoison):
        (WTF::PoisonedImpl::operator==): Deleted.

2017-12-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Implement optimized WeakMap and WeakSet
        https://bugs.webkit.org/show_bug.cgi?id=179929

        Reviewed by Saam Barati.

        We introduce JSValueMalloc, which is specialized malloc scheme with Gigacage::JSValue.
        This is used for WeakMapImpl's buffer.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/JSValueMalloc.cpp: Added.
        (WTF::tryJSValueMalloc):
        (WTF::jsValueMalloc):
        (WTF::jsValueRealloc):
        (WTF::jsValueFree):
        * wtf/JSValueMalloc.h: Added.
        (WTF::JSValueMalloc::malloc):
        (WTF::JSValueMalloc::tryMalloc):
        (WTF::JSValueMalloc::realloc):
        (WTF::JSValueMalloc::free):
        * wtf/MallocPtr.h:
        (WTF::MallocPtr::~MallocPtr):
        (WTF::MallocPtr::malloc):
        (WTF::MallocPtr::tryMalloc):
        (WTF::MallocPtr::realloc):
        We extend MallocPtr to adopt malloc scheme as its template parameter.

2017-12-11  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to flag a cell for unconditional finalization
        https://bugs.webkit.org/show_bug.cgi?id=180636

        Reviewed by Saam Barati.
        
        This adds ConcurrentVector, which is like SegmentedVector, but wastes some space to allow
        resizing to proceed concurrently to access. It's not possible to resize concurrently to
        resizing, concurrent read/writes aren't protected from racing if they access the same element,
        and who knows what you'll get if you iterate up to size() while someone else append()s. The
        key insight is to stash all prior copies of the spine, so that nobody crashes trying to access
        a stale spine.
        
        I'm going to want to do the same thing for FastBitVector, by creating a segmented WordOwner
        class. That would require repeating the dance of having a spine that can resize while stashing
        old versions. So, the spine resizing logic is abstracted behind ConcurrentBuffer. You could
        use that as a kind of "concurrent vector" for immutable data. That's how ConcurrentVector uses
        it: it's an immutable array of segment pointers.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/ConcurrentBuffer.h: Added.
        (WTF::ConcurrentBuffer::ConcurrentBuffer):
        (WTF::ConcurrentBuffer::~ConcurrentBuffer):
        (WTF::ConcurrentBuffer::growExact):
        (WTF::ConcurrentBuffer::grow):
        (WTF::ConcurrentBuffer::array const):
        (WTF::ConcurrentBuffer::operator[]):
        (WTF::ConcurrentBuffer::operator[] const):
        (WTF::ConcurrentBuffer::createArray):
        * wtf/ConcurrentVector.h: Added.
        (WTF::ConcurrentVectorIterator::~ConcurrentVectorIterator):
        (WTF::ConcurrentVectorIterator::operator* const):
        (WTF::ConcurrentVectorIterator::operator-> const):
        (WTF::ConcurrentVectorIterator::operator++):
        (WTF::ConcurrentVectorIterator::operator== const):
        (WTF::ConcurrentVectorIterator::operator!= const):
        (WTF::ConcurrentVectorIterator::operator=):
        (WTF::ConcurrentVectorIterator::ConcurrentVectorIterator):
        (WTF::ConcurrentVector::~ConcurrentVector):
        (WTF::ConcurrentVector::size const):
        (WTF::ConcurrentVector::isEmpty const):
        (WTF::ConcurrentVector::at):
        (WTF::ConcurrentVector::at const):
        (WTF::ConcurrentVector::operator[]):
        (WTF::ConcurrentVector::operator[] const):
        (WTF::ConcurrentVector::first):
        (WTF::ConcurrentVector::first const):
        (WTF::ConcurrentVector::last):
        (WTF::ConcurrentVector::last const):
        (WTF::ConcurrentVector::takeLast):
        (WTF::ConcurrentVector::append):
        (WTF::ConcurrentVector::alloc):
        (WTF::ConcurrentVector::removeLast):
        (WTF::ConcurrentVector::grow):
        (WTF::ConcurrentVector::begin):
        (WTF::ConcurrentVector::end):
        (WTF::ConcurrentVector::segmentExistsFor):
        (WTF::ConcurrentVector::segmentFor):
        (WTF::ConcurrentVector::subscriptFor):
        (WTF::ConcurrentVector::ensureSegmentsFor):
        (WTF::ConcurrentVector::ensureSegment):
        (WTF::ConcurrentVector::allocateSegment):

2017-12-12  JF Bastien  <jfbastien@apple.com>

        makeString: support more integral types
        https://bugs.webkit.org/show_bug.cgi?id=180720

        Reviewed by Sam Weinig.

        Only some integral types worked. Add more types by using template
        magic. While we're here, also use the same magic for
        floating-point types in the theoretical future where short float
        or long double matter.

        The core of the magic is a second, defaulted, template
        parameter. It's declared in Forward.h (as void), and then in
        classes where we want to enable_if we use it (in C++ speak we
        create a partial class template specialization), otherwise we
        leave it as void.

        Also clean up some constructors which were being way too verbose
        in stating that they were declarations for this template
        specialization right here, when really we already knew that.

        * wtf/Forward.h:
        * wtf/text/StringConcatenate.h:
        (WTF::StringTypeAdapter<char>::StringTypeAdapter<char>): Deleted.
        (WTF::StringTypeAdapter<char>::length): Deleted.
        (WTF::StringTypeAdapter<char>::is8Bit): Deleted.
        (WTF::StringTypeAdapter<char>::writeTo const): Deleted.
        (WTF::StringTypeAdapter<char>::toString const): Deleted.
        (WTF::StringTypeAdapter<UChar>::StringTypeAdapter<UChar>): Deleted.
        (WTF::StringTypeAdapter<UChar>::length const): Deleted.
        (WTF::StringTypeAdapter<UChar>::is8Bit const): Deleted.
        (WTF::StringTypeAdapter<UChar>::writeTo const): Deleted.
        (WTF::StringTypeAdapter<UChar>::toString const): Deleted.
        (WTF::StringTypeAdapter<char::StringTypeAdapter): Deleted.
        (WTF::StringTypeAdapter<ASCIILiteral>::StringTypeAdapter): Deleted.
        (WTF::StringTypeAdapter<Vector<char>>::StringTypeAdapter): Deleted.
        (WTF::StringTypeAdapter<Vector<char>>::length const): Deleted.
        (WTF::StringTypeAdapter<Vector<char>>::is8Bit const): Deleted.
        (WTF::StringTypeAdapter<Vector<char>>::writeTo const): Deleted.
        (WTF::StringTypeAdapter<Vector<char>>::toString const): Deleted.
        (WTF::StringTypeAdapter<String>::StringTypeAdapter<String>): Deleted.
        (WTF::StringTypeAdapter<String>::length const): Deleted.
        (WTF::StringTypeAdapter<String>::is8Bit const): Deleted.
        (WTF::StringTypeAdapter<String>::writeTo const): Deleted.
        (WTF::StringTypeAdapter<String>::toString const): Deleted.
        (WTF::StringTypeAdapter<AtomicString>::StringTypeAdapter): Deleted.
        * wtf/text/StringConcatenateNumbers.h:
        (WTF::StringTypeAdapter<FormattedNumber>::StringTypeAdapter):
        (WTF::StringTypeAdapter<int>::StringTypeAdapter<int>): Deleted.
        (WTF::StringTypeAdapter<int>::length const): Deleted.
        (WTF::StringTypeAdapter<int>::is8Bit const): Deleted.
        (WTF::StringTypeAdapter<int>::writeTo const): Deleted.
        (WTF::StringTypeAdapter<int>::toString const): Deleted.
        (WTF::StringTypeAdapter<unsigned>::StringTypeAdapter<unsigned>): Deleted.
        (WTF::StringTypeAdapter<unsigned>::length const): Deleted.
        (WTF::StringTypeAdapter<unsigned>::is8Bit const): Deleted.
        (WTF::StringTypeAdapter<unsigned>::writeTo const): Deleted.
        (WTF::StringTypeAdapter<unsigned>::toString const): Deleted.
        (WTF::StringTypeAdapter<double>::StringTypeAdapter<double>): Deleted.
        (WTF::StringTypeAdapter<double>::length const): Deleted.
        (WTF::StringTypeAdapter<double>::is8Bit const): Deleted.
        (WTF::StringTypeAdapter<double>::writeTo const): Deleted.
        (WTF::StringTypeAdapter<double>::toString const): Deleted.
        (WTF::StringTypeAdapter<float>::StringTypeAdapter<float>): Deleted.
        (WTF::StringTypeAdapter<FormattedNumber>::StringTypeAdapter<FormattedNumber>): Deleted.
        * wtf/text/StringView.h:
        (WTF::StringTypeAdapter<StringView>::StringTypeAdapter<StringView>): Deleted.
        (WTF::StringTypeAdapter<StringView>::length): Deleted.
        (WTF::StringTypeAdapter<StringView>::is8Bit): Deleted.
        (WTF::StringTypeAdapter<StringView>::writeTo): Deleted.
        (WTF::StringTypeAdapter<StringView>::toString const): Deleted.

2017-12-12  Caio Lima  <ticaiolima@gmail.com>

        [ESNext][BigInt] Implement BigInt literals and JSBigInt
        https://bugs.webkit.org/show_bug.cgi?id=179000

        Reviewed by Darin Adler and Yusuke Suzuki.

        * wtf/HashFunctions.h:

2017-12-12  Joseph Pecoraro  <pecoraro@apple.com>

        Symbol not found: __ZN3WTF8LockBase10unlockSlowEv
        https://bugs.webkit.org/show_bug.cgi?id=180691

        Reviewed by Yusuke Suzuki.

        * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
        (WTF::LockBase::lockSlow):
        (WTF::LockBase::unlockSlow):
        Add back LockBase Symbols used by System Safari on 10.13.

2017-12-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Thread::create should have Thread::tryCreate
        https://bugs.webkit.org/show_bug.cgi?id=180333

        Reviewed by Darin Adler.

        Many callers of Thread::create assume that it returns non-nullptr Thread.
        But if the number of threads hits the limit in the system, creating Thread
        would fail. In that case, it is really difficult to keep WebKit working.

        We introduce Thread::tryCreate, and change the returned value from Thread::create
        from RefPtr<Thread> to Ref<Thread>. In Thread::create, we ensure thread creation
        succeeds by RELEASE_ASSERT. And we use Thread::create intentionally if the
        caller assumes that thread should be created.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThread::start):
        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::ThreadPrivate::tryLockFor):
        * wtf/Threading.cpp:
        (WTF::Thread::tryCreate):
        (WTF::Thread::create): Deleted.
        * wtf/Threading.h:
        (WTF::Thread::create):
        * wtf/WorkQueue.cpp:
        (WTF::WorkQueue::concurrentApply):

2017-12-11  Eric Carlson  <eric.carlson@apple.com>

        Web Inspector: Optionally log WebKit log parameters as JSON
        https://bugs.webkit.org/show_bug.cgi?id=180529
        <rdar://problem/35909462>

        Reviewed by Joseph Pecoraro.

        * wtf/Logger.h:
        (WTF::Logger::log):
        (WTF::LogArgument<Logger::LogSiteIdentifier>::toString):

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::toJSONString const): Serialize to JSON string.
        * wtf/MediaTime.h:

2017-12-11  Tim Horton  <timothy_horton@apple.com>

        Stop using deprecated target conditional for simulator builds
        https://bugs.webkit.org/show_bug.cgi?id=180662
        <rdar://problem/35136156>

        Reviewed by Simon Fraser.

        * wtf/Platform.h:

2017-12-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Add Converter traits to StringHasher instead of function pointer
        https://bugs.webkit.org/show_bug.cgi?id=180656

        Reviewed by JF Bastien.

        In the latest ICU, UChar is char16_t. So defining defaultConverter(UChar)
        and defaultConverter(char16_t) causes duplicate definitions.
        Instead of passing a funtion pointer, we pass a trait class DefaultConveter
        which has `convert` static function. And we make this `convert` function
        generic. This avoids defining convert function for UChar and char16_t.

        * wtf/text/StringHash.h:
        (WTF::ASCIICaseInsensitiveHash::FoldCase::convert):
        (WTF::ASCIICaseInsensitiveHash::hash):
        (WTF::ASCIICaseInsensitiveHash::foldCase): Deleted.
        * wtf/text/StringHasher.h:
        (WTF::StringHasher::DefaultConverter::convert):
        (WTF::StringHasher::addCharactersAssumingAligned):
        (WTF::StringHasher::addCharacters):
        (WTF::StringHasher::computeHashAndMaskTop8Bits):
        (WTF::StringHasher::computeHash):
        (WTF::StringHasher::computeLiteralHash):
        (WTF::StringHasher::computeLiteralHashAndMaskTop8Bits):
        (WTF::StringHasher::computeHashImpl):
        (WTF::StringHasher::Converter): Deleted.
        (WTF::StringHasher::defaultConverter): Deleted.

2017-12-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Reduce sizeof(Thread) by adjusting alignment
        https://bugs.webkit.org/show_bug.cgi?id=180630

        Reviewed by Saam Barati.

        Reduce sizeof(Thread) slightly by adjusting alignment.

        * wtf/Threading.h:

2017-12-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, follow-up patch after r225726
        https://bugs.webkit.org/show_bug.cgi?id=180622

        Suggested by Darin. We should take care of signed-extension of `char`.

        * wtf/text/StringHasher.h:
        (WTF::StringHasher::defaultConverter):

2017-12-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove RELAXED_CONSTEXPR
        https://bugs.webkit.org/show_bug.cgi?id=180624

        Reviewed by JF Bastien.

        All of our required compilers support relaxed constexpr in C++14.
        We can drop RELAXED_CONSTEXPR macro in our tree.

        * wtf/Compiler.h:
        * wtf/Expected.h:
        (std::experimental::fundamentals_v3::expected::operator*):
        (std::experimental::fundamentals_v3::expected::value):
        (std::experimental::fundamentals_v3::expected::error):
        * wtf/Unexpected.h:
        (std::experimental::fundamentals_v3::unexpected::value):
        (std::experimental::fundamentals_v3::unexpected::value const):

2017-12-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        Fix WTF::Hasher tuple expansion with variadic args
        https://bugs.webkit.org/show_bug.cgi?id=180623

        Reviewed by JF Bastien.

        We expand a tuple with `...`, and use this in a function's argument list.
        And in this argument list, we call `add()` for each value. This will be
        expanded as follows.

            [] (...) { }((add(hasher, std::get<i>(values)), 0)...);

        will become,

            [] (...) { }((add(hasher, std::get<0>(values)), 0), (add(hasher, std::get<1>(values)), 0), ...);

        However, the evaluation order of the C++ argument is unspecified. Actually,
        in GCC environment, this `add()` is not called in our expected order. As a
        result, currently we have test failures in TestWTF.

        This patch just uses variadic templates to expand tuples, and call add() in
        our expected order. This patch fixes an existing failure of TestWTF in GCC environment.

        * wtf/Hasher.h:
        (WTF::Hasher::computeHash):
        (WTF::addArgs):
        (WTF::addTupleHelper):
        (WTF::add):

2017-12-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use relaxed constexpr for StringHasher
        https://bugs.webkit.org/show_bug.cgi?id=180622

        Reviewed by JF Bastien.

        Now VC++ is updated and all the WebKit compilers support C++14 relaxed constexpr.
        This patch uses relaxed constexpr for StringHasher constexpr implementation

        * wtf/text/StringHasher.h:
        (WTF::StringHasher::addCharactersAssumingAligned):
        (WTF::StringHasher::Converter):
        (WTF::StringHasher::computeHashAndMaskTop8Bits):
        (WTF::StringHasher::computeHash):
        (WTF::StringHasher::computeLiteralHash):
        (WTF::StringHasher::computeLiteralHashAndMaskTop8Bits):
        (WTF::StringHasher::defaultConverter):
        (WTF::StringHasher::avalancheBits):
        (WTF::StringHasher::finalize):
        (WTF::StringHasher::finalizeAndMaskTop8Bits):
        (WTF::StringHasher::avoidZero):
        (WTF::StringHasher::calculateWithRemainingLastCharacter):
        (WTF::StringHasher::calculateWithTwoCharacters):
        (WTF::StringHasher::processPendingCharacter const):
        (WTF::StringHasher::StringHasher): Deleted.
        (WTF::StringHasher::avalancheBits3): Deleted.
        (WTF::StringHasher::avalancheBits2): Deleted.
        (WTF::StringHasher::avalancheBits1): Deleted.
        (WTF::StringHasher::avalancheBits0): Deleted.
        (WTF::StringHasher::calculateWithRemainingLastCharacter1): Deleted.
        (WTF::StringHasher::calculateWithRemainingLastCharacter0): Deleted.
        (WTF::StringHasher::calculate1): Deleted.
        (WTF::StringHasher::calculate0): Deleted.
        (WTF::StringHasher::calculate): Deleted.
        (WTF::StringHasher::computeLiteralHashImpl): Deleted.

2017-12-08  Eric Carlson  <eric.carlson@apple.com>

        Move Logger from PAL to WTF so it can be used outside of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=180561

        Reviewed by Alex Christensen.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Logger.h: Copied from Source/WebCore/PAL/pal/Logger.h.
        (PAL::LogArgument::toString): Deleted.
        (PAL::Logger::create): Deleted.
        (PAL::Logger::logAlways const): Deleted.
        (PAL::Logger::error const): Deleted.
        (PAL::Logger::warning const): Deleted.
        (PAL::Logger::info const): Deleted.
        (PAL::Logger::debug const): Deleted.
        (PAL::Logger::willLog const): Deleted.
        (PAL::Logger::enabled const): Deleted.
        (PAL::Logger::setEnabled): Deleted.
        (PAL::Logger::LogSiteIdentifier::LogSiteIdentifier): Deleted.
        (PAL::Logger::addObserver): Deleted.
        (PAL::Logger::removeObserver): Deleted.
        (PAL::Logger::Logger): Deleted.
        (PAL::Logger::log): Deleted.
        (PAL::Logger::observers): Deleted.
        (PAL::LogArgument<Logger::LogSiteIdentifier>::toString): Deleted.
        * wtf/LoggerHelper.h: Copied from Source/WebCore/PAL/pal/LoggerHelper.h.

2017-12-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove pthread_once in favor of dispatch_once
        https://bugs.webkit.org/show_bug.cgi?id=180591

        Reviewed by Saam Barati.

        Fix the comment.

        * wtf/Threading.h:
        (WTF::Thread::current):

2017-12-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF][Linux][GTK] Fix a minor bug in generic/WorkQueue when WorkQueue is immediately destroyed
        https://bugs.webkit.org/show_bug.cgi?id=180586

        Reviewed by Darin Adler.

        If WorkQueue is created and destroyed immediately, RunLoop::stop can be called
        befire calling RunLoop::run(). At that time WorkQueue thread is not stopped.

        This patch dispatches a task stopping its own RunLoop to ensure stop is done.
        We also clean up WorkQueue implementation not to include unnecessary fields,
        lock, condition, and thread.

        * wtf/WorkQueue.h:
        * wtf/generic/WorkQueueGeneric.cpp:
        (WorkQueue::platformInitialize):
        (WorkQueue::platformInvalidate):

2017-12-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove remaining use of Mutex
        https://bugs.webkit.org/show_bug.cgi?id=180579

        Reviewed by Alex Christensen.

        Mutex should be only used in low-level Locking and Threading.
        Other ones should use WTF::Lock and WTF::Condition instead.
        This patch replaces WTF::Mutex with WTF::Lock in WTF if it
        is not related to threading or locking implementation.

        And we also use WTF::Lock and WTF::Condition in WTF::BinarySemaphore.

        * wtf/RunLoop.cpp:
        (WTF::RunLoop::performWork):
        (WTF::RunLoop::dispatch):
        * wtf/RunLoop.h:
        * wtf/WorkQueue.cpp:
        * wtf/WorkQueue.h:
        * wtf/threads/BinarySemaphore.cpp:
        (WTF::BinarySemaphore::signal):
        (WTF::BinarySemaphore::wait):
        (WTF::BinarySemaphore::BinarySemaphore): Deleted.
        (WTF::BinarySemaphore::~BinarySemaphore): Deleted.
        * wtf/threads/BinarySemaphore.h:
        * wtf/win/WorkQueueWin.cpp:
        (WTF::WorkQueue::registerHandle):
        (WTF::WorkQueue::unregisterAndCloseHandle):
        (WTF::WorkQueue::dispatch):
        (WTF::WorkQueue::timerCallback):
        (WTF::WorkQueue::dispatchAfter):
        (WTF::TimerContext::TimerContext): Deleted.

2017-12-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use StaticLock and Lock instead of Mutex in Windows WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=180572

        Reviewed by Mark Lam.

        Remove DEPRECATED_DEFINE_STATIC_LOCAL since it's no longer used.

        * wtf/StdLibExtras.h:

2017-12-07  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Win] [64-bit] Resolve Microsoft warning C4319 on BitVector.cpp
        https://bugs.webkit.org/show_bug.cgi?id=180490

        Reviewed by Alex Christensen.

        bitsInPointer() returns unsigned which is smaller than size_t.
        "~"(negate) operator is applied before extending its size which result filled with zero.
        This may be potentially a bug if numBits is greater than max value of unsigned long
        (which is not practical).

        * wtf/BitVector.cpp:
        (WTF::BitVector::OutOfLineBits::create):

2017-12-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use WTF Locking primitives in WebThread and drop pthread_xxx use
        https://bugs.webkit.org/show_bug.cgi?id=180445

        Reviewed by Saam Barati.

        Add initializer form to fill struct with zero if struct does not have any default initializers.

        * wtf/ThreadSpecific.h:
        (WTF::ThreadSpecific::Data::Data):

2017-12-07  Mark Lam  <mark.lam@apple.com>

        Apply poisoning to some native code pointers.
        https://bugs.webkit.org/show_bug.cgi?id=180541
        <rdar://problem/35916875>

        Reviewed by Filip Pizlo.

        Ensure that the resultant poisoned bits still looks like a pointer in that its
        bottom bits are 0, just like the alignment bits of a pointer.  This allows the
        client to use the bottom bits of the poisoned bits as flag bits just like the
        client was previously able to do with pointer values.

        Note: we only ensure that the bottom alignment bits of the generated poison
        value is 0.  We're not masking out the poisoned bits.  This means that the bottom
        bits of the poisoned bits will only be null if the original pointer is aligned.
        Hence, if the client applies the poison to an unaligned pointer, we do not lose
        any information on the low bits.

        Also removed 2 wrong assertions in PoisonedImpl's constructors.  We were
        asserting that Poisoned will never be used with a null value, but that's invalid.
        We do want to allow a null value so that we don't have to constantly do null
        checks in the clients.  This was uncovered by some layout tests.

        * wtf/Poisoned.cpp:
        (WTF::makePoison):
        * wtf/Poisoned.h:
        (WTF::PoisonedImpl::PoisonedImpl):

2017-12-07  Mark Lam  <mark.lam@apple.com>

        [Re-landing r225620] Refactoring: Rename ScrambledPtr to Poisoned.
        https://bugs.webkit.org/show_bug.cgi?id=180514

        Reviewed by Saam Barati and JF Bastien.

        Re-landing r225620 with speculative build fix for GCC 7.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Poisoned.cpp: Copied from Source/WTF/wtf/ScrambledPtr.cpp.
        (WTF::makePoison):
        (WTF::makeScrambledPtrKey): Deleted.
        * wtf/Poisoned.h: Copied from Source/WTF/wtf/ScrambledPtr.h.
        (WTF::PoisonedImpl::PoisonedImpl):
        (WTF::PoisonedImpl::assertIsPoisoned const):
        (WTF::PoisonedImpl::assertIsNotPoisoned const):
        (WTF::PoisonedImpl::unpoisoned const):
        (WTF::PoisonedImpl::operator-> const):
        (WTF::PoisonedImpl::bits const):
        (WTF::PoisonedImpl::operator! const):
        (WTF::PoisonedImpl::operator bool const):
        (WTF::PoisonedImpl::operator== const):
        (WTF::PoisonedImpl::operator==):
        (WTF::PoisonedImpl::operator=):
        (WTF::PoisonedImpl::poison):
        (WTF::PoisonedImpl::unpoison):
        (WTF::ScrambledPtr::ScrambledPtr): Deleted.
        (WTF::ScrambledPtr::assertIsScrambled const): Deleted.
        (WTF::ScrambledPtr::assertIsNotScrambled const): Deleted.
        (WTF::ScrambledPtr::descrambled const): Deleted.
        (WTF::ScrambledPtr::operator-> const): Deleted.
        (WTF::ScrambledPtr::bits const): Deleted.
        (WTF::ScrambledPtr::operator! const): Deleted.
        (WTF::ScrambledPtr::operator bool const): Deleted.
        (WTF::ScrambledPtr::operator== const): Deleted.
        (WTF::ScrambledPtr::operator==): Deleted.
        (WTF::ScrambledPtr::operator=): Deleted.
        (WTF::ScrambledPtr::scramble): Deleted.
        (WTF::ScrambledPtr::descramble): Deleted.
        * wtf/ScrambledPtr.cpp: Removed.
        * wtf/ScrambledPtr.h: Removed.

2017-12-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r225620
        https://bugs.webkit.org/show_bug.cgi?id=180514
        <rdar://problem/35901694>

        It broke the build with GCC 7, and I don't know how to fix it.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Poisoned.h: Removed.
        * wtf/ScrambledPtr.cpp: Renamed from Source/WTF/wtf/Poisoned.cpp.
        (WTF::makeScrambledPtrKey):
        * wtf/ScrambledPtr.h: Added.
        (WTF::ScrambledPtr::ScrambledPtr):
        (WTF::ScrambledPtr::assertIsScrambled const):
        (WTF::ScrambledPtr::assertIsNotScrambled const):
        (WTF::ScrambledPtr::descrambled const):
        (WTF::ScrambledPtr::operator-> const):
        (WTF::ScrambledPtr::bits const):
        (WTF::ScrambledPtr::operator! const):
        (WTF::ScrambledPtr::operator bool const):
        (WTF::ScrambledPtr::operator== const):
        (WTF::ScrambledPtr::operator==):
        (WTF::ScrambledPtr::operator=):
        (WTF::ScrambledPtr::scramble):
        (WTF::ScrambledPtr::descramble):

2017-12-06  Mark Lam  <mark.lam@apple.com>

        Refactoring: Rename ScrambledPtr to Poisoned.
        https://bugs.webkit.org/show_bug.cgi?id=180514

        Reviewed by Saam Barati.

        We're switching our nomenclature to "poisoning" instead of "scrambling" pointers.
        This allows us to use shorter names.

        This patch is almost purely refactoring, except for one change: the PoisonedImpl
        template class (previously ScrambledPtr) has been modified to allow usage of
        a constexpr uint32_t poison value (see Int32Poisoned) in addition to a runtime
        determined uintptr_t poison value (see Poisoned).

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Poisoned.cpp: Copied from Source/WTF/wtf/ScrambledPtr.cpp.
        (WTF::makePoison):
        (WTF::makeScrambledPtrKey): Deleted.
        * wtf/Poisoned.h: Copied from Source/WTF/wtf/ScrambledPtr.h.
        (WTF::PoisonedImpl::PoisonedImpl):
        (WTF::PoisonedImpl::assertIsPoisoned const):
        (WTF::PoisonedImpl::assertIsNotPoisoned const):
        (WTF::PoisonedImpl::unpoisoned const):
        (WTF::PoisonedImpl::operator-> const):
        (WTF::PoisonedImpl::bits const):
        (WTF::PoisonedImpl::operator! const):
        (WTF::PoisonedImpl::operator bool const):
        (WTF::PoisonedImpl::operator== const):
        (WTF::PoisonedImpl::operator==):
        (WTF::PoisonedImpl::operator=):
        (WTF::PoisonedImpl::poison):
        (WTF::PoisonedImpl::unpoison):
        (WTF::ScrambledPtr::ScrambledPtr): Deleted.
        (WTF::ScrambledPtr::assertIsScrambled const): Deleted.
        (WTF::ScrambledPtr::assertIsNotScrambled const): Deleted.
        (WTF::ScrambledPtr::descrambled const): Deleted.
        (WTF::ScrambledPtr::operator-> const): Deleted.
        (WTF::ScrambledPtr::bits const): Deleted.
        (WTF::ScrambledPtr::operator! const): Deleted.
        (WTF::ScrambledPtr::operator bool const): Deleted.
        (WTF::ScrambledPtr::operator== const): Deleted.
        (WTF::ScrambledPtr::operator==): Deleted.
        (WTF::ScrambledPtr::operator=): Deleted.
        (WTF::ScrambledPtr::scramble): Deleted.
        (WTF::ScrambledPtr::descramble): Deleted.
        * wtf/ScrambledPtr.cpp: Removed.
        * wtf/ScrambledPtr.h: Removed.

2017-12-02  Darin Adler  <darin@apple.com>

        Modernize some aspects of text codecs, eliminate WebKit use of strcasecmp
        https://bugs.webkit.org/show_bug.cgi?id=180009

        Reviewed by Alex Christensen.

        * wtf/Assertions.cpp: Removed include of StringExtras.h.
        (WTFLogChannelByName): Use equalIgnoringASCIICase instead of strcasecmp.
        * wtf/DateMath.cpp: Removed include of StringExtras.h.
        * wtf/MD5.cpp: Ditto. Also removed include of CString.h.
        * wtf/SHA1.cpp: Ditto.

        * wtf/StringExtras.h:
        (strncasecmp): Deleted.
        (strcasecmp): Deleted.

        * wtf/StringPrintStream.cpp: Removed include of StringExtras.h.
        * wtf/text/Base64.cpp: Ditto.

        * wtf/text/LineEnding.cpp:
        (WTF::normalizeLineEndingsToLF): Replaced old more general purpose function with
        this. Changed argument type to vector and used an rvalue reference and return value.
        Also fixed some small logic errors.
        (WTF::normalizeLineEndingsToCRLF): Ditto.
        (WTF::normalizeLineEndingsToNative): Updated for above changes.
        * wtf/text/LineEnding.h: Updated for above changes.

        * wtf/text/StringCommon.h:
        (WTF::equalIgnoringASCIICase): Added overload for const char*.
        (WTF::equalLettersIgnoringASCIICase): Ditto.

        * wtf/text/TextStream.cpp: Removed include of StringExtras.h.
        * wtf/text/WTFString.cpp: Ditto.
        * wtf/unicode/icu/CollatorICU.cpp: Ditto.

2017-12-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove XXXLockBase since constexpr constructor can initialize static variables without calling global constructors
        https://bugs.webkit.org/show_bug.cgi?id=180495

        Reviewed by Mark Lam.

        Very nice feature of C++11 is that constexpr constructor can initialize static global variables
        without calling global constructors. We do not need to have XXXLockBase with derived XXXLock
        class since StaticXXXLock can have constructors as long as it is constexpr.
        We remove bunch of these classes, and set `XXXLock() = default;` explicitly for readability.
        C++11's default constructor is constexpr as long as its member's default constructor / default
        initializer is constexpr.

        * wtf/Condition.h:
        (WTF::ConditionBase::construct): Deleted.
        (WTF::ConditionBase::waitUntil): Deleted.
        (WTF::ConditionBase::waitFor): Deleted.
        (WTF::ConditionBase::wait): Deleted.
        (WTF::ConditionBase::notifyOne): Deleted.
        (WTF::ConditionBase::notifyAll): Deleted.
        (WTF::Condition::Condition): Deleted.
        * wtf/CountingLock.h:
        (WTF::CountingLock::CountingLock): Deleted.
        (WTF::CountingLock::~CountingLock): Deleted.
        * wtf/Lock.cpp:
        (WTF::Lock::lockSlow):
        (WTF::Lock::unlockSlow):
        (WTF::Lock::unlockFairlySlow):
        (WTF::Lock::safepointSlow):
        (WTF::LockBase::lockSlow): Deleted.
        (WTF::LockBase::unlockSlow): Deleted.
        (WTF::LockBase::unlockFairlySlow): Deleted.
        (WTF::LockBase::safepointSlow): Deleted.
        * wtf/Lock.h:
        (WTF::LockBase::construct): Deleted.
        (WTF::LockBase::lock): Deleted.
        (WTF::LockBase::tryLock): Deleted.
        (WTF::LockBase::try_lock): Deleted.
        (WTF::LockBase::unlock): Deleted.
        (WTF::LockBase::unlockFairly): Deleted.
        (WTF::LockBase::safepoint): Deleted.
        (WTF::LockBase::isHeld const): Deleted.
        (WTF::LockBase::isLocked const): Deleted.
        (WTF::LockBase::isFullyReset const): Deleted.
        (WTF::Lock::Lock): Deleted.
        * wtf/ReadWriteLock.cpp:
        (WTF::ReadWriteLock::readLock):
        (WTF::ReadWriteLock::readUnlock):
        (WTF::ReadWriteLock::writeLock):
        (WTF::ReadWriteLock::writeUnlock):
        (WTF::ReadWriteLockBase::construct): Deleted.
        (WTF::ReadWriteLockBase::readLock): Deleted.
        (WTF::ReadWriteLockBase::readUnlock): Deleted.
        (WTF::ReadWriteLockBase::writeLock): Deleted.
        (WTF::ReadWriteLockBase::writeUnlock): Deleted.
        * wtf/ReadWriteLock.h:
        (WTF::ReadWriteLock::read):
        (WTF::ReadWriteLock::write):
        (WTF::ReadWriteLockBase::ReadLock::tryLock): Deleted.
        (WTF::ReadWriteLockBase::ReadLock::lock): Deleted.
        (WTF::ReadWriteLockBase::ReadLock::unlock): Deleted.
        (WTF::ReadWriteLockBase::WriteLock::tryLock): Deleted.
        (WTF::ReadWriteLockBase::WriteLock::lock): Deleted.
        (WTF::ReadWriteLockBase::WriteLock::unlock): Deleted.
        (WTF::ReadWriteLockBase::read): Deleted.
        (WTF::ReadWriteLockBase::write): Deleted.
        (WTF::ReadWriteLock::ReadWriteLock): Deleted.
        * wtf/RecursiveLockAdapter.h:
        (WTF::RecursiveLockAdapter::RecursiveLockAdapter): Deleted.
        * wtf/WordLock.cpp:
        (WTF::WordLock::lockSlow):
        (WTF::WordLock::unlockSlow):
        (WTF::WordLockBase::lockSlow): Deleted.
        (WTF::WordLockBase::unlockSlow): Deleted.
        * wtf/WordLock.h:
        (WTF::WordLockBase::lock): Deleted.
        (WTF::WordLockBase::unlock): Deleted.
        (WTF::WordLockBase::isHeld const): Deleted.
        (WTF::WordLockBase::isLocked const): Deleted.
        (WTF::WordLockBase::isFullyReset const): Deleted.
        (WTF::WordLock::WordLock): Deleted.
        * wtf/WorkQueue.cpp:

2017-12-05  Stephan Szabo  <stephan.szabo@sony.com>

        Switch windows build to Visual Studio 2017
        https://bugs.webkit.org/show_bug.cgi?id=172412

        Reviewed by Per Arne Vollan.

        * WTF.vcxproj/WTF.proj:
        * wtf/Compiler.h:

2017-12-05  Andy Estes  <aestes@apple.com>

        [Darwin] Simplify use of TargetConditionals
        https://bugs.webkit.org/show_bug.cgi?id=180455
        <rdar://problem/35142971>

        Reviewed by Tim Horton.

        There's no need to check if TARGET_* macros are defined on Darwin platforms, since
        TargetConditionals.h always defines them. Also, we can simplify
        (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR) to TARGET_OS_IPHONE.

        * wtf/Platform.h:

2017-12-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r225430.

        This caused an API failure on release.

        Reverted changeset:

        "Move DateComponents into WTF"
        https://bugs.webkit.org/show_bug.cgi?id=180211
        https://trac.webkit.org/changeset/225430

2017-12-05  Michael Saboff  <msaboff@apple.com>

        Make WebKit build for ARM64_32
        https://bugs.webkit.org/show_bug.cgi?id=180447

        Reviewed by Mark Lam.

        Add the 'w' (32bit) pointer qualifier for ARM64_32 pointers in inline assembly.

        * wtf/darwin/WeakLinking.h:
        (WTF::isNullFunctionPointer):

2017-12-05  Filip Pizlo  <fpizlo@apple.com>

        bmalloc IsoHeap needs to allow a thread to deallocate some size for the first time
        https://bugs.webkit.org/show_bug.cgi?id=180443

        Reviewed by Saam Barati.
        
        With this change it's possible to reenable isoheaps on iOS.

        * wtf/IsoMalloc.h:
        * wtf/IsoMallocInlines.h:

2017-12-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove m_atomicStringTableDestructor in Thread by querying the condition at thread destruction
        https://bugs.webkit.org/show_bug.cgi?id=180429

        Reviewed by Alex Christensen.

        We now have a pointer to the AtomicStringTable::destroy in Thread.
        This pointer becomes nullptr only when the thread is the web thread not to destroy AtomicStringTable
        twice in the UI thread and the web thread.

        Instead of having a pointer in each Thread, we query whether the current thread is the web thread at
        Thread destruction. And use this information to call AtomicStringTable::destroy. Then, we can drop
        m_atomicStringTableDestructor field in Thread.

        * wtf/Threading.cpp:
        (WTF::Thread::didExit):
        * wtf/Threading.h:
        * wtf/mac/MainThreadMac.mm:
        * wtf/text/AtomicStringTable.cpp:
        (WTF::AtomicStringTable::create):
        (WTF::AtomicStringTable::destroy):
        * wtf/text/AtomicStringTable.h:

2017-12-01  Filip Pizlo  <fpizlo@apple.com>

        GC constraint solving should be parallel
        https://bugs.webkit.org/show_bug.cgi?id=179934

        Reviewed by JF Bastien.
        
        This does some changes to make it easier to do parallel constraint solving:
        
        - I finally removed dependencyWith. This was a silly construct whose only purpose is to confuse
          people about what it means to have a dependency chain. I took that as an opportunity to grealy
          simplify the GC's use of dependency chaining.
        
        - Added more logic to Deque<>, since I use it for part of the load balancer.
        
        - Made it possible to profile lock contention. See
          https://bugs.webkit.org/show_bug.cgi?id=180250#c0 for some preliminary measurements.
        
        - Introduced holdLockIf, which makes it easy to perform predicated lock acquisition. We use that
          to pick a lock in WebCore.
        
        - Introduced CountingLock. It's like WTF::Lock except it also enables optimistic read transactions
          sorta like Java's StampedLock.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Atomics.h:
        (WTF::dependency):
        (WTF::DependencyWith::DependencyWith): Deleted.
        (WTF::dependencyWith): Deleted.
        * wtf/BitVector.h:
        (WTF::BitVector::iterator::operator++):
        * wtf/CMakeLists.txt:
        * wtf/ConcurrentPtrHashSet.cpp: Added.
        (WTF::ConcurrentPtrHashSet::ConcurrentPtrHashSet):
        (WTF::ConcurrentPtrHashSet::~ConcurrentPtrHashSet):
        (WTF::ConcurrentPtrHashSet::deleteOldTables):
        (WTF::ConcurrentPtrHashSet::clear):
        (WTF::ConcurrentPtrHashSet::initialize):
        (WTF::ConcurrentPtrHashSet::addSlow):
        (WTF::ConcurrentPtrHashSet::resizeIfNecessary):
        (WTF::ConcurrentPtrHashSet::resizeAndAdd):
        (WTF::ConcurrentPtrHashSet::Table::create):
        * wtf/ConcurrentPtrHashSet.h: Added.
        (WTF::ConcurrentPtrHashSet::contains):
        (WTF::ConcurrentPtrHashSet::add):
        (WTF::ConcurrentPtrHashSet::size const):
        (WTF::ConcurrentPtrHashSet::Table::maxLoad const):
        (WTF::ConcurrentPtrHashSet::hash):
        (WTF::ConcurrentPtrHashSet::cast):
        (WTF::ConcurrentPtrHashSet::containsImpl const):
        (WTF::ConcurrentPtrHashSet::addImpl):
        * wtf/Deque.h:
        (WTF::inlineCapacity>::takeFirst):
        * wtf/FastMalloc.h:
        * wtf/Lock.cpp:
        (WTF::LockBase::lockSlow):
        * wtf/Locker.h:
        (WTF::holdLockIf):
        * wtf/ScopedLambda.h:
        * wtf/SharedTask.h:
        (WTF::SharedTask<PassedResultType):
        (WTF::SharedTask<ResultType): Deleted.
        * wtf/StackShot.h: Added.
        (WTF::StackShot::StackShot):
        (WTF::StackShot::operator=):
        (WTF::StackShot::array const):
        (WTF::StackShot::size const):
        (WTF::StackShot::operator bool const):
        (WTF::StackShot::operator== const):
        (WTF::StackShot::hash const):
        (WTF::StackShot::isHashTableDeletedValue const):
        (WTF::StackShot::operator> const):
        (WTF::StackShot::deletedValueArray):
        (WTF::StackShotHash::hash):
        (WTF::StackShotHash::equal):
        * wtf/StackShotProfiler.h: Added.
        (WTF::StackShotProfiler::StackShotProfiler):
        (WTF::StackShotProfiler::profile):
        (WTF::StackShotProfiler::run):

2017-12-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use m_suspendCount instead of m_suspended flag in Thread
        https://bugs.webkit.org/show_bug.cgi?id=180427

        Reviewed by Carlos Garcia Campos.

        When resuming the thread, signal handler is reinvoked once before `sigsuspend` is resumed.
        But this handler should not do anything since it is just a signal for `sigsuspend`.
        Previously, we use m_suspenedd flag to distinguish between suspending and resuming signal
        handler invocations.

        But this additional m_suspended flag is not necessary since we can use m_suspendCount instead.
        This patch drops m_suspended and use m_suspendCount. Since semaphore operations emit full memory
        barrier, m_suspendCount is loaded and stored as we expect.

        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::signalHandlerSuspendResume):
        (WTF::Thread::suspend):
        (WTF::Thread::resume):

2017-12-04  Simon Fraser  <simon.fraser@apple.com>

        Minor DisplayRefreshMonitor-related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179802

        Reviewed by Sam Weinig.

        New trace point for when the CVDisplayLink fires on its own thread.

        * wtf/SystemTracing.h:

2017-12-04  JF Bastien  <jfbastien@apple.com>

        Update std::expected to match libc++ coding style
        https://bugs.webkit.org/show_bug.cgi?id=180264

        Reviewed by Alex Christensen.

        As of https://wg21.link/p0323r4 std::expected is on its way to the
        Library Fundamentals v3 TS (LEWG and EWG voted for this, but LWG
        hasn't done wording review yet, hence "on its way"). The API is
        therefore pretty close to what will be in the TS, and I've gotten
        requests for an easily usable implementation of std::expected. I
        talked to our clang team and they'll help me migrate our
        implementation to libc++, but our implementation has to look more
        like libc++ than it does now. Once in libc++ I'll maintain changes
        on both sides to make sure neither is out-of-date for too long.

        - Fork std::unexpected into its own header.
        - Add mild support for an exception-based implementation, but
          don't do noexcept yet.
        - Rename everything to follow STL style, and keep a global using
          or variable alias where possible to reduce WebKit code churn.
        - Minor API updates to remove things that aren't in the proposal
          anymore.

        * wtf/Expected.h:
        (std::experimental::fundamentals_v3::bad_expected_access<void>::bad_expected_access):
        (std::experimental::fundamentals_v3::bad_expected_access::bad_expected_access):
        (std::experimental::fundamentals_v3::bad_expected_access::error):
        (std::experimental::fundamentals_v3::bad_expected_access::error const):
        (std::experimental::fundamentals_v3::__expected_detail::constexpr_base::constexpr_base):
        (std::experimental::fundamentals_v3::__expected_detail::base::base):
        (std::experimental::fundamentals_v3::__expected_detail::base::~base):
        (std::experimental::fundamentals_v3::expected::expected):
        (std::experimental::fundamentals_v3::expected::operator=):
        (std::experimental::fundamentals_v3::expected::swap):
        (std::experimental::fundamentals_v3::expected::operator-> const):
        (std::experimental::fundamentals_v3::expected::operator->):
        (std::experimental::fundamentals_v3::expected::operator* const):
        (std::experimental::fundamentals_v3::expected::operator*):
        (std::experimental::fundamentals_v3::expected::has_value const):
        (std::experimental::fundamentals_v3::expected::value const):
        (std::experimental::fundamentals_v3::expected::value):
        (std::experimental::fundamentals_v3::expected::error const):
        (std::experimental::fundamentals_v3::expected::error):
        (std::experimental::fundamentals_v3::expected::value_or const):
        (std::experimental::fundamentals_v3::expected::value_or):
        (std::experimental::fundamentals_v3::operator==):
        (std::experimental::fundamentals_v3::operator!=):
        (std::experimental::fundamentals_v3::swap):
        (WTF::Unexpected::Unexpected): Deleted.
        (WTF::Unexpected::value const): Deleted.
        (WTF::Unexpected::value): Deleted.
        (WTF::operator==): Deleted.
        (WTF::operator!=): Deleted.
        (WTF::makeUnexpected): Deleted.
        (WTF::ExpectedDetail::Throw): Deleted.
        (WTF::ExpectedDetail::destroy): Deleted.
        (WTF::ExpectedDetail::std::is_trivially_destructible<T>::value): Deleted.
        (WTF::ExpectedDetail::ConstexprBase::ConstexprBase): Deleted.
        (WTF::ExpectedDetail::Base::Base): Deleted.
        (WTF::ExpectedDetail::Base::~Base): Deleted.
        (WTF::Expected::Expected): Deleted.
        (WTF::Expected::operator=): Deleted.
        (WTF::Expected::swap): Deleted.
        (WTF::Expected::operator-> const): Deleted.
        (WTF::Expected::operator->): Deleted.
        (WTF::Expected::operator* const): Deleted.
        (WTF::Expected::operator*): Deleted.
        (WTF::Expected::operator bool const): Deleted.
        (WTF::Expected::hasValue const): Deleted.
        (WTF::Expected::value const): Deleted.
        (WTF::Expected::value): Deleted.
        (WTF::Expected::error const): Deleted.
        (WTF::Expected::error): Deleted.
        (WTF::Expected::getUnexpected const): Deleted.
        (WTF::Expected::valueOr const): Deleted.
        (WTF::Expected::valueOr): Deleted.
        (WTF::swap): Deleted.
        (WTF::makeExpected): Deleted.
        (WTF::makeExpectedFromError): Deleted.
        * wtf/Forward.h:
        * wtf/Optional.h:
        * wtf/StdLibExtras.h:
        * wtf/Unexpected.h: Added.
        (std::experimental::fundamentals_v3::unexpected::unexpected):
        (std::experimental::fundamentals_v3::unexpected::value const):
        (std::experimental::fundamentals_v3::unexpected::value):
        (std::experimental::fundamentals_v3::operator==):
        (std::experimental::fundamentals_v3::operator!=):
        (makeUnexpected):

2017-12-03  Tomas Popela  <tpopela@redhat.com>

        Build fails on x86_64 and arm64 with BMalloc disabled
        https://bugs.webkit.org/show_bug.cgi?id=180188

        Reviewed by Carlos Garcia Campos.

        Add missing methods in WTF's Gigacage.h and fix g_gigacageBasePtr
        definition.

        * wtf/Gigacage.cpp:
        * wtf/Gigacage.h:
        (Gigacage::basePtr):
        (Gigacage::isEnabled):

2017-12-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        WTF shouldn't have both Thread and ThreadIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=180308

        Reviewed by Darin Adler.

        We should use a pointer of WTF::Thread instead of ThreadIdentifier.

        One problem is that Windows support library uses WTF::createThread,
        which returns ThreadIdentifier. So we cannot drop ThreadIdentifier
        in Windows environment. This patch keeps ThreadIdentifier in Windows.

        * wtf/MainThread.cpp:
        (WTF::initializeMainThread):
        (WTF::isMainThread):
        (WTF::canAccessThreadLocalDataForThread):
        * wtf/MainThread.h:
        * wtf/ParkingLot.cpp:
        (WTF::ParkingLot::parkConditionallyImpl):
        (WTF::ParkingLot::unparkOne):
        (WTF::ParkingLot::unparkOneImpl):
        (WTF::ParkingLot::unparkCount):
        * wtf/RecursiveLockAdapter.h:
        (WTF::RecursiveLockAdapter::lock):
        (WTF::RecursiveLockAdapter::unlock):
        (WTF::RecursiveLockAdapter::tryLock):
        * wtf/Threading.cpp:
        (WTF::Thread::dump const):
        * wtf/Threading.h:
        (WTF::Thread::id const):
        (WTF::Thread::operator==): Deleted.
        (WTF::Thread::operator!=): Deleted.
        (WTF::currentThread): Deleted.
        * wtf/ThreadingPrimitives.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::waitForCompletion):
        (WTF::Thread::detach):
        (WTF::Thread::initializeCurrentTLS):
        (WTF::Thread::suspend):
        (WTF::Thread::establishPlatformSpecificHandle):
        (WTF::Thread::currentID): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::waitForCompletion):
        (WTF::Thread::suspend):
        (WTF::Thread::currentDying):
        * wtf/mac/MainThreadMac.mm:
        (WTF::initializeApplicationUIThread):
        (WTF::initializeWebThreadPlatform):
        (WTF::canAccessThreadLocalDataForThread):
        (WTF::initializeApplicationUIThreadIdentifier): Deleted.
        (WTF::initializeWebThreadIdentifier): Deleted.

2017-12-03  Darin Adler  <darin@apple.com>

        Add WTF::Hasher, an easier to use replacement for WTF::IntegerHasher
        https://bugs.webkit.org/show_bug.cgi?id=180318

        Reviewed by JF Bastien.

        * WTF.xcodeproj/project.pbxproj: Added Hasher.h.
        * wtf/CMakeLists.txt: Ditto.

        * wtf/Forward.h: Added Hasher and TextStream.

        * wtf/Hasher.h: Moved StringHasher into a separate header. Added Hasher.
        Marked IntegerHasher deprecated.

        * wtf/text/CString.cpp: Include StringHasher.h instead of Hasher.h.
        * wtf/text/StringHash.h: Ditto.

        * wtf/text/StringHasher.h: Added. Moved StringHasher here from Hasher.h.

        * wtf/text/StringImpl.h: Include StringHasher.h instead of Hasher.h.

        * wtf/text/WTFString.h: Added a hash function. This was useful in some
        adoption I was doing in WebCore, not included in this patch.

        * wtf/unicode/UTF8.cpp: Include StringHasher.h instead of Hasher.h.

2017-12-02  Brady Eidson  <beidson@apple.com>

        Factor out the "databaseTaskQueue" parts of IDBServer into something reusable.
        https://bugs.webkit.org/show_bug.cgi?id=180298

        Reviewed by Chris Dumez.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:

        * wtf/CrossThreadTaskHandler.cpp: Added.
        (WTF::CrossThreadTaskHandler::CrossThreadTaskHandler):
        (WTF::CrossThreadTaskHandler::~CrossThreadTaskHandler):
        (WTF::CrossThreadTaskHandler::postTask):
        (WTF::CrossThreadTaskHandler::postTaskReply):
        (WTF::CrossThreadTaskHandler::taskRunLoop):
        (WTF::CrossThreadTaskHandler::handleTaskRepliesOnMainThread):
        * wtf/CrossThreadTaskHandler.h: Added.

2017-12-01  Mark Lam  <mark.lam@apple.com>

        Let's scramble ClassInfo pointers in cells.
        https://bugs.webkit.org/show_bug.cgi?id=180291
        <rdar://problem/35807620>

        Reviewed by JF Bastien.

        * wtf/ScrambledPtr.h:
        (WTF::ScrambledPtr::descrambled const):
        (WTF::ScrambledPtr::bits const):
        (WTF::ScrambledPtr::operator==):
        (WTF::ScrambledPtr::operator=):
        (WTF::ScrambledPtr::scramble):
        (WTF::ScrambledPtr::descramble):
        (WTF::ScrambledPtr:: const): Deleted.
        (WTF::ScrambledPtr::scrambledBits const): Deleted.

2017-12-01  Christopher Reid  <chris.reid@sony.com>

        Move DateComponents into WTF
        https://bugs.webkit.org/show_bug.cgi?id=180211

        Reviewed by Myles C. Maxfield.

        Moved DateComponents from WebCore/platform into WTF.
        Removed isLeapYear from DateComponents as DateMath already has that function.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DateComponents.cpp: Renamed from Source\WebCore\platform\DateComponents.cpp.
        * wtf/DateComponents.h: Renamed from Source\WebCore\platform\DateComponents.h.

2017-12-01  Youenn Fablet  <youenn@apple.com>

        Implement https://w3c.github.io/ServiceWorker/#clients-get
        https://bugs.webkit.org/show_bug.cgi?id=180167

        Reviewed by Chris Dumez.

        * wtf/text/StringView.h:
        (WTF::StringView::toUInt64Strict const):
        * wtf/text/WTFString.h:

2017-12-01  Brian Burg  <bburg@apple.com>

        Web Inspector: move Inspector::Protocol::Array<T> to JSON namespace
        https://bugs.webkit.org/show_bug.cgi?id=173662

        Reviewed by Joseph Pecoraro.

        Move Inspector::Protocol::Array<T> to JSON::ArrayOf<T>.

        * wtf/JSONValues.h:
        (WTF::JSONImpl::ArrayOf::ArrayOf):
        (WTF::JSONImpl::ArrayOf::openAccessors):
        (WTF::JSONImpl::ArrayOf::addItem):
        (WTF::JSONImpl::ArrayOf::create):

2017-12-01  Brady Eidson  <beidson@apple.com>

        Add Internals.terminateServiceWorker, and the ability to restart service workers for postMessage.
        https://bugs.webkit.org/show_bug.cgi?id=180170

        Reviewed by Chris Dumez.

        * wtf/CompletionHandler.h:
        (WTF::CompletionHandler<Out):

2017-11-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Remove easy toRemove & map.remove() use in OAS phase
        https://bugs.webkit.org/show_bug.cgi?id=180208

        Reviewed by Mark Lam.

        * wtf/HashMap.h:
        (WTF::X>::removeIf):
        * wtf/HashSet.h:
        (WTF::V>::removeIf):
        * wtf/HashTable.h:
        (WTF::KeyTraits>::removeIf):

2017-11-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r225362.
        https://bugs.webkit.org/show_bug.cgi?id=180225

        removeIf predicate function can touch remove target set
        (Requested by yusukesuzuki on #webkit).

        Reverted changeset:

        "[JSC] Remove easy toRemove & map.remove() use"
        https://bugs.webkit.org/show_bug.cgi?id=180208
        https://trac.webkit.org/changeset/225362

2017-11-30  Mark Lam  <mark.lam@apple.com>

        Let's scramble MacroAssemblerCodePtr values.
        https://bugs.webkit.org/show_bug.cgi?id=180169
        <rdar://problem/35758340>

        Reviewed by Filip Pizlo, Saam Barati, and JF Bastien.

        Introduce a ScrambledPtr class to facilitate scrambling.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/ScrambledPtr.cpp: Added.
        (WTF::makeScrambledPtrKey):
        * wtf/ScrambledPtr.h: Added.
        (WTF::ScrambledPtr::ScrambledPtr):
        (WTF::ScrambledPtr::paranoidAssertIsScrambled const):
        (WTF::ScrambledPtr::paranoidAssertIsNotScrambled const):
        (WTF::ScrambledPtr:: const):
        (WTF::ScrambledPtr::operator-> const):
        (WTF::ScrambledPtr::scrambledBits const):
        (WTF::ScrambledPtr::operator! const):
        (WTF::ScrambledPtr::operator bool const):
        (WTF::ScrambledPtr::operator== const):
        (WTF::ScrambledPtr::operator==):
        (WTF::ScrambledPtr::scramble):
        (WTF::ScrambledPtr::descramble):

2017-11-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Remove easy toRemove & map.remove() use
        https://bugs.webkit.org/show_bug.cgi?id=180208

        Reviewed by Mark Lam.

        Return bool from removeIf. It is true if removeIf removes at least one entry.
        This interface is similar to existing HashSet::remove, which returns true
        if it actually removes entry.

        * wtf/HashMap.h:
        (WTF::X>::removeIf):
        * wtf/HashSet.h:
        (WTF::V>::removeIf):
        * wtf/HashTable.h:
        (WTF::KeyTraits>::removeIf):

2017-11-30  Chris Dumez  <cdumez@apple.com>

        Populate self.registration.installing/waiting/active inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=180168

        Reviewed by Brady Eidson.

        Add CrossThreadCopier support for std::optional<>.

        * wtf/CrossThreadCopier.h:

2017-11-29  JF Bastien  <jfbastien@apple.com>

        WTF / bmalloc: don't write to 0xbbadbeef when ASAN is looking
        https://bugs.webkit.org/show_bug.cgi?id=180175

        Reviewed by Mark Lam.

        ASAN knows that 0xbbadbeef is a bbad aaddress, and tells us so
        when we write to it, say in an assert. That creates bbad error
        reports where ASAN thinks we write to an invalid address, instead
        of thinking that we hit an assertion. In some cases, tooling that
        use fuzzers aggregate similar issues, and think that we just have
        the one bug and not a bunch of different asserts.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:

2017-11-29  Filip Pizlo  <fpizlo@apple.com>

        GC should support isoheaps
        https://bugs.webkit.org/show_bug.cgi?id=179288

        Reviewed by Saam Barati.
        
        One of my favorite data structures in the GC is a singly-linked list that knows its tail, so that
        things get added to it at the end rather that at the beginning. In this patch, I use this to put
        the same node on multiple lists, which our existing linked list templates also don't support.
        
        This adds a new linked list that does those things:
        
        - It supports append(). It could also support prepend(), but currently there is no need for it.
        
        - It supports nodes that are on multiple lists. The GC uses std::mem_fn() to create a lambda that the
          list uses to set next.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/SinglyLinkedListWithTail.h: Added.
        (WTF::SinglyLinkedListWithTail::isEmpty const):
        (WTF::SinglyLinkedListWithTail::append):
        (WTF::SinglyLinkedListWithTail::first const):
        (WTF::SinglyLinkedListWithTail::last const):

2017-11-29  Stanislav Ocovaj  <stanislav.ocovaj@rt-rk.com>

        [DFG][MIPS] Enable DFG JIT on MIPS.
        https://bugs.webkit.org/show_bug.cgi?id=175447

        Reviewed by Carlos Alberto Lopez Perez.

        * wtf/Platform.h:

2017-11-29  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r225286.

        The source files within this patch have been marked as
        executable.

        Reverted changeset:

        "[MIPS][JSC] Implement MacroAssembler::probe support on MIPS"
        https://bugs.webkit.org/show_bug.cgi?id=175447
        https://trac.webkit.org/changeset/225286

2017-11-29  Stanislav Ocovaj  <stanislav.ocovaj@rt-rk.com>

        [DFG][MIPS] Enable DFG JIT on MIPS.
        https://bugs.webkit.org/show_bug.cgi?id=175447

        Reviewed by Carlos Alberto Lopez Perez.

        * wtf/Platform.h:

2017-11-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move JSONValues to WTF and convert uses of InspectorValues.h to JSONValues.h
        https://bugs.webkit.org/show_bug.cgi?id=173793

        Reviewed by Joseph Pecoraro.

        Based on patch by Brian Burg.

        Move the implementation into WTF. Put the actual implementation inside
        namespace WTF::JSONImpl so that the symbols in libwtf start with the WTF prefix.
        Also provide a top-level JSON namespace so that clients can write JSON::Value.
        This is essentially a typedef for the entire WTF::JSONImpl namespace.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/JSONValues.cpp: Renamed from Source/JavaScriptCore/inspector/InspectorValues.cpp.
        (JSON::Value::null):
        (JSON::Value::create):
        (JSON::Value::asValue):
        (JSON::Value::asObject):
        (JSON::Value::asArray):
        (JSON::Value::parseJSON):
        (JSON::Value::toJSONString const):
        (JSON::Value::asBoolean const):
        (JSON::Value::asDouble const):
        (JSON::Value::asInteger const):
        (JSON::Value::asString const):
        (JSON::Value::writeJSON const):
        (JSON::Value::memoryCost const):
        (JSON::ObjectBase::~ObjectBase):
        (JSON::ObjectBase::asObject):
        (JSON::ObjectBase::openAccessors):
        (JSON::ObjectBase::memoryCost const):
        (JSON::ObjectBase::getBoolean const):
        (JSON::ObjectBase::getString const):
        (JSON::ObjectBase::getObject const):
        (JSON::ObjectBase::getArray const):
        (JSON::ObjectBase::getValue const):
        (JSON::ObjectBase::remove):
        (JSON::ObjectBase::writeJSON const):
        (JSON::ObjectBase::ObjectBase):
        (JSON::ArrayBase::~ArrayBase):
        (JSON::ArrayBase::asArray):
        (JSON::ArrayBase::writeJSON const):
        (JSON::ArrayBase::ArrayBase):
        (JSON::ArrayBase::get const):
        (JSON::Object::create):
        (JSON::Array::create):
        (JSON::ArrayBase::memoryCost const):
        * wtf/JSONValues.h: Renamed from Source/JavaScriptCore/inspector/InspectorValues.h.
        (JSON::ObjectBase::find):
        (JSON::ObjectBase::find const):
        (JSON::ObjectBase::setBoolean):
        (JSON::ObjectBase::setInteger):
        (JSON::ObjectBase::setDouble):
        (JSON::ObjectBase::setString):
        (JSON::ObjectBase::setValue):
        (JSON::ObjectBase::setObject):
        (JSON::ObjectBase::setArray):
        (JSON::ArrayBase::pushBoolean):
        (JSON::ArrayBase::pushInteger):
        (JSON::ArrayBase::pushDouble):
        (JSON::ArrayBase::pushString):
        (JSON::ArrayBase::pushValue):
        (JSON::ArrayBase::pushObject):
        (JSON::ArrayBase::pushArray):

2017-11-28  Simon Fraser  <simon.fraser@apple.com>

        Modernize GraphicsLayer dumping
        https://bugs.webkit.org/show_bug.cgi?id=180067

        Reviewed by Sam Weinig.
        
        Expose the current indent.

        * wtf/text/TextStream.h:
        (WTF::TextStream::indent const):

2017-11-27  Chris Dumez  <cdumez@apple.com>

        Move callOnMainThreadAndWait() from SocketStreamHandleImplCFNet.cpp to MainThread.h
        https://bugs.webkit.org/show_bug.cgi?id=180060

        Reviewed by Alex Christensen.

        Move callOnMainThreadAndWait() from SocketStreamHandleImplCFNet.cpp to MainThread.h so that it can be reused.

        * wtf/MainThread.cpp:
        (WTF::callOnMainThreadAndWait):
        * wtf/MainThread.h:

2017-11-27  Simon Fraser  <simon.fraser@apple.com>

        Use TextStream's indent tracking, rather than passing indent to all the externalRepresentation() functions
        https://bugs.webkit.org/show_bug.cgi?id=180027

        Reviewed by Jon Lee.

        Remove all the indent arguments, and make use of TextStream::IndentScope to control
        output indentation.

        Add an indent stream manipulator so you can say
          ts << indent << "text"
        to write the indent.

        * wtf/text/TextStream.h:
        (WTF::TextStream::IndentScope::IndentScope):
        (WTF::TextStream::IndentScope::~IndentScope):

2016-08-05  Darin Adler  <darin@apple.com>

        Fix some minor problems in the StringImpl header
        https://bugs.webkit.org/show_bug.cgi?id=160630

        Reviewed by Brent Fulgham.

        * wtf/text/AtomicString.h: Update since CharacterMatchFunctionPtr is now
        CodeUnitMatchFunction.

        * wtf/text/StringCommon.h: Added CodeUnitMatchFunction, which replaces
        CharacterMatchFunctionPtr.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::stripMatchedCharacters): Changed template argument name
        to CodeUnitPredicate to help make it clear this works on code units, not
        code points.
        (WTF::UCharPredicate): Deleted.
        (WTF::SpaceOrNewlinePredicate): Deleted.
        (WTF::StringImpl::stripWhiteSpace): Removed unneeded use of predicate class to
        turn a function into a functor; functions already work fine as functors without
        a class wrapping them.
        (WTF::StringImpl::stripLeadingAndTrailingCharacters): Ditto. Also renamed
        from stripWhiteSpace, since it strips arbitrary characters.
        (WTF::StringImpl::removeCharacters): Fixed various minor style issues and
        updated to new type name.
        (WTF::StringImpl::simplifyMatchedCharactersToSpace): Ditto.
        (WTF::StringImpl::simplifyWhiteSpace): More of the same.
        (WTF::StringImpl::find): Ditto.

        * wtf/text/StringImpl.h: Removed unneeded include of uchar.h, since it's
        included by StringCommon.h. Removed =CharacterMatchFunctionPtr and
        IsWhiteSpaceFunctionPtr, both replaced by CodeUnitMatchFunction. Fixed
        a mistake recently introduced in isSpaceOrNewline, which was unnecessarily,
        inefficiently using ICU for non-ASCII Latin-1 characters.

        * wtf/text/StringView.h: Use CodeUnitMatchFunction instead of CharacterMatchFunction.

        * wtf/text/WTFString.cpp:
        (WTF::String::stripLeadingAndTrailingCharacters): Updated function name and type.
        (WTF::String::simplifyWhiteSpace): Updated type.
        (WTF::String::removeCharacters): Updated type.
        * wtf/text/WTFString.h: Ditto.

2017-11-23  Darin Adler  <darin@apple.com>

        Fix dictionary leak in lookup, convert FindOptions to OptionSet, tweak code style nearby
        https://bugs.webkit.org/show_bug.cgi?id=179981

        Reviewed by Sam Weinig.

        * wtf/OptionSet.h: Added some operators so it's easier to use | and - with individual
        options from the set.

2017-11-23  Darin Adler  <darin@apple.com>

        Reduce WTF::String operations that do unnecessary Unicode operations instead of ASCII
        https://bugs.webkit.org/show_bug.cgi?id=179907

        Reviewed by Sam Weinig.

        * wtf/text/ASCIIFastPath.h: Moved the using for charactersAreAllASCII here since
        the function is defined here.

        * wtf/text/AtomicString.h: Removed overloads of contains, find, startsWith, and
        endsWith that take a boolean indicating whether they should be "case sensitive".
        When false, this was doing Unicode case folding, and no callers needed that.
        Also tweaked formatting and argument names.

        * wtf/text/IntegerToStringConversion.h: Added an include of LChar.h since this file
        uses that. Also tweaked formatting a bit.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::containsOnlyWhitespace): Deleted. Despite its name sounding like
        it used the full Unicode whitespace definition, this actually checked isASCIISpace.
        Callers now all use isAllSpecialCharacters instead with the whitespace definition
        that is appropriate to each call site.
        (WTF::latin1CaseFoldTable): Deleted.
        (WTF::equalCompatibilityCaseless): Deleted.
        (WTF::StringImpl::findIgnoringCase): Deleted.
        (WTF::findIgnoringCaseInner): Deleted.
        (WTF::reverseFindIgnoringCaseInner): Deleted.
        (WTF::StringImpl::reverseFindIgnoringCase): Deleted.
        (WTF::equalInner): Removed boolean caseSensitive argument.
        (WTF::StringImpl::startsWith): Ditto.
        (WTF::StringImpl::endsWith): Ditto.

        * wtf/text/StringImpl.h: Moved TextCaseSensitivity out into a different header.
        Moved ASCIIFastPath.h include here from WTFString.h. Moved isAllSpecialCharacters
        free function here from WTFString.h. Moved lots of function bodies out of class
        definitions to make the class definitions easier to read. Sorted things a bit.
        Tweaked formatting. Marked constructor that takes one argument explicit. Added
        an isEmpty function like the one in String. Renamed copyChars to copyCharacters.
        Added isAllASCII, isAllLatin1 and isAllSpecialCharacters functions. Removed
        boolean caseSensitive arguments from various functions. Removed findIgnoringCase
        and reverseFindIgnoringCase. Added a FIXME to codePointCompare about the way it
        treats null and empty strings as equal. Changed length argument in remove to
        unsigned to match other lengths.

        * wtf/text/WTFString.cpp:
        (WTF::String::removeInternal): Changed length argument to be unsigned.
        (WTF::createWithFormatAndArguments): Use emptyString.
        (WTF::String::isSafeToSendToAnotherThread const): Rewrote to be easier to read.

        * wtf/text/WTFString.h: Moved ASCIIFastPath.h to StringImpl.h. Moved lots of
        function bodies out of class definitions to make the class definitions easier
        to read, made others one-liners. Removed the String::at function but kept the
        String::characterAt function; the two were identical. Removed boolean
        caseSensitive arguments from various functions. Removed findIgnoringCase and
        reverseFindIgnoringCase. Renamed containsOnlyASCII to isAllASCII and
        containsOnlyLatin1 to isAllLatin1 to match the naming of isAllSpecialCharacters.
        Moved the inline implementations of functions that are defined above further
        down, after things like the ASCIILiteral class and various functions.

        * wtf/text/icu/UTextProviderLatin1.cpp: Updated name of copyChars.

2017-11-22  Stephan Szabo  <stephan.szabo@sony.com>

        tuple related items are used in WTF without including tuple
        https://bugs.webkit.org/show_bug.cgi?id=179926

        Reviewed by Darin Adler.

        * wtf/HashFunctions.h:
        * wtf/PrintStream.h:
        * wtf/threads/Signals.h:

2017-11-21  Zan Dobersek  <zdobersek@igalia.com>

        Drop ENABLE_IMAGE_DECODER_DOWN_SAMPLING code
        https://bugs.webkit.org/show_bug.cgi?id=179921

        Reviewed by Carlos Garcia Campos.

        * wtf/FeatureDefines.h: Remove the ENABLE_IMAGE_DECODER_DOWN_SAMPLING
        definition.

2017-11-19  Tim Horton  <timothy_horton@apple.com>

        Remove unused TOUCH_ICON_LOADING feature flag
        https://bugs.webkit.org/show_bug.cgi?id=179873

        Reviewed by Simon Fraser.

        * wtf/FeatureDefines.h:

2017-11-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        Add CPU(UNKNOWN) to cover all the unknown CPU types
        https://bugs.webkit.org/show_bug.cgi?id=179243

        Reviewed by JF Bastien.

        This patch adds a new CPU type, `CPU(UNKNOWN)` to cover all the unknown CPUs.
        This CPU architecture tells conservative assumption to make JSC work on all
        the unknown generic CPUs. And we make several CPUs (ALPHA, SH4, S390, S390X, IA64, IA64_32)
        UNKNOWN.

        We also make InlineASM available only for !CPU(UNKNOWN). In an unknown CPU, inline asm is not useful.

        And we also introduce a generic way to detect 64bit pointer environment by using
        __SIZEOF_POINTER__ predefined macro, or `UINTPTR_MAX > UINT32_MAX`.

        * wtf/InlineASM.h:
        * wtf/Platform.h:
        * wtf/dtoa/utils.h:

2017-11-19  Tim Horton  <timothy_horton@apple.com>

        Remove unused LEGACY_VENDOR_PREFIXES feature flag
        https://bugs.webkit.org/show_bug.cgi?id=179872

        Reviewed by Darin Adler.

        * wtf/FeatureDefines.h:

2017-11-19  Chris Dumez  <cdumez@apple.com>

        Fix potential thread safety issue in ThreadSafeIdentified
        https://bugs.webkit.org/show_bug.cgi?id=179879

        Reviewed by Darin Adler.

        Fix potential thread safety issue in ThreadSafeIdentified. Protect static std::atomic
        initialization with an std::call_once() given that we build with
        --fno-threadsafe-statics.

        * wtf/Identified.h:
        (WTF::Identified::Identified):
        (WTF::Identified::generateIdentifier):
        (WTF::ThreadSafeIdentified::ThreadSafeIdentified):
        (WTF::ThreadSafeIdentified::generateIdentifier):

2017-11-18  Darin Adler  <darin@apple.com>

        Eliminate some cases of double hashing, other related refactoring
        https://bugs.webkit.org/show_bug.cgi?id=179867

        Reviewed by Sam Weinig.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::containsOnlyWhitespace): Added FIXME.

2017-11-19  Chris Dumez  <cdumez@apple.com>

        Fix potential thread safety issue in generateThreadSafeObjectIdentifier()
        https://bugs.webkit.org/show_bug.cgi?id=179877

        Reviewed by Sam Weinig.

        Fix potential thread safety issue in generateThreadSafeObjectIdentifier().
        Protect std::atomic initialization with an std::call_once() given that we
        build with --fno-threadsafe-statics.

        * wtf/ObjectIdentifier.h:
        (WTF::generateThreadSafeObjectIdentifier):

2017-11-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use system endianess information instead of relying CPU information
        https://bugs.webkit.org/show_bug.cgi?id=179861

        Reviewed by JF Bastien.

        Currently, we use known CPU information to determine endianess of the current
        architecture. But this means that unknown CPU does not work well in WebKit
        withou modifying code. Instead, we use compiler or system's macro to determine
        endianess. This paves the way to dropping many CPUs in Platform.h by replacing
        them with CPU(UNKNOWN)[1].

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

        * wtf/Platform.h:

2017-11-18  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: registration in WebCore::SWServerJobQueue::scriptContextStarted(ServiceWorkerIdentifier)
        https://bugs.webkit.org/show_bug.cgi?id=179846

        Reviewed by Darin Adler.

        Add a generateThreadSafeObjectIdentifier() for generating an ObjectIdentifier
        in a thread-safe manner, using std::atomic.

        * wtf/ObjectIdentifier.h:
        (WTF::generateObjectIdentifier):
        (WTF::generateThreadSafeObjectIdentifier):

2017-11-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove CPU(HPPA) in StackBounds by using runtime stack direction test
        https://bugs.webkit.org/show_bug.cgi?id=179859

        Reviewed by JF Bastien.

        Currently, we know that CPU(HPPA)'s stack direction is upward! But listing
        CPU architectures here is not a scalable way.

        Instead, we use runtime stack direction test. By doing so, we can handle
        such a strange architecture without listing the CPU to Platform.h. This paves
        the way to dropping many CPUs in Platform.h by replacing them with CPU(UNKNOWN)[1].

        We also fix StackBounds::isGrowingDownward().

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

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::stackDirection):
        (WTF::testStackDirection2):
        (WTF::testStackDirection):
        (WTF::StackBounds::newThreadStackBounds):
        (WTF::StackBounds::currentThreadStackBoundsInternal):
        * wtf/StackBounds.h:
        (WTF::StackBounds::isGrowingDownward const):

2017-11-17  Chris Dumez  <cdumez@apple.com>

        Use a strongly typed identifier for SWServer::Connection
        https://bugs.webkit.org/show_bug.cgi?id=179848

        Reviewed by Brady Eidson.

        Make ObjectIdentifier a little more flexible to support more use cases.

        * wtf/ObjectIdentifier.h:
        (WTF::ObjectIdentifier::toUInt64 const):
        (WTF::makeObjectIdentifier):

2017-11-17  Simon Fraser  <simon.fraser@apple.com>

        Add a TimingScope class for microbenchmarking sections of code
        https://bugs.webkit.org/show_bug.cgi?id=179825

        Reviewed by Zalan Bujtas.
        
        Add a class, similar to B3TimingScope, which makes it easy to microbenchmark
        sections of code. Use looks like:
        
        TimingScope scope("some label", 100);
        
        where this will print mean scope duration every 100 calls. Sample output:
        
            FETurbulence::platformApplySoftware: 100 calls, mean duration: 3.073181ms
            FETurbulence::platformApplySoftware: 200 calls, mean duration: 3.074612ms
            FETurbulence::platformApplySoftware: 300 calls, mean duration: 3.065722ms
        
        Because TimingScope needs to store state beween invocations, and there may be
        multiple TimingScopes in use at the same time, data is stored in a global
        hash map with atomic access.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/TimingScope.cpp: Added.
        (WTF::TimingScope::scopeDidEnd):
        * wtf/TimingScope.h: Added.
        (WTF::TimingScope::TimingScope):
        (WTF::TimingScope::~TimingScope):

2017-11-17  Alex Christensen  <achristensen@webkit.org>

        Clean up after r224952
        https://bugs.webkit.org/show_bug.cgi?id=179809

        Reviewed by Brady Eidson.

        * wtf/MainThread.cpp:
        (WTF::dispatchFunctionsFromMainThread):
        (WTF::callOnMainThread):
        * wtf/MainThread.h:
        * wtf/generic/MainThreadGeneric.cpp:
        (WTF::scheduleDispatchFunctionsOnMainThread):
        (WTF::currentRunLoopInCommonMode): Deleted.
        * wtf/mac/MainThreadMac.mm:
        (WTF::scheduleDispatchFunctionsOnMainThread):
        (WTF::currentRunLoopInCommonMode): Deleted.
        * wtf/win/MainThreadWin.cpp:
        (WTF::scheduleDispatchFunctionsOnMainThread):
        (WTF::currentRunLoopInCommonMode): Deleted.

2017-11-15  Alex Christensen  <achristensen@webkit.org>

        Fix fast/events/message-port-postMessage-recursive.html after r224896
        https://bugs.webkit.org/show_bug.cgi?id=179749

        Reviewed by Jer Noble.

        * wtf/mac/MainThreadMac.mm:
        (WTF::currentRunLoopInCommonMode):
        We sometimes run the runloop in kCFRunLoopDefaultMode, which should also have the responsiveness optimization.
        This allows the runloop to continue to iterate when we are doing lots of things on the main thread.
        CFRunLoop.h has a special definition of these two constants.

2017-11-15  Alex Christensen  <achristensen@webkit.org>

        WebViews scheduled in custom run loop modes should be able to do more than 50ms of work at a time
        https://bugs.webkit.org/show_bug.cgi?id=179742
        <rdar://problem/35519421>

        Reviewed by Jer Noble.
        
        In r224687 I fixed loading from scheduled WebViews with custom run loop modes, but in 
        dispatchFunctionsFromMainThread we have an optimization to yield the run loop if we have already
        done more than 50ms of work on the main thread in this run loop iteration.  When this happens
        and we are running in a custom run loop mode, we disable this responsiveness optimization.
        We are calling CFRunLoopRunInMode or [NSRunLoop acceptInputForMode:beforeDate:] in a while loop anyways,
        so we would not benefit from a responsiveness optimization.  We definitely don't want to reschedule
        on the main thread in the common run loop mode in this case.

        * wtf/MainThread.cpp:
        (WTF::dispatchFunctionsFromMainThread):
        * wtf/MainThread.h:
        * wtf/generic/MainThreadGeneric.cpp:
        (WTF::currentRunLoopInCommonMode):
        * wtf/mac/MainThreadMac.mm:
        (WTF::currentRunLoopInCommonMode):
        * wtf/win/MainThreadWin.cpp:
        (WTF::currentRunLoopInCommonMode):

2017-11-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224863.

        Introduced LayoutTest crashes on iOS Simulator.

        Reverted changeset:

        "Move JSONValues to WTF and convert uses of InspectorValues.h
        to JSONValues.h"
        https://bugs.webkit.org/show_bug.cgi?id=173793
        https://trac.webkit.org/changeset/224863

2017-11-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move JSONValues to WTF and convert uses of InspectorValues.h to JSONValues.h
        https://bugs.webkit.org/show_bug.cgi?id=173793

        Reviewed by Brian Burg.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/JSONValues.cpp: Renamed from Source/JavaScriptCore/inspector/InspectorValues.cpp.
        (JSON::Value::null):
        (JSON::Value::create):
        (JSON::Value::asValue):
        (JSON::Value::asObject):
        (JSON::Value::asArray):
        (JSON::Value::parseJSON):
        (JSON::Value::toJSONString const):
        (JSON::Value::asBoolean const):
        (JSON::Value::asDouble const):
        (JSON::Value::asInteger const):
        (JSON::Value::asString const):
        (JSON::Value::writeJSON const):
        (JSON::Value::memoryCost const):
        (JSON::ObjectBase::~ObjectBase):
        (JSON::ObjectBase::asObject):
        (JSON::ObjectBase::openAccessors):
        (JSON::ObjectBase::memoryCost const):
        (JSON::ObjectBase::getBoolean const):
        (JSON::ObjectBase::getString const):
        (JSON::ObjectBase::getObject const):
        (JSON::ObjectBase::getArray const):
        (JSON::ObjectBase::getValue const):
        (JSON::ObjectBase::remove):
        (JSON::ObjectBase::writeJSON const):
        (JSON::ObjectBase::ObjectBase):
        (JSON::ArrayBase::~ArrayBase):
        (JSON::ArrayBase::asArray):
        (JSON::ArrayBase::writeJSON const):
        (JSON::ArrayBase::ArrayBase):
        (JSON::ArrayBase::get const):
        (JSON::Object::create):
        (JSON::Array::create):
        (JSON::ArrayBase::memoryCost const):
        * wtf/JSONValues.h: Renamed from Source/JavaScriptCore/inspector/InspectorValues.h.
        (JSON::ObjectBase::find):
        (JSON::ObjectBase::find const):
        (JSON::ObjectBase::setBoolean):
        (JSON::ObjectBase::setInteger):
        (JSON::ObjectBase::setDouble):
        (JSON::ObjectBase::setString):
        (JSON::ObjectBase::setValue):
        (JSON::ObjectBase::setObject):
        (JSON::ObjectBase::setArray):
        (JSON::ArrayBase::pushBoolean):
        (JSON::ArrayBase::pushInteger):
        (JSON::ArrayBase::pushDouble):
        (JSON::ArrayBase::pushString):
        (JSON::ArrayBase::pushValue):
        (JSON::ArrayBase::pushObject):
        (JSON::ArrayBase::pushArray):

2017-11-14  Alex Christensen  <achristensen@webkit.org>

        Remove Cocoa CFURLConnection loading code
        https://bugs.webkit.org/show_bug.cgi?id=179688

        Reviewed by Antti Koivisto.

        * wtf/SchedulePair.h:
        * wtf/SchedulePairMac.mm:

2017-11-13  Brady Eidson  <beidson@apple.com>

        Massive "Server-process-to-context-process" connection overhaul.
        https://bugs.webkit.org/show_bug.cgi?id=179554

        Reviewed by Chris Dumez.

        * wtf/ObjectIdentifier.h:
        (WTF::generateObjectIdentifier):
        (WTF::makeObjectIdentifier): Deleted.

2017-11-13  JF Bastien  <jfbastien@apple.com>

        std::expected: fix and test move
        https://bugs.webkit.org/show_bug.cgi?id=179617

        Reviewed by Alex Christensen.

        Non-copyable move types should be able to be in an expected
        properly.

        * wtf/Expected.h:
        (WTF::Expected::value const):
        (WTF::Expected::error):
        (WTF::Expected::error const):

2017-11-10  Jer Noble  <jer.noble@apple.com>

        Add a FairPlay Streaming based CDM for Modern EME
        https://bugs.webkit.org/show_bug.cgi?id=179499
        <rdar://problem/35445033>

        Reviewed by Eric Carlson.

        * wtf/Platform.h:

2017-11-10  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r224267): WebViews scheduled with custom run loop modes don't load
        https://bugs.webkit.org/show_bug.cgi?id=179515
        <rdar://problem/35445245>

        Reviewed by Andy Estes.

        * wtf/MainThread.cpp:
        (WTF::callOnMainThread):
        * wtf/MainThread.h:
        (WTF::callOnMainThread):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/generic/MainThreadGeneric.cpp:
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/mac/MainThreadMac.mm:
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/win/MainThreadWin.cpp:
        (WTF::scheduleDispatchFunctionsOnMainThread):
        Add an optional parameter which is an array of run loop mode names to pass to performSelectorOnMainThread.

2017-11-10  Ms2ger  <Ms2ger@igalia.com>

        Export tryFastZeroedMalloc.
        https://bugs.webkit.org/show_bug.cgi?id=179051

        Reviewed by Michael Catanzaro.

        The other functions were exported in bug 72855. There does not seem to be a
        reason not to export this one.

        * wtf/FastMalloc.h:

2017-11-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r224661.

        Broke build on several internal Mac/iOS bots

        Reverted changeset:

        "Ignore HSTS for partitioned, cross-origin subresource
        requests"
        https://bugs.webkit.org/show_bug.cgi?id=178993
        https://trac.webkit.org/changeset/224661

2017-11-09  John Wilander  <wilander@apple.com>

        Ignore HSTS for partitioned, cross-origin subresource requests
        https://bugs.webkit.org/show_bug.cgi?id=178993
        <rdar://problem/34962462>

        Reviewed by Brent Fulgham.

        * wtf/Platform.h:
            Added HAVE_CFNETWORK_IGNORE_HSTS.

2017-11-08  Tim Horton  <timothy_horton@apple.com>

        [ios-simulator] API test WebKit.BundleParameters is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=178363
        <rdar://problem/35043144>

        Reviewed by Brent Fulgham.

        * wtf/RefCounter.h:
        (WTF::RefCounter<T>::Count::deref):
        (WTF::RefCounter<T>::Count::refCounterWasDeleted):
        (WTF::RefCounter<T>::~RefCounter):
        If a RefCounter::Count is deref()'d and drops its RefCounter's value to
        zero, and the RefCounter is deleted in that valueDidChangeCallback, it
        will delete the Counter that is in the middle of deref(). Keep track
        of whether we're inside the callback and defer the deletion until
        the end of deref().

2017-11-07  Maciej Stachowiak  <mjs@apple.com>

        Get rid of unsightly hex numbers from unified build object files
        https://bugs.webkit.org/show_bug.cgi?id=179410

        Reviewed by Saam Barati.

        * Scripts/generate-unified-source-bundles.rb: For extensions other than "cpp", also include 
        the extension in the base name of the file, to avoid ugly Xcode-generated object file names.

2017-11-07  Filip Pizlo  <fpizlo@apple.com>

        Disable isoheaps on iOS

        Reviewed by Ryosuke Niwa.

        * wtf/IsoMalloc.h:

2017-11-07  Brady Eidson  <beidson@apple.com>

        Implement "UpdateWorkerState" and use it
        https://bugs.webkit.org/show_bug.cgi?id=179318

        Reviewed by Chris Dumez.

        * wtf/ObjectIdentifier.h:
        (WTF::ObjectIdentifier::loggingString const):

2017-11-07  Michael Saboff  <msaboff@apple.com>

        Add SPI function pointers qualifiers for CPU(ARM64E)
        https://bugs.webkit.org/show_bug.cgi?id=179383

        Reviewed by Mark Lam.

        For ARM64E, use the appropriate SPI qualifiers for helper function pointers.

        * wtf/BlockPtr.h:
        (WTF::BlockPtr<R):

2017-10-31  Filip Pizlo  <fpizlo@apple.com>

        bmalloc should support strictly type-segregated isolated heaps
        https://bugs.webkit.org/show_bug.cgi?id=178108

        Reviewed by Saam Barati, Simon Fraser, and Ryosuke Niwa.
        
        This just adds an easy way of using the bmalloc IsoHeap API in WebKit. If bmalloc is not
        enabled, these macros will just make the object FastMalloced.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/FastTLS.h:
        * wtf/IsoMalloc.h: Added.
        * wtf/IsoMallocInlines.h: Added.

2017-11-06  Christopher Reid  <chris.reid@sony.com>

        Use enum classes within FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=175172

        Reviewed by Myles C. Maxfield.

        Adding a helper function for converting enum classes to their underlying type when necessary.

        * wtf/EnumTraits.h:

2017-11-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Always use SET_AND_EXPOSE_TO_BUILD to set build variables
        https://bugs.webkit.org/show_bug.cgi?id=179038

        Reviewed by Žan Doberšek.

        * wtf/Platform.h:

2017-11-03  Chris Dumez  <cdumez@apple.com>

        Use a single identifier type to identify Service Workers
        https://bugs.webkit.org/show_bug.cgi?id=179192

        Reviewed by Brady Eidson.

        Introduce class for strongly typed identifiers. This avoids mixing up
        different types of identifiers.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/ObjectIdentifier.h: Added.
        (WTF::ObjectIdentifier::encode const):
        (WTF::ObjectIdentifier::decode):
        (WTF::ObjectIdentifier::operator== const):
        (WTF::ObjectIdentifier::operator!= const):
        (WTF::ObjectIdentifier::ObjectIdentifier):
        (WTF::makeObjectIdentifier):
        (WTF::ObjectIdentifierHash::hash):
        (WTF::ObjectIdentifierHash::equal):
        (WTF::HashTraits<ObjectIdentifier<T>>::emptyValue):
        (WTF::HashTraits<ObjectIdentifier<T>>::constructDeletedValue):
        (WTF::HashTraits<ObjectIdentifier<T>>::isDeletedValue):

2017-11-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224353.

        Breaks internal builds.

        Reverted changeset:

        "Ignore HSTS for partitioned, cross-origin subresource
        requests"
        https://bugs.webkit.org/show_bug.cgi?id=178993
        https://trac.webkit.org/changeset/224353

2017-11-02  John Wilander  <wilander@apple.com>

        Ignore HSTS for partitioned, cross-origin subresource requests
        https://bugs.webkit.org/show_bug.cgi?id=178993
        <rdar://problem/34962462>

        Reviewed by Brent Fulgham and Alex Christensen.

        * wtf/Platform.h:
            Added HAVE_CFNETWORK_IGNORE_HSTS.

2017-11-02  Frederic Wang  <fwang@igalia.com>

        Add references to bug 179167 in FIXME comments
        https://bugs.webkit.org/show_bug.cgi?id=179168

        Reviewed by Daniel Bates.

        * wtf/FeatureDefines.h:

2017-11-01  Jiewen Tan  <jiewen_tan@apple.com>

        Let is<T>() accept RefPtrs
        https://bugs.webkit.org/show_bug.cgi?id=178612
        <rdar://problem/35102004>

        Reviewed by Ryosuke Niwa.

        Add support for is<T>() for RefPtrs.

        * wtf/RefPtr.h:
        (WTF::is):

2017-11-01  Simon Fraser  <simon.fraser@apple.com>

        Misc display list and other cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179150

        Reviewed by Tim Horton.

        Add system trace points for display list recording.

        * wtf/SystemTracing.h:

2017-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use LazyNeverDestroyed instead of DEFINE_GLOBAL
        https://bugs.webkit.org/show_bug.cgi?id=174979

        Reviewed by Yusuke Suzuki.

        DEFINE_GLOBAL is not used anymore. Remove it.

        * WTF.xcodeproj/project.pbxproj: Removed StaticConstructors.h
        * config.h: Removed definitions of SKIP_STATIC_CONSTRUCTORS_ON_MSVC and SKIP_STATIC_CONSTRUCTORS_ON_GCC.
        * wtf/CMakeLists.txt: Removed StaticConstructors.h
        * wtf/StaticConstructors.h: Removed.

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Fix build warnings
        https://bugs.webkit.org/show_bug.cgi?id=178899

        Reviewed by Carlos Alberto Lopez Perez.

        * wtf/PlatformWPE.cmake:

2017-10-27  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] Add WTF files for wincairo webkit
        https://bugs.webkit.org/show_bug.cgi?id=176894

        Reviewed by Alex Christensen.

        * wtf/PlatformWin.cmake:
        * wtf/WorkQueue.cpp:
        * wtf/WorkQueue.h:
        * wtf/win/Win32Handle.h:
        * wtf/win/WorkItemContext.cpp: Added.
        (WTF::WorkItemContext::WorkItemContext):
        (WTF::WorkItemContext::create):
        (WTF::WorkItemContext::~WorkItemContext):
        * wtf/win/WorkItemContext.h: Added.
        (WTF::WorkItemContext::handle):
        (WTF::WorkItemContext::waitHandle):
        (WTF::WorkItemContext::Function<void):
        (WTF::WorkItemContext::queue const):
        * wtf/win/WorkQueueWin.cpp:
        (WTF::WorkQueue::handleCallback):
        (WTF::WorkQueue::registerHandle):
        (WTF::WorkQueue::unregisterAndCloseHandle):
        (WTF::WorkQueue::unregisterWaitAndDestroyItemSoon):
        (WTF::WorkQueue::unregisterWaitAndDestroyItemCallback):

2017-10-27  Keith Miller  <keith_miller@apple.com>

        Add unified source list files and build scripts to Xcode project navigator
        https://bugs.webkit.org/show_bug.cgi?id=178959

        Reviewed by Andy Estes.

        * WTF.xcodeproj/project.pbxproj:

2017-10-26  Mark Lam  <mark.lam@apple.com>

        JSRopeString::RopeBuilder::append() should check for overflows.
        https://bugs.webkit.org/show_bug.cgi?id=178385
        <rdar://problem/35027468>

        Reviewed by Saam Barati.

        * wtf/CheckedArithmetic.h:

2017-10-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r222945.
        https://bugs.webkit.org/show_bug.cgi?id=178818

        "It made WasmBench crash" (Requested by saamyjoon on #webkit).

        Reverted changeset:

        "bmalloc mutex should be adaptive"
        https://bugs.webkit.org/show_bug.cgi?id=177839
        https://trac.webkit.org/changeset/222945

2017-10-25  Zan Dobersek  <zdobersek@igalia.com>

        Make SERVICE_WORKER feature buildable on GTK, WPE
        https://bugs.webkit.org/show_bug.cgi?id=178574

        Reviewed by Carlos Garcia Campos.

        * wtf/Identified.h: Explicitly include the <atomic> header since
        std::atomic<> is used in the ThreadSafeIdentified definition.

2017-10-24  Michael Saboff  <msaboff@apple.com>

        WTF: Eliminated PLATFORM checks for HAVE_MACH_EXCEPTIONS
        https://bugs.webkit.org/show_bug.cgi?id=178747

        Reviewed by Saam Barati.

        Removed unnecessary PLATFORM checks as they can cause build failures
        when the include file is present.

        * wtf/Platform.h:

2017-10-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Use fastJoin in Array#toString
        https://bugs.webkit.org/show_bug.cgi?id=178062

        Reviewed by Darin Adler.

        A bit cleaning up to use StringImpl::copyChars instead of
        using for-loop directly.

        * wtf/text/StringView.h:
        (WTF::StringView::getCharactersWithUpconvert const):

2017-10-20  Antoine Quint  <graouts@apple.com>

        [Web Animations] Provide basic timeline and animation interfaces
        https://bugs.webkit.org/show_bug.cgi?id=178526

        Reviewed by Dean Jackson.

        Remove the WEB_ANIMATIONS compile-time flag.

        * wtf/FeatureDefines.h:

2017-10-19  Keith Miller  <keith_miller@apple.com>

        REGRESSION (r223476): WebCore exports symbols with names belonging to other frameworks
        https://bugs.webkit.org/show_bug.cgi?id=178424

        Reviewed by David Kilzer.

        This patch moves the wrapper function sharing the name of the externed function
        to the source file and marks it as always inline. Marking it as inline prevents
        the framework from exporting it.

        * wtf/cocoa/SoftLinking.h:

2017-10-18  Keith Miller  <keith_miller@apple.com>

        Setup WebCore build to start using unified sources.
        https://bugs.webkit.org/show_bug.cgi?id=178362

        Reviewed by Tim Horton.

        There are a number of changes to the bundler script. First, it is
        now possible to enable or disable building files based on if the
        associated feature flag is enabled or not. The syntax for this is
        similar to how we do #ifs in C++ code. e.g.

        #if ENABLE_APPLE_PAY
            myApplePayFile.cpp
        #endif

        would enable myApplePayFile.cpp if and only if the APPLE_PAY
        feature define is set.

        I also changed comments from # to // to make it less likely they
        would be confused with a #if.

        Finally, this patch enables bundling files in the same relative
        directory across source list files. Previously, if
        SourcesCocoa.txt had platform/cf/foo.cpp and SourcesMac.txt had
        platform/cf/bar.cpp those files would not be put in the same
        unified source bundle. Now, those files will be put into the same
        bundle but bar.cpp will always follow foo.cpp. The idea is that by
        putting more specific files after more general files we can avoid
        random build failures.

        * Scripts/generate-unified-source-bundles.rb:

2017-10-18  Konstantin Tokarev  <annulen@yandex.ru>

        REGRESSION(r217771): nullTerminatedWCharToString loses last character of input string
        https://bugs.webkit.org/show_bug.cgi?id=178444

        Reviewed by Per Arne Vollan.

        * wtf/text/win/WCharStringExtras.h:
        (WTF::nullTerminatedWCharToString):

2017-10-17  Keith Miller  <keith_miller@apple.com>

        Change WebCore sources to work with unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=178229

        Rubber stamped by Tim Horton.

        * wtf/Platform.h:
        * wtf/cocoa/SoftLinking.h:

2017-10-16  David Kilzer  <ddkilzer@apple.com>

        Add RELEASE_ASSERT_WITH_SECURITY_IMPLICATION() macro
        <https://webkit.org/b/178269>

        Reviewed by Alex Christensen.

        * wtf/Assertions.h:
        (RELEASE_ASSERT_WITH_SECURITY_IMPLICATION): Add macro.

2017-10-14  Sam Weinig  <sam@webkit.org>

        Remove HashCountedSet's copyToVector functions
        https://bugs.webkit.org/show_bug.cgi?id=178215

        Reviewed by Daniel Bates.

        * wtf/HashCountedSet.h:
        (WTF::copyToVector): Deleted.
        
            They are replaced by either copyToVector(hashCountedSet) or copyToVector(hashCountedSet.values())

2017-10-13  Sam Weinig  <sam@webkit.org>

        Adopt type trait template aliases everywhere in WTF
        https://bugs.webkit.org/show_bug.cgi?id=178299

        Reviewed by Yusuke Suzuki.

        Adopt type trait template aliases (e.g. replace 'typename std::make_unsigned<Source>::type'
        with 'std::make_unsigned_t<Source>'). Also adopt using over typedef consistently.

        * wtf/Atomics.h:
        * wtf/CagedUniquePtr.h:
        * wtf/CheckedArithmetic.h:
        * wtf/CompletionHandler.h:
        * wtf/Function.h:
        * wtf/HashCountedSet.h:
        * wtf/HashFunctions.h:
        * wtf/HashMap.h:
        * wtf/HashSet.h:
        * wtf/HashTable.h:
        * wtf/HashTraits.h:
        * wtf/IndexedContainerIterator.h:
        * wtf/IteratorAdaptors.h:
        * wtf/KeyValuePair.h:
        * wtf/LEBDecoder.h:
        * wtf/ListHashSet.h:
        * wtf/MathExtras.h:
        * wtf/NeverDestroyed.h:
        * wtf/OptionSet.h:
        * wtf/RetainPtr.h:
        * wtf/SizeLimits.cpp:
        * wtf/StdLibExtras.h:
        * wtf/SystemFree.h:
        * wtf/ThreadSpecific.h:
        * wtf/TypeCasts.h:
        * wtf/Vector.h:
        * wtf/text/IntegerToStringConversion.h:

2017-10-13  Jer Noble  <jer.noble@apple.com>

        Performance: Skip texture upload if source image and destination texture haven't changed
        https://bugs.webkit.org/show_bug.cgi?id=178254
        <rdar://problem/34968181>

        Reviewed by Dean Jackson.

        Add a new class, UnsafePointer, for safely holding pointers to objects with uncontrolled lifetimes.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/UnsafePointer.h: Added.
        (WTF::UnsafePointer::UnsafePointer):
        (WTF::UnsafePointer::operator== const):
        (WTF::UnsafePointer::operator!= const):
        (WTF::UnsafePointer::operator bool const):
        (WTF::operator==):
        (WTF::operator!=):

2017-10-13  Per Arne Vollan  <pvollan@apple.com>

        [Win] When built with VS2017, MiniBrowser crashes on startup.
        https://bugs.webkit.org/show_bug.cgi?id=175209

        Reviewed by Daniel Bates.

        Add AtomicString(const StaticStringImpl*) constructor. This is needed since
        this patch adds constexpr to the static, global StaticStringImpl objects
        generated in WebCore/bindings/scripts/StaticString.pm.

        * wtf/text/AtomicString.h:
        (WTF::AtomicString::AtomicString):
        * wtf/text/AtomicStringImpl.cpp:
        (WTF::addStatic):
        (WTF::AtomicStringImpl::add):
        * wtf/text/AtomicStringImpl.h:
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::assertHashIsCorrect const):
        (WTF::StringImpl::assertHashIsCorrect): Deleted.

2017-10-12  Alex Christensen  <achristensen@webkit.org>

        Add Expected, HashMap, HashSet, and SHA1 to wtf/Forward.h
        https://bugs.webkit.org/show_bug.cgi?id=178243

        Reviewed by Tim Horton.

        * wtf/Forward.h:
        * wtf/HashMap.h:
        Move default parameters to Forward.h like we did with Vector.
        * wtf/HashSet.h:
        Also fix indentation.

2017-10-12  Alex Christensen  <achristensen@webkit.org>

        Add CompletionHandler and HashCountedSet to wtf/Forward.h
        https://bugs.webkit.org/show_bug.cgi?id=178231

        Reviewed by Tim Horton.

        * wtf/Forward.h:
        * wtf/HashCountedSet.h:

2017-10-11  Sam Weinig  <sam@webkit.org>

        Remove out-parameter variants of copyToVector
        https://bugs.webkit.org/show_bug.cgi?id=178155

        Reviewed by Tim Horton.

        * wtf/HashMap.h:
        (WTF::copyToVector): Deleted.
        * wtf/HashSet.h:
        (WTF::copyToVector): Deleted.
        
            Remove copyToVector.
        
        * wtf/Vector.h:
        (WTF::copyToVectorSpecialization):
        
            Add another version of copyToVector, called copyToVectorSpecialization, that allows
            you to specify the entire specialization for the Vector you want to copy to. This
            can be useful if you want your resulting Vector to have an inline capacity. 

2017-10-12  Sam Weinig  <sam@webkit.org>

        It should be possible to iterate just the values (and not the counts) of a HashCountedSet
        https://bugs.webkit.org/show_bug.cgi?id=178169

        Reviewed by Daniel Bates.

        Cleanup (fix indentation, simplify type names, adopt using), and add a values() range to
        HashCountedSet. This will allow getting a Vector of all the values (and not the counts)
        using the new copyToVector. 

        * wtf/HashCountedSet.h:

2017-10-11  Michael Saboff  <msaboff@apple.com>

        [JSC] Add ability to build with ARMV8 ILP32 ABI
        https://bugs.webkit.org/show_bug.cgi?id=178194

        Reviewed by Saam Barati.

        For ARMV8 32 bit ABI, use JSVALUE32_64 and the CLOOP.

        * wtf/Platform.h:

2017-10-11  Youenn Fablet  <youenn@apple.com>

        Add API to clean CacheStorage data
        https://bugs.webkit.org/show_bug.cgi?id=178034

        Reviewed by Chris Dumez.

        Moving CallbackAggregator pattern into its own class for easier reuse.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CallbackAggregator.h: Added.
        (WTF::CallbackAggregator::create):
        (WTF::CallbackAggregator::~CallbackAggregator):
        (WTF::CallbackAggregator::CallbackAggregator):

2017-10-10  Sam Weinig  <sam@webkit.org>

        Replace copyKeysToVector/copyValuesToVector with copyToVector(map.keys())/copyToVector(map.values())
        https://bugs.webkit.org/show_bug.cgi?id=178102

        Reviewed by Tim Horton.

        * wtf/HashMap.h:
        (WTF::copyKeysToVector): Deleted.
        (WTF::copyValuesToVector): Deleted.
        
            Remove copyKeysToVector and copyValuesToVector which are no longer used.

2017-10-09  Youenn Fablet  <youenn@apple.com>

        Vector should be able to easily create from a list of movable only items
        https://bugs.webkit.org/show_bug.cgi?id=176432

        Reviewed by Darin Adler.

        Adding static from method to construct a Vector from movable-only items.
        This may also be used instead of initializer list constructor for types that would benefit of being moved.

        * wtf/Vector.h:
        (WTF::Vector::Vector):
        (WTF::Vector::from):
        (WTF::Vector::uncheckedInitialize): Introduced as an optimization to set the vector size once.
        (WTF::Malloc>::reserveInitialCapacity):

2017-10-09  Tim Horton  <timothy_horton@apple.com>

        Disable INPUT_TYPE_COLOR in FeatureDefines.h
        https://bugs.webkit.org/show_bug.cgi?id=178103
        <rdar://problem/34872127>

        Reviewed by Simon Fraser.

        * wtf/FeatureDefines.h:
        Because FeatureDefines.h overrides features that are not enabled in
        FeatureDefines.xcconfig, you currently have to turn INPUT_TYPE_COLOR
        off in two places. Since we only ever want it on for Mac, it's OK
        to depend on the xcconfig defining it.

2017-10-09  Sam Weinig  <sam@webkit.org>

        Make HashMap::keys() and HashMap::values() work with WTF::map/WTF::copyToVector
        https://bugs.webkit.org/show_bug.cgi?id=178072

        Reviewed by Darin Adler.

        Introduce SizedIteratorRange, a variant of IteratorRange that includes
        a reference to a backing container in order to get the size of container.
        This is useful for algorithms like WTF::map and WTF::copyToVector, that
        can use the size to efficiently allocate things of the correct size.

        The main beneficiary are HashMap's keys() and values() functions which
        used to return IteratorRanges and now return SizedIteratorRange. This
        allows us to remove (in a future change) copyKeysToVector() and
        copyValuesToVector() by replacing them with copyToVector(map.keys()) and
        copyToVector(map.values()) respectively.

        * wtf/HashMap.h:
        * wtf/IteratorRange.h:
        (WTF::SizedIteratorRange::SizedIteratorRange):
        (WTF::SizedIteratorRange::size const):
        (WTF::SizedIteratorRange::begin const):
        (WTF::SizedIteratorRange::end const):
        (WTF::makeSizedIteratorRange):

2017-10-08  Sam Weinig  <sam@webkit.org>

        It should be possible to create a ListHashSet with a std::initializer_list.
        https://bugs.webkit.org/show_bug.cgi?id=178070

        Reviewed by Darin Adler.

        * wtf/ListHashSet.h:
        (WTF::U>::ListHashSet):
        Add a constructor that takes a std::initializer_list.

2017-10-08  Sam Weinig  <sam@webkit.org>

        Address additional feedback from Darin for r223039 and sort the using declarations.

        * wtf/Vector.h:

2017-10-08  Sam Weinig  <sam@webkit.org>

        There should be a version of copyToVector that returns a Vector, rather than using an out parameter
        https://bugs.webkit.org/show_bug.cgi?id=177732

        Reviewed by Saam Barati.

        Add two new helper functions, copyToVector and copyToVectorOf, which will be able to
        replace the existing out parameter taking copyToVector. Like it's ancestral namesake,
        copyToVector takes an object that is both iterable (supports begin() and end()) and
        has a size, and returns a Vector with a copy of all the items iterated. The copyToVectorOf
        variant allow the user to specify a type to convert to, so if you have a HashSet<int>
        but want those as floats in a Vector, you can do:
        
            auto floatVector = copyToVectorOf<float>(intSet);

        * wtf/Vector.h:
        (WTF::copyToVector):
        (WTF::copyToVectorOf):

2017-10-08  Darin Adler  <darin@apple.com>

        Fix bugs related to setting reflected floating point DOM attributes
        https://bugs.webkit.org/show_bug.cgi?id=178061

        Reviewed by Sam Weinig.

        * wtf/dtoa.cpp:
        (WTF::formatStringTruncatingTrailingZerosIfNeeded): Fix a bug where
        this function would remove trailing zeroes from the exponent if
        present instead of from the mantissa. This meant that it would
        format 1e10 as "1.00000e+1" instead of "1e+10". Added regression
        tests for this to TestWebKitAPI.

        * wtf/dtoa/utils.h:
        (WTF::double_conversion::StringBuilder::RemoveCharacters): Added.
        Used by the fix above.

        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::number): Note: This function is used by code
        that sets the values of reflected floating point DOM attributes.
        Changed the function to use the rules from numberToString rather
        ones from numberToFixedPrecisionString. This is analogous to
        String::numberToStringECMAScript, and in the future we should change
        String and StringBuilder so this "ECMAScript" semantic is the default
        way to convert a floating point number to a string, and rename the fixed
        precision version that is currently called String::number. I audited
        the small number of sites calling AtomicString::number, by temporarily
        renaming it, and discovered that this is the correct behavior for all;
        none needed fixed precision. Also, fixed a mistake where this explicitly
        converted to String. That was defeating the purpose of having these
        functions in AtomicString: It would allocate a new String and then
        destroy it in the case where an equal string was already in the
        AtomicString table.

2017-10-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r222791 and r222873.
        https://bugs.webkit.org/show_bug.cgi?id=178031

        Caused crashes with workers/wasm LayoutTests (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "WebAssembly: no VM / JS version of everything but Instance"
        https://bugs.webkit.org/show_bug.cgi?id=177473
        http://trac.webkit.org/changeset/222791

        "WebAssembly: address no VM / JS follow-ups"
        https://bugs.webkit.org/show_bug.cgi?id=177887
        http://trac.webkit.org/changeset/222873

2017-10-06  Antti Koivisto  <antti@apple.com>

        Minor WeakPtr improvements
        https://bugs.webkit.org/show_bug.cgi?id=177958

        Reviewed by Sam Weinig.

        * wtf/WeakPtr.h:
        (WTF::WeakPtr::operator bool const):

            Make explicit.

        (WTF::WeakPtrFactory::createWeakPtr const):
        (WTF::makeWeakPtr):

            Remove templating from createWeakPtr, makeWeakPtr() is now the
            canonical way to make derived-type WeakPtrs.

2017-10-04  Filip Pizlo  <fpizlo@apple.com>

        bmalloc mutex should be adaptive
        https://bugs.webkit.org/show_bug.cgi?id=177839

        Reviewed by Michael Saboff.
        
        Add some comments that I thought of while copy-pasting this code.

        Reland after fixing ancient WordLock bug: the notify_one has to happen with the lock held
        to ensure it doesn't run after that thread has died.

        * wtf/LockAlgorithmInlines.h:
        * wtf/WordLock.cpp:

2017-10-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Generate a compile error if release is built without compiler optimizations
        https://bugs.webkit.org/show_bug.cgi?id=177665

        Reviewed by Brian Burg.

        For GCC and Clang, generate an error at build time that will alert
        the developer that she is trying to build Release without any compiler
        optimization. A build time error is much better than an unexpected
        "oh, WebKit is really slow ..."  situation later.

        If this was intended, then we tell the developer that she can continue
        by just setting -DRELEASE_WITHOUT_OPTIMIZATIONS in the list of build
        flags.

        The intention of this patch is to ensure that nobody builds Release
        without enabling compiler optimization by mistake.

        * wtf/Compiler.h:

2017-10-05  David Kilzer  <ddkilzer@apple.com>

        Bug 177893: Disable -Wcast-qual for new clang compiler in Apple ports
        <https://webkit.org/b/177893>
        <rdar://problem/33667497>

        Reviewed by Tim Horton.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr::fromStorageType const): Disable warnings for
        -Wcast-qual until we can provide a safe cast function that lets
        us re-enable the warning.

2017-10-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r222893.

        This caused multiple API failures.

        Reverted changeset:

        "bmalloc mutex should be adaptive"
        https://bugs.webkit.org/show_bug.cgi?id=177839
        http://trac.webkit.org/changeset/222893

2017-10-04  Filip Pizlo  <fpizlo@apple.com>

        bmalloc mutex should be adaptive
        https://bugs.webkit.org/show_bug.cgi?id=177839

        Reviewed by Michael Saboff.
        
        Add some comments that I thought of while copy-pasting this code.

        * wtf/LockAlgorithmInlines.h:
        * wtf/WordLock.cpp:

2017-10-04  JF Bastien  <jfbastien@apple.com>

        WTF: Update std::expected to match current proposal
        https://bugs.webkit.org/show_bug.cgi?id=177881

        Reviewed by Mark Lam.

        The proposal is likely to be in C++20 and I've been asked to help co-champion
        it. I'm therefore updating our implementation to more closely match the current
        proposal, and to make sure it'll work for us if standardized.

         - Rename UnexpectedType to Unexpected to match the proposal.
         - Remove relational operators, only equality / inequality remains.
         - Fix minor type signatures.
         - Add UnexpectedType typedef.
         - Uncomment rebind implementation.
         - Add in-place construction tag, as well as explicit error construction tag.
         - Add template unexpected constructor.
         - Note that make_unexpected isn't in the proposal anymore, but we keep it because we don't have C++17 deduction guides.
         - Remove hashing, which isn't in the proposal anymore.

        * wtf/Expected.h:
        (WTF::Unexpected::Unexpected):
        (WTF::Unexpected::value const):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::makeUnexpected):
        (WTF::Expected::Expected):
        (WTF::Expected::operator=):
        (WTF::Expected::getUnexpected const):

2017-10-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r222840.

        This change breaks internal builds.

        Reverted changeset:

        "Generate a compile error if release is built without compiler
        optimizations"
        https://bugs.webkit.org/show_bug.cgi?id=177665
        http://trac.webkit.org/changeset/222840

2017-10-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Generate a compile error if release is built without compiler optimizations
        https://bugs.webkit.org/show_bug.cgi?id=177665

        Reviewed by Michael Catanzaro.

        For GCC and Clang, generate an error at build time that will alert
        the developer that she is trying to build Release without any compiler
        optimization. A build time error is much better than an unexpected
        "oh, WebKit is really slow ..."  situation later.

        If this was intended, then we tell the developer that she can continue
        by just setting -DRELEASE_WITHOUT_OPTIMIZATIONS in the list of build
        flags.

        The intention of this patch is to ensure that nobody builds Release
        without enabling compiler optimization by mistake.

        * wtf/Compiler.h:

2017-10-04  Tomas Popela  <tpopela@redhat.com>

        Allow building without WOFF enabled

        Reviewed by Michael Catanzaro.

        Don't force the WOFF to be turned on, but follow what is set in cmake.

        * wtf/Platform.h:

2017-10-03  Saam Barati  <sbarati@apple.com>

        Implement polymorphic prototypes
        https://bugs.webkit.org/show_bug.cgi?id=176391

        Reviewed by Filip Pizlo.

        * wtf/Box.h:
        (WTF::Box::operator bool const):
        (WTF::Box::operator bool): Deleted.
        Make Box movable. Also ensure its operator bool doesn't do an atomic increment.
        * wtf/RefPtr.h:
        (WTF::RefPtr::operator bool const):
        Add `explicit operator bool()` for RefPtr.

2017-10-03  Antti Koivisto  <antti@apple.com>

        Allow assigning WeakPtr<Derived> to WeakPtr<Base>
        https://bugs.webkit.org/show_bug.cgi?id=177817

        Reviewed by Geoff Garen.

        Add templated copy/move constructors/assignment operators, similar to RefPtr.

        * wtf/WeakPtr.h:
        (WTF::WeakPtrFactory::createWeakPtr const):
        (WTF::weak_reference_upcast):
        (WTF::weak_reference_downcast):
        (WTF::WeakPtr<T>::WeakPtr):
        (WTF::=):
        (WTF::makeWeakPtr):

2017-10-03  JF Bastien  <jfbastien@apple.com>

        WebAssembly: no VM / JS version of everything but Instance
        https://bugs.webkit.org/show_bug.cgi?id=177473

        Reviewed by Filip Pizlo.

        * wtf/StdLibExtras.h:
        (WTF::default_construct_at): this makes code in WasmTable much
        more readable, and is generally useful for generic code

2017-10-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Move LineEnding.{h,cpp} from WebCore/platform/text to wtf/text
        https://bugs.webkit.org/show_bug.cgi?id=176575

        Reviewed by Alex Christensen.

        As part of the PAL effort, we're trying to move everything out of WebCore/platform, one-by-one.
        These LineEnding files belong in WTF.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/text/LineEnding.cpp: Renamed from Source/WebCore/platform/text/LineEnding.cpp.
        (WTF::normalizeLineEndingsToCRLF):
        * wtf/text/LineEnding.h: Renamed from Source/WebCore/platform/text/LineEnding.h.

2017-10-02  Geoffrey Garen  <ggaren@apple.com>

        WeakPtr should have a move constructor
        https://bugs.webkit.org/show_bug.cgi?id=177789

        Reviewed by Chris Dumez.

        * wtf/WeakPtr.h: Now that we just have a RefPtr data member,
        the default operators are sufficient.

2017-10-02  Geoffrey Garen  <ggaren@apple.com>

        NULL WeakPtr should not malloc!
        https://bugs.webkit.org/show_bug.cgi?id=177773

        Reviewed by Antti Koivisto.

        Translating NULL into malloc is... inefficient.

        * wtf/WeakPtr.h:
        (WTF::WeakPtr::WeakPtr):
        (WTF::WeakPtr::operator=):
        (WTF::WeakPtr::clear): Make m_ref lazy so that a NULL m_ref can represent
        a NULL pointer. Normal dereference is no slower because we can rely on
        the fact that dereference of NULL should crash. operator bool() and get()
        incur an extra branch. That's probably worth it to avoid malloc
        for NULL.

2017-10-02  Antti Koivisto  <antti@apple.com>

        Add makeWeakPtr variant that takes pointer
        https://bugs.webkit.org/show_bug.cgi?id=177767

        Reviewed by Zalan Bujtas.

        * wtf/WeakPtr.h:
        (WTF::makeWeakPtr):

        This version deals with the nullptr.

2017-09-30  Antti Koivisto  <antti@apple.com>

        Add makeWeakPtr for easier WeakPtr construction
        https://bugs.webkit.org/show_bug.cgi?id=177706

        Reviewed by Sam Weinig.

        Standalone makeWeakPtr() returns a WeakPtr of the same type as the argument.

        For this to work the argument type needs to expose a (possibly base type) WeakPtrFactory
        as a public weakPtrFactory() member function.

        * wtf/WeakPtr.h:
        (WTF::WeakPtr::operator-> const):
        (WTF::WeakPtr::operator* const): Also add operator*.
        (WTF::makeWeakPtr):

2017-09-28  Jiewen Tan  <jiewen_tan@apple.com>

        WeakPtrFactory should allow downcasting
        https://bugs.webkit.org/show_bug.cgi?id=177389
        <rdar://problem/34604174>

        Reviewed by Geoffrey Garen.

        In this patch, WeakPtrFactory is enhanced with the ability to create WeakPtrs
        of its owner's sub classes and have them point to the same WeakReference.

        * wtf/WeakPtr.h:
        (WTF::WeakPtr::WeakPtr):
        We cannot determine the base class of type T, thus no friends. It is made public
        such that WeakPtrFactory with a base class type U can create a derived type T
        WeakPtr.
        (WTF::WeakPtrFactory::createWeakPtr const):

2017-09-28  Don Olmstead  <don.olmstead@sony.com>

        Sync SYSTEM_MALLOC implementation of Gigacage
        https://bugs.webkit.org/show_bug.cgi?id=177569

        Reviewed by Mark Lam.

        * wtf/Gigacage.h:
        (Gigacage::basePtr):
        (Gigacage::basePtrs):

2017-09-27  Per Arne Vollan  <pvollan@apple.com>

        [Win64] Compile error, 'BasePtrs' is undefined.
        https://bugs.webkit.org/show_bug.cgi?id=177565

        Reviewed by Mark Lam.

        Copy definition of 'BasePtrs' from bmalloc/GigaCage.h.

        * wtf/Gigacage.h:

2017-09-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Followup (r222427): SynchronizedFixedQueue should not have a public constructor
        https://bugs.webkit.org/show_bug.cgi?id=177458

        Reviewed by Tim Horton.

        Since SynchronizedFixedQueue is now derived from ThreadSafeRefCounted<SynchronizedFixedQueue>,
        the standard way to have an instance of it is to call SynchronizedFixedQueue::create()
        which returns a Ref<SynchronizedFixedQueue>. Now it does not make sense to still
        have the constructor public.

        * wtf/SynchronizedFixedQueue.h:
        (WTF::SynchronizedFixedQueue::SynchronizedFixedQueue):

2017-09-24  Keith Miller  <keith_miller@apple.com>

        JSC build should use unified sources for derived sources
        https://bugs.webkit.org/show_bug.cgi?id=177421

        Reviewed by JF Bastien.

        The script now needs to determine if a file is from a derived
        source. This is only relevant for the CMake build since the
        script needs to provide a list of the bundled source files. If the
        script does not provide the full path for derived sources then
        CMake will be unable to find them and the build will fail.

        Additionally, I move the error message for the Xcode build outside
        the main loop. This means that the error message will contain all
        the files you need to add to Xcode and all those files will now be
        written in DerivedSources so they should be easier to add.

        * Scripts/generate-unified-source-bundles.rb:

2017-09-26  Zan Dobersek  <zdobersek@igalia.com>

        Support building JavaScriptCore with the Bionic C library
        https://bugs.webkit.org/show_bug.cgi?id=177427

        Reviewed by Michael Catanzaro.

        * wtf/Platform.h: Define HAVE_MACHINE_CONTEXT when __BIONIC__
        is defined, i.e. when building with the Bionic C library.

2017-09-23  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Images may render partial frames even after loading all the encoded data
        https://bugs.webkit.org/show_bug.cgi?id=177406

        Reviewed by Simon Fraser.

        Make it possible to create a RefPtr<SynchronizedFixedQueue>.

        * wtf/SynchronizedFixedQueue.h:
        (WTF::SynchronizedFixedQueue::create):
        (WTF::SynchronizedFixedQueue::enqueue):
        (WTF::SynchronizedFixedQueue::dequeue):

2017-09-22  Zalan Bujtas  <zalan@apple.com>

        WeakPtrFactory should populate m_ref lazily.
        https://bugs.webkit.org/show_bug.cgi?id=177375

        Reviewed by Geoffrey Garen.

        This helps us with the overhead of initializing WeakPtrFactory for
        objects that rarely end up creating the weak reference.
        -This is in preparation for introducing WeakPtr to RenderObject.

        All credit to Geoffrey Garen.

        * wtf/WeakPtr.h:
        (WTF::WeakReference::get const):
        (WTF::WeakReference::clear):
        (WTF::WeakReference::WeakReference):
        (WTF::WeakPtrFactory::~WeakPtrFactory):
        (WTF::WeakPtrFactory::createWeakPtr const):
        (WTF::WeakPtrFactory::revokeAll):
        (WTF::WeakPtrFactory::WeakPtrFactory): Deleted.

2017-09-21  Alex Christensen  <achristensen@webkit.org>

        Make StringBuilder movable
        https://bugs.webkit.org/show_bug.cgi?id=177311

        Reviewed by Chris Dumez.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::StringBuilder):

2017-09-20  Keith Miller  <keith_miller@apple.com>

        JSC should use unified sources for platform specific files.
        https://bugs.webkit.org/show_bug.cgi?id=177290

        Reviewed by Michael Saboff.

        The unified source bundler script can now handle more than one
        list of sources. Sources will not be bundled across source file
        lists. We want to ensure that changing one platform's sources
        doesn't break another platform's build, as much as
        possible. Additionally, it means that there won't be weird
        performance changes when files are added to an unrelated platform.

        Remove stale reference to generate-unified-source-bundles.rb script
        from Xcode.

        * Scripts/generate-unified-source-bundles.rb:
        * WTF.xcodeproj/project.pbxproj:

2017-09-20  Stephan Szabo  <stephan.szabo@sony.com>

        [Win] WTF: Add alias for process id to use in place of direct uses of pid_t
        https://bugs.webkit.org/show_bug.cgi?id=177017

        Reviewed by Alex Christensen.

        * wtf/ProcessID.h:
        (WTF::getCurrentProcessID):

2017-09-20  Keith Miller  <keith_miller@apple.com>

        JSC Xcode build should use unified sources for platform independent files
        https://bugs.webkit.org/show_bug.cgi?id=177190

        Reviewed by Saam Barati.

        Add a new directory for build scripts that are forwarded to subsequent framework builds.

        * Scripts/generate-unified-source-bundles.rb: Renamed from Source/WTF/generate-unified-source-bundles.rb.
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:

2017-09-20  Per Arne Vollan  <pvollan@apple.com>

        [Win] Cannot find script to generate unified sources.
        https://bugs.webkit.org/show_bug.cgi?id=177014

        Reviewed by Keith Miller.

        Copy the ruby script to WTF/Scripts in the forwarding headers folder.

        * wtf/CMakeLists.txt:

2017-09-20  Alberto Garcia  <berto@igalia.com>

        Fix HPPA and Alpha builds
        https://bugs.webkit.org/show_bug.cgi?id=177224

        Reviewed by Alex Christensen.

        * wtf/Platform.h:

2017-09-19  Youenn Fablet  <youenn@apple.com>

        Allow WTF::map to use any class that is iterable and has a size getter
        https://bugs.webkit.org/show_bug.cgi?id=177026

        Reviewed by Darin Adler.

        Computing the Item type given to the lambda using the iterator instead of ValueType which is specific to Vector.
        Adding the possibility to pass a non const container reference and a lambda taking non const references as well. 

        * wtf/Vector.h:
        (WTF::MapFunctionInspector::acceptsReference):
        (WTF::Mapper::map):
        (WTF::map):

2017-09-19  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Add an ImageDecoder subclass backed by AVFoundation
        https://bugs.webkit.org/show_bug.cgi?id=176825

        Reviewed by Eric Carlson.

        * wtf/Platform.h:

2017-09-18  Andy Estes  <aestes@apple.com>

        [Cocoa] Upstream sandbox-related WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=177047

        Reviewed by Daniel Bates.

        * wtf/spi/darwin/SandboxSPI.h:

2017-09-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r222170.

        The API test added with this change is failing.

        Reverted changeset:

        "Allow WTF::map to use any class that is iterable and has a
        size getter"
        https://bugs.webkit.org/show_bug.cgi?id=177026
        http://trac.webkit.org/changeset/222170

2017-09-18  Youenn Fablet  <youenn@apple.com>

        Allow WTF::map to use any class that is iterable and has a size getter
        https://bugs.webkit.org/show_bug.cgi?id=177026

        Reviewed by Darin Adler.

        Computing the Item type given to the lambda using the iterator instead of ValueType which is specific to Vector.
        Adding the possibility to pass a non const container reference and a lambda taking non const references as well. 

        * wtf/Vector.h:
        (WTF::MapFunctionInspector::acceptsReference):
        (WTF::Mapper::map):
        (WTF::map):

2017-09-15  JF Bastien  <jfbastien@apple.com>

        WTF: use Forward.h when appropriate instead of Vector.h
        https://bugs.webkit.org/show_bug.cgi?id=176984

        Reviewed by Saam Barati.

        There's no need to include Vector.h when Forward.h will suffice. All we need is to move the template default parameters from Vector, and then the forward declaration can be used in so many new places: if a header only takes Vector by reference, rvalue reference, pointer, returns any of these, or has them as members then the header doesn't need to see the definition because the declaration will suffice.

        * wtf/Forward.h:
        * wtf/Vector.h:
        * wtf/text/StringVector.h:

2017-09-15  Keith Miller  <keith_miller@apple.com>

        generate-unified-source-bundles.rb shouldn't write a file that isn't going to change
        https://bugs.webkit.org/show_bug.cgi?id=177021

        Reviewed by Tim Horton.

        * generate-unified-source-bundles.rb:

2017-09-14  Saam Barati  <sbarati@apple.com>

        We should have a way of preventing a caller from making a tail call and we should use it for ProxyObject instead of using build flags
        https://bugs.webkit.org/show_bug.cgi?id=176863

        Reviewed by Keith Miller.

        This patch adds a way for a particular function to mark
        that none of its calls should be tail calls.
        
        It's useful in the following example if you don't want foo
        to do a tail call to bar or baz:
        
        int foo(bool b)
        {
            NO_TAIL_CALLS();
            if (b)
                return baz();
            return bar();
        }
        
        Note that we're not saying that bar/baz should not be tail callable. bar/baz
        may have other callers that are allowed to tail call it. This macro just says
        that foo itself will not perform any tail calls.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/NoTailCalls.h: Added.
        (WTF::NoTailCalls::~NoTailCalls):

2017-09-14  Mark Lam  <mark.lam@apple.com>

        AddressSanitizer: stack-buffer-underflow in JSC::Probe::Page::Page
        https://bugs.webkit.org/show_bug.cgi?id=176874
        <rdar://problem/34436415>

        Reviewed by Saam Barati.

        Added a convenience version of roundUpToMultipleOf() so that it can be applied to
        pointers without the client having to cast explicitly.

        * wtf/StdLibExtras.h:
        (WTF::roundUpToMultipleOf):

2017-09-14  Youenn Fablet  <youenn@apple.com>

        Allow WTF::map to take function as parameter
        https://bugs.webkit.org/show_bug.cgi?id=176909

        Reviewed by Jer Noble.

        * wtf/Vector.h:
        (WTF::map):

2017-09-13  Youenn Fablet  <youenn@apple.com>

        Add a lambda-based map for Vectors
        https://bugs.webkit.org/show_bug.cgi?id=176487

        Reviewed by Darin Adler.

        This helper routine allows refactoring the reserveInitialCapacity/uncheckedAppend pattern, the mapper between source and destination item being a lambda.

        * wtf/Vector.h:
        (WTF::Mapper::transform):
        (WTF::Mapper::map):
        (WTF::map):

2017-09-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DFG] Optimize WeakMap::get by adding intrinsic and fixup
        https://bugs.webkit.org/show_bug.cgi?id=176010

        Reviewed by Filip Pizlo.

        Add inlineGet method with HashTranslator.

        * wtf/HashMap.h:
        (WTF::X>::inlineGet const):
        (WTF::MappedTraits>::inlineGet const):
        (WTF::MappedTraits>::fastGet const): Deleted.
        * wtf/LoggingHashMap.h:

2017-09-12  Keith Miller  <keith_miller@apple.com>

        Do unified source builds for JSC
        https://bugs.webkit.org/show_bug.cgi?id=176076

        Reviewed by Geoffrey Garen.

        This patch adds a script that will automatically bundle source
        files, which is currently only used by the CMake build. It's
        important that we use the same script to generate the bundles
        for the CMake build as the Xcode build. If we didn't do this then
        it's likely that there would be build errors that occur in only
        one build system. On the same note, we also need to be careful to
        not bundle platform specific source files with platform
        independent ones. There are a couple of things the script does not
        currently handle but are not essential for the CMake build. First,
        it does not handle the max bundle size restrictions that the Xcode
        build will require. It also does not handle C files.

        The unified source generator script works by collecting groups of
        up to 8 files from the same directory. We don't bundle files from
        across directories since I didn't see a speedup from doing
        so. Additionally, splitting at the directory boundary means that
        it is less likely that adding a new file will force a "clean"
        build. This would happen because the new file will shift every
        subsequent file into the next unified source bundle.

        Using unified sources appears to be a roughly 3.5x build time
        speed up for clean builds on my MBP and appears to have a
        negligible effect in incremental builds.

        * generate-unified-source-bundles.rb: Added.
        * wtf/Assertions.h:

2017-09-12  Joseph Pecoraro  <pecoraro@apple.com>

        QualifiedName::init should assume AtomicStrings::init was already called
        https://bugs.webkit.org/show_bug.cgi?id=176639

        Reviewed by Sam Weinig.

        * wtf/NeverDestroyed.h:
        (WTF::LazyNeverDestroyed::isConstructed const):

2017-09-12  Brent Fulgham  <bfulgham@apple.com>

        Show punycode to user if a URL mixes Armenian Seh or Vo with other scripts
        https://bugs.webkit.org/show_bug.cgi?id=176578
        <rdar://problem/33906231>

        Reviewed by Alex Christensen.

        * wtf/ASCIICType.h:
        (WTF::isASCIIDigitOrPunctuation): Added helper function to recognize ASCII digits
        and punctuation characters.

2017-09-12  Sam Weinig  <sam@webkit.org>

        [Cleanup] Follow up cleanup for DOMFormData implementation
        https://bugs.webkit.org/show_bug.cgi?id=176740

        Reviewed by Alex Christensen.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/HashTraits.h:
        (WTF::KeyValuePair::KeyValuePair): Deleted.
        * wtf/KeyValuePair.h: Added.
        (WTF::KeyValuePair::KeyValuePair):
        (WTF::makeKeyValuePair):

            Move KeyValuePair to its own header and add a makeKeyValuePair helper.

2017-09-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221854.

        The test added with this change fails on 32-bit JSC bots.

        Reverted changeset:

        "[DFG] Optimize WeakMap::get by adding intrinsic and fixup"
        https://bugs.webkit.org/show_bug.cgi?id=176010
        http://trac.webkit.org/changeset/221854

2017-09-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DFG] Optimize WeakMap::get by adding intrinsic and fixup
        https://bugs.webkit.org/show_bug.cgi?id=176010

        Reviewed by Filip Pizlo.

        Add inlineGet method with HashTranslator.

        * wtf/HashMap.h:
        (WTF::X>::inlineGet const):
        (WTF::MappedTraits>::inlineGet const):
        (WTF::MappedTraits>::fastGet const): Deleted.
        * wtf/LoggingHashMap.h:

2017-09-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [PAL] Unify PlatformUserPreferredLanguages.h with Language.h
        https://bugs.webkit.org/show_bug.cgi?id=176561

        Reviewed by Brent Fulgham.

        WebCore/platform/Language was the only* user of PlatformUserPreferredLanguages (with 1 exception).
        That exception is that JavaScriptCore needed the functionality of WebCore/platform/Language, but it
        couldn't get it because of the layering violation, so instead it erroneously called into
        PlatformUserPreferredLanguages instead. This patch merges these two files into WTF so JSC gets the
        right function and the PAL effort has one less file to move from WebCore/platform into PAL.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Language.cpp: Renamed from Source/WebCore/platform/Language.cpp.
        (WTF::addLanguageChangeObserver):
        (WTF::userPreferredLanguages):
        * wtf/Language.h: Renamed from Source/WebCore/platform/Language.h.
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformUserPreferredLanguages.h: Removed.
        * wtf/PlatformWPE.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/cf/LanguageCF.cpp: Renamed from Source/WTF/wtf/PlatformUserPreferredLanguagesMac.mm.
        (WTF::httpStyleLanguageCode):
        (WTF::languagePreferencesDidChange):
        (WTF::platformUserPreferredLanguages):
        * wtf/unix/LanguageUnix.cpp: Renamed from Source/WTF/wtf/PlatformUserPreferredLanguagesUnix.cpp.
        * wtf/win/LanguageWin.cpp: Renamed from Source/WTF/wtf/PlatformUserPreferredLanguagesWin.cpp.

2017-09-06  Eric Carlson  <eric.carlson@apple.com>

        Require LoggingHelper overrides to provide identifier
        https://bugs.webkit.org/show_bug.cgi?id=176477

        Reviewed by Jer Noble.

        * wtf/Assertions.cpp: No more WTFLogLevelNotice.
        * wtf/Assertions.h: Ditto.

2017-09-06  Per Arne Vollan  <pvollan@apple.com>

        [Win] WebCore failed to build, InbandTextTrackPrivateAVF: base class undefined.
        https://bugs.webkit.org/show_bug.cgi?id=176431

        Reviewed by Alex Christensen.

        AVFoundation header detection should be done in WebCore because of build dependencies. 

        * AVFoundationSupport.py: Removed.
        * wtf/Platform.h:
        * wtf/PlatformWin.cmake:

2017-09-05  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [Win] Fix the wincairo build after r221558 and r221583
        https://bugs.webkit.org/show_bug.cgi?id=176353

        Reviewed by Yusuke Suzuki.

        * wtf/Assertions.cpp:

2017-09-04  Eric Carlson  <eric.carlson@apple.com>

        Switch HTMLMediaElement to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176065

        Reviewed by Jer Noble.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::dump const): Use toString.
        (WTF::MediaTime::toString const): New.

2017-09-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove OS(SOLARIS) support
        https://bugs.webkit.org/show_bug.cgi?id=176341

        Reviewed by Sam Weinig.

        WebKit project does not have stake holders supporting Solaris right now.
        And Solaris + SPARC in 64bit environment does not work well since its
        address space includes non-48bit area. It breaks our JSVALUE64 in JSC.
        In addition, Solaris a bit complicates our threading implementation
        because of its special threading stack.

        This patch removes OS(SOLARIS) and COMPILER(SUNCC) support from WebKit.

        * wtf/Compiler.h:
        * wtf/InlineASM.h:
        * wtf/MathExtras.h:
        (std::isfinite): Deleted.
        (std::signbit): Deleted.
        (std::isinf): Deleted.
        * wtf/NumberOfCores.cpp:
        (WTF::numberOfProcessorCores):
        * wtf/Platform.h:
        * wtf/StackBounds.cpp:
        * wtf/ThreadingPthreads.cpp:

2017-09-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r221494 and r221500.
        https://bugs.webkit.org/show_bug.cgi?id=176258

        This caused the windows build to fail. (Requested by mlewis13
        on #webkit).

        Reverted changesets:

        "Switch HTMLMediaElement to release logging"
        https://bugs.webkit.org/show_bug.cgi?id=176065
        http://trac.webkit.org/changeset/221494

        "Switch HTMLMediaElement to release logging"
        https://bugs.webkit.org/show_bug.cgi?id=176065
        http://trac.webkit.org/changeset/221500

2017-09-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove "malloc" and "free" use
        https://bugs.webkit.org/show_bug.cgi?id=176310

        Reviewed by Darin Adler.

        Use Vector instead.

        * wtf/Assertions.cpp:

2017-09-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, support libstdc++ use with clang
        https://bugs.webkit.org/show_bug.cgi?id=176301

        * wtf/FastMalloc.h:

2017-09-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Add C++03 allocator interface for GCC < 6
        https://bugs.webkit.org/show_bug.cgi?id=176301

        Reviewed by Darin Adler.

        Unfortunately, std::list in GCC < 6 does not support C++11 allocator interface.
        This patch adds C++03 allocator interface to FastAllocator to make it usable
        for std::list. It also allows us to use FastAllocator for data structures that
        only support C++03 interface.

        * wtf/FastMalloc.h:
        (WTF::FastAllocator::allocate):
        (WTF::FastAllocator::construct):
        (WTF::FastAllocator::destroy):
        (WTF::FastAllocator::max_size const):
        (WTF::FastAllocator::select_on_container_copy_construction const):

2017-09-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r221552.

        Broke the build

        Reverted changeset:

        "[WTF] Add C++03 allocator interface for GCC < 6"
        https://bugs.webkit.org/show_bug.cgi?id=176301
        http://trac.webkit.org/changeset/221552

2017-09-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Add C++03 allocator interface for GCC < 6
        https://bugs.webkit.org/show_bug.cgi?id=176301

        Reviewed by Darin Adler.

        Unfortunately, std::list in GCC < 6 does not support C++11 allocator interface.
        This patch adds C++03 allocator interface to FastAllocator to make it usable
        for std::list. It also allows us to use FastAllocator for data structures that
        only support C++03 interface.

        * wtf/FastMalloc.h:
        (WTF::FastAllocator::allocate):
        (WTF::FastAllocator::construct):
        (WTF::FastAllocator::destroy):
        (WTF::FastAllocator::max_size const):
        (WTF::FastAllocator::select_on_container_copy_construction const):

2017-09-03  Sam Weinig  <sam@webkit.org>

        Remove CanvasProxy
        https://bugs.webkit.org/show_bug.cgi?id=176288

        Reviewed by Yusuke Suzuki.

        CanvasProxy does not appear to be in any current HTML spec
        and was disabled and unimplemented in our tree. Time to 
        get rid of it.

        * wtf/FeatureDefines.h:

2017-09-01  Eric Carlson  <eric.carlson@apple.com>

        Switch HTMLMediaElement to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176065

        Reviewed by Jer Noble.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::dump const): Use toString.
        (WTF::MediaTime::toString const): New.
        * wtf/MediaTime.h:
        (PAL::LogArgument<WTF::MediaTime>::toString): Logger template.

2017-08-31  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make USE_CF conditional within Windows
        https://bugs.webkit.org/show_bug.cgi?id=176173

        Reviewed by Alex Christensen.

        * wtf/Platform.h:
        * wtf/PlatformWin.cmake:

2017-08-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221445.

        This change broke Sierra Release builds.

        Reverted changeset:

        "Switch HTMLMediaElement to release logging"
        https://bugs.webkit.org/show_bug.cgi?id=176065
        http://trac.webkit.org/changeset/221445

2017-08-31  Eric Carlson  <eric.carlson@apple.com>

        Switch HTMLMediaElement to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176065

        Reviewed by Jer Noble.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::dump const): Use toString.
        (WTF::MediaTime::toString const): New.
        * wtf/MediaTime.h:
        (PAL::LogArgument<WTF::MediaTime>::toString): Logger template.

2017-08-31  Filip Pizlo  <fpizlo@apple.com>

        All of the different ArrayBuffer::data's should be CagedPtr<>
        https://bugs.webkit.org/show_bug.cgi?id=175515

        Reviewed by Michael Saboff.
        
        Added a specialization so that CagedPtr<void> is valid.

        * wtf/CagedPtr.h:

2017-08-31  Per Arne Vollan  <pvollan@apple.com>

        [Win] Crash under WorkQueue::performWorkOnRegisteredWorkThread in layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=176163

        Reviewed by Alex Christensen.

        My previous attempt at fixing this crash in <http://trac.webkit.org/changeset/221323>
        was incorrect, since it is still crashing on the bot(s). The current theory of why this
        is failing is that the WorkQueue object deletes itself in the middle of the
        performWorkOnRegisteredWorkThread method when calling deref(). There is no need to
        increase the reference count of the work queue for each function we want to call on the
        work thread. It is sufficient to increase it for every work thread we start, and then
        dereference it when the thread ends. We should also not attempt to access members after
        the deref() call, which can potentially be unsafe.
 
        * wtf/win/WorkQueueWin.cpp:
        (WTF::WorkQueue::workThreadCallback):
        (WTF::WorkQueue::performWorkOnRegisteredWorkThread):
        (WTF::WorkQueue::dispatch):

2017-08-22  Filip Pizlo  <fpizlo@apple.com>

        Strings need to be in some kind of gigacage
        https://bugs.webkit.org/show_bug.cgi?id=174924

        Reviewed by Oliver Hunt.
        
        This makes all strings allocations come from the string gigacage. Because we expect string allocation
        to be a hot path, I created specialized allocation paths for the string gigacage. These paths are
        accessible via <wtf/text/StringMalloc.h>. However, those paths are equivalent to saying
        Gigacage::malloc and friends with the Gigacage::String kind.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Deque.h:
        * wtf/FastMalloc.cpp:
        (WTF::fastFree):
        * wtf/FastMalloc.h:
        (WTF::FastMalloc::malloc):
        (WTF::FastMalloc::tryMalloc):
        (WTF::FastMalloc::realloc):
        (WTF::FastMalloc::free):
        * wtf/Forward.h:
        * wtf/Gigacage.cpp:
        (Gigacage::tryMalloc):
        * wtf/Gigacage.h:
        (Gigacage::name):
        * wtf/Vector.h:
        (WTF::VectorBufferBase::allocateBuffer):
        (WTF::VectorBufferBase::tryAllocateBuffer):
        (WTF::VectorBufferBase::reallocateBuffer):
        (WTF::VectorBufferBase::deallocateBuffer):
        (WTF::Malloc>::Vector):
        (WTF::=):
        (WTF::Malloc>::contains const):
        (WTF::Malloc>::findMatching const):
        (WTF::Malloc>::find const):
        (WTF::Malloc>::reverseFind const):
        (WTF::Malloc>::appendIfNotContains):
        (WTF::Malloc>::fill):
        (WTF::Malloc>::appendRange):
        (WTF::Malloc>::expandCapacity):
        (WTF::Malloc>::tryExpandCapacity):
        (WTF::Malloc>::resize):
        (WTF::Malloc>::resizeToFit):
        (WTF::Malloc>::shrink):
        (WTF::Malloc>::grow):
        (WTF::Malloc>::asanSetInitialBufferSizeTo):
        (WTF::Malloc>::asanSetBufferSizeToFullCapacity):
        (WTF::Malloc>::asanBufferSizeWillChangeTo):
        (WTF::Malloc>::reserveCapacity):
        (WTF::Malloc>::tryReserveCapacity):
        (WTF::Malloc>::reserveInitialCapacity):
        (WTF::Malloc>::shrinkCapacity):
        (WTF::Malloc>::append):
        (WTF::Malloc>::tryAppend):
        (WTF::Malloc>::constructAndAppend):
        (WTF::Malloc>::tryConstructAndAppend):
        (WTF::Malloc>::appendSlowCase):
        (WTF::Malloc>::constructAndAppendSlowCase):
        (WTF::Malloc>::tryConstructAndAppendSlowCase):
        (WTF::Malloc>::uncheckedAppend):
        (WTF::Malloc>::appendVector):
        (WTF::Malloc>::insert):
        (WTF::Malloc>::insertVector):
        (WTF::Malloc>::remove):
        (WTF::Malloc>::removeFirst):
        (WTF::Malloc>::removeFirstMatching):
        (WTF::Malloc>::removeAll):
        (WTF::Malloc>::removeAllMatching):
        (WTF::Malloc>::reverse):
        (WTF::Malloc>::map const):
        (WTF::Malloc>::releaseBuffer):
        (WTF::Malloc>::checkConsistency):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::removeRepeatedElements):
        (WTF::minCapacity>::Vector): Deleted.
        (WTF::minCapacity>::contains const): Deleted.
        (WTF::minCapacity>::findMatching const): Deleted.
        (WTF::minCapacity>::find const): Deleted.
        (WTF::minCapacity>::reverseFind const): Deleted.
        (WTF::minCapacity>::appendIfNotContains): Deleted.
        (WTF::minCapacity>::fill): Deleted.
        (WTF::minCapacity>::appendRange): Deleted.
        (WTF::minCapacity>::expandCapacity): Deleted.
        (WTF::minCapacity>::tryExpandCapacity): Deleted.
        (WTF::minCapacity>::resize): Deleted.
        (WTF::minCapacity>::resizeToFit): Deleted.
        (WTF::minCapacity>::shrink): Deleted.
        (WTF::minCapacity>::grow): Deleted.
        (WTF::minCapacity>::asanSetInitialBufferSizeTo): Deleted.
        (WTF::minCapacity>::asanSetBufferSizeToFullCapacity): Deleted.
        (WTF::minCapacity>::asanBufferSizeWillChangeTo): Deleted.
        (WTF::minCapacity>::reserveCapacity): Deleted.
        (WTF::minCapacity>::tryReserveCapacity): Deleted.
        (WTF::minCapacity>::reserveInitialCapacity): Deleted.
        (WTF::minCapacity>::shrinkCapacity): Deleted.
        (WTF::minCapacity>::append): Deleted.
        (WTF::minCapacity>::tryAppend): Deleted.
        (WTF::minCapacity>::constructAndAppend): Deleted.
        (WTF::minCapacity>::tryConstructAndAppend): Deleted.
        (WTF::minCapacity>::appendSlowCase): Deleted.
        (WTF::minCapacity>::constructAndAppendSlowCase): Deleted.
        (WTF::minCapacity>::tryConstructAndAppendSlowCase): Deleted.
        (WTF::minCapacity>::uncheckedAppend): Deleted.
        (WTF::minCapacity>::appendVector): Deleted.
        (WTF::minCapacity>::insert): Deleted.
        (WTF::minCapacity>::insertVector): Deleted.
        (WTF::minCapacity>::remove): Deleted.
        (WTF::minCapacity>::removeFirst): Deleted.
        (WTF::minCapacity>::removeFirstMatching): Deleted.
        (WTF::minCapacity>::removeAll): Deleted.
        (WTF::minCapacity>::removeAllMatching): Deleted.
        (WTF::minCapacity>::reverse): Deleted.
        (WTF::minCapacity>::map const): Deleted.
        (WTF::minCapacity>::releaseBuffer): Deleted.
        (WTF::minCapacity>::checkConsistency): Deleted.
        * wtf/text/AtomicStringImpl.h:
        * wtf/text/CString.cpp:
        (WTF::CStringBuffer::createUninitialized):
        * wtf/text/CString.h:
        * wtf/text/StringBuffer.h:
        (WTF::StringBuffer::StringBuffer):
        (WTF::StringBuffer::~StringBuffer):
        (WTF::StringBuffer::resize):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::~StringImpl):
        (WTF::StringImpl::destroy):
        (WTF::StringImpl::createUninitializedInternalNonEmpty):
        (WTF::StringImpl::reallocateInternal):
        (WTF::StringImpl::releaseAssertCaged const):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::createSubstringSharingImpl):
        (WTF::StringImpl::tryCreateUninitialized):
        (WTF::StringImpl::adopt):
        (WTF::StringImpl::bufferOwnership const):
        (WTF::StringImpl::assertCaged const):
        * wtf/text/StringMalloc.cpp: Added.
        (WTF::tryStringMalloc):
        (WTF::stringMalloc):
        (WTF::stringRealloc):
        (WTF::stringFree):
        * wtf/text/StringMalloc.h: Added.
        (WTF::StringMalloc::malloc):
        (WTF::StringMalloc::tryMalloc):
        (WTF::StringMalloc::realloc):
        (WTF::StringMalloc::free):
        * wtf/text/StringVector.h: Added.
        * wtf/text/SymbolImpl.h:
        * wtf/text/UniquedStringImpl.h:
        * wtf/text/WTFString.h:
        (WTF::String::adopt):
        (WTF::String::assertCaged const):
        (WTF::String::releaseAssertCaged const):

2017-08-30  Chris Dumez  <cdumez@apple.com>

        Implement FileSystemDirectoryReader.readEntries()
        https://bugs.webkit.org/show_bug.cgi?id=176091
        <rdar://problem/34168015>

        Reviewed by Andreas Kling.

        * wtf/CrossThreadCopier.h:
        (WTF::crossThreadCopy):
        * wtf/CrossThreadTask.h:
        Move crossThreadCopy() from CrossThreadTask.h to CrossThreadCopier.h and
        add "using WTF::crossThreadCopy" statement to make it more easily usable
        from WebCore.

2017-08-30  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r221384.

        This patch caused multiple 32-bit JSC test failures.

        Reverted changeset:

        "Strings need to be in some kind of gigacage"
        https://bugs.webkit.org/show_bug.cgi?id=174924
        http://trac.webkit.org/changeset/221384

2017-08-30  Brady Eidson  <beidson@apple.com>

        Add "Identified" base class to replace a whole bunch of custom identifier generators.
        https://bugs.webkit.org/show_bug.cgi?id=176120

        Reviewed by Alex Christensen.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Identified.h: Added.
        (WTF::IdentifiedBase::identifier const):
        (WTF::IdentifiedBase::IdentifiedBase):
        (WTF::Identified::Identified):
        (WTF::ThreadSafeIdentified::ThreadSafeIdentified):

2017-08-22  Filip Pizlo  <fpizlo@apple.com>

        Strings need to be in some kind of gigacage
        https://bugs.webkit.org/show_bug.cgi?id=174924

        Reviewed by Oliver Hunt.
        
        This makes all strings allocations come from the string gigacage. Because we expect string allocation
        to be a hot path, I created specialized allocation paths for the string gigacage. These paths are
        accessible via <wtf/text/StringMalloc.h>. However, those paths are equivalent to saying
        Gigacage::malloc and friends with the Gigacage::String kind.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Deque.h:
        * wtf/FastMalloc.cpp:
        (WTF::fastFree):
        * wtf/FastMalloc.h:
        (WTF::FastMalloc::malloc):
        (WTF::FastMalloc::tryMalloc):
        (WTF::FastMalloc::realloc):
        (WTF::FastMalloc::free):
        * wtf/Forward.h:
        * wtf/Gigacage.cpp:
        (Gigacage::tryMalloc):
        * wtf/Gigacage.h:
        (Gigacage::name):
        * wtf/Vector.h:
        (WTF::VectorBufferBase::allocateBuffer):
        (WTF::VectorBufferBase::tryAllocateBuffer):
        (WTF::VectorBufferBase::reallocateBuffer):
        (WTF::VectorBufferBase::deallocateBuffer):
        (WTF::Malloc>::Vector):
        (WTF::=):
        (WTF::Malloc>::contains const):
        (WTF::Malloc>::findMatching const):
        (WTF::Malloc>::find const):
        (WTF::Malloc>::reverseFind const):
        (WTF::Malloc>::appendIfNotContains):
        (WTF::Malloc>::fill):
        (WTF::Malloc>::appendRange):
        (WTF::Malloc>::expandCapacity):
        (WTF::Malloc>::tryExpandCapacity):
        (WTF::Malloc>::resize):
        (WTF::Malloc>::resizeToFit):
        (WTF::Malloc>::shrink):
        (WTF::Malloc>::grow):
        (WTF::Malloc>::asanSetInitialBufferSizeTo):
        (WTF::Malloc>::asanSetBufferSizeToFullCapacity):
        (WTF::Malloc>::asanBufferSizeWillChangeTo):
        (WTF::Malloc>::reserveCapacity):
        (WTF::Malloc>::tryReserveCapacity):
        (WTF::Malloc>::reserveInitialCapacity):
        (WTF::Malloc>::shrinkCapacity):
        (WTF::Malloc>::append):
        (WTF::Malloc>::tryAppend):
        (WTF::Malloc>::constructAndAppend):
        (WTF::Malloc>::tryConstructAndAppend):
        (WTF::Malloc>::appendSlowCase):
        (WTF::Malloc>::constructAndAppendSlowCase):
        (WTF::Malloc>::tryConstructAndAppendSlowCase):
        (WTF::Malloc>::uncheckedAppend):
        (WTF::Malloc>::appendVector):
        (WTF::Malloc>::insert):
        (WTF::Malloc>::insertVector):
        (WTF::Malloc>::remove):
        (WTF::Malloc>::removeFirst):
        (WTF::Malloc>::removeFirstMatching):
        (WTF::Malloc>::removeAll):
        (WTF::Malloc>::removeAllMatching):
        (WTF::Malloc>::reverse):
        (WTF::Malloc>::map const):
        (WTF::Malloc>::releaseBuffer):
        (WTF::Malloc>::checkConsistency):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::removeRepeatedElements):
        (WTF::minCapacity>::Vector): Deleted.
        (WTF::minCapacity>::contains const): Deleted.
        (WTF::minCapacity>::findMatching const): Deleted.
        (WTF::minCapacity>::find const): Deleted.
        (WTF::minCapacity>::reverseFind const): Deleted.
        (WTF::minCapacity>::appendIfNotContains): Deleted.
        (WTF::minCapacity>::fill): Deleted.
        (WTF::minCapacity>::appendRange): Deleted.
        (WTF::minCapacity>::expandCapacity): Deleted.
        (WTF::minCapacity>::tryExpandCapacity): Deleted.
        (WTF::minCapacity>::resize): Deleted.
        (WTF::minCapacity>::resizeToFit): Deleted.
        (WTF::minCapacity>::shrink): Deleted.
        (WTF::minCapacity>::grow): Deleted.
        (WTF::minCapacity>::asanSetInitialBufferSizeTo): Deleted.
        (WTF::minCapacity>::asanSetBufferSizeToFullCapacity): Deleted.
        (WTF::minCapacity>::asanBufferSizeWillChangeTo): Deleted.
        (WTF::minCapacity>::reserveCapacity): Deleted.
        (WTF::minCapacity>::tryReserveCapacity): Deleted.
        (WTF::minCapacity>::reserveInitialCapacity): Deleted.
        (WTF::minCapacity>::shrinkCapacity): Deleted.
        (WTF::minCapacity>::append): Deleted.
        (WTF::minCapacity>::tryAppend): Deleted.
        (WTF::minCapacity>::constructAndAppend): Deleted.
        (WTF::minCapacity>::tryConstructAndAppend): Deleted.
        (WTF::minCapacity>::appendSlowCase): Deleted.
        (WTF::minCapacity>::constructAndAppendSlowCase): Deleted.
        (WTF::minCapacity>::tryConstructAndAppendSlowCase): Deleted.
        (WTF::minCapacity>::uncheckedAppend): Deleted.
        (WTF::minCapacity>::appendVector): Deleted.
        (WTF::minCapacity>::insert): Deleted.
        (WTF::minCapacity>::insertVector): Deleted.
        (WTF::minCapacity>::remove): Deleted.
        (WTF::minCapacity>::removeFirst): Deleted.
        (WTF::minCapacity>::removeFirstMatching): Deleted.
        (WTF::minCapacity>::removeAll): Deleted.
        (WTF::minCapacity>::removeAllMatching): Deleted.
        (WTF::minCapacity>::reverse): Deleted.
        (WTF::minCapacity>::map const): Deleted.
        (WTF::minCapacity>::releaseBuffer): Deleted.
        (WTF::minCapacity>::checkConsistency): Deleted.
        * wtf/text/AtomicStringImpl.h:
        * wtf/text/CString.cpp:
        (WTF::CStringBuffer::createUninitialized):
        * wtf/text/CString.h:
        * wtf/text/StringBuffer.h:
        (WTF::StringBuffer::StringBuffer):
        (WTF::StringBuffer::~StringBuffer):
        (WTF::StringBuffer::resize):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::~StringImpl):
        (WTF::StringImpl::destroy):
        (WTF::StringImpl::createUninitializedInternalNonEmpty):
        (WTF::StringImpl::reallocateInternal):
        (WTF::StringImpl::releaseAssertCaged const):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::createSubstringSharingImpl):
        (WTF::StringImpl::tryCreateUninitialized):
        (WTF::StringImpl::adopt):
        (WTF::StringImpl::bufferOwnership const):
        (WTF::StringImpl::assertCaged const):
        * wtf/text/StringMalloc.cpp: Added.
        (WTF::tryStringMalloc):
        (WTF::stringMalloc):
        (WTF::stringRealloc):
        (WTF::stringFree):
        * wtf/text/StringMalloc.h: Added.
        (WTF::StringMalloc::malloc):
        (WTF::StringMalloc::tryMalloc):
        (WTF::StringMalloc::realloc):
        (WTF::StringMalloc::free):
        * wtf/text/StringVector.h: Added.
        * wtf/text/SymbolImpl.h:
        * wtf/text/UniquedStringImpl.h:
        * wtf/text/WTFString.h:
        (WTF::String::adopt):
        (WTF::String::assertCaged const):
        (WTF::String::releaseAssertCaged const):

2017-08-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Use table based approach for JSON.stringify's Quote
        https://bugs.webkit.org/show_bug.cgi?id=176044

        Reviewed by Darin Adler.

        We change escape operation of JSON Quote from branch-based to table-based.
        This patch partially adopts SpiderMonkey's change to StringBuilderJSON.cpp
        to optimize this escaping operation. We separate changes from StringBuilder.cpp
        to apply MPL to StringBuilderJSON.cpp file. Since WebKit already adopts MPL in
        some files (like, DateMath.h), it is acceptable.

        Kraken json-stringify-tinderbox shows 7.2% improvement.

                                           baseline                  patched

        json-stringify-tinderbox        40.429+-0.771      ^      37.693+-0.862         ^ definitely 1.0726x faster

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/StringBuilder.cpp:
        (WTF::appendQuotedJSONStringInternalSlow): Deleted.
        (WTF::appendQuotedJSONStringInternal): Deleted.
        (WTF::StringBuilder::appendQuotedJSONString): Deleted.
        * wtf/text/StringBuilderJSON.cpp: Added.
        (WTF::appendQuotedJSONStringInternal):
        (WTF::StringBuilder::appendQuotedJSONString):

2017-08-29  Per Arne Vollan  <pvollan@apple.com>

        [Win] Crash under WorkQueue::performWorkOnRegisteredWorkThread in layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=176064

        Reviewed by Saam Barati.

        The crash log indicates that the function pointer is null in this case.

        * wtf/win/WorkQueueWin.cpp:
        (WTF::WorkQueue::dispatch):

2017-08-28  Andy Estes  <aestes@apple.com>

        [Cocoa] Upstream WKGetWebDefaultCFStringEncoding()
        https://bugs.webkit.org/show_bug.cgi?id=176039

        Reviewed by Alex Christensen.

        * wtf/spi/cf/CFStringSPI.h:

2017-08-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, suppress warnings in GTK port

        Add printf format attribute.

        * wtf/text/WTFString.cpp:

2017-08-25  Eric Carlson  <eric.carlson@apple.com>

        Add Logger::logAlways
        https://bugs.webkit.org/show_bug.cgi?id=175996

        Reviewed by Jer Noble.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:

2017-08-25  Daniel Bates  <dabates@apple.com>

        Demarcate code added due to lack of NSDMI for aggregates
        https://bugs.webkit.org/show_bug.cgi?id=175990

        Reviewed by Andy Estes.

        * wtf/Compiler.h:

2017-08-25  Don Olmstead  <don.olmstead@sony.com>

        Define *_GIGACAGE_MASK when Gigacage is not supported
        https://bugs.webkit.org/show_bug.cgi?id=175994

        Reviewed by Mark Lam.

        * wtf/Gigacage.h:

2017-08-25  Eric Carlson  <eric.carlson@apple.com>

        Add String::format variant that takes va_args
        https://bugs.webkit.org/show_bug.cgi?id=175988

        Reviewed by Jer Noble.

        * wtf/text/WTFString.cpp:
        (WTF::createWithFormatAndArguments): Created with the guts of String::format.
        (WTF::String::formatWithArguments): New, call createWithFormatAndArguments.
        (WTF::String::format): Move logic to createWithFormatAndArguments, use it.
        * wtf/text/WTFString.h:

2017-08-25  Saam Barati  <sbarati@apple.com>

        Support compiling catch in the DFG
        https://bugs.webkit.org/show_bug.cgi?id=174590
        <rdar://problem/34047845>

        Reviewed by Filip Pizlo.

        This patch generalizes the BackwardsGraph fake root into a more generalizable
        class called SingleRootGraph. SingleRootGraph exposes the general graph interface
        used in Dominators and NaturalLoops. SingleRootGraph takes as input a graph with
        the normal graph interface, but also allows the input graph to contain more than
        one root. SingleRootGraph then exposes a single root, which it creates, that has
        an outgoing edge to all the roots in the original graph.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/BackwardsGraph.h:
        (WTF::BackwardsGraph::dump const):
        (WTF::BackwardsGraph::rootName): Deleted.
        (WTF::BackwardsGraph::Node::Node): Deleted.
        (WTF::BackwardsGraph::Node::root): Deleted.
        (WTF::BackwardsGraph::Node::operator== const): Deleted.
        (WTF::BackwardsGraph::Node::operator!= const): Deleted.
        (WTF::BackwardsGraph::Node::operator bool const): Deleted.
        (WTF::BackwardsGraph::Node::isRoot const): Deleted.
        (WTF::BackwardsGraph::Node::node const): Deleted.
        (): Deleted.
        (WTF::BackwardsGraph::Set::Set): Deleted.
        (WTF::BackwardsGraph::Set::add): Deleted.
        (WTF::BackwardsGraph::Set::remove): Deleted.
        (WTF::BackwardsGraph::Set::contains): Deleted.
        (WTF::BackwardsGraph::Set::dump const): Deleted.
        (WTF::BackwardsGraph::Map::Map): Deleted.
        (WTF::BackwardsGraph::Map::clear): Deleted.
        (WTF::BackwardsGraph::Map::size const): Deleted.
        (WTF::BackwardsGraph::Map::operator[]): Deleted.
        (WTF::BackwardsGraph::Map::operator[] const): Deleted.
        * wtf/Dominators.h:
        (WTF::Dominators::Dominators):
        (WTF::Dominators::forAllBlocksInIteratedDominanceFrontierOf):
        (WTF::Dominators::forAllBlocksInPrunedIteratedDominanceFrontierOf):
        (WTF::Dominators::iteratedDominanceFrontierOf const):
        (WTF::Dominators::forAllBlocksInIteratedDominanceFrontierOfImpl const):
        * wtf/SingleRootGraph.h: Added.
        (WTF::SingleRootGraphNode::rootName):
        (WTF::SingleRootGraphNode::SingleRootGraphNode):
        (WTF::SingleRootGraphNode::root):
        (WTF::SingleRootGraphNode::operator== const):
        (WTF::SingleRootGraphNode::operator!= const):
        (WTF::SingleRootGraphNode::operator bool const):
        (WTF::SingleRootGraphNode::isRoot const):
        (WTF::SingleRootGraphNode::node const):
        (WTF::SingleRootGraphSet::add):
        (WTF::SingleRootGraphSet::remove):
        (WTF::SingleRootGraphSet::contains):
        (WTF::SingleRootGraphSet::dump const):
        (WTF::SingleRootMap::SingleRootMap):
        (WTF::SingleRootMap::clear):
        (WTF::SingleRootMap::size const):
        (WTF::SingleRootMap::operator[]):
        (WTF::SingleRootMap::operator[] const):
        (WTF::SingleRootGraph::SingleRootGraph):
        (WTF::SingleRootGraph::root const):
        (WTF::SingleRootGraph::newMap):
        (WTF::SingleRootGraph::successors const):
        (WTF::SingleRootGraph::predecessors const):
        (WTF::SingleRootGraph::index const):
        (WTF::SingleRootGraph::node const):
        (WTF::SingleRootGraph::numNodes const):
        (WTF::SingleRootGraph::dump const):
        (WTF::SingleRootGraph::assertIsConsistent const):

2017-08-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r221119, r221124, and r221143.
        https://bugs.webkit.org/show_bug.cgi?id=175973

        "I think it regressed JSBench by 20%" (Requested by saamyjoon
        on #webkit).

        Reverted changesets:

        "Support compiling catch in the DFG"
        https://bugs.webkit.org/show_bug.cgi?id=174590
        http://trac.webkit.org/changeset/221119

        "Unreviewed, build fix in GTK port"
        https://bugs.webkit.org/show_bug.cgi?id=174590
        http://trac.webkit.org/changeset/221124

        "DFG::JITCode::osrEntry should get sorted since we perform a
        binary search on it"
        https://bugs.webkit.org/show_bug.cgi?id=175893
        http://trac.webkit.org/changeset/221143

2017-08-23  Filip Pizlo  <fpizlo@apple.com>

        Reduce Gigacage sizes
        https://bugs.webkit.org/show_bug.cgi?id=175920

        Reviewed by Mark Lam.

        Provide filler API for the no-bmalloc/no-Gigacage case.

        * wtf/Gigacage.h:
        (Gigacage::mask):

2017-08-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix in GTK port
        https://bugs.webkit.org/show_bug.cgi?id=174590

        * wtf/SingleRootGraph.h:
        (WTF::SingleRootGraph::successors const):
        (WTF::SingleRootGraph::predecessors const):

2017-08-23  Saam Barati  <sbarati@apple.com>

        Support compiling catch in the DFG
        https://bugs.webkit.org/show_bug.cgi?id=174590

        Reviewed by Filip Pizlo.

        This patch generalizes the BackwardsGraph fake root into a more generalizable
        class called SingleRootGraph. SingleRootGraph exposes the general graph interface
        used in Dominators and NaturalLoops. SingleRootGraph takes as input a graph with
        the normal graph interface, but also allows the input graph to contain more than
        one root. SingleRootGraph then exposes a single root, which it creates, that has
        an outgoing edge to all the roots in the original graph.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/BackwardsGraph.h:
        (WTF::BackwardsGraph::dump const):
        (WTF::BackwardsGraph::rootName): Deleted.
        (WTF::BackwardsGraph::Node::Node): Deleted.
        (WTF::BackwardsGraph::Node::root): Deleted.
        (WTF::BackwardsGraph::Node::operator== const): Deleted.
        (WTF::BackwardsGraph::Node::operator!= const): Deleted.
        (WTF::BackwardsGraph::Node::operator bool const): Deleted.
        (WTF::BackwardsGraph::Node::isRoot const): Deleted.
        (WTF::BackwardsGraph::Node::node const): Deleted.
        (): Deleted.
        (WTF::BackwardsGraph::Set::Set): Deleted.
        (WTF::BackwardsGraph::Set::add): Deleted.
        (WTF::BackwardsGraph::Set::remove): Deleted.
        (WTF::BackwardsGraph::Set::contains): Deleted.
        (WTF::BackwardsGraph::Set::dump const): Deleted.
        (WTF::BackwardsGraph::Map::Map): Deleted.
        (WTF::BackwardsGraph::Map::clear): Deleted.
        (WTF::BackwardsGraph::Map::size const): Deleted.
        (WTF::BackwardsGraph::Map::operator[]): Deleted.
        (WTF::BackwardsGraph::Map::operator[] const): Deleted.
        * wtf/Dominators.h:
        (WTF::Dominators::Dominators):
        (WTF::Dominators::forAllBlocksInIteratedDominanceFrontierOf):
        (WTF::Dominators::forAllBlocksInPrunedIteratedDominanceFrontierOf):
        (WTF::Dominators::iteratedDominanceFrontierOf const):
        (WTF::Dominators::forAllBlocksInIteratedDominanceFrontierOfImpl const):
        * wtf/SingleRootGraph.h: Added.
        (WTF::SingleRootGraphNode::rootName):
        (WTF::SingleRootGraphNode::SingleRootGraphNode):
        (WTF::SingleRootGraphNode::root):
        (WTF::SingleRootGraphNode::operator== const):
        (WTF::SingleRootGraphNode::operator!= const):
        (WTF::SingleRootGraphNode::operator bool const):
        (WTF::SingleRootGraphNode::isRoot const):
        (WTF::SingleRootGraphNode::node const):
        (WTF::SingleRootGraphSet::add):
        (WTF::SingleRootGraphSet::remove):
        (WTF::SingleRootGraphSet::contains):
        (WTF::SingleRootGraphSet::dump const):
        (WTF::SingleRootMap::SingleRootMap):
        (WTF::SingleRootMap::clear):
        (WTF::SingleRootMap::size const):
        (WTF::SingleRootMap::operator[]):
        (WTF::SingleRootMap::operator[] const):
        (WTF::SingleRootGraph::SingleRootGraph):
        (WTF::SingleRootGraph::root const):
        (WTF::SingleRootGraph::newMap):
        (WTF::SingleRootGraph::successors const):
        (WTF::SingleRootGraph::predecessors const):
        (WTF::SingleRootGraph::index const):
        (WTF::SingleRootGraph::node const):
        (WTF::SingleRootGraph::numNodes const):
        (WTF::SingleRootGraph::dump const):
        (WTF::SingleRootGraph::assertIsConsistent const):

2017-08-23  Youenn Fablet  <youenn@apple.com>

        [Cache API] Enable persistent coder to encode FetchOptions
        https://bugs.webkit.org/show_bug.cgi?id=175883

        Reviewed by Alex Christensen.

        Enabling encoding/decoding of enums with EnumTraits.
        This code is similar to the one of IPC encoder/decoder.

        * wtf/persistence/PersistentDecoder.h:
        (WTF::Persistence::Decoder::decode):
        * wtf/persistence/PersistentEncoder.h:
        (WTF::Persistence::Encoder::encode):

2017-08-23  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile error, include file <wtf/AVFoundationHeaderDetection.h> is not found.
        https://bugs.webkit.org/show_bug.cgi?id=175853

        Reviewed by Brent Fulgham.

        Copy generated WTF header files to the same place as we copy forwarding headers.
 
        * WTF.vcxproj/WTF.proj:

2017-08-22  Chris Dumez  <cdumez@apple.com>

        Introduce a new CompletionHandler type and use it for NetworkDataTaskClient's completion handlers to help catch bugs
        https://bugs.webkit.org/show_bug.cgi?id=175832

        Reviewed by Alex Christensen.

        Introduce a new CompletionHandler type which wraps a WTF::Function and ensures via assertions
        that the function is always called once and only once.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CompletionHandler.h: Added.
        (WTF::CompletionHandler<Out):

2017-08-22  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r221017.
        https://bugs.webkit.org/show_bug.cgi?id=157053

        * wtf/PlatformWin.cmake:

2017-08-22  Per Arne Vollan  <pvollan@apple.com>

        Implement 64-bit MacroAssembler::probe support for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=175724

        Reviewed by Mark Lam.

        Enable masm probe and DFG.

        * wtf/Platform.h:

2017-08-21  Mark Lam  <mark.lam@apple.com>

        [Follow up]: Add back the ability to disable MASM_PROBE from the build.
        https://bugs.webkit.org/show_bug.cgi?id=175656
        <rdar://problem/33933720>

        Not reviewed.

        Fixed a typo: should be "OS(WINDOWS)", not "OS(WINDOW)".

        * wtf/Platform.h:

2017-08-21  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] ARMv7 build fails to build MacroAssemblerARMv7.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=175514

        Reviewed by Keith Miller.

        * wtf/Platform.h: Enable DFG and MASM_PROBE back for GTK ARM_THUMB2.

2017-08-20  Sam Weinig  <sam@webkit.org>

        StringView could use a function to strip leading/trailing characters without allocation
        https://bugs.webkit.org/show_bug.cgi?id=175757

        Reviewed by Darin Adler.

        There are many places in WebCore/WebKit that we call functions like, 
        WebCore::stripLeadingAndTrailingHTMLSpaces,  or String::stripWhiteSpace() only to use 
        the allocated String as a temporary for either another transformation or a comparison.
        Now that we have StringView, we can avoid that extra allocation, by having returning a
        StringView  substring in these scenarios.

        For instance, the check (from ScriptElement.cpp:287):

        if (!stripLeadingAndTrailingHTMLSpaces(sourceURL).isEmpty()) {
            ...
        }

        currently allocates a string just to make this check. With a new 
        stripLeadingAndTrailingHTMLSpaces such as:

        StringView stripLeadingAndTrailingHTMLSpaces(StringView stringView)
        {
            return stringView.stripLeadingAndTrailingMatchedCharacters([] (auto c) {
                return isHTMLSpace(c);
            });
        }

        We could instead have exact same code from ScriptElement.cpp now avoid an allocation.

        * wtf/text/StringView.h:
        (WTF::StringView::stripLeadingAndTrailingMatchedCharacters):

2017-08-21  Eric Carlson  <eric.carlson@apple.com>

        Add WTFLogChannel level to allow runtime log filtering
        https://bugs.webkit.org/show_bug.cgi?id=175731
        <rdar://problem/33967234>

        Reviewed by Jer Noble.
        
        Add WTFLog*, LOG, and RELEASE_LOG variants that take a "log level" parameter so code
        can include logging statements that are only conditionally emitted.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/MemoryPressureHandler.cpp:
        * wtf/RefCountedLeakCounter.cpp:

2017-08-20  Mark Lam  <mark.lam@apple.com>

        Gardening: fix CLoop build.
        https://bugs.webkit.org/show_bug.cgi?id=175688
        <rdar://problem/33436870>

        Not reviewed.

        Disable MASM_PROBE if !ENABLE(JIT).

        * wtf/Platform.h:

2017-08-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r220938.

        The API tests added with this change are failing.

        Reverted changeset:

        "Add WTFLogChannel level to allow runtime log filtering"
        https://bugs.webkit.org/show_bug.cgi?id=175731
        http://trac.webkit.org/changeset/220938

2017-08-18  Eric Carlson  <eric.carlson@apple.com>

        Add WTFLogChannel level to allow runtime log filtering
        https://bugs.webkit.org/show_bug.cgi?id=175731
        <rdar://problem/33967234>

        Reviewed by Jer Noble.
        
        Add WTFLog*, LOG, and RELEASE_LOG variants that take a "log level" parameter so code
        can include logging statements that are only conditionally emitted.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/MemoryPressureHandler.cpp:
        * wtf/RefCountedLeakCounter.cpp:

2017-08-18  Per Arne Vollan  <pvollan@apple.com>

        Implement 32-bit MacroAssembler::probe support for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=175449

        Reviewed by Mark Lam.

        Enable the DFG on Win32. 

        * wtf/Platform.h:

2017-08-17  Mark Lam  <mark.lam@apple.com>

        Only use 16 VFP registers if !CPU(ARM_NEON).
        https://bugs.webkit.org/show_bug.cgi?id=175514

        Reviewed by JF Bastien.

        If CPU(ARM_NEON) is not enabled, we'll conservatively assume only VFP2 support is
        available. Hence, we'll only the first 16 FPDoubleRegisterIDs are available.

        For reference, see:
        NEON registers: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/CJACABEJ.html
        VFP2 and VFP3 registers: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/CIHDIBDG.html
        NEON to VFP register mapping: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/CJAIJHFC.html

        This is mostly for GTK toolchains which may target older ARM CPUs which only have
        VFP2 support.

        * wtf/Platform.h:

2017-08-16  Mark Lam  <mark.lam@apple.com>

        Add back the ability to disable MASM_PROBE from the build.
        https://bugs.webkit.org/show_bug.cgi?id=175656
        <rdar://problem/33933720>

        Reviewed by Yusuke Suzuki.

        * wtf/Platform.h:

2017-08-16  Mark Lam  <mark.lam@apple.com>

        Gardening: fix GTK ARM_THUMB2 build.
        https://bugs.webkit.org/show_bug.cgi?id=175446

        Not reviewed.

        Disable the use of the DFG for GTK ARM_THUMB2 builds until
        https://bugs.webkit.org/show_bug.cgi?id=175514 is fixed.

        * wtf/Platform.h:

2017-08-16  Andy Estes  <aestes@apple.com>

        [Payment Request] Add an ENABLE flag and an experimental feature preference
        https://bugs.webkit.org/show_bug.cgi?id=175622

        Reviewed by Tim Horton.

        * wtf/FeatureDefines.h:

2017-08-14  Simon Fraser  <simon.fraser@apple.com>

        Remove Proximity Events and related code
        https://bugs.webkit.org/show_bug.cgi?id=175545

        Reviewed by Daniel Bates.

        No platform enables Proximity Events, so remove code inside ENABLE(PROXIMITY_EVENTS)
        and other related code.

        * wtf/FeatureDefines.h:

2017-08-14  Simon Fraser  <simon.fraser@apple.com>

        Remove ENABLE(REQUEST_AUTOCOMPLETE) code, which was disabled everywhere
        https://bugs.webkit.org/show_bug.cgi?id=175504

        Reviewed by Sam Weinig.

        * wtf/FeatureDefines.h:

2017-08-14  Simon Fraser  <simon.fraser@apple.com>

        Remove ENABLE_VIEW_MODE_CSS_MEDIA and related code
        https://bugs.webkit.org/show_bug.cgi?id=175557

        Reviewed by Jon Lee.

        No port cares about the ENABLE(VIEW_MODE_CSS_MEDIA) feature, so remove it.

        * wtf/FeatureDefines.h:

2017-08-12  Filip Pizlo  <fpizlo@apple.com>

        Put the ScopedArgumentsTable's ScopeOffset array in some gigacage
        https://bugs.webkit.org/show_bug.cgi?id=174921

        Reviewed by Mark Lam.
        
        If you want to std::unique_ptr a class that knows that it should be in the Gigacage, then we
        would create the Gigacage equivalent of WTF_MAKE_FAST_ALLOCATED and it would just work.
        
        But this does not work if we want to std::unique_ptr a primitive type. So, this patch adds a
        solution for this problem: CagedUniquePtr<>. This will handle allocation
        (CagedUniquePtr<>::create()) and deallocation (in the style of std::unique_ptr). It has three
        variants:
        
        - Non-array types.
        - Arrays that don't have destructors.
        - Arrays that have destructors.
        
        Just like std::unique_ptr, the array case is triggered by saying "[]" at the end of the type.
        
        Unlike std::unique_ptr and most other smart pointers, the whole point of this smart pointer is
        to dictate where the thing you're pointing at is allocated. For this reason, it has to know how
        to do things like the array destructor protocol. So it creates its own: the CagedUniquePtr for
        arrays with destructors is a fat pointer that remembers the length of the array.
        
        CagedUniquePtr<> makes it impossible to leak/release the pointer. This is stricter than what
        std::unique_ptr does, and is probably appropriate for all of the places where we would use this
        type.
        
        So far, we only use it for ScopedArgumentsTable::m_arguments, but I suspect that it will be
        useful in other places.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/CagedUniquePtr.h: Added.
        (WTF::CagedUniquePtr::CagedUniquePtr):
        (WTF::CagedUniquePtr::create):
        (WTF::CagedUniquePtr::operator=):
        (WTF::CagedUniquePtr::~CagedUniquePtr):
        (WTF::CagedUniquePtr::get const):
        (WTF::CagedUniquePtr::getMayBeNull const):
        (WTF::CagedUniquePtr::operator== const):
        (WTF::CagedUniquePtr::operator!= const):
        (WTF::CagedUniquePtr::operator bool const):
        (WTF::CagedUniquePtr::operator* const):
        (WTF::CagedUniquePtr::operator-> const):
        (WTF::CagedUniquePtr::operator[] const):
        (WTF::CagedUniquePtr::destroy):
        * wtf/Gigacage.cpp:
        (Gigacage::tryMallocArray):
        (Gigacage::malloc):
        (Gigacage::mallocArray):
        * wtf/Gigacage.h:

2017-08-11  Ryosuke Niwa  <rniwa@webkit.org>

        Replace DATA_TRANSFER_ITEMS by a runtime flag and add a stub implementation
        https://bugs.webkit.org/show_bug.cgi?id=175474

        Reviewed by Wenson Hsieh.

        * wtf/FeatureDefines.h:

2017-08-11  Don Olmstead  <don.olmstead@sony.com>

        [WTF] Move ValueToString into WTF
        https://bugs.webkit.org/show_bug.cgi?id=175469

        Reviewed by Sam Weinig.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/ValueToString.h: Renamed from Source/WebCore/platform/ValueToString.h.

2017-08-11  Tim Horton  <timothy_horton@apple.com>

        Fix the build with modern Clang's -Wexpansion-to-defined
        https://bugs.webkit.org/show_bug.cgi?id=175467
        <rdar://problem/33667497>

        Reviewed by Simon Fraser.

        * wtf/FeatureDefines.h:
        * wtf/Platform.h:
        Avoid object-like macros that expand to include defined(), because this
        behaves inconsistently between different compilers (though in ways
        that don't matter for these particular defines, which aren't used on MSVC),
        and Clang has added a warning for it.

        Move ENABLE_WEBASSEMBLY to Platform.h since it depends on things that
        are defined there and can't be evaluated at time-of-use because of the
        aforementioned new rules. Previously, there was a cycle between
        ENABLE_WEBASSEMBLY and ENABLE_B3_JIT -- break that so that it just
        goes FTL_JIT->B3_JIT->WASM instead.

2017-08-10  Sam Weinig  <sam@webkit.org>

        WTF::Function does not allow for reference / non-default constructible return types
        https://bugs.webkit.org/show_bug.cgi?id=175244

        Reviewed by Chris Dumez.

        When Function, then NoncopyableFunction, was templatized to allow non-void return values
        in r201493, it maintained the behavior of being callable even if the Function was null.
        To accomplish this, when null, the default construction of the return parameter was used.
        This means Function can't be used with return types that are not default constructible,
        such as reference types and Ref.

        This behavior of returning something when null is surprising, as this is not how normal
        functions behave, and not very useful. Instead, we now assert that the function is not
        null when being called.

        * wtf/Function.h:
        (WTF::Function operator(...)):
        Instead of allowing a null callable wrapper by returning the default construction of
        the return type, assert that the wrapper is there when calling a Function.

2017-08-10  Mark Lam  <mark.lam@apple.com>

        Make the MASM_PROBE mechanism mandatory for DFG and FTL builds.
        https://bugs.webkit.org/show_bug.cgi?id=175446
        <rdar://problem/33836545>

        Reviewed by Saam Barati.

        This is needed in order to support https://bugs.webkit.org/show_bug.cgi?id=174645.
        One consequence of this is that the DFG will now be disabled for the MIPS and
        Windows ports. See:
            https://bugs.webkit.org/show_bug.cgi?id=175447
            https://bugs.webkit.org/show_bug.cgi?id=175449

        Also, we should only ENABLE_SIGNAL_BASED_VM_TRAPS if the DFG is enabled.  It was
        never meaningful to use SIGNAL_BASED_VM_TRAPS with the baseline JIT anyway.  This
        is a mis-configuration error that is now fixed.

        * wtf/Platform.h:

2017-08-10  Brady Eidson  <beidson@apple.com>

        Rename the source files for the WTF persistent coders.
        https://bugs.webkit.org/show_bug.cgi?id=175441

        Reviewed by Tim Horton.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:

        * wtf/persistence/PersistentCoder.h: Renamed from Source/WTF/wtf/persistence/Coder.h.
        * wtf/persistence/PersistentCoders.cpp: Renamed from Source/WTF/wtf/persistence/Coders.cpp.
        * wtf/persistence/PersistentCoders.h: Renamed from Source/WTF/wtf/persistence/Coders.h.
        * wtf/persistence/PersistentDecoder.cpp: Renamed from Source/WTF/wtf/persistence/Decoder.cpp.
        * wtf/persistence/PersistentDecoder.h: Renamed from Source/WTF/wtf/persistence/Decoder.h.
        * wtf/persistence/PersistentEncoder.cpp: Renamed from Source/WTF/wtf/persistence/Encoder.cpp.
        * wtf/persistence/PersistentEncoder.h: Renamed from Source/WTF/wtf/persistence/Encoder.h.

2017-08-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix build failure with VC2017

        * wtf/PriorityQueue.h:

2017-08-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        Run more WTF tests
        https://bugs.webkit.org/show_bug.cgi?id=174970

        Reviewed by Michael Catanzaro.

        CHAR_BIT is not defined.

        * wtf/LEBDecoder.h:

2017-08-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] ThreadSpecific should not introduce additional indirection
        https://bugs.webkit.org/show_bug.cgi?id=175187

        Reviewed by Mark Lam.

        ThreadSpecific sets Data* to the TLS. And Data holds T*, which
        is fast allocated actual data. But ideally, we should store T
        instance directly in Data instead of introducing an additional
        indirection.

        This patch adds storage in Data in order to embed the instance of T. The constructor
        for Data will invoke the constructor for T on the embedded storage. We also drop
        ThreadSpecific::replace which is only used by the web thread to set its thread specific
        ThreadGlobalData to the one shared from the main thread. The existing implementation
        relies on the main thread and the web thread never exiting in order for the shared
        ThreadGlobalData to stay alive. We can achieve the same semantics by using a
        ThreadSpecific<std::unique_ptr<T>> to hold the ThreadGlobalData instance instead.

        * wtf/ThreadSpecific.h:
        (WTF::ThreadSpecific::Data::construct):
        (WTF::ThreadSpecific::Data::Data):
        We make it fast allocated since we previously allocated ThreadSpecific T data by fastMalloc.

        (WTF::ThreadSpecific::Data::~Data):
        (WTF::ThreadSpecific::Data::storagePointer const):
        (WTF::canBeGCThread>::get):
        We also drop RELEASE_ASSERT from ::get(). We already inserted this assert to setAndConstruct(),
        so when creating the member to this TLS, we execute this release assert. So it is
        not necessary to execute this assertion every time we get data from this TLS.

        (WTF::canBeGCThread>::set):
        (WTF::canBeGCThread>::destroy):
        (WTF::canBeGCThread>::setAndConstruct):
        (WTF::T):
        (WTF::canBeGCThread>::replace): Deleted.

2017-08-10  Tim Horton  <timothy_horton@apple.com>

        Fix a silly typo in Compiler.h

        * wtf/Compiler.h:
        Heature, indeed.

2017-08-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove ENABLE_GAMEPAD_DEPRECATED
        https://bugs.webkit.org/show_bug.cgi?id=175361

        Reviewed by Carlos Garcia Campos.

        * wtf/FeatureDefines.h:

2017-08-09  Don Olmstead  <don.olmstead@sony.com>

        [WTF] Move TextStream into WTF
        https://bugs.webkit.org/show_bug.cgi?id=175211

        Reviewed by Myles C. Maxfield.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/TextStream.cpp: Renamed from Source/WebCore/platform/text/TextStream.cpp.
        (WTF::TextStream::writeIndent):
        * wtf/text/TextStream.h: Renamed from Source/WebCore/platform/text/TextStream.h.
        (WTF::TextStream::FormatNumberRespectingIntegers::FormatNumberRespectingIntegers):

2017-08-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r220466, r220477, and r220487.
        https://bugs.webkit.org/show_bug.cgi?id=175411

        This change broke existing API tests and follow up fixes did
        not resolve all the issues. (Requested by ryanhaddad on
        #webkit).

        Reverted changesets:

        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220466

        "WTF::Function does not allow for reference / non-default
        constructible return types"
        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220477

        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220487

2017-08-09  Sam Weinig  <sam@webkit.org>

        WTF::Function does not allow for reference / non-default constructible return types
        https://bugs.webkit.org/show_bug.cgi?id=175244

        Reviewed by Chris Dumez.

        When Function, then NoncopyableFunction, was templatized to allow non-void return values
        in r201493, it maintained the behavior of being callable even if the Function was null.
        To accomplish this, when null, the default construction of the return parameter was used.
        This means Function can't be used with return types that are not default constructible,
        such as reference types and Ref.

        This behavior of returning something when null is surprising, as this is not how normal
        functions behave, and not very useful. Instead, we now assert that the function is not
        null when being called.

        * wtf/Function.h:
        (WTF::Function operator(...)):
        Instead of allowing a null callable wrapper by returning the default construction of
        the return type, assert that the wrapper is there when calling a Function.

2017-08-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r220457.

        This change introduced API test failures.

        Reverted changeset:

        "WTF::Function does not allow for reference / non-default
        constructible return types"
        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220457

2017-08-09  Sam Weinig  <sam@webkit.org>

        WTF::Function does not allow for reference / non-default constructible return types
        https://bugs.webkit.org/show_bug.cgi?id=175244

        Reviewed by Chris Dumez.

        When Function, then NoncopyableFunction, was templatized to allow non-void return values
        in r201493, it maintained the behavior of being callable even if the Function was null.
        To accomplish this, when null, the default construction of the return parameter was used.
        This means Function can't be used with return types that are not default constructible,
        such as reference types and Ref.

        This behavior of returning something when null is surprising, as this is not how normal
        functions behave, and not very useful. Instead, we now assert that the function is not
        null when being called.

        * wtf/Function.h:
        (WTF::Function operator(...)):
        Instead of allowing a null callable wrapper by returning the default construction of
        the return type, assert that the wrapper is there when calling a Function.

2017-08-08  Filip Pizlo  <fpizlo@apple.com>

        Baseline JIT should do caging
        https://bugs.webkit.org/show_bug.cgi?id=175037

        Reviewed by Mark Lam.

        * wtf/Gigacage.h:
        (Gigacage::disableDisablingPrimitiveGigacageIfShouldBeEnabled):
        (Gigacage::isDisablingPrimitiveGigacageDisabled):
        (Gigacage::isPrimitiveGigacagePermanentlyEnabled):
        (Gigacage::canPrimitiveGigacageBeDisabled):
        (Gigacage::basePtr):

2017-08-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r220368.

        This change caused WK1 tests to exit early with crashes.

        Reverted changeset:

        "Baseline JIT should do caging"
        https://bugs.webkit.org/show_bug.cgi?id=175037
        http://trac.webkit.org/changeset/220368

2017-08-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Properly test if compiler supports compiler flags
        https://bugs.webkit.org/show_bug.cgi?id=174490

        Reviewed by Konstantin Tokarev.

        * wtf/Compiler.h:

2017-08-07  Filip Pizlo  <fpizlo@apple.com>

        Baseline JIT should do caging
        https://bugs.webkit.org/show_bug.cgi?id=175037

        Reviewed by Mark Lam.

        * wtf/Gigacage.h:
        (Gigacage::disableDisablingPrimitiveGigacageIfShouldBeEnabled):
        (Gigacage::isDisablingPrimitiveGigacageDisabled):
        (Gigacage::isPrimitiveGigacagePermanentlyEnabled):
        (Gigacage::canPrimitiveGigacageBeDisabled):

2017-08-07  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, try to fix Windows build.

        * wtf/Gigacage.cpp:
        * wtf/Gigacage.h:

2017-08-06  Filip Pizlo  <fpizlo@apple.com>

        Primitive auxiliaries and JSValue auxiliaries should have separate gigacages
        https://bugs.webkit.org/show_bug.cgi?id=174919

        Reviewed by Keith Miller.
        
        This mirrors the changes from bmalloc/Gigacage.h.
        
        Also it teaches CagedPtr how to reason about multiple gigacages.

        * wtf/CagedPtr.h:
        (WTF::CagedPtr::get const):
        (WTF::CagedPtr::operator[] const):
        * wtf/Gigacage.cpp:
        (Gigacage::tryMalloc):
        (Gigacage::tryAllocateVirtualPages):
        (Gigacage::freeVirtualPages):
        (Gigacage::tryAlignedMalloc):
        (Gigacage::alignedFree):
        (Gigacage::free):
        * wtf/Gigacage.h:
        (Gigacage::disablePrimitiveGigacage):
        (Gigacage::addPrimitiveDisableCallback):
        (Gigacage::removePrimitiveDisableCallback):
        (Gigacage::name):
        (Gigacage::basePtr):
        (Gigacage::caged):
        (Gigacage::isCaged):
        (Gigacage::tryAlignedMalloc):
        (Gigacage::alignedFree):
        (Gigacage::free):
        (Gigacage::disableGigacage): Deleted.
        (Gigacage::addDisableCallback): Deleted.
        (Gigacage::removeDisableCallback): Deleted.

2017-08-07  Brian Burg  <bburg@apple.com>

        Remove CANVAS_PATH compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=175207

        Reviewed by Sam Weinig.

        * wtf/FeatureDefines.h:

2017-08-05  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION (r219895-219897): Number of leaks on Open Source went from 9240 to 235983 and is now at 302372
        https://bugs.webkit.org/show_bug.cgi?id=175083

        Reviewed by Oliver Hunt.
        
        Adds a classic ReadWriteLock class. I wrote my own because I can never remember if the pthread one is
        guaranted to bias in favor of writers or not.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Condition.h:
        (WTF::ConditionBase::construct):
        (WTF::Condition::Condition):
        * wtf/Lock.h:
        (WTF::LockBase::construct):
        (WTF::Lock::Lock):
        * wtf/ReadWriteLock.cpp: Added.
        (WTF::ReadWriteLockBase::construct):
        (WTF::ReadWriteLockBase::readLock):
        (WTF::ReadWriteLockBase::readUnlock):
        (WTF::ReadWriteLockBase::writeLock):
        (WTF::ReadWriteLockBase::writeUnlock):
        * wtf/ReadWriteLock.h: Added.
        (WTF::ReadWriteLockBase::ReadLock::tryLock):
        (WTF::ReadWriteLockBase::ReadLock::lock):
        (WTF::ReadWriteLockBase::ReadLock::unlock):
        (WTF::ReadWriteLockBase::WriteLock::tryLock):
        (WTF::ReadWriteLockBase::WriteLock::lock):
        (WTF::ReadWriteLockBase::WriteLock::unlock):
        (WTF::ReadWriteLockBase::read):
        (WTF::ReadWriteLockBase::write):
        (WTF::ReadWriteLock::ReadWriteLock):

2017-08-04  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r220271.

        Rolling out due to Layout Test failing on iOS Simulator.

        Reverted changeset:

        "Remove STREAMS_API compilation guard"
        https://bugs.webkit.org/show_bug.cgi?id=175165
        http://trac.webkit.org/changeset/220271

2017-08-04  Youenn Fablet  <youenn@apple.com>

        Remove STREAMS_API compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=175165

        Reviewed by Darin Adler.

        * wtf/FeatureDefines.h:

2017-08-03  Brian Burg  <bburg@apple.com>

        Remove ENABLE(WEB_SOCKET) guards
        https://bugs.webkit.org/show_bug.cgi?id=167044

        Reviewed by Joseph Pecoraro.

        * wtf/FeatureDefines.h:

2017-08-03  Youenn Fablet  <youenn@apple.com>

        Remove FETCH_API compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=175154

        Reviewed by Chris Dumez.

        * wtf/FeatureDefines.h:

2017-08-03  Brady Eidson  <beidson@apple.com>

        Add SW IDLs and stub out basic functionality.
        https://bugs.webkit.org/show_bug.cgi?id=175115

        Reviewed by Chris Dumez.

        * wtf/FeatureDefines.h:

2017-08-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix for Windows port
        https://bugs.webkit.org/show_bug.cgi?id=175013

        * wtf/Threading.h:

2017-08-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Merge ThreadHolder to WTF::Thread itself
        https://bugs.webkit.org/show_bug.cgi?id=175013

        Reviewed by Mark Lam.

        Currently, we store ThreadHolder* to the TLS, and ThreadHolder* holds Ref<Thread>.
        When we get Thread& from the current thread TLS, we need to dereference the ThreadHolder*.
        However, ideally, we can store Thread* directly to the current thread TLS.
        While the ThreadHolder design is beautiful, it's worth optimizing by storing Thread* directly
        since Thread::current() is so frequently executed.

        This patch merges ThreadHolder to Thread. And we now store Thread* directly in the TLS.
        When storing it to TLS, we call leakRef() to keep Thread ref count incremented by the TLS.
        And when destroying the TLS, we call `deref()` to ensure that Thread* is dereferenced from
        the TLS.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/ThreadHolder.cpp: Removed.
        * wtf/ThreadHolder.h: Removed.
        * wtf/ThreadHolderPthreads.cpp: Removed.
        * wtf/ThreadHolderWin.cpp: Removed.
        * wtf/Threading.cpp:
        (WTF::Thread::entryPoint):
        (WTF::initializeThreading):
        * wtf/Threading.h:
        (WTF::Thread::currentMayBeNull):
        (WTF::Thread::current):
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::waitForCompletion):
        (WTF::Thread::initializeCurrentTLS):
        (WTF::Thread::initializeTLSKey):
        (WTF::Thread::initializeTLS):
        (WTF::Thread::destructTLS):
        (WTF::Thread::createCurrentThread): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::initializeCurrentTLS):
        (WTF::threadMapMutex):
        (WTF::Thread::initializeTLSKey):
        (WTF::Thread::currentDying):
        (WTF::Thread::get):
        (WTF::Thread::initializeTLS):
        (WTF::Thread::destructTLS):
        (WTF::waitForThreadCompletion):
        (WTF::Thread::createCurrentThread): Deleted.

2017-08-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        [Linux][WTF] Use one global semaphore to notify thread suspend and resume completion
        https://bugs.webkit.org/show_bug.cgi?id=175124

        Reviewed by Carlos Garcia Campos.

        POSIX sem_t is used to notify thread suspend and resume completion in Linux ports
        since sem_post is async-signal-safe function. Since we guard suspend() and resume()
        with one global lock, this semaphore is also guarded by this lock. So we do not need
        to have semaphore per WTF::Thread.

        This patch introduces one global Semaphore. And drop per thread semaphore.

        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::~Thread):
        (WTF::Semaphore::Semaphore):
        (WTF::Semaphore::~Semaphore):
        (WTF::Semaphore::wait):
        (WTF::Semaphore::post):
        (WTF::Thread::signalHandlerSuspendResume):
        (WTF::Thread::initializePlatformThreading):
        (WTF::Thread::suspend):
        (WTF::Thread::resume):
        (WTF::Thread::Thread): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::Thread): Deleted.

2017-08-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        [Linux][WTF] Reduce sizeof(WTF::Thread) by using a pointer to PlatformRegisters
        https://bugs.webkit.org/show_bug.cgi?id=175119

        Reviewed by Carlos Garcia Campos.

        sizeof(PlatformRegisters) is so large. In my Linux box, it is 256. It enlarges the sizeof(WTF::Thread).
        However, it is not necessary to hold it in WTF::Thread member. Thread's ucontext data and its stack is
        effective while suspending the thread. So, we can just use the pointer to the PlatformRegister instead
        of copying it to the member of the WTF::Thread.

        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::signalHandlerSuspendResume):
        (WTF::Thread::getRegisters):

2017-08-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix for Windows port
        https://bugs.webkit.org/show_bug.cgi?id=174716

        This ugliness will be fixed in https://bugs.webkit.org/show_bug.cgi?id=175013.

        * wtf/ThreadHolder.h:
        * wtf/Threading.h:

2017-08-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Merge WTFThreadData to Thread::current
        https://bugs.webkit.org/show_bug.cgi?id=174716

        Reviewed by Mark Lam.

        We placed thread specific data in WTFThreadData previously. But now, we have a new good place
        to put thread specific data: WTF::Thread. Before this patch, WTFThreadData and WTF::Thread
        sometimes have the completely same fields (m_stack etc.) due to initialization order limitations.
        This patch merges WTFThreadData to WTF::Thread. We apply WTFThreadData's initialization style
        to WTF::Thread. So, WTF::Thread's holder now uses fast TLS for darwin environment. Thus,
        Thread::current() access is now accelerated. And WTF::Thread::current() can be accessed even
        before calling WTF::initializeThreading.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/LockAlgorithm.h:
        * wtf/LockAlgorithmInlines.h:
        * wtf/MainThread.h:
        * wtf/ParkingLot.cpp:
        * wtf/StackStats.cpp:
        (WTF::StackStats::PerThreadStats::PerThreadStats):
        (WTF::StackStats::CheckPoint::CheckPoint):
        (WTF::StackStats::CheckPoint::~CheckPoint):
        (WTF::StackStats::probe):
        (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
        * wtf/ThreadHolder.cpp:
        (WTF::ThreadHolder::initializeCurrent):
        * wtf/ThreadHolder.h:
        (WTF::ThreadHolder::ThreadHolder):
        (WTF::ThreadHolder::currentMayBeNull):
        (WTF::ThreadHolder::current):
        * wtf/ThreadHolderPthreads.cpp:
        (WTF::ThreadHolder::initializeKey):
        (WTF::ThreadHolder::initialize):
        (WTF::ThreadHolder::destruct):
        (WTF::ThreadHolder::initializeOnce): Deleted.
        (WTF::ThreadHolder::current): Deleted.
        * wtf/ThreadHolderWin.cpp:
        (WTF::ThreadHolder::initializeKey):
        (WTF::ThreadHolder::currentDying):
        (WTF::ThreadHolder::initialize):
        (WTF::ThreadHolder::initializeOnce): Deleted.
        (WTF::ThreadHolder::current): Deleted.
        * wtf/Threading.cpp:
        (WTF::Thread::initializeInThread):
        (WTF::Thread::entryPoint):
        (WTF::Thread::create):
        (WTF::Thread::didExit):
        (WTF::initializeThreading):
        (WTF::Thread::currentMayBeNull): Deleted.
        * wtf/Threading.h:
        (WTF::Thread::current):
        (WTF::Thread::atomicStringTable):
        (WTF::Thread::setCurrentAtomicStringTable):
        (WTF::Thread::stackStats):
        (WTF::Thread::savedStackPointerAtVMEntry):
        (WTF::Thread::setSavedStackPointerAtVMEntry):
        (WTF::Thread::savedLastStackTop):
        (WTF::Thread::setSavedLastStackTop):
        * wtf/ThreadingPrimitives.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::createCurrentThread):
        (WTF::Thread::current): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::createCurrentThread):
        (WTF::Thread::current): Deleted.
        * wtf/WTFThreadData.cpp: Removed.
        * wtf/WTFThreadData.h: Removed.
        * wtf/text/AtomicString.cpp:
        * wtf/text/AtomicStringImpl.cpp:
        (WTF::stringTable):
        * wtf/text/AtomicStringTable.cpp:
        (WTF::AtomicStringTable::create):
        * wtf/text/AtomicStringTable.h:

2017-08-02  Joseph Pecoraro  <pecoraro@apple.com>

        NeverDestroyed related leaks seen on bots
        https://bugs.webkit.org/show_bug.cgi?id=175113

        Reviewed by Yusuke Suzuki.

        * wtf/NeverDestroyed.h:
        (WTF::NeverDestroyed::NeverDestroyed):
        Previously the result of makeNeverDestroyed was not always moving into
        the `static NeverDestroyed` static local variable. In some cases it would
        re-invoke the constructor, creating a new NeverDestroyed object. In the
        case of a Vector it was causing leaks.

        Adding a move constructor convinces the compiler to move the result
        of makeNeverDestroyed into the NeverDestroyed static. It doesn't actually
        invoke the move constructor here, which I believe means it is deciding
        to perform optional copy elision optimization.
        'http://en.cppreference.com/w/cpp/language/copy_elision

2017-08-02  Filip Pizlo  <fpizlo@apple.com>

        All C++ accesses to JSObject::m_butterfly should do caging
        https://bugs.webkit.org/show_bug.cgi?id=175039

        Reviewed by Keith Miller.
        
        Adds a smart pointer class that does various kinds of caging for you.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/CagedPtr.h: Added.
        (WTF::CagedPtr::CagedPtr):
        (WTF::CagedPtr::get const):
        (WTF::CagedPtr::getMayBeNull const):
        (WTF::CagedPtr::operator== const):
        (WTF::CagedPtr::operator!= const):
        (WTF::CagedPtr::operator bool const):
        (WTF::CagedPtr::operator* const):
        (WTF::CagedPtr::operator-> const):

2017-08-02  Filip Pizlo  <fpizlo@apple.com>

        We should be OK with the gigacage being disabled on gmalloc
        https://bugs.webkit.org/show_bug.cgi?id=175082

        Reviewed by Michael Saboff.

        * wtf/Gigacage.h:
        (Gigacage::shouldBeEnabled):

2017-08-01  Filip Pizlo  <fpizlo@apple.com>

        Bmalloc and GC should put auxiliaries (butterflies, typed array backing stores) in a gigacage (separate multi-GB VM region)
        https://bugs.webkit.org/show_bug.cgi?id=174727

        Reviewed by Mark Lam.
        
        For the Gigacage project to have minimal impact, we need to have some abstraction that allows code to
        avoid having to guard itself with #if's. This adds a Gigacage abstraction that overlays the Gigacage
        namespace from bmalloc, which always lets you call things like Gigacage::caged and Gigacage::tryMalloc.
        
        Because of how many places need to possibly allocate in a gigacage, or possibly perform caged accesses,
        it's better to hide the question of whether or not it's enabled inside this API.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/FastMalloc.cpp:
        * wtf/Gigacage.cpp: Added.
        (Gigacage::tryMalloc):
        (Gigacage::tryAllocateVirtualPages):
        (Gigacage::freeVirtualPages):
        (Gigacage::tryAlignedMalloc):
        (Gigacage::alignedFree):
        (Gigacage::free):
        * wtf/Gigacage.h: Added.
        (Gigacage::ensureGigacage):
        (Gigacage::disableGigacage):
        (Gigacage::addDisableCallback):
        (Gigacage::removeDisableCallback):
        (Gigacage::caged):
        (Gigacage::isCaged):
        (Gigacage::tryAlignedMalloc):
        (Gigacage::alignedFree):
        (Gigacage::free):

2017-07-31  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r220060.

        This broke our internal builds. Contact reviewer of patch for
        more information.

        Reverted changeset:

        "Merge WTFThreadData to Thread::current"
        https://bugs.webkit.org/show_bug.cgi?id=174716
        http://trac.webkit.org/changeset/220060

2017-07-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        Merge WTFThreadData to Thread::current
        https://bugs.webkit.org/show_bug.cgi?id=174716

        Reviewed by Sam Weinig.

        We placed thread specific data in WTFThreadData previously. But now, we have a new good place
        to put thread specific data: WTF::Thread. Before this patch, WTFThreadData and WTF::Thread
        sometimes have the completely same fields (m_stack etc.) due to initialization order limitations.
        This patch merges WTFThreadData to WTF::Thread. We apply WTFThreadData's initialization style
        to WTF::Thread. So, WTF::Thread's holder now uses fast TLS for darwin environment. Thus,
        Thread::current() access is now accelerated. And WTF::Thread::current() can be accessed even
        before calling WTF::initializeThreading.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/LockAlgorithm.h:
        * wtf/LockAlgorithmInlines.h:
        * wtf/MainThread.h:
        * wtf/ParkingLot.cpp:
        * wtf/StackStats.cpp:
        (WTF::StackStats::PerThreadStats::PerThreadStats):
        (WTF::StackStats::CheckPoint::CheckPoint):
        (WTF::StackStats::CheckPoint::~CheckPoint):
        (WTF::StackStats::probe):
        (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
        * wtf/ThreadHolder.cpp:
        (WTF::ThreadHolder::initializeCurrent):
        * wtf/ThreadHolder.h:
        (WTF::ThreadHolder::ThreadHolder):
        (WTF::ThreadHolder::currentMayBeNull):
        (WTF::ThreadHolder::current):
        * wtf/ThreadHolderPthreads.cpp:
        (WTF::ThreadHolder::initialize):
        (WTF::ThreadHolder::destruct):
        (WTF::ThreadHolder::current): Deleted.
        * wtf/ThreadHolderWin.cpp:
        (WTF::ThreadHolder::currentDying):
        (WTF::ThreadHolder::initialize):
        (WTF::ThreadHolder::current): Deleted.
        * wtf/Threading.cpp:
        (WTF::Thread::initializeInThread):
        (WTF::Thread::entryPoint):
        (WTF::Thread::didExit):
        (WTF::initializeThreading):
        (WTF::Thread::currentMayBeNull): Deleted.
        * wtf/Threading.h:
        (WTF::Thread::atomicStringTable):
        (WTF::Thread::setCurrentAtomicStringTable):
        (WTF::Thread::stackStats):
        (WTF::Thread::savedStackPointerAtVMEntry):
        (WTF::Thread::setSavedStackPointerAtVMEntry):
        (WTF::Thread::savedLastStackTop):
        (WTF::Thread::setSavedLastStackTop):
        (WTF::Thread::current):
        * wtf/ThreadingPrimitives.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::createCurrentThread):
        (WTF::Thread::current): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::createCurrentThread):
        (WTF::Thread::current): Deleted.
        * wtf/WTFThreadData.cpp: Removed.
        * wtf/WTFThreadData.h: Removed.
        * wtf/text/AtomicString.cpp:
        * wtf/text/AtomicStringImpl.cpp:
        (WTF::stringTable):
        * wtf/text/AtomicStringTable.cpp:
        (WTF::AtomicStringTable::create):
        * wtf/text/AtomicStringTable.h:

2017-07-31  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Created a bool pretty printer at WTF for debugging purposes
        https://bugs.webkit.org/show_bug.cgi?id=174893

        Reviewed by Darin Adler.

        * wtf/PrintStream.cpp:
        (WTF::printInternal): The overload taking bool uses boolForPrinting
        * wtf/PrintStream.h:
        (WTF::boolForPrinting): Converts a bool in "true" or "false".

2017-07-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Introduce Private Symbols
        https://bugs.webkit.org/show_bug.cgi?id=174935

        Reviewed by Darin Adler.

        Upcoming proposal of class fields[1] requires private fields.
        The simple way to implement it is adding a property with a private symbol.
        Currently, we have private symbols for internal properties. They are usual
        Symbols managed by the hash table. So basically private symbols are statically
        created in BuiltinNames. However this new proposal encourages users to create
        such private symbols more and more.

        So, this patch introduces notion of "Private" into WTF SymbolImpl. This patch
        adds PrivateSymbolImpl. This is SymbolImpl with "Private" flag. We do not need
        to look up the symbol from the hash table to check whether the given symbol
        is a private one.

        [1]: https://github.com/tc39/proposal-class-fields

        * wtf/text/StringImpl.h:
        * wtf/text/SymbolImpl.cpp:
        (WTF::PrivateSymbolImpl::create):
        (WTF::PrivateSymbolImpl::createNullSymbol):
        * wtf/text/SymbolImpl.h:
        (WTF::SymbolImpl::isPrivate):
        (WTF::SymbolImpl::StaticSymbolImpl::StaticSymbolImpl):
        (WTF::SymbolImpl::SymbolImpl):
        (WTF::PrivateSymbolImpl::PrivateSymbolImpl):

2017-07-30  Brady Eidson  <beidson@apple.com>

        Add URLSchemeHandler API tests that verify the lack of URLSchemeTask object leaks.
        https://bugs.webkit.org/show_bug.cgi?id=174958

        Reviewed by Darin Adler.

        This patch adds a new template class "InstanceCounted<T>".
        
        For each specialization, "InstanceCounted" will keep track of the total number of
        instances in existence.
        
        This makes explicate leak checking in API tests possible.
        
        Since this adds some runtime and storage overhead the code that actually does anything
        is only compiled in debug builds.
        
        * WTF.xcodeproj/project.pbxproj:
        * wtf/InstanceCounted.h: Added.
        (WTF::InstanceCounted::InstanceCounted):
        (WTF::InstanceCounted::instanceCount):
        (WTF::InstanceCounted::~InstanceCounted):

2017-07-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Drop Thread initialization wait in some platforms by introducing StackBounds::newThreadStackBounds(PlatformThreadHandle&)
        https://bugs.webkit.org/show_bug.cgi?id=174303

        Reviewed by Mark Lam.

        Currently, the caller thread of Thread::create() need to wait for completion of the initialization of the target thread.
        This is because we need to initialize Thread::m_stack in the target thread. Before this patch, a target thread's
        StackBounds can only be retrieved by the target thread itself. However, this potentially causes context-switching between
        the caller and the target threads and hurts efficiency of creating threads.

        Fortunately, in some platforms (including major platforms except for Windows), we can get StackBounds of a target
        thread from a caller thread. This allows us to avoid waiting for completion of thread initialization.

        In this patch, we introduce HAVE_STACK_BOUNDS_FOR_NEW_THREAD and StackBounds::newThreadStackBounds. When creating
        a new thread, we will use StackBounds::newThreadStackBounds to get StackBounds if possible. As a result, we
        do not need to wait for completion of thread initialization to ensure m_stack field of Thread is initialized.

        While some documents claim that it is possible on Windows to get the StackBounds of another thread[1], the method relies on
        undocumented Windows NT APIs (NtQueryInformationThread, NtReadVirtualMemory etc.). So in this patch, we just
        use the conservative approach simply waiting for completion of thread initialization.

        [1]: https://stackoverflow.com/questions/3918375/how-to-get-thread-stack-information-on-windows

        * wtf/Platform.h:
        * wtf/StackBounds.cpp:
        (WTF::StackBounds::newThreadStackBounds):
        (WTF::StackBounds::currentThreadStackBoundsInternal):
        (WTF::StackBounds::initialize): Deleted.
        * wtf/StackBounds.h:
        (WTF::StackBounds::currentThreadStackBounds):
        (WTF::StackBounds::StackBounds):
        * wtf/Threading.cpp:
        (WTF::Thread::NewThreadContext::NewThreadContext):
        (WTF::Thread::entryPoint):
        (WTF::Thread::create):
        (WTF::Thread::initialize): Deleted.
        * wtf/Threading.h:
        * wtf/ThreadingPrimitives.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::wtfThreadEntryPoint):
        (WTF::Thread::establishHandle):
        (WTF::Thread::initializeCurrentThreadInternal):
        (WTF::Thread::current):
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::Thread::initializeCurrentThreadInternal):
        (WTF::Thread::current):
        * wtf/win/MainThreadWin.cpp:
        (WTF::initializeMainThreadPlatform):

2017-07-27  JF Bastien  <jfbastien@apple.com>

        Update lock benchmarks
        https://bugs.webkit.org/show_bug.cgi?id=174907

        Reviewed by Filip Pizlo.

        * benchmarks/ConditionSpeedTest.cpp:
        (main):
        * benchmarks/LockFairnessTest.cpp:
        * benchmarks/LockSpeedTest.cpp:
        * benchmarks/ToyLocks.h:

2017-07-26  Brian Burg  <bburg@apple.com>

        Remove WEB_TIMING feature flag
        https://bugs.webkit.org/show_bug.cgi?id=174795

        Reviewed by Alex Christensen.

        * wtf/FeatureDefines.h:

2017-07-26  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Enable KeyboardEvent key and code attributes
        https://bugs.webkit.org/show_bug.cgi?id=174822

        Reviewed by Žan Doberšek.

        There is no reason for this to be disabled from what I see.

        * wtf/FeatureDefines.h: Enable KeyboardEvent key and code attributes.

2017-07-23  Filip Pizlo  <fpizlo@apple.com>

        B3 should do LICM
        https://bugs.webkit.org/show_bug.cgi?id=174750

        Reviewed by Keith Miller and Saam Barati.
        
        Moved DFG::NaturalLoops to WTF. The new templatized NaturalLoops<> uses the same Graph abstraction as
        Dominators<>. This allows us to add a B3::NaturalLoops for free.
        
        Also made small tweaks to RangeSet, which the LICM uses.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Dominators.h:
        * wtf/NaturalLoops.h: Added.
        (WTF::NaturalLoop::NaturalLoop):
        (WTF::NaturalLoop::graph):
        (WTF::NaturalLoop::header):
        (WTF::NaturalLoop::size):
        (WTF::NaturalLoop::at):
        (WTF::NaturalLoop::operator[]):
        (WTF::NaturalLoop::contains):
        (WTF::NaturalLoop::index):
        (WTF::NaturalLoop::isOuterMostLoop):
        (WTF::NaturalLoop::dump):
        (WTF::NaturalLoop::addBlock):
        (WTF::NaturalLoops::NaturalLoops):
        (WTF::NaturalLoops::graph):
        (WTF::NaturalLoops::numLoops):
        (WTF::NaturalLoops::loop):
        (WTF::NaturalLoops::headerOf):
        (WTF::NaturalLoops::innerMostLoopOf):
        (WTF::NaturalLoops::innerMostOuterLoop):
        (WTF::NaturalLoops::belongsTo):
        (WTF::NaturalLoops::loopDepth):
        (WTF::NaturalLoops::loopsOf):
        (WTF::NaturalLoops::dump):
        * wtf/RangeSet.h:
        (WTF::RangeSet::begin):
        (WTF::RangeSet::end):
        (WTF::RangeSet::addAll):

2017-07-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        Implement FALLTHROUGH attribute for C with GCC
        https://bugs.webkit.org/show_bug.cgi?id=174555

        Reviewed by Darin Adler.

        My previous attempt to silence the JSC -Wimplicit-fallthrough warnings failed because they
        are coming from a C file, and our FALLTHROUGH macro is only implemented for C++. So
        implement it for C as well, using C attribute syntax.
 
        Note this is only possible to do for GCC, because Clang only supports this attribute using
        the [[C++ attribute syntax]].

        * wtf/Compiler.h:

2017-07-14  Filip Pizlo  <fpizlo@apple.com>

        It should be easy to decide how WebKit yields
        https://bugs.webkit.org/show_bug.cgi?id=174298

        Reviewed by Saam Barati.
        
        Created a Thread::yield() abstraction for sched_yield(), and made WTF use it everywhere that it
        had previously used std::this_thread::yield().
        
        To make it less annoying to experiment with changes to the lock algorithm in the future, this also
        moves the meat of the algorithm into LockAlgorithmInlines.h. Only two files include that header.
        Since LockAlgorithm.h no longer includes ParkingLot.h, a bunch of files in WK now need to include
        timing headers (Seconds, MonotonicTime, etc) manually.

        * WTF.xcodeproj/project.pbxproj:
        * benchmarks/ToyLocks.h:
        * wtf/CMakeLists.txt:
        * wtf/Lock.cpp:
        * wtf/LockAlgorithm.h:
        (WTF::LockAlgorithm::lockSlow): Deleted.
        (WTF::LockAlgorithm::unlockSlow): Deleted.
        * wtf/LockAlgorithmInlines.h: Added.
        (WTF::hasParkedBit>::lockSlow):
        (WTF::hasParkedBit>::unlockSlow):
        * wtf/MainThread.cpp:
        * wtf/RunLoopTimer.h:
        * wtf/Threading.cpp:
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::yield):
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::yield):
        * wtf/WordLock.cpp:
        (WTF::WordLockBase::lockSlow):
        (WTF::WordLockBase::unlockSlow):

2017-07-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Extend ThreadGroup::add results from bool to ThreadGroupAddResult
        https://bugs.webkit.org/show_bug.cgi?id=174705

        Reviewed by Mark Lam.

        After starting using ThreadGroup to bookkeep active threads for Signals,
        we would like to know tristate of ThreadGroup::add result, NewlyAdded, AlreadyAdded, NotAdded.
        This patch extends the result of ThreadGroup::add from bool to ThreadGroupAddResult tristate.
        Note that NotAdded is returned if the target thread is dying.

        * wtf/ThreadGroup.cpp:
        (WTF::ThreadGroup::add):
        (WTF::ThreadGroup::addCurrentThread):
        * wtf/ThreadGroup.h:
        * wtf/Threading.cpp:
        (WTF::Thread::addToThreadGroup):
        * wtf/Threading.h:
        * wtf/threads/Signals.cpp:
        (WTF::registerThreadForMachExceptionHandling):

2017-07-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r219732.
        https://bugs.webkit.org/show_bug.cgi?id=174748

        static is not threadsafe in WebKit tree (Requested by
        yusukesuzuki on #webkit).

        Reverted changeset:

        "[WTF] Drop initializeDate"
        https://bugs.webkit.org/show_bug.cgi?id=174714
        http://trac.webkit.org/changeset/219732

2017-07-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Drop initializeDate
        https://bugs.webkit.org/show_bug.cgi?id=174714

        Reviewed by Darin Adler.

        minYear static variable will be initialized in an exclusive manner, which is ensured by C++ "static" semantics.
        Thus, we do not need to call initializeDate() explicitly.

        * wtf/DateMath.cpp:
        (WTF::equivalentYearForDST):
        (WTF::initializeDates): Deleted.
        * wtf/Threading.cpp:
        (WTF::initializeThreading):

2017-07-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Introduce static symbols
        https://bugs.webkit.org/show_bug.cgi?id=158863

        Reviewed by Darin Adler.

        We add a new class StaticSymbolImpl. StaticSymbolImpl can offer
        the way to create static SymbolImpl. It can be shared between
        multiple VMs and multiple threads.

        * wtf/text/SymbolImpl.h:
        (WTF::SymbolImpl::StaticSymbolImpl::StaticSymbolImpl):
        (WTF::SymbolImpl::StaticSymbolImpl::operator SymbolImpl&):
        For StaticSymbolImpl's hashForSymbol, we use usual string hash value.
        Since all the SymbolImpls are unique, basically, any value is OK here.
        Non-confilicting to the other SymbolImpls is ideal.

2017-07-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Newly added AtomicStringImpl should use BufferInternal static string if StringImpl is static
        https://bugs.webkit.org/show_bug.cgi?id=174501

        Reviewed by Darin Adler.

        When creating AtomicStringImpl from static StringImpl, we can just use createWithoutCopying
        to create a BufferInternal AtomicStringImpl which m_data{8,16} is static string's one.

        * wtf/text/AtomicStringImpl.cpp:
        (WTF::CStringTranslator::hash):
        (WTF::CStringTranslator::equal):
        (WTF::CStringTranslator::translate):
        (WTF::AtomicStringImpl::add):
        (WTF::HashTranslatorCharBuffer::HashTranslatorCharBuffer):
        (WTF::UCharBufferTranslator::hash):
        (WTF::UCharBufferTranslator::equal):
        (WTF::UCharBufferTranslator::translate):
        (WTF::LCharBufferTranslator::hash):
        (WTF::LCharBufferTranslator::equal):
        (WTF::LCharBufferTranslator::translate):
        (WTF::BufferFromStaticDataTranslator::hash):
        (WTF::BufferFromStaticDataTranslator::equal):
        (WTF::BufferFromStaticDataTranslator::translate):
        (WTF::AtomicStringImpl::addLiteral):
        (WTF::addSymbol):
        (WTF::addStatic):
        (WTF::AtomicStringImpl::addSlowCase):
        (WTF::AtomicStringImpl::lookUp):
        (WTF::CharBufferFromLiteralDataTranslator::hash): Deleted.
        (WTF::CharBufferFromLiteralDataTranslator::equal): Deleted.
        (WTF::CharBufferFromLiteralDataTranslator::translate): Deleted.
        (WTF::addSubstring): Deleted.
        * wtf/text/StringImpl.h:

2017-07-21  Konstantin Tokarev  <annulen@yandex.ru>

       [cmake] Unreviewed, add definitions necessary to use ICU shipped with macOS

       macOS system ICU libraries are built with U_DISABLE_RENAMING=1 and
       U_SHOW_CPLUSPLUS_API=0. After r219155 we have to pass this definitons
       explicitly, because ICU headers in the tree are not modified anymore.

        * wtf/PlatformMac.cmake: Rely on ICU_LIBRARIES instead of passing ICU
        library name explicitly in WTF_LIBRARIES.

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Replace calls to Vector::resize() with calls to more efficient shrink() / grow() when applicable
        https://bugs.webkit.org/show_bug.cgi?id=174660

        Reviewed by Geoffrey Garen.

        Replace calls to Vector::resize() with calls to more efficient shrink() / grow() when applicable.
        This essentially replaces a branch to figure out if the new size is less or greater than the
        current size by an assertion.

        * wtf/IndexSparseSet.h:
        (WTF::OverflowHandler>::IndexSparseSet):
        (WTF::OverflowHandler>::clear):
        * wtf/Insertion.h:
        (WTF::executeInsertions):
        * wtf/RangeSet.h:
        (WTF::RangeSet::compact):
        * wtf/Vector.h:
        (WTF::removeRepeatedElements):
        * wtf/persistence/Coders.h:

2017-07-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use ThreadGroup to bookkeep active threads for Mach exception
        https://bugs.webkit.org/show_bug.cgi?id=174678

        Reviewed by Mark Lam.

        We can use ThreadGroup to bookkeep active threads for Mach exceptions.
        When the thread dies, it is automatically removed from the thread groups.
        So we do not need to call unregisterThreadForMachExceptionHandling.

        * wtf/ThreadGroup.cpp:
        (WTF::ThreadGroup::~ThreadGroup):
        (WTF::ThreadGroup::add):
        * wtf/ThreadGroup.h:
        * wtf/ThreadHolder.cpp:
        (WTF::ThreadHolder::~ThreadHolder):
        * wtf/Threading.cpp:
        (WTF::Thread::addToThreadGroup):
        (WTF::Thread::removeFromThreadGroup):
        * wtf/Threading.h:
        * wtf/threads/Signals.cpp:
        (WTF::setExceptionPorts):
        (WTF::activeThreads):
        (WTF::registerThreadForMachExceptionHandling):
        (WTF::installSignalHandler):
        (WTF::unregisterThreadForMachExceptionHandling): Deleted.
        * wtf/threads/Signals.h:

2017-07-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove unnecessary indirection of WTF::Thread entry point
        https://bugs.webkit.org/show_bug.cgi?id=174291

        Reviewed by Mark Lam.

        Now wtfThreadEntryPoint is almost the same. Only the difference is function signature due to platform APIs.
        We remove ThreadFunctionInvocation indirection in ThreadingPthread.cpp and ThreadingWin.cpp.

        Also, ThreadFunctionInvocation keeps a RefPtr to the Thread object. This was previously needed to keep the
        Thread object alive until the thread itself could install the ThreadHolder into its thread local storage.
        The ThreadHolder has a Ref that keeps the Thread object alive for the lifetime of the thread. Since
        Thread::create() now waits for the thread to be initialized before returning and Thread::create() hold a Ref
        to the Thread object, we are guaranteed that the Thread object will be alive long enough for it to be installed
        in the thread's ThreadHolder, and we no longer need ThreadFunctionInvocation.

        And we also simplify ThreadHolder::initialize a bit. Now Thread::create waits for the completion of Thread
        initialization. So, after establishing thread handle, we can call ThreadHolder::initialize before completing
        Thread initialization.

        Also we drop errno.h ifdefs in ThreadingWin.cpp. This is introduced to support WinCE. But now WinCE port is removed.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/ThreadFunctionInvocation.h: Removed.
        * wtf/ThreadHolder.h:
        * wtf/ThreadHolderWin.cpp:
        (WTF::ThreadHolder::initialize):
        * wtf/Threading.cpp:
        (WTF::Thread::entryPoint):
        (WTF::Thread::create):
        (WTF::threadEntryPoint): Deleted.
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::wtfThreadEntryPoint):
        (WTF::Thread::establishHandle):
        (WTF::Thread::initializeCurrentThreadInternal):
        (WTF::Thread::current):
        (WTF::Thread::establishPlatformSpecificHandle):
        (WTF::Thread::createInternal): Deleted.
        (WTF::Thread::establish): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::Thread::initializeCurrentThreadInternal):
        (WTF::wtfThreadEntryPoint):
        (WTF::Thread::establishHandle):
        (WTF::Thread::current):
        (WTF::Thread::establishPlatformSpecificHandle):
        (WTF::Thread::createInternal): Deleted.
        (WTF::Thread::establish): Deleted.
        * wtf/win/MainThreadWin.cpp:
        (WTF::initializeMainThreadPlatform):

2017-07-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Implement WTF::ThreadGroup
        https://bugs.webkit.org/show_bug.cgi?id=174081

        Reviewed by Mark Lam.

        This patch implements WTF::ThreadGroup. It implements core of JSC::MachineThreads with more reliable way.
        JSC::MachineThreads was complicated because of managing dead threads. Each JSC::MachineThreads has its
        own TLS with a registered destructor. And everytime a thread dies, the registered TLS destructor is called.
        And this destructor will remove the current dying thread from JSC::MachineThreads.

        However the above implementation is tricky. And each JSC::MachineThreads requires own TLS space, which is
        not considered in WTF's Windows ThreadSpecific implementation. Current design works well since we only
        have small number of MachineThreads right now.

        Instead, we use more reliable way. After introducing WTF::Thread, WTF::Thread has WTF::Thread::didExit,
        which is called when associated TLS (with WTF::Thread) is destroyed. We leverage this mechanism to remove
        WTF::Thread from MachineThreads.

        This patch introduces WTF::ThreadGroup. It is tightly integrated with WTF::Thread: WTF::Thread knows
        ThreadGroups which includes this thread. And WTF::ThreadGroup of course knows WTF::Threads added to it.
        WTF::Thread::didExit carefully remove itself from WTF::ThreadGroups.

        The most important part of this patch is locking. WTF::Thread can die. And WTF::ThreadGroup can die.
        If we take a design using two fine grain locks in WTF::Thread and WTF::ThreadGroup, we easily encounter
        dead lock. Consider the following case.

        1. When adding WTF::Thread (TH) to WTF::ThreadGroup (THG), we first hold a lock of THG, and hold a lock of TH (locking order is THG -> TH).
        2. When TH dies, TH need to hold a lock of TH to iterate THGs. And we hold a lock of THG to unregister TH from it (locking order is TH -> THG).
        3. When suspending and resuming THs in THG, we first hold a lock of THG. And then, we hold a lock of TH to suspend and resume it (locking order is THG -> TH).
        4. When destroying THG, we need to hold a lock of TH to unregister THG from TH. We can hold a lock of THG before that (locking order is THG -> TH).

        Then, it easily causes dead lock. We cannot swap the locking order of (2) since iterating THG requires a lock of TH.
        To solve this problem, we use std::shared_ptr and std::weak_ptr.

        1. When adding WTF::Thread (TH) to WTF::ThreadGroup (THG), we first hold THG, and hold a lock of TH. (THG -> TH)
        2. When TH dies, TH first hold lock of TH. And we use std::weak_ptr<>::lock() to retain non-destructed ThreadGroups.
        If some of ThreadGroups are dying, we just ignore them. It is ok because such a ThreadGroup will be destructed. So we do not need to unregister this thread from
        such a ThreadGroup. Then, we have Vector<std::shared_ptr<ThreadGroup>>. So we unlock a lock of TH. To unregister a thread from thread group, we first hold a
        lock of THG and then hold a lock of TH. Both lifetime is ensured: THG is retained by std::shared_ptr. And TH is itself. (TH), (THG -> TH).
        3. When suspending and resuming THs in THG, we first hold a lock of THG. And then, we hold a lock of TH to suspend and resume it (THG -> TH).
        4. When destroying THG, we hold a lock of THG. And hold a lock of TH. During holding THG's lock, registered thread never dies because (2) holds THG lock. (THG -> TH).

        We also fix suspend and resume locking mechanism to avoid dead lock. We should hold the global lock when suspending and resuming.
        If we use per-thread lock, the suspended thread can hold the lock of the other threads. It causes dead lock.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/AutomaticThread.cpp:
        * wtf/CMakeLists.txt:
        * wtf/CrossThreadCopier.h:
        * wtf/ParkingLot.h:
        * wtf/ThreadGroup.cpp: Copied from Source/JavaScriptCore/wasm/WasmMachineThreads.cpp.
        (WTF::ThreadGroup::~ThreadGroup):
        (WTF::ThreadGroup::add):
        (WTF::ThreadGroup::addCurrentThread):
        * wtf/ThreadGroup.h: Copied from Source/JavaScriptCore/wasm/WasmMachineThreads.cpp.
        (WTF::ThreadGroup::create):
        (WTF::ThreadGroup::threads):
        (WTF::ThreadGroup::getLock):
        (WTF::ThreadGroup::weakFromThis):
        * wtf/Threading.cpp:
        (WTF::shouldRemoveThreadFromThreadGroup):
        (WTF::Thread::didExit):
        (WTF::Thread::addToThreadGroup):
        (WTF::Thread::removeFromThreadGroup):
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::resume):
        (WTF::Thread::getRegisters):
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::resume):
        (WTF::Thread::getRegisters):

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_RANGE_LOOP_ANALYSIS
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:

2017-07-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        WTF::Thread should have the threads stack bounds.
        https://bugs.webkit.org/show_bug.cgi?id=173975

        Reviewed by Mark Lam.

        We move StackBounds from WTFThreadData to WTF::Thread.
        One important thing is that we should make valid StackBounds
        visible to Thread::create() caller. When the caller get
        WTF::Thread from Thread::create(), this WTF::Thread should
        have a valid StackBounds. But StackBounds information can be
        retrived only in the WTF::Thread's thread itself.

        We also clean up WTF::initializeThreading. StringImpl::empty()
        is now statically initialized by using constexpr constructor.
        Thus we do not need to call StringImpl::empty() explicitly here.
        And WTF::initializeThreading() does not have any main thread
        affinity right now in all the platforms. So we fix the comment
        in Threading.h. Then, now, WTF::initializeThreading() is called
        in UI thread when using Web thread in iOS.

        * wtf/StackBounds.h:
        (WTF::StackBounds::emptyBounds):
        (WTF::StackBounds::StackBounds):
        * wtf/Threading.cpp:
        (WTF::threadEntryPoint):
        (WTF::Thread::create):
        (WTF::Thread::currentMayBeNull):
        (WTF::Thread::initialize):
        (WTF::initializeThreading):
        * wtf/Threading.h:
        (WTF::Thread::stack):
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::Thread::current):
        (WTF::initializeCurrentThreadEvenIfNonWTFCreated): Deleted.
        (WTF::Thread::currentMayBeNull): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::Thread::initializeCurrentThreadInternal):
        (WTF::Thread::current):
        * wtf/WTFThreadData.cpp:
        (WTF::WTFThreadData::WTFThreadData):
        * wtf/WTFThreadData.h:
        (WTF::WTFThreadData::stack):

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_OBJC_LITERAL_CONVERSION
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig:

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_NON_LITERAL_NULL_CONVERSION
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:

2017-07-17  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Set library types before their targets are created
        https://bugs.webkit.org/show_bug.cgi?id=174600

        Reviewed by Michael Catanzaro.

        Since r219560 library targets are created before PlatformXXX.cmake
        files are processed, however library type must be passed in
        add_library() call and cannot be changed afterwards. Set these
        variables in OptionsXXX.cmake.

        * wtf/PlatformGTK.cmake:
        * wtf/PlatformMac.cmake:

2017-07-17  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        Move USE_AVFOUNDATION definition on Windows to wtf/Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=174356

        Reviewed by Brent Fulgham.

        Move the definition of USE_AVFOUNDATION on Windows to wtf/platform.h

        Add a custom command to generate AVFoundationHeaderDetection.h, which
        is renamed from WebCoreHeaderDetection.h

        * AVFoundationSupport.py: Moved from Source/WebCore/AVFoundationSupport.py.
        * wtf/Platform.h:
        * wtf/PlatformWin.cmake:

2017-07-17  Darin Adler  <darin@apple.com>

        Improve use of NeverDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=174348

        Reviewed by Sam Weinig.

        * wtf/HashSet.h: Added an overload of HashSet::add that takes an initializer list of
        const references. This is handy to add a bunch of values all at once. Later we can
        consider optimizing to grow the hash table only once instead of deciding whether to
        grow repeatedly as we add each value.
        (WTF::copyToVector): Changed to use std::copy, removing 4 of the 6 lines of code here.

        * wtf/MemoryPressureHandler.cpp: Include NeverDestroyed.h here ...
        * wtf/MemoryPressureHandler.h: ... not here.

        * wtf/NeverDestroyed.h: Added the ability to have a const NeverDestroyed.
        Added a makeNeverDestroyed function that deduces the type from the argument.
        With auto, this can be used to avoid writing out a long type twice.

        * wtf/ThreadingPthreads.cpp: Removed unneeded include of NeverDestroyed.h.
        * wtf/text/AtomicString.cpp: Ditto.

2017-07-17  Konstantin Tokarev  <annulen@yandex.ru>

        [CMake] Create targets before WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS is called
        https://bugs.webkit.org/show_bug.cgi?id=174557

        Reviewed by Michael Catanzaro.

        * wtf/CMakeLists.txt:

2017-07-14  Jonathan Bedard  <jbedard@apple.com>

        Add iOS 11 SPI
        https://bugs.webkit.org/show_bug.cgi?id=174430
        <rdar://problem/33269288>

        Reviewed by Tim Horton.

        * Configurations/WTF.xcconfig: Exclude MachExceptions.def when building iOS 11 for
        the iOS simulator.

2017-07-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r219510.
        https://bugs.webkit.org/show_bug.cgi?id=174525

        Need to revert length() == 0 check for null string (Requested
        by yusukesuzuki on #webkit).

        Reverted changeset:

        "[WTF] Newly added AtomicStringImpl should use BufferInternal
        static string if StringImpl is static"
        https://bugs.webkit.org/show_bug.cgi?id=174501
        http://trac.webkit.org/changeset/219510

2017-07-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Newly added AtomicStringImpl should use BufferInternal static string if StringImpl is static
        https://bugs.webkit.org/show_bug.cgi?id=174501

        Reviewed by Darin Adler.

        When creating AtomicStringImpl from static StringImpl, we can just use createWithoutCopying
        to create a BufferInternal AtomicStringImpl which m_data{8,16} is static string's one.

        * wtf/text/AtomicStringImpl.cpp:
        (WTF::CStringTranslator::hash):
        (WTF::CStringTranslator::equal):
        (WTF::CStringTranslator::translate):
        (WTF::AtomicStringImpl::add):
        (WTF::HashTranslatorCharBuffer::HashTranslatorCharBuffer):
        (WTF::UCharBufferTranslator::hash):
        (WTF::UCharBufferTranslator::equal):
        (WTF::UCharBufferTranslator::translate):
        (WTF::LCharBufferTranslator::hash):
        (WTF::LCharBufferTranslator::equal):
        (WTF::LCharBufferTranslator::translate):
        (WTF::BufferFromStaticDataTranslator::hash):
        (WTF::BufferFromStaticDataTranslator::equal):
        (WTF::BufferFromStaticDataTranslator::translate):
        (WTF::AtomicStringImpl::addLiteral):
        (WTF::addSymbol):
        (WTF::addStatic):
        (WTF::AtomicStringImpl::addSlowCase):
        (WTF::AtomicStringImpl::lookUp):
        (WTF::CharBufferFromLiteralDataTranslator::hash): Deleted.
        (WTF::CharBufferFromLiteralDataTranslator::equal): Deleted.
        (WTF::CharBufferFromLiteralDataTranslator::translate): Deleted.
        (WTF::addSubstring): Deleted.
        * wtf/text/StringImpl.h:

2017-07-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use std::unique_ptr for StackTrace
        https://bugs.webkit.org/show_bug.cgi?id=174495

        Reviewed by Alex Christensen.

        Instead of returning pointer to heap allocated StackTrace,
        we should return std::unique_ptr<StackTrace>.
        And we also move WTFGetBackTrace from Assertions.cpp to
        StackTrace.cpp to consolidate stack trace related operations
        into StackTrace.cpp.

        * wtf/Assertions.cpp:
        * wtf/StackTrace.cpp:
        (WTFGetBacktrace):
        (WTF::StackTrace::captureStackTrace):
        * wtf/StackTrace.h:

2017-07-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, annotate inline for operator==/!= for FastAllocator
        https://bugs.webkit.org/show_bug.cgi?id=174366

        * wtf/FastMalloc.h:
        (WTF::operator==):
        (WTF::operator!=):

2017-07-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r219176.
        https://bugs.webkit.org/show_bug.cgi?id=174436

        "Can cause infinite recursion on iOS" (Requested by mlam on
        #webkit).

        Reverted changeset:

        "WTF::Thread should have the threads stack bounds."
        https://bugs.webkit.org/show_bug.cgi?id=173975
        http://trac.webkit.org/changeset/219176

2017-07-12  Adrian Perez de Castro  <aperez@igalia.com>

        [WTF] Failure to build when the compiler specifically targets ARMv8-A / defines __ARM_ARCH_8A__
        https://bugs.webkit.org/show_bug.cgi?id=174425

        Reviewed by Michael Catanzaro.

        * wtf/Platform.h: Also check for __ARCH_ARM_8A__ to detect ARMv8.

2017-07-12  Michael Saboff  <msaboff@apple.com>

        Unreviewed build fix when both DATA_LOG_TO_FILE and DATA_LOG_FILENAME are defined.

        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce): Changed declaration of logBasename from
        char* logBasename to const char* logBasename.

2017-07-12  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219401.

        This revision rolled out the previous patch, but after talking
        with reviewer, a rebaseline is what was needed.Rolling back in
        before rebaseline.

        Reverted changeset:

        "Unreviewed, rolling out r219379."
        https://bugs.webkit.org/show_bug.cgi?id=174400
        http://trac.webkit.org/changeset/219401

2017-07-12  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219379.

        This revision caused a consistent failure in the test
        fast/dom/Window/property-access-on-cached-window-after-frame-
        removed.html.

        Reverted changeset:

        "Remove NAVIGATOR_HWCONCURRENCY"
        https://bugs.webkit.org/show_bug.cgi?id=174400
        http://trac.webkit.org/changeset/219379

2017-07-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix Windows build
        https://bugs.webkit.org/show_bug.cgi?id=174366

        * wtf/FastMalloc.h:
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::FastAllocator::operator==): Deleted.
        (WTF::FastAllocator::operator!=): Deleted.

2017-07-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Enable FILE_LOCK and implement lockFile and unlockFile
        https://bugs.webkit.org/show_bug.cgi?id=174357

        Reviewed by Michael Catanzaro.

        * wtf/Platform.h: Enable FILE_LOCK in GTK and WPE ports.

2017-07-11  Dean Jackson  <dino@apple.com>

        Remove NAVIGATOR_HWCONCURRENCY
        https://bugs.webkit.org/show_bug.cgi?id=174400

        Reviewed by Sam Weinig.

        * wtf/FeatureDefines.h:

2017-07-11  Dean Jackson  <dino@apple.com>

        Rolling out r219372.

        * wtf/FeatureDefines.h:

2017-07-11  Dean Jackson  <dino@apple.com>

        Remove NAVIGATOR_HWCONCURRENCY
        https://bugs.webkit.org/show_bug.cgi?id=174400

        Reviewed by Sam Weinig.

        * wtf/FeatureDefines.h:

2017-07-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Drop unnecessary AtomicString constructor since we have constexpr hash function
        https://bugs.webkit.org/show_bug.cgi?id=174347

        Reviewed by Alex Christensen.

        Previously, we calculate hash value in perl script and generate source code with that value.
        This AtomicString constructor takes this pre-calculated hash value to efficiently construct
        itself. But now, we have constexpr hash function, then we do not need to specify hash value
        directly in this way. Thus we drop this functionality.

        * wtf/text/AtomicString.h:
        * wtf/text/AtomicStringImpl.cpp:
        (WTF::HashAndCharactersTranslator::hash): Deleted.
        (WTF::HashAndCharactersTranslator::equal): Deleted.
        (WTF::HashAndCharactersTranslator::translate): Deleted.
        * wtf/text/AtomicStringImpl.h:
        (WTF::AtomicStringImpl::add):

2017-07-10  Per Arne Vollan  <pvollan@apple.com>

        [Win] Link error when building WTF from WTF.proj project file.
        https://bugs.webkit.org/show_bug.cgi?id=174316
        <rdar://problem/33178200>

        Reviewed by Brent Fulgham.

        WTF_CPU_X86 cmake variable needs to be set for link libraries directories to be correct.

        * WTF.vcxproj/WTF.proj:

2017-07-03  Brian Burg  <bburg@apple.com>

        Web Replay: remove some unused code
        https://bugs.webkit.org/show_bug.cgi?id=173903

        Rubber-stamped by Joseph Pecoraro.

        * wtf/FeatureDefines.h:

2017-07-10  Brady Eidson  <beidson@apple.com>

        Cleanup lifetime issues of UniqueIDBDatabase and IDBBackingStore.
        <rdar://problem/32908525> and https://bugs.webkit.org/show_bug.cgi?id=174244

        Reviewed by David Kilzer and Alex Christensen. 

        Add proper "kill" support to CrossThreadQueue, as well as isEmpty() support.

        * wtf/CrossThreadQueue.h:
        (WTF::CrossThreadQueue<DataType>::append):
        (WTF::CrossThreadQueue<DataType>::kill):
        (WTF::CrossThreadQueue<DataType>::isKilled):
        (WTF::CrossThreadQueue<DataType>::isEmpty):
        (WTF::CrossThreadQueue::isKilled): Deleted.

2017-07-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Use fastMalloc / fastFree for STL containers
        https://bugs.webkit.org/show_bug.cgi?id=174297

        Reviewed by Sam Weinig.

        * wtf/FastMalloc.h:
        (WTF::FastAllocator::FastAllocator):
        (WTF::FastAllocator::allocate):
        (WTF::FastAllocator::deallocate):
        (WTF::FastAllocator::operator==):
        (WTF::FastAllocator::operator!=):

2017-07-07  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Use a rolling 30-day uptime for processing statistics
        https://bugs.webkit.org/show_bug.cgi?id=174235
        <rdar://problem/33164381>

        Reviewed by Chris Dumez.

        Modify Deque to allow it to be used in a template specialization in KeyedDecoder.

        * wtf/Deque.h:

2017-07-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r219238, r219239, and r219241.
        https://bugs.webkit.org/show_bug.cgi?id=174265

        "fast/workers/dedicated-worker-lifecycle.html is flaky"
        (Requested by yusukesuzuki on #webkit).

        Reverted changesets:

        "[WTF] Implement WTF::ThreadGroup"
        https://bugs.webkit.org/show_bug.cgi?id=174081
        http://trac.webkit.org/changeset/219238

        "Unreviewed, build fix after r219238"
        https://bugs.webkit.org/show_bug.cgi?id=174081
        http://trac.webkit.org/changeset/219239

        "Unreviewed, CLoop build fix after r219238"
        https://bugs.webkit.org/show_bug.cgi?id=174081
        http://trac.webkit.org/changeset/219241

2017-07-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, Windows build fix after r219233 part 4
        https://bugs.webkit.org/show_bug.cgi?id=174231

        * wtf/Assertions.h:

2017-07-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, Windows build fix after r219233 part 3
        https://bugs.webkit.org/show_bug.cgi?id=174231

        * wtf/Assertions.h:
        (compilerFenceForCrash):

2017-07-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, Windows build fix after r219233 part 2
        https://bugs.webkit.org/show_bug.cgi?id=174231

        * wtf/Assertions.h:

2017-07-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, Windows build fix after r219233
        https://bugs.webkit.org/show_bug.cgi?id=174231

        * wtf/Compiler.h:

2017-07-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix after r219238
        https://bugs.webkit.org/show_bug.cgi?id=174081

        * wtf/Threading.cpp:
        (WTF::Thread::addToThreadGroup):

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Implement WTF::ThreadGroup
        https://bugs.webkit.org/show_bug.cgi?id=174081

        Reviewed by Mark Lam.

        This patch implements WTF::ThreadGroup. It implements core of JSC::MachineThreads with more reliable way.
        JSC::MachineThreads was complicated because of managing dead threads. Each JSC::MachineThreads has its
        own TLS with a registered destructor. And everytime a thread dies, the registered TLS destructor is called.
        And this destructor will remove the current dying thread from JSC::MachineThreads.

        However the above implementation is tricky. And each JSC::MachineThreads requires own TLS space, which is
        not considered in WTF's Windows ThreadSpecific implementation. Current design works well since we only
        have small number of MachineThreads right now.

        Instead, we use more reliable way. After introducing WTF::Thread, WTF::Thread has WTF::Thread::didExit,
        which is called when associated TLS (with WTF::Thread) is destroyed. We leverage this mechanism to remove
        WTF::Thread from MachineThreads.

        This patch introduces WTF::ThreadGroup. It is tightly integrated with WTF::Thread: WTF::Thread knows
        ThreadGroups which includes this thread. And WTF::ThreadGroup of course knows WTF::Threads added to it.
        WTF::Thread::didExit carefully remove itself from WTF::ThreadGroups.

        The most important part of this patch is locking. WTF::Thread can die. And WTF::ThreadGroup can die.
        If we take a design using two fine grain locks in WTF::Thread and WTF::ThreadGroup, we easily encounter
        dead lock. Consider the following case.

        1. When adding WTF::Thread (TH) to WTF::ThreadGroup (THG), we first hold a lock of THG, and hold a lock of TH (locking order is THG -> TH).
        2. When TH dies, TH need to hold a lock of TH to iterate THGs. And we hold a lock of THG to unregister TH from it (locking order is TH -> THG).
        3. When suspending and resuming THs in THG, we first hold a lock of THG. And then, we hold a lock of TH to suspend and resume it (locking order is THG -> TH).
        4. When destroying THG, we need to hold a lock of TH to unregister THG from TH. We can hold a lock of THG before that (locking order is THG -> TH).

        Then, it easily causes dead lock. We cannot swap the locking order of (2) since iterating THG requires a lock of TH.
        To solve this problem, we introduce one global lock ThreadGroup::destructionMutex (GL).

        1. When adding WTF::Thread (TH) to WTF::ThreadGroup (THG), we first hold GL, and hold a lock of THG. Do not hold a
        lock of TH. TH's thread groups information is guarded by GL instead of a lock of TH (locking order is GL -> THG).
        2. When TH dies, TH need to hold GL to iterate THGs. And we hold a lock of THG to unregister TH from it (locking order is GL -> THG).
        3. When suspending and resuming THs in THG, we first hold a lock of THG. And then, we hold a lock of TH to suspend and resume it (locking order is THG -> TH).
        4. When destroying THG, we need to hold GL to unregister THG from TH. We can hold a lock of THG after that (locking order is GL -> THG).

        We still have a lock of THG. By separating GL and THG's lock, we can hold a lock of THG while completely unrelated TH is destructed which takes a lock of GL and unrelated THG.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/AutomaticThread.cpp:
        * wtf/CMakeLists.txt:
        * wtf/CrossThreadCopier.h:
        * wtf/ParkingLot.h:
        * wtf/ThreadGroup.cpp: Copied from Source/JavaScriptCore/wasm/WasmMachineThreads.cpp.
        (WTF::ThreadGroup::destructionMutex):
        (WTF::ThreadGroup::~ThreadGroup):
        (WTF::ThreadGroup::add):
        (WTF::ThreadGroup::addCurrentThread):
        (WTF::ThreadGroup::removeCurrentThread):
        * wtf/ThreadGroup.h: Copied from Source/JavaScriptCore/wasm/WasmMachineThreads.cpp.
        (WTF::ThreadGroup::create):
        (WTF::ThreadGroup::threads):
        (WTF::ThreadGroup::getLock):
        * wtf/Threading.cpp:
        (WTF::Thread::didExit):
        (WTF::Thread::addToThreadGroup):
        (WTF::Thread::removeFromThreadGroup):
        * wtf/Threading.h:
        (WTF::Thread::canAddToThreadGroup):

2017-07-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Clean up StringStatics.cpp by using LazyNeverDestroyed<> for Atoms
        https://bugs.webkit.org/show_bug.cgi?id=174150

        Reviewed by Mark Lam.

        This patch cleans up StringStatics.cpp and remove it from the tree.

        1. Move StringImpl methods to appropriate place, "StringImpl.cpp".

        StringImpl::hashSlowCase() and StringImpl::concurrentHash() are defined in
        StringStatics.cpp. But they should be defined in StringImpl.cpp.
        This patch just moves them to StringImpl.cpp.

        2. Use LazyNeverDestroyed to initialize AtomicString atoms like emptyAtom.

        Previously, we initialized AtomicString atoms like emptyAtom in a hacky way.
        We first define them as extern global variables. However, AtomicString has
        a non-trivial constructor. Thus, we cannot do this because it requires global
        constructor calls. This is why we have StringStatics.cpp. In this file, we
        include "StaticConstructors.h". After including this file, all the global
        constructor call disabled in Windows. And in GCC environment, we allocate
        void* storage for that variable. And we use placement new in AtomicString::init()
        to initialize these storage.
        However, we already have better way for that: LazyNeverDestroyed. It just allocates
        storage like the above. And it does not have any global constructors. Thus
        we can just declare it as a global variable. And we initialize them lazily in
        AtomicString::init(). This way effectively avoids "StaticConstructors.h" hacky way.
        And it makes "StringStatics.cpp" unnecessary.
        Then, we just move these variables and AtomicString::init() to AtomicString.cpp.

        And we also change emptyAtom to emptyAtom() to get the value from LazyNeverDestroyed<>.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::convertASCIICase):
        (WTF::AtomicString::fromUTF8Internal):
        (WTF::AtomicString::init):
        * wtf/text/AtomicString.h:
        (WTF::nullAtom):
        (WTF::emptyAtom):
        (WTF::starAtom):
        (WTF::xmlAtom):
        (WTF::xmlnsAtom):
        (WTF::AtomicString::fromUTF8):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::toAtomicString):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::hashSlowCase):
        (WTF::StringImpl::concurrentHash):
        * wtf/text/StringStatics.cpp: Removed.

2017-07-06  Keith Miller  <keith_miller@apple.com>

        Add extra insurance to prevent clang from making crash traces sad
        https://bugs.webkit.org/show_bug.cgi?id=174231

        Reviewed by Saam Barati.

        This patch makes it slightly harder for Clang to coalesce our crash calls.
        Additionally, it also makes Clang never tail call the WTFCrashWithInfo so
        our stack trace should always be "reasonable".

        * wtf/Assertions.h:
        * wtf/Compiler.h:

2017-07-06  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219178.

        This caused a consistent failure with the API test
        StringBuilderTest.ToAtomicStringOnEmpty on all Debug testers.

        Reverted changeset:

        "[WTF] Clean up StringStatics.cpp by using
        LazyNeverDestroyed<> for Atoms"
        https://bugs.webkit.org/show_bug.cgi?id=174150
        http://trac.webkit.org/changeset/219178

2017-07-05  Don Olmstead  <don.olmstead@sony.com>

        [WTF] Move SoftLinking.h into WTF
        https://bugs.webkit.org/show_bug.cgi?id=174000

        Reviewed by Alex Christensen.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/SoftLinking.h: Copied from Source/WebCore/platform/ios/QuickLookSoftLink.mm.
        * wtf/cocoa/SoftLinking.h: Renamed from Source/WebCore/platform/cocoa/SoftLinking.h.
        * wtf/win/SoftLinking.h: Renamed from Source/WebCore/platform/win/SoftLinking.h.

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Upgrade GCC baseline
        https://bugs.webkit.org/show_bug.cgi?id=174155

        Reviewed by Michael Catanzaro.

        * wtf/Compiler.h:

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        WTF::StringImpl::copyChars segfaults when built with GCC 7
        https://bugs.webkit.org/show_bug.cgi?id=173407

        Reviewed by Andreas Kling.

        With GCC 7, StringImpl::copyChars() behaves as unexpected.
        This function violates strict aliasing rule.

        This optimization is originally introduced to improve performance
        in SunSpider's string tests in 2008. When running it in my Linux
        box, it no longer causes any observable difference. So, we just
        remove this optimization.

                                        baseline                  patched

        string-base64                7.7544+-0.1761            7.6138+-0.2071          might be 1.0185x faster
        string-fasta                10.5429+-0.2746     ?     10.7500+-0.2669        ? might be 1.0196x slower
        string-tagcloud             14.8588+-0.2828           14.8039+-0.3039
        string-unpack-code          36.1769+-0.4251           35.3397+-0.5398          might be 1.0237x faster
        string-validate-input        8.5182+-0.2206            8.3514+-0.2179          might be 1.0200x faster

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::copyChars):

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use std::lock_guard instead of std::unique_lock if move semantics and try_lock is not necessary
        https://bugs.webkit.org/show_bug.cgi?id=174148

        Reviewed by Mark Lam.

        It is not necessary to use std::unique_lock if we do not use additional features compared to std::lock_guard.

        (WTF::ThreadHolder::get):
        (WTF::ThreadHolder::initialize):
        (WTF::ThreadHolder::destruct):
        * wtf/Threading.cpp:
        (WTF::Thread::didExit):
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::changePriority):
        (WTF::Thread::waitForCompletion):
        (WTF::Thread::detach):
        (WTF::Thread::signal):
        (WTF::Thread::resume):
        (WTF::Thread::getRegisters):
        (WTF::Thread::establish):
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::changePriority):
        (WTF::Thread::waitForCompletion):
        (WTF::Thread::detach):
        (WTF::Thread::resume):
        (WTF::Thread::getRegisters):
        (WTF::Thread::establish):
        * wtf/WordLock.cpp:
        (WTF::WordLockBase::unlockSlow):

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Clean up StringStatics.cpp by using LazyNeverDestroyed<> for Atoms
        https://bugs.webkit.org/show_bug.cgi?id=174150

        Reviewed by Mark Lam.

        This patch cleans up StringStatics.cpp and remove it from the tree.

        1. Move StringImpl methods to appropriate place, "StringImpl.cpp".

        StringImpl::hashSlowCase() and StringImpl::concurrentHash() are defined in
        StringStatics.cpp. But they should be defined in StringImpl.cpp.
        This patch just moves them to StringImpl.cpp.

        2. Use LazyNeverDestroyed to initialize AtomicString atoms like emptyAtom.

        Previously, we initialized AtomicString atoms like emptyAtom in a hacky way.
        We first define them as extern global variables. However, AtomicString has
        a non-trivial constructor. Thus, we cannot do this because it requires global
        constructor calls. This is why we have StringStatics.cpp. In this file, we
        include "StaticConstructors.h". After including this file, all the global
        constructor call disabled in Windows. And in GCC environment, we allocate
        void* storage for that variable. And we use placement new in AtomicString::init()
        to initialize these storage.
        However, we already have better way for that: LazyNeverDestroyed. It just allocates
        storage like the above. And it does not have any global constructors. Thus
        we can just declare it as a global variable. And we initialize them lazily in
        AtomicString::init(). This way effectively avoids "StaticConstructors.h" hacky way.
        And it makes "StringStatics.cpp" unnecessary.
        Then, we just move these variables and AtomicString::init() to AtomicString.cpp.

        And we also change emptyAtom to emptyAtom() to get the value from LazyNeverDestroyed<>.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::convertASCIICase):
        (WTF::AtomicString::fromUTF8Internal):
        (WTF::AtomicString::init):
        * wtf/text/AtomicString.h:
        (WTF::nullAtom):
        (WTF::emptyAtom):
        (WTF::starAtom):
        (WTF::xmlAtom):
        (WTF::xmlnsAtom):
        (WTF::AtomicString::fromUTF8):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::toAtomicString):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::hashSlowCase):
        (WTF::StringImpl::concurrentHash):
        * wtf/text/StringStatics.cpp: Removed.

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        WTF::Thread should have the threads stack bounds.
        https://bugs.webkit.org/show_bug.cgi?id=173975

        Reviewed by Keith Miller.

        We move StackBounds from WTFThreadData to WTF::Thread.
        One important thing is that we should make valid StackBounds
        visible to Thread::create() caller. When the caller get
        WTF::Thread from Thread::create(), this WTF::Thread should
        have a valid StackBounds. But StackBounds information can be
        retrived only in the WTF::Thread's thread itself.

        We also clean up WTF::initializeThreading. StringImpl::empty()
        is now statically initialized by using constexpr constructor.
        Thus we do not need to call StringImpl::empty() explicitly here.
        And WTF::initializeThreading() does not have any main thread
        affinity right now in all the platforms. So we fix the comment
        in Threading.h. Then, now, WTF::initializeThreading() is called
        in UI thread when using Web thread in iOS.

        * wtf/StackBounds.h:
        (WTF::StackBounds::emptyBounds):
        (WTF::StackBounds::StackBounds):
        * wtf/StackStats.cpp:
        (WTF::StackStats::PerThreadStats::PerThreadStats):
        * wtf/Threading.cpp:
        (WTF::threadEntryPoint):
        (WTF::Thread::create):
        (WTF::Thread::currentMayBeNull):
        (WTF::Thread::initialize):
        (WTF::initializeThreading):
        * wtf/Threading.h:
        (WTF::Thread::stack):
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::Thread::current):
        (WTF::initializeCurrentThreadEvenIfNonWTFCreated): Deleted.
        (WTF::Thread::currentMayBeNull): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::Thread::initializeCurrentThreadInternal):
        (WTF::Thread::current):
        * wtf/WTFThreadData.cpp:
        (WTF::WTFThreadData::WTFThreadData):
        * wtf/WTFThreadData.h:
        (WTF::WTFThreadData::stack): Deleted.

2017-07-05  Keith Miller  <keith_miller@apple.com>

        Crashing with information should have an abort reason
        https://bugs.webkit.org/show_bug.cgi?id=174185

        Reviewed by Saam Barati.

        Fix an ifdef to actually work with X86_64. It turns out X64_64 is
        not an architecture... Whoops.

        * wtf/Assertions.cpp:

2017-07-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove copy of ICU headers from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=116407

        Reviewed by Alex Christensen.

        Add an extra rsync command to CopyWTFHeaders which copies the ICU headers
        to DSTROOT/usr/local/include/. These headers already live inside a
        "unicode" folder, so an example path of a header is
        DSTROOT/usr/local/include/unicode/uchar.h. This is already in the search
        path of the other WebKit projects, so those other projects can remove
        their explicit listing of the old place these headers lived.

        Also add the remaining ICU 55.1 headers which the other projects (like
        WebCore) need. Revert any local changes to these headers in favor of
        using the GCC_PREPROCESSOR_DEFINITIONS build setting. This is so we can
        compile the same way against unmodified headers.

        * Configurations/Base.xcconfig:
        * Configurations/CopyWTFHeaders.xcconfig:
        * WTF.xcodeproj/project.pbxproj:
        * icu/unicode/alphaindex.h: Added.
        * icu/unicode/appendable.h: Added.
        * icu/unicode/basictz.h: Added.
        * icu/unicode/brkiter.h: Added.
        (BreakIterator::isBufferClone):
        * icu/unicode/bytestrie.h: Added.
        * icu/unicode/bytestriebuilder.h: Added.
        * icu/unicode/calendar.h: Added.
        (Calendar::createInstance):
        (Calendar::roll):
        (Calendar::internalSet):
        (Calendar::weekNumber):
        * icu/unicode/caniter.h: Added.
        * icu/unicode/chariter.h: Renamed from Source/WebCore/icu/unicode/chariter.h.
        * icu/unicode/choicfmt.h: Added.
        * icu/unicode/coleitr.h: Added.
        (CollationElementIterator::primaryOrder):
        (CollationElementIterator::secondaryOrder):
        (CollationElementIterator::tertiaryOrder):
        (CollationElementIterator::isIgnorable):
        * icu/unicode/coll.h: Added.
        * icu/unicode/compactdecimalformat.h: Added.
        * icu/unicode/curramt.h: Added.
        (CurrencyAmount::getCurrency):
        (CurrencyAmount::getISOCurrency):
        * icu/unicode/currpinf.h: Added.
        (CurrencyPluralInfo::operator!=):
        * icu/unicode/currunit.h: Added.
        (CurrencyUnit::getISOCurrency):
        * icu/unicode/datefmt.h: Added.
        * icu/unicode/dbbi.h: Added.
        * icu/unicode/dcfmtsym.h: Added.
        (DecimalFormatSymbols::getSymbol):
        (DecimalFormatSymbols::getConstSymbol):
        (DecimalFormatSymbols::setSymbol):
        (DecimalFormatSymbols::getLocale):
        (DecimalFormatSymbols::getCurrencyPattern):
        * icu/unicode/decimfmt.h: Added.
        (DecimalFormat::getConstSymbol):
        * icu/unicode/docmain.h: Added.
        * icu/unicode/dtfmtsym.h: Added.
        * icu/unicode/dtintrv.h: Added.
        (DateInterval::getFromDate):
        (DateInterval::getToDate):
        (DateInterval::operator!=):
        * icu/unicode/dtitvfmt.h: Added.
        (DateIntervalFormat::operator!=):
        * icu/unicode/dtitvinf.h: Added.
        (DateIntervalInfo::operator!=):
        * icu/unicode/dtptngen.h: Added.
        * icu/unicode/dtrule.h: Added.
        * icu/unicode/enumset.h: Added.
        (EnumSet::EnumSet):
        (EnumSet::~EnumSet):
        (EnumSet::clear):
        (EnumSet::add):
        (EnumSet::remove):
        (EnumSet::contains):
        (EnumSet::set):
        (EnumSet::get):
        (EnumSet::isValidEnum):
        (EnumSet::isValidValue):
        (EnumSet::operator=):
        (EnumSet::getAll):
        (EnumSet::flag):
        * icu/unicode/errorcode.h: Added.
        * icu/unicode/fieldpos.h: Added.
        (FieldPosition::operator=):
        (FieldPosition::operator==):
        (FieldPosition::operator!=):
        * icu/unicode/filteredbrk.h: Added.
        * icu/unicode/fmtable.h: Added.
        (Formattable::getDate):
        (Formattable::getString):
        (Formattable::getLong):
        (Formattable::toUFormattable):
        (Formattable::fromUFormattable):
        * icu/unicode/format.h: Added.
        * icu/unicode/fpositer.h: Added.
        * icu/unicode/gender.h: Added.
        * icu/unicode/gregocal.h: Added.
        * icu/unicode/icudataver.h: Added.
        * icu/unicode/icuplug.h: Added.
        * icu/unicode/idna.h: Added.
        * icu/unicode/listformatter.h: Added.
        (ListFormatData::ListFormatData):
        * icu/unicode/locdspnm.h: Added.
        (LocaleDisplayNames::createInstance):
        * icu/unicode/locid.h: Added.
        (Locale::operator!=):
        (Locale::getCountry):
        (Locale::getLanguage):
        (Locale::getScript):
        (Locale::getVariant):
        (Locale::getName):
        (Locale::isBogus):
        * icu/unicode/measfmt.h: Added.
        * icu/unicode/measunit.h: Added.
        * icu/unicode/measure.h: Added.
        (Measure::getNumber):
        (Measure::getUnit):
        * icu/unicode/messagepattern.h: Added.
        * icu/unicode/msgfmt.h: Added.
        * icu/unicode/normalizer2.h: Added.
        * icu/unicode/normlzr.h: Added.
        (Normalizer::operator!= ):
        (Normalizer::quickCheck):
        (Normalizer::isNormalized):
        (Normalizer::compare):
        * icu/unicode/numfmt.h: Added.
        (NumberFormat::isParseIntegerOnly):
        (NumberFormat::isLenient):
        * icu/unicode/numsys.h: Added.
        * icu/unicode/parsepos.h: Added.
        (ParsePosition::operator=):
        (ParsePosition::operator==):
        (ParsePosition::operator!=):
        (ParsePosition::getIndex):
        (ParsePosition::setIndex):
        (ParsePosition::getErrorIndex):
        (ParsePosition::setErrorIndex):
        * icu/unicode/plurfmt.h: Added.
        * icu/unicode/plurrule.h: Added.
        * icu/unicode/rbbi.h: Added.
        (RuleBasedBreakIterator::operator!=):
        * icu/unicode/rbnf.h: Added.
        (RuleBasedNumberFormat::isLenient):
        (RuleBasedNumberFormat::getDefaultRuleSet):
        * icu/unicode/rbtz.h: Added.
        * icu/unicode/regex.h: Added.
        * icu/unicode/region.h: Added.
        * icu/unicode/reldatefmt.h: Added.
        * icu/unicode/resbund.h: Added.
        * icu/unicode/schriter.h: Added.
        * icu/unicode/scientificnumberformatter.h: Added.
        * icu/unicode/search.h: Added.
        (SearchIterator::operator!=):
        * icu/unicode/selfmt.h: Added.
        * icu/unicode/simpletz.h: Added.
        (SimpleTimeZone::setStartRule):
        (SimpleTimeZone::setEndRule):
        (SimpleTimeZone::getOffset):
        * icu/unicode/smpdtfmt.h: Added.
        (SimpleDateFormat::get2DigitYearStart):
        * icu/unicode/sortkey.h: Added.
        (CollationKey::operator!=):
        (CollationKey::isBogus):
        (CollationKey::getByteArray):
        * icu/unicode/stringtriebuilder.h: Added.
        * icu/unicode/stsearch.h: Added.
        * icu/unicode/symtable.h: Added.
        * icu/unicode/tblcoll.h: Added.
        * icu/unicode/timezone.h: Added.
        (TimeZone::getID):
        (TimeZone::setID):
        * icu/unicode/tmunit.h: Added.
        * icu/unicode/tmutamt.h: Added.
        (TimeUnitAmount::operator!=):
        * icu/unicode/tmutfmt.h: Added.
        (TimeUnitFormat::operator!=):
        * icu/unicode/translit.h: Added.
        (Transliterator::getMaximumContextLength):
        (Transliterator::setID):
        (Transliterator::integerToken):
        (Transliterator::pointerToken):
        * icu/unicode/tzfmt.h: Added.
        * icu/unicode/tznames.h: Added.
        * icu/unicode/tzrule.h: Added.
        * icu/unicode/tztrans.h: Added.
        * icu/unicode/ubidi.h: Added.
        * icu/unicode/ucal.h: Renamed from Source/JavaScriptCore/icu/unicode/ucal.h.
        * icu/unicode/ucasemap.h: Added.
        * icu/unicode/ucat.h: Added.
        * icu/unicode/ucharstrie.h: Added.
        * icu/unicode/ucharstriebuilder.h: Added.
        * icu/unicode/uchriter.h: Added.
        * icu/unicode/uclean.h: Added.
        * icu/unicode/ucnv_cb.h: Renamed from Source/WebCore/icu/unicode/ucnv_cb.h.
        * icu/unicode/ucnvsel.h: Added.
        * icu/unicode/ucoleitr.h: Renamed from Source/WebCore/icu/unicode/ucoleitr.h.
        * icu/unicode/uconfig.h:
        * icu/unicode/ucsdet.h: Renamed from Source/WebCore/icu/unicode/ucsdet.h.
        * icu/unicode/udat.h: Renamed from Source/JavaScriptCore/icu/unicode/udat.h.
        * icu/unicode/udata.h: Added.
        * icu/unicode/udateintervalformat.h: Added.
        * icu/unicode/udatpg.h: Renamed from Source/JavaScriptCore/icu/unicode/udatpg.h.
        * icu/unicode/udisplaycontext.h: Renamed from Source/JavaScriptCore/icu/unicode/udisplaycontext.h.
        * icu/unicode/ufieldpositer.h: Renamed from Source/JavaScriptCore/icu/unicode/ufieldpositer.h.
        * icu/unicode/uformattable.h: Renamed from Source/JavaScriptCore/icu/unicode/uformattable.h.
        * icu/unicode/ugender.h: Added.
        * icu/unicode/uidna.h: Renamed from Source/WebCore/icu/unicode/uidna.h.
        * icu/unicode/uldnames.h: Added.
        * icu/unicode/ulistformatter.h: Added.
        * icu/unicode/ulocdata.h: Added.
        * icu/unicode/umisc.h: Renamed from Source/JavaScriptCore/icu/unicode/umisc.h.
        * icu/unicode/umsg.h: Added.
        * icu/unicode/unifilt.h: Added.
        * icu/unicode/unifunct.h: Added.
        * icu/unicode/unimatch.h: Added.
        * icu/unicode/unirepl.h: Added.
        * icu/unicode/uniset.h: Added.
        (UnicodeSet::operator!=):
        (UnicodeSet::isFrozen):
        (UnicodeSet::containsSome):
        (UnicodeSet::isBogus):
        (UnicodeSet::fromUSet):
        (UnicodeSet::toUSet):
        (UnicodeSet::span):
        (UnicodeSet::spanBack):
        * icu/unicode/unum.h: Renamed from Source/JavaScriptCore/icu/unicode/unum.h.
        * icu/unicode/unumsys.h: Renamed from Source/JavaScriptCore/icu/unicode/unumsys.h.
        * icu/unicode/upluralrules.h: Added.
        * icu/unicode/uregex.h: Added.
        * icu/unicode/uregion.h: Added.
        * icu/unicode/urep.h: Added.
        * icu/unicode/ures.h: Added.
        (ures_getUnicodeString):
        (ures_getNextUnicodeString):
        (ures_getUnicodeStringByIndex):
        (ures_getUnicodeStringByKey):
        * icu/unicode/usearch.h: Renamed from Source/WebCore/icu/unicode/usearch.h.
        * icu/unicode/usetiter.h: Added.
        (UnicodeSetIterator::isString):
        (UnicodeSetIterator::getCodepoint):
        (UnicodeSetIterator::getCodepointEnd):
        * icu/unicode/ushape.h: Renamed from Source/WebCore/icu/unicode/ushape.h.
        * icu/unicode/uspoof.h: Added.
        * icu/unicode/usprep.h: Added.
        * icu/unicode/ustdio.h: Added.
        * icu/unicode/ustream.h: Added.
        * icu/unicode/ustringtrie.h: Added.
        * icu/unicode/utf32.h: Added.
        * icu/unicode/utmscale.h: Added.
        * icu/unicode/utrace.h: Added.
        * icu/unicode/utrans.h: Added.
        * icu/unicode/utypes.h:
        * icu/unicode/vtzone.h: Added.

2017-07-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Make double-conversion's cache data constant and drop double_conversion::initialize()
        https://bugs.webkit.org/show_bug.cgi?id=174124

        Reviewed by Saam Barati.

        We annotate double-conversion's cache data as const and constexpr. And move it out of function.
        Since they are not involving global constructors, they are compiled as rodata and initialized
        without calling double_conversion::initialize().

        And we drop double_conversion::initialize() function since it is no longer necessary.

        * wtf/Threading.cpp:
        (WTF::initializeThreading):
        * wtf/dtoa/cached-powers.cc:
        * wtf/dtoa/cached-powers.h:

2017-07-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Initialize srandom and srand with cryptographically random number
        https://bugs.webkit.org/show_bug.cgi?id=174123

        Reviewed by Mark Lam.

        Use cryptographically random number instead of current time as a seed.

        * wtf/RandomNumberSeed.h:
        (WTF::initializeRandomNumberGenerator):

2017-07-04  Joseph Pecoraro  <pecoraro@apple.com>

        Xcode duplicate UUID for DisallowCType.h and DispatchPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=174117

        Reviewed by Alexey Proskuryakov.

        * WTF.xcodeproj/project.pbxproj:
        Give DisallowCType.h and DispatchPtr.h different UUIDs.

2017-07-03  Saam Barati  <sbarati@apple.com>

        LayoutTest workers/bomb.html is a Crash
        https://bugs.webkit.org/show_bug.cgi?id=167757
        <rdar://problem/33086462>

        Reviewed by Keith Miller.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThreadCondition::waitFor):
        * wtf/AutomaticThread.h:

2017-07-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r219060.
        https://bugs.webkit.org/show_bug.cgi?id=174108

        crashing constantly when initializing UIWebView (Requested by
        thorton on #webkit).

        Reverted changeset:

        "WTF::Thread should have the threads stack bounds."
        https://bugs.webkit.org/show_bug.cgi?id=173975
        http://trac.webkit.org/changeset/219060

2017-07-03  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219103.

        Caused multiple build failures.

        Reverted changeset:

        "Remove copy of ICU headers from WebKit"
        https://bugs.webkit.org/show_bug.cgi?id=116407
        http://trac.webkit.org/changeset/219103

2017-07-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove copy of ICU headers from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=116407

        Reviewed by Alex Christensen.

        Add an extra rsync command to CopyWTFHeaders which copies the ICU headers
        to DSTROOT/usr/local/include/. These headers already live inside a
        "unicode" folder, so an example path of a header is
        DSTROOT/usr/local/include/unicode/uchar.h. This is already in the search
        path of the other WebKit projects, so those other projects can remove
        their explicit listing of the old place these headers lived.

        Also add the remaining ICU 55.1 headers which the other projects (like
        WebCore) need. Revert any local changes to these headers in favor of
        using the GCC_PREPROCESSOR_DEFINITIONS build setting. This is so we can
        compile the same way against unmodified headers.

        * Configurations/Base.xcconfig:
        * Configurations/CopyWTFHeaders.xcconfig:
        * WTF.xcodeproj/project.pbxproj:
        * icu/unicode/alphaindex.h: Added.
        * icu/unicode/appendable.h: Added.
        * icu/unicode/basictz.h: Added.
        * icu/unicode/brkiter.h: Added.
        (BreakIterator::isBufferClone):
        * icu/unicode/bytestrie.h: Added.
        * icu/unicode/bytestriebuilder.h: Added.
        * icu/unicode/calendar.h: Added.
        (Calendar::createInstance):
        (Calendar::roll):
        (Calendar::internalSet):
        (Calendar::weekNumber):
        * icu/unicode/caniter.h: Added.
        * icu/unicode/chariter.h: Renamed from Source/WebCore/icu/unicode/chariter.h.
        * icu/unicode/choicfmt.h: Added.
        * icu/unicode/coleitr.h: Added.
        (CollationElementIterator::primaryOrder):
        (CollationElementIterator::secondaryOrder):
        (CollationElementIterator::tertiaryOrder):
        (CollationElementIterator::isIgnorable):
        * icu/unicode/coll.h: Added.
        * icu/unicode/compactdecimalformat.h: Added.
        * icu/unicode/curramt.h: Added.
        (CurrencyAmount::getCurrency):
        (CurrencyAmount::getISOCurrency):
        * icu/unicode/currpinf.h: Added.
        (CurrencyPluralInfo::operator!=):
        * icu/unicode/currunit.h: Added.
        (CurrencyUnit::getISOCurrency):
        * icu/unicode/datefmt.h: Added.
        * icu/unicode/dbbi.h: Added.
        * icu/unicode/dcfmtsym.h: Added.
        (DecimalFormatSymbols::getSymbol):
        (DecimalFormatSymbols::getConstSymbol):
        (DecimalFormatSymbols::setSymbol):
        (DecimalFormatSymbols::getLocale):
        (DecimalFormatSymbols::getCurrencyPattern):
        * icu/unicode/decimfmt.h: Added.
        (DecimalFormat::getConstSymbol):
        * icu/unicode/docmain.h: Added.
        * icu/unicode/dtfmtsym.h: Added.
        * icu/unicode/dtintrv.h: Added.
        (DateInterval::getFromDate):
        (DateInterval::getToDate):
        (DateInterval::operator!=):
        * icu/unicode/dtitvfmt.h: Added.
        (DateIntervalFormat::operator!=):
        * icu/unicode/dtitvinf.h: Added.
        (DateIntervalInfo::operator!=):
        * icu/unicode/dtptngen.h: Added.
        * icu/unicode/dtrule.h: Added.
        * icu/unicode/enumset.h: Added.
        (EnumSet::EnumSet):
        (EnumSet::~EnumSet):
        (EnumSet::clear):
        (EnumSet::add):
        (EnumSet::remove):
        (EnumSet::contains):
        (EnumSet::set):
        (EnumSet::get):
        (EnumSet::isValidEnum):
        (EnumSet::isValidValue):
        (EnumSet::operator=):
        (EnumSet::getAll):
        (EnumSet::flag):
        * icu/unicode/errorcode.h: Added.
        * icu/unicode/fieldpos.h: Added.
        (FieldPosition::operator=):
        (FieldPosition::operator==):
        (FieldPosition::operator!=):
        * icu/unicode/filteredbrk.h: Added.
        * icu/unicode/fmtable.h: Added.
        (Formattable::getDate):
        (Formattable::getString):
        (Formattable::getLong):
        (Formattable::toUFormattable):
        (Formattable::fromUFormattable):
        * icu/unicode/format.h: Added.
        * icu/unicode/fpositer.h: Added.
        * icu/unicode/gender.h: Added.
        * icu/unicode/gregocal.h: Added.
        * icu/unicode/icudataver.h: Added.
        * icu/unicode/icuplug.h: Added.
        * icu/unicode/idna.h: Added.
        * icu/unicode/listformatter.h: Added.
        (ListFormatData::ListFormatData):
        * icu/unicode/locdspnm.h: Added.
        (LocaleDisplayNames::createInstance):
        * icu/unicode/locid.h: Added.
        (Locale::operator!=):
        (Locale::getCountry):
        (Locale::getLanguage):
        (Locale::getScript):
        (Locale::getVariant):
        (Locale::getName):
        (Locale::isBogus):
        * icu/unicode/measfmt.h: Added.
        * icu/unicode/measunit.h: Added.
        * icu/unicode/measure.h: Added.
        (Measure::getNumber):
        (Measure::getUnit):
        * icu/unicode/messagepattern.h: Added.
        * icu/unicode/msgfmt.h: Added.
        * icu/unicode/normalizer2.h: Added.
        * icu/unicode/normlzr.h: Added.
        (Normalizer::operator!= ):
        (Normalizer::quickCheck):
        (Normalizer::isNormalized):
        (Normalizer::compare):
        * icu/unicode/numfmt.h: Added.
        (NumberFormat::isParseIntegerOnly):
        (NumberFormat::isLenient):
        * icu/unicode/numsys.h: Added.
        * icu/unicode/parsepos.h: Added.
        (ParsePosition::operator=):
        (ParsePosition::operator==):
        (ParsePosition::operator!=):
        (ParsePosition::getIndex):
        (ParsePosition::setIndex):
        (ParsePosition::getErrorIndex):
        (ParsePosition::setErrorIndex):
        * icu/unicode/plurfmt.h: Added.
        * icu/unicode/plurrule.h: Added.
        * icu/unicode/rbbi.h: Added.
        (RuleBasedBreakIterator::operator!=):
        * icu/unicode/rbnf.h: Added.
        (RuleBasedNumberFormat::isLenient):
        (RuleBasedNumberFormat::getDefaultRuleSet):
        * icu/unicode/rbtz.h: Added.
        * icu/unicode/regex.h: Added.
        * icu/unicode/region.h: Added.
        * icu/unicode/reldatefmt.h: Added.
        * icu/unicode/resbund.h: Added.
        * icu/unicode/schriter.h: Added.
        * icu/unicode/scientificnumberformatter.h: Added.
        * icu/unicode/search.h: Added.
        (SearchIterator::operator!=):
        * icu/unicode/selfmt.h: Added.
        * icu/unicode/simpletz.h: Added.
        (SimpleTimeZone::setStartRule):
        (SimpleTimeZone::setEndRule):
        (SimpleTimeZone::getOffset):
        * icu/unicode/smpdtfmt.h: Added.
        (SimpleDateFormat::get2DigitYearStart):
        * icu/unicode/sortkey.h: Added.
        (CollationKey::operator!=):
        (CollationKey::isBogus):
        (CollationKey::getByteArray):
        * icu/unicode/stringtriebuilder.h: Added.
        * icu/unicode/stsearch.h: Added.
        * icu/unicode/symtable.h: Added.
        * icu/unicode/tblcoll.h: Added.
        * icu/unicode/timezone.h: Added.
        (TimeZone::getID):
        (TimeZone::setID):
        * icu/unicode/tmunit.h: Added.
        * icu/unicode/tmutamt.h: Added.
        (TimeUnitAmount::operator!=):
        * icu/unicode/tmutfmt.h: Added.
        (TimeUnitFormat::operator!=):
        * icu/unicode/translit.h: Added.
        (Transliterator::getMaximumContextLength):
        (Transliterator::setID):
        (Transliterator::integerToken):
        (Transliterator::pointerToken):
        * icu/unicode/tzfmt.h: Added.
        * icu/unicode/tznames.h: Added.
        * icu/unicode/tzrule.h: Added.
        * icu/unicode/tztrans.h: Added.
        * icu/unicode/ubidi.h: Added.
        * icu/unicode/ucal.h: Renamed from Source/JavaScriptCore/icu/unicode/ucal.h.
        * icu/unicode/ucasemap.h: Added.
        * icu/unicode/ucat.h: Added.
        * icu/unicode/ucharstrie.h: Added.
        * icu/unicode/ucharstriebuilder.h: Added.
        * icu/unicode/uchriter.h: Added.
        * icu/unicode/uclean.h: Added.
        * icu/unicode/ucnv_cb.h: Renamed from Source/WebCore/icu/unicode/ucnv_cb.h.
        * icu/unicode/ucnvsel.h: Added.
        * icu/unicode/ucoleitr.h: Renamed from Source/WebCore/icu/unicode/ucoleitr.h.
        * icu/unicode/uconfig.h:
        * icu/unicode/ucsdet.h: Renamed from Source/WebCore/icu/unicode/ucsdet.h.
        * icu/unicode/udat.h: Renamed from Source/JavaScriptCore/icu/unicode/udat.h.
        * icu/unicode/udata.h: Added.
        * icu/unicode/udateintervalformat.h: Added.
        * icu/unicode/udatpg.h: Renamed from Source/JavaScriptCore/icu/unicode/udatpg.h.
        * icu/unicode/udisplaycontext.h: Renamed from Source/JavaScriptCore/icu/unicode/udisplaycontext.h.
        * icu/unicode/ufieldpositer.h: Renamed from Source/JavaScriptCore/icu/unicode/ufieldpositer.h.
        * icu/unicode/uformattable.h: Renamed from Source/JavaScriptCore/icu/unicode/uformattable.h.
        * icu/unicode/ugender.h: Added.
        * icu/unicode/uidna.h: Renamed from Source/WebCore/icu/unicode/uidna.h.
        * icu/unicode/uldnames.h: Added.
        * icu/unicode/ulistformatter.h: Added.
        * icu/unicode/ulocdata.h: Added.
        * icu/unicode/umisc.h: Renamed from Source/JavaScriptCore/icu/unicode/umisc.h.
        * icu/unicode/umsg.h: Added.
        * icu/unicode/unifilt.h: Added.
        * icu/unicode/unifunct.h: Added.
        * icu/unicode/unimatch.h: Added.
        * icu/unicode/unirepl.h: Added.
        * icu/unicode/uniset.h: Added.
        (UnicodeSet::operator!=):
        (UnicodeSet::isFrozen):
        (UnicodeSet::containsSome):
        (UnicodeSet::isBogus):
        (UnicodeSet::fromUSet):
        (UnicodeSet::toUSet):
        (UnicodeSet::span):
        (UnicodeSet::spanBack):
        * icu/unicode/unum.h: Renamed from Source/JavaScriptCore/icu/unicode/unum.h.
        * icu/unicode/unumsys.h: Renamed from Source/JavaScriptCore/icu/unicode/unumsys.h.
        * icu/unicode/upluralrules.h: Added.
        * icu/unicode/uregex.h: Added.
        * icu/unicode/uregion.h: Added.
        * icu/unicode/urep.h: Added.
        * icu/unicode/ures.h: Added.
        (ures_getUnicodeString):
        (ures_getNextUnicodeString):
        (ures_getUnicodeStringByIndex):
        (ures_getUnicodeStringByKey):
        * icu/unicode/usearch.h: Renamed from Source/WebCore/icu/unicode/usearch.h.
        * icu/unicode/usetiter.h: Added.
        (UnicodeSetIterator::isString):
        (UnicodeSetIterator::getCodepoint):
        (UnicodeSetIterator::getCodepointEnd):
        * icu/unicode/ushape.h: Renamed from Source/WebCore/icu/unicode/ushape.h.
        * icu/unicode/usprep.h: Added.
        * icu/unicode/ustdio.h: Added.
        * icu/unicode/ustream.h: Added.
        * icu/unicode/ustringtrie.h: Added.
        * icu/unicode/utf32.h: Added.
        * icu/unicode/utmscale.h: Added.
        * icu/unicode/utrace.h: Added.
        * icu/unicode/utrans.h: Added.
        * icu/unicode/utypes.h:
        * icu/unicode/vtzone.h: Added.

2017-07-03  Keith Miller  <keith_miller@apple.com>

        Fix ifndef in Assertions.h
        https://bugs.webkit.org/show_bug.cgi?id=174104

        Reviewed by Saam Barati.

        The ifndef should have been checking for
        CRASH_WITH_SECURITY_IMPLICATION_AND_INFO since that is what the
        ifndef defines.

        * wtf/Assertions.h:

2017-07-03  Andy Estes  <aestes@apple.com>

        [Xcode] Add an experimental setting to build with ccache
        https://bugs.webkit.org/show_bug.cgi?id=173875

        Reviewed by Tim Horton.

        * Configurations/DebugRelease.xcconfig: Included ccache.xcconfig.

2017-07-03  Daewoong Jang  <daewoong.jang@navercorp.com>

        Remove an unused function export
        https://bugs.webkit.org/show_bug.cgi?id=174084

        Reviewed by Yusuke Suzuki.

        * wtf/Threading.h:

2017-07-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        WTF::Thread should have the threads stack bounds.
        https://bugs.webkit.org/show_bug.cgi?id=173975

        Reviewed by Mark Lam.

        We move StackBounds from WTFThreadData to WTF::Thread.
        One important thing is that we should make valid StackBounds
        visible to Thread::create() caller. When the caller get
        WTF::Thread from Thread::create(), this WTF::Thread should
        have a valid StackBounds. But StackBounds information can be
        retrived only in the WTF::Thread's thread itself.

        * wtf/StackBounds.h:
        (WTF::StackBounds::emptyBounds):
        (WTF::StackBounds::StackBounds):
        * wtf/StackStats.cpp:
        (WTF::StackStats::PerThreadStats::PerThreadStats):
        * wtf/Threading.cpp:
        (WTF::threadEntryPoint):
        (WTF::Thread::create):
        (WTF::Thread::currentMayBeNull):
        (WTF::Thread::initialize):
        * wtf/Threading.h:
        (WTF::Thread::stack):
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::Thread::current):
        (WTF::initializeCurrentThreadEvenIfNonWTFCreated): Deleted.
        (WTF::Thread::currentMayBeNull): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::Thread::initializeCurrentThreadInternal):
        (WTF::Thread::current):
        * wtf/WTFThreadData.cpp:
        (WTF::WTFThreadData::WTFThreadData):
        * wtf/WTFThreadData.h:
        (WTF::WTFThreadData::stack): Deleted.

2017-07-01  Dan Bernstein  <mitz@apple.com>

        [iOS] Remove code only needed when building for iOS 9.x
        https://bugs.webkit.org/show_bug.cgi?id=174068

        Reviewed by Tim Horton.

        * wtf/Platform.h:
        * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
        * wtf/spi/darwin/dyldSPI.h:

2017-07-01  Caio Lima  <ticaiolima@gmail.com>

        [JSC] WTFGetBacktrace can return numberOfFrames == 0 in some architectures
        https://bugs.webkit.org/show_bug.cgi?id=172768

        Reviewed by Mark Lam.

        In some architectures, like ARMv6 running on a Raspberry pi, the
        backtrace function from "execinfo.h" is returning 0. In
        that case, the RELEASE_ASSERT in StackTrace::captureStackTrace
        fails causing a runtime crash.
        This patch is adding a guard for the case described above to
        avoid a runtime crash in such case.

        * wtf/StackTrace.cpp:
        (WTF::StackTrace::captureStackTrace):

2017-07-01  Dan Bernstein  <mitz@apple.com>

        [macOS] Remove code only needed when building for OS X Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=174067

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * wtf/Platform.h:
        * wtf/mac/AppKitCompatibilityDeclarations.h:
        * wtf/spi/cocoa/SecuritySPI.h:
        * wtf/text/TextBreakIterator.cpp:

2017-07-01  Joseph Pecoraro  <pecoraro@apple.com>

        Add a warning if WEBGL2 is enabled without WEBGL
        https://bugs.webkit.org/show_bug.cgi?id=174054

        Reviewed by Sam Weinig.

        * wtf/FeatureDefines.h:

2017-06-30  Keith Miller  <keith_miller@apple.com>

        Force crashWithInfo to be out of line.
        https://bugs.webkit.org/show_bug.cgi?id=174028

        Reviewed by Filip Pizlo.

        The first pass at making crashes hold information about why they
        were crashing had the problem that it would inline the assertion.
        This meant that clang could coalesce DFG_ASSERTS with other
        assertion failures in the same function. This patch moves it out
        of line to help fix that issue.

        * wtf/Assertions.cpp:
        (WTFCrashWithInfo):
        * wtf/Assertions.h:
        (WTF::isIntegralType):

2017-06-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Drop SymbolRegistry::keyForSymbol
        https://bugs.webkit.org/show_bug.cgi?id=174052

        Reviewed by Sam Weinig.

        Since we can know whether a given symbol is registered by checking RegisteredSymbolImpl,
        we do not need to query key string for a given symbol by using SymbolRegistry::keyForSymbol.

        * wtf/text/SymbolImpl.h:
        (WTF::SymbolImpl::extractFoldedString): Deleted.
        * wtf/text/SymbolRegistry.cpp:
        (WTF::SymbolRegistry::keyForSymbol): Deleted.
        * wtf/text/SymbolRegistry.h:

2017-06-29  Jer Noble  <jer.noble@apple.com>

        Make Legacy EME API controlled by RuntimeEnabled setting.
        https://bugs.webkit.org/show_bug.cgi?id=173994

        Reviewed by Sam Weinig.

        * wtf/FeatureDefines.h:

2017-06-30  Ryosuke Niwa  <rniwa@webkit.org>

        Ran sort-Xcode-project-file.

        * WTF.xcodeproj/project.pbxproj:

2017-06-30  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218992.

        The patch broke the iOS device builds.

        Reverted changeset:

        "DFG_ASSERT should allow stuffing registers before trapping."
        https://bugs.webkit.org/show_bug.cgi?id=174005
        http://trac.webkit.org/changeset/218992

2017-06-30  Keith Miller  <keith_miller@apple.com>

        DFG_ASSERT should allow stuffing registers before trapping.
        https://bugs.webkit.org/show_bug.cgi?id=174005

        Reviewed by Mark Lam.

        Add new template functions that enable stuffing up to five values
        into registers before crashing.

        * wtf/Assertions.h:
        (CRASH_WITH_INFO):

2017-06-28  Brent Fulgham  <bfulgham@apple.com>

        Teach ResourceLoadStatistics to recognize changes in the file system
        https://bugs.webkit.org/show_bug.cgi?id=173800
        <rdar://problem/32937842>

        Reviewed by Chris Dumez.

        * wtf/DispatchPtr.h: Added (moved from WebKit2)
        * wtf/Platform.h: Make sure USE_FILE_LOCK is enabled.

2017-06-28  David Kilzer  <ddkilzer@apple.com>

        Fix typo in comment: WordResult => WorkResult

        * wtf/AutomaticThread.h:

2017-06-27  Caio Lima  <ticaiolima@gmail.com>

        [ESnext] Implement Object Rest - Implementing Object Rest Destructuring
        https://bugs.webkit.org/show_bug.cgi?id=167962

        Reviewed by Saam Barati.

        * wtf/HashSet.h:
        (WTF::=):

2017-06-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Drop Thread::create(obsolete things) API since we can use lambda
        https://bugs.webkit.org/show_bug.cgi?id=173825

        Reviewed by Saam Barati.

        Thread::create(ThreadFunction, void* data, const char* name) is a bit old API.
        Since we have C++ lambda, the above API is simply unnecessary. And C++ lambda
        based one is better since the above API needs casting data to and from void*.

        * wtf/Function.h:
        Avoid ambiguity.
        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::ThreadPrivate::tryLockFor):
        (WTF::ParallelEnvironment::ThreadPrivate::workerThread): Deleted.
        * wtf/ParallelJobsGeneric.h:
        * wtf/Threading.cpp:
        * wtf/ThreadingWin.cpp:
        (WTF::createThread):

2017-06-25  Yusuke Suzuki  <utatane.tea@gmail.com>

        initializeThreading() [first] causes WTFCrash due to maxSingleAllocationSize not being initialized
        https://bugs.webkit.org/show_bug.cgi?id=173720

        Reviewed by Mark Lam.

        When using std::numeric_limits<size_t>::max() for global variable's initialization,
        it seems that it invokes static constructor to initialize this in VC++.
        We avoid this edge case by introducing a workaround using SIZE_MAX here.

        When I perform git-grep, there is only one site (this) using std::numeric_limits<>::xxx()
        to initialize global variable.

        * wtf/FastMalloc.cpp:

2017-06-25  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive headers from JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=173812

        Reviewed by Darin Adler.

        * wtf/Bag.h:

2017-06-23  Keith Miller  <keith_miller@apple.com>

        Switch VMTraps to use halt instructions rather than breakpoint instructions
        https://bugs.webkit.org/show_bug.cgi?id=173677
        <rdar://problem/32178892>

        Reviewed by JF Bastien.

        Remove the Trap signal handler code since it plays badly with lldb and combine
        SIGBUS with SIGSEGV since distiguishing them is generally non-portable.

        Also, update the platform code to only use signaling VMTraps
        on where we have an appropriate instruction (x86 and ARM64).

        * wtf/Platform.h:
        * wtf/threads/Signals.cpp:
        (WTF::fromMachException):
        (WTF::toMachMask):
        (WTF::installSignalHandler):
        (WTF::jscSignalHandler):
        * wtf/threads/Signals.h:
        (WTF::toSystemSignal):
        (WTF::fromSystemSignal):

2017-06-23  Antti Koivisto  <antti@apple.com>

        Add notifyutil registrations for going in and out of simulated low memory state
        https://bugs.webkit.org/show_bug.cgi?id=173797

        Reviewed by Andreas Kling.

        Add

        notifyutil -p org.WebKit.lowMemory.begin
        notifyutil -p org.WebKit.lowMemory.end

        for debugging.

        * wtf/cocoa/MemoryPressureHandlerCocoa.mm:
        (WTF::MemoryPressureHandler::install):

2017-06-23  Konstantin Tokarev  <annulen@yandex.ru>

        Remove more unused headers from WTF
        https://bugs.webkit.org/show_bug.cgi?id=173761

        Reviewed by Yusuke Suzuki.

        * wtf/Liveness.h:
        * wtf/PageAllocation.h:
        * wtf/ParallelJobs.h:

2017-06-22  Andreas Kling  <akling@apple.com>

        Rename MemoryPressureHandler::setTabCount to setPageCount
        https://bugs.webkit.org/show_bug.cgi?id=173750

        Reviewed by Daniel Bates.

        This function is counting WebCore::Page objects (excluding utility Pages used
        by SVG-as-image and the web inspector) so let's name it appropriately.
        Not all WebKit clients have tabs.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::setPageCount):
        (WTF::MemoryPressureHandler::thresholdForMemoryKill):
        (WTF::MemoryPressureHandler::measurementTimerFired):
        (WTF::MemoryPressureHandler::setTabCount): Deleted.
        * wtf/MemoryPressureHandler.h:

2017-06-21  Andreas Kling  <akling@apple.com>

        Increase memory kill limits for WebContent processes that manage multiple tabs.
        https://bugs.webkit.org/show_bug.cgi?id=173674

        Reviewed by Geoffrey Garen.

        When opening <a target=_blank> links, we currently have to use the same WebContent
        process for the new tab, to support scripting the window.opener object.
        This means that some WebContent processes end up hosting multiple tabs, making it
        more likely that those processes will hit the memory limits.

        Address this by adding some additional allowance for multi-tab processes:

            For each additional tab, up to 4 tabs, add 1GB to the memory kill limit.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::thresholdForMemoryKillWithProcessState):
        (WTF::MemoryPressureHandler::setTabCount):
        (WTF::MemoryPressureHandler::thresholdForMemoryKill):
        (WTF::MemoryPressureHandler::measurementTimerFired):
        * wtf/MemoryPressureHandler.h:

2017-06-21  Chris Dumez  <cdumez@apple.com>

        Allow constructing a WTF:Function from a function pointer
        https://bugs.webkit.org/show_bug.cgi?id=173660

        Reviewed by Alex Christensen.

        Allow constructing a WTF:Function from a function pointer and
        assigning a function pointer to a WTF:Function.

        * wtf/Function.h:

2017-06-20  Simon Fraser  <simon.fraser@apple.com>

        Remove WILL_REVEAL_EDGE_EVENTS code
        https://bugs.webkit.org/show_bug.cgi?id=173632

        Reviewed by Sam Weinig, Beth Dakin.

        Remove will-reveal-edge events, which never took off.

        * wtf/FeatureDefines.h:

2017-06-20  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive include directives from WTF
        https://bugs.webkit.org/show_bug.cgi?id=173553

        Reviewed by Saam Barati.

        * wtf/AutomaticThread.h:
        * wtf/BagToHashMap.h:
        * wtf/CrossThreadCopier.h:
        * wtf/CrossThreadQueue.h:
        * wtf/DateMath.h:
        * wtf/Expected.h:
        * wtf/HashMap.h:
        * wtf/Indenter.h:
        * wtf/MessageQueue.h:
        * wtf/MetaAllocator.h:
        * wtf/MetaAllocatorHandle.h:
        * wtf/RandomNumberSeed.h:
        * wtf/Ref.h:
        * wtf/RefPtr.h:
        * wtf/RunLoop.h:
        * wtf/SchedulePair.h:
        * wtf/StackStats.h:
        * wtf/SynchronizedFixedQueue.h:
        * wtf/ThreadMessage.h:
        * wtf/Threading.cpp:
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        * wtf/ThreadingWin.cpp:
        * wtf/WTFThreadData.h:
        * wtf/WorkQueue.h:
        * wtf/glib/GRefPtr.h:
        * wtf/text/AtomicStringTable.h:
        * wtf/text/LineBreakIteratorPoolICU.h:

2017-06-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Enable WTF::Signals only when HAVE(MACHINE_CONTEXT) is true
        https://bugs.webkit.org/show_bug.cgi?id=173590

        Reviewed by Carlos Garcia Campos.

        WTF::Signals require a feature rewriting a value of a machine context.
        This is only available under HAVE(MACHINE_CONTEXT).
        This patch disables WTF::Signals on !HAVE(MACHINE_CONTEXT) environments.

        * wtf/threads/Signals.cpp:
        * wtf/threads/Signals.h:

2017-06-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Rebaseline std::optional
        https://bugs.webkit.org/show_bug.cgi?id=173582

        Reviewed by JF Bastien.

        Update the copy of our std::optional to the latest version.
        It adds std::optional::has_value() and std::optional::reset().

        * wtf/Optional.h:

2017-06-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Include execinfo.h and dlfcn.h based on platform defines
        https://bugs.webkit.org/show_bug.cgi?id=173531

        Reviewed by Alex Christensen.

        execinfo.h and dlfcn.h can be missing in some libc libraries.
        When including it, we should honor platform defines like HAVE(DLADDR).

        * wtf/StackTrace.cpp:

2017-06-18  Darin Adler  <darin@apple.com>

        Fix Ref to deref before assignment, add tests for this to RefPtr, Ref, Function
        https://bugs.webkit.org/show_bug.cgi?id=173526

        Reviewed by Sam Weinig.

        * wtf/Ref.h: Changed operator= to not be defined inside the class definition.
        Added swap functions. Changed operator= implementations to use swap in the
        conventional manner, the same way that RefPtr does.

2017-06-18  Chris Dumez  <cdumez@apple.com>

        Use WTF::Function instead of std::function in WTF/
        https://bugs.webkit.org/show_bug.cgi?id=173519

        Reviewed by Sam Weinig.

        Use WTF::Function instead of std::function in WTF/ to avoid
        copying.

        * wtf/Brigand.h:
        * wtf/Condition.h:
        * wtf/Expected.h:
        * wtf/FunctionDispatcher.h:
        * wtf/MainThread.h:
        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::setMemoryKillCallback):
        (WTF::MemoryPressureHandler::setMemoryPressureStatusChangedCallback):
        (WTF::MemoryPressureHandler::setDidExceedInactiveLimitWhileActiveCallback):
        * wtf/Optional.h:
        * wtf/ParkingLot.h:
        * wtf/RefCounter.h:
        (WTF::RefCounter<T>::RefCounter):
        * wtf/WorkQueue.h:
        * wtf/linux/MemoryPressureHandlerLinux.cpp:
        (WTF::MemoryPressureHandler::EventFDPoller::EventFDPoller):
        * wtf/text/WTFString.cpp:
        (WTF::String::split):
        * wtf/text/WTFString.h:

2017-06-16  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build.

        * wtf/PlatformMac.cmake:
        Generate MachExceptionsServer.h

2017-06-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Upstream iOS drag and drop implementation into OpenSource WebKit
        https://bugs.webkit.org/show_bug.cgi?id=173366
        <rdar://problem/32767014>

        Reviewed by Tim Horton.

        Define ENABLE_DRAG_SUPPORT as 1 by default and 0 for iOS, and define ENABLE_DATA_INTERACTION as 0 by default.
        These are overridden to both be 1 for iOS 11+ in the FeatureDefines.xcconfig within each individual project.

        * wtf/Platform.h:

2017-06-15  Chris Dumez  <cdumez@apple.com>

        Fix typo in XPCSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=173426

        Reviewed by Alex Christensen.

        We should check if xpc_release is defined before defining it,
        not xpc_retain.

        * wtf/spi/darwin/XPCSPI.h:

2017-06-15  Konstantin Tokarev  <annulen@yandex.ru>

        Implement FALLTHROUGH macro for compilers other than Clang
        https://bugs.webkit.org/show_bug.cgi?id=173385

        Reviewed by Alex Christensen.

        FALLTHROUGH should be able to use [[gnu::fallthrough]] attribute of
        GCC, and [[fallthrough]] from C++17, whichever is available.

        * wtf/Compiler.h:

2017-06-14  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        MediaSource duration attribute should not be equal to Infinity when set to a value greater than 2^64
        https://bugs.webkit.org/show_bug.cgi?id=171668

        Reviewed by Jer Noble.

        MediaSource duration attribute is a double represented in MediaSource by a MediaTime instance created with
        MediaTime::CreateWithDouble(). This method implements an overflow control mechanism which sets MediaTime to
        Infinity when the double value passed as argument is greater than 2^64.

        This patch removes the overflow control mechanism when time value is represented as a double. This patch also
        modifies the behavior of mathematical operations between a double MediaTime and rational MediaTime: the rational
        MediaTime is converted to a double before applying the operation. Double MediaTime precision is the same as for
        double. Overflow mechanisms still apply to the conversion of a double MediaTime to rational with setTimescale()
        method. No behavior change for rational MediaTime.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::createWithFloat):
        (WTF::MediaTime::createWithDouble):
        (WTF::MediaTime::operator+):
        (WTF::MediaTime::operator-):

2017-06-13  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WPE] Use CMAKE_THREAD_LIBS_INIT in WTF platform CMake files
        https://bugs.webkit.org/show_bug.cgi?id=173310

        Reviewed by Xabier Rodriguez-Calvar.

        In the WTF platform CMake files for the GTK+ and WPE ports, use the
        CMAKE_THREAD_LIBS_INIT variable to specify the threading library we
        should be linking against. On some platforms this variable will be
        empty because the given compiler will automatically handle the -pthread
        compiler flag and sort out linking on its own.

        The same approach is already used for the JSCOnly configuration.

        * wtf/PlatformGTK.cmake:
        * wtf/PlatformWPE.cmake:

2017-06-13  Youenn Fablet  <youenn@apple.com>

        Filter SDP from ICE candidates in case of local ICE candidate filtering
        https://bugs.webkit.org/show_bug.cgi?id=173120

        Reviewed by Eric Carlson.

        Adding split helper routine with functor parameter.

        * wtf/text/WTFString.cpp:
        (WTF::String::split):
        * wtf/text/WTFString.h:
        (WTF::String::contains):

2017-06-13  Don Olmstead  <don.olmstead@sony.com>

        [WTF] Remove redundant includes in config.h
        https://bugs.webkit.org/show_bug.cgi?id=173292

        Reviewed by Alex Christensen.

        * config.h:
        * wtf/ExportMacros.h:

2017-06-12  Jer Noble  <jer.noble@apple.com>

        Screen sleeps while doing WebRTC video
        https://bugs.webkit.org/show_bug.cgi?id=173278

        Reviewed by Eric Carlson.

        Drive-by fix: add some generic methods for iterating over collections.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Algorithms.h: Added.
        (WTF::forEach):
        (WTF::anyOf):
        (WTF::allOf):

2017-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move WebKit GType macros to WTF
        https://bugs.webkit.org/show_bug.cgi?id=173249

        Reviewed by Žan Doberšek.

        They can be used by glib-based ports and eventually by JavaScriptCore glib bindings too.

        * wtf/glib/WTFGType.h: Copied from Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h.

2017-06-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Make ThreadMessage portable
        https://bugs.webkit.org/show_bug.cgi?id=172073

        Reviewed by Keith Miller.

        Recently, we change ThreadMessage semantics: message handler
        can be executed in the sender thread.
        This allows ThreadMessage to be implemented in a portable way.

        This patch implements ThreadMessage for all the platforms.
        We use platform-independent Thread APIs, suspend(), resume(),
        and getRegisters().

        * wtf/PlatformRegisters.h:
        (WTF::registersFromUContext):
        * wtf/ThreadMessage.cpp:
        (WTF::sendMessageScoped):
        (WTF::ThreadMessageData::ThreadMessageData): Deleted.
        (): Deleted.
        (WTF::initializeThreadMessages): Deleted.
        (WTF::sendMessageUsingSignal): Deleted.
        (WTF::sendMessageUsingMach): Deleted.
        (WTF::deliverMessagesUsingMach): Deleted.
        * wtf/ThreadMessage.h:
        * wtf/Threading.cpp:
        (WTF::initializeThreading):
        * wtf/Threading.h:
        (WTF::Thread::threadMessages): Deleted.
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::signalHandlerSuspendResume):
        (WTF::threadStateMetadata):
        (WTF::Thread::getRegisters):
        * wtf/threads/Signals.cpp:
        (WTF::handleSignalsWithMach):

2017-06-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Drop unnecessary includes in Threading.h
        https://bugs.webkit.org/show_bug.cgi?id=173167

        Reviewed by Darin Adler.

        Threading.h includes bunch of headers. But some of them are not necessary.
        This patch cleans up it a bit.

        * wtf/Assertions.cpp:
        * wtf/LocklessBag.h:
        * wtf/Threading.h:
        * wtf/ThreadingPrimitives.h:

2017-06-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Add RegisteredSymbolImpl
        https://bugs.webkit.org/show_bug.cgi?id=173230

        Reviewed by Mark Lam.

        Most symbols are not registered in SymbolRegistry. However, we currently always
        allocate a pointer member to point to a SymbolRegistry, and this pointer is always null.
        SymbolImpl is immutable, and it will never be registered with a SymbolRegistry
        after it is created. Hence, this member is wasteful.

        Instead, we add a new derived class RegisteredSymbolImpl, which will set a flag in
        SymbolImpl to indicate that it is registered with a SymbolRegistry. The only way to
        create a RegisteredSymbolImpl is via a factory method provided by the SymbolRegistry.
        The factory method will pass the SymbolRegistry this pointer to the RegisteredSymbolImpl's
        constructor for initializing the RegisteredSymbolImpl's m_symbolRegistry field.
        By doing so,

        1. We do not need to set m_symbolRegistry after creating a Symbol. It is clean.
        2. We reduce the size of SymbolImpls that do not need to be registered.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::~StringImpl):
        * wtf/text/StringImpl.h:
        * wtf/text/SymbolImpl.cpp:
        (WTF::SymbolImpl::create):
        (WTF::RegisteredSymbolImpl::create):
        * wtf/text/SymbolImpl.h:
        (WTF::SymbolImpl::hashForSymbol):
        (WTF::SymbolImpl::isRegistered):
        (WTF::SymbolImpl::SymbolImpl):
        (WTF::RegisteredSymbolImpl::symbolRegistry):
        (WTF::RegisteredSymbolImpl::clearSymbolRegistry):
        (WTF::RegisteredSymbolImpl::RegisteredSymbolImpl):
        (WTF::SymbolImpl::symbolRegistry):
        * wtf/text/SymbolRegistry.cpp:
        (WTF::SymbolRegistry::~SymbolRegistry):
        (WTF::SymbolRegistry::symbolForKey):
        (WTF::SymbolRegistry::keyForSymbol):
        (WTF::SymbolRegistry::remove):
        * wtf/text/SymbolRegistry.h:

2017-06-10  Dan Bernstein  <mitz@apple.com>

        Reverted r218056 because it made the IDE reindex constantly.

        * Configurations/DebugRelease.xcconfig:

2017-06-10  Dan Bernstein  <mitz@apple.com>

        [Xcode] With Xcode 9 developer beta, everything rebuilds when switching between command-line and IDE
        https://bugs.webkit.org/show_bug.cgi?id=173223

        Reviewed by Sam Weinig.

        The rebuilds were happening due to a difference in the compiler options that the IDE and
        xcodebuild were specifying. Only the IDE was passing the -index-store-path option. To make
        xcodebuild pass that option, too, set CLANG_INDEX_STORE_ENABLE to YES if it is unset, and
        specify an appropriate path in CLANG_INDEX_STORE_PATH.

        * Configurations/DebugRelease.xcconfig:

2017-06-09  Chris Dumez  <cdumez@apple.com>

        Update Thread::create() to take in a WTF::Function instead of a std::function
        https://bugs.webkit.org/show_bug.cgi?id=173175

        Reviewed by Mark Lam.

        Update Thread::create() to take in a WTF::Function instead of a std::function. Unlike
        std::function, WTF:Function is not copyable and does not make implicit copies of captured
        variables. Doing captures such as [string = string.isolatedCopy()] when passing an
        std::function to another thread has lead to bugs in the past due to implicit copying of
        the captured string.

        * wtf/Threading.cpp:
        (WTF::Thread::create):
        * wtf/Threading.h:

2017-06-09  Chris Dumez  <cdumez@apple.com>

        Update WorkQueue::concurrentApply() to take a WTF::Function instead of an std::function
        https://bugs.webkit.org/show_bug.cgi?id=173165

        Reviewed by Saam Barati.

        Update WorkQueue::concurrentApply() to take a WTF::Function instead of an std::function
        as std::function has issues with regards to thread safety.

        * wtf/WorkQueue.h:
        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::WorkQueue::concurrentApply):

2017-06-08  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        MediaTime class has rounding issues in different platforms
        https://bugs.webkit.org/show_bug.cgi?id=172640

        Reviewed by Jer Noble.

        The way a timescale is set when creating a MediaTime from a double
        can create rounding issues in different platforms because in some
        rounding is made and in others, it truncates. This way we ensure a
        common behavior.

        Dumping MediaTimes is also confusing and by the output you don't
        know if it's containing a double or a fraction. Now, if it
        contains a double, it only prints the double because printing the
        fraction is misleading (it currently prints the double read as an
        integer) and if it contains a fraction it shows the fraction and
        its double representation separated by an = instead of a ,.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::createWithDouble): When creating MediaTime from
        double, we round instead of leaving it to the cast operation.
        (WTF::MediaTime::dump):

2017-06-07  Jer Noble  <jer.noble@apple.com>

        Refactoring: MediaEngineSupportParameters should take a ContentType rather than separate type & codecs strings
        https://bugs.webkit.org/show_bug.cgi?id=173038

        Reviewed by Eric Carlson.

        Drive by fix: add a version of split that takes a UChar and returns a Vector<String>.

        * wtf/text/WTFString.h:
        (WTF::String::split):

2017-06-07  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] RSA-PSS support
        https://bugs.webkit.org/show_bug.cgi?id=172856

        Reviewed by Jiewen Tan.

        * wtf/Platform.h: Define HAVE_RSA_PSS to 1 for USE(GCRYPT). Support for RSA-PSS
        is provided by default through the libgcrypt library.

2017-06-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r214974.

        Causes some tabs to start using a huge amount of CPU after 8
        minutes in the background

        Reverted changeset:

        "Make inactive web processes behave as though under memory
        pressure."
        https://bugs.webkit.org/show_bug.cgi?id=170042
        http://trac.webkit.org/changeset/214974

2017-06-06  Don Olmstead  <don.olmstead@am.sony.com>

        [WebCore] Enable REQUEST_ANIMATION_FRAME_TIMER for all ports
        https://bugs.webkit.org/show_bug.cgi?id=172780

        Reviewed by Alex Christensen.

        * wtf/Platform.h:

2017-06-06  Darin Adler  <darin@apple.com>

        Cut down use of WTF_ARRAY_LENGTH
        https://bugs.webkit.org/show_bug.cgi?id=172997

        Reviewed by Chris Dumez.

        * wtf/DateMath.cpp:
        (WTF::equalLettersIgnoringASCIICase): Added helper function template.
        (WTF::parseDateFromNullTerminatedCharacters): Use a modern for loop instead of
        WTF_ARRAY_LENGTH. Use startsWithLettersIgnoringASCIICase and
        equalLettersIgnoringASCIICase instead of strncasecmp.

        * wtf/text/IntegerToStringConversion.h:
        (WTF::numberToStringImpl): Use std::end instead of WTF_ARRAY_LENGTH.
        (WTF::writeNumberToBufferImpl): Ditto.

2017-06-06  Filip Pizlo  <fpizlo@apple.com>

        index out of bound in bytecodebasicblock
        https://bugs.webkit.org/show_bug.cgi?id=172963

        Reviewed by Saam Barati and Mark Lam.

        * wtf/Assertions.h:
        (UNREACHABLE_FOR_PLATFORM):

2017-06-05  Jer Noble  <jer.noble@apple.com>

        Allow clients to specify a list of codecs which should require hardware decode support.
        https://bugs.webkit.org/show_bug.cgi?id=172787

        Reviewed by Alex Christensen.

        Add a couple of convenience methods:
        - a String::split() that returns a vector (rather than taking an out-reference to a vector).
        - A Vector::map() template which takes a Callable and returns a Vector of a different type.

        * wtf/Vector.h:
        (WTF::Vector::map):
        * wtf/text/WTFString.h:
        (WTF::String::split):

2017-06-04  Konstantin Tokarev  <annulen@yandex.ru>

        Fix build of Windows-specific code with ICU 59.1
        https://bugs.webkit.org/show_bug.cgi?id=172729

        Reviewed by Darin Adler.

        * wtf/text/win/WCharStringExtras.h: Added new header file wuth helper
        functions for conversion between WTF::String and wchart_t*.
        (WTF::stringToNullTerminatedWChar):
        (WTF::wcharToString):
        (WTF::nullTerminatedWCharToString):

2017-06-02  Stephan Szabo  <stephan.szabo@am.sony.com>

        [JSCOnly] Build static jsc.exe on Windows
        https://bugs.webkit.org/show_bug.cgi?id=172833

        Reviewed by Konstantin Tokarev.

        * wtf/PlatformJSCOnly.cmake:

2017-06-02  Simon Fraser  <simon.fraser@apple.com>

        Get <chrono> out of StdLibExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=172744

        Reviewed by Zalan Bujtas.

        We hates std::chrono. Don't include it everywhere to discourage use.

        * wtf/StdLibExtras.h:

2017-06-02  Filip Pizlo  <fpizlo@apple.com>

        Atomics.load and Atomics.store need to be fully fenced
        https://bugs.webkit.org/show_bug.cgi?id=172844

        Reviewed by Keith Miller.
        
        Add loadFullyFenced and storeFullyFenced to Atomic<>.

        * wtf/Atomics.h:
        (WTF::Atomic::loadFullyFenced):
        (WTF::Atomic::storeRelaxed):
        (WTF::Atomic::storeFullyFenced):
        (WTF::atomicLoadFullyFenced):
        (WTF::atomicStoreFullyFenced):

2017-06-01  Keith Miller  <keith_miller@apple.com>

        Undo rollout in r217638 with bug fix
        https://bugs.webkit.org/show_bug.cgi?id=172824

        Unreviewed, reland patch with unused set_state code removed.

        * Configurations/WTF.xcconfig:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/Platform.h:
        * wtf/PlatformRegisters.h:
        (WTF::registersFromUContext):
        * wtf/StackBounds.h:
        (WTF::StackBounds::StackBounds):
        * wtf/ThreadHolder.cpp:
        (WTF::ThreadHolder::~ThreadHolder):
        * wtf/ThreadMessage.cpp:
        (WTF::sendMessageUsingSignal):
        (WTF::sendMessageUsingMach):
        (WTF::deliverMessagesUsingMach):
        (WTF::sendMessageScoped):
        * wtf/ThreadMessage.h:
        (WTF::sendMessage):
        * wtf/Threading.h:
        (WTF::Thread::machThread):
        * wtf/mac/MachExceptions.defs: Copied from Source/WTF/wtf/ThreadMessage.h.
        * wtf/threads/Signals.cpp:
        (WTF::startMachExceptionHandlerThread):
        (WTF::fromMachException):
        (WTF::toMachMask):
        (WTF::handleSignalsWithMach):
        (WTF::setExceptionPorts):
        (WTF::activeThreads):
        (WTF::registerThreadForMachExceptionHandling):
        (WTF::unregisterThreadForMachExceptionHandling):
        (WTF::installSignalHandler):
        (WTF::jscSignalHandler):
        * wtf/threads/Signals.h:

2017-05-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r217611 and r217631.
        https://bugs.webkit.org/show_bug.cgi?id=172785

        "caused wasm-hashset-many.html to become flaky." (Requested by
        keith_miller on #webkit).

        Reverted changesets:

        "Reland r216808, underlying lldb bug has been fixed."
        https://bugs.webkit.org/show_bug.cgi?id=172759
        http://trac.webkit.org/changeset/217611

        "Use dispatch queues for mach exceptions"
        https://bugs.webkit.org/show_bug.cgi?id=172775
        http://trac.webkit.org/changeset/217631

2017-05-31  Keith Miller  <keith_miller@apple.com>

        Use dispatch queues for mach exceptions
        https://bugs.webkit.org/show_bug.cgi?id=172775

        Reviewed by Geoffrey Garen.

        This patch adds support for using a dispatch queue to handle our
        mach exceptions. We use a high priority concurrent dispatch queue
        to handle our mach exceptions. We don't know the priority of the
        thread whose exception we are handling so the most conservative
        answer is to respond with a high priority. These events are both
        rare and usually quite fast so it is likely not a significant cost
        when the thread with an exception has a low priority.

        * wtf/threads/Signals.cpp:
        (WTF::startMachExceptionHandlerThread):

2017-05-31  Keith Miller  <keith_miller@apple.com>

        Reland r216808, underlying lldb bug has been fixed.
        https://bugs.webkit.org/show_bug.cgi?id=172759

        Unreviewed, relanding old patch. See: rdar://problem/31183352

        * Configurations/WTF.xcconfig:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/Platform.h:
        * wtf/PlatformRegisters.h:
        (WTF::registersFromUContext):
        * wtf/StackBounds.h:
        (WTF::StackBounds::StackBounds):
        * wtf/ThreadHolder.cpp:
        (WTF::ThreadHolder::~ThreadHolder):
        * wtf/ThreadMessage.cpp:
        (WTF::sendMessageUsingSignal):
        (WTF::sendMessageUsingMach):
        (WTF::deliverMessagesUsingMach):
        (WTF::sendMessageScoped):
        * wtf/ThreadMessage.h:
        (WTF::sendMessage):
        * wtf/Threading.h:
        (WTF::Thread::machThread):
        * wtf/mac/MachExceptions.defs: Copied from Source/WTF/wtf/ThreadMessage.h.
        * wtf/threads/Signals.cpp:
        (WTF::startMachExceptionHandlerThread):
        (WTF::fromMachException):
        (WTF::toMachMask):
        (WTF::handleSignalsWithMach):
        (WTF::setExceptionPorts):
        (WTF::activeThreads):
        (WTF::registerThreadForMachExceptionHandling):
        (WTF::unregisterThreadForMachExceptionHandling):
        (WTF::installSignalHandler):
        (WTF::jscSignalHandler):
        * wtf/threads/Signals.h:

2017-05-31  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r217603.

        This patch broke the internal builds.

        Reverted changeset:

        "Get <chrono> out of StdLibExtras.h"
        https://bugs.webkit.org/show_bug.cgi?id=172744
        http://trac.webkit.org/changeset/217603

2017-05-31  Simon Fraser  <simon.fraser@apple.com>

        Get <chrono> out of StdLibExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=172744

        Reviewed by Saam Barati.

        We hates std::chrono. Don't include it everywhere to discourage use.

        * wtf/StdLibExtras.h:

2017-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        Only include DataDetectorsUI headers in iOS
        https://bugs.webkit.org/show_bug.cgi?id=172633

        Reviewed by David Kilzer.

        Enable data detectors only on iOS and not other variants of iOS.

        * wtf/FeatureDefines.h:
        * wtf/Platform.h:

2017-05-29  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, disable faster Interpreter::getOpcodeID for ARM_THUMB2 with non-Darwin OSes
        https://bugs.webkit.org/show_bug.cgi?id=172686

        Because of test failures.

        * wtf/Platform.h:

2017-05-28  Dan Bernstein  <mitz@apple.com>

        [Xcode] ALWAYS_SEARCH_USER_PATHS is set to YES
        https://bugs.webkit.org/show_bug.cgi?id=172691

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Set ALWAYS_SEARCH_USER_PATHS to NO.

2017-05-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][Linux][FreeBSD] Use faster Interpreter::getOpcodeID()
        https://bugs.webkit.org/show_bug.cgi?id=172686

        Reviewed by Mark Lam.

        As of r217526, JSC gets faster Interpreter::getOpcodeID() by
        embedding OpcodeID value just before the LLInt machine code
        handler pointer. By doing so, we can retrieve OpcodeID from
        the LLInt machine code handler by dereferencing the code
        pointer. `*((int*)ptr - 1)`.

        This patch allows Linux and FreeBSD environments to use this
        optimization.

        * wtf/Platform.h:

2017-05-28  Mark Lam  <mark.lam@apple.com>

        Implement a faster Interpreter::getOpcodeID().
        https://bugs.webkit.org/show_bug.cgi?id=172669

        Reviewed by Saam Barati.

        Added the USE(LLINT_EMBEDDED_OPCODE_ID) configuration.

        * wtf/Platform.h:

2017-05-26  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Address thread safety issues with ResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=172519
        <rdar://problem/31707642>

        Reviewed by Chris Dumez.

        Add a new specialization for HashSet.

        * wtf/CrossThreadCopier.h:

2017-05-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r217458.

        This change caused 55 JSC test failures.

        Reverted changeset:

        "Date should use historical data if it's available."
        https://bugs.webkit.org/show_bug.cgi?id=172592
        http://trac.webkit.org/changeset/217458

2017-05-25  Keith Miller  <keith_miller@apple.com>

        Date should use historical data if it's available.
        https://bugs.webkit.org/show_bug.cgi?id=172592

        Reviewed by Mark Lam.

        The spec previously disallowed using historical data for Dates.
        This is no longer the case. Additionally, not using historical
        data, when available, seems unfortunate for users. This patch
        removes the code dropping historical data.

        * wtf/DateMath.cpp:
        (WTF::calculateLocalTimeOffset):
        (WTF::msToMilliseconds): Deleted.

2017-05-25  Yusuke Suzuki  <utatane.tea@gmail.com>

        [Win] ASSERTION FAILED: !HashTranslator::equal(KeyTraits::emptyValue(), key)
        https://bugs.webkit.org/show_bug.cgi?id=172586

        Reviewed by Brent Fulgham.

        In ThreadHolder for Windows, we need to construct HashMap<ThreadIdentifier, ThreadHolder*>.
        The problem is that ThreadHolder::platformInitialize touches Thread::id() even before Thread
        is not established. In that case, id() returns incorrect value.

        But, calling ThreadHolder::initialize() after waiting for completion of Thread::establish() is
        not a good idea. Since we already have NewThreadContext->creationMutex, we can wait for completion
        of Thread::establish() easily. However, if we do so, Thread::create() returns RefPtr<Thread> that
        may not call ThreadHolder::initialize() in its thread yet. In that case, ThreadHolder::get() fails.
        Thus, Windows WTF::waitForThreadCompletion implementation becomes broken. We can add a new mutex
        to wait for completion of ThreadHolder::initialize in the creator of the thread (like a ping-pong!).
        But it overly complicates the implementation.

        The following is overly complicated initialization phase.

        Creator -> AC mutex(1) -------> establishment -> RL mutex(1) ----------------------> AC mutex(2) ->

                               Thread -----------------> AC mutex(1) -> ThreadHolder init -> RL mutex(2) ->

        So, instead, in this patch, we just use Thread::currentID(). When calling ThreadHolder::initialize(),
        we pass ThreadIdentifier by using Thread::currentID(). This implementation works great because,

        1. ThreadHolder::initialize requires ThreadIdentifier only in Windows environment because Pthread
           ThreadHolder does not create HashMap<>. And this is used for obsolete Threading APIs. Thus this
           hack will be removed in the near future.

        2. In Windows, Thread::currentID() can return a valid value without using ThreadHolder. And it does
           not require Thread establishment. So, calling currentID() to initialize ThreadHolder is ok in
           Windows.

        * wtf/ThreadHolder.cpp:
        (WTF::ThreadHolder::initialize): Deleted.
        * wtf/ThreadHolder.h:
        * wtf/ThreadHolderPthreads.cpp:
        (WTF::ThreadHolder::initialize):
        * wtf/ThreadHolderWin.cpp:
        (WTF::ThreadHolder::initialize):
        (WTF::ThreadHolder::platformInitialize): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::wtfThreadEntryPoint):

2017-05-25  Adrian Perez de Castro  <aperez@igalia.com>

        Clang warns about (intended) returning pointer to stack location in WTF/wtf/ThreadingPthreads.cpp
        https://bugs.webkit.org/show_bug.cgi?id=172595

        Reviewed by Mark Lam.

        * wtf/ThreadingPthreads.cpp: Use a #pragma to silence Clang warning about returning a
        pointer to the stack (which is intended)

2017-05-25  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r217416): Using #pragma once in WTFString.h broke the build

        * wtf/text/WTFString.h: Switch back to #ifndef/#define/#endif.

2017-05-25  David Kilzer  <ddkilzer@apple.com>

        Make a change to force a build on the Apple bots

        * wtf/text/WTFString.h: Use #pragma once.

2017-05-24  Andreas Kling  <akling@apple.com>

        Disable memory kill mechanisms when running with FastMalloc disabled.
        https://bugs.webkit.org/show_bug.cgi?id=172550
        <rdar://problem/32181908>

        Reviewed by Antti Koivisto.

        If someone is using WebKit with a non-standard allocator, they are likely trying to debug
        or test something, and suddenly getting killed is not gonna help with that.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor):

2017-05-22  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Support RSA-PSS
        https://bugs.webkit.org/show_bug.cgi?id=170869
        <rdar://problem/31640672>

        Reviewed by Brent Fulgham.

        * wtf/Platform.h:
        Add a flag to enable RSA-PSS in the future.

2017-05-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove dead ENABLE(FONT_LOAD_EVENTS) code
        https://bugs.webkit.org/show_bug.cgi?id=172517

        Rubber-stamped by Simon Fraser.

        * wtf/FeatureDefines.h:

2017-05-23  Don Olmstead  <don.olmstead@am.sony.com>

        [WTF] Export additional symbols in threading
        https://bugs.webkit.org/show_bug.cgi?id=171952

        Reviewed by Konstantin Tokarev.

        * wtf/ThreadMessage.h:
        * wtf/threads/Signals.h:

2017-05-23  Tomas Popela  <tpopela@redhat.com>

        [WTF] Compilation fails with system malloc
        https://bugs.webkit.org/show_bug.cgi?id=172445

        Reviewed by Michael Catanzaro.

        We are using the bmalloc even if the system malloc should be used.
        Don't use bmalloc if the system malloc is requested and add the
        missing implementation for computeRAMSize() on UNIX that's utilizing
        the sysinfo() call.

        * wtf/RAMSize.cpp:
        (WTF::computeRAMSize):

2017-05-22  Brian Burg  <bburg@apple.com>

        Add a debugging macro that sleeps a thread until a debugger attaches
        https://bugs.webkit.org/show_bug.cgi?id=171575

        Reviewed by Mark Lam.

        This is really useful for debugging early errors if for some reason you can't
        launch a process directly from the debugger easily, such as Web Content processes.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Assertions.h:
        Always define the WTFBreakpointTrap() macro. Still make it an error if the CPU
        type isn't supported for OS(DARWIN); if used on other platforms, cause a WTFCrash()
        with a comment that indicates this is not implemented.

        * wtf/DebugUtilities.h: Added.

2017-05-19  Don Olmstead  <don.olmstead@am.sony.com>

        [WTF] Remove PLATFORM(WIN) references
        https://bugs.webkit.org/show_bug.cgi?id=172301

        Reviewed by Yusuke Suzuki.

        * wtf/MemoryPressureHandler.cpp:
        * wtf/MemoryPressureHandler.h:
        * wtf/Platform.h:

2017-05-19  Don Olmstead  <don.olmstead@am.sony.com>

        [CMake] Add HAVE check for __int128_t
        https://bugs.webkit.org/show_bug.cgi?id=172317

        Reviewed by Yusuke Suzuki.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::setTimeScale):
        * wtf/Platform.h:

2017-05-18  Andreas Kling  <akling@apple.com>

        [WK2] Notify WebPageProxy client when an active process goes over the inactive memory limit
        https://bugs.webkit.org/show_bug.cgi?id=172244
        <rdar://problem/31800943>

        Reviewed by Geoffrey Garen.

        Add an installable callback to MemoryPressureHandler that gets invoked when an active process
        exceeds the kill limit for an inactive process.

        This allows a UI client to become aware that backgrounding a tab may cause it to get killed.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::thresholdForMemoryKillWithProcessState):
        (WTF::MemoryPressureHandler::thresholdForMemoryKill):
        (WTF::MemoryPressureHandler::measurementTimerFired):
        (WTF::MemoryPressureHandler::doesExceedInactiveLimitWhileActive):
        (WTF::MemoryPressureHandler::doesNotExceedInactiveLimitWhileActive):
        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::setDidExceedInactiveLimitWhileActiveCallback):

2017-05-18  Geoffrey Garen  <ggaren@apple.com>

        AutomaticThread should wait longer before timing out
        https://bugs.webkit.org/show_bug.cgi?id=172292

        Reviewed by Filip Pizlo.

        Increased the idle timeout from 1s => 10s.

        This reduces the number of thread restarts on JetStream from
        ~150 => ~0. It also matches other thread pool APIs on Darwin.

        Intuitively, it seems wrong for helper threads to idle exit during
        hardcore benchmarking.

        This patch in combination with a bmalloc fix seems to be a 1%-2% JetStream
        speedup on my Mac Pro.

        A nice side-benefit is that per-thread traces are easier to read.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThread::start):
        * wtf/AutomaticThread.h:

2017-05-18  Don Olmstead  <don.olmstead@am.sony.com>

        [Win] Remove usage of _snprintf
        https://bugs.webkit.org/show_bug.cgi?id=172251

        Reviewed by Per Arne Vollan.

        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):
        (WTF::setDataFile):

2017-05-15  Mark Lam  <mark.lam@apple.com>

        Rolling out r214038 and r213697: Crashes when using computed properties with rest destructuring and object spread.
        https://bugs.webkit.org/show_bug.cgi?id=172147

        Rubber-stamped by Saam Barati.

        * wtf/HashSet.h:
        (WTF::=):

2017-05-14  Chris Dumez  <cdumez@apple.com>

        Drop PassRefPtr class from WTF
        https://bugs.webkit.org/show_bug.cgi?id=172091

        Reviewed by Alex Christensen.

        Drop PassRefPtr class from WTF as it is no longer used or needed.
        Also drop RefPtr::release() for the same reasons.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/CrossThreadCopier.cpp:
        * wtf/CrossThreadCopier.h:
        * wtf/Forward.h:
        * wtf/PassRefPtr.h: Removed.
        * wtf/RefPtr.h:
        (WTF::refIfNotNull):
        (WTF::derefIfNotNull):
        (WTF::RefPtr::RefPtr):
        (WTF::RefPtr::release): Deleted.
        * wtf/SizeLimits.cpp:
        * wtf/Vector.h:

2017-05-13  Chris Dumez  <cdumez@apple.com>

        Stop using RefPtr::release()
        https://bugs.webkit.org/show_bug.cgi?id=172074

        Reviewed by Geoffrey Garen.

        * wtf/win/WorkQueueWin.cpp:
        (WTF::WorkQueue::dispatchAfter):

2017-05-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r216808.
        https://bugs.webkit.org/show_bug.cgi?id=172075

        caused lldb to hang when debugging (Requested by smfr on
        #webkit).

        Reverted changeset:

        "Use Mach exceptions instead of signals where possible"
        https://bugs.webkit.org/show_bug.cgi?id=171865
        http://trac.webkit.org/changeset/216808

2017-05-12  Keith Miller  <keith_miller@apple.com>

        Use Mach exceptions instead of signals where possible
        https://bugs.webkit.org/show_bug.cgi?id=171865

        Reviewed by Mark Lam.

        This patch enables using mach exceptions on darwin. The way the
        mach exception api works is that we create a mach port, which is
        like a file descriptor.  We then wait for a message to arrive on
        that port in a thread. When another thread raises an exception (say
        due to a bad memory access) the OS sends our thread a message. The
        payload of that message is the register file of the crashing
        thread. We then call our custom handlers that change the state as
        needed. In order to restart the thread we send a payload back to
        the OS with an updated register file along with a success message
        header.

        This patch also makes thread messages work without signals by
        simply suspending the thread, and then running the message at that
        time.

        You can read more about mach exceptions here:
        http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/exception.ps
        and the Mach interface Generator (MiG) here:
        http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/mig.ps

        * Configurations/WTF.xcconfig:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/Platform.h:
        * wtf/PlatformRegisters.h:
        (WTF::registersFromUContext):
        * wtf/StackBounds.h:
        (WTF::StackBounds::StackBounds):
        * wtf/ThreadHolder.cpp:
        (WTF::ThreadHolder::~ThreadHolder):
        * wtf/ThreadMessage.cpp:
        (WTF::sendMessageUsingSignal):
        (WTF::sendMessageUsingMach):
        (WTF::deliverMessagesUsingMach):
        (WTF::sendMessageScoped):
        * wtf/ThreadMessage.h:
        (WTF::sendMessage):
        * wtf/Threading.h:
        (WTF::Thread::machThread):
        * wtf/mac/MachExceptions.defs: Copied from Source/WTF/wtf/ThreadMessage.h.
        * wtf/threads/Signals.cpp:
        (WTF::startMachExceptionHandlerThread):
        (WTF::fromMachException):
        (WTF::toMachMask):
        (WTF::handleSignalsWithMach):
        (WTF::setExceptionPorts):
        (WTF::activeThreads):
        (WTF::registerThreadForMachExceptionHandling):
        (WTF::unregisterThreadForMachExceptionHandling):
        (WTF::installSignalHandler):
        (WTF::jscSignalHandler):
        * wtf/threads/Signals.h:

2017-05-12  Ting-Wei Lan  <lantw44@gmail.com>

        Include algorithm before using std::min
        https://bugs.webkit.org/show_bug.cgi?id=171733

        Reviewed by Chris Dumez.

        * wtf/text/StringCommon.h:

2017-05-12  Andreas Kling  <akling@apple.com>

        More aggressive memory kill limits.
        https://bugs.webkit.org/show_bug.cgi?id=172037
        <rdar://problem/31969082>

        Reviewed by Michael Saboff.

        Bring down the memory kill limits to 4GB for active processes, and 2GB for inactive.
        Also make MemoryUsagePolicy::Strict kick in above 1.5GB.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::thresholdForMemoryKill):
        (WTF::thresholdForPolicy):

2017-05-12  Michael Saboff  <msaboff@apple.com>

        [iOS] Use memory footprint to dynamically adjust behavior of allocators
        https://bugs.webkit.org/show_bug.cgi?id=171944

        Reviewed by Filip Pizlo.

        Moved the non-Windows implementation of RAMSize() to bmalloc/AvailableMemory.cpp and
        called the function availableMemory().

        * wtf/RAMSize.cpp:
        (WTF::computeRAMSize):

2017-05-12  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Add MemoryFootprintLinux to build

        Unreviewed build fix after r216731.

        * wtf/PlatformWPE.cmake:

2017-05-12  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial JSCOnly buildfix after r216731.
        https://bugs.webkit.org/show_bug.cgi?id=171693

        * wtf/PlatformJSCOnly.cmake:

2017-05-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [Win] Implement memoryFootprint for Windows
        https://bugs.webkit.org/show_bug.cgi?id=171693

        Reviewed by Alex Christensen.

        This patch implements memoryFootprint for Windows. In Windows, we calculate the size
        of private working set. This can be done by enumerating private pages in working set.

        And we also split MemoryFootprint.cpp to cocoa, linux, and win versions.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/MallocPtr.h:
        (WTF::MallocPtr::operator*):
        (WTF::MallocPtr::operator->):
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/cocoa/MemoryFootprintCocoa.cpp: Copied from Source/WTF/wtf/MemoryFootprint.cpp.
        (WTF::memoryFootprint):
        * wtf/linux/MemoryFootprintLinux.cpp: Renamed from Source/WTF/wtf/MemoryFootprint.cpp.
        (WTF::forEachLine):
        (WTF::memoryFootprint):
        * wtf/win/MemoryFootprintWin.cpp: Added.
        (WTF::memoryFootprint):

2017-05-11  Don Olmstead  <don.olmstead@am.sony.com>

        [CMake] Add HAVE check for regex.h
        https://bugs.webkit.org/show_bug.cgi?id=171950

        Reviewed by Michael Catanzaro.

        * wtf/Platform.h:

2017-05-11  Chris Dumez  <cdumez@apple.com>

        Annotate Ref::ptr() with RETURNS_NONNULL
        https://bugs.webkit.org/show_bug.cgi?id=171996

        Reviewed by Andreas Kling.

        Annotate Ref::ptr() with RETURNS_NONNULL as it can never return null.

        * wtf/Ref.h:
        (WTF::Ref::ptr): Deleted.

2017-05-11  Joseph Pecoraro  <pecoraro@apple.com>

        Remove Vibration API
        https://bugs.webkit.org/show_bug.cgi?id=171766

        Rubber-stamped by Alexey Proskuryakov.

        * wtf/FeatureDefines.h:

2017-05-09  Sam Weinig  <sam@webkit.org>

        Remove support for legacy Notifications
        https://bugs.webkit.org/show_bug.cgi?id=171487

        Reviewed by Jon Lee.

        * wtf/FeatureDefines.h:
        Remove definition of ENABLE_LEGACY_NOTIFICATIONS.

2017-05-10  Adrian Perez de Castro  <aperez@igalia.com>

        Remove some last remnants of the EFL port
        https://bugs.webkit.org/show_bug.cgi?id=171922

        Reviewed by Antonio Gomes.

        The EFL port is no more.

        * wtf/PlatformEfl.cmake: Removed.

2017-05-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] StaticStringImpl in HTMLNames.cpp aren't constructed
        https://bugs.webkit.org/show_bug.cgi?id=171800

        Reviewed by Yusuke Suzuki.

        Global variables of StaticStringImpl in HTMLNames.cpp aren't
        constructed on Windows since Bug 171586. It seems that
        reinterpret_cast prevents constexpr's compile time initialization
        in VC++.

        * wtf/text/StringImpl.h:
        (WTF::StringImplShape::StringImplShape): Added const char* and
        const char16_t* members in the union. Do not use reinterpret_cast
        in constexpr constructors.

2017-05-09  Mark Lam  <mark.lam@apple.com>

        Force StaticStringImpl constructor to use the constexpr versions of StringImplShape constructors.
        https://bugs.webkit.org/show_bug.cgi?id=171861

        Reviewed by Yusuke Suzuki.

        This is strictly necessary for correctness of the StaticStringImpl implementation.
        We force the constructor selection by adding an extra dummy argument to the
        constexpr versions of the StringImplShape constructors to disambiguate them from
        the non-constexpr versions.

        * wtf/text/StringImpl.h:
        (WTF::StringImplShape::StringImplShape):
        (WTF::StringImpl::StaticStringImpl::StaticStringImpl):

2017-05-09  Zan Dobersek  <zdobersek@igalia.com>

        Upstream the WPE port
        https://bugs.webkit.org/show_bug.cgi?id=171110

        Reviewed by Alex Christensen.

        * wtf/Platform.h:
        * wtf/PlatformWPE.cmake: Added.
        * wtf/glib/RunLoopSourcePriority.h:

2017-05-08  Mark Lam  <mark.lam@apple.com>

        Speculative Windows build fix after r216428.
        https://bugs.webkit.org/show_bug.cgi?id=171776

        Not reviewed.

        * wtf/StackTrace.h:

2017-05-08  Mark Lam  <mark.lam@apple.com>

        Introduce ExceptionScope::assertNoException() and releaseAssertNoException().
        https://bugs.webkit.org/show_bug.cgi?id=171776

        Reviewed by Keith Miller.

        1. Add an option to skip some number of top frames when capturing the StackTrace.
        2. Add an option to use an indentation string when dumping the StackTrace.

        * wtf/StackTrace.cpp:
        (WTF::StackTrace::captureStackTrace):
        (WTF::StackTrace::dump):
        * wtf/StackTrace.h:

2017-05-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Use memoryFootprint for MemoryUsage retrieval in Linux
        https://bugs.webkit.org/show_bug.cgi?id=171757

        Reviewed by Michael Catanzaro.

        This patch leverages memoryFootprint() to retrieve physical footprint in Linux.

        * wtf/linux/MemoryPressureHandlerLinux.cpp:
        (WTF::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):

2017-05-05  Don Olmstead  <don.olmstead@am.sony.com>

        [WTF] Do not export deleted constructor in StringView
        https://bugs.webkit.org/show_bug.cgi?id=171751

        Reviewed by Alexey Proskuryakov.

        * wtf/text/StringView.h:

2017-05-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK][JSCOnly] Merge MainThread implementations and use generic one
        https://bugs.webkit.org/show_bug.cgi?id=171738

        Reviewed by Michael Catanzaro.

        GLib MainThread implementation is generic enough to be used in JSCOnly.
        We move it to generic/ and GTK (GLib ports) and JSCOnly use it.
        And we also drop GLib MainThread's isMainThread function because
        generic thread ID one is enough.

        This patch also cleans up initializing main thread code by using std::call_once.

        * wtf/MainThread.cpp:
        (WTF::initializeMainThread):
        (WTF::isMainThread):
        (WTF::initializeMainThreadToProcessMainThread):
        (WTF::initializeWebThread):
        (WTF::canAccessThreadLocalDataForThread):
        (WTF::initializeMainThreadOnce): Deleted.
        (WTF::initializeMainThreadToProcessMainThreadOnce): Deleted.
        (WTF::initializeWebThreadOnce): Deleted.
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/generic/MainThreadGeneric.cpp:
        (WTF::MainThreadDispatcher::MainThreadDispatcher):
        (WTF::MainThreadDispatcher::schedule):
        (WTF::MainThreadDispatcher::fired):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/glib/MainThreadGLib.cpp: Removed.

2017-05-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r216206.
        https://bugs.webkit.org/show_bug.cgi?id=171714

        Multiple LayoutTests crashing in Document::page() (Requested
        by ap on #webkit).

        Reverted changeset:

        "Remove support for legacy Notifications"
        https://bugs.webkit.org/show_bug.cgi?id=171487
        http://trac.webkit.org/changeset/216206

2017-05-04  Don Olmstead  <don.olmstead@am.sony.com>

        [Win] Remove redundant macros that are set in the CMake config
        https://bugs.webkit.org/show_bug.cgi?id=171571

        Reviewed by Brent Fulgham.

        * config.h:

2017-05-04  Mark Lam  <mark.lam@apple.com>

        NeverDestroyed<String>(ASCIILiteral(...)) is not thread safe.
        https://bugs.webkit.org/show_bug.cgi?id=171586
        <rdar://problem/31873190>

        Reviewed by Yusuke Suzuki.

        StaticStringImpl is meant to be thread-safe.  However, it has a bug: it did not
        set the s_hashFlagDidReportCost flag.  As a result, if cost() is called on it,
        different threads may try to change its flags bits at the same time.  This patch
        changes StaticStringImpl to always set the s_hashFlagDidReportCost flag.

        Also factored out StringImplShape and made StringImpl and StaticStringImpl extend
        it.  This makes it more clear that the 2 are intended to have the same shape.
        Note: there is already a static_assert that the 2 have the same size.  This
        change also ensures that they both have the same shape, which is a requirement in
        order for StaticStringImpl to work.

        Introduced the MAKE_STATIC_STRING_IMPL macro as a convenient way to instantiate
        StaticStringImpls from literal strings.  This allows us to trivially change

            NeverDestroyed<String> myString(ASCIILiteral("myString"));

        to ...

            NeverDestroyed<String> myString(MAKE_STATIC_STRING_IMPL("myString"));

        and by so doing, make it thread-safe.

        MAKE_STATIC_STRING_IMPL instantiates a lambda function to create the static
        StaticStringImpls.

        * wtf/text/StringImpl.h:
        (WTF::StringImplShape::StringImplShape):
        (WTF::StringImpl::StringImpl):
        (WTF::StringImpl::cost):
        (WTF::StringImpl::setHash):
        (WTF::StringImpl::StaticStringImpl::StaticStringImpl):
        (WTF::StringImpl::StaticStringImpl::operator StringImpl&):
        * wtf/text/WTFString.h:
        (WTF::String::String):
        * wtf/text/icu/TextBreakIteratorICU.h:
        (WTF::caretRules):

2017-05-04  Sam Weinig  <sam@webkit.org>

        Remove support for legacy Notifications
        https://bugs.webkit.org/show_bug.cgi?id=171487

        Reviewed by Jon Lee.

        * wtf/FeatureDefines.h:
        Remove definition of ENABLE_LEGACY_NOTIFICATIONS.

2017-05-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK][JSCOnly] Implement memoryFootprint for Linux
        https://bugs.webkit.org/show_bug.cgi?id=171680

        Reviewed by Carlos Alberto Lopez Perez.

        Darwin's phys_footprint returns the amount of dirty anonymous memory in the process.
        This patch implements the same thing in Linux by reading /proc/self/smaps.
        We sum sizes of private dirty pages in anonymous regions.

        * wtf/MemoryFootprint.cpp:
        (WTF::forEachLine):
        (WTF::memoryFootprint):

2017-05-03  Mark Lam  <mark.lam@apple.com>

        Use the CLoop for CPU(ARM64E).
        https://bugs.webkit.org/show_bug.cgi?id=171620
        <rdar://problem/31973027>

        Reviewed by Geoffrey Garen.

        * wtf/Platform.h:

2017-05-02  Daniel Bates  <dabates@apple.com>

        Fix the build after <https://trac.webkit.org/changeset/216102>
        (https://bugs.webkit.org/show_bug.cgi?id=170925)

        Export into global scope ASCIICaseInsensitiveStringViewHashTranslator.

        Also fix indentation of member functions of ASCIICaseInsensitiveStringViewHashTranslator.

        * wtf/text/StringHash.h:

2017-05-02  Daniel Bates  <dabates@apple.com>

        Using StringView.split() instead of String.split() in some places
        https://bugs.webkit.org/show_bug.cgi?id=170925

        Reviewed by Darin Adler and Sam Weinig.

        * wtf/HashMap.h: Add HashMap::get() overload that takes a HashTranslator.
        * wtf/text/StringHash.h:
        (WebCore::ASCIICaseInsensitiveStringViewHashTranslator::hash): Added.
        (WebCore::ASCIICaseInsensitiveStringViewHashTranslator::equal): Added.

2017-05-01  Dan Bernstein  <mitz@apple.com>

        [Xcode] It’s easy to accidentally install a WTF header outside /usr/local/include/wtf
        https://bugs.webkit.org/show_bug.cgi?id=171533

        Reviewed by Andy Estes.

        * WTF.xcodeproj/project.pbxproj: Removed the WTF target’s Headers build phase. Its existence
          was making it easy to accidentally add a header to the target and make it Private, which
          would have Xcode install a copy of it right under /usr/local/include, in addition to the
          copy installed under /usr/local/include/wtf by the Copy WTF Headers target.
          Also got rid of INSTALL_PATH_PREFIX in the script build phase in the Copy WTF Headers
          target, because it is being never set anymore.

2017-05-01  Dan Bernstein  <mitz@apple.com>

        WTF installs an extra copy of a header outside /usr/local/include/wtf

        * WTF.xcodeproj/project.pbxproj: Demoted CPUTime.h from Private to Project.

2017-05-01  Daniel Bates  <dabates@apple.com>

        Cleanup: Change ASCIICaseInsensitiveHash from a class to a struct
        https://bugs.webkit.org/show_bug.cgi?id=171460

        Reviewed by Sam Weinig.

        All of the members of ASCIICaseInsensitiveHash have public visibility.
        We are underutilizing the purpose of a class - defaults to private
        visibility of members. We should change ASCIICaseInsensitiveHash from
        a class to a struct, which by definition defaults to public visibility
        for members.

        * wtf/text/StringHash.h:

2017-04-29  Yusuke Suzuki  <utatane.tea@gmail.com>

        Move WebCore CPUTime to WTF and implement it in all the platforms
        https://bugs.webkit.org/show_bug.cgi?id=171477

        Reviewed by Chris Dumez.

        We move WebCore::CPUTime to WTF::CPUTime since it is useful even in JSC
        and it does not depend on any external libraries.
        And we additionally implement WTF::CPUTime in all the platforms: Windows and Unix.

        In CPUTime, instead of holding int64_t, we hold MonotonicTime and Seconds.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/CPUTime.cpp: Copied from Source/WebCore/platform/CPUTime.cpp.
        (WTF::CPUTime::percentageCPUUsageSince):
        * wtf/CPUTime.h: Renamed from Source/WebCore/platform/CPUTime.h.
        * wtf/PlatformEfl.cmake:
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/cocoa/CPUTimeCocoa.mm: Renamed from Source/WebCore/platform/cocoa/CPUTimeCocoa.mm.
        (WTF::timeValueToMicroseconds):
        (WTF::CPUTime::get):
        * wtf/unix/CPUTimeUnix.cpp: Renamed from Source/WebCore/platform/CPUTime.cpp.
        (WTF::timevalToSeconds):
        (WTF::CPUTime::get):
        * wtf/win/CPUTimeWin.cpp: Added.
        (WTF::fileTimeToSeconds):
        (WTF::CPUTime::get):

2017-04-28  Simon Fraser  <simon.fraser@apple.com>

        Add system trace points for Document::updateTouchEventRegions()
        https://bugs.webkit.org/show_bug.cgi?id=171470
        rdar://problem/31901239

        Reviewed by Tim Horton.

        Add trace markers for updateTouchEventRegions.

        * wtf/SystemTracing.h:

2017-04-28  Daniel Bates  <dabates@apple.com>

        Add StringView::toExistingAtomicString()
        https://bugs.webkit.org/show_bug.cgi?id=171405

        Reviewed by Andreas Kling.

        Similar to the reasons for JSString::toExistingAtomicString() we should expose a way to
        convert a StringView to an existing atomic string. Looking up an atomic string is more
        efficient that creating one, which requires a lookup and memory allocation.

        We are not making use of StringView::toExistingAtomicString() now, but will in the patch
        for <https://bugs.webkit.org/show_bug.cgi?id=170925>.

        * wtf/text/AtomicStringImpl.cpp:
        (WTF::AtomicStringImpl::lookUp): Modified to take a const LChar*/UChar*.
        (WTF::AtomicStringImpl::lookUpInternal): Renamed to AtomicStringImpl::lookup() to avoid
        an extra function call.
        * wtf/text/AtomicStringImpl.h:
        * wtf/text/StringView.h:
        (WTF::StringView::toExistingAtomicString): Added.

2017-04-28  Chris Dumez  <cdumez@apple.com>

        Update DOMTokenList.replace() to match the latest DOM specification
        https://bugs.webkit.org/show_bug.cgi?id=171388

        Reviewed by Alex Christensen.

        Add Vector::findMatching() API which takes in a lambda function for convenience.
        Add optional startIndex parameter to Vector::removeFirstMatching() / removeAllMatching()
        to remove items only after given index.

        * wtf/Vector.h:
        (WTF::minCapacity>::findMatching):
        (WTF::minCapacity>::find):
        (WTF::minCapacity>::removeFirstMatching):
        (WTF::minCapacity>::removeAllMatching):

2017-04-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move UUID from WebCore/platform to WTF
        https://bugs.webkit.org/show_bug.cgi?id=171372

        Reviewed by Michael Catanzaro.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/UUID.cpp: Renamed from Source/WebCore/platform/UUID.cpp.
        * wtf/UUID.h: Renamed from Source/WebCore/platform/UUID.h.

2017-04-26  Keith Miller  <keith_miller@apple.com>

        LocklessBag needs a destructor
        https://bugs.webkit.org/show_bug.cgi?id=171334

        Reviewed by Mark Lam.

        Currently, if the bag is destructed any remaining nodes in the bag will
        be leaked.

        * wtf/LocklessBag.h:
        (WTF::LocklessBag::consumeAll):
        (WTF::LocklessBag::~LocklessBag):
        * wtf/threads/Signals.cpp:
        (WTF::jscSignalHandler):
        (WTF::installSignalHandler):

2017-04-26  Don Olmstead  <don.olmstead@am.sony.com>

        [ARM] Enable GCC visibility
        https://bugs.webkit.org/show_bug.cgi?id=171296

        Reviewed by Michael Catanzaro.

        * wtf/Platform.h:

2017-04-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        sendMessageScoped's signal handler calls LocklessBag::consumeAll, which causes heap deallocation in signal handler and leads deadlock
        https://bugs.webkit.org/show_bug.cgi?id=171319

        Reviewed by Keith Miller.

        In sendMessageScoped, we call LocklessBag<SignalHandler>::consumeAll `thread->threadMessages().consumeAll()`.
        In LocklessBag::consumeAll, we call `delete` on Nodes.
        The problem is that this is called under the context of signal handler. Thus, when calling this, the original
        thread may hold the lock in bmalloc. In that case, this `delete` call attempts to lock the heap lock recursively,
        and causes deadlock.

        Instead, this patch transfers the LocklessBag's Node to the sender thread. And the sender thread deletes it instead.

        * wtf/LocklessBag.h:
        (WTF::LocklessBag::consumeAllWithNode):
        * wtf/ThreadMessage.cpp:
        (WTF::ThreadMessageData::ThreadMessageData):
        (WTF::sendMessageScoped):

2017-04-25  Don Olmstead  <don.olmstead@am.sony.com>

        [Win] Use Clang's __has_declspec_attribute for export macros
        https://bugs.webkit.org/show_bug.cgi?id=171240

        Reviewed by Alex Christensen.

        * wtf/Compiler.h:
        * wtf/ExportMacros.h:
        * wtf/Platform.h:

2017-04-25  Keith Miller  <keith_miller@apple.com>

        Our signal handler shouldn't print when sigaction succeeds
        https://bugs.webkit.org/show_bug.cgi?id=171286

        Reviewed by Michael Saboff.

        It turns out !result is not the same as !!result.

        * wtf/threads/Signals.cpp:
        (WTF::jscSignalHandler):

2017-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Add performance test for FontCache::systemFallbackForCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=170842

        Reviewed by Tim Horton.

        * wtf/unicode/CharacterNames.h:

2017-04-24  Andy VanWagoner  <thetalecrafter@gmail.com>

        Clean up ICU headers
        https://bugs.webkit.org/show_bug.cgi?id=170997

        Reviewed by JF Bastien.

        Update all icu headers to 55.1

        * icu/LICENSE: Update copyright
        * icu/README: Explain ICU headers for OS X better
        * icu/unicode/localpointer.h:
        (LocalPointer::LocalPointer):
        (LocalPointer::adoptInsteadAndCheckErrorCode):
        * icu/unicode/platform.h:
        * icu/unicode/putil.h:
        * icu/unicode/std_string.h:
        * icu/unicode/ubrk.h:
        * icu/unicode/uchar.h:
        * icu/unicode/ucnv.h:
        * icu/unicode/ucol.h:
        * icu/unicode/uconfig.h:
        * icu/unicode/ucurr.h:
        * icu/unicode/uloc.h:
        * icu/unicode/umachine.h:
        * icu/unicode/unistr.h:
        (UnicodeString::getArrayStart):
        (UnicodeString::UnicodeString):
        (UnicodeString::hasShortLength):
        (UnicodeString::getShortLength):
        (UnicodeString::length):
        (UnicodeString::getCapacity):
        (UnicodeString::isBogus):
        (UnicodeString::isWritable):
        (UnicodeString::isBufferWritable):
        (UnicodeString::getBuffer):
        (UnicodeString::isEmpty):
        (UnicodeString::setZeroLength):
        (UnicodeString::setShortLength):
        (UnicodeString::setLength):
        (UnicodeString::setToEmpty):
        (UnicodeString::remove):
        * icu/unicode/urename.h:
        * icu/unicode/uscript.h:
        * icu/unicode/uset.h:
        * icu/unicode/ustring.h:
        * icu/unicode/utf8.h:
        * icu/unicode/utypes.h:
        * icu/unicode/uvernum.h:

2017-04-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, fix Windows build after r215715
        https://bugs.webkit.org/show_bug.cgi?id=171199

        * wtf/StackTrace.h:

2017-04-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Move JSC tools/StackTrace to WTF and unify stack trace dump code
        https://bugs.webkit.org/show_bug.cgi?id=171199

        Reviewed by Mark Lam.

        JSC tools/StackTrace's dump code is almost identical to WTF Assertions'
        stack trace dump code. This patch moves tools/StackTrace to WTF and use
        it in Assertions. It unifies the two duplicate implementations into one.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Assertions.cpp:
        * wtf/CMakeLists.txt:
        * wtf/Platform.h:
        * wtf/StackTrace.cpp: Renamed from Source/JavaScriptCore/tools/StackTrace.cpp.
        (WTF::StackTrace::captureStackTrace):
        (WTF::StackTrace::dump):
        * wtf/StackTrace.h: Copied from Source/JavaScriptCore/tools/StackTrace.h.
        (WTF::StackTrace::StackTrace):
        (WTF::StackTrace::stack):
        (WTF::StackTrace::DemangleEntry::mangledName):
        (WTF::StackTrace::DemangleEntry::demangledName):
        (WTF::StackTrace::DemangleEntry::DemangleEntry):
        * wtf/SystemFree.h: Renamed from Source/JavaScriptCore/tools/StackTrace.h.
        (WTF::SystemFree::operator()):

2017-04-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        [AppleWin] The procedure entry point ?waitForThreadCompletion@WTF@@YAHI@Z could not be located in the dynamic link library WebKitQuartzCoreAdditions.dll
        https://bugs.webkit.org/show_bug.cgi?id=171029

        Reviewed by Brent Fulgham.

        While WTF Threading APIs are updated, WebKitQuartzCoreAdditions.dll in Windows uses some of the old APIs,
        waitForThreadCompletion and createThread. This patch implements both on top of the new APIs.
        These APIs are only exposed in Windows for this compatibility problem and new code should not use it.

        * wtf/ThreadHolder.cpp:
        (WTF::ThreadHolder::initialize):
        * wtf/ThreadHolder.h:
        * wtf/ThreadHolderWin.cpp:
        (WTF::ThreadHolder::get):
        (WTF::ThreadHolder::platformInitialize):
        (WTF::ThreadHolder::destruct):
        * wtf/Threading.h:
        * wtf/ThreadingWin.cpp:
        (WTF::createThread):
        (WTF::waitForThreadCompletion):

2017-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Switch to use ENABLE_REMOTE_INSPECTOR instead of ENABLE_INSPECTOR_SERVER for the remote inspector
        https://bugs.webkit.org/show_bug.cgi?id=166680

        Reviewed by Michael Catanzaro.

        Add GRefPtr hash traits to allow using GRefPtr as a key of HashMaps.

        * wtf/glib/GRefPtr.h:
        (WTF::HashTraits<GRefPtr<P>>::emptyValue):
        (WTF::HashTraits<GRefPtr<P>>::peek):
        (WTF::HashTraits<GRefPtr<P>>::customDeleteBucket):

2017-04-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Get stack pointer without pthread attr
        https://bugs.webkit.org/show_bug.cgi?id=171162

        Reviewed by Mark Lam.

        If HAVE(MACHINE_CONTEXT) is not enabled, we get stack base and boundary by using
        pthread_attr functions. However, it is wrong since this function can be called
        after the thread is suspended. In that case, we should not call any functions
        that is not async signal safe. For example, pthread_getattr_np calls malloc.

        Instead we use getApproximateStackPointer(), which returns approximate stack pointer.

        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::getApproximateStackPointer):
        (WTF::isOnAlternativeSignalStack):
        When gathering conservative roots, we should keep stack pointer pointing stack.
        And if concurrent GC is enabled, we always need to keep the above invariant.
        So, we do not support alternative signal stack.

        (WTF::Thread::signalHandlerSuspendResume):
        (WTF::Thread::getRegisters):

2017-04-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r215638): [Linux] Several worker tests are crashing in Thread::signalHandlerSuspendResume after r215638
        https://bugs.webkit.org/show_bug.cgi?id=171159

        Reviewed by Michael Catanzaro.

        Now, SIGUSR2 is used by ThreadMessage. Instead SIGUSR1 becomes empty.
        We should use some signal, that is not managed by WTF Signal mechanism
        because the behaivor of this suspend and resume is a bit tricky.
        For example, we set a bit tricky signal mask to sigaction to temporary
        block SIGUSR2 in the handler to avoid nested SIGUSR2. And we cannot
        use ThreadMessage to implement this mechanism because this suspend
        and resume handler will stop in the middle of the handler by sigsuspend.
        It is not the expected semantics by ThreadMessage.

        So now, we use SIGUSR1 instead. And we note that SIGUSR1 is used for
        pthread ports.

        * wtf/ThreadingPthreads.cpp:
        * wtf/threads/Signals.h:

2017-04-20  Sam Weinig  <sam@webkit.org>

        Split cryptographic digest computation and parsing out of CSP code so it can be reused
        https://bugs.webkit.org/show_bug.cgi?id=171076

        Reviewed by Chris Dumez.

        * wtf/text/Base64.cpp:
        (WTF::base64Decode):
        (WTF::base64URLDecode):
        Add overloads for base64Decode and base64URLDecode that take a StringView, to avoid allocations
        of Strings.

        * wtf/text/Base64.h:
        (WTF::isBase64OrBase64URLCharacter):
        Move helper predicate used for parsing either type of Base64 encoded string from WebCore.

2017-04-21  Keith Miller  <keith_miller@apple.com>

        Unreviewed, rolling out r215634.

        underlying build issues should have been fixed

        Reverted changeset:

        "Unreviewed, rolling out r215620 and r215623."
        https://bugs.webkit.org/show_bug.cgi?id=171139
        http://trac.webkit.org/changeset/215634

2017-04-21  Keith Miller  <keith_miller@apple.com>

        Remove LL/SC from Atomics
        https://bugs.webkit.org/show_bug.cgi?id=171141

        Reviewed by Saam Barati.

        Adding load link and store conditionally was not an actual progression
        and the existing code is causing problems for users of Atomics. So let's
        get rid of it.

        * wtf/Atomics.h:
        (WTF::hasFence):
        (WTF::Atomic::exchange):
        (WTF::Atomic::transaction):
        (WTF::Atomic::transactionRelaxed):
        (WTF::Atomic::prepare): Deleted.
        (WTF::Atomic::attempt): Deleted.
        * wtf/Bitmap.h:
        (WTF::WordType>::concurrentTestAndSet):
        (WTF::WordType>::concurrentTestAndClear):
        * wtf/LockAlgorithm.h:
        (WTF::LockAlgorithm::lockFast):
        (WTF::LockAlgorithm::unlockFast):

2017-04-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r215620 and r215623.
        https://bugs.webkit.org/show_bug.cgi?id=171139

        broke arm64 build (Requested by keith_miller on #webkit).

        Reverted changesets:

        "Add signaling API"
        https://bugs.webkit.org/show_bug.cgi?id=170976
        http://trac.webkit.org/changeset/215620

        "Unreviewed, fix Cloop build."
        http://trac.webkit.org/changeset/215623

2017-04-20  Keith Miller  <keith_miller@apple.com>

        Add signaling API
        https://bugs.webkit.org/show_bug.cgi?id=170976

        Reviewed by Filip Pizlo.

        This patch adds a bunch of new functionality to WTF. First, it add
        a new data structure of a lockless bag. The LocklessBag class can
        be used as either a multi-writer multi-reader lockless bag or a
        multi-writer single consumer lockless bag.

        Next, this patch adds an abstraction around sigaction in WTF.
        Basically, you can add a handler, which can be an arbitrary
        lambda. Although it should still be safe for the signal you are
        handling.  the signal handler manager will then do all the
        appropriate handling of chaining:

        In the SIGUSR case we always forward the signal to any other
        non-default handler installed before us. We need to do this,
        otherwise, since it's not possible to tell if a SIGUSR was
        intended exlusively for our handlers. Signal handlers don't record
        how many times they were sent only that there is at least one
        unhandled signal.

        In the faulting cases we require that every handle be able to
        recognise a fault they installed, vs crashes. If none of our
        handlers claim to have handled the fault we will forward the
        fault. If a handler was installed before the first fault handler
        we simply call that handler and rely on them to take the
        appropriate action. If no handler was installed before our first
        handler we restore the default handler and allow the fault to
        happen again.

        Finally, this patch adds a signal based messaging system.  This
        system allows the user to run an arbitrary lambda from the SIGUSR2
        signal handler of any target WTF::Thread. This is already in use
        for the VMTraps API which allows us to kill rogue VMs by sending
        the VM's running WTF::Thread a SIGUSR and requesting it jetison
        all optimized code and throw an uncatchable exception from all
        function entries/loop backedges.  In the future, we will also use
        this API for Wasm to reset the instruction caches in currently
        executing Wasm threads.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Atomics.h:
        (WTF::Atomic::Atomic):
        * wtf/LocklessBag.h: Added.
        (WTF::LocklessBag::LocklessBag):
        (WTF::LocklessBag::add):
        (WTF::LocklessBag::iterate):
        (WTF::LocklessBag::consumeAll):
        * wtf/ThreadMessage.cpp: Added.
        (WTF::ThreadMessageData::ThreadMessageData):
        (WTF::initializeThreadMessages):
        (WTF::sendMessageScoped):
        * wtf/ThreadMessage.h: Added.
        (WTF::sendMessage):
        * wtf/Threading.cpp:
        (WTF::initializeThreading):
        * wtf/Threading.h:
        (WTF::Thread::threadMessages):
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::currentMayBeNull):
        (WTF::Thread::current):
        (WTF::Thread::signal):
        * wtf/threads/Signals.cpp: Added.
        (WTF::jscSignalHandler):
        (WTF::installSignalHandler):
        * wtf/threads/Signals.h: Added.
        (WTF::toSystemSignal):
        (WTF::fromSystemSignal):

2017-04-21  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] WTF target should not have wtf and subdirectries in public interface
        https://bugs.webkit.org/show_bug.cgi?id=171115

        Reviewed by Michael Catanzaro.

        In r209665 WEBCORE_FRAMEWORK macro started to export INCLUDE_DIRECTORIES of
        targets as their public interface, so that linked targets can use them
        implicitly without copying directory lists around. This matches existing
        practice for all targets except WTF, headers from which are always included
        with full path starting from "<wtf/...".

        Since r209665 it became possible to include headers from wtf or its
        subdirectories in CMake builds without using "<wtf/..." path. It should
        not be allowed.

        * wtf/CMakeLists.txt: WTF/wtf and its sudirectories should not be in
        public include paths of WTF target.

2017-04-20  Sam Weinig  <sam@webkit.org>

        Move notFound into its own file
        https://bugs.webkit.org/show_bug.cgi?id=170972

        Reviewed by Zalan Bujtas.

        It is odd to require including <wtf/Vector.h> just to use WTF::notFound.
        This is not causing any current problems, but does in few changes I have
        queued up.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/NotFound.h: Added.
        * wtf/Vector.h:
        * wtf/text/StringCommon.h:

2017-04-20  Filip Pizlo  <fpizlo@apple.com>

        Optimize SharedArrayBuffer in the DFG+FTL
        https://bugs.webkit.org/show_bug.cgi?id=164108

        Reviewed by Saam Barati.
        
        Made small changes as part of benchmarking the JS versions of these locks.

        * benchmarks/LockSpeedTest.cpp:
        * benchmarks/ToyLocks.h:
        * wtf/Range.h:
        (WTF::Range::dump):

2017-04-19  Youenn Fablet  <youenn@apple.com>

        [Win] Activate streams API by default
        https://bugs.webkit.org/show_bug.cgi?id=171000

        Reviewed by Brent Fulgham.

        * wtf/FeatureDefines.h:

2017-04-19  David Kilzer  <ddkilzer@apple.com>

        Vector.h: error: 'auto' not allowed in lambda parameter
        <https://webkit.org/b/171010>
        <rdar://problem/31716076>

        Reviewed by Saam Barati.

        * wtf/Vector.h:
        (WTF::removeRepeatedElements): Replace 'auto' with a specific
        type, 'T', based on a Vector<> template type.

2017-04-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215518.

        This change appears to have broken the Windows build.

        Reverted changeset:

        "Move notFound into its own file"
        https://bugs.webkit.org/show_bug.cgi?id=170972
        http://trac.webkit.org/changeset/215518

2017-04-19  Sam Weinig  <sam@webkit.org>

        Move notFound into its own file
        https://bugs.webkit.org/show_bug.cgi?id=170972

        Reviewed by Zalan Bujtas.

        It is odd to require including <wtf/Vector.h> just to use WTF::notFound.
        This is not causing any current problems, but does in few changes I have
        queued up.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/NotFound.h: Added.
        * wtf/Vector.h:
        * wtf/text/StringCommon.h:

2017-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Define priorities also for async network IO tasks
        https://bugs.webkit.org/show_bug.cgi?id=170905

        Reviewed by Žan Doberšek.

        Add AsyncIONetwork, DiskCacheRead and DiskCacheWrite priorities.

        * wtf/glib/RunLoopSourcePriority.h:

2017-04-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][GTK] glib RunLoop does not accept negative start interval
        https://bugs.webkit.org/show_bug.cgi?id=170775

        Reviewed by Saam Barati.

        RunLoop::Timer for glib does not accept negative start interval.
        We use 0_s if the given value is negative.

        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::TimerBase::secondsUntilFire):

2017-04-17  Alex Christensen  <achristensen@webkit.org>

        Allow Variants of RetainPtrs
        https://bugs.webkit.org/show_bug.cgi?id=170923

        Reviewed by Tim Horton and Sam Weinig.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr::operator&): Deleted.
        Operator& was causing a compile error when making Variant<RetainPtr<T>, ...>
        and because it is strange and only used once, let's just remove it.
        * wtf/Variant.h:
        (WTF::get):
        (WTF::get_if):
        Use std::addressof instead of operator& which could be overloaded to return any type with any meaning.

2017-04-17  Youenn Fablet  <youenn@apple.com>

        Disable outdated WritableStream API
        https://bugs.webkit.org/show_bug.cgi?id=170749
        <rdar://problem/31446233>

        Reviewed by Alex Christensen.

        Replacing READABLE_STREAM_API, READABLE_BYTE_STREAM_API and WRITABLE_STREAM_API compilation flag by:
        - A STREAMS_API compilation flag.
        - A ReadableByteStreamAPI and WritableStreamAPI runtime flags, turned off except for RWT and DRT.

        * wtf/FeatureDefines.h:

2017-04-17  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Move isNullFunctionPointer down into WTF
        https://bugs.webkit.org/show_bug.cgi?id=170892

        Reviewed by Sam Weinig.

        Test: TestWebKitAPI/Tests/WTF/darwin/WeakLinking.cpp

        * WTF.xcodeproj/project.pbxproj: Added reference to new file.
        * wtf/darwin: Added.
        * wtf/darwin/WeakLinking.h: Added.
        (WTF::isNullFunctionPointer): Copied from ResourceLoadStatisticsClassifierCocoa.cpp in
          WebKit2 and changed into a function template that works with any function pointer.

2017-04-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215366.

        This test is failing on performance bots.

        Reverted changeset:

        "Add performance test for asking the platform for a font for
        U+2060 WORD JOINER"
        https://bugs.webkit.org/show_bug.cgi?id=170842
        http://trac.webkit.org/changeset/215366

2017-04-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSCOnly] Fix build failures in macOS
        https://bugs.webkit.org/show_bug.cgi?id=170887

        Reviewed by Alex Christensen.

        JSCOnly port does not use mac/MainThread.cpp.
        We change the ifdef gurard to use generic implementaion in JSCOnly on macOS.

        * wtf/MainThread.cpp:
        * wtf/PlatformJSCOnly.cmake:

2017-04-17  JF Bastien  <jfbastien@apple.com>

        B3: don't allow unsigned offsets in Value
        https://bugs.webkit.org/show_bug.cgi?id=170692

        Reviewed by Filip Pizlo.

        Add C++17's std::conjunction type trait, except for Microsoft VS
        2015 update 2 and later because it adds the logical operator type
        traits, event when C++ is pre-2017:
        https://blogs.msdn.microsoft.com/vcblog/2016/01/22/vs-2015-update-2s-stl-is-c17-so-far-feature-complete/

        * wtf/StdLibExtras.h:

2017-04-14  Mark Lam  <mark.lam@apple.com>

        Update architectures in xcconfig files.
        https://bugs.webkit.org/show_bug.cgi?id=170867
        <rdar://problem/31628104>

        Reviewed by Joseph Pecoraro.

        * Configurations/Base.xcconfig:

2017-04-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Add performance test for asking the platform for a font for U+2060 WORD JOINER
        https://bugs.webkit.org/show_bug.cgi?id=170842

        Reviewed by Tim Horton.

        * wtf/unicode/CharacterNames.h:

2017-04-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Date.parse should accept wider range of representation
        https://bugs.webkit.org/show_bug.cgi?id=170720

        Reviewed by Darin Adler.

        We would like to relax Date.parse to accept the representation "May 8".
        At that time, we choose `2000` as a default year. This is because of
        the following reason.

        1. According to the V8, this default value is compatible to the old KJS. While current V8 uses 2001,
           SpiderMonkey does not have such a fallback path. So this reason is not big deal.

        2. It is a leap year. When using `new Date("Feb 29")`, we assume that people want to save month and day.
           Leap year can save user inputs if they is valid. If we use the current year instead, the current year
           may not be a leap year. In that case, `new Date("Feb 29").getMonth()` becomes 2 (March).

        * wtf/DateMath.cpp:
        (WTF::parseDateFromNullTerminatedCharacters):

2017-04-13  Dan Bernstein  <mitz@apple.com>

        WTF installs an extra copy of a header outside /usr/local/include/wtf

        * WTF.xcodeproj/project.pbxproj: Demoted PriorityQueue.h from Private to Project.

2017-04-13  Oliver Hunt  <oliver@apple.com>

        allocationSize should use safe arithmetic by default
        https://bugs.webkit.org/show_bug.cgi?id=170804

        Reviewed by JF Bastien.

        Make all allocationSize() functions work in terms
        of Checked<size_t>

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::allocationSize):
        (WTF::StringImpl::tailOffset):

2017-04-13  JF Bastien  <jfbastien@apple.com>

        WebAssembly: manage memory better
        https://bugs.webkit.org/show_bug.cgi?id=170628

        Reviewed by Keith Miller, Michael Saboff.

        Re-use a VM tag which was intended for JavaScript core, was then
        used by our GC, and is now unused. If I don't do this then
        WebAssembly fast memories will make vmmap look super weird because
        it'll look like multi-gigabyte of virtual memory are allocated as
        part of our process' regular memory!

        Separately I need to update vmmap and other tools to print the
        right name. Right now this tag gets identified as "JS garbage
        collector".

        * wtf/OSAllocator.h:
        * wtf/VMTags.h:

2017-04-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Use proper ifdef guard for code using MachineContext
        https://bugs.webkit.org/show_bug.cgi?id=170800

        Reviewed by Carlos Alberto Lopez Perez.

        SamplingProfiler and FastMemory rely on MachineContext feature.

        * wtf/Platform.h:

2017-04-12  Dan Bernstein  <mitz@apple.com>

        [Mac] Future-proof .xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=170802

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2017-04-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use HAVE(MACHINE_CONTEXT) instead of USE(MACHINE_CONTEXT)
        https://bugs.webkit.org/show_bug.cgi?id=170770

        Rubber stamped by Mark Lam.

        * wtf/Platform.h:
        * wtf/PlatformRegisters.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::getRegisters):

2017-04-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Clean up heap/MachineStackMarker by introducing USE(MACHINE_CONTEXT)
        https://bugs.webkit.org/show_bug.cgi?id=170770

        Reviewed by Mark Lam.

        We add a new define USE_MACHINE_CONTEXT, which becomes true if mcontext_t exists
        and we know the way to retrieve values from mcontext_t.

        * wtf/Platform.h:
        * wtf/PlatformRegisters.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::getRegisters):

2017-04-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Introduce Thread class and use RefPtr<Thread> and align Windows Threading implementation semantics to Pthread one
        https://bugs.webkit.org/show_bug.cgi?id=170502

        Reviewed by Mark Lam.

        This patch is refactoring of WTF Threading mechanism to merge JavaScriptCore's threading extension to WTF Threading.
        Previously, JavaScriptCore requires richer threading features (such as suspending and resuming threads), and they
        are implemented for PlatformThread in JavaScriptCore. But these features should be implemented in WTF Threading side
        instead of maintaining JSC's own threading features too. This patch removes these features from JSC and move it to
        WTF Threading.

        However, current WTF Threading has one problem: Windows version of WTF Threading has different semantics from Pthreads
        one. In Windows WTF Threading, we cannot perform any operation after the target thread is detached: WTF Threading stop
        tracking the state of the thread once the thread is detached. But this is not the same to Pthreads one. In Pthreads,
        pthread_detach just means that the resource of the thread will be destroyed automatically. While some operations like
        pthread_join will be rejected, some operations like pthread_kill will be accepted.

        The problem is that detached thread can be suspended and resumed in JSC. For example, in jsc.cpp, we start the worker
        thread and detach it immediately. In worker thread, we will create VM and thus concurrent GC will suspend and resume
        the detached thread. However, in Windows WTF Threading, we have no reference to the detached thread. Thus we cannot
        perform suspend and resume operations onto the detached thread.

        To solve the problem, we change Windows Threading mechanism drastically to align it to the Pthread semantics. In the
        new Threading, we have RefPtr<Thread> class. It holds a handle to a platform thread. We can perform threading operations
        with this class. For example, Thread::suspend is offered. And we use destructor of the thread local variable to release
        the resources held by RefPtr<Thread>. In Windows, Thread::detach does nothing because the resource will be destroyed
        automatically by RefPtr<Thread>.

        To do so, we introduce ThreadHolder for Windows. This is similar to the previous ThreadIdentifierData for Pthreads.
        It holds RefPtr<Thread> in the thread local storage (technically, it is Fiber Local Storage in Windows). Thread::current()
        will return this reference.

        The problematic situation is that the order of the deallocation of the thread local storage is not defined. So we should
        not touch thread local storage in the destructor of the thread local storage. To avoid such edge cases, we have
        currentThread() / Thread::currentID() APIs. They are safe to be called even in the destructor of the other thread local
        storage. And in Windows, in the FLS destructor, we will create the thread_local variable to defer the destruction of
        the ThreadHolder. We ensure that this destructor is called after the other FLS destructors are called in Windows 10.

        This patch is performance neutral.

        * WTF.xcodeproj/project.pbxproj:
        * benchmarks/ConditionSpeedTest.cpp:
        * benchmarks/LockFairnessTest.cpp:
        * benchmarks/LockSpeedTest.cpp:
        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThread::start):
        * wtf/CMakeLists.txt:
        * wtf/MainThread.h:
        * wtf/MemoryPressureHandler.h:
        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::ThreadPrivate::tryLockFor):
        (WTF::ParallelEnvironment::ThreadPrivate::workerThread):
        * wtf/ParallelJobsGeneric.h:
        (WTF::ParallelEnvironment::ThreadPrivate::ThreadPrivate): Deleted.
        * wtf/ParkingLot.cpp:
        (WTF::ParkingLot::forEachImpl):
        * wtf/ParkingLot.h:
        (WTF::ParkingLot::forEach):
        * wtf/PlatformRegisters.h: Renamed from Source/JavaScriptCore/runtime/PlatformThread.h.
        * wtf/RefPtr.h:
        (WTF::RefPtr::RefPtr):
        * wtf/ThreadFunctionInvocation.h:
        (WTF::ThreadFunctionInvocation::ThreadFunctionInvocation):
        * wtf/ThreadHolder.cpp: Added.
        (WTF::ThreadHolder::~ThreadHolder):
        (WTF::ThreadHolder::initialize):
        * wtf/ThreadHolder.h: Renamed from Source/WTF/wtf/ThreadIdentifierDataPthreads.h.
        (WTF::ThreadHolder::thread):
        (WTF::ThreadHolder::ThreadHolder):
        * wtf/ThreadHolderPthreads.cpp: Renamed from Source/WTF/wtf/ThreadIdentifierDataPthreads.cpp.
        (WTF::ThreadHolder::initializeOnce):
        (WTF::ThreadHolder::current):
        (WTF::ThreadHolder::destruct):
        * wtf/ThreadHolderWin.cpp: Added.
        (WTF::threadMapMutex):
        (WTF::threadMap):
        (WTF::ThreadHolder::initializeOnce):
        (WTF::ThreadHolder::current):
        (WTF::ThreadHolder::destruct):
        * wtf/ThreadSpecific.h:
        * wtf/Threading.cpp:
        (WTF::Thread::normalizeThreadName):
        (WTF::threadEntryPoint):
        (WTF::Thread::create):
        (WTF::Thread::setCurrentThreadIsUserInteractive):
        (WTF::Thread::setCurrentThreadIsUserInitiated):
        (WTF::Thread::setGlobalMaxQOSClass):
        (WTF::Thread::adjustedQOSClass):
        (WTF::Thread::dump):
        (WTF::initializeThreading):
        (WTF::normalizeThreadName): Deleted.
        (WTF::createThread): Deleted.
        (WTF::setCurrentThreadIsUserInteractive): Deleted.
        (WTF::setCurrentThreadIsUserInitiated): Deleted.
        (WTF::setGlobalMaxQOSClass): Deleted.
        (WTF::adjustedQOSClass): Deleted.
        * wtf/Threading.h:
        (WTF::Thread::id):
        (WTF::Thread::operator==):
        (WTF::Thread::operator!=):
        (WTF::Thread::joinableState):
        (WTF::Thread::didBecomeDetached):
        (WTF::Thread::didJoin):
        (WTF::Thread::hasExited):
        (WTF::currentThread):
        * wtf/ThreadingPthreads.cpp:
        (WTF::Thread::Thread):
        (WTF::Thread::~Thread):
        (WTF::Thread::signalHandlerSuspendResume):
        (WTF::Thread::initializePlatformThreading):
        (WTF::initializeCurrentThreadEvenIfNonWTFCreated):
        (WTF::wtfThreadEntryPoint):
        (WTF::Thread::createInternal):
        (WTF::Thread::initializeCurrentThreadInternal):
        (WTF::Thread::changePriority):
        (WTF::Thread::waitForCompletion):
        (WTF::Thread::detach):
        (WTF::Thread::current):
        (WTF::Thread::currentID):
        (WTF::Thread::signal):
        (WTF::Thread::resume):
        (WTF::Thread::getRegisters):
        (WTF::Thread::didExit):
        (WTF::Thread::establish):
        (WTF::PthreadState::PthreadState): Deleted.
        (WTF::PthreadState::joinableState): Deleted.
        (WTF::PthreadState::pthreadHandle): Deleted.
        (WTF::PthreadState::didBecomeDetached): Deleted.
        (WTF::PthreadState::didExit): Deleted.
        (WTF::PthreadState::didJoin): Deleted.
        (WTF::PthreadState::hasExited): Deleted.
        (WTF::threadMapMutex): Deleted.
        (WTF::initializeThreading): Deleted.
        (WTF::threadMap): Deleted.
        (WTF::identifierByPthreadHandle): Deleted.
        (WTF::establishIdentifierForPthreadHandle): Deleted.
        (WTF::pthreadHandleForIdentifierWithLockAlreadyHeld): Deleted.
        (WTF::createThreadInternal): Deleted.
        (WTF::initializeCurrentThreadInternal): Deleted.
        (WTF::changeThreadPriority): Deleted.
        (WTF::waitForThreadCompletion): Deleted.
        (WTF::detachThread): Deleted.
        (WTF::threadDidExit): Deleted.
        (WTF::currentThread): Deleted.
        (WTF::signalThread): Deleted.
        * wtf/ThreadingWin.cpp:
        (WTF::Thread::Thread):
        (WTF::Thread::~Thread):
        (WTF::Thread::initializeCurrentThreadInternal):
        (WTF::Thread::initializePlatformThreading):
        (WTF::wtfThreadEntryPoint):
        (WTF::Thread::createInternal):
        (WTF::Thread::changePriority):
        (WTF::Thread::waitForCompletion):
        (WTF::Thread::detach):
        (WTF::Thread::resume):
        (WTF::Thread::getRegisters):
        (WTF::Thread::current):
        (WTF::Thread::currentID):
        (WTF::Thread::didExit):
        (WTF::Thread::establish):
        (WTF::initializeCurrentThreadInternal): Deleted.
        (WTF::threadMapMutex): Deleted.
        (WTF::initializeThreading): Deleted.
        (WTF::threadMap): Deleted.
        (WTF::storeThreadHandleByIdentifier): Deleted.
        (WTF::threadHandleForIdentifier): Deleted.
        (WTF::clearThreadHandleForIdentifier): Deleted.
        (WTF::createThreadInternal): Deleted.
        (WTF::changeThreadPriority): Deleted.
        (WTF::waitForThreadCompletion): Deleted.
        (WTF::detachThread): Deleted.
        (WTF::currentThread): Deleted.
        * wtf/WorkQueue.cpp:
        (WTF::WorkQueue::concurrentApply):
        * wtf/WorkQueue.h:
        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::dispatchQOSClass):
        * wtf/generic/WorkQueueGeneric.cpp:
        (WorkQueue::platformInitialize):
        (WorkQueue::platformInvalidate):
        * wtf/linux/MemoryPressureHandlerLinux.cpp:
        (WTF::MemoryPressureHandler::EventFDPoller::EventFDPoller):
        (WTF::MemoryPressureHandler::EventFDPoller::~EventFDPoller):
        * wtf/win/MainThreadWin.cpp:
        (WTF::initializeMainThreadPlatform):

2017-04-11  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Use the DisplayRefreshMonitor facilities
        https://bugs.webkit.org/show_bug.cgi?id=170599

        Reviewed by Carlos Garcia Campos.

        * wtf/Platform.h: Enable USE_REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR for the GTK+ port.
        * wtf/glib/RunLoopSourcePriority.h: Add the DisplayRefreshMonitorTimer entry that
        matches the value of LayerFlushTimer.

2017-04-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WebCore][JSC] ResourceUsageData.{timeOfNextEdenCollection,timeOfNextFullCollection} should be MonotonicTime
        https://bugs.webkit.org/show_bug.cgi?id=170725

        Reviewed by Sam Weinig.

        Make MonotonicTime more constexpr friendly mainly to annotate MonotonicTime::nan() as constexpr.

        * wtf/MonotonicTime.h:
        (WTF::MonotonicTime::MonotonicTime):
        (WTF::MonotonicTime::fromRawSeconds):
        (WTF::MonotonicTime::infinity):
        (WTF::MonotonicTime::nan):
        (WTF::MonotonicTime::secondsSinceEpoch):
        (WTF::MonotonicTime::operator bool):
        (WTF::MonotonicTime::operator+):
        (WTF::MonotonicTime::operator-):
        (WTF::MonotonicTime::operator==):
        (WTF::MonotonicTime::operator!=):
        (WTF::MonotonicTime::operator<):
        (WTF::MonotonicTime::operator>):
        (WTF::MonotonicTime::operator<=):
        (WTF::MonotonicTime::operator>=):

2017-04-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix for Windows port after r215228
        https://bugs.webkit.org/show_bug.cgi?id=170723

        * wtf/win/RunLoopWin.cpp:
        (WTF::RunLoop::TimerBase::timerFired):

2017-04-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][GTK] Use RunLoop::Timer in GTK port
        https://bugs.webkit.org/show_bug.cgi?id=170723

        Reviewed by Carlos Garcia Campos.

        Add secondsUntilFire method. And add setName and setPriority
        for GTK RunLoop::Timer.

        * wtf/RunLoop.h:
        * wtf/cf/RunLoopCF.cpp:
        (WTF::RunLoop::TimerBase::secondsUntilFire):
        * wtf/generic/RunLoopGeneric.cpp:
        (WTF::RunLoop::TimerBase::secondsUntilFire):
        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::TimerBase::setName):
        (WTF::RunLoop::TimerBase::secondsUntilFire):
        * wtf/win/RunLoopWin.cpp:
        (WTF::RunLoop::TimerBase::timerFired):
        (WTF::RunLoop::TimerBase::start):
        (WTF::RunLoop::TimerBase::isActive):
        (WTF::RunLoop::TimerBase::secondsUntilFire):

2017-04-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Enable JSRunLoopTimer for JSCOnly and Windows
        https://bugs.webkit.org/show_bug.cgi?id=170655

        Reviewed by Carlos Garcia Campos.

        This patch makes RunLoop::Timer in Generic and Windows thread-safe to use it
        in JSC's JSRunLoopTimer. Eventually, we would like to replace JSRunLoopTimer's
        platform-dependent implementation to WTF::RunLoop::Timer.

        * wtf/RunLoop.h:
        * wtf/cf/RunLoopCF.cpp:
        (WTF::RunLoop::TimerBase::start):
        * wtf/generic/RunLoopGeneric.cpp:
        (WTF::RunLoop::TimerBase::ScheduledTask::EarliestSchedule::operator()):
        (WTF::RunLoop::populateTasks):
        (WTF::RunLoop::runImpl):
        (WTF::RunLoop::schedule):
        (WTF::RunLoop::scheduleAndWakeUp):
        (WTF::RunLoop::TimerBase::~TimerBase):
        (WTF::RunLoop::TimerBase::start):
        (WTF::RunLoop::TimerBase::stop):
        (WTF::RunLoop::TimerBase::isActive):
        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::TimerBase::TimerBase):
        * wtf/win/RunLoopWin.cpp:
        (WTF::RunLoop::TimerBase::timerFired):
        (WTF::RunLoop::TimerBase::start):
        (WTF::RunLoop::TimerBase::stop):
        (WTF::RunLoop::TimerBase::isActive):

2017-04-11  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r213645): It made JSC tests super slow and timeout on AArch64 Linux
        https://bugs.webkit.org/show_bug.cgi?id=169510

        Reviewed by Saam Barati.

        Add the `volatile` qualifiers for ASM statements that set up ldxr and stxr
        instruction calls when HAVE(LL_SC) is enabled for aarch64 platforms.

        This avoids indefinite execution when running GCC-compiled JSC on Linux.
        Specific bug or expected behavior that differs from Clang wasn't determined.

        HAVE(LL_SC) is re-enabled on non-Darwin aarch64 platforms.

        * wtf/Atomics.h:
        * wtf/Platform.h:

2017-04-10  Thorsten Glaser  <tg@mirbsd.de>

        [GTK] Fix x32 build
        https://bugs.webkit.org/show_bug.cgi?id=170673

        Reviewed by Carlos Alberto Lopez Perez.

        * wtf/Platform.h:

2017-04-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Annotate Seconds' member functions and operators with constexpr
        https://bugs.webkit.org/show_bug.cgi?id=170662

        Reviewed by Daniel Bates.

        Annotate Seconds' member functions and operators with constexpr.
        It allows us to use Seconds calculation in compile time and use these
        calculation for static const global variables.

        operator% is an exception: it uses fmod and it is not offered as constexpr.

        * wtf/MathExtras.h:
        (defaultMinimumForClamp):
        (defaultMaximumForClamp):
        (clampToAccepting64):
        Super unfortunate ugly code. This is because GCC 4.9 does not support C++14 relaxed constexpr.

        * wtf/Seconds.h:
        (WTF::Seconds::Seconds):
        (WTF::Seconds::value):
        (WTF::Seconds::minutes):
        (WTF::Seconds::seconds):
        (WTF::Seconds::milliseconds):
        (WTF::Seconds::microseconds):
        (WTF::Seconds::nanoseconds):
        (WTF::Seconds::operator bool):
        (WTF::Seconds::operator+):
        (WTF::Seconds::operator-):
        (WTF::Seconds::operator*):
        (WTF::Seconds::operator/):
        (WTF::Seconds::operator==):
        (WTF::Seconds::operator!=):
        (WTF::Seconds::operator<):
        (WTF::Seconds::operator>):
        (WTF::Seconds::operator<=):
        (WTF::Seconds::operator>=):

2017-04-09  Chris Dumez  <cdumez@apple.com>

        Start dropping Timer API dealing with double
        https://bugs.webkit.org/show_bug.cgi?id=170649

        Reviewed by Yusuke Suzuki.

        Start dropping Timer API dealing with double as people should use Seconds now.

        * wtf/RunLoopTimer.h:
        * wtf/glib/MainThreadGLib.cpp:
        (WTF::MainThreadDispatcher::schedule):

2017-04-07  Keith Miller  <keith_miller@apple.com>

        Unreviewed, remove constexpr function since GTK didn't like it.

        * wtf/PriorityQueue.h:
        (WTF::PriorityQueue::parentOf):

2017-04-07  Chris Dumez  <cdumez@apple.com>

        Start using MonotonicTime / Seconds in Timer class
        https://bugs.webkit.org/show_bug.cgi?id=170625

        Reviewed by Simon Fraser.

        Add modulo operator to MonotonicTime.

        * wtf/MonotonicTime.h:
        (WTF::MonotonicTime::operator%):

2017-04-07  Keith Miller  <keith_miller@apple.com>

        Add a PriorityQueue class
        https://bugs.webkit.org/show_bug.cgi?id=170579

        Reviewed by Saam Barati.

        This patch adds a new PriorityQueue class that is backed by
        WTF::Vector.  It also has a number of other niceties such as being
        able to iterate the queue and increase or decrease keys.

        One note is that increaseKey and decreaseKey are O(n) rather than
        O(log(n)).  Traditionally, the lookup of the key is done with a
        hash map but that's not feasible here.  This is because unless the
        queue's element type is a pointer there is no good way maintain a
        persistent reference to every entry in the queue while we sift.
        The only way to update the location of an entry is to do a hash
        table lookup with the entry's hash but this is probably more
        expensive than just doing a linear search.

        Also, add comparison operator functions, which can be passed to PriorityQueue.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/MathExtras.h:
        (isLessThan):
        (isLessThanEqual):
        (isGreaterThan):
        (isGreaterThanEqual):
        * wtf/PriorityQueue.h: Added.
        (WTF::PriorityQueue::size):
        (WTF::PriorityQueue::isEmpty):
        (WTF::PriorityQueue::enqueue):
        (WTF::PriorityQueue::peek):
        (WTF::PriorityQueue::dequeue):
        (WTF::PriorityQueue::decreaseKey):
        (WTF::PriorityQueue::increaseKey):
        (WTF::PriorityQueue::begin):
        (WTF::PriorityQueue::end):
        (WTF::PriorityQueue::isValidHeap):
        (WTF::PriorityQueue::parentOf):
        (WTF::PriorityQueue::leftChildOf):
        (WTF::PriorityQueue::rightChildOf):
        (WTF::PriorityQueue::siftUp):
        (WTF::PriorityQueue::siftDown):

2017-04-07  Alex Christensen  <achristensen@webkit.org>

        Use audit_token_t instead of pid_t for checking sandbox of other processes
        https://bugs.webkit.org/show_bug.cgi?id=170616
        <rdar://problem/31158189>

        Reviewed by Daniel Bates.

        * wtf/spi/darwin/SandboxSPI.h:
        Declare more SPI.

2017-04-07  Ting-Wei Lan  <lantw44@gmail.com>

        Include cstdio before using sscanf and stderr
        https://bugs.webkit.org/show_bug.cgi?id=170098

        Reviewed by Michael Catanzaro.

        * wtf/NumberOfCores.cpp:

2017-04-07  Saam Barati  <sbarati@apple.com>

        WebAssembly: Make to a compilation API that allows for multi-VM concurrent compilations of Wasm Modules
        https://bugs.webkit.org/show_bug.cgi?id=170488

        Reviewed by JF Bastien.

        * wtf/SharedTask.h: Make SharedTaskFunctor forward its arguments.

2017-04-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Update the priorities used in glib main loop sources
        https://bugs.webkit.org/show_bug.cgi?id=170457

        Reviewed by Žan Doberšek.

        Add an enum to define prirorities used in different GLib main sources. It allows to give them a better name
        than high, low, medium, etc., but also to document them and other GLib based ports can define their own
        values without changing all the places where they are used. The default values are based on the priorities
        pre-defined by GLib.

        * wtf/glib/MainThreadGLib.cpp:
        (WTF::MainThreadDispatcher::MainThreadDispatcher):
        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::RunLoop):
        (WTF::RunLoop::dispatchAfter):
        (WTF::RunLoop::TimerBase::TimerBase):
        * wtf/glib/RunLoopSourcePriority.h: Added.
        * wtf/linux/MemoryPressureHandlerLinux.cpp:
        (WTF::MemoryPressureHandler::EventFDPoller::EventFDPoller):

2017-04-06  Filip Pizlo  <fpizlo@apple.com>

        Linear scan should run liveness only once
        https://bugs.webkit.org/show_bug.cgi?id=170569

        Reviewed by Keith Miller.
        
        Have Liveness<> call Adapter::prepareToCompute(), since this makes it a lot easier to implement
        constraint generation, since the constraint generator now gets to run after the Adapter is fully
        constructed.
        
        * wtf/IndexMap.h:
        (WTF::IndexMap::append): Also make this a bit more versatile.
        * wtf/Liveness.h:
        (WTF::Liveness::LocalCalc::Iterable::contains):
        (WTF::Liveness::Iterable::contains):
        (WTF::Liveness::compute):

2017-04-06  Andreas Kling  <akling@apple.com>

        Kill any WebContent process using over 16 GB of memory.
        https://bugs.webkit.org/show_bug.cgi?id=170515
        <rdar://problem/29930931>

        Reviewed by Antti Koivisto.

        Restructure the code since it was getting out of sync with the intended behavior.
        Now there's a thresholdForMemoryKill() which returns the current memory limit based
        on the process status.

        The memory usage policy is separated from the killing, and now only drives the
        asynchronous invocations of pressure relief that occur when we pass over one of
        the policy edges (now 1GB for Conservative, 2GB for Strict.)

        Removed the "Panic" policy and moved the memory kill logic to shrinkOrDie().

        Behavior as of this patch:

            - Everyone gets killed over 16 GB.
            - Inactive processes get killed over 4 GB.
            - Strict memory usage policy kicks in at 2 GB.
            - Conservative memory usage policy at 1 GB.

        Like before, we make a best-effort attempt to free up memory before killing the process.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::toString):
        (WTF::MemoryPressureHandler::thresholdForMemoryKill):
        (WTF::thresholdForPolicy):
        (WTF::policyForFootprint):
        (WTF::MemoryPressureHandler::shrinkOrDie):
        (WTF::MemoryPressureHandler::setMemoryUsagePolicyBasedOnFootprint):
        (WTF::MemoryPressureHandler::measurementTimerFired):
        * wtf/MemoryPressureHandler.h:

2017-04-05  Andreas Kling  <akling@apple.com>

        Make inactive web processes behave as though under memory pressure.
        https://bugs.webkit.org/show_bug.cgi?id=170042
        <rdar://problem/31038445>

        Reviewed by Antti Koivisto.

        Once a web process becomes inactive, let's try to reduce its impact
        on memory usage by treating it as if it's under memory pressure until
        it becomes active.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::setProcessState):
        (WTF::MemoryPressureHandler::isUnderMemoryPressure):
        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::isUnderMemoryPressure): Deleted.

2017-04-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Suppress warnings in GCC
        https://bugs.webkit.org/show_bug.cgi?id=170501

        Reviewed by Keith Miller.

        Add a new macro UNUSED_FUNCTION to annotate unused static functions.
        #pragma GCC diagnostic ignored "-Wunused-function" does not work.

        * wtf/Compiler.h:

2017-04-04  Filip Pizlo  <fpizlo@apple.com>

        Air::eliminateDeadCode() should not use a HashSet
        https://bugs.webkit.org/show_bug.cgi?id=170487

        Reviewed by Saam Barati.
        
        BitVector::iterator knows when it's at the end. Expose this functionality.

        * wtf/BitVector.h:
        (WTF::BitVector::iterator::isAtEnd):

2017-04-04  Keith Miller  <keith_miller@apple.com>

        WebAssembly: ModuleInformation should be a ref counted thing that can be shared across threads.
        https://bugs.webkit.org/show_bug.cgi?id=170478

        Reviewed by Saam Barati.

        This adds a new String::fromUTF8 that converts a vector of characters to
        a string.

        Also, it cleans up some style.

        * wtf/text/WTFString.h:
        (WTF::String::fromUTF8):
        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::convertLatin1ToUTF8):

2017-04-04  Filip Pizlo  <fpizlo@apple.com>

        B3::fixSSA() needs a tune-up
        https://bugs.webkit.org/show_bug.cgi?id=170485

        Reviewed by Saam Barati.
        
        This makes IndexSparseSet capable of being used as a map if you instantiate it with
        KeyValuePair<unsigned, ValueType>.

        * wtf/HashTraits.h:
        * wtf/IndexSparseSet.h:
        (WTF::DefaultIndexSparseSetTraits::create):
        (WTF::DefaultIndexSparseSetTraits::key):
        (WTF::OverflowHandler>::IndexSparseSet):
        (WTF::OverflowHandler>::add):
        (WTF::OverflowHandler>::set):
        (WTF::OverflowHandler>::remove):
        (WTF::OverflowHandler>::clear):
        (WTF::OverflowHandler>::size):
        (WTF::OverflowHandler>::isEmpty):
        (WTF::OverflowHandler>::contains):
        (WTF::OverflowHandler>::sort):
        (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet): Deleted.
        (WTF::IndexSparseSet<OverflowHandler>::add): Deleted.
        (WTF::IndexSparseSet<OverflowHandler>::remove): Deleted.
        (WTF::IndexSparseSet<OverflowHandler>::clear): Deleted.
        (WTF::IndexSparseSet<OverflowHandler>::size): Deleted.
        (WTF::IndexSparseSet<OverflowHandler>::isEmpty): Deleted.
        (WTF::IndexSparseSet<OverflowHandler>::contains): Deleted.
        (WTF::IndexSparseSet<OverflowHandler>::sort): Deleted.
        * wtf/Liveness.h:
        (WTF::Liveness::LocalCalc::Iterable::iterator::iterator):
        (WTF::Liveness::workset):

2017-04-04  Filip Pizlo  <fpizlo@apple.com>

        Don't need to Air::reportUsedRegisters for wasm at -O1
        https://bugs.webkit.org/show_bug.cgi?id=170459

        Reviewed by Saam Barati.
        
        Just moved the liveness computation into a method, which enabled me to do the profiling
        that I used to write this patch.

        * wtf/Liveness.h:
        (WTF::Liveness::Liveness):
        (WTF::Liveness::compute):

2017-04-03  Filip Pizlo  <fpizlo@apple.com>

        Air liveness should build constraints and solve them rather than repeatedly parsing IR
        https://bugs.webkit.org/show_bug.cgi?id=170421

        Reviewed by Saam Barati.

        * wtf/Vector.h:
        (WTF::minCapacity>::appendIfNotContains): Because sometimes Vector<> is the best kind of set.

2017-04-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Introduce WTF::RandomDevice which keeps /dev/urandom opened
        https://bugs.webkit.org/show_bug.cgi?id=170095

        Reviewed by Michael Catanzaro.

        In this patch, we introduce RandomDevice, which keeps /dev/urandom opened
        to avoid repeatedly open and close urandom file descriptor in Linux.

        The purpose is similar to std::random_device, but WTF::RandomDevice explicitly
        avoids using ARC4, which is recently attempted to be removed from the WebKit
        tree[1].

        [1]: https://trac.webkit.org/r214329

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/OSRandomSource.cpp:
        (WTF::cryptographicallyRandomValuesFromOS):
        (WTF::crashUnableToOpenURandom): Deleted.
        (WTF::crashUnableToReadFromURandom): Deleted.
        * wtf/RandomDevice.cpp: Copied from Source/WTF/wtf/OSRandomSource.cpp.
        (WTF::crashUnableToOpenURandom):
        (WTF::crashUnableToReadFromURandom):
        (WTF::RandomDevice::RandomDevice):
        (WTF::RandomDevice::~RandomDevice):
        (WTF::RandomDevice::cryptographicallyRandomValues):
        * wtf/RandomDevice.h: Added.

2017-04-03  Filip Pizlo  <fpizlo@apple.com>

        WTF::Liveness should have an API that focuses on actions at instruction boundaries
        https://bugs.webkit.org/show_bug.cgi?id=170407

        Reviewed by Keith Miller.
        
        Change the Liveness<> API to handle early and late things in one lump inside forEachUse
        and forEachDef functions. This reduces the amount of different functions that Liveness<>
        expects from its adaptor. This makes it easier to implement optimizations that cache the
        use/def behavior of each instruction boundary.

        * wtf/Liveness.h:
        (WTF::Liveness::Liveness):
        (WTF::Liveness::LocalCalc::execute):

2017-04-01  Csaba Osztrogonác  <ossy@webkit.org>

        Mac cmake buildfix after 214586.
        https://bugs.webkit.org/show_bug.cgi?id=170381

        Unreviewed.

        * wtf/BlockPtr.h:

2017-03-30  Filip Pizlo  <fpizlo@apple.com>

        Air should support linear scan for optLevel<2
        https://bugs.webkit.org/show_bug.cgi?id=170161

        Reviewed by Saam Barati.
        
        This change introduces a new low-latency register allocator. It can allocate registers very
        quickly by doing a relatively poor job. Implementing this algorithm required beefing up some of
        our core algorithms.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Deque.h: Make it possible to do some basic priority queueing with this data structure.
        (WTF::inlineCapacity>::removeAllMatching):
        (WTF::inlineCapacity>::appendAndBubble):
        (WTF::inlineCapacity>::takeLast):
        * wtf/IndexKeyType.h: Added. This makes it possible to use IndexMap and IndexSet with value or pointer types. Previously they just worked with pointer types.
        (WTF::IndexKeyType::index):
        * wtf/IndexMap.h: Adopt IndexKeyType.
        (WTF::IndexMap::operator[]):
        (WTF::IndexMap::append):
        * wtf/IndexSet.h: Adopt IndexKeyType.
        (WTF::IndexSet::add):
        (WTF::IndexSet::addAll):
        (WTF::IndexSet::remove):
        (WTF::IndexSet::contains):
        (WTF::IndexSet::Iterable::iterator::operator*):
        * wtf/Range.h: Added. This used to be B3::HeapRange. This generalizes that data structure to any kind of range stuff.
        (WTF::Range::Range):
        (WTF::Range::top):
        (WTF::Range::operator==):
        (WTF::Range::operator!=):
        (WTF::Range::operator bool):
        (WTF::Range::operator|):
        (WTF::Range::operator|=):
        (WTF::Range::begin):
        (WTF::Range::end):
        (WTF::Range::overlaps):
        (WTF::Range::dump):
        * wtf/RangeSet.h:
        (WTF::RangeSet::add):

2017-03-25  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Move platformThreadSignal to WTF
        https://bugs.webkit.org/show_bug.cgi?id=170097

        Reviewed by Mark Lam.

        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::signalThread):

2017-03-26  Filip Pizlo  <fpizlo@apple.com>

        B3::fixSSA should do liveness pruning
        https://bugs.webkit.org/show_bug.cgi?id=170111

        Reviewed by Saam Barati.
        
        Move Air::Liveness<> to WTF::Liveness<>. This is pretty easy since Air::Liveness<> was
        already fairly generic. It leverages the CFG concept so that it can understand many
        different kinds of basic blocks. It doesn't try to understand the contents of basic
        blocks; it just asks the adaptor for the block size and asks for the early/late
        uses/defs of each thing in the block.
        
        This makes it easy to create a B3::VariableLiveness, which fixSSA then uses for
        pruning. One of the new features is the Liveness::LiveAtHead nested class, which you
        instantiate if you want to perform liveAtHead queries, which SSA construction wants to
        do.
        
        This also fixes https://bugs.webkit.org/show_bug.cgi?id=170102#c12

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Liveness.h: Added.
        (WTF::Liveness::Liveness):
        (WTF::Liveness::LocalCalc::LocalCalc):
        (WTF::Liveness::LocalCalc::Iterable::Iterable):
        (WTF::Liveness::LocalCalc::Iterable::iterator::iterator):
        (WTF::Liveness::LocalCalc::Iterable::iterator::operator++):
        (WTF::Liveness::LocalCalc::Iterable::iterator::operator*):
        (WTF::Liveness::LocalCalc::Iterable::iterator::operator==):
        (WTF::Liveness::LocalCalc::Iterable::iterator::operator!=):
        (WTF::Liveness::LocalCalc::Iterable::begin):
        (WTF::Liveness::LocalCalc::Iterable::end):
        (WTF::Liveness::LocalCalc::Iterable::contains):
        (WTF::Liveness::LocalCalc::live):
        (WTF::Liveness::LocalCalc::isLive):
        (WTF::Liveness::LocalCalc::execute):
        (WTF::Liveness::rawLiveAtHead):
        (WTF::Liveness::Iterable::Iterable):
        (WTF::Liveness::Iterable::iterator::iterator):
        (WTF::Liveness::Iterable::iterator::operator*):
        (WTF::Liveness::Iterable::iterator::operator++):
        (WTF::Liveness::Iterable::iterator::operator==):
        (WTF::Liveness::Iterable::iterator::operator!=):
        (WTF::Liveness::Iterable::begin):
        (WTF::Liveness::Iterable::end):
        (WTF::Liveness::Iterable::contains):
        (WTF::Liveness::liveAtHead):
        (WTF::Liveness::liveAtTail):
        (WTF::Liveness::workset):
        (WTF::Liveness::LiveAtHead::LiveAtHead):
        (WTF::Liveness::LiveAtHead::isLiveAtHead):

2017-03-25  Filip Pizlo  <fpizlo@apple.com>

        Air::Liveness shouldn't need HashSets
        https://bugs.webkit.org/show_bug.cgi?id=170102

        Reviewed by Yusuke Suzuki.

        * wtf/IndexSparseSet.h: Add some helpers for a HashSet-free liveness analysis.
        (WTF::IndexSparseSet::values):
        (WTF::IndexSparseSet<OverflowHandler>::sort):
        * wtf/StdLibExtras.h:
        (WTF::mergeDeduplicatedSorted): Rapidly merge two sorted lists that don't have duplicates to produce a new sorted list that doesn't have duplicates.
        * wtf/Vector.h:
        (WTF::minCapacity>::uncheckedAppend): Inline this!
        (WTF::removeRepeatedElements): This is a version of std::unique() that works naturally for Vectors.

2017-03-26  Filip Pizlo  <fpizlo@apple.com>

        Air should use RegisterSet for RegLiveness
        https://bugs.webkit.org/show_bug.cgi?id=170108

        Reviewed by Yusuke Suzuki.

        * wtf/Atomics.h:
        (WTF::ensurePointer): This is a useful replacement for std::once, which requires less fencing.
        * wtf/Bitmap.h: Add more utilities.
        (WTF::Bitmap::iterator::iterator): An iterator for set bits.
        (WTF::Bitmap::iterator::operator*):
        (WTF::Bitmap::iterator::operator++):
        (WTF::Bitmap::iterator::operator==):
        (WTF::Bitmap::iterator::operator!=):
        (WTF::Bitmap::begin):
        (WTF::Bitmap::end):
        (WTF::WordType>::subsumes): a.subsumes(b) if all of b's set bits are set in a.
        (WTF::WordType>::findBit): find next set or clear bit.

2017-03-24  JF Bastien  <jfbastien@apple.com>

        WebAssembly: store state in TLS instead of on VM
        https://bugs.webkit.org/show_bug.cgi?id=169611

        Reviewed by Filip Pizlo.

        * wtf/FastTLS.h: reserve one key for WebAssembly, delete a bunch
        of dead code which clang couldn't compile (it's valid GCC assembly
        which LLVM dislikes).

2017-03-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214351.

        This change caused API test
        WebKit1.DidCreateJavaScriptContextBackForwardCacheTest to
        fail.

        Reverted changeset:

        "Make inactive web processes behave as though under memory
        pressure."
        https://bugs.webkit.org/show_bug.cgi?id=170042
        http://trac.webkit.org/changeset/214351

2017-03-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r214329.

        Significantly regressed Speedometer

        Reverted changeset:

        "window.crypto.getRandomValues() uses the insecure RC4 RNG"
        https://bugs.webkit.org/show_bug.cgi?id=169623
        http://trac.webkit.org/changeset/214329

2017-03-24  Andreas Kling  <akling@apple.com>

        Make inactive web processes behave as though under memory pressure.
        <https://webkit.org/b/170042>

        Reviewed by Antti Koivisto.

        Once a web process becomes inactive, let's try to reduce its impact
        on memory usage by treating it as if it's under memory pressure until
        it becomes active.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::setProcessState):
        (WTF::MemoryPressureHandler::isUnderMemoryPressure):
        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::isUnderMemoryPressure): Deleted.

2017-03-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        window.crypto.getRandomValues() uses the insecure RC4 RNG
        https://bugs.webkit.org/show_bug.cgi?id=169623

        Reviewed by Alex Christensen.

        Remove the RC4 random generator in favor of using OS randomness for now. This is basically
        a merge of https://codereview.chromium.org/1431233002 from Blink, original author "eroman".

        * wtf/CryptographicallyRandomNumber.cpp:
        (WTF::cryptographicallyRandomNumber):
        (WTF::cryptographicallyRandomValues):
        (): Deleted.

2017-03-23  Tomas Popela  <tpopela@redhat.com>

        Fix uninitialized public members in WTF
        https://bugs.webkit.org/show_bug.cgi?id=169676

        Reviewed by Michael Catanzaro.

        Found by Coverity scan.

        * wtf/Bag.h:
        * wtf/HashTable.h:
        * wtf/HashTraits.h:
        * wtf/Insertion.h:
        * wtf/OrderMaker.h:
        * wtf/ParallelJobsGeneric.h:

2017-03-22  Andreas Kling  <akling@apple.com>

        Let MemoryPressureHandler track whether the process is active or inactive.
        <https://webkit.org/b/169990>

        Reviewed by Antti Koivisto.

        An active process is a process that meets any of these criteria:

            - Has had a visible Page in an active window in the last hour
            - Is playing audio

        This replaces the old mechanism where MemoryPressureHandler would invoke
        a callback to know whether the process was eligible for a memory kill.
        Instead we now plumb the relevant information down from WebCore and kill
        based on this activity state.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::measurementTimerFired):
        (WTF::MemoryPressureHandler::setProcessState):
        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::setMemoryKillCallback):
        (WTF::MemoryPressureHandler::processState):
        (WTF::MemoryPressureHandler::setProcessIsEligibleForMemoryKillCallback): Deleted.

2017-03-20  Simon Fraser  <simon.fraser@apple.com>

        Add a system trace point for memory warning handling
        https://bugs.webkit.org/show_bug.cgi?id=169893

        Reviewed by Zalan Bujtas.

        Make it possible to pass data to the Begin trace point.

        * wtf/SystemTracing.h:
        (WTF::TraceScope::TraceScope):

2017-03-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Time channel attack on SVG Filters
        https://bugs.webkit.org/show_bug.cgi?id=118689

        Reviewed by Simon Fraser.

        Performing arithmetic operations on subnormal floating-point numbers is
        very expensive. Normalizing the floating-point number to the minimum normal
        value should accelerate the calculations and there won't be a noticeable
        difference in the result since all the subnormal values and the minimum
        normal value are all very close to zero.

        * wtf/MathExtras.h:
        (normalizedFloat):

2017-03-11  Filip Pizlo  <fpizlo@apple.com>

        Air should be powerful enough to support Tmp-splitting
        https://bugs.webkit.org/show_bug.cgi?id=169515

        Reviewed by Saam Barati.
        
        Teach IndexMap how to handle types that don't have a default constructor. This makes it
        easy to create a IndexMap<BasicBlock, InsertionSet>, which is a super powerful
        construct.

        * wtf/IndexMap.h:
        (WTF::IndexMap::IndexMap):
        (WTF::IndexMap::resize):
        (WTF::IndexMap::clear):

2017-03-16  Simon Fraser  <simon.fraser@apple.com>

        Improve the system tracing points
        https://bugs.webkit.org/show_bug.cgi?id=169790

        Reviewed by Zalan Bujtas.

        Use a more cohesive set of system trace points that give a good overview of what
        WebKit is doing. Added points for resource loading, render tree building, sync messages
        to the web process, async image decode, WASM and fetching cookies.

        * wtf/SystemTracing.h:

2017-03-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [UNIX] Implement currentSearchLocaleID() and currentTextBreakLocaleID()
        https://bugs.webkit.org/show_bug.cgi?id=169745

        Reviewed by Yusuke Suzuki.

        Add a common implementation for Unix based ports using setlocale.

        * wtf/PlatformGTK.cmake:
        * wtf/PlatformJSCOnly.cmake:
        * wtf/text/gtk/TextBreakIteratorInternalICUGtk.cpp: Removed.
        * wtf/text/unix/TextBreakIteratorInternalICUUnix.cpp: Renamed from Source/WTF/wtf/text/jsconly/TextBreakIteratorInternalICUJSCOnly.cpp.
        (WTF::currentSearchLocaleID):
        (WTF::currentTextBreakLocaleID):

2017-03-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] MainThread implementation is not GTK+ specific
        https://bugs.webkit.org/show_bug.cgi?id=169736

        Reviewed by Yusuke Suzuki.

        It's implemented in MainThreadGLib.cpp for glib based ports, so ifdefs in MainThread should not be
        PLATFORM(GTK) but USE(GLIB).

        * wtf/MainThread.cpp:
        * wtf/MainThread.h:

2017-03-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake][JSCOnly] Fix build with GLib event loop
        https://bugs.webkit.org/show_bug.cgi?id=169730

        Reviewed by Michael Catanzaro.

        * wtf/MainThread.cpp:
        * wtf/PlatformJSCOnly.cmake: WorkQueueGLib was removed in r199713.

2017-03-15  Dean Jackson  <dino@apple.com>

        Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=169669

        Reviewed by Antoine Quint.

        * WTF.xcodeproj/project.pbxproj:

2017-03-14  Filip Pizlo  <fpizlo@apple.com>

        Fix some typos in this benchmark.

        Rubber stamped by Saam Barati.

        * benchmarks/HashSetDFGReplay.cpp:
        (main):

2017-03-14  Filip Pizlo  <fpizlo@apple.com>

        Record the HashSet/HashMap operations in DFG/FTL/B3 and replay them in a benchmark
        https://bugs.webkit.org/show_bug.cgi?id=169590

        Reviewed by Saam Barati.
        
        This adds LoggingHashSet and LoggingHashMap, which are drop-in replacements for HashSet and
        HashMap that log everything that they do, so that you can replay it later.
        
        This also adds a benchmark (HashSetDFGReplay) based on doing a recording of some of the HashSets
        in the DFG compiler.

        * WTF.xcodeproj/project.pbxproj:
        * benchmarks/HashSetDFGReplay.cpp: Added.
        (benchmark):
        (main):
        * wtf/CMakeLists.txt:
        * wtf/GlobalVersion.cpp: Added.
        (WTF::newGlobalVersion):
        * wtf/GlobalVersion.h: Added.
        * wtf/HashMap.h:
        (WTF::X>::swap):
        * wtf/HashSet.h:
        (WTF::V>::addVoid):
        * wtf/LoggingHashID.h: Added.
        (WTF::LoggingHashID::LoggingHashID):
        (WTF::LoggingHashID::dump):
        * wtf/LoggingHashMap.h: Added.
        * wtf/LoggingHashSet.h: Added.
        * wtf/LoggingHashTraits.h: Added.
        (WTF::LoggingHashKeyTraits::print):
        (WTF::LoggingHashValueTraits::print):

2017-03-13  Jer Noble  <jer.noble@apple.com>

        Make classes used by Media Stream encode/decode friendly
        https://bugs.webkit.org/show_bug.cgi?id=169567

        Reviewed by Eric Carlson.

        * wtf/MediaTime.h:
        (WTF::MediaTime::encode):
        (WTF::MediaTime::decode):

2017-03-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        Add secondsAs<T> methods to Seconds to convert it to integers with clamp
        https://bugs.webkit.org/show_bug.cgi?id=169537

        Reviewed by Carlos Garcia Campos.

        When using the usual static_cast, infinity becomes 0 accidentally.
        It is not intended value when using Seconds for timeout value.
        Instead, we use clampToAccepting64 to convert Seconds to
        integer values to pass them to the system functions.

        * wtf/MathExtras.h:
        (clampToAccepting64):
        * wtf/Seconds.h:
        (WTF::Seconds::minutesAs):
        (WTF::Seconds::secondsAs):
        (WTF::Seconds::millisecondsAs):
        (WTF::Seconds::microsecondsAs):
        (WTF::Seconds::nanosecondsAs):
        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::WorkQueue::dispatchAfter):
        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::dispatchAfter):
        (WTF::RunLoop::TimerBase::updateReadyTime):

2017-03-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][Linux] Implement VMTrap in Linux ports
        https://bugs.webkit.org/show_bug.cgi?id=169436

        Reviewed by Mark Lam.

        Enable VMTrap mechanism for Linux and FreeBSD.

        * wtf/Platform.h:

2017-03-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Clean up RunLoop and WorkQueue with Seconds and Function
        https://bugs.webkit.org/show_bug.cgi?id=169537

        Reviewed by Sam Weinig.

        This patch modernizes RunLoop and WorkQueue.

        1. Use Ref<> aggressively
        2. Use Seconds instead of chrono times
        3. Use Function<> instead of std::function

        * wtf/MainThread.cpp:
        (WTF::dispatchFunctionsFromMainThread):
        * wtf/RunLoop.h:
        * wtf/WorkQueue.h:
        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::WorkQueue::dispatch):
        (WTF::WorkQueue::dispatchAfter):
        (WTF::WorkQueue::concurrentApply):
        * wtf/generic/MainThreadGeneric.cpp:
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/generic/RunLoopGeneric.cpp:
        (WTF::RunLoop::TimerBase::ScheduledTask::create):
        (WTF::RunLoop::TimerBase::ScheduledTask::EarliestSchedule::operator()):
        (WTF::RunLoop::populateTasks):
        (WTF::RunLoop::runImpl):
        (WTF::RunLoop::schedule):
        (WTF::RunLoop::scheduleAndWakeUp):
        (WTF::RunLoop::dispatchAfter):
        (WTF::RunLoop::TimerBase::start):
        * wtf/generic/WorkQueueGeneric.cpp:
        (WorkQueue::dispatch):
        (WorkQueue::dispatchAfter):
        * wtf/glib/RunLoopGLib.cpp:
        (WTF::DispatchAfterContext::DispatchAfterContext):
        (WTF::RunLoop::dispatchAfter):
        (WTF::RunLoop::TimerBase::updateReadyTime):
        (WTF::RunLoop::TimerBase::start):
        * wtf/win/WorkQueueWin.cpp:
        (WTF::WorkQueue::performWorkOnRegisteredWorkThread):
        (WTF::WorkQueue::dispatch):
        (WTF::WorkQueue::dispatchAfter):

2017-03-13  Chris Dumez  <cdumez@apple.com>

        [WK2] Only report background WebProcesses as unresponsive in the background after 90 seconds
        https://bugs.webkit.org/show_bug.cgi?id=169425
        <rdar://problem/30954003>

        Reviewed by Andreas Kling.

        * wtf/RunLoop.h:
        (WTF::RunLoop::TimerBase::startRepeating):
        (WTF::RunLoop::TimerBase::startOneShot):
        Add overloads to RunLoop::Timer that take Seconds in parameter,
        for convenience.

        * wtf/Seconds.h:
        (WTF::Seconds::fromHours):
        (WTF::seconds_literals::operator _h):
        Allow _h suffix for initializing Seconds type to hours.

2017-03-11  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r213645): It made JSC tests super slow and timeout on AArch64 Linux
        https://bugs.webkit.org/show_bug.cgi?id=169510

        Unreviewed, disable LL_SC on Linux to unbreak this platform.

        * wtf/Atomics.h:
        * wtf/Platform.h:

2017-03-10  Filip Pizlo  <fpizlo@apple.com>

        The JITs should be able to emit fast TLS loads
        https://bugs.webkit.org/show_bug.cgi?id=169483

        Reviewed by Keith Miller.

        Consolidated what we know about fast TLS in FastTLS.h.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/FastTLS.h: Added.
        (WTF::loadFastTLS):
        (WTF::fastTLSOffsetForKey):
        * wtf/Platform.h:
        * wtf/WTFThreadData.cpp:
        (WTF::WTFThreadData::createAndRegisterForGetspecificDirect):
        * wtf/WTFThreadData.h:
        (WTF::wtfThreadData):

2017-03-10  Mark Lam  <mark.lam@apple.com>

        Turn ENABLE(MASM_PROBE) on by default for OS(DARWIN) release builds.
        https://bugs.webkit.org/show_bug.cgi?id=169493

        Reviewed by Saam Barati.

        MASM_PROBE was already enabled for debug builds.  This change makes it so that we
        don't have to rebuild the world every time we need to use it on a release build.

        * wtf/Platform.h:

2017-03-10  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed AArch64 Linux buildfix after r213645.
        https://bugs.webkit.org/show_bug.cgi?id=169300

        * wtf/Atomics.h: intptr_t and int64_t are typedefs for long int on Linux.
        They are different types only on Darwin platforms.

2017-03-09  Caio Lima  <ticaiolima@gmail.com>

        [ESnext] Implement Object Rest - Implementing Object Rest Destructuring
        https://bugs.webkit.org/show_bug.cgi?id=167962

        Reviewed by Keith Miller.

        * wtf/HashSet.h:
        (WTF::=):

2017-03-09  Youenn Fablet  <youenn@apple.com>

        Activate VideoToolbox when WebRTC is enabled on iOS
        https://bugs.webkit.org/show_bug.cgi?id=169423

        Reviewed by Jon Lee.

        * wtf/Platform.h: Activate VIDEOTOOLBOX if WEBRTC is enabled.

2017-03-09  Filip Pizlo  <fpizlo@apple.com>

        std::isnan/isinf/isfinite should work with WTF time classes
        https://bugs.webkit.org/show_bug.cgi?id=164991

        Reviewed by Darin Adler.
        
        The consensus view (see comments in https://bugs.webkit.org/show_bug.cgi?id=152045) of how
        to check if something is NaN is to use std::isnan(). To be able to do that for time
        classes, they need to provide their own isnan() overhload. This also provides isinf()
        overloads.

        * wtf/MonotonicTime.h:
        (std::isnan):
        (std::isinf):
        * wtf/Seconds.h:
        (std::isnan):
        (std::isinf):
        * wtf/TimeWithDynamicClockType.h:
        (std::isnan):
        (std::isinf):
        * wtf/WallTime.h:
        (std::isnan):
        (std::isinf):

2017-03-09  Mark Lam  <mark.lam@apple.com>

        Use const AbstractLocker& (instead of const LockHolder&) in more places.
        https://bugs.webkit.org/show_bug.cgi?id=169424

        Reviewed by Filip Pizlo.

        * wtf/RunLoop.h:
        * wtf/generic/RunLoopGeneric.cpp:
        (WTF::RunLoop::wakeUp):
        (WTF::RunLoop::schedule):

2017-03-09  Mark Lam  <mark.lam@apple.com>

        Make the VM Traps mechanism non-polling for the DFG and FTL.
        https://bugs.webkit.org/show_bug.cgi?id=168920
        <rdar://problem/30738588>

        Reviewed by Filip Pizlo.

        Make StackBounds more useful for checking if a pointer is within stack bounds.

        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::isInAllocatedMemory):
        * wtf/MetaAllocator.h:
        * wtf/Platform.h:
        * wtf/StackBounds.h:
        (WTF::StackBounds::emptyBounds):
        (WTF::StackBounds::StackBounds):
        (WTF::StackBounds::isEmpty):
        (WTF::StackBounds::contains):

2017-03-07  Filip Pizlo  <fpizlo@apple.com>

        WTF should make it super easy to do ARM concurrency tricks
        https://bugs.webkit.org/show_bug.cgi?id=169300

        Reviewed by Mark Lam.
        
        This adds Atomic<>::loadLink and Atomic<>::storeCond, available only when HAVE(LL_SC).
        
        It abstracts loadLink/storeCond behind prepare/attempt. You can write prepare/attempt
        loops whenever your loop fits into the least common denominator of LL/SC and CAS.
        
        This modifies Atomic<>::transaction to use prepare/attempt. So, if you write your loop
        using Atomic<>::transaction, then you get LL/SC for free.

        Depending on the kind of transaction you are doing, you may not want to perform an LL
        until you have a chance to just load the current value. Atomic<>::transaction() assumes
        that you do not care to have any ordering guarantees in that case. If you think that
        the transaction has a good chance of aborting this way, you want
        Atomic<>::transaction() to first do a plain load. But if you don't think that such an
        abort is likely, then you want to go straight to the LL. The API supports this concept
        via TransactionAbortLikelihood.
        
        Additionally, this redoes the depend/consume API to be dead simple. Dependency is
        unsigned. You get a dependency on a loaded value by just saying
        dependency(loadedValue). You consume the dependency by using it as a bonus index to
        some pointer dereference. This is made easy with the consume<T*>(ptr, dependency)
        helper. In those cases where you want to pass around both a computed value and a
        dependency, there's DependencyWith<T>. But you won't need it in most cases. The loaded
        value or any value computed from the loaded value is a fine input to dependency()!
        
        This change updates a bunch of hot paths to use the new APIs. Using transaction() gives
        us optimal LL/SC loops for object marking and lock acquisition.
        
        This change also updates a bunch of hot paths to use dependency()/consume().
        
        This is a significant Octane/splay speed-up on ARM.

        * wtf/Atomics.h:
        (WTF::hasFence):
        (WTF::Atomic::prepare):
        (WTF::Atomic::attempt):
        (WTF::Atomic::transaction):
        (WTF::Atomic::transactionRelaxed):
        (WTF::nullDependency):
        (WTF::dependency):
        (WTF::DependencyWith::DependencyWith):
        (WTF::dependencyWith):
        (WTF::consume):
        (WTF::Atomic::tryTransactionRelaxed): Deleted.
        (WTF::Atomic::tryTransaction): Deleted.
        (WTF::zeroWithConsumeDependency): Deleted.
        (WTF::consumeLoad): Deleted.
        * wtf/Bitmap.h:
        (WTF::WordType>::get):
        (WTF::WordType>::concurrentTestAndSet):
        (WTF::WordType>::concurrentTestAndClear):
        * wtf/LockAlgorithm.h:
        (WTF::LockAlgorithm::lockFast):
        (WTF::LockAlgorithm::unlockFast):
        (WTF::LockAlgorithm::unlockSlow):
        * wtf/Platform.h:

2017-03-08  Anders Carlsson  <andersca@apple.com>

        Simplify the PaymentCoordinator interface
        https://bugs.webkit.org/show_bug.cgi?id=169382
        Part of rdar://problem/28880714.

        Reviewed by Tim Horton.

        * wtf/EnumTraits.h:
        Fix a build warning.

2017-03-06  Andreas Kling  <akling@apple.com>

        [iOS] Report domains crashing under memory pressure via enhanced privacy logging.
        <https://webkit.org/b/169133>
        <rdar://problem/29964017>

        Reviewed by Antti Koivisto.

        Add a mechanism for getting a callback when the memory pressure status changes.

        * wtf/MemoryPressureHandler.cpp:
        (WTF::MemoryPressureHandler::measurementTimerFired):
        (WTF::MemoryPressureHandler::beginSimulatedMemoryPressure):
        (WTF::MemoryPressureHandler::endSimulatedMemoryPressure):
        (WTF::MemoryPressureHandler::setUnderMemoryPressure):
        (WTF::MemoryPressureHandler::memoryPressureStatusChanged):
        * wtf/MemoryPressureHandler.h:
        (WTF::MemoryPressureHandler::setMemoryPressureStatusChangedCallback):
        (WTF::MemoryPressureHandler::setUnderMemoryPressure): Deleted.

2017-03-03  Jer Noble  <jer.noble@apple.com>

        [Win64] '__int128_t': undeclared identifier in MediaTime.cpp
        https://bugs.webkit.org/show_bug.cgi?id=169123

        Reviewed by Alex Christensen.

        Don't perform the 128-bit optimized path on Windows, where the __int128_t intrinsic isn't available.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::setTimeScale):

2017-03-03  Keith Miller  <keith_miller@apple.com>

        WASM should support faster loads.
        https://bugs.webkit.org/show_bug.cgi?id=162693

        Reviewed by Saam Barati.

        Add new forms of dataLog that take a boolean which describes if the log should happen. This makes cases where we have a static const bool for printing nicer since you can do:

        dataLogIf(verbose, things, to, print);

        instead of:

        if (verbose)
            dataLog(things, to, print);

        Also, add a operator! to Ref that has the same semantics as C++ refs.

        * wtf/DataLog.h:
        (WTF::dataLogLn):
        (WTF::dataLogIf):
        (WTF::dataLogLnIf):
        * wtf/Ref.h:
        (WTF::Ref::operator!):

2017-03-02  Jer Noble  <jer.noble@apple.com>

        Sufficently large timeValue and timeScale arguments to MediaTime will cause wrapping in toTimeScale().
        https://bugs.webkit.org/show_bug.cgi?id=169098

        Reviewed by Keith Miller.

        Use a non-standard but Clang & GCC supported __int128_t type extension to do the 128-bit math rather than
        rolling our own. Since this is only available in 64-bit builds, for 32-bit, just fix the underlying 128-bit
        math.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::setTimeScale):

2017-03-01  Konstantin Tokarev  <annulen@yandex.ru>

        Removed unused WTF_COMPILER_SUPPORTS_CXX_USER_LITERALS macro
        https://bugs.webkit.org/show_bug.cgi?id=168969

        Reviewed by Darin Adler.

        * wtf/Compiler.h:

2017-03-01  Tomas Popela  <tpopela@redhat.com>

        [WTF] va_list is not ended in StringPrintStream
        https://bugs.webkit.org/show_bug.cgi?id=169035

        Reviewed by Michael Saboff.

        Also fix whitespace errors while touching this file.

        * wtf/StringPrintStream.cpp:
        (WTF::StringPrintStream::vprintf):
        (WTF::StringPrintStream::increaseSize):

2017-03-01  Andreas Kling  <akling@apple.com>

        Move MemoryPressureHandler to WTF
        <https://webkit.org/b/168908>

        Reviewed by Sam Weinig.

        Move MemoryPressureHandler down to WTF so it can be used from JavaScriptCore.

        I had to do a blind rewrite of the Windows memory checking timer since it can
        no longer use WebCore::Timer. I also moved the Win32Handle helper class to WTF.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/MemoryPressureHandler.cpp: Renamed from Source/WebCore/platform/MemoryPressureHandler.cpp.
        (WTF::MemoryPressureHandler::singleton):
        (WTF::MemoryPressureHandler::MemoryPressureHandler):
        (WTF::MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor):
        (WTF::toString):
        (WTF::thresholdForPolicy):
        (WTF::policyForFootprint):
        (WTF::MemoryPressureHandler::measurementTimerFired):
        (WTF::MemoryPressureHandler::beginSimulatedMemoryPressure):
        (WTF::MemoryPressureHandler::endSimulatedMemoryPressure):
        (WTF::MemoryPressureHandler::releaseMemory):
        (WTF::MemoryPressureHandler::ReliefLogger::logMemoryUsageChange):
        (WTF::MemoryPressureHandler::install):
        (WTF::MemoryPressureHandler::uninstall):
        (WTF::MemoryPressureHandler::holdOff):
        (WTF::MemoryPressureHandler::respondToMemoryPressure):
        (WTF::MemoryPressureHandler::platformReleaseMemory):
        (WTF::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):
        (WTF::MemoryPressureHandler::platformInitialize):
        * wtf/MemoryPressureHandler.h: Renamed from Source/WebCore/platform/MemoryPressureHandler.h.
        (WTF::MemoryPressureHandler::setMemoryKillCallback):
        (WTF::MemoryPressureHandler::setProcessIsEligibleForMemoryKillCallback):
        (WTF::MemoryPressureHandler::setLowMemoryHandler):
        (WTF::MemoryPressureHandler::isUnderMemoryPressure):
        (WTF::MemoryPressureHandler::setUnderMemoryPressure):
        (WTF::MemoryPressureHandler::ReliefLogger::ReliefLogger):
        (WTF::MemoryPressureHandler::ReliefLogger::~ReliefLogger):
        (WTF::MemoryPressureHandler::ReliefLogger::logString):
        (WTF::MemoryPressureHandler::ReliefLogger::setLoggingEnabled):
        (WTF::MemoryPressureHandler::ReliefLogger::loggingEnabled):
        (WTF::MemoryPressureHandler::ReliefLogger::MemoryUsage::MemoryUsage):
        * wtf/PlatformEfl.cmake:
        * wtf/PlatformGTK.cmake:
        * wtf/PlatformMac.cmake:
        * wtf/PlatformWin.cmake:
        * wtf/cocoa/MemoryPressureHandlerCocoa.mm: Renamed from Source/WebCore/platform/cocoa/MemoryPressureHandlerCocoa.mm.
        (WTF::MemoryPressureHandler::platformReleaseMemory):
        (WTF::MemoryPressureHandler::install):
        (WTF::MemoryPressureHandler::uninstall):
        (WTF::MemoryPressureHandler::holdOff):
        (WTF::MemoryPressureHandler::respondToMemoryPressure):
        (WTF::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):
        * wtf/linux/CurrentProcessMemoryStatus.cpp: Renamed from Source/WebCore/platform/linux/CurrentProcessMemoryStatus.cpp.
        (WTF::systemPageSize):
        (WTF::currentProcessMemoryStatus):
        * wtf/linux/CurrentProcessMemoryStatus.h: Renamed from Source/WebCore/platform/linux/CurrentProcessMemoryStatus.h.
        * wtf/linux/MemoryPressureHandlerLinux.cpp: Renamed from Source/WebCore/platform/linux/MemoryPressureHandlerLinux.cpp.
        (WTF::MemoryPressureHandler::EventFDPoller::EventFDPoller):
        * wtf/win/MemoryPressureHandlerWin.cpp: Renamed from Source/WebCore/platform/win/MemoryPressureHandlerWin.cpp.
        (WTF::MemoryPressureHandler::platformInitialize):
        (WTF::MemoryPressureHandler::windowsMeasurementTimerFired):
        (WTF::MemoryPressureHandler::platformReleaseMemory):
        (WTF::MemoryPressureHandler::install):
        (WTF::MemoryPressureHandler::uninstall):
        (WTF::MemoryPressureHandler::holdOff):
        (WTF::MemoryPressureHandler::respondToMemoryPressure):
        (WTF::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):
        * wtf/win/Win32Handle.h: Renamed from Source/WebCore/platform/win/Win32Handle.h.
        (WTF::Win32Handle::Win32Handle):
        (WTF::Win32Handle::~Win32Handle):
        (WTF::Win32Handle::clear):
        (WTF::Win32Handle::isValid):
        (WTF::Win32Handle::get):
        (WTF::Win32Handle::release):
        (WTF::Win32Handle::operator=):

2017-02-28  Chris Dumez  <cdumez@apple.com>

        [iOS] Throttle requestAnimationFrame to 30fps in low power mode
        https://bugs.webkit.org/show_bug.cgi?id=168837
        <rdar://problem/30700929>

        Reviewed by Simon Fraser.

        Add support for operator -= on WTF::OptionSet for convenience:
            set -= Enum::A;
        looks much better than:
            set = set - Enum::A;

        * wtf/OptionSet.h:
        (WTF::OptionSet::operator-=):

2017-02-28  Michael Saboff  <msaboff@apple.com>

        Add ability to configure JSC options from a file
        https://bugs.webkit.org/show_bug.cgi?id=168914

        Reviewed by Filip Pizlo.

        Added the ability to set options and DataLog file location via a configuration file.
        The pathname can include the printf style "%pid", which will be replaced with the
        current process id.

        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):
        (WTF::setDataFile):
        * wtf/DataLog.h:

2017-02-27  Andy Estes  <aestes@apple.com>

        [iOS] Enable file replacement
        https://bugs.webkit.org/show_bug.cgi?id=168907
        <rdar://problem/22258242>

        Reviewed by David Kilzer.

        * wtf/FeatureDefines.h: Set ENABLE_FILE_REPLACEMENT to 1 on all Cocoa platforms.

2017-02-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename ICU cursor iterator to caret iterator
        https://bugs.webkit.org/show_bug.cgi?id=168206

        Reviewed by Simon Fraser.

        * wtf/text/TextBreakIterator.cpp:
        (WTF::mapModeToBackingIterator):
        * wtf/text/TextBreakIterator.h:
        * wtf/text/cf/TextBreakIteratorCF.h:
        (WTF::TextBreakIteratorCF::TextBreakIteratorCF):
        * wtf/text/icu/TextBreakIteratorICU.h:
        (WTF::caretRules):
        (WTF::TextBreakIteratorICU::TextBreakIteratorICU):
        (WTF::cursorRules): Deleted.
        * wtf/text/mac/TextBreakIteratorInternalICUMac.mm:
        (WTF::mapModeToBackingIterator):

2017-02-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Use RAII for ICU breaking iterators
        https://bugs.webkit.org/show_bug.cgi?id=168203

        Reviewed by Simon Fraser.

        * wtf/text/TextBreakIterator.h:
        (WTF::CachedTextBreakIterator::CachedTextBreakIterator):
        (WTF::CachedTextBreakIterator::~CachedTextBreakIterator):
        (WTF::CachedTextBreakIterator::preceding):
        (WTF::CachedTextBreakIterator::following):
        (WTF::CachedTextBreakIterator::isBoundary):

2017-02-24  Jer Noble  <jer.noble@apple.com>

        Add public method to MediaTime for doing timeScale conversion.
        https://bugs.webkit.org/show_bug.cgi?id=168860

        Reviewed by Eric Carlson.

        The newly public method, modeled on CMTimeConvertScale, allows callers to specify what rounding technique
        will be used when converting to a new time scale.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::toTimeScale):
        (WTF::MediaTime::setTimeScale):
        * wtf/MediaTime.h:

2017-02-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop compiling our own cursorMovementIterator()
        https://bugs.webkit.org/show_bug.cgi?id=168211

        Reviewed by David Hyatt.

        This patch creates a unified Text Breaking API, which can be backed by either ICU
        or CoreFoundation (for ports which can use it). Rather than using inheritance and
        virtual functions to implement this, because there are only two subclasses, the
        simpler option of just using a Variant is used instead. There is also a cache which
        allows you to reuse iterators without reconstructing them. This cache is better
        than the previous method of having a single static iterator because the cache
        lets you use two iterators simultaneously.

        In the future, I will hook up all iterators to use this shared class. However, for
        this patch, I've only hooked up the caret position iterator (backed by CoreFoundation
        on Cocoa ports and UBRK_CHARACTER on other ports). 

        * WTF.xcodeproj/project.pbxproj:
        * wtf/spi/cf/CFStringSPI.h: Added.
        * wtf/text/TextBreakIterator.cpp:
        (WTF::initializeIteratorWithRules): Deleted.
        (WTF::cursorMovementIterator): Deleted.
        * wtf/text/TextBreakIterator.h:
        (WTF::TextBreakIterator::preceding):
        (WTF::TextBreakIterator::following):
        (WTF::TextBreakIterator::isBoundary):
        (WTF::TextBreakIterator::setText):
        (WTF::TextBreakIterator::mode):
        (WTF::TextBreakIterator::locale):
        (WTF::TextBreakIteratorCache::singleton):
        (WTF::TextBreakIteratorCache::take):
        (WTF::TextBreakIteratorCache::put):
        (WTF::TextBreakIteratorCache::TextBreakIteratorCache):
        * wtf/text/cf/TextBreakIteratorCF.h: Added.
        (WTF::TextBreakIteratorCF::TextBreakIteratorCF):
        (WTF::TextBreakIteratorCF::setText):
        (WTF::TextBreakIteratorCF::preceding):
        (WTF::TextBreakIteratorCF::following):
        (WTF::TextBreakIteratorCF::isBoundary):
        * wtf/text/icu/TextBreakIteratorICU.h: Added.
        (WTF::TextBreakIteratorICU::set8BitText):
        (WTF::TextBreakIteratorICU::TextBreakIteratorICU):
        (WTF::TextBreakIteratorICU::operator=):
        (WTF::TextBreakIteratorICU::~TextBreakIteratorICU):
        (WTF::TextBreakIteratorICU::setText):
        (WTF::TextBreakIteratorICU::preceding):
        (WTF::TextBreakIteratorICU::following):
        (WTF::TextBreakIteratorICU::isBoundary):
        * wtf/text/icu/UTextProviderLatin1.h:
        * wtf/text/mac/TextBreakIteratorInternalICUMac.mm:
        (WTF::mapModeToBackingIterator):
        (WTF::TextBreakIterator::TextBreakIterator):

2017-02-24  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Gather timing information with reliable responseEnd time
        https://bugs.webkit.org/show_bug.cgi?id=168351

        Reviewed by Alex Christensen.

        * wtf/persistence/Coders.h:
        (WTF::Persistence::Coder<Seconds>::encode):
        (WTF::Persistence::Coder<Seconds>::decode):

2017-02-24  Keith Miller  <keith_miller@apple.com>

        Rubber-stamped by Chris Dumez.

        Replace typename Bool with typename BoolType because X11 has
        #define Bool int for some unknown reason...

        * wtf/HashFunctions.h:
        (WTF::TupleHash::allTrue):
        * wtf/HashTraits.h:
        (WTF::TupleHashTraits::allTrue):

2017-02-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r212944.

        Caused a lot of failures on the debug bots

        Reverted changeset:

        "[Resource Timing] Gather timing information with reliable
        responseEnd time"
        https://bugs.webkit.org/show_bug.cgi?id=168351
        http://trac.webkit.org/changeset/212944

2017-02-24  Keith Miller  <keith_miller@apple.com>

        We should be able to use std::tuples as keys in HashMap
        https://bugs.webkit.org/show_bug.cgi?id=168805

        Reviewed by Filip Pizlo.

        This patch adds support for using std::tupeles as the key
        type in HashMap. It is equivalent to doing a sequence of
        std::pairs but has a nicer syntax.

        * wtf/HashFunctions.h:
        (WTF::TupleHash::hash):
        (WTF::TupleHash::equal):
        (WTF::TupleHash::allTrue):
        * wtf/HashTraits.h:
        (WTF::TupleHashTraits::allTrue):
        (WTF::TupleHashTraits::emptyValue):
        (WTF::TupleHashTraits::constructDeletedValue):
        (WTF::TupleHashTraits::isDeletedValue):

2017-02-24  Alex Christensen  <achristensen@webkit.org>

        Prepare to enable WebRTC on iOS
        https://bugs.webkit.org/show_bug.cgi?id=168811

        Reviewed by Youenn Fablet.

        * wtf/Platform.h:

2017-02-23  Joseph Pecoraro  <pecoraro@apple.com>

        [Resource Timing] Gather timing information with reliable responseEnd time
        https://bugs.webkit.org/show_bug.cgi?id=168351

        Reviewed by Alex Christensen.

        * wtf/persistence/Coders.h:
        (WTF::Persistence::Coder<Seconds>::encode):
        (WTF::Persistence::Coder<Seconds>::decode):

2017-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Better handle Thread and RunLoop initialization
        https://bugs.webkit.org/show_bug.cgi?id=167828

        Reviewed by Yusuke Suzuki.

        Make initialization functions more independent so that they can run in different
        order. WTF::initializeMainThread initializes WTF threading, so that neither WTF nor JSC theading need to be
        initialized before. RunLoop::initializeMainRunLoop() requires main thread to be initialized in some
        ports, so it initializes main thread too. WebKit1 always calls WTF::initializeMainThreadToProcessMainThread()
        before RunLoop::initializeMainRunLoop() so there's no problem there. GC threads are initialized alwayas by the
        main thread. The rules should be simpler now:

          - JSC::initializeThreading: should always be called when JSC is used.
          - WTF::initializeThreading: only needs to be explicitly called when JSC is not used and process doesn't
            initialize a main thread or main run loop.
          - WTF::initializeMainThread: only needs to be explicitly called if process initializes a main thread but not a
            main run loop.
          - WTF::initializeMainThreadToProcessMainThread(): should always be called in WebKit1 before
            RunLoop::initializeMainRunLoop().
          - RunLoop::initializeMainRunLoop(): to initialize the main run loop. The only requirement is JSC::initializeThreading()
            to be called before if JSC is used.

        * wtf/MainThread.cpp:
        (WTF::initializeMainThreadOnce): Use pthread_once to initialize the main thread also in GTK+ port.
        (WTF::initializeMainThreadToProcessMainThreadOnce): Call initializeThreading() before the platform
        initialization and initializeGCThreads() after it.
        (WTF::initializeMainThread): Ditto.
        * wtf/RunLoop.cpp:
        (WTF::RunLoop::initializeMainRunLoop): Call initializeMainThread().
        * wtf/glib/MainThreadGLib.cpp:
        (WTF::initializeMainThreadPlatform):
        (WTF::isMainThread):
        * wtf/mac/MainThreadMac.mm:
        (WTF::initializeMainThreadPlatform): Remove call to initializeGCThreads().
        (WTF::initializeMainThreadToProcessMainThreadPlatform): Ditto.

2017-02-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Remove Yosemite-specific font lookup code
        https://bugs.webkit.org/show_bug.cgi?id=168682

        Reviewed by Zalan Bujtas.

        * wtf/Platform.h:

2017-02-22  Keith Miller  <keith_miller@apple.com>

        Remove the demand executable allocator
        https://bugs.webkit.org/show_bug.cgi?id=168754

        Reviewed by Saam Barati.

        * wtf/Platform.h:

2017-02-22  Alex Christensen  <achristensen@webkit.org>

        Re-commit part of r212812 accidentally rolled out with r212841.
        https://bugs.webkit.org/show_bug.cgi?id=167293

        * wtf/Platform.h:
        Use libwebrtc on Mac if webrtc is enabled.

2017-02-22  Alex Christensen  <achristensen@webkit.org>

        Fix ASAN build after activating libwebrtc.

        * wtf/Ref.h:
        __asan_address_is_poisoned returns an int, not a bool.
        This didn't cause a problem before because we didn't include the real definition anywhere,
        but libwebrtc includes <sanitizer/asan_interface.h> directly now so the return types need to be correct.

2017-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test fast/events/message-port-postMessage-recursive.html times out
        https://bugs.webkit.org/show_bug.cgi?id=168570

        Reviewed by Michael Catanzaro.

        This has recently been added and the patch is good. It's just revealing a problem with our timers. The test is
        posting a message recursively, and also starts a timeout timer to finish the test. The timeout timer is never
        fired for us, because WebCore timers have lower priority than the one used by postMessage. ScriptExecutionContext
        uses Document::postTask, that uses scheduleOnMainThread, that uses RunLoop::dispatch(). We are not setting any
        priority for the timer used by RunLoop::dispatch, so it's using the default.
        Use a RunLoop::Timer to schedule tasks to the main thread instead of using RunLoop::dispatch(). This allows us
        to use a different priority, that is now set to G_PRIORITY_HIGH_IDLE + 20 to match WebCore timers. But it also
        avoids the double queue we had with RunLoop::dispatch(), because scheduleOnMainThread() also queues the tasks.

        * wtf/glib/MainThreadGLib.cpp:
        (WTF::MainThreadDispatcher::MainThreadDispatcher):
        (WTF::MainThreadDispatcher::schedule):
        (WTF::MainThreadDispatcher::fired):
        (WTF::scheduleDispatchFunctionsOnMainThread):

2017-02-21  Youenn Fablet  <youenn@apple.com>

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293

        Reviewed by Alex Christensen.

        * wtf/Platform.h:

2017-02-20  Filip Pizlo  <fpizlo@apple.com>

        The collector thread should only start when the mutator doesn't have heap access
        https://bugs.webkit.org/show_bug.cgi?id=167737

        Reviewed by Keith Miller.
        
        Extend the use of AbstractLocker so that we can use more locking idioms.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThreadCondition::notifyOne):
        (WTF::AutomaticThreadCondition::notifyAll):
        (WTF::AutomaticThreadCondition::add):
        (WTF::AutomaticThreadCondition::remove):
        (WTF::AutomaticThreadCondition::contains):
        (WTF::AutomaticThread::AutomaticThread):
        (WTF::AutomaticThread::tryStop):
        (WTF::AutomaticThread::isWaiting):
        (WTF::AutomaticThread::notify):
        (WTF::AutomaticThread::start):
        (WTF::AutomaticThread::threadIsStopping):
        * wtf/AutomaticThread.h:
        * wtf/NumberOfCores.cpp:
        (WTF::numberOfProcessorCores):
        * wtf/ParallelHelperPool.cpp:
        (WTF::ParallelHelperClient::finish):
        (WTF::ParallelHelperClient::claimTask):
        (WTF::ParallelHelperPool::Thread::Thread):
        (WTF::ParallelHelperPool::didMakeWorkAvailable):
        (WTF::ParallelHelperPool::hasClientWithTask):
        (WTF::ParallelHelperPool::getClientWithTask):
        * wtf/ParallelHelperPool.h:

2017-02-21  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212699.

        Internal build not ready

        Reverted changeset:

        "[WebRTC][Mac] Activate libwebrtc"
        https://bugs.webkit.org/show_bug.cgi?id=167293
        http://trac.webkit.org/changeset/212699

2017-02-20  Youenn Fablet  <youenn@apple.com>

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293

        Reviewed by Alex Christensen.

        * wtf/Platform.h:

2017-02-20  Mark Lam  <mark.lam@apple.com>

        [Re-landing] CachedCall should let GC know to keep its arguments alive.
        https://bugs.webkit.org/show_bug.cgi?id=168567
        <rdar://problem/30475767>

        Reviewed by Saam Barati.

        Added a WTF_FORBID_HEAP_ALLOCATION that will cause a compilation failure if
        a class declared with it is malloced.

        While this doesn't prevent that class declared WTF_FORBID_HEAP_ALLOCATION from
        being embedded in another class that is heap allocated, it does at minimum
        document the intent and gives the users of this class a chance to do the
        right thing.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/ForbidHeapAllocation.h: Added.

2017-02-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r212685.

        This change broke the 32-bit Sierra build.

        Reverted changeset:

        "Resource Load Statistics: Add alternate classification
        method"
        https://bugs.webkit.org/show_bug.cgi?id=168347
        http://trac.webkit.org/changeset/212685

2017-02-20  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add alternate classification method
        https://bugs.webkit.org/show_bug.cgi?id=168347
        <rdar://problem/30352793>

        Reviewed by Alex Christensen.

        * wtf/Platform.h:
            Added support for HAVE(CORE_PREDICTION).

2017-02-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r212618.
        https://bugs.webkit.org/show_bug.cgi?id=168609

        "Appears to cause PLT regression" (Requested by mlam on
        #webkit).

        Reverted changeset:

        "CachedCall should let GC know to keep its arguments alive."
        https://bugs.webkit.org/show_bug.cgi?id=168567
        http://trac.webkit.org/changeset/212618

2017-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, rolling out r212622.

        Caused several test failures

        Reverted changeset:

        "[GTK] Test fast/events/message-port-postMessage-
        recursive.html times out"
        https://bugs.webkit.org/show_bug.cgi?id=168570
        http://trac.webkit.org/changeset/212622

2017-02-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test fast/events/message-port-postMessage-recursive.html times out
        https://bugs.webkit.org/show_bug.cgi?id=168570

        Reviewed by Michael Catanzaro.

        This has recently been added and the patch is good. It's just revealing a problem with our timers. The test is
        posting a message recursively, and also starts a timeout timer to finish the test. The timeout timer is never
        fired for us, because WebCore timers have lower priority than the one used by
        postMessage. ScriptExecutionContext uses Document::postTask, that uses scheduleOnMainThread, that uses
        RunLoop::dispatch(). We are not setting any priority for the timer used by RunLoop::dispatch, so it's using the
        default. RunLoop::dispatch is normally used to schedule tasks between threads, or just to ensure something is
        run in a different run loop iteration, but in general nothing urgent as a graphics redraw or something like
        that. It's quite common to use g_idle_add to schedule tasks between threads, so I think it makes sense to use
        G_PRIORITY_DEFAULT_IDLE for the RunLoop timer.

        * wtf/glib/RunLoopGLib.cpp:
        (WTF::RunLoop::RunLoop):

2017-02-19  Mark Lam  <mark.lam@apple.com>

        CachedCall should let GC know to keep its arguments alive.
        https://bugs.webkit.org/show_bug.cgi?id=168567
        <rdar://problem/30475767>

        Reviewed by Saam Barati.

        Added a WTF_FORBID_HEAP_ALLOCATION that will cause a compilation failure if
        a class declared with it is malloced.

        While this doesn't prevent that class declared WTF_FORBID_HEAP_ALLOCATION from
        being embedded in another class that is heap allocated, it does at minimum
        document the intent and gives the users of this class a chance to do the
        right thing.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/ForbidHeapAllocation.h: Added.

2017-02-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r212466.
        https://bugs.webkit.org/show_bug.cgi?id=168577

        causes crashes on AArch64 on linux, maybe it's causing crashes
        on iOS too (Requested by pizlo on #webkit).

        Reverted changeset:

        "The collector thread should only start when the mutator
        doesn't have heap access"
        https://bugs.webkit.org/show_bug.cgi?id=167737
        http://trac.webkit.org/changeset/212466

2017-02-18  Chris Dumez  <cdumez@apple.com>

        Recursive MessagePort.postMessage() calls causes tab to become unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=168548
        <rdar://problem/29808005>

        Reviewed by Darin Adler.

        Add API to retrieve all messages in the queue at once.

        * wtf/MessageQueue.h:

2017-02-16  Alex Christensen  <achristensen@webkit.org>

        Remove EFL-specific files in Source.

        Rubber-stamped by Anders Carlsson.

        * wtf/text/efl: Removed.
        * wtf/text/efl/TextBreakIteratorInternalICUEfl.cpp: Removed.

2017-02-10  Filip Pizlo  <fpizlo@apple.com>

        The collector thread should only start when the mutator doesn't have heap access
        https://bugs.webkit.org/show_bug.cgi?id=167737

        Reviewed by Keith Miller.
        
        Extend the use of AbstractLocker so that we can use more locking idioms.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThreadCondition::notifyOne):
        (WTF::AutomaticThreadCondition::notifyAll):
        (WTF::AutomaticThreadCondition::add):
        (WTF::AutomaticThreadCondition::remove):
        (WTF::AutomaticThreadCondition::contains):
        (WTF::AutomaticThread::AutomaticThread):
        (WTF::AutomaticThread::tryStop):
        (WTF::AutomaticThread::isWaiting):
        (WTF::AutomaticThread::notify):
        (WTF::AutomaticThread::start):
        (WTF::AutomaticThread::threadIsStopping):
        * wtf/AutomaticThread.h:
        * wtf/NumberOfCores.cpp:
        (WTF::numberOfProcessorCores): Allow this to be overridden for testing.
        * wtf/ParallelHelperPool.cpp:
        (WTF::ParallelHelperClient::finish):
        (WTF::ParallelHelperClient::claimTask):
        (WTF::ParallelHelperPool::Thread::Thread):
        (WTF::ParallelHelperPool::didMakeWorkAvailable):
        (WTF::ParallelHelperPool::hasClientWithTask):
        (WTF::ParallelHelperPool::getClientWithTask):
        * wtf/ParallelHelperPool.h:

2017-02-16  Anders Carlsson  <andersca@apple.com>

        Remove EFL from WTF
        https://bugs.webkit.org/show_bug.cgi?id=168452

        Reviewed by Alex Christensen.

        * wtf/CurrentTime.cpp:
        * wtf/DisallowCType.h:
        * wtf/FeatureDefines.h:
        * wtf/MainThread.cpp:
        * wtf/MainThread.h:
        * wtf/Platform.h:
        * wtf/RunLoop.h:
        * wtf/WorkQueue.h:
        * wtf/efl/DispatchQueueEfl.cpp: Removed.
        * wtf/efl/DispatchQueueEfl.h: Removed.
        * wtf/efl/DispatchQueueWorkItemEfl.h: Removed.
        * wtf/efl/EflTypedefs.h: Removed.
        * wtf/efl/MainThreadEfl.cpp: Removed.
        * wtf/efl/RunLoopEfl.cpp: Removed.
        * wtf/efl/UniquePtrEfl.h: Removed.
        * wtf/efl/WorkQueueEfl.cpp: Removed.

2017-02-13  Alex Christensen  <achristensen@webkit.org>

        URLs with an invalid IPv4 address should be invalid
        https://bugs.webkit.org/show_bug.cgi?id=168260

        Reviewed by Tim Horton.

        * wtf/Expected.h:
        (WTF::Expected::value):
        Added missing WTFMove for rvalue Expected::value().

2017-02-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The current frame of an image should not deleted if another frame is asynchronously being decoded
        https://bugs.webkit.org/show_bug.cgi?id=167618

        Reviewed by Simon Fraser.

        Add ASSERT_IMPLIES() which should fire when a condition is true but the
        assertion is false.

        * wtf/Assertions.h:

2017-02-13  Brady Eidson  <beidson@apple.com>

        Followup to: Replace all WebKit Library Version checks in WK2 with SDK version checks.
        https://bugs.webkit.org/show_bug.cgi?id=168124

        Reviewed by Geoffrey Garen.

        * wtf/spi/darwin/dyldSPI.h:

2017-02-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Update custom line breaking iterators to the latest version of Unicode
        https://bugs.webkit.org/show_bug.cgi?id=168182

        Reviewed by Zalan Bujtas.

        ICU 55.1 supports loose / normal / strict line breaking rules. The oldest platform we ship
        on has a version of ICU >= that one. Therefore, we don't need to compile our own rules;
        we can just use ICU's rules.

        * wtf/text/LineBreakIteratorPoolICU.h:
        (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
        (WTF::LineBreakIteratorPool::take):
        * wtf/text/TextBreakIterator.cpp:
        (WTF::acquireLineBreakIterator):
        (WTF::openLineBreakIterator):
        (WTF::mapLineIteratorModeToRules): Deleted.
        (WTF::isCJKLocale): Deleted.
        * wtf/text/TextBreakIterator.h:
        (WTF::LazyLineBreakIterator::LazyLineBreakIterator):
        (WTF::LazyLineBreakIterator::mode):
        (WTF::LazyLineBreakIterator::get):
        (WTF::LazyLineBreakIterator::resetStringAndReleaseIterator):
        (WTF::LazyLineBreakIterator::isLooseCJKMode): Deleted.

2017-02-10  Dan Bernstein  <mitz@apple.com>

        [Xcode] WTF installs extra copies of two headers outside /usr/local/include/wtf
        https://bugs.webkit.org/show_bug.cgi?id=168160

        Reviewed by Sam Weinig.

        * WTF.xcodeproj/project.pbxproj: Demoted OrdinalNumber.h MemoryFootprint.h from Private to
          Project.

2017-02-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r212139.
        https://bugs.webkit.org/show_bug.cgi?id=168152

        Caused some assertions (Requested by JoePeck on #webkit).

        Reverted changeset:

        "Fix misleading comment in RunLoop.h"
        https://bugs.webkit.org/show_bug.cgi?id=167832
        http://trac.webkit.org/changeset/212139

2017-02-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix misleading comment in RunLoop.h
        https://bugs.webkit.org/show_bug.cgi?id=167832

        Reviewed by Sam Weinig.

        * wtf/RunLoop.h:
        Mac initialization used to force using CFRunLoopGetMain(). Now however it just
        uses RunLoop::current which uses CFRunLoopGetCurrent(). So this comment that
        it can be done on any thread is misleading and can lead to incorrect behavior
        if it is actually done on a non-main thread on Mac.

2017-02-09  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, rolling out r212040.

        Broke build.  I'm not surprised

        Reverted changeset:

        "[WebRTC][Mac] Activate libwebrtc"
        https://bugs.webkit.org/show_bug.cgi?id=167293
        http://trac.webkit.org/changeset/212040

2017-02-09  Youenn Fablet  <youenn@apple.com>

        [WebRTC][Mac] Activate libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=167293

        Reviewed by Alex Christensen.

        * wtf/Platform.h:

2017-02-09  Brady Eidson  <beidson@apple.com>

        Transition "WebKit Library Version" checks to SDK version checks.
        <rdar://problem/30313696> and https://bugs.webkit.org/show_bug.cgi?id=168056

        Reviewed by Geoffrey Garen.

        * wtf/spi/darwin/dyldSPI.h: Add entries for the iOS 10.3, macOS 10.11, and macOS 10.12.4 SDKs.

2017-02-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r211980 and r211987.
        https://bugs.webkit.org/show_bug.cgi?id=168072

        Caused API test WebKit2.DuplicateCompletionHandlerCalls to
        fail (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Transition "WebKit Library Version" checks to SDK version
        checks."
        https://bugs.webkit.org/show_bug.cgi?id=168056
        http://trac.webkit.org/changeset/211980

        "Build fix for APPLE_INTERNAL_SDK builds after r211980."
        http://trac.webkit.org/changeset/211987

2017-02-09  Alexey Proskuryakov  <ap@apple.com>

        Remove unused WebThreadRunSync
        https://bugs.webkit.org/show_bug.cgi?id=168024

        Reviewed by Tim Horton.

        * wtf/ios/WebCoreThread.cpp:
        * wtf/ios/WebCoreThread.h:

2017-02-09  Brady Eidson  <beidson@apple.com>

        Build fix for APPLE_INTERNAL_SDK builds after r211980.

        Unreviewed.

        * wtf/spi/darwin/dyldSPI.h:

2017-02-09  Brady Eidson  <beidson@apple.com>

        Transition "WebKit Library Version" checks to SDK version checks.
        <rdar://problem/30313696> and https://bugs.webkit.org/show_bug.cgi?id=168056

        Reviewed by Geoffrey Garen.

        * wtf/spi/darwin/dyldSPI.h: Add entries for the iOS 10.3, macOS 10.11, and macOS 10.12.4 SDKs.

2017-02-06  Jer Noble  <jer.noble@apple.com>

        Playback stalls when a SourceBuffer append causes frame eviction
        https://bugs.webkit.org/show_bug.cgi?id=167834

        Reviewed by Eric Carlson.

        Optimize the MediaTime class; specifically the compare() method. The class only
        needs 6 bits to store the TimeFlags, so make that a uint8_t rather than uint32_t.
        The implementation is slightly simpler if the TimeScale is unsigned, so make that
        a uint32_t rather than int32_t. Inline the comparison operators. Optimize the equality
        comparison by bitwise-and'ing the flags together and masking the result. Optimize for
        common comparison scenarios (equal timeScales, equal timeValues(), etc.). Attempt the
        mathematically simpler simpler method for comparing ratios, and only fall back to the
        complex method if the results of multiplying the timeScale by the timeValue overflows.

        * wtf/MediaTime.cpp:
        (WTF::greatestCommonDivisor):
        (WTF::leastCommonMultiple):
        (WTF::signum):
        (WTF::MediaTime::MediaTime):
        (WTF::MediaTime::createWithFloat):
        (WTF::MediaTime::createWithDouble):
        (WTF::MediaTime::operator+):
        (WTF::MediaTime::operator-):
        (WTF::MediaTime::operator!):
        (WTF::MediaTime::operator bool):
        (WTF::MediaTime::compare):
        (WTF::MediaTime::setTimeScale):
        (WTF::abs):
        (WTF::MediaTime::operator<): Deleted.
        (WTF::MediaTime::operator>): Deleted.
        (WTF::MediaTime::operator!=): Deleted.
        (WTF::MediaTime::operator==): Deleted.
        (WTF::MediaTime::operator>=): Deleted.
        (WTF::MediaTime::operator<=): Deleted.
        * wtf/MediaTime.h:

2017-02-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Fix huge ENABLE_RESOURCE_USAGE warning spam

        Unreviewed. We shouldn't redefine ENABLE_RESOURCE_USAGE in Platform.h as
        it's already defined in cmakeconfig.h.

        * wtf/Platform.h:

2017-02-03  Joseph Pecoraro  <pecoraro@apple.com>

        Performance Timing: Convert WTF::MonotonicTime and WTF::Seconds
        https://bugs.webkit.org/show_bug.cgi?id=167768

        Reviewed by Geoffrey Garen.

        * wtf/Stopwatch.h:
        (WTF::Stopwatch::elapsedTimeSince):
        (WTF::Stopwatch::elapsedTimeSinceMonotonicTime): Deleted.

2017-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add initial implementation of resource usage overlay
        https://bugs.webkit.org/show_bug.cgi?id=167731

        Reviewed by Michael Catanzaro.

        Enable RESOURCE_USAGE for GTK+ port too.

        * wtf/Platform.h:

2017-02-02  Andreas Kling  <akling@apple.com>

        [Mac] In-process memory pressure monitor for WebContent processes AKA websam
        <https://webkit.org/b/167491>
        <rdar://problem/30116072>

        Reviewed by Antti Koivisto.

        Add a WTF helper function for getting the current process's memory footprint.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/MemoryFootprint.cpp:
        (WTF::memoryFootprint):
        * wtf/MemoryFootprint.h:

2017-02-02  Mark Lam  <mark.lam@apple.com>

        Add a SIGILL crash analyzer to make debugging SIGILLs easier.
        https://bugs.webkit.org/show_bug.cgi?id=167714
        <rdar://problem/30318237>

        Reviewed by Filip Pizlo.

        * wtf/StdLibExtras.h:

2017-02-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r211571 and r211582.
        https://bugs.webkit.org/show_bug.cgi?id=167751

        This change caused API test WebKit1.MemoryPressureHandler to
        fail with an assertion. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[Mac] In-process memory pressure monitor for WebContent
        processes."
        https://bugs.webkit.org/show_bug.cgi?id=167491
        http://trac.webkit.org/changeset/211571

        "Unreviewed attempt to fix the Windows build after r211571."
        http://trac.webkit.org/changeset/211582

2017-02-02  Andreas Kling  <akling@apple.com>

        [Mac] In-process memory pressure monitor for WebContent processes.
        <https://webkit.org/b/167491>
        <rdar://problem/30116072>

        Reviewed by Antti Koivisto.

        Add a WTF helper function for getting the current process's memory footprint.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/MemoryFootprint.cpp:
        (WTF::memoryFootprint):
        * wtf/MemoryFootprint.h:

2017-02-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the WebKit nightly open source build
        <rdar://problem/30308635>

        We cannot assume all internal SDKs have the latest WebKitAdditions, so we need an explicit header check here.

        * wtf/Platform.h:

2017-02-01  Andreas Kling  <akling@apple.com>

        Implement the alwaysRunsAtBackgroundPriority WK2 setting using thread QoS.
        <https://webkit.org/b/167387>
        <rdar://problem/29711409>

        Reviewed by Antti Koivisto.

        Add a new mechanism for overriding the max thread QoS level globally:

            void setGlobalMaxQOSClass(qos_class_t)
            qos_class_t adjustedQOSClass(qos_class_t)

        The QoS cap applies to all newly created threads, threads that try to override
        their QoS class manually, and also passed down to bmalloc.

        * wtf/Threading.cpp:
        (WTF::setCurrentThreadIsUserInteractive):
        (WTF::setCurrentThreadIsUserInitiated):
        (WTF::setGlobalMaxQOSClass):
        (WTF::adjustedQOSClass):
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::createThreadInternal):
        * wtf/cocoa/WorkQueueCocoa.cpp:
        (WTF::dispatchQOSClass):

2017-01-31  Antti Koivisto  <antti@apple.com>

        Teach cache coders to encode time_points
        https://bugs.webkit.org/show_bug.cgi?id=167670

        Reviewed by Andreas Kling.

        * wtf/persistence/Coders.h:
        (WTF::Persistence::Coder<std::chrono::system_clock::time_point>::encode):
        (WTF::Persistence::Coder<std::chrono::system_clock::time_point>::decode):

2017-01-31  Joseph Pecoraro  <pecoraro@apple.com>

        Removed unused m_nestedCount from RunLoop
        https://bugs.webkit.org/show_bug.cgi?id=167674

        Reviewed by Sam Weinig.

        * wtf/RunLoop.h:
        * wtf/cf/RunLoopCF.cpp:
        (WTF::RunLoop::RunLoop):
        (WTF::RunLoop::run):

2017-01-31  Filip Pizlo  <fpizlo@apple.com>

        The mutator should be able to perform increments of GC work
        https://bugs.webkit.org/show_bug.cgi?id=167528

        Reviewed by Keith Miller and Geoffrey Garen.

        We want dataLog to be locked even if you're not logging to a file!

        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):

2017-01-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Check USE(APPLE_INTERNAL_SDK) instead of specific headers when importing from WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=167555

        Reviewed by Dan Bernstein.

        Instead of guarding #import <WebKitAdditions/*> on the existence of the imported file, consult
        USE(APPLE_INTERNAL_SDK) instead.

        * wtf/Platform.h:

2017-01-26  Saam Barati  <sbarati@apple.com>

        Harden how the compiler references GC objects
        https://bugs.webkit.org/show_bug.cgi?id=167277
        <rdar://problem/30179506>

        Reviewed by Filip Pizlo.

        I made TinyPtrSet use bitwise_cast instead of static_cast
        for its singleEntry() function so that it can work on pointer-like
        types just as it can on actual pointer types.
        
        An example of where this matters is when you have TinyPtrSet<T>
        where T is defined to be a struct which wraps a pointer, e.g:
        
        struct T {
            void* m_pointer;
        }

        * wtf/TinyPtrSet.h:
        (WTF::TinyPtrSet::singleEntry):

2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce an item-provider-based pasteboard wrapper
        https://bugs.webkit.org/show_bug.cgi?id=167410

        Reviewed by Enrica Casucci.

        Adds an additional feature flag.

        * wtf/FeatureDefines.h:

2017-01-25  Konstantin Tokarev  <annulen@yandex.ru>

        Removed leftovers of pre-2015 VisualStudio support
        https://bugs.webkit.org/show_bug.cgi?id=167434

        Reviewed by Alex Christensen.

        * wtf/Compiler.h:
        * wtf/Platform.h:
        * wtf/StringExtras.h:

2017-01-25  Chris Dumez  <cdumez@apple.com>

        Disable Download attribute support on iOS
        https://bugs.webkit.org/show_bug.cgi?id=167337
        <rdar://problem/30154148>

        Reviewed by Alexey Proskuryakov.

        Disable Download attribute support on iOS as it currently does not work.

        * wtf/FeatureDefines.h:

2017-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a hook to include additional feature defines
        https://bugs.webkit.org/show_bug.cgi?id=167403

        Reviewed by Enrica Casucci.

        * wtf/Platform.h: Include AdditionalFeatureDefines.h, if it exists.

2017-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Fold USER_TIMING into WEB_TIMING and make it a RuntimeEnabledFeature
        https://bugs.webkit.org/show_bug.cgi?id=167394

        Reviewed by Ryosuke Niwa.

        * wtf/FeatureDefines.h:

2017-01-24  Konstantin Tokarev  <annulen@yandex.ru>

        VS2015 supports ref qualifiers
        https://bugs.webkit.org/show_bug.cgi?id=167368

        Reviewed by Sam Weinig.

        * wtf/Compiler.h: Enable
        WTF_COMPILER_SUPPORTS_CXX_REFERENCE_QUALIFIED_FUNCTIONS for VS2015

2017-01-24  Daniel Bates  <dabates@apple.com>

        StringView.split() should use an iterator design pattern instead of allocating a Vector
        https://bugs.webkit.org/show_bug.cgi?id=163225

        Reviewed by Darin Adler.

        Implement StringView.split() using an iterator design.

        Using an iterator design avoids the need to allocate a Vector of StringView objects,
        which is space-inefficient and error prone as the returned Vector may outlive the
        lifetime of the underlying string associated with the split (as StringView is a non-
        owning reference to a string).

        StringView.split() now returns a StringView::SplitResult object that implements begin()/end()
        to support iterating over StringView substrings delimited by the specified separator
        character. For example, to iterate over the 'c'-separated substrings of a StringView v,
        you can write:

        for (StringView substring : v.split('c'))
            // Do something with substring.

        * wtf/text/StringView.cpp:
        (WTF::StringView::SplitResult::Iterator::findNextSubstring): Advances the iterator to point to the
        next substring.
        (WTF::StringView::split): Modified to return a SplitResult::Iterator object instead of a Vector<StringView>.
        * wtf/text/StringView.h:
        (WTF::StringView::SplitResult::SplitResult):
        (WTF::StringView::SplitResult::Iterator::Iterator):
        (WTF::StringView::SplitResult::Iterator::operator*):
        (WTF::StringView::SplitResult::Iterator::operator==):
        (WTF::StringView::SplitResult::Iterator::operator!=):
        Implements the iterator interface.

2017-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Remove outdated ENABLE(CSP_NEXT) build flag
        https://bugs.webkit.org/show_bug.cgi?id=167252

        Reviewed by Brent Fulgham.

        * wtf/FeatureDefines.h:

2017-01-17  Andreas Kling  <akling@apple.com>

        Annotate FastMalloc functions with returns_nonnull attribute.
        <https://webkit.org/b/167144>

        Reviewed by Antti Koivisto.

        Decorate fastMalloc() and friends with __attribute__((returns_nonnull)) for supporting
        compilers that can do useful things with that information.

        * wtf/Compiler.h:
        * wtf/FastMalloc.h:

2017-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        ENABLE(USER_TIMING) Not Defined for Apple Windows or OS X Ports
        https://bugs.webkit.org/show_bug.cgi?id=116551
        <rdar://problem/13949830>

        Reviewed by Alex Christensen.

        * wtf/FeatureDefines.h:

2017-01-16  Joseph Pecoraro  <pecoraro@apple.com>

        Remove the REQUEST_ANIMATION_FRAME flag
        https://bugs.webkit.org/show_bug.cgi?id=156980
        <rdar://problem/25906849>

        Reviewed by Simon Fraser.

        * wtf/FeatureDefines.h:

2017-01-15  Sam Weinig  <sam@webkit.org>

        Add the ability to use numbers in makeString()
        https://bugs.webkit.org/show_bug.cgi?id=167087

        Reviewed by Darin Adler.

        Allow numbers to be easily used in makeString() and tryMakeString().

        For instance, you can now write:
            int amount = 7;
            auto foo = makeString("There are ", amount, " apples in the cart");

        * WTF.xcodeproj/project.pbxproj:
        Add new file.

        * wtf/text/IntegerToStringConversion.h:
        (WTF::writeNumberToBufferImpl):
        (WTF::writeNumberToBufferSigned):
        (WTF::writeNumberToBufferUnsigned):
        (WTF::lengthOfNumberAsStringImpl):
        (WTF::lengthOfNumberAsStringSigned):
        (WTF::lengthOfNumberAsStringUnsigned):
        Add variants of integer writing code that compute the length of the string
        that would be produced and writes the string to an existing buffer.

        (WTF::IntegerToStringConversionTrait<AtomicString>::flush): Deleted.
        (WTF::IntegerToStringConversionTrait<String>::flush): Deleted.
        (WTF::IntegerToStringConversionTrait<StringBuilder>::flush): Deleted.
        Move these traits to their respective classes.

        * wtf/text/AtomicString.h:
        (WTF::IntegerToStringConversionTrait<AtomicString>::flush):
        * wtf/text/StringBuilder.h:
        (WTF::IntegerToStringConversionTrait<StringBuilder>::flush):
        * wtf/text/WTFString.h:
        (WTF::IntegerToStringConversionTrait<String>::flush):
        Traits moved here from IntegerToStringConversion.h

        * wtf/text/StringConcatenateNumbers.h: Added.
        (WTF::StringTypeAdapter<int>::StringTypeAdapter<int>):
        (WTF::StringTypeAdapter<int>::length):
        (WTF::StringTypeAdapter<int>::is8Bit):
        (WTF::StringTypeAdapter<int>::writeTo):
        (WTF::StringTypeAdapter<int>::toString):
        (WTF::StringTypeAdapter<unsigned>::StringTypeAdapter<unsigned>):
        (WTF::StringTypeAdapter<unsigned>::length):
        (WTF::StringTypeAdapter<unsigned>::is8Bit):
        (WTF::StringTypeAdapter<unsigned>::writeTo):
        (WTF::StringTypeAdapter<unsigned>::toString):
        (WTF::StringTypeAdapter<float>::StringTypeAdapter<float>):
        (WTF::StringTypeAdapter<float>::length):
        (WTF::StringTypeAdapter<float>::is8Bit):
        (WTF::StringTypeAdapter<float>::writeTo):
        (WTF::StringTypeAdapter<float>::toString):
        (WTF::StringTypeAdapter<double>::StringTypeAdapter<double>):
        (WTF::StringTypeAdapter<double>::length):
        (WTF::StringTypeAdapter<double>::is8Bit):
        (WTF::StringTypeAdapter<double>::writeTo):
        (WTF::StringTypeAdapter<double>::toString):
        Add basic adaptors for int, unsigned, float, and double.

        (WTF::FormattedNumber::fixedPrecision):
        (WTF::FormattedNumber::fixedWidth):
        (WTF::FormattedNumber::length):
        (WTF::FormattedNumber::buffer):
        (WTF::FormattedNumber::stringView):
        (WTF::StringTypeAdapter<FormattedNumber>::StringTypeAdapter<FormattedNumber>):
        (WTF::StringTypeAdapter<FormattedNumber>::length):
        (WTF::StringTypeAdapter<FormattedNumber>::is8Bit):
        (WTF::StringTypeAdapter<FormattedNumber>::writeTo):
        (WTF::StringTypeAdapter<FormattedNumber>::toString):
        Add a special class, FormattedNumber, and an adaptor for it, allowing for
        fixedPrecision and fixedWidth representation of doubles.

2017-01-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        WebAssembly: Suppress warnings & errors in GCC
        https://bugs.webkit.org/show_bug.cgi?id=167049

        Reviewed by Sam Weinig.

        * wtf/LEBDecoder.h:
        (WTF::LEBDecoder::decodeInt):
        If T = int, it performs `-1 << shift`. It causes
        warning in GCC. Instead, we first cast it to the
        UnsignedT, perform operation and re-cast to the
        T.

2017-01-13  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(DETAILS_ELEMENT) guards
        https://bugs.webkit.org/show_bug.cgi?id=167042

        Reviewed by Alex Christensen.

        * wtf/FeatureDefines.h:

2017-01-11  Darin Adler  <darin@apple.com>

        Remove PassRefPtr from more of "platform"
        https://bugs.webkit.org/show_bug.cgi?id=166809

        Reviewed by Sam Weinig.

        * wtf/Ref.h: Changed the template so that a const Ref<T> does not prohibit non-const
        use of T. We can still use const Ref<const T> to express that. The earlier design
        was intentional, but was not consistent with either actual references or with
        other smart pointer classes like RefPtr. One way to see how much better this is,
        is to see all the many, many cases where we have const_cast just to work around
        this. I searched for those and included fixes for many in this patch.

2017-01-12  Chris Dumez  <cdumez@apple.com>

        [iOS] Implement support for KeyboardEvent.code
        https://bugs.webkit.org/show_bug.cgi?id=166932
        <rdar://problem/29972518>

        Reviewed by Darin Adler.

        Enable KEYBOARD_CODE_ATTRIBUTE feature on iOS.

        * wtf/FeatureDefines.h:

2017-01-11  Andreas Kling  <akling@apple.com>

        Crash when WebCore's GC heap grows way too large.
        <https://webkit.org/b/166875>
        <rdar://problem/27896585>

        Reviewed by Mark Lam.

        Publish the WTF::GB constant.

        * wtf/StdLibExtras.h:

2017-01-11  Anders Carlsson  <andersca@apple.com>

        navigator.plugins.refresh and WKContextRefreshPlugIns doesn't pick up changes to already-present plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=166942
        rdar://problem/29839194

        Reviewed by Sam Weinig.

        * wtf/spi/cf/CFBundleSPI.h:
        Add SPI declaration.

2017-01-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Should support key and code properties on keyboard events
        https://bugs.webkit.org/show_bug.cgi?id=166759

        Reviewed by Carlos Garcia Campos.

        * wtf/FeatureDefines.h: enable key and code properties support for GTK.

2017-01-08  Antti Koivisto  <antti@apple.com>

        Move cache coders to WTF
        https://bugs.webkit.org/show_bug.cgi?id=166825

        Rubber-stamped by Sam Weinig.

        Make it possible to use robust serialization of WTF types on the lower levels of the stack.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/persistence: Added.
        * wtf/persistence/Coder.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoder.h.
        (WebKit::NetworkCache::Coder::encode): Deleted.
        (WebKit::NetworkCache::Coder::decode): Deleted.
        * wtf/persistence/Coders.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.cpp.
        (WebKit::NetworkCache::Coder<AtomicString>::encode): Deleted.
        (WebKit::NetworkCache::Coder<AtomicString>::decode): Deleted.
        (WebKit::NetworkCache::Coder<CString>::encode): Deleted.
        (WebKit::NetworkCache::Coder<CString>::decode): Deleted.
        (WebKit::NetworkCache::Coder<String>::encode): Deleted.
        (WebKit::NetworkCache::decodeStringText): Deleted.
        (WebKit::NetworkCache::Coder<String>::decode): Deleted.
        (WebKit::NetworkCache::Coder<SHA1::Digest>::encode): Deleted.
        (WebKit::NetworkCache::Coder<SHA1::Digest>::decode): Deleted.
        (WebKit::NetworkCache::Coder<WebCore::HTTPHeaderMap>::encode): Deleted.
        (WebKit::NetworkCache::Coder<WebCore::HTTPHeaderMap>::decode): Deleted.
        * wtf/persistence/Coders.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.h.
        (WebKit::NetworkCache::Coder<std::optional<T>>::encode): Deleted.
        (WebKit::NetworkCache::Coder<std::optional<T>>::decode): Deleted.
        * wtf/persistence/Decoder.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.cpp.
        (WebKit::NetworkCache::Decoder::Decoder): Deleted.
        (WebKit::NetworkCache::Decoder::~Decoder): Deleted.
        (WebKit::NetworkCache::Decoder::bufferIsLargeEnoughToContain): Deleted.
        (WebKit::NetworkCache::Decoder::decodeFixedLengthData): Deleted.
        (WebKit::NetworkCache::Decoder::decodeNumber): Deleted.
        (WebKit::NetworkCache::Decoder::decode): Deleted.
        (WebKit::NetworkCache::Decoder::verifyChecksum): Deleted.
        * wtf/persistence/Decoder.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheDecoder.h.
        (WebKit::NetworkCache::Decoder::length): Deleted.
        (WebKit::NetworkCache::Decoder::currentOffset): Deleted.
        (WebKit::NetworkCache::Decoder::decodeEnum): Deleted.
        (WebKit::NetworkCache::Decoder::decode): Deleted.
        (WebKit::NetworkCache::Decoder::bufferIsLargeEnoughToContain): Deleted.
        * wtf/persistence/Encoder.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.cpp.
        (WebKit::NetworkCache::Encoder::Encoder): Deleted.
        (WebKit::NetworkCache::Encoder::~Encoder): Deleted.
        (WebKit::NetworkCache::Encoder::grow): Deleted.
        (WebKit::NetworkCache::Encoder::updateChecksumForData): Deleted.
        (WebKit::NetworkCache::Encoder::encodeFixedLengthData): Deleted.
        (WebKit::NetworkCache::Encoder::encodeNumber): Deleted.
        (WebKit::NetworkCache::Encoder::encode): Deleted.
        (WebKit::NetworkCache::Encoder::encodeChecksum): Deleted.
        * wtf/persistence/Encoder.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h.
        (WebKit::NetworkCache::Encoder::encodeEnum): Deleted.
        (WebKit::NetworkCache::Encoder::encode): Deleted.
        (WebKit::NetworkCache::Encoder::operator<<): Deleted.
        (WebKit::NetworkCache::Encoder::buffer): Deleted.
        (WebKit::NetworkCache::Encoder::bufferSize): Deleted.
        (WebKit::NetworkCache::Encoder::updateChecksumForNumber): Deleted.

2017-01-08  Konstantin Tokarev  <annulen@yandex.ru>

        Introduce CPU(X86_SSE2) instead of various SSE2 checks
        https://bugs.webkit.org/show_bug.cgi?id=166808

        Reviewed by Michael Catanzaro.

        Now copyLCharsFromUCharSource can use SSE2 implementation on non-Darwin
        OSes, and all SSE2 code paths are available for MSVC on x86 if /arch:SSE2
        or higher is enabled, and for MSVC on x86_64.

        * wtf/Platform.h:
        * wtf/text/ASCIIFastPath.h:
        (WTF::copyLCharsFromUCharSource):

2017-01-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Carets can split up marriages and families
        https://bugs.webkit.org/show_bug.cgi?id=166711
        <rdar://problem/29019333>

        Reviewed by Alex Christensen.

        There are four code points which should be allowed to accept emoji modifiers:
        - U+1F46A FAMILY
        - U+1F46B MAN AND WOMAN HOLDING HANDS
        - U+1F46C TWO MEN HOLDING HANDS
        - U+1F46D TWO WOMEN HOLDING HANDS

        Even though macOS's and iOS's emoji keyboard don't allow users to actually type
        these combinations, we may still receive them from other platforms. We should
        therefore treat these as joining sequences. Rendering isn't a problem because
        the fonts accept the emoji modifiers, but our caret placement code isn't educated
        about it. Currently, we treat these emoji groups as ligatures, allowing the caret
        to be placed between the two code points, which visually shows as being horizontally
        centered in the glyph. Instead, we should treat these code points as accepting
        emoji modifiers.

        Tests: editing/caret/emoji.html
               editing/caret/ios/emoji.html

        * wtf/text/TextBreakIterator.cpp:
        (WTF::cursorMovementIterator):

2017-01-05  Filip Pizlo  <fpizlo@apple.com>

        AutomaticThread timeout shutdown leaves a small window where notify() would think that the thread is still running
        https://bugs.webkit.org/show_bug.cgi?id=166742

        Reviewed by Geoffrey Garen.
        
        Remove the use of the RAII ThreadScope, since the use of RAII helped make this bug possible:
        we'd do ~ThreadScope after we had done ~LockHolder, so in between when we decided to shut
        down a thread and when it reported itself as being shut down, there was a window where a
        notify() call would get confused.
        
        Now, we run all thread shutdown stuff while the lock is held. We release the lock last. One
        API implication is that threadWillStop becomes threadIsStopping and it's called while the
        lock is held. This seems benign.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThread::start):
        (WTF::AutomaticThread::threadIsStopping):
        (WTF::AutomaticThread::ThreadScope::ThreadScope): Deleted.
        (WTF::AutomaticThread::ThreadScope::~ThreadScope): Deleted.
        (WTF::AutomaticThread::threadWillStop): Deleted.
        * wtf/AutomaticThread.h:

2017-01-04  Darin Adler  <darin@apple.com>

        Remove PassRefPtr use from the "html" directory, other improvements
        https://bugs.webkit.org/show_bug.cgi?id=166635

        Reviewed by Alex Christensen.

        * wtf/RefPtr.h:
        (WTF::makeRefPtr): Added.

2017-01-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed build fix after r210313
        https://bugs.webkit.org/show_bug.cgi?id=166676

        Revert `#pragma once` to ifdefs due to build failure.

        * wtf/text/StringView.h:

2017-01-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        Limit thread name appropriately
        https://bugs.webkit.org/show_bug.cgi?id=166676

        Reviewed by Sam Weinig.

        In some platform, the max length of thread names are limited.
        For example, the number of the max length is 32 in Windows and
        16 in Linux. But the specified thread name is typically long
        in WebKit like "com.apple.CoreIPC.ReceiveQueue"

        We port the logic substring the thread name in
        generic/WorkQueueGeneric.cpp to Threading. It retrieves the name
        "ReceiveQueue" from "com.apple.CoreIPC.ReceiveQueue". And apply
        the appropriate the thread name limit and use it on Linux and
        Windows environment.

        * wtf/Threading.cpp:
        (WTF::normalizeThreadName):
        (WTF::createThread):
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeCurrentThreadInternal):
        * wtf/ThreadingWin.cpp:
        (WTF::initializeCurrentThreadInternal):
        * wtf/generic/WorkQueueGeneric.cpp:
        (WorkQueue::platformInitialize):
        * wtf/text/StringView.h:
        (WTF::StringView::left):
        (WTF::StringView::right):
        (WTF::StringView::reverseFind):

2017-01-04  Sam Weinig  <sam@webkit.org>

        REGRESSION (r210257): com.apple.WebKit.WebContent.Development crashed in com.apple.WebCore: WebCore::ExceptionOr<WTF::Ref<WebCore::Database> >::operator= + 14
        <rdar://problem/29866398> 

        * wtf/Expected.h:
        (WTF::Expected::swap):
        Add missing calls to destroy() when moving things over each other in a union.

2017-01-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use prctl to name thread on Linux
        https://bugs.webkit.org/show_bug.cgi?id=166663

        Reviewed by Michael Catanzaro.

        It is quite useful if we can name threads. This name will be shown in GDB.
        While macOS uses pthread_setname_np, we can use prctl on Linux.

        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeCurrentThreadInternal):

2017-01-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        WorkQueueGeneric's platformInvalidate() can deadlock when called on the RunLoop's thread
        https://bugs.webkit.org/show_bug.cgi?id=166645

        Reviewed by Carlos Garcia Campos.

        WorkQueue can be destroyed on its invoking thread itself.
        The scenario is the following.

            1. Create WorkQueue (in thread A).
            2. Dispatch a task (in thread A, dispatching a task to thread B).
            3. Deref in thread A.
            4. The task is executed in thread B.
            5. Deref in thread B.
            6. The WorkQueue is destroyed, calling platformInvalidate in thread B.

        In that case, if platformInvalidate waits thread B's termination, it causes deadlock.
        We do not need to wait the thread termination.

        * wtf/WorkQueue.h:
        * wtf/generic/WorkQueueGeneric.cpp:
        (WorkQueue::platformInitialize):
        (WorkQueue::platformInvalidate):

2017-01-03  Sam Weinig  <sam@webkit.org>

        Make WTF::Expected support Ref template parameters
        https://bugs.webkit.org/show_bug.cgi?id=166662

        Reviewed by Alex Christensen.

        Tests: Added to TestWebKitAPI/Expected.cpp

        * wtf/Expected.h:
        (WTF::UnexpectedType::value):
        Add overloads based on this value type to allow getting at the value
        as an rvalue for moving the error into the Expected.

        (WTF::Expected::Expected):
        Add overload that takes an ErrorType/UnexpectedType<ErrorType> as an rvalue.

        (WTF::Expected::swap):
        Move the temporary value/error rather than copying.

2017-01-02  Julien Brianceau  <jbriance@cisco.com>

        Remove sh4 specific code from JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=166640

        Reviewed by Filip Pizlo.

        * wtf/Platform.h:

2017-01-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Leverage Substring to create new AtomicStringImpl for StaticStringImpl and SymbolImpl
        https://bugs.webkit.org/show_bug.cgi?id=166636

        Reviewed by Darin Adler.

        Previously we always create the full atomic string if we need to create the same string
        based on the given value. For example, when generating AtomicStringImpl from the SymbolImpl,
        we need to create a new AtomicStringImpl since SymbolImpl never becomes `isAtomic() == true`.
        But it is costly.

        This patch leverages the substring system of StringImpl. Instead of allocating the completely
        duplicate string, we create a substring StringImpl that shares the same content with the
        base string.

        * wtf/text/AtomicStringImpl.cpp:
        (WTF::stringTable):
        (WTF::addToStringTable):
        (WTF::addSubstring):
        (WTF::AtomicStringImpl::addSlowCase):
        (WTF::AtomicStringImpl::remove):
        (WTF::AtomicStringImpl::lookUpSlowCase):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::StaticStringImpl::operator StringImpl&):

2017-01-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use StaticStringImpl instead of StaticASCIILiteral
        https://bugs.webkit.org/show_bug.cgi?id=166586

        Reviewed by Darin Adler.

        It is more handy way to define static StringImpl. It calculates the length
        and hash value by using the constexpr constructor and function. So we do
        not need to calculate these things in Perl script.
        And it allows us to use StaticStringImpl in the hand written C++ code.
        Previously, we need to calculate the length and hash value by hand if we
        would like to use StaticASCIILiteral in the hand written C++ code, and it
        meant that we cannot use it at all in the hand written C++ code.

        * wtf/text/AtomicStringImpl.cpp:
        (WTF::AtomicStringImpl::addSlowCase):
        (WTF::AtomicStringImpl::lookUpSlowCase):
        * wtf/text/AtomicStringImpl.h:
        * wtf/text/StringImpl.h:
        * wtf/text/SymbolImpl.h:
        * wtf/text/UniquedStringImpl.h:

2017-01-02  Andreas Kling  <akling@apple.com>

        Discard media controls JS/CSS caches under memory pressure.
        <https://webkit.org/b/166639>

        Reviewed by Antti Koivisto.

        * wtf/text/WTFString.h:
        (WTF::String::clearImplIfNotShared): Add a helper for clearing a String if the underlying
        StringImpl is not referenced by anyone else.

2016-12-22  Mark Lam  <mark.lam@apple.com>

        De-duplicate finally blocks.
        https://bugs.webkit.org/show_bug.cgi?id=160168

        Reviewed by Saam Barati.

        Added some methods to bring SegmentedVector closer to parity with Vector.

        * wtf/SegmentedVector.h:
        (WTF::SegmentedVector::first):
        (WTF::SegmentedVector::last):
        (WTF::SegmentedVector::takeLast):

2016-12-19  Mark Lam  <mark.lam@apple.com>

        Rolling out r209974 and r209952. They break some websites in mysterious ways. Step 2: Rollout r209952.
        https://bugs.webkit.org/show_bug.cgi?id=166049

        Not reviewed.

        * wtf/SegmentedVector.h:
        (WTF::SegmentedVector::last):
        (WTF::SegmentedVector::first): Deleted.
        (WTF::SegmentedVector::takeLast): Deleted.

2016-12-16  Mark Lam  <mark.lam@apple.com>

        Add predecessor info to dumps from JSC_dumpBytecodeLivenessResults=true.
        https://bugs.webkit.org/show_bug.cgi?id=165958

        Reviewed by Keith Miller.

        Added some methods to bring SegmentedVector closer to parity with Vector.

        * wtf/SegmentedVector.h:
        (WTF::SegmentedVector::first):
        (WTF::SegmentedVector::last):
        (WTF::SegmentedVector::takeLast):

2016-12-16  Michael Saboff  <msaboff@apple.com>

        REGRESSION: HipChat and Mail sometimes hang beneath JSC::Heap::lastChanceToFinalize()
        https://bugs.webkit.org/show_bug.cgi?id=165962

        Reviewed by Filip Pizlo.

        There is an inherent race in Condition::waitFor() where the timeout can happen just before
        a notify from another thread.

        Fixed this by adding a condition variable and flag to each AutomaticThread.  The flag
        is used to signify to a notifying thread that the thread is waiting.  That flag is set
        in the waiting thread before calling waitFor() and cleared by another thread when it
        notifies the thread.  The access to that flag happens when the lock is held.
        Now the waiting thread checks if the flag after a timeout to see that it in fact should
        proceed like a normal notification.

        The added condition variable allows us to target a specific thread.  We used to keep a list
        of waiting threads, now we keep a list of all threads.  To notify one thread, we look for
        a waiting thread and notify it directly.  If we can't find a waiting thread, we start a
        sleeping thread.

        We notify all threads by waking all waiting threads and starting all sleeping threads.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThreadCondition::notifyOne):
        (WTF::AutomaticThreadCondition::notifyAll):
        (WTF::AutomaticThread::isWaiting):
        (WTF::AutomaticThread::notify):
        (WTF::AutomaticThread::start):
        * wtf/AutomaticThread.h:

2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix after r209910

        Unreviewed.

        * wtf/Platform.h:

2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop reinterpret_casting UBreakIterators to the undefined type TextBreakIterator
        https://bugs.webkit.org/show_bug.cgi?id=165931

        We have a class declaration for TextBreakIterator but no definition for it. When we
        create an ICU UBreakIterator, we immediately reinterpret_cast it to this undefined
        type, and pass it around our code inside WebCore. Then, whenever we want to actually
        use this iterator, we reinterpret_cast it back to UBreakIterator. This is likely due
        to some ports historically implementing breaking interators on top of other libraries
        other than ICU; however, now, all ports use ICU. Because this internal type is not
        helpful and just adds confusion, we should just call our breaking iterators what
        they are: UBreakIterators.

        This patch is a mechanical replacement of TextBreakIterator to UBreakIterator and
        removes the functions we were calling which pass through directly to ubrk_*().

        Reviewed by Alex Christensen.

        * wtf/text/LineBreakIteratorPoolICU.h:
        (WTF::LineBreakIteratorPool::take):
        (WTF::LineBreakIteratorPool::put):
        * wtf/text/StringView.cpp:
        (WTF::StringView::GraphemeClusters::Iterator::Impl::computeIndexEnd):
        * wtf/text/TextBreakIterator.cpp:
        (WTF::initializeIterator):
        (WTF::initializeIteratorWithRules):
        (WTF::setTextForIterator):
        (WTF::setContextAwareTextForIterator):
        (WTF::wordBreakIterator):
        (WTF::sentenceBreakIterator):
        (WTF::cursorMovementIterator):
        (WTF::acquireLineBreakIterator):
        (WTF::releaseLineBreakIterator):
        (WTF::openLineBreakIterator):
        (WTF::closeLineBreakIterator):
        (WTF::getNonSharedCharacterBreakIterator):
        (WTF::cacheNonSharedCharacterBreakIterator):
        (WTF::isWordTextBreak):
        (WTF::numGraphemeClusters):
        (WTF::numCharactersInGraphemeClusters):
        (WTF::textBreakFirst): Deleted.
        (WTF::textBreakLast): Deleted.
        (WTF::textBreakNext): Deleted.
        (WTF::textBreakPrevious): Deleted.
        (WTF::textBreakPreceding): Deleted.
        (WTF::textBreakFollowing): Deleted.
        (WTF::textBreakCurrent): Deleted.
        (WTF::isTextBreak): Deleted.
        * wtf/text/TextBreakIterator.h:
        (WTF::LazyLineBreakIterator::lastCharacter):
        (WTF::LazyLineBreakIterator::secondToLastCharacter):
        (WTF::LazyLineBreakIterator::setPriorContext):
        (WTF::LazyLineBreakIterator::updatePriorContext):
        (WTF::LazyLineBreakIterator::resetPriorContext):
        (WTF::LazyLineBreakIterator::priorContextLength):
        (WTF::LazyLineBreakIterator::get):
        (WTF::NonSharedCharacterBreakIterator::operator UBreakIterator*):
        (WTF::NonSharedCharacterBreakIterator::operator TextBreakIterator*): Deleted.

2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=165937

        Reviewed by Simon Fraser.

        * WTF.xcodeproj/project.pbxproj:

2016-12-15  Konstantin Tokarev  <annulen@yandex.ru>

        Added missing override and final specifiers
        https://bugs.webkit.org/show_bug.cgi?id=165903

        Reviewed by Darin Adler.

        * wtf/RunLoop.h:

2016-12-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Optimize Kraken stringify
        https://bugs.webkit.org/show_bug.cgi?id=165857

        Reviewed by Darin Adler.

        Kraken json-stringify-tinderbox performance heavily relies on StringBuilder::appendQuotedJSONString.
        According to the result produced by Linux `perf`, it occupies 28% of execution time.

        We tighten the hottest loop in the above function. We create the super fast path for non escaping case.
        And add " and \ cases (since including " in the string is common). Then we fallback to the slow case.

        It improves the performance 5.5% in Kraken json-stringify-tinderbox in MBP.

            Performance result in my MBP (dandelion).

                Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
                between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
                jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
                with 95% confidence intervals in milliseconds.

                                                   baseline                  patched

                json-stringify-tinderbox        29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster

                <arithmetic>                    29.243+-0.241      ^      27.701+-0.235         ^ definitely 1.0557x faster

            Performance result in my Linux laptop (hanayamata).

                Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
                between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
                jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
                with 95% confidence intervals in milliseconds.

                                                   baseline                  patched

                json-stringify-tinderbox        26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster

                <arithmetic>                    26.711+-0.475      ^      25.255+-0.034         ^ definitely 1.0577x faster

        * wtf/text/StringBuilder.cpp:
        (WTF::appendQuotedJSONStringInternalSlow):
        (WTF::appendQuotedJSONStringInternal):

2016-12-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r209795.
        https://bugs.webkit.org/show_bug.cgi?id=165853

        rolled out the wrong revision (Requested by pizlo on #webkit).

        Reverted changeset:

        "MarkedBlock::marksConveyLivenessDuringMarking should take
        into account collection scope"
        https://bugs.webkit.org/show_bug.cgi?id=165741
        http://trac.webkit.org/changeset/209795

2016-12-14  Enrique Ocaña González  <eocanha@igalia.com>

        REGRESSION(r207879-207891): [GStreamer] Introduced many layout test failures and crashes, bots exiting early
        https://bugs.webkit.org/show_bug.cgi?id=164022

        Reviewed by Xabier Rodriguez-Calvar.

        * wtf/glib/GLibUtilities.h:
        Added new macros to convert gulong to/from gpointer.

2016-12-14  Gavin Barraclough  <barraclough@apple.com>

        MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
        https://bugs.webkit.org/show_bug.cgi?id=165741

        Unreviewed, re-landing this with fix (revert erroneous change to Options).

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):
        (WTF::initializeLogFile):
        (WTF::dataFile):
        * wtf/DataLog.h:
        * wtf/LockedPrintStream.cpp: Added.
        (WTF::LockedPrintStream::LockedPrintStream):
        (WTF::LockedPrintStream::~LockedPrintStream):
        (WTF::LockedPrintStream::vprintf):
        (WTF::LockedPrintStream::flush):
        (WTF::LockedPrintStream::begin):
        (WTF::LockedPrintStream::end):
        * wtf/LockedPrintStream.h: Added.
        * wtf/PrintStream.cpp:
        (WTF::PrintStream::printfVariableFormat):
        (WTF::PrintStream::begin):
        (WTF::PrintStream::end):
        * wtf/PrintStream.h:
        (WTF::PrintStream::atomically):
        (WTF::PrintStream::print):
        (WTF::PrintStream::println):
        (WTF::PrintStream::printImpl):
        (WTF::>::unpack):
        (WTF::FormatImpl::FormatImpl):
        (WTF::FormatImpl::dump):
        (WTF::format):
        (WTF::printInternal):
        * wtf/RecursiveLockAdapter.h: Added.
        (WTF::RecursiveLockAdapter::RecursiveLockAdapter):
        (WTF::RecursiveLockAdapter::lock):
        (WTF::RecursiveLockAdapter::unlock):
        (WTF::RecursiveLockAdapter::tryLock):
        (WTF::RecursiveLockAdapter::isLocked):
        * wtf/WordLock.cpp:
        * wtf/WordLock.h:

2016-12-14  Gavin Barraclough  <barraclough@apple.com>

        MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
        https://bugs.webkit.org/show_bug.cgi?id=165741

        Unreviewed rollout due to performance regression.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):
        (WTF::initializeLogFile):
        (WTF::dataFile):
        * wtf/DataLog.h:
        * wtf/LockedPrintStream.cpp: Removed.
        * wtf/LockedPrintStream.h: Removed.
        * wtf/PrintStream.cpp:
        (WTF::PrintStream::printfVariableFormat): Deleted.
        (WTF::PrintStream::begin): Deleted.
        (WTF::PrintStream::end): Deleted.
        * wtf/PrintStream.h:
        (WTF::PrintStream::print):
        (WTF::PrintStream::println):
        (WTF::PrintStream::atomically): Deleted.
        (WTF::PrintStream::printImpl): Deleted.
        (): Deleted.
        (WTF::>::unpack): Deleted.
        (WTF::FormatImpl::FormatImpl): Deleted.
        (WTF::FormatImpl::dump): Deleted.
        (WTF::format): Deleted.
        * wtf/RecursiveLockAdapter.h: Removed.
        * wtf/WordLock.cpp:
        * wtf/WordLock.h:

2016-12-13  JF Bastien  <jfbastien@apple.com>

        std::expected: fix rvalue forwarding issues
        https://bugs.webkit.org/show_bug.cgi?id=165812

        Reviewed by Mark Lam.

        * wtf/Expected.h:
        (WTF::UnexpectedType::UnexpectedType):
        (WTF::ExpectedDetail::Base::Base):
        (WTF::Expected::Expected):

2016-12-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r209544.

        Looks like r209489 did not cause the performance regression
        after all

        Reverted changeset:

        "Unreviewed, rolling out r209489."
        https://bugs.webkit.org/show_bug.cgi?id=165550
        http://trac.webkit.org/changeset/209544

2016-12-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r209725.
        https://bugs.webkit.org/show_bug.cgi?id=165811

        "Broke ARMv7 builds" (Requested by msaboff on #webkit).

        Reverted changeset:

        "REGRESSION(r209653): speedometer crashes making virtual slow
        path tailcalls"
        https://bugs.webkit.org/show_bug.cgi?id=165748
        http://trac.webkit.org/changeset/209725

2016-12-13  JF Bastien  <jfbastien@apple.com>

        [WTF] Turn tryMakeString(), makeString() into variadic templates
        https://bugs.webkit.org/show_bug.cgi?id=147142

        Reviewed by Mark Lam.

        I wrote this patch while improving WebAssembly's error messages,
        and only found this bug afterwards. My implementation does the
        bare minimum to make this code variadic without changing
        behavior. I think it's better to go with this baby step first, and
        improve the code later.

        Notable, for my WebAssembly patch I also taught the code to handle
        integers and other types (including WebAssembly types). A
        follow-up could rely on ADL magic to pretty-format these other
        types.

        * wtf/text/StringConcatenate.h:
        (WTF::sumWithOverflow): This unconditionally does the sum for all
        inputs, which the compiler is more likely to appreciate (because
        it's the common case) compared to testing for overflow and bailing
        on each addition
        (WTF::are8Bit): are: the plural of is!
        (WTF::makeStringAccumulator): accumulate strings
        (WTF::tryMakeStringFromAdapters): a small helper which creates the string adapters
        (WTF::tryMakeString): expose out of WTF, since it's part of this file's used API
        (WTF::makeString): make it variadic

2016-12-13  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, silence -Wsuggest-attribute for GCC with pragmas

        * wtf/PrintStream.cpp:
        (WTF::PrintStream::printfVariableFormat):

2016-12-12  Michael Saboff  <msaboff@apple.com>

        REGRESSION(r209653): speedometer crashes making virtual slow path tailcalls
        https://bugs.webkit.org/show_bug.cgi?id=165748

        Reviewed by Filip Pizlo.

        Rolling back in r209653, r209654, r209663, and r209673.

        * wtf/Platform.h:

2016-12-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r209703.
        https://bugs.webkit.org/show_bug.cgi?id=165749

        Broke Apple builds (Requested by annulen|home on #webkit).

        Reverted changeset:

        "Unreviewed, use WTF_ATTRIBUTE_PRINTF instead of clang pragma"
        http://trac.webkit.org/changeset/209703

2016-12-12  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, use WTF_ATTRIBUTE_PRINTF instead of clang pragma

        * wtf/PrintStream.cpp:
        (WTF::PrintStream::printfVariableFormat):
        * wtf/PrintStream.h:

2016-12-11  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, guarded clang pragma with COMPILER(CLANG) to fix -Werror

        * wtf/PrintStream.cpp:
        (WTF::PrintStream::printfVariableFormat):

2016-12-11  Filip Pizlo  <fpizlo@apple.com>

        Change to use #pragma once (requested by Darin Adler).

        * wtf/RecursiveLockAdapter.h:

2016-12-11  Filip Pizlo  <fpizlo@apple.com>

        Change to use #pragma once (requested by Darin Adler).

        * wtf/LockedPrintStream.h:

2016-12-10  Filip Pizlo  <fpizlo@apple.com>

        MarkedBlock::marksConveyLivenessDuringMarking should take into account collection scope
        https://bugs.webkit.org/show_bug.cgi?id=165741

        Reviewed by Saam Barati.
        
        To find this bug, I needed to seriously beef up our logging infrastructure.
        
        It's now the case that:
        
            dataLog(...);
        
        will print its output atomically. This happens with some careful magic:
        
        - dataFile() is now a LockedPrintStream that locks around print().
        
        - The lock is a recursive lock via RecursiveLockAdapter<>, so if the dump methods end
          up calling back into dataLog() then it just works. This is important: say the dump()
          calls a getter that itself does logging, maybe because it's encountering badness and
          wants to report it before crashing).
        
        - The lock is a WordLock so that ParkingLot and Lock can keep using dataLog() for
          debugging. We probably won't need to debug WordLock anytime soon - the algorithm is
          so simple.
        
        - LockedPrintStream::print(...) causes the print callbacks of its arguments to run on
          the underlying PrintStream, so that you don't need to do recursive lock acquisition
          on each individual argument and whatever printing it does recursively.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):
        (WTF::initializeLogFile):
        (WTF::dataFile):
        * wtf/DataLog.h:
        * wtf/LockedPrintStream.cpp: Added.
        (WTF::LockedPrintStream::LockedPrintStream):
        (WTF::LockedPrintStream::~LockedPrintStream):
        (WTF::LockedPrintStream::vprintf):
        (WTF::LockedPrintStream::flush):
        (WTF::LockedPrintStream::begin):
        (WTF::LockedPrintStream::end):
        * wtf/LockedPrintStream.h: Added.
        * wtf/PrintStream.cpp:
        (WTF::PrintStream::printfVariableFormat):
        (WTF::PrintStream::begin):
        (WTF::PrintStream::end):
        * wtf/PrintStream.h:
        (WTF::PrintStream::atomically):
        (WTF::PrintStream::print):
        (WTF::PrintStream::println):
        (WTF::PrintStream::printImpl):
        (WTF::>::unpack):
        (WTF::FormatImpl::FormatImpl):
        (WTF::FormatImpl::dump):
        (WTF::format):
        (WTF::printInternal):
        * wtf/RecursiveLockAdapter.h: Added.
        (WTF::RecursiveLockAdapter::RecursiveLockAdapter):
        (WTF::RecursiveLockAdapter::lock):
        (WTF::RecursiveLockAdapter::unlock):
        (WTF::RecursiveLockAdapter::tryLock):
        (WTF::RecursiveLockAdapter::isLocked):
        * wtf/WordLock.cpp:
        * wtf/WordLock.h:

2016-12-11  Darin Adler  <darin@apple.com>

        Use std::vsnprintf instead of vasprintf
        https://bugs.webkit.org/show_bug.cgi?id=165740

        Reviewed by Sam Weinig.

        * wtf/Platform.h: Remove HAVE_VASPRINTF.
        * wtf/StringExtras.h: Change the vsnprintf workaround to be used only
        in older versions of Visual Studio, since the problem it works around
        was resolved in Visual Studio 2015.

2016-12-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r209653, r209654, r209663, and
        r209673.
        https://bugs.webkit.org/show_bug.cgi?id=165739

        speedometer crashes (Requested by pizlo on #webkit).

        Reverted changesets:

        "JSVALUE64: Pass arguments in platform argument registers when
        making JavaScript calls"
        https://bugs.webkit.org/show_bug.cgi?id=160355
        http://trac.webkit.org/changeset/209653

        "Unreviewed build fix for 32 bit builds."
        http://trac.webkit.org/changeset/209654

        "Unreviewed build fix for the CLOOP after r209653"
        http://trac.webkit.org/changeset/209663

        "REGRESSION(r209653) Crash in CallFrameShuffler::snapshot()"
        https://bugs.webkit.org/show_bug.cgi?id=165728
        http://trac.webkit.org/changeset/209673

2016-12-10  Chris Dumez  <cdumez@apple.com>

        Avoid calling shrink() in the Vector destructor
        https://bugs.webkit.org/show_bug.cgi?id=165675

        Reviewed by Daniel Bates.

        Avoid calling shrink() in the Vector destructor to avoid function call
        overhead and unnecessarily reseting m_size to 0.

        * wtf/Vector.h:
        (WTF::Vector::~Vector):
        (WTF::Vector::asanSetBufferSizeToFullCapacity):
        (WTF::minCapacity>::asanSetBufferSizeToFullCapacity):

2016-12-09  Michael Saboff  <msaboff@apple.com>

        JSVALUE64: Pass arguments in platform argument registers when making JavaScript calls
        https://bugs.webkit.org/show_bug.cgi?id=160355

        Reviewed by Filip Pizlo.

        Added a new build option ENABLE_VM_COUNTERS to enable JIT'able counters.
        The default is for the option to be off.

        * wtf/Platform.h:
        Added ENABLE_VM_COUNTERS

2016-12-09  Geoffrey Garen  <ggaren@apple.com>

        Deploy OrdinalNumber in JSC::SourceCode
        https://bugs.webkit.org/show_bug.cgi?id=165687

        Reviewed by Michael Saboff.

        * wtf/text/OrdinalNumber.h:
        (WTF::OrdinalNumber::operator>): Added a >.

2016-12-09  Geoffrey Garen  <ggaren@apple.com>

        TextPosition and OrdinalNumber should be more like idiomatic numbers
        https://bugs.webkit.org/show_bug.cgi?id=165678

        Reviewed by Filip Pizlo.

        * wtf/text/TextPosition.h:
        (WTF::TextPosition::minimumPosition): Deleted. Just use the default
        constructor. Other numbers use their default constructors to mean zero.

        Any time you need a comment that says "used as a default value", that's
        a pretty good indicator that it should be the default constructor.

2016-12-09  Geoffrey Garen  <ggaren@apple.com>

        Moved OrdinalNumber into its own file
        https://bugs.webkit.org/show_bug.cgi?id=165663

        Reviewed by Saam Barati.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/text/OrdinalNumber.h: Copied from Source/WTF/wtf/text/TextPosition.h.
        (WTF::TextPosition::TextPosition): Deleted.
        (WTF::TextPosition::operator==): Deleted.
        (WTF::TextPosition::operator!=): Deleted.
        (WTF::TextPosition::minimumPosition): Deleted.
        (WTF::TextPosition::belowRangePosition): Deleted.
        * wtf/text/TextPosition.h:
        (WTF::OrdinalNumber::fromZeroBasedInt): Deleted.
        (WTF::OrdinalNumber::fromOneBasedInt): Deleted.
        (WTF::OrdinalNumber::OrdinalNumber): Deleted.
        (WTF::OrdinalNumber::zeroBasedInt): Deleted.
        (WTF::OrdinalNumber::oneBasedInt): Deleted.
        (WTF::OrdinalNumber::operator==): Deleted.
        (WTF::OrdinalNumber::operator!=): Deleted.
        (WTF::OrdinalNumber::first): Deleted.
        (WTF::OrdinalNumber::beforeFirst): Deleted.

2016-12-08  David Kilzer  <ddkilzer@apple.com>

        Always check the return value of pthread_key_create()
        <https://webkit.org/b/165274>

        Reviewed by Darin Adler.

        * wtf/ThreadIdentifierDataPthreads.cpp:
        (WTF::ThreadIdentifierData::initializeOnce): Make the code more
        readable by assigning a variable to the result of
        pthread_key_create().  This matches the idiom used elsewhere.

2016-12-08  Keith Miller  <keith_miller@apple.com>

        Add 64-bit signed LEB decode method
        https://bugs.webkit.org/show_bug.cgi?id=165630

        Reviewed by Ryosuke Niwa.

        Add int64 LEB decode and fix some 64-bit specific issues
        with the decoder. There is also a fix where we would allow
        LEBs with canonical length + 1 size that is fixed by this
        patch.

        * wtf/LEBDecoder.h:
        (WTF::LEBDecoder::decodeUInt):
        (WTF::LEBDecoder::decodeInt):
        (WTF::LEBDecoder::decodeUInt32):
        (WTF::LEBDecoder::decodeUInt64):
        (WTF::LEBDecoder::decodeInt32):
        (WTF::LEBDecoder::decodeInt64):

2016-12-08  Anders Carlsson  <andersca@apple.com>

        Defer sending Mach messages if the queue is full
        https://bugs.webkit.org/show_bug.cgi?id=165622
        rdar://problem/29518036

        Reviewed by Brady Eidson.

        Add new SPI.

        * wtf/spi/darwin/XPCSPI.h:

2016-12-06  Filip Pizlo  <fpizlo@apple.com>

        Concurrent GC should be stable enough to land enabled on X86_64
        https://bugs.webkit.org/show_bug.cgi?id=164990

        Reviewed by Geoffrey Garen.
        
        Adds the ability to say:
        
        auto locker = holdLock(any type of lock)
        
        Instead of having to say:
        
        Locker<LockType> locker(locks of type LockType)
        
        I think that we should use "auto locker = holdLock(lock)" as the default way that we acquire
        locks unless we need to use a special locker type.
        
        This also adds the ability to safepoint a lock. Safepointing a lock is basically a super fast
        way of unlocking it fairly and then immediately relocking it - i.e. letting anyone who is
        waiting to run without losing steam of there is noone waiting.

        * wtf/Lock.cpp:
        (WTF::LockBase::safepointSlow):
        * wtf/Lock.h:
        (WTF::LockBase::safepoint):
        * wtf/LockAlgorithm.h:
        (WTF::LockAlgorithm::safepointFast):
        (WTF::LockAlgorithm::safepoint):
        (WTF::LockAlgorithm::safepointSlow):
        * wtf/Locker.h:
        (WTF::AbstractLocker::AbstractLocker):
        (WTF::Locker::tryLock):
        (WTF::Locker::operator bool):
        (WTF::Locker::Locker):
        (WTF::Locker::operator=):
        (WTF::holdLock):
        (WTF::tryHoldLock):

2016-12-08  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r209489.

        Likely caused large regressions on JetStream, Sunspider and
        Speedometer

        Reverted changeset:

        "Add system trace points for JavaScript VM entry/exit"
        https://bugs.webkit.org/show_bug.cgi?id=165550
        http://trac.webkit.org/changeset/209489

2016-12-07  Simon Fraser  <simon.fraser@apple.com>

        Add system trace points for JavaScript VM entry/exit
        https://bugs.webkit.org/show_bug.cgi?id=165550

        Reviewed by Tim Horton.
        
        Add trace points for entry/exit into/out of the JS VM.

        * wtf/SystemTracing.h:

2016-12-06  Alexey Proskuryakov  <ap@apple.com>

        Correct SDKROOT values in xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=165487
        rdar://problem/29539209

        Reviewed by Dan Bernstein.

        Fix suggested by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2016-12-06  Michael Saboff  <msaboff@apple.com>

        REGRESSION(r209399): Causes crashes when dumping JIT disassembly
        https://bugs.webkit.org/show_bug.cgi?id=165483

        Reviewed by Geoffrey Garen.

        Fixed the RELEASE_ASSERT() to check that the 6 character string is terminated by a null
        character.

        * wtf/SixCharacterHash.cpp:
        (WTF::sixCharacterHashStringToInteger):

2016-12-04  Darin Adler  <darin@apple.com>

        Use ASCIICType more, and improve it a little bit
        https://bugs.webkit.org/show_bug.cgi?id=165360

        Reviewed by Sam Weinig.

        * wtf/ASCIICType.h: Added declarations of all the functions to the top of the file,
        so we have a list of what's available, not just a mix of that and the implementation.

        * wtf/HexNumber.h:
        (WTF::Internal::hexDigitsForMode): Moved lowerHexDigits and upperHexDigits
        inside this function.
        (WTF::appendByteAsHex): Use auto.
        (WTF::placeByteAsHexCompressIfPossible): Ditto.
        (WTF::placeByteAsHex): Ditto.
        (WTF::appendUnsignedAsHex): Ditto.
        (WTF::appendUnsigned64AsHex): Ditto.
        (WTF::appendUnsignedAsHexFixedSize): Ditto.
        (WTF::isHexDigit): Deleted.
        (WTF::uncheckedHexDigit): Deleted.
        (WTF::hexDigitValue): Deleted.
        (WTF::uncheckedHexDigitValue): Deleted.

        * wtf/SixCharacterHash.cpp:
        (WTF::sixCharacterHashStringToInteger): Use isASCIIUpper, isASCIILower, and
        isASCIIDigit. Also added some FIXMEs; for some reason this function uses
        RELEASE_ASSERT to abort if the passed-in string is not six characters long,
        and it's not clear to me why this is so critical to assert.
        (WTF::integerToSixCharacterHashString): Moved the table inside this function,
        obviating the need for a macro named TABLE.

        * wtf/dtoa/bignum.cc:
        (WTF::double_conversion::HexCharValue): Deleted.
        (WTF::double_conversion::Bignum::AssignHexString): Use toASCIIHexValue.
        * wtf/dtoa/double-conversion.cc:
        (WTF::double_conversion::StringToDoubleConverter::StringToDouble): Use isASCIIDigit.

        * wtf/text/StringBuilder.cpp:
        (WTF::appendQuotedJSONStringInternal): Use upperNibbleToASCIIHexDigit and
        lowerNibbleToASCIIHexDigit.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::convertToUppercaseWithoutLocale): Use toASCIIUpper.
        Removed the workaround for a bug that was fixed in Visual Studio 2013.

2016-12-05  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r208985): SafariForWebKitDevelopment Symbol Not Found looking for method with WTF::Optional
        https://bugs.webkit.org/show_bug.cgi?id=165351

        Reviewed by Yusuke Suzuki.

        Include a slimmed down version of WTF::Optional which older versions
        of Safari still depend on for a JavaScriptCore exported symbol.
        To prevent misuse name it WTF::DeprecatedOptional and use it only in
        the one instance it is needed.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/DeprecatedOptional.h: Added.
        (WTF::Optional::operator bool):
        (WTF::Optional::value):
        (WTF::Optional::asPtr):

2016-12-05  Konstantin Tokarev  <annulen@yandex.ru>

        Add __STDC_FORMAT_MACROS before inttypes.h is included
        https://bugs.webkit.org/show_bug.cgi?id=165374

        We need formatting macros like PRIu64 to be available in all places where
        inttypes.h header is used. All these usages get inttypes.h definitions
        via wtf/Assertions.h header, except SQLiteFileSystem.cpp where formatting
        macros are not used anymore since r185129.

        This patch fixes multiple build errors with MinGW and reduces number of
        independent __STDC_FORMAT_MACROS uses in the code base.

        Reviewed by Darin Adler.

        * wtf/Assertions.h: Define __STDC_FORMAT_MACROS.
        * wtf/StdLibExtras.h: Remove definition of PRId64 for Windows, as we
        have __STDC_FORMAT_MACROS defined now.

2016-12-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Refactor SymbolImpl layout
        https://bugs.webkit.org/show_bug.cgi?id=165247

        Reviewed by Darin Adler.

        This patch moves SymbolImpl initialization from StringImpl to SymbolImpl.
        In SymbolImpl, we create the appropriate fields. At that time, these fields
        should be aligned to the BufferSubstring StringImpl.

        And we newly create the `m_flags` in SymbolImpl. Instead of using special
        StringImpl::null(), we store s_flagIsNullSymbol flag here. In WTF, we have
        the invariant that StringImpl::empty() is the only atomic empty string.
        But StringImpl::null() breaks this invariant. Using a special flag is safer
        way to represent the null Symbol `Symbol()`.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/StdLibExtras.h:
        (WTF::roundUpToMultipleOfImpl0):
        (WTF::roundUpToMultipleOfImpl):
        (WTF::roundUpToMultipleOf):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::~StringImpl):
        (WTF::StringImpl::createSymbol): Deleted.
        (WTF::StringImpl::createNullSymbol): Deleted.
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::isAtomic):
        (WTF::StringImpl::StringImpl):
        (WTF::StringImpl::requiresCopy):
        (WTF::StringImpl::isNullSymbol): Deleted.
        (WTF::StringImpl::symbolAwareHash): Deleted.
        (WTF::StringImpl::existingSymbolAwareHash): Deleted.
        (WTF::StringImpl::null): Deleted.
        (WTF::StringImpl::extractFoldedStringInSymbol): Deleted.
        (WTF::StringImpl::symbolRegistry): Deleted.
        (WTF::StringImpl::hashForSymbol): Deleted.
        * wtf/text/StringStatics.cpp:
        (WTF::StringImpl::nextHashForSymbol): Deleted.
        * wtf/text/SymbolImpl.cpp: Copied from Source/WTF/wtf/text/SymbolRegistry.cpp.
        (WTF::SymbolImpl::nextHashForSymbol):
        (WTF::SymbolImpl::create):
        (WTF::SymbolImpl::createNullSymbol):
        * wtf/text/SymbolImpl.h:
        (WTF::SymbolImpl::hashForSymbol):
        (WTF::SymbolImpl::symbolRegistry):
        (WTF::SymbolImpl::isNullSymbol):
        (WTF::SymbolImpl::extractFoldedString):
        (WTF::SymbolImpl::SymbolImpl):
        (WTF::StringImpl::symbolAwareHash):
        (WTF::StringImpl::existingSymbolAwareHash):
        * wtf/text/SymbolRegistry.cpp:
        (WTF::SymbolRegistry::~SymbolRegistry):
        (WTF::SymbolRegistry::symbolForKey):
        (WTF::SymbolRegistry::keyForSymbol):
        * wtf/text/UniquedStringImpl.h:
        (WTF::UniquedStringImpl::UniquedStringImpl):

2016-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Introduce StringImpl::StaticStringImpl with constexpr constructor
        https://bugs.webkit.org/show_bug.cgi?id=165093

        Reviewed by Darin Adler.

        This patch adds new class, StringImpl::StaticStringImpl.
        By using this class, we can easily create static StringImpls.
        This class has constexpr constructor. You can initialize instances
        of this class as global static variables without invoking global
        constructors.

        We already have similar system, StaticASCIILiteral. But using it
        requires some special perl script since we need to calculate
        hash value. On the other hand, we can use StaticStringImpl without
        any script supports since we implement constexpr hash function.
        In the future, we will replace all the use of StaticASCIILiteral
        with this StaticStringImpl.

        We define empty / null strings as StaticStringImpl. And we make
        StringImpl::empty() & StringImpl::null() inline functions.

        * wtf/Hasher.h:
        (WTF::StringHasher::hashWithTop8BitsMasked):
        (WTF::StringHasher::hash):
        (WTF::StringHasher::finalize):
        (WTF::StringHasher::finalizeAndMaskTop8Bits):
        (WTF::StringHasher::computeLiteralHash):
        (WTF::StringHasher::computeLiteralHashAndMaskTop8Bits):
        (WTF::StringHasher::avalancheBits3):
        (WTF::StringHasher::avalancheBits2):
        (WTF::StringHasher::avalancheBits1):
        (WTF::StringHasher::avalancheBits0):
        (WTF::StringHasher::avalancheBits):
        (WTF::StringHasher::avoidZero):
        (WTF::StringHasher::processPendingCharacter):
        (WTF::StringHasher::calculateWithRemainingLastCharacter1):
        (WTF::StringHasher::calculateWithRemainingLastCharacter0):
        (WTF::StringHasher::calculateWithRemainingLastCharacter):
        (WTF::StringHasher::calculate1):
        (WTF::StringHasher::calculate0):
        (WTF::StringHasher::calculate):
        (WTF::StringHasher::computeLiteralHashImpl):
        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::StaticStringImpl::StaticStringImpl):
        (WTF::StringImpl::null):
        (WTF::StringImpl::empty):
        * wtf/text/StringStatics.cpp:
        (WTF::StringImpl::null): Deleted.
        (WTF::StringImpl::empty): Deleted.

2016-11-30  Darin Adler  <darin@apple.com>

        Roll out StringBuilder changes from the previous patch.
        They were a slowdown on a Kraken JSON test.

        * wtf/text/StringBuilder.cpp:
        * wtf/text/StringBuilder.h:
        Roll out changes from below.

2016-11-30  Darin Adler  <darin@apple.com>

        Streamline and speed up tokenizer and segmented string classes
        https://bugs.webkit.org/show_bug.cgi?id=165003

        And do it without re-introducing:

        REGRESSION (r209058): API test StringBuilderTest.Equal crashing
        https://bugs.webkit.org/show_bug.cgi?id=165142

        Reviewed by Sam Weinig.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::bufferCharacters<LChar>): Moved this here from
        the header since it is only used inside the class. Also renamed from
        getBufferCharacters.
        (WTF::StringBuilder::bufferCharacters<UChar>): Ditto.
        (WTF::StringBuilder::appendUninitializedUpconvert): Added. Helper
        for the upconvert case in the 16-bit overload of StrinBuilder::append.
        (WTF::StringBuilder::append): Changed to use appendUninitializedUpconvert.
        (WTF::quotedJSONStringLength): Added. Used in new appendQuotedJSONString
        implementation below that now correctly determines the size of what will
        be appended by walking thorugh the string twice.
        (WTF::appendQuotedJSONStringInternal): Moved the code that writes the
        quote marks in here. Also made a few coding style tweaks.
        (WTF::StringBuilder::appendQuotedJSONString): Rewrote to use a much
        simpler algorithm that grows the string the same way the append function
        does. The old code would use reserveCapacity in a way that was costly when
        doing a lot of appends on the same string, and also allocated far too much
        memory for normal use cases where characters did not need to be turned
        into escape sequences.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::append): Tweaked style a bit, fixed a bug where the
        m_is8Bit field wasn't set correctly in one case, optimized the function that
        adds substrings for the case where this is the first append and the substring
        happens to cover the entire string. Also clarified the assertions and removed
        an unneeded check from that substring overload.
        (WTF::equal): Reimplemented, using equalCommon. Added an overload of the equal
        function just for the case where the arguments are StringBuilder, String.
        This is needed because of the peculiar behavior of is8Bit in String, different
        from any of our other string classes. I think we should consider changing
        String::is8Bit to return true for null strings. We could then remove this
        overload and probably remove other checks for null and zero length elsewhere
        that are also needed only to avoid calling is8Bit on a null String.

2016-11-29  JF Bastien  <jfbastien@apple.com>

        WebAssembly JS API: improve Instance
        https://bugs.webkit.org/show_bug.cgi?id=164757

        Reviewed by Keith Miller.

        * wtf/Expected.h:
        (WTF::ExpectedDetail::destroy): silence a warning

2016-11-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r209058 and r209074.
        https://bugs.webkit.org/show_bug.cgi?id=165188

        These changes caused API test StringBuilderTest.Equal to crash
        and/or fail. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Streamline and speed up tokenizer and segmented string
        classes"
        https://bugs.webkit.org/show_bug.cgi?id=165003
        http://trac.webkit.org/changeset/209058

        "REGRESSION (r209058): API test StringBuilderTest.Equal
        crashing"
        https://bugs.webkit.org/show_bug.cgi?id=165142
        http://trac.webkit.org/changeset/209074

2016-11-29  Simon Fraser  <simon.fraser@apple.com>

        Allow TracePoint to take arbitrary data
        https://bugs.webkit.org/show_bug.cgi?id=165182

        Reviewed by Tim Horton.

        Allow TracePoint() to take four numeric arguments, for arbitrary data.

        #pragma once

        * wtf/SystemTracing.h:
        (WTF::TracePoint):

2016-11-29  Andy Estes  <aestes@apple.com>

        [Cocoa] Enable two clang warnings recommended by Xcode
        https://bugs.webkit.org/show_bug.cgi?id=164498

        Reviewed by Mark Lam.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.

2016-11-29  Darin Adler  <darin@apple.com>

        REGRESSION (r209058): API test StringBuilderTest.Equal crashing
        https://bugs.webkit.org/show_bug.cgi?id=165142

        * wtf/text/StringBuilder.h: Added an overload of the equal function just
        for the case where the arguments are StringBuilder, String. This is needed
        because of the peculiar behavior of is8Bit in String, different from any of
        our other string classes. I think we should consider changing String::is8Bit
        to return true for null strings. We could then remove this overload and
        probably remove other checks for null and zero length elsewhere that are
        also needed only to avoid calling is8Bit on a null String.

2016-11-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Scroll snapping on Mac should use AppKit animations
        https://bugs.webkit.org/show_bug.cgi?id=147261
        <rdar://problem/29395293>

        Reviewed by Brent Fulgham.

        Introduce HAVE(NSSCROLLING_FILTERS), which is on for macOS El Capitan and later.

        * wtf/Platform.h:

2016-11-28  Darin Adler  <darin@apple.com>

        Streamline and speed up tokenizer and segmented string classes
        https://bugs.webkit.org/show_bug.cgi?id=165003

        Reviewed by Sam Weinig.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::bufferCharacters<LChar>): Moved this here from
        the header since it is only used inside the class. Also renamed from
        getBufferCharacters.
        (WTF::StringBuilder::bufferCharacters<UChar>): Ditto.
        (WTF::StringBuilder::appendUninitializedUpconvert): Added. Helper
        for the upconvert case in the 16-bit overload of StrinBuilder::append.
        (WTF::StringBuilder::append): Changed to use appendUninitializedUpconvert.
        (WTF::quotedJSONStringLength): Added. Used in new appendQuotedJSONString
        implementation below that now correctly determines the size of what will
        be appended by walking thorugh the string twice.
        (WTF::appendQuotedJSONStringInternal): Moved the code that writes the
        quote marks in here. Also made a few coding style tweaks.
        (WTF::StringBuilder::appendQuotedJSONString): Rewrote to use a much
        simpler algorithm that grows the string the same way the append function
        does. The old code would use reserveCapacity in a way that was costly when
        doing a lot of appends on the same string, and also allocated far too much
        memory for normal use cases where characters did not need to be turned
        into escape sequences.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::append): Tweaked style a bit, fixed a bug where the
        m_is8Bit field wasn't set correctly in one case, optimized the function that
        adds substrings for the case where this is the first append and the substring
        happens to cover the entire string. Also clarified the assertions and removed
        an unneeded check from that substring overload.
        (WTF::equal): Reimplemented, using equalCommon.

2016-11-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Import std::optional reference implementation as WTF::Optional
        https://bugs.webkit.org/show_bug.cgi?id=164199

        Reviewed by Saam Barati and Sam Weinig.

        Import std::optional reference implementation offered by the C++17
        original proposal paper. It has the same interface and functionality
        to the C++17's one. Previous WTF::Optional lacks several functionalities.
        The largest one is the correct constexpr constructors. This fact prevents
        us from using Optional<literal type> in constexpr context in WebKit.

        In WebKit, we do not allow global constructors. So only the constexpr
        constructor is the way to use WTF::Optional in the static const
        global variables. WTF::Optional is used in DOMJIT::Effect and
        we would like to emit static const global variables that includes
        this DOMJIT::Effect. That is the main motivation of this work.
        This functionality allows the IDL code generator to emit DOMJIT
        signatures as static const global variables.

        We import the reference implementation one instead of LLVM libc++'s one.
        This is because LLVM libc++'s one depends on many macro and type_traits
        offered by libc++ implementation. And adopting it to WebKit requires
        large modification compared to this reference implementation one.
        Furthermore, it is difficult to compile libc++'s optional in old GCC and VC++.
        It also requires some more modifications. To keep the thing simple,
        we import the reference implementation one now. Once C++17 is released
        and we update the compiler baseline, we can smoothly switch to the standard
        library's std::optional.

        We also add support for the environment that does not use exceptions to this
        reference implementation.

        And we also add valueOrCompute helper function. That keeps the extended
        functionality that previous WTF::Optional has.

        * wtf/CrossThreadQueue.h:
        (WTF::CrossThreadQueue<DataType>::tryGetMessage):
        * wtf/Expected.h:
        (WTF::makeExpected):
        * wtf/Forward.h:
        * wtf/HashTraits.h:
        (WTF::HashTraits<Ref<P>>::take):
        * wtf/MainThread.cpp:
        (WTF::initializeGCThreads):
        (WTF::mayBeGCThread):
        * wtf/MainThread.h:
        * wtf/Optional.h:
        (std::detail_::is_assignable::has_assign):
        (std::detail_::has_overloaded_addressof::has_overload):
        (std::detail_::static_addressof):
        (std::detail_::convert):
        (std::nullopt_t::nullopt_t):
        (std::bad_optional_access::bad_optional_access):
        (std::optional_base::optional_base):
        (std::optional_base::~optional_base):
        (std::constexpr_optional_base::constexpr_optional_base):
        (std::optional::dataptr):
        (std::optional::contained_val):
        (std::optional::__NOEXCEPT_):
        (std::optional::optional):
        (std::optional::operator=):
        (std::optional::emplace):
        (std::optional::operator ->):
        (std::optional::operator *):
        (std::optional::value):
        (std::optional::value_or):
        (std::operator==):
        (std::operator!=):
        (std::operator<):
        (std::operator>):
        (std::operator<=):
        (std::operator>=):
        (std::__NOEXCEPT_):
        (std::make_optional):
        (std::hash<std::optional<T>>::operator()):
        (WTF::NulloptTag::NulloptTag): Deleted.
        (WTF::Optional::Optional): Deleted.
        (WTF::Optional::~Optional): Deleted.
        (WTF::Optional::operator=): Deleted.
        (WTF::Optional::operator bool): Deleted.
        (WTF::Optional::operator->): Deleted.
        (WTF::Optional::operator*): Deleted.
        (WTF::Optional::value): Deleted.
        (WTF::Optional::valueOr): Deleted.
        (WTF::Optional::valueOrCompute): Deleted.
        (WTF::Optional::asPtr): Deleted.
        (WTF::Optional::destroy): Deleted.
        (WTF::operator==): Deleted.
        (WTF::operator!=): Deleted.
        (WTF::makeOptional): Deleted.
        (WTF::printInternal): Deleted.
        * wtf/text/StringView.cpp:
        (WTF::StringView::GraphemeClusters::Iterator::Impl::Impl):
        (WTF::StringView::GraphemeClusters::Iterator::Iterator):
        * wtf/text/StringView.h:

2016-11-26  Simon Fraser  <simon.fraser@apple.com>

        Migrate some layout timer-related code from std::chrono to Seconds and MonotonicTime
        https://bugs.webkit.org/show_bug.cgi?id=164992

        Reviewed by Darin Adler.

        Add Seconds::zero() as a nicer way to express Seconds(0). 

        * wtf/Seconds.h:
        (WTF::Seconds::zero):

2016-11-26  Simon Fraser  <simon.fraser@apple.com>

        Add literals for various time units
        https://bugs.webkit.org/show_bug.cgi?id=165074

        Reviewed by Filip Pizlo.
        
        Add _min, _s, _ms, _us and _ns literals for easy creation of Seconds from long double
        and unsigned long long types (those allowed for custom literals).
        
        Add minutes-related functions (there are one or two use cases in WebCore).

        * wtf/Seconds.h:
        (WTF::Seconds::minutes):
        (WTF::Seconds::fromMinutes):
        (WTF::Seconds::fromMilliseconds):
        (WTF::Seconds::fromMicroseconds):
        (WTF::Seconds::fromNanoseconds):
        (WTF::operator _min):
        (WTF::operator _s):
        (WTF::operator _ms):
        (WTF::operator _us):
        (WTF::operator _ns):

2016-11-22  Darin Adler  <darin@apple.com>

        One more tiny bit of follow-up.

        * wtf/text/TextBreakIterator.cpp:
        (WTF::numCharactersInGraphemeClusters): Removed unneeded always-true check.

2016-11-22  Darin Adler  <darin@apple.com>

        Quick follow-up to previous patch.

        * wtf/text/TextBreakIterator.cpp:
        (WTF::numCharactersInGraphemeClusters): Removed incorrect assertion.

2016-11-22  Darin Adler  <darin@apple.com>

        Make normal case fast in the input element limitString function
        https://bugs.webkit.org/show_bug.cgi?id=165023

        Reviewed by Dan Bernstein.

        * wtf/text/LineBreakIteratorPoolICU.h: Removed many unneeded includes.
        Simplified the class a bit, removing some extra definitions.
        (WTF::LineBreakIteratorPool::sharedPool): Use NeverDestroyed instead of new.
        (WTF::LineBreakIteratorPool::makeLocaleWithBreakKeyword): Reimplemented in
        a simpler way without using StringBuilder. Also updated for change to
        LineBreakIteratorMode.
        (WTF::LineBreakIteratorPool::put): Use uncheckedAppend since the code is
        careful to only use the inline capacity in the vector.

        * wtf/text/TextBreakIterator.cpp: Moved some includes in here from the header.
        (WTF::mapLineIteratorModeToRules): Updated for change to LineBreakIteratorMode.
        (WTF::openLineBreakIterator): Ditto.
        (WTF::numGraphemeClusters): Added a fast path for all 8-bit strings; don't
        use ICU for that case, even if there is a CR character in it.
        (WTF::numCharactersInGraphemeClusters): Added a fast path for strings that are
        short enough to entirely fit without even looking at the characters; that's a
        case we likely hit all the time. Also added a fast path for all 8-bit strings.

        * wtf/text/TextBreakIterator.h: Changed LineBreakIteratorMode to be an enum
        class and not repeat UAX14 in the names of the modes. Initialize data members
        in the class definition rather than the constructors.

2016-11-21  Mark Lam  <mark.lam@apple.com>

        Hasher::addCharacters() should be able to handle zero length strings.
        https://bugs.webkit.org/show_bug.cgi?id=165024

        Reviewed by Yusuke Suzuki.

        Currently, it will fail to handle zero length strings if it has a pending
        character.  The fix is simply to return early if length is 0. 

        * wtf/Hasher.h:
        (WTF::StringHasher::addCharacters):

2016-11-18  Jeremy Jones  <jeremyj@apple.com>

        Add runtime flag to enable pointer lock. Enable pointer lock feature for mac.
        https://bugs.webkit.org/show_bug.cgi?id=163801

        Reviewed by Simon Fraser.

        * wtf/FeatureDefines.h: ENABLE_POINTER_LOCK true for Mac.

2016-11-17  Saam Barati  <sbarati@apple.com>

        Remove async/await compile time flag and enable tests
        https://bugs.webkit.org/show_bug.cgi?id=164828
        <rdar://problem/28639334>

        Reviewed by Yusuke Suzuki.

        * wtf/FeatureDefines.h:

2016-11-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] WTF::TemporaryChange with WTF::SetForScope
        https://bugs.webkit.org/show_bug.cgi?id=164761

        Reviewed by Saam Barati.

        JavaScriptCore's bytecompiler/SetForScope.h is completely the same
        to WTF::TemporaryChange. SetForScope sounds better name since it
        says that this object works as Scope.

        We rename WTF::TemporaryChange to WTF::SetForScope. And replace
        all the use to this WTF::SetForScope.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/SetForScope.h: Renamed from Source/WTF/wtf/TemporaryChange.h.
        (WTF::SetForScope::SetForScope):
        (WTF::SetForScope::~SetForScope):

2016-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6][WebCore] Change ES6_MODULES compile time flag to runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=164827

        Reviewed by Ryosuke Niwa.

        * wtf/FeatureDefines.h:

2016-11-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [JSC] Build broken for 32-bit x86 after r208306 with GCC 4.9
        https://bugs.webkit.org/show_bug.cgi?id=164588

        Reviewed by Mark Lam.

        Provide assembly for executing the cpuid instruction when compiling
        in PIC mode with the GCC 4.9 EBX on 32-bit x86.

        Note that the values returned by cpuid here are not used. The purpose
        of calling this instruction is to force the CPU to complete and sync
        any buffered modifications on registers, memory or flags before
        fetching and executing the next instruction.

        * wtf/Atomics.h:
        (WTF::x86_cpuid):

2016-11-15  Filip Pizlo  <fpizlo@apple.com>

        Rename CONCURRENT_JIT/ConcurrentJIT to CONCURRENT_JS/ConcurrentJS
        https://bugs.webkit.org/show_bug.cgi?id=164791

        Reviewed by Geoffrey Garen.
        
        Both the concurrent GC and the concurrent JIT rely on concurrency support in fundamental
        JSC runtime components like JSValue. So, the thing that guards it should be a "feature"
        called CONCURRENT_JS not CONCURRENT_JIT.

        * wtf/Platform.h:

2016-11-15  Filip Pizlo  <fpizlo@apple.com>

        The concurrent GC should have a timeslicing controller
        https://bugs.webkit.org/show_bug.cgi?id=164783

        Reviewed by Geoffrey Garen.

        * wtf/LockAlgorithm.h: Added some comments.
        * wtf/Seconds.h: Added support for modulo. It's necessary for timeslicing.
        (WTF::Seconds::operator%):
        (WTF::Seconds::operator%=):

2016-11-11  Filip Pizlo  <fpizlo@apple.com>

        The GC should be optionally concurrent and disabled by default
        https://bugs.webkit.org/show_bug.cgi?id=164454

        Reviewed by Geoffrey Garen.
        
        The reason why I went to such great pains to make WTF::Lock fit in two bits is that I
        knew that I would eventually need to stuff one into some miscellaneous bits of the
        JSCell header. That time has come, because the concurrent GC has numerous race
        conditions in visitChildren that can be trivially fixed if each object just has an
        internal lock. Some cell types might use it to simply protect their entire visitChildren
        function and anything that mutates the fields it touches, while other cell types might
        use it as a "lock of last resort" to handle corner cases of an otherwise wait-free or
        lock-free algorithm. Right now, it's used to protect certain transformations involving
        indexing storage.
        
        To make this happen, I factored the WTF::Lock algorithm into a LockAlgorithm struct that
        is templatized on lock type (uint8_t for WTF::Lock), the isHeldBit value (1 for
        WTF::Lock), and the hasParkedBit value (2 for WTF::Lock). This could have been done as
        a templatized Lock class that basically contains Atomic<LockType>. You could then make
        any field into a lock by bitwise_casting it to TemplateLock<field type, bit1, bit2>. But
        this felt too dirty, so instead, LockAlgorithm has static methods that take
        Atomic<LockType>& as their first argument. I think that this makes it more natural to
        project a LockAlgorithm onto an existing Atomic<> field. Sadly, some places have to cast
        their non-Atomic<> field to Atomic<> in order for this to work. Like so many other things
        we do, this just shows that the C++ style of labeling fields that are subject to atomic
        ops as atomic is counterproductive. Maybe some day I'll change LockAlgorithm to use our
        other Atomics API, which does not require Atomic<>.
        
        WTF::Lock now uses LockAlgorithm. The slow paths are still outlined. I don't feel too
        bad about the LockAlgorithm.h header being included in so many places because we change
        that algorithm so infrequently.
        
        Also, I added a hasElapsed(time) function. This function makes it so much more natural
        to write timeslicing code, which the concurrent GC has to do a lot of.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/ListDump.h:
        * wtf/Lock.cpp:
        (WTF::LockBase::lockSlow):
        (WTF::LockBase::unlockSlow):
        (WTF::LockBase::unlockFairlySlow):
        (WTF::LockBase::unlockSlowImpl): Deleted.
        * wtf/Lock.h:
        (WTF::LockBase::lock):
        (WTF::LockBase::tryLock):
        (WTF::LockBase::unlock):
        (WTF::LockBase::unlockFairly):
        (WTF::LockBase::isHeld):
        (): Deleted.
        * wtf/LockAlgorithm.h: Added.
        (WTF::LockAlgorithm::lockFastAssumingZero):
        (WTF::LockAlgorithm::lockFast):
        (WTF::LockAlgorithm::lock):
        (WTF::LockAlgorithm::tryLock):
        (WTF::LockAlgorithm::unlockFastAssumingZero):
        (WTF::LockAlgorithm::unlockFast):
        (WTF::LockAlgorithm::unlock):
        (WTF::LockAlgorithm::unlockFairly):
        (WTF::LockAlgorithm::isLocked):
        (WTF::LockAlgorithm::lockSlow):
        (WTF::LockAlgorithm::unlockSlow):
        * wtf/TimeWithDynamicClockType.cpp:
        (WTF::hasElapsed):
        * wtf/TimeWithDynamicClockType.h:

2016-11-14  JF Bastien  <jfbastien@apple.com>

        Expected: add missing `inline`
        https://bugs.webkit.org/show_bug.cgi?id=164735

        Reviewed by Yusuke Suzuki.

        Free functions and full template specializations need to be
        `inline`, or in a .cpp file, otherwise each .o creates a duplicate
        symbol which makes the linker very sad.

        * wtf/Expected.h:
        (WTF::ExpectedDetail::Throw):
        (WTF::makeExpected):

2016-11-14  Mark Lam  <mark.lam@apple.com>

        Build fix after r208690.
        https://bugs.webkit.org/show_bug.cgi?id=164681

        Not reviewed.

        * wtf/FastMalloc.h:

2016-11-13  Mark Lam  <mark.lam@apple.com>

        Add debugging facility to limit the max single allocation size.
        https://bugs.webkit.org/show_bug.cgi?id=164681

        Reviewed by Keith Miller.

        This is useful for simulating memory allocation failures on resource constraint
        devices for testing purposes.

        This facility is only conditionally compiled in on debug builds.  It does not
        have any burden on release builds at all.  When in use, the max single allocation
        size limit applies to individual allocations.  For malloc (and similar), the
        allocation will crash in FastMalloc if the requested size exceeds the set max
        single allocation size.  For tryMalloc (and similar), the allocation returns
        nullptr if the requested size exceeds the set max single allocation size.  The
        max single allocation size is set to std::numeric_limit<size_t>::max() by default
        (i.e. when not set and no limit is in effect).

        Also fixed non-bmalloc versions of fastAlignedMalloc() to crash when allocation
        fails.

        * wtf/FastMalloc.cpp:
        (WTF::fastSetMaxSingleAllocationSize):
        (WTF::fastAlignedMalloc):
        (WTF::tryFastAlignedMalloc):
        (WTF::tryFastMalloc):
        (WTF::fastMalloc):
        (WTF::tryFastCalloc):
        (WTF::fastCalloc):
        (WTF::fastRealloc):
        * wtf/FastMalloc.h:

2016-11-13  JF Bastien  <jfbastien@apple.com>

        Implement WTF::Expected
        https://bugs.webkit.org/show_bug.cgi?id=164526

        Reviewed by Yusuke Suzuki.

        std::expected isn't in C++17, and may be in C++20. It's a nice
        complement to std::any / std::optional because it's a type-tagged
        union which has a single expected result but could also contain an
        error.

        This would be useful in the WebAssembly parser, for example.

        Using this implementation will allow us to provide feedback to the
        standards committee and guide std::expected's design before it
        gets standardized. I've already sent a bunch of feedback to the
        author based on my experience implementing this.

        This could supplement WTF::Either and WTF::ExceptionOr.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/Compiler.h: Add RELAXED_CONSTEXPR
        * wtf/Expected.h: Added.
        (WTF::UnexpectedType::UnexpectedType):
        (WTF::UnexpectedType::value):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::operator<):
        (WTF::operator>):
        (WTF::operator<=):
        (WTF::operator>=):
        (WTF::makeUnexpected):
        (WTF::ExpectedDetail::Throw):
        (WTF::ExpectedDetail::ConstexprBase::ConstexprBase):
        (WTF::ExpectedDetail::Base::Base):
        (WTF::ExpectedDetail::Base::~Base):
        (WTF::Expected::Expected):
        (WTF::Expected::operator=):
        (WTF::Expected::swap):
        (WTF::Expected::operator->):
        (WTF::Expected::operator*):
        (WTF::Expected::operator bool):
        (WTF::Expected::hasValue):
        (WTF::Expected::value):
        (WTF::Expected::error):
        (WTF::Expected::getUnexpected):
        (WTF::Expected::valueOr):
        (WTF::swap):
        (WTF::makeExpected):
        (WTF::makeExpectedFromError):

2016-11-11  Alex Christensen  <achristensen@webkit.org>

        Allow mutable lambdas in HashMap::ensure
        https://bugs.webkit.org/show_bug.cgi?id=164642

        Reviewed by Sam Weinig.

        * wtf/HashMap.h:
        (WTF::HashMapEnsureTranslator::translate):
        (WTF::X>::removeIf):

2016-11-11  Beth Dakin  <bdakin@apple.com>

        Get touch bar code building for open source builds
        https://bugs.webkit.org/show_bug.cgi?id=164610

        Reviewed by Wenson Hsieh.

        * wtf/Platform.h:

2016-11-10  JF Bastien  <jfbastien@apple.com>

        ASSERTION FAILED: length > offset encountered with wasm.yaml/wasm/js-api/test_Module.js.default-wasm
        https://bugs.webkit.org/show_bug.cgi?id=164597

        Reviewed by Keith Miller.

        Decoding at end of file should fail, not assert.

        * wtf/LEBDecoder.h:
        (WTF::LEBDecoder::decodeUInt):
        (WTF::LEBDecoder::decodeInt32):

2016-11-10  Alex Christensen  <achristensen@webkit.org>

        Remove unused CFURLCACHE code
        https://bugs.webkit.org/show_bug.cgi?id=164551

        Reviewed by Antti Koivisto.

        * wtf/Platform.h:

2016-11-09  Alex Christensen  <achristensen@webkit.org>

        Allow RefPtrs of const ThreadSafeRefCounted types
        https://bugs.webkit.org/show_bug.cgi?id=164548

        Reviewed by Tim Horton.

        * wtf/ThreadSafeRefCounted.h:
        Make m_refCount mutable like we did with RefCounted in r203257.

2016-11-09  Chris Dumez  <cdumez@apple.com>

        [Mac] Stop using deprecated AppKit enumeration values
        https://bugs.webkit.org/show_bug.cgi?id=164494

        Reviewed by Darin Adler.

        Stop using deprecated AppKit enumeration values.

        * wtf/mac/AppKitCompatibilityDeclarations.h:

2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>

        Fixed compilation of LLInt with MinGW
        https://bugs.webkit.org/show_bug.cgi?id=164449

        Reviewed by Michael Catanzaro.

        MinGW uses LLIntAssembly.h with GNU assembler syntax, just like GCC on
        other platforms.

        * wtf/InlineASM.h: Define LOCAL_LABEL_STRING as .L#name for MinGW.

2016-11-05  Konstantin Tokarev  <annulen@yandex.ru>

        [MinGW] Fixed C99/C++11 format attributes in printf-like functions
        https://bugs.webkit.org/show_bug.cgi?id=164448

        Reviewed by Michael Catanzaro.

        By default MinGW uses printf-like function provided in msvcrt.dll,
        however they miss support for C99/C++11 format attributes. Use MinGW
        implementations instead.

        * wtf/Assertions.h: Use gnu_printf format in WTF_ATTRIBUTE_PRINTF

2016-11-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSCOnly] RunLoopGeneric should adopt MonotonicTime / WallTime change
        https://bugs.webkit.org/show_bug.cgi?id=164447

        Reviewed by Csaba Osztrogonác.

        Build fix for JSCOnly.

        * wtf/generic/RunLoopGeneric.cpp:
        (WTF::RunLoop::TimerBase::ScheduledTask::create):
        (WTF::RunLoop::TimerBase::ScheduledTask::ScheduledTask):
        (WTF::RunLoop::TimerBase::ScheduledTask::scheduledTimePoint):
        (WTF::RunLoop::TimerBase::ScheduledTask::updateReadyTime):
        (WTF::RunLoop::populateTasks):
        (WTF::RunLoop::dispatchAfter):
        (WTF::RunLoop::TimerBase::start):

2016-11-04  Filip Pizlo  <fpizlo@apple.com>

        WTF::ParkingLot should stop using std::chrono because std::chrono::duration casts are prone to overflows
        https://bugs.webkit.org/show_bug.cgi?id=152045

        Reviewed by Andy Estes.
        
        We used to use 'double' for all time measurements. Sometimes it was milliseconds,
        sometimes it was seconds. Sometimes we measured a span of time, sometimes we spoke of time
        since some epoch. When we spoke of time since epoch, we either used a monotonic clock or
        a wall clock. The type - always 'double' - never told us what kind of time we had, even
        though there were roughly six of them (sec interval, ms interval, sec since epoch on wall,
        ms since epoch on wall, sec since epoch monotonic, ms since epoch monotonic).
        
        At some point, we thought that it would be a good idea to replace these doubles with
        std::chrono. But since replacing some things with std::chrono, we found it to be terribly
        inconvenient:
        
        - Outrageous API. I never want to say std::chrono::milliseconds(blah). I never want to say
          std::chrono::steady_clock::timepoint. The syntax for duration_cast is ugly, and ideally
          duration_cast would not even be a thing.
        
        - No overflow protection. std::chrono uses integers by default and using anything else is
          clumsy. But the integer math is done without regard for the rough edges of integer math,
          so any cast between std::chrono types risks overflow. Any comparison risks overflow
          because it may do conversions silently. We have even found bugs where some C++
          implementations had more overflows than others, which ends up being a special kind of
          hell. In many cases, the overflow also has nasal demons.
        
        It's an error to represent time using integers. It would have been excusable back when
        floating point math was not guaranteed to be supported on all platforms, but that would
        have been a long time ago. Time is a continuous, infinite concept and it's a perfect fit
        for floating point:
        
        - Floating point preserves precision under multiplication in all but extreme cases, so
          using floating point for time means that unit conversions are almost completely
          lossless. This means that we don't have to think very hard about what units to use. In
          this patch, we use seconds almost everywhere. We only convert at boundaries, like an API
          boundary that wants something other than seconds.
        
        - Floating point makes it easy to reason about infinity, which is something that time code
          wants to do a lot. Example: when would you like to timeout? Infinity please! This is the
          most elegant way of having an API support both a timeout variant and a no-timeout
          variant.

        - Floating point does well-understood things when math goes wrong, and these things are
          pretty well optimized to match what a mathematician would do when computing with real
          numbers represented using scientific notation with a finite number of significant
          digits. This means that time math under floating point looks like normal math. On the
          other hand, std::chrono time math looks like garbage because you have to always check
          for multiple possible UB corners whenever you touch large integers. Integers that
          represent time are very likely to be large and you don't have to do much to overflow
          them. At this time, based on the number of bugs we have already seen due to chrono
          overflows, I am not certain that we even understand what are all of the corner cases
          that we should even check for.
        
        This patch introduces a new set of timekeeping classes that are all based on double, and
        all internally use seconds. These classes support algebraic typing. The classes are:
        
        - Seconds: this is for measuring a duration.
        - WallTime: time since epoch according to a wall clock (aka real time clock).
        - MonotonicTime: time since epoch according to a monotonic clock.
        - ClockType: enum that says either Wall or Monotonic.
        - TimeWithDynamicClockType: a tuple of double and ClockType, which represents either a
          wall time or a monotonic time.
        
        All of these classes behave like C++ values and are cheap to copy around since they are
        very nearly POD. This supports comprehensive conversions between the various time types.
        Most of this is by way of algebra. Here are just some of the rules we recognize:
        
        WallTime = WallTime + Seconds
        Seconds = WallTime - WallTime
        MonotonicTime = MonotonicTime + Seconds
        etc...
        
        We support negative, infinite, and NaN times because math.
        
        We support conversions between MonotonicTime and WallTime, like:
        
        WallTime wt = mt.approximateWallTime()
        
        This is called this "approximate" because the only way to do it is to get the current time
        on both clocks and convert relative to that.
        
        Many of our APIs would be happy using whatever notion of time the user wanted to use. For
        those APIs, which includes Condition and ParkingLot, we have TimeWithDynamicClockType. You
        can automatically convert WallTime or MonotonicTime to TimeWithDynamicClockType. This
        means that if you use a WallTime with Condition::waitUntil, then Condition's internal
        logic for when it should wake up makes its decision based on the current WallTime - but if
        you use MonotonicTime then waitUntil will make its decision based on current
        MonotonicTime. This is a greater level of flexibility than chrono allowed, since chrono
        did not have the concept of a dynamic clock type.
        
        This patch does not include conversions between std::chrono and these new time classes,
        because past experience shows that we're quite bad at getting conversions between
        std::chrono and anything else right. Also, I didn't need such conversion code because this
        patch only converts code that transitively touches ParkingLot and Condition. It was easy
        to get all of that code onto the new time classes.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThread::start):
        * wtf/CMakeLists.txt:
        * wtf/ClockType.cpp: Added.
        (WTF::printInternal):
        * wtf/ClockType.h: Added.
        * wtf/Condition.h:
        (WTF::ConditionBase::waitUntil):
        (WTF::ConditionBase::waitFor):
        (WTF::ConditionBase::wait):
        (WTF::ConditionBase::waitUntilWallClockSeconds): Deleted.
        (WTF::ConditionBase::waitUntilMonotonicClockSeconds): Deleted.
        (WTF::ConditionBase::waitForSeconds): Deleted.
        (WTF::ConditionBase::waitForSecondsImpl): Deleted.
        (WTF::ConditionBase::waitForImpl): Deleted.
        (WTF::ConditionBase::absoluteFromRelative): Deleted.
        * wtf/CrossThreadQueue.h:
        (WTF::CrossThreadQueue<DataType>::waitForMessage):
        * wtf/CurrentTime.cpp:
        (WTF::sleep):
        * wtf/MessageQueue.h:
        (WTF::MessageQueue::infiniteTime): Deleted.
        * wtf/MonotonicTime.cpp: Added.
        (WTF::MonotonicTime::now):
        (WTF::MonotonicTime::approximateWallTime):
        (WTF::MonotonicTime::dump):
        (WTF::MonotonicTime::sleep):
        * wtf/MonotonicTime.h: Added.
        (WTF::MonotonicTime::MonotonicTime):
        (WTF::MonotonicTime::fromRawDouble):
        (WTF::MonotonicTime::infinity):
        (WTF::MonotonicTime::secondsSinceEpoch):
        (WTF::MonotonicTime::approximateMonotonicTime):
        (WTF::MonotonicTime::operator bool):
        (WTF::MonotonicTime::operator+):
        (WTF::MonotonicTime::operator-):
        (WTF::MonotonicTime::operator+=):
        (WTF::MonotonicTime::operator-=):
        (WTF::MonotonicTime::operator==):
        (WTF::MonotonicTime::operator!=):
        (WTF::MonotonicTime::operator<):
        (WTF::MonotonicTime::operator>):
        (WTF::MonotonicTime::operator<=):
        (WTF::MonotonicTime::operator>=):
        * wtf/ParkingLot.cpp:
        (WTF::ParkingLot::parkConditionallyImpl):
        (WTF::ParkingLot::unparkOne):
        (WTF::ParkingLot::unparkOneImpl):
        (WTF::ParkingLot::unparkCount):
        * wtf/ParkingLot.h:
        (WTF::ParkingLot::parkConditionally):
        (WTF::ParkingLot::compareAndPark):
        * wtf/Seconds.cpp: Added.
        (WTF::Seconds::operator+):
        (WTF::Seconds::operator-):
        (WTF::Seconds::dump):
        (WTF::Seconds::sleep):
        * wtf/Seconds.h: Added.
        (WTF::Seconds::Seconds):
        (WTF::Seconds::value):
        (WTF::Seconds::seconds):
        (WTF::Seconds::milliseconds):
        (WTF::Seconds::microseconds):
        (WTF::Seconds::nanoseconds):
        (WTF::Seconds::fromMilliseconds):
        (WTF::Seconds::fromMicroseconds):
        (WTF::Seconds::fromNanoseconds):
        (WTF::Seconds::infinity):
        (WTF::Seconds::operator bool):
        (WTF::Seconds::operator+):
        (WTF::Seconds::operator-):
        (WTF::Seconds::operator*):
        (WTF::Seconds::operator/):
        (WTF::Seconds::operator+=):
        (WTF::Seconds::operator-=):
        (WTF::Seconds::operator*=):
        (WTF::Seconds::operator/=):
        (WTF::Seconds::operator==):
        (WTF::Seconds::operator!=):
        (WTF::Seconds::operator<):
        (WTF::Seconds::operator>):
        (WTF::Seconds::operator<=):
        (WTF::Seconds::operator>=):
        * wtf/TimeWithDynamicClockType.cpp: Added.
        (WTF::TimeWithDynamicClockType::now):
        (WTF::TimeWithDynamicClockType::nowWithSameClock):
        (WTF::TimeWithDynamicClockType::wallTime):
        (WTF::TimeWithDynamicClockType::monotonicTime):
        (WTF::TimeWithDynamicClockType::approximateWallTime):
        (WTF::TimeWithDynamicClockType::approximateMonotonicTime):
        (WTF::TimeWithDynamicClockType::operator-):
        (WTF::TimeWithDynamicClockType::operator<):
        (WTF::TimeWithDynamicClockType::operator>):
        (WTF::TimeWithDynamicClockType::operator<=):
        (WTF::TimeWithDynamicClockType::operator>=):
        (WTF::TimeWithDynamicClockType::dump):
        (WTF::TimeWithDynamicClockType::sleep):
        * wtf/TimeWithDynamicClockType.h: Added.
        (WTF::TimeWithDynamicClockType::TimeWithDynamicClockType):
        (WTF::TimeWithDynamicClockType::fromRawDouble):
        (WTF::TimeWithDynamicClockType::secondsSinceEpoch):
        (WTF::TimeWithDynamicClockType::clockType):
        (WTF::TimeWithDynamicClockType::withSameClockAndRawDouble):
        (WTF::TimeWithDynamicClockType::operator bool):
        (WTF::TimeWithDynamicClockType::operator+):
        (WTF::TimeWithDynamicClockType::operator-):
        (WTF::TimeWithDynamicClockType::operator+=):
        (WTF::TimeWithDynamicClockType::operator-=):
        (WTF::TimeWithDynamicClockType::operator==):
        (WTF::TimeWithDynamicClockType::operator!=):
        * wtf/WallTime.cpp: Added.
        (WTF::WallTime::now):
        (WTF::WallTime::approximateMonotonicTime):
        (WTF::WallTime::dump):
        (WTF::WallTime::sleep):
        * wtf/WallTime.h: Added.
        (WTF::WallTime::WallTime):
        (WTF::WallTime::fromRawDouble):
        (WTF::WallTime::infinity):
        (WTF::WallTime::secondsSinceEpoch):
        (WTF::WallTime::approximateWallTime):
        (WTF::WallTime::operator bool):
        (WTF::WallTime::operator+):
        (WTF::WallTime::operator-):
        (WTF::WallTime::operator+=):
        (WTF::WallTime::operator-=):
        (WTF::WallTime::operator==):
        (WTF::WallTime::operator!=):
        (WTF::WallTime::operator<):
        (WTF::WallTime::operator>):
        (WTF::WallTime::operator<=):
        (WTF::WallTime::operator>=):
        * wtf/threads/BinarySemaphore.cpp:
        (WTF::BinarySemaphore::wait):
        * wtf/threads/BinarySemaphore.h:

2016-11-03  Filip Pizlo  <fpizlo@apple.com>

        DFG plays fast and loose with the shadow values of a Phi
        https://bugs.webkit.org/show_bug.cgi?id=164309

        Reviewed by Saam Barati.
        
        Made this API use size rather than maxIndex as its initialization parameter, because that's
        less confusing.

        * wtf/IndexSparseSet.h:
        (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):

2016-11-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r208364.
        https://bugs.webkit.org/show_bug.cgi?id=164402

        broke the build (Requested by smfr on #webkit).

        Reverted changeset:

        "DFG plays fast and loose with the shadow values of a Phi"
        https://bugs.webkit.org/show_bug.cgi?id=164309
        http://trac.webkit.org/changeset/208364

2016-11-03  Filip Pizlo  <fpizlo@apple.com>

        DFG plays fast and loose with the shadow values of a Phi
        https://bugs.webkit.org/show_bug.cgi?id=164309

        Reviewed by Saam Barati.
        
        Made this API use size rather than maxIndex as its initialization parameter, because that's
        less confusing.

        * wtf/IndexSparseSet.h:
        (WTF::IndexSparseSet<OverflowHandler>::IndexSparseSet):

2016-11-03  Konstantin Tokarev  <annulen@yandex.ru>

        Fixes to build JSCOnly on macOS
        https://bugs.webkit.org/show_bug.cgi?id=164379

        Reviewed by Michael Catanzaro.

        * wtf/Platform.h: JSCOnly port should not provide any PLATFORM() macro

2016-11-03  Brady Eidson  <beidson@apple.com>

        IndexedDB 2.0: Support binary keys.
        <rdar://problem/28806927> and https://bugs.webkit.org/show_bug.cgi?id=164359

        Reviewed by Alex Christensen.

        * wtf/Hasher.h:
        (WTF::StringHasher::hashMemory): Teach hashMemory() to handle buffers with odd lengths.

2016-11-02  Filip Pizlo  <fpizlo@apple.com>

        The GC should be in a thread
        https://bugs.webkit.org/show_bug.cgi?id=163562

        Reviewed by Geoffrey Garen and Andreas Kling.
        
        This fixes some bugs and adds a few features.

        * wtf/Atomics.h: The GC may do work on behalf of the JIT. If it does, the main thread needs to execute a cross-modifying code fence. This is cpuid on x86 and I believe it's isb on ARM. It would have been an isync on PPC and I think that isb is the ARM equivalent.
        (WTF::arm_isb):
        (WTF::crossModifyingCodeFence):
        (WTF::x86_ortop):
        (WTF::x86_cpuid):
        * wtf/AutomaticThread.cpp: I accidentally had AutomaticThreadCondition inherit from ThreadSafeRefCounted<AutomaticThread> [sic]. This never crashed before because all of our prior AutomaticThreadConditions were immortal.
        (WTF::AutomaticThread::AutomaticThread):
        (WTF::AutomaticThread::~AutomaticThread):
        (WTF::AutomaticThread::start):
        * wtf/AutomaticThread.h:
        * wtf/MainThread.cpp: Need to allow initializeGCThreads() to be called separately because it's now more than just a debugging thing.
        (WTF::initializeGCThreads):

2016-11-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Clean wrong comment about compositing on the UI process.
        https://bugs.webkit.org/show_bug.cgi?id=164339

        Reviewed by Michael Catanzaro.

        * wtf/Platform.h: The comment about compositing on the UI process
        was added on r109302 but was not removed properly when the Qt port
        was removed from trunk.
        USE_PROTECTION_SPACE_AUTH_CALLBACK has nothing to do with it.

2016-11-02  Alex Christensen  <achristensen@webkit.org>

        Remove Battery Status API from the tree
        https://bugs.webkit.org/show_bug.cgi?id=164213

        Reviewed by Sam Weinig.

        * wtf/FeatureDefines.h:

2016-11-02  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Enable creation of ReadableByteStreamController
        https://bugs.webkit.org/show_bug.cgi?id=164014

        Reviewed by Youenn Fablet.

        Added flag for the byte stream part of Readable Streams API.

        * wtf/FeatureDefines.h:

2016-11-02  Per Arne Vollan  <pvollan@apple.com>

        [Win] Copy build results to AAS 'Program Files' folder.
        https://bugs.webkit.org/show_bug.cgi?id=164273

        Reviewed by Brent Fulgham.

        The preferred location for the binaries is the AAS 'Program Files' folder.

        * WTF.vcxproj/WTF.proj:

2016-10-29  Filip Pizlo  <fpizlo@apple.com>

        JSC should support SharedArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=163986

        Reviewed by Keith Miller.
        
        Adds some small things we need for SharedArrayBuffer.
        
        * wtf/Atomics.h:
        (WTF::Atomic::compareExchangeWeakRelaxed):
        (WTF::Atomic::exchangeAdd):
        (WTF::Atomic::exchangeAnd):
        (WTF::Atomic::exchangeOr):
        (WTF::Atomic::exchangeSub):
        (WTF::Atomic::exchangeXor):
        (WTF::atomicLoad):
        (WTF::atomicStore):
        (WTF::atomicCompareExchangeWeak):
        (WTF::atomicCompareExchangeWeakRelaxed):
        (WTF::atomicCompareExchangeStrong):
        (WTF::atomicExchangeAdd):
        (WTF::atomicExchangeAnd):
        (WTF::atomicExchangeOr):
        (WTF::atomicExchangeSub):
        (WTF::atomicExchangeXor):
        (WTF::atomicExchange):
        (WTF::Atomic::exchangeAndAdd): Deleted.
        (WTF::weakCompareAndSwap): Deleted.
        We need to be able to do atomics operations on naked pointers. We also need to be able to do
        all of the things that std::atomic does. This adds those things and renames
        weakCompareAndSwap to atomicCompareExchangeWeakRelaxed so that we're using consistent
        terminology.
        
        * wtf/Bitmap.h:
        (WTF::WordType>::concurrentTestAndSet): Renamed weakCompareAndSwap.
        (WTF::WordType>::concurrentTestAndClear): Renamed weakCompareAndSwap.
        * wtf/FastBitVector.h:
        (WTF::FastBitVector::atomicSetAndCheck): Renamed weakCompareAndSwap.
        * wtf/ParkingLot.cpp:
        (WTF::ParkingLot::unparkOne):
        (WTF::ParkingLot::unparkCount):
        * wtf/ParkingLot.h:
        Added unparkCount(), which lets you unpark some bounded number of threads and returns the
        number of threads unparked. This is just a modest extension of unparkAll(). unparkAll() now
        just calls unparkCount(ptr, UINT_MAX).

2016-10-30  Frederic Wang  <fwang@igalia.com>

        Use HarfBuzz ot-math API to parse the OpenType MATH table
        https://bugs.webkit.org/show_bug.cgi?id=162671

        Reviewed by Michael Catanzaro.

        * wtf/Platform.h: By default, do not enable internal OpenType MATH parsing on GTK.

2016-10-25  Mark Lam  <mark.lam@apple.com>

        String.prototype.replace() should throw an OutOfMemoryError when using too much memory.
        https://bugs.webkit.org/show_bug.cgi?id=163996
        <rdar://problem/28263117>

        Reviewed by Geoffrey Garen.

        * wtf/Vector.h:
        (WTF::minCapacity>::tryConstructAndAppend):
        (WTF::minCapacity>::tryConstructAndAppendSlowCase):
        - Added try versions of constructAndAppend() so that we can handle the failure
          to allocate more gracefully.

2016-10-25  Konstantin Tokarev  <annulen@yandex.ru>

        Non-specialized version of deleteObject should not have template argument
        https://bugs.webkit.org/show_bug.cgi?id=163943

        Reviewed by Anders Carlsson.

        Fixes compilation of GDIObject.h with MinGW

        * wtf/win/GDIObject.h:
        (WTF::deleteObject):

2016-10-24  Per Arne Vollan  <pvollan@apple.com>

        [Win] CMake build type is not set.
        https://bugs.webkit.org/show_bug.cgi?id=163917

        Reviewed by Alex Christensen.

        The CMAKE_BUILD_TYPE variable should be set to Debug or Release.

        * WTF.vcxproj/WTF.proj:

2016-10-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Add a way for DOMJIT::Patchpoint to express effects
        https://bugs.webkit.org/show_bug.cgi?id=163657

        Reviewed by Saam Barati.

        Simplify nonEmptyRangesOverlap.

        * wtf/MathExtras.h:
        (WTF::nonEmptyRangesOverlap):

2016-10-23  Chris Dumez  <cdumez@apple.com>

        Another unreviewed attempt to fix the WatchOS / TvOS build after r207585.
        <rdar://problem/28902292>

        Disable USE_CFURLCONNECTION on newer WatchOS / TvOS.

        * wtf/Platform.h:

2016-10-20  Keith Miller  <keith_miller@apple.com>

        Add support for WASM calls
        https://bugs.webkit.org/show_bug.cgi?id=161727

        Reviewed by Filip Pizlo and Michael Saboff.

        Added a new decodeUInt64. Also, added WTF::LEBDecoder namespace.

        * wtf/LEBDecoder.h:
        (WTF::LEBDecoder::decodeUInt):
        (WTF::LEBDecoder::decodeUInt32):
        (WTF::LEBDecoder::decodeUInt64):
        (WTF::LEBDecoder::decodeInt32):
        (decodeUInt32): Deleted.
        (decodeInt32): Deleted.

2016-10-20  Filip Pizlo  <fpizlo@apple.com>

        The tracking of the coarse-grain Heap state (allocating or not, collector or not, eden vs full) should respect the orthogonality between allocating and collecting
        https://bugs.webkit.org/show_bug.cgi?id=163738

        Reviewed by Geoffrey Garen.
        
        There will soon be different kinds of GC threads, and WTF's "are you a GC thread" thing
        should know about this.

        * wtf/MainThread.cpp:
        (WTF::initializeGCThreads):
        (WTF::registerGCThread):
        (WTF::mayBeGCThread):
        * wtf/MainThread.h:

2016-10-19  Sam Weinig  <sam@webkit.org>

        Add convenience function that combines WTF::visit(...) with WTF::makeVisitor(...)
        https://bugs.webkit.org/show_bug.cgi?id=163713

        Reviewed by Dan Bernstein.

        - Add WTF::switchOn which merges WTF::visit with WTF::makeVisitor in the following
          way:
                WTF::visit(WTF::makeVisitor(...), variant)

        * wtf/Variant.h:
        (WTF::switchOn):

2016-10-19  Alex Christensen  <achristensen@webkit.org>

        Revert r207151
        https://bugs.webkit.org/show_bug.cgi?id=163675

        Reviewed by Brent Fulgham.

        * wtf/Platform.h:
        * wtf/SchedulePair.h:
        * wtf/SchedulePairMac.mm:

2016-10-19  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION (r207480): 3 Dromaeo tests failing
        https://bugs.webkit.org/show_bug.cgi?id=163633

        Reviewed by Mark Lam.
        
        It's a ParkingLot bug: if we timeout and get unparked at the same time, then the unparking
        thread will clear our address eventually - but not immediately. This causes a nasty
        assertion failure. The tricky thing is that when we detect this, we need to wait until that
        unparking thread does the deed. Otherwise, they will still do it at some later time.
        
        Alternatively, we could use some kind of versioning to detect this - increment the version
        when you park, so that unparking threads will know if they are time travelers. That seems
        more yucky.
        
        I don't think it matters too much what we do here, so long as it's simple and correct, since
        this requires a race that is rare enough that it didn't happen once in my testing, and I was
        pretty thorough. For example, it didn't happen once in 15 runs of JetStream. The race is
        rare because it requires the timeout to happen right as someone else is unparking. Since
        it's so rare, its probably OK that the unparked thread waits just a tiny moment until the
        unparking thread is done.

        * wtf/ParkingLot.cpp:
        (WTF::ParkingLot::parkConditionallyImpl):
        (WTF::ParkingLot::unparkOneImpl):

2016-10-19  Filip Pizlo  <fpizlo@apple.com>

        Baseline JIT should use AutomaticThread
        https://bugs.webkit.org/show_bug.cgi?id=163686

        Reviewed by Geoffrey Garen.
        
        Added a AutomaticThreadCondition::wait() method, so that if you really want to use one
        common condition for your thread and something else, you can do it. This trivially works
        if you only use notifyAll(), and behaves as you'd expect for notifyOne() (i.e. it's
        dangerous, since you don't know who will wake up).
        
        The Baseline JIT used the one-true-Condition idiom because it used notifyAll() in an
        optimal way: there are just two threads talking to each other, so it wakes up at most one
        thread and that thread is exactly the one you want woken up. Adding wait() means that I did
        not have to change that code.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThreadCondition::wait):
        * wtf/AutomaticThread.h:

2016-10-18  Filip Pizlo  <fpizlo@apple.com>

        DFG worklist should use AutomaticThread
        https://bugs.webkit.org/show_bug.cgi?id=163615

        Reviewed by Mark Lam.
        
        This adds new functionality to AutomaticThread to support DFG::Worklist:
        
        - AutomaticThread::threadDidStart/threadWillStop virtual methods called at the start and end
          of a thread's lifetime. This allows Worklist to tie some resources to the life of the
          thread, and also means that now those resources will naturally free up when the Worklist is
          not in use.
        
        - AutomaticThreadCondition::notifyOne(). This required changes to Condition::notifyOne(). We
          need to know if the Condition woke up anyone. If it didn't, then we need to launch one of
          our threads.

        * wtf/AutomaticThread.cpp:
        (WTF::AutomaticThreadCondition::notifyOne):
        (WTF::AutomaticThread::ThreadScope::ThreadScope):
        (WTF::AutomaticThread::ThreadScope::~ThreadScope):
        (WTF::AutomaticThread::start):
        (WTF::AutomaticThread::threadDidStart):
        (WTF::AutomaticThread::threadWillStop):
        * wtf/AutomaticThread.h:
        * wtf/Condition.h:
        (WTF::ConditionBase::notifyOne):

2016-10-18  Sam Weinig  <sam@webkit.org>

        Replace std::experimental::variant with WTF::Variant (or similar)
        https://bugs.webkit.org/show_bug.cgi?id=163626

        Reviewed by Chris Dumez.

        Rename std::experimental::variant, Variant. Move helpers get/holds_alternative/etc.
        into the WTF namespace.

        * wtf/Forward.h:
        * wtf/Variant.h:

2016-10-18  Filip Pizlo  <fpizlo@apple.com>

        WTF should make it easier to create threads that die automatically after inactivity
        https://bugs.webkit.org/show_bug.cgi?id=163576

        Reviewed by Andreas Kling.
        
        For a long time now, I've been adding threads to WTF/JSC and each time I do this, I feel
        guilty because those threads don't shut down when they are inactive. For example, in bug
        163562, I need to add a new GC thread. There will be one of them per VM. This means that a
        JSC API client that starts a lot of VMs will have a lot of threads. I don't think that's
        good.
        
        A common pattern for all of these threads is that they have some well-defined trigger that
        causes them to run. This trigger has a lock, a condition variable, some logic that determines
        if there is work to do, and then of course the logic for the thread's actual work. The thread
        bodies usually look like this:
        
        void Thingy::runThread()
        {
            for (;;) {
                Work work;
                {
                    LockHolder locker(m_lock);
                    while (!hasWork())
                        m_cond.wait(m_lock);
                    work = takeWork();
                }
                doWork(work);
            }
        }
        
        If you look at ParallelHelperPool (the GC's threads) and DFG::Worklist (some of the JIT's
        threads), you will see this pattern.
        
        This change adds a new kind of thread, called AutomaticThread, that lets you write threads to
        this pattern while getting automatic thread shutdown for free: instead of just waiting on a
        condition variable, AutomaticThread will have a timeout that causes the thread to die. The
        condition variable associated with AutomaticThread, called AutomaticThreadCondition, is smart
        enough to restart any threads that have decided to stop due to inactivity. The inactivity
        threshold is current just 1 second.
        
        In this patch I only adopt AutomaticThread for ParallelHelperPool. I plan to adopt it in more
        places soon.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/AutomaticThread.cpp: Added.
        (WTF::AutomaticThreadCondition::create):
        (WTF::AutomaticThreadCondition::AutomaticThreadCondition):
        (WTF::AutomaticThreadCondition::~AutomaticThreadCondition):
        (WTF::AutomaticThreadCondition::notifyAll):
        (WTF::AutomaticThreadCondition::add):
        (WTF::AutomaticThreadCondition::remove):
        (WTF::AutomaticThreadCondition::contains):
        (WTF::AutomaticThread::AutomaticThread):
        (WTF::AutomaticThread::~AutomaticThread):
        (WTF::AutomaticThread::join):
        (WTF::AutomaticThread::start):
        * wtf/AutomaticThread.h: Added.
        * wtf/CMakeLists.txt:
        * wtf/ParallelHelperPool.cpp:
        (WTF::ParallelHelperClient::ParallelHelperClient):
        (WTF::ParallelHelperClient::~ParallelHelperClient):
        (WTF::ParallelHelperClient::setTask):
        (WTF::ParallelHelperClient::finish):
        (WTF::ParallelHelperClient::doSomeHelping):
        (WTF::ParallelHelperClient::runTask):
        (WTF::ParallelHelperPool::ParallelHelperPool):
        (WTF::ParallelHelperPool::~ParallelHelperPool):
        (WTF::ParallelHelperPool::ensureThreads):
        (WTF::ParallelHelperPool::doSomeHelping):
        (WTF::ParallelHelperPool::Thread::Thread):
        (WTF::ParallelHelperPool::didMakeWorkAvailable):
        (WTF::ParallelHelperPool::helperThreadBody): Deleted.
        (WTF::ParallelHelperPool::waitForClientWithTask): Deleted.
        * wtf/ParallelHelperPool.h:

2016-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVGCSSParser: m_implicitShorthand value is not reset after adding the shorthand property
        https://bugs.webkit.org/show_bug.cgi?id=116470

        Reviewed by Simon Fraser.

        * wtf/TemporaryChange.h:
        (WTF::TemporaryChange::TemporaryChange):
        Add a new constructor to make TemporaryChange work as a restorer. The
        temporary change will happen after we construct the object.

2016-10-17  Simon Fraser  <simon.fraser@apple.com>

        Implement DOMRect/DOMRectReadOnly
        https://bugs.webkit.org/show_bug.cgi?id=163464

        Reviewed by Darin Adler.
        
        Implement min()/max() in a way that follows Math.min/Math.max, which return
        NaN if either argument is NaN.

        * wtf/MathExtras.h:
        (WTF::nanPropagatingMin):
        (WTF::nanPropagatingMax):

2016-10-15  Sam Weinig  <sam@webkit.org>

        MessageEvent's source property should be a (DOMWindow or MessagePort)? rather than a EventTarget?
        https://bugs.webkit.org/show_bug.cgi?id=163475

        Reviewed by Simon Fraser.

        * wtf/Variant.h:
        Add missing return statement that was tripping up some compilers.

2016-10-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r207225.

        This change causes debug tests to exit early with crashes.

        Reverted changeset:

        "Optional's move-constructor and move-assignment operator
        don't disengage the value being moved from"
        https://bugs.webkit.org/show_bug.cgi?id=163309
        http://trac.webkit.org/changeset/207225

2016-10-11  Sam Weinig  <sam@webkit.org>

        Optional's move-constructor and move-assignment operator don't disengage the value being moved from
        https://bugs.webkit.org/show_bug.cgi?id=163309

        Reviewed by Anders Carlsson.

        * wtf/Optional.h:
        (WTF::Optional::Optional):
        (WTF::Optional::operator=):
        Disengage 'other' on move-construction and move-assignment.

2016-10-08  Filip Pizlo  <fpizlo@apple.com>

        MarkedBlock should know what objects are live during marking
        https://bugs.webkit.org/show_bug.cgi?id=162309

        Reviewed by Geoffrey Garen.
        
        This removes the atomicity mode, because it's not really used: it only affects the
        concurrentBlah methods, but their only users turn on atomicity. This was useful because
        previously, some binary Bitmap methods (like merge(const Bitmap&)) couldn't be used
        effectively in the GC because some of the GC's bitmaps set the atomic mode and some didn't.
        Removing this useless mode is the best solution.
        
        Also added some new binary Bitmap methods: mergeAndClear(Bitmap& other) and
        setAndClear(Bitmap& other). They perform their action on 'this' (either merge or set,
        respectively) while also clearing the contents of 'other'. This is great for one of the GC
        hot paths.

        * wtf/Bitmap.h:
        (WTF::WordType>::Bitmap):
        (WTF::WordType>::get):
        (WTF::WordType>::set):
        (WTF::WordType>::testAndSet):
        (WTF::WordType>::testAndClear):
        (WTF::WordType>::concurrentTestAndSet):
        (WTF::WordType>::concurrentTestAndClear):
        (WTF::WordType>::clear):
        (WTF::WordType>::clearAll):
        (WTF::WordType>::nextPossiblyUnset):
        (WTF::WordType>::findRunOfZeros):
        (WTF::WordType>::count):
        (WTF::WordType>::isEmpty):
        (WTF::WordType>::isFull):
        (WTF::WordType>::merge):
        (WTF::WordType>::filter):
        (WTF::WordType>::exclude):
        (WTF::WordType>::forEachSetBit):
        (WTF::WordType>::mergeAndClear):
        (WTF::WordType>::setAndClear):
        (WTF::=):
        (WTF::WordType>::hash):

2016-10-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add SynchronizedFixedQueue class
        https://bugs.webkit.org/show_bug.cgi?id=162478

        Reviewed by Geoffrey Garen.

        This class represents a simple producer/consumer worker. It facilitates
        synchronizing enqueuing to and dequeuing from a fixed size-queue. It uses
        a single lock and a single condition to synchronize all its members among
        the working threads. This means a single thread is active at any time and
        and the other threads are blocked waiting for the lock to be released. Or
        they are sleeping waiting for the condition to be satisfied.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/SynchronizedFixedQueue.h: Added.
        (WTF::SynchronizedFixedQueue::SynchronizedFixedQueue):
        (WTF::SynchronizedFixedQueue::open): Restore the queue to its original state.
        (WTF::SynchronizedFixedQueue::close): Wake all the sleeping threads with a closing state.
        (WTF::SynchronizedFixedQueue::isOpen): Does the queue accept new items?
        (WTF::SynchronizedFixedQueue::enqueue): Enqueue an item into the queue.
        (WTF::SynchronizedFixedQueue::dequeue): Dequeue an item form the queue.

2016-10-11  Alex Christensen  <achristensen@webkit.org>

        Remove dead networking code
        https://bugs.webkit.org/show_bug.cgi?id=163263

        Reviewed by Daniel Bates.

        * wtf/Platform.h:
        * wtf/SchedulePair.h:
        * wtf/SchedulePairMac.mm:

2016-10-10  Zan Dobersek  <zdobersek@igalia.com>

        Add ENABLE_ENCRYPTED_MEDIA configuration option
        https://bugs.webkit.org/show_bug.cgi?id=163219

        Reviewed by Darin Adler.

        * wtf/FeatureDefines.h:
        If undefined, define the ENABLE_ENCRYPTED_MEDIA option to 0.

2016-10-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Implement Node accessors in DOMJIT
        https://bugs.webkit.org/show_bug.cgi?id=163005

        Reviewed by Filip Pizlo.

        Add CAST_OFFSET. It is not necessary for JSCell thingy
        since we don't use virtual member functions. However, it
        is not true for WebCore DOM wrapped objects.

        * wtf/StdLibExtras.h:

2016-10-07  Chris Dumez  <cdumez@apple.com>

        window.navigator.language incorrectly returns all lowercase string
        https://bugs.webkit.org/show_bug.cgi?id=163096

        Reviewed by Darin Adler.

        Update platformUserPreferredLanguages() so that it no longer lowercases
        the string it returns. On Mac, we rely on CFLocale which returns
        BCP-47 language tags as per:
        - https://developer.apple.com/reference/corefoundation/1666963-cflocale?language=objc

        * wtf/PlatformUserPreferredLanguagesMac.mm:
        (WTF::httpStyleLanguageCode):
        * wtf/PlatformUserPreferredLanguagesUnix.cpp:
        (WTF::platformLanguage):

2016-10-06  Brent Fulgham  <bfulgham@apple.com>

        [Win][Direct2D] Add Direct2D CMake rules
        https://bugs.webkit.org/show_bug.cgi?id=162925

        Reviewed by Brent Fulgham.

        * wtf/Platform.h: Don't USE(CA) or USE(CG) if building
        with Direct2D.

2016-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Add initial CheckDOM and CallDOM implementations
        https://bugs.webkit.org/show_bug.cgi?id=162941

        Reviewed by Filip Pizlo.

        * wtf/Box.h:
        (WTF::Box::Box):

2016-10-05  Zan Dobersek  <zdobersek@igalia.com>

        Rename ENABLE_ENCRYPTED_MEDIA_V2 to ENABLE_LEGACY_ENCRYPTED_MEDIA
        https://bugs.webkit.org/show_bug.cgi?id=162903

        Reviewed by Alex Christensen.

        Rename build guards for the remaining implementation of the legacy EME API
        to ENABLE_LEGACY_ENCRYPTED_MEDIA. This will allow for the future implementation
        of the near-finished API to be guarded with the simple ENABLE_ENCRYPTED_MEDIA guards.

        * wtf/FeatureDefines.h:

2016-10-04  Saam Barati  <sbarati@apple.com>

        String.prototype.toLowerCase should be a DFG/FTL intrinsic
        https://bugs.webkit.org/show_bug.cgi?id=162887

        Reviewed by Filip Pizlo and Yusuke Suzuki.

        This patch exposes a new StringImpl function called convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit
        which extracts slow path for the 8-bit part of convertToLowercaseWithoutLocale
        into a helper function. I decided to extract this into its own function because
        it may be the case that JSCs JITs will want to continue the operation
        after it has already ensured that part of an 8-bit string is lower case.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::convertToLowercaseWithoutLocale):
        (WTF::StringImpl::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.cpp:
        (WTF::String::convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit):
        * wtf/text/WTFString.h:

2016-10-04  Chris Dumez  <cdumez@apple.com>

        Implement KeyboardEvent.code from the UI Event spec
        https://bugs.webkit.org/show_bug.cgi?id=149584

        Reviewed by Darin Adler.

        Add build time flag to toggle support for the code attribute on
        KeyboardEvent and only enable it on Mac for now, given that the
        implementation is missing on other platforms.

        * wtf/FeatureDefines.h:

2016-10-03  Chris Dumez  <cdumez@apple.com>

        Add support for KeyboardEvent.key attribute
        https://bugs.webkit.org/show_bug.cgi?id=36267

        Reviewed by Darin Adler.

        Add compile time flag for the key attribute on KeyboardEvent and enable
        it on Cocoa only.

        * wtf/FeatureDefines.h:

2016-09-29  Sam Weinig  <sam@webkit.org>

        Add initial support for IDL union conversion
        https://bugs.webkit.org/show_bug.cgi?id=161576

        Reviewed by Chris Dumez.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        Add Brigand.h

        * wtf/Brigand.h: Added.
        Import a standalone copy of Edouard Alligand and Joel Falcou's 
        Brigand library for help with for help with list based meta programming

        * wtf/StdLibExtras.h:
        Add a new three new type traits, IsTemplate, IsBaseOfTemplate and RemoveCVAndReference.
        - IsTemplate acts like std::is_class, but works with a generic base.
        - IsBaseOfTemplate acts like std::is_base_of, but works with a generic base.
        - RemoveCVAndReference combines std::remove_cv and std::remove_reference.

2016-09-30  Filip Pizlo  <fpizlo@apple.com>

        B3::moveConstants should be able to edit code to minimize the number of constants
        https://bugs.webkit.org/show_bug.cgi?id=162764

        Reviewed by Saam Barati.
        
        I thought it would be a good idea to document the fact that dominator traversal happens in a
        particular order for a reason.

        * wtf/Dominators.h:

2016-09-29  Filip Pizlo  <fpizlo@apple.com>

        Air should have a way of expressing additional instruction flags
        https://bugs.webkit.org/show_bug.cgi?id=162699

        Reviewed by Mark Lam.

        * wtf/CommaPrinter.h:
        (WTF::CommaPrinter::CommaPrinter):
        (WTF::CommaPrinter::dump):
        (WTF::CommaPrinter::didPrint):

2016-09-30  Youenn Fablet  <youenn@apple.com>

        Add a way to go from a RefPtr<T> to Ref<const T>
        https://bugs.webkit.org/show_bug.cgi?id=162683

        Reviewed by Alex Christensen.

        * wtf/RefPtr.h:
        (WTF::RefPtr::releaseConstNonNull): Added.

2016-09-29  Mark Lam  <mark.lam@apple.com>

        Re-enable StringView life-cycle checking.
        https://bugs.webkit.org/show_bug.cgi?id=160384
        <rdar://problem/28479434>

        Reviewed by Saam Barati.

        Re-landing after slow running tests have been resolved.

        * wtf/text/StringView.h:

2016-09-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r206563.
        https://bugs.webkit.org/show_bug.cgi?id=162732

        Caused stress/op_*.js.ftl-no-cjit tests to time out (Requested
        by ryanhaddad on #webkit).

        Reverted changeset:

        "Re-enable StringView life-cycle checking."
        https://bugs.webkit.org/show_bug.cgi?id=160384
        http://trac.webkit.org/changeset/206563

2016-09-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        Clang 3.9 reports a compilation warning about ENABLE_EXCEPTION_SCOPE_VERIFICATION
        https://bugs.webkit.org/show_bug.cgi?id=162718

        Reviewed by Alex Christensen.

        Clang 3.9 reports a following compilation warning:
          Source/JavaScriptCore/runtime/VM.h:656:5: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]

        * wtf/Platform.h: Changed the definition of ENABLE_EXCEPTION_SCOPE_VERIFICATION not to use 'defined'.

2016-09-28  Mark Lam  <mark.lam@apple.com>

        Re-enable StringView life-cycle checking.
        https://bugs.webkit.org/show_bug.cgi?id=160384
        <rdar://problem/28479434>

        Reviewed by Saam Barati.

        * wtf/text/StringView.h:

2016-09-28  Filip Pizlo  <fpizlo@apple.com>

        The write barrier should be down with TSO
        https://bugs.webkit.org/show_bug.cgi?id=162316

        Reviewed by Geoffrey Garen.
        
        Added clearRange(), which quickly clears a range of bits. This turned out to be useful for
        a DFG optimization pass.

        * wtf/FastBitVector.cpp:
        (WTF::FastBitVector::clearRange):
        * wtf/FastBitVector.h:

2016-09-28  Mark Lam  <mark.lam@apple.com>

        Fix race condition in StringView's UnderlyingString lifecycle management.
        https://bugs.webkit.org/show_bug.cgi?id=162702

        Reviewed by Geoffrey Garen.

        There 2 relevant functions at play:

        void StringView::setUnderlyingString(const StringImpl* string)
        {
            UnderlyingString* underlyingString;
            if (!string)
                underlyingString = nullptr;
            else {
                std::lock_guard<StaticLock> lock(underlyingStringsMutex);
                auto result = underlyingStrings().add(string, nullptr);
                if (result.isNewEntry)
                    result.iterator->value = new UnderlyingString(*string);
                else
                    ++result.iterator->value->refCount;
                underlyingString = result.iterator->value; // Point P2.
            }
            adoptUnderlyingString(underlyingString); // Point P5.
        }

        ... and ...

        void StringView::adoptUnderlyingString(UnderlyingString* underlyingString)
        {
            if (m_underlyingString) {
                // Point P0.
                if (!--m_underlyingString->refCount) {
                    if (m_underlyingString->isValid) { // Point P1.
                        std::lock_guard<StaticLock> lock(underlyingStringsMutex);
                        underlyingStrings().remove(&m_underlyingString->string); // Point P3.
                    }
                    delete m_underlyingString; // Point P4.
                }
            }
            m_underlyingString = underlyingString;
        }

        Imagine the following scenario:

        1. Thread T1 has been using an UnderlyingString U1, and is now done with it.
           T1 runs up to point P1 in adoptUnderlyingString(), and is blocked waiting for
           the underlyingStringsMutex (which is currently being held by Thread T2).
        2. Context switch to Thread T2.
           T2 wants to use UnderlyingString U1, and runs up to point P2 in setUnderlyingString()
           and releases the underlyingStringsMutex.
           Note: T2 thinks it has successfully refCounted U1, and therefore U1 is safe to use.
        3. Context switch to Thread T1.
           T1 acquires the underlyingStringsMutex, and proceeds to remove it from the
           underlyingStrings() map (see Point P3).  It thinks it has successfully done so
           and proceeds to delete U1 (see Point P4).
        4. Context switch to Thread T2.
           T2 proceeds to use U1 (see Point P5 in setUnderlyingString()).
           Note: U1 has already been freed.  This is a use after free.

        The fix is to acquire the underlyingStringsMutex at Point P0 in adoptUnderlyingString()
        instead of after P1.  This ensures that the decrementing of the UnderlyingString
        refCount and its removal from the underlyingStrings() map is done as an atomic unit.

        Note: If you look in StringView.cpp, you see another setUnderlyingString() which
        takes a StringView otherString.  This version of setUnderlyingString() can only
        be called from within the same thread that created the other StringView.  As a
        result, here, we are guaranteed that the UnderlyingString refCount is never zero,
        and there's no other threat of another thread trying to delete the UnderlyingString
        while we adopt it.  Hence, we don't need to acquire the underlyingStringsMutex
        here.

        This race condition was found when running layout tests fetch/fetch-worker-crash.html
        and storage/indexeddb/modern/opendatabase-versions.html when CHECK_STRINGVIEW_LIFETIME
        is enabled.  This issue resulted in those tests crashing due to a use-after-free.

        * wtf/text/StringView.cpp:
        (WTF::StringView::adoptUnderlyingString):
        (WTF::StringView::setUnderlyingString):

2016-09-28  Brent Fulgham  <bfulgham@apple.com>

        Correct 'safeCast' implementation
        https://bugs.webkit.org/show_bug.cgi?id=162679
        <rdar://problem/28518189>

        Reviewed by Zalan Bujtas.

        * wtf/StdLibExtras.h:
        (WTF::safeCast): Use a RELEASE_ASSERT.

2016-09-27  Don Olmstead  <don.olmstead@am.sony.com>

        [CMake] Add HAVE_LOCALTIME_R definition
        https://bugs.webkit.org/show_bug.cgi?id=162636

        Reviewed by Alex Christensen.

        * wtf/DateMath.cpp:
        (WTF::getLocalTime):
        * wtf/GregorianDateTime.cpp:
        (WTF::GregorianDateTime::setToCurrentLocalTime):
        * wtf/Platform.h:

2016-09-27  JF Bastien  <jfbastien@apple.com>

        Speed up Heap::isMarkedConcurrently
        https://bugs.webkit.org/show_bug.cgi?id=162095

        Reviewed by Filip Pizlo.

        Heap::isMarkedConcurrently had a load-load fence which is expensive on weak memory ISAs such as ARM.

        This patch is fairly perf-neutral overall, but the GC's instrumentation reports:
          GC:Eden is 93% average runtime after change
          GC:Full is 76% average runtime after change

        The fence was there because:
         1. If the read of m_markingVersion in MarkedBlock::areMarksStale isn't what's expected then;
         2. The read of m_marks in MarkedBlock::isMarked needs to observe the value that was stored *before* m_markingVersion was stored.

        This ordering isn't guaranteed on ARM, which has a weak memory model.

        There are 3 ways to guarantee this ordering:
         A. Use a barrier instruction.
         B. Use a load-acquire (new in ARMv8).
         C. use ARM's address dependency rule, which C++ calls memory_order_consume.

        In general:
         A. is slow but orders all of memory in an intuitive manner.
         B. is faster-ish and has the same property-ish.
         C. should be faster still, but *only orders dependent loads*. This last part is critical! Consume isn't an all-out replacement for acquire (acquire is rather a superset of consume).

        ARM explains the address dependency rule in their document "barrier litmus tests and cookbook":

        > *Resolving by the use of barriers and address dependency*
        >
        > There is a rule within the ARM architecture that:
        > Where the value returned by a read is used to compute the virtual address of a subsequent read or write (this is known as an address dependency), then these two memory accesses will be observed in program order. An address dependency exists even if the value read by the first read has no effect in changing the virtual address (as might be the case if the value returned is masked off before it is used, or if it had no effect on changing a predicted address value).
        > This restriction applies only when the data value returned from one read is used as a data value to calculate the address of a subsequent read or write. This does not apply if the data value returned from one read is used to determine the condition code flags, and the values of the flags are used for condition code evaluation to determine the address of a subsequent reads, either through conditional execution or the evaluation of a branch. This is known as a control dependency.
        > Where both a control and address dependency exist, the ordering behaviour is consistent with the address dependency.

        C++'s memory_order_consume is unfortunately unimplemented by C++ compilers, and maybe unimplementable as spec'd. I'm working with interested folks in the committee to fix this situation: http://wg21.link/p0190r2

        * wtf/Atomics.h:
        (WTF::zeroWithConsumeDependency): a 0 which carries a dependency
        (WTF::consumeLoad): pixie magic

2016-09-27  JF Bastien  <jfbastien@apple.com>

        Atomics.h on Windows: remove seq_cst hack
        https://bugs.webkit.org/show_bug.cgi?id=162022

        Reviewed by Mark Lam.

        No need to force access to seq_cst, always inlining fixes the MSVC warning.

        * wtf/Atomics.h:
        (WTF::Atomic::compareExchangeWeak): remove seq_cst hack
        (WTF::Atomic::compareExchangeStrong): remove seq_cst hack
        (WTF::Atomic::exchangeAndAdd): remove seq_cst hack
        (WTF::Atomic::exchange): remove seq_cst hack

2016-09-27  Don Olmstead  <don.olmstead@am.sony.com>

        [CMake] Use CMake to determine HAVE_* defines
        https://bugs.webkit.org/show_bug.cgi?id=162368

        Reviewed by Alex Christensen.

        * wtf/Platform.h:

2016-09-20  Anders Carlsson  <andersca@apple.com>

        PlatformEvent::m_modifiers should be an OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=162326

        Reviewed by Daniel Bates.

        * wtf/OptionSet.h:
        (WTF::OptionSet::operator!=):
        (WTF::OptionSet::operator-):

2016-09-27  Jer Noble  <jer.noble@apple.com>

        Remove deprecated ENCRYPTED_MEDIA implementation.
        https://bugs.webkit.org/show_bug.cgi?id=161010

        Reviewed by Eric Carlson.

        Remove ENABLE_ENCRYPTED_MEDIA.

        * wtf/FeatureDefines.h:

2016-09-27  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Use Ref<const T> in FetchBody::m_data variant
        https://bugs.webkit.org/show_bug.cgi?id=162599

        Reviewed by Alex Christensen.

        Enabling to use DeferrableRefCounted<const T> by making m_refCount mutable.

        * wtf/DeferrableRefCounted.h:
        (WTF::DeferrableRefCountedBase::ref):
        (WTF::DeferrableRefCountedBase::derefBase):
        (WTF::DeferrableRefCounted::deref):

2016-09-26  Daniel Bates  <dabates@apple.com>

        Rename IOS_TEXT_AUTOSIZING to TEXT_AUTOSIZING
        https://bugs.webkit.org/show_bug.cgi?id=162365

        Reviewed by Simon Fraser.

        * wtf/FeatureDefines.h:

2016-09-26  Benjamin Poulain  <benjamin@webkit.org>

        [JSC] Shrink the Math inline caches some more
        https://bugs.webkit.org/show_bug.cgi?id=162485

        Reviewed by Saam Barati.

        * wtf/Bag.h:
        Don't copy the arguments before initializing the nodes.

2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        std::unique_ptr deleter functions should not check if pointer is null
        https://bugs.webkit.org/show_bug.cgi?id=162558

        Reviewed by Alex Christensen.

        std::unique_ptr already does this before calling the deleter.

        * wtf/efl/UniquePtrEfl.h:
        * wtf/glib/GUniquePtr.h:

== Rolled over to ChangeLog-2016-09-26 ==
