2012-12-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: MemoryInstrumentation doesn't detect reportMemoryUsage method defined in a base class.
        https://bugs.webkit.org/show_bug.cgi?id=105026

        Reviewed by Yury Semikhatsky.

        Old SFINAE test was replaced with new one based on this article:
        http://stackoverflow.com/questions/1966362/sfinae-to-check-for-inherited-member-functions

        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentation):
        (yes):
        (IsInstrumented):
        (no):
        (WTF::MemoryInstrumentation::IsInstrumented::BaseMixin::reportMemoryUsage):
        (WTF::MemoryInstrumentation::selectInstrumentationMethod):
        (InstrumentationSelector):
        (WTF):
        (WTF::::reportObjectMemoryUsage):

2012-12-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed, rolling out r137892.
        http://trac.webkit.org/changeset/137892
        https://bugs.webkit.org/show_bug.cgi?id=105026

        it broke compilation on windows

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryInstrumentation::selectInstrumentationMethod):
        (MemoryInstrumentation):
        (WTF::MemoryInstrumentation::reportObjectMemoryUsage):
        (WTF::reportMemoryUsage):

2012-12-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: MemoryInstrumentation doesn't detect reportMemoryUsage method defined in a base class.
        https://bugs.webkit.org/show_bug.cgi?id=105026

        Reviewed by Yury Semikhatsky.

        Old SFINAE test was replaced with new one based on this article:
        http://stackoverflow.com/questions/1966362/sfinae-to-check-for-inherited-member-functions

        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentation):
        (yes):
        (IsInstrumented):
        (no):
        (WTF::MemoryInstrumentation::IsInstrumented::BaseMixin::reportMemoryUsage):
        (WTF::MemoryInstrumentation::selectInstrumentationMethod):
        (InstrumentationSelector):
        (WTF):
        (WTF::::reportObjectMemoryUsage):

2012-12-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add data grid for exploring native heap graph
        https://bugs.webkit.org/show_bug.cgi?id=105012

        Reviewed by Pavel Feldman.

        Do not report edges with null target.

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryInstrumentation::addObjectImpl):

2012-12-13  Filip Pizlo  <fpizlo@apple.com>

        Attempt to rationalize and simplify WTF::binarySearch
        https://bugs.webkit.org/show_bug.cgi?id=104890

        Reviewed by Maciej Stachowiak.

        Binary search now has three modes:

        The default: assert that the key was found, but return an adjacent element if it
        wasn't found, if asserts are turned off.
        
        tryBinarySearch: return 0 if the key wasn't found.
        
        approximateBinarySearch: if the key is not found, return an adjacent element (either
        the left or right; no guarantee which).
        
        This also reduces the number of variants of binarySearch. The functor variant is now
        gone because binarySearch now always uses a functor for the key extractor. The
        generic variant is now gone because binarySearch always expects an array type that
        can do operator[].

        * wtf/StdLibExtras.h:
        (WTF::binarySearchImpl):
        (WTF::binarySearch):
        (WTF::tryBinarySearch):
        (WTF::approximateBinarySearch):

2012-12-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: do not validate pointers to objects in RenderArena agains tcmalloc data.
        https://bugs.webkit.org/show_bug.cgi?id=104903

        Reviewed by Yury Semikhatsky.

        This is a simplest approach to do that with zero performance overhead.

        * wtf/MemoryInstrumentation.cpp:
        (WTF::MemoryClassInfo::setCustomAllocation):
        (WTF):
        * wtf/MemoryInstrumentation.h:
        (MemoryClassInfo):
        * wtf/MemoryObjectInfo.h:
        (WTF::MemoryObjectInfo::MemoryObjectInfo):
        (WTF::MemoryObjectInfo::customAllocation):
        (WTF::MemoryObjectInfo::setCustomAllocations):
        (MemoryObjectInfo):

2012-12-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: remove fake root MemoryObjectInfo.
        https://bugs.webkit.org/show_bug.cgi?id=104796

        Reviewed by Yury Semikhatsky.

        It was not a good idea to introduce a fake root MemoryObjectInfo.
        It makes a problem when we visit an object without its own MemoryObjectType.

        Example: RenderBox has a global pointer to a hash map.
        HashMap doesn't have its own object type because it is a generic container.
        It will inherit object type from the fake root memory object info.
        The same could happen for another container in another class with other MemoryObjectType.

        This fact forces me to create custom process method for root objects
        because they need to have their own MemoryObjectInfo with customisable memory object type.

        Drive by fix: InstrumentedPointer* was replaced with Wrapper* because actually it is using
        for instrumented and not instrumented object classes.

        * wtf/MemoryInstrumentation.cpp:
        (WTF::MemoryInstrumentation::MemoryInstrumentation):
        (WTF::MemoryInstrumentation::WrapperBase::WrapperBase):
        (WTF::MemoryInstrumentation::WrapperBase::process):
        (WTF::MemoryInstrumentation::WrapperBase::processRootObjectRef):
        (WTF):
        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryInstrumentation::addRootObject):
        (MemoryInstrumentation):
        (WrapperBase):
        (WTF::MemoryInstrumentation::WrapperBase::~WrapperBase):
        (Wrapper):
        (OwningTraits):
        (WTF::MemoryInstrumentation::OwningTraits::addRootObject):
        (WTF::MemoryInstrumentation::addObjectImpl):
        (WTF::::Wrapper):
        (WTF::::callReportMemoryUsage):

2012-12-12  Sergio Martins  <sergio.martins@kdab.com>

        Fix QNX Qt build by enabling JIT.
        https://bugs.webkit.org/show_bug.cgi?id=102794

        Reviewed by Simon Hausmann.

        JIT is working, so enable it. Otherwise LLINT gets enabled, and
        that doesn't compile.

        YARR_JIT is crashing at this time though, so disable it.

        * wtf/Platform.h:

2012-12-11  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: simplify Sequences processing code.
        https://bugs.webkit.org/show_bug.cgi?id=104777

        Reviewed by Yury Semikhatsky.

        Redesign reportMemoryUsage for the sequences.
        With the old schema we couldn't instrument HashMap<key, WebCore::LayoutUnit>
        because LayoutUnit has overloaded conversion operators for double, int, etc.
        I wrote an empty SequenceMemoryInstrumentationTraits for LayoutUnit class
        but it doesn't help because the root of problem was hidden in the free template function reportSequenceMemoryUsage.
        I could overload reportSequenceMemoryUsage too but in this case I need to fully specify all the types
        for the iterators like HashMap<.....>::const_iterator. Too many letters.
        I found a better solution. Free reportSequenceMemoryUsage can be converted into default implementation of static
        reportMemoryUsage traits method. In this case the types of iterators will be inferred automaticaly. The old default
        implementation becomes a custom implementation for the user defined types.

        * wtf/MemoryInstrumentationHashCountedSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashMap.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationListHashSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationSequence.h:
        (WTF):
        (WTF::SequenceMemoryInstrumentationTraits::reportMemoryUsage):
        (SequenceMemoryInstrumentationTraits):
        * wtf/MemoryInstrumentationVector.h:
        (WTF::reportMemoryUsage):

2012-12-10  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: make sure each edge is reported only once
        https://bugs.webkit.org/show_bug.cgi?id=104630

        Reviewed by Pavel Feldman.

        Make sure that outgoing edges are reported only once if we come to the same
        object twice: first by an address of a base class and then by a real address
        of the object.

        * wtf/MemoryInstrumentation.cpp:
        (WTF::MemoryInstrumentation::MemoryInstrumentation):
        (WTF::MemoryInstrumentation::reportLinkToBuffer):
        (WTF::MemoryInstrumentation::InstrumentedPointerBase::InstrumentedPointerBase):
        (WTF::MemoryInstrumentation::InstrumentedPointerBase::process):
        (WTF::MemoryClassInfo::init):
        (WTF::MemoryClassInfo::addRawBuffer):
        (WTF::MemoryClassInfo::addPrivateBuffer):
        * wtf/MemoryInstrumentation.h:
        (InstrumentedPointerBase):
        (MemoryInstrumentation):
        (InstrumentedPointer):
        (WTF::MemoryClassInfo::MemoryClassInfo):
        (WTF::MemoryClassInfo::addMember):
        (MemoryClassInfo):
        (WTF::::InstrumentedPointer):
        (WTF::::callReportMemoryUsage):
        * wtf/MemoryObjectInfo.h:
        (WTF::MemoryObjectInfo::MemoryObjectInfo):
        (WTF::MemoryObjectInfo::firstVisit):
        (WTF::MemoryObjectInfo::className):
        (WTF::MemoryObjectInfo::name):
        (WTF::MemoryObjectInfo::setAlreadyVisited):
        (MemoryObjectInfo):

2012-12-10  Benjamin Poulain  <benjamin@webkit.org>

        Add convenience methods to use ListHashSet for a LRU cache
        https://bugs.webkit.org/show_bug.cgi?id=104499

        Reviewed by Sam Weinig.

        ListHashSet is a great abstract data type to implement caches.
        Unfortunately, the class was missing methods to do that easily and
        efficiently. This patch fixes that.

        The names appendOrMoveToLast() and prependOrMoveToFirst() were chosen
        in favor of append()/prepend() to ensure they are not used in place of
        add() by accident.

        * wtf/ListHashSet.h:
        (ListHashSet):
        (WTF::::removeFirst):
        (WTF::::appendOrMoveToLast):
        (WTF::::prependOrMoveToFirst):
        (WTF::::unlink):
        (WTF::::unlinkAndDelete):
        (WTF::::prependNode):

2012-12-10  Eric Carlson  <eric.carlson@apple.com>

        Add support for in-band text tracks to Mac port
        https://bugs.webkit.org/show_bug.cgi?id=103663

        Reviewed by Sam Weinig.

        * wtf/Platform.h: Define HAVE_AVFOUNDATION_TEXT_TRACK_SUPPORT.

2012-12-08  Patrick Gansterer  <paroga@webkit.org>

        Compiling WTF outside of WebKit failed on Windows
        https://bugs.webkit.org/show_bug.cgi?id=100201

        Reviewed by Darin Adler.

        Explicitly use the Unicode variants of the Windows API to
        allow building the WTF library without the UNICODE define.

        * wtf/win/MainThreadWin.cpp:
        (WTF::initializeMainThreadPlatform):

2012-12-08  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed trivial space fix to silence an automake warning.

        * GNUmakefile.list.am:

2012-12-05  Halton Huo  <halton.huo@intel.com>

        [CMake] Unify coding style for CMake files
        https://bugs.webkit.org/show_bug.cgi?id=103605

        Reviewed by Laszlo Gombos.

        Update cmake files(.cmake, CMakeLists.txt) with following style rules:
        1. Indentation
        1.1 Use spaces, not tabs.
        1.2 Four spaces as indent.
        2. Spacing
        2.1 Place one space between control statements and their parentheses.
            For eg, if (), else (), elseif (), endif (), foreach (),
            endforeach (), while (), endwhile (), break ().
        2.2 Do not place spaces between function and macro statements and
            their parentheses. For eg, macro(), endmacro(), function(),
            endfunction().
        2.3 Do not place spaces between a command or function or macro and its
            parentheses, or between a parenthesis and its content. For eg,
            message("testing") not message( "testing") or message ("testing" )
        2.4 No space at line ending.
        3. Lowercase when call commands macros and functions. For eg,
           add_executable() not ADD_EXECUTABLE(), set() not SET().

        * CMakeLists.txt:
        * wtf/CMakeLists.txt:
        * wtf/PlatformBlackBerry.cmake:
        * wtf/PlatformEfl.cmake:
        * wtf/PlatformWinCE.cmake:

2012-12-04  Jon Lee  <jonlee@apple.com>

        Extend StringHasher to take a stream of characters
        https://bugs.webkit.org/show_bug.cgi?id=104076
        <rdar://problem/12811887>

        Reviewed by Darin Adler.

        We essentially move computeHash() to a member function of StringHasher. This allows clients of the
        hasher to append strings to the general hash, without having to first concatenate the strings.

        * wtf/StringHasher.h:
        (WTF::StringHasher::addCharacters): Same as computeHash(), except also take into account the possibility
        that there is a pending character to hash. If this is the case, we align the word boundary by consuming the
        first character in data, adjust the length, move the data pointer forward one, and update the hasher's
        pending character state. Also add an early return so that we are guaranteed at least one character in case
        we run into this situation.
        (WTF::StringHasher::computeHash): Refactor into addCharacters().

2012-12-04  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: simplify reportMemoryUsage signature
        https://bugs.webkit.org/show_bug.cgi?id=104028

        Reviewed by Vsevolod Vlasov.

        Removed const& modifier from instrumented pointer type. Was const T* const&,
        now it is const T*

        * wtf/MemoryInstrumentation.cpp:
        (WTF::MemoryClassInfo::addRawBuffer):
        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentation):
        (WTF::MemoryInstrumentation::selectInstrumentationMethod):
        (WTF::MemoryInstrumentation::reportObjectMemoryUsage):
        (MemoryClassInfo):
        (WTF::reportMemoryUsage):
        (WTF::MemoryInstrumentation::addObjectImpl):
        (WTF):
        * wtf/MemoryInstrumentationArrayBufferView.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashCountedSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashMap.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationListHashSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationParsedURL.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationString.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationVector.h:
        (WTF::reportMemoryUsage):

2012-12-01  Filip Pizlo  <fpizlo@apple.com>

        JSC should be able to report profiling data associated with the IR dumps and disassembly
        https://bugs.webkit.org/show_bug.cgi?id=102999

        Reviewed by Gavin Barraclough.

        Made some minor changes to support the new profiler. FileOutputStream now has an
        open() method, and DataLog uses it. StringPrintStream has a reset() method, which
        allows you to reuse the same StringPrintStream for creating multiple strings.
        SegmentedVector now has a const operator[]. And, WTFString now can do fromUTF8() on
        a CString directly.

        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):
        * wtf/FilePrintStream.cpp:
        (WTF::FilePrintStream::open):
        (WTF):
        * wtf/FilePrintStream.h:
        * wtf/SegmentedVector.h:
        (WTF::SegmentedVector::at):
        (SegmentedVector):
        (WTF::SegmentedVector::operator[]):
        * wtf/StringPrintStream.cpp:
        (WTF::StringPrintStream::reset):
        (WTF):
        * wtf/StringPrintStream.h:
        (StringPrintStream):
        * wtf/text/WTFString.cpp:
        (WTF::String::fromUTF8):
        (WTF):
        * wtf/text/WTFString.h:
        (String):

2012-12-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136597.
        http://trac.webkit.org/changeset/136597
        https://bugs.webkit.org/show_bug.cgi?id=104065

        broke Windows compilation (Requested by yurys on #webkit).

        * wtf/MemoryInstrumentation.cpp:
        (WTF::MemoryClassInfo::addRawBuffer):
        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentation):
        (WTF::MemoryInstrumentation::selectInstrumentationMethod):
        (WTF::MemoryInstrumentation::reportObjectMemoryUsage):
        (MemoryClassInfo):
        (WTF::reportMemoryUsage):
        (WTF::MemoryInstrumentation::addObjectImpl):
        (WTF):
        * wtf/MemoryInstrumentationArrayBufferView.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashCountedSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashMap.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationListHashSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationParsedURL.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationString.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationVector.h:
        (WTF::reportMemoryUsage):

2012-12-04  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: simplify reportMemoryUsage signature
        https://bugs.webkit.org/show_bug.cgi?id=104028

        Reviewed by Vsevolod Vlasov.

        Removed const& modifier from instrumented pointer type. Was const T* const&,
        now it is const T*

        * wtf/MemoryInstrumentation.cpp:
        (WTF::MemoryClassInfo::addRawBuffer):
        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentation):
        (WTF::MemoryInstrumentation::selectInstrumentationMethod):
        (WTF::MemoryInstrumentation::reportObjectMemoryUsage):
        (MemoryClassInfo):
        (WTF::reportMemoryUsage):
        (WTF::MemoryInstrumentation::addObjectImpl):
        (WTF):
        * wtf/MemoryInstrumentationArrayBufferView.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashCountedSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashMap.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationListHashSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationParsedURL.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationString.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationVector.h:
        (WTF::reportMemoryUsage):

2012-12-03  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: NMI introduce heap graph recording API
        https://bugs.webkit.org/show_bug.cgi?id=103232

        Reviewed by Vsevolod Vlasov.

        MemoryInstrumentationClient is extended with several methods for reporting
        heap graph vertices and edges. Edge source is always idenfied by heap object
        address. Target node might be either a destination object address(either real
        or adjusted if the edge was retrieved from a pointer to a base class) or a
        MemoryObjectInfo in case of internal buffers.

        * wtf/MemoryInstrumentation.cpp:
        (WTF::MemoryInstrumentation::reportEdge):
        (WTF):
        (WTF::MemoryInstrumentation::reportLinkToBuffer): report edge between the object
        and a buffer which it owns.
        (WTF::MemoryInstrumentation::InstrumentedPointerBase::process):
        (WTF::MemoryClassInfo::addRawBuffer):
        (WTF::MemoryClassInfo::addPrivateBuffer):
        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentationClient):
        (WTF::MemoryInstrumentationClient::reportNode):
        (WTF::MemoryInstrumentationClient::reportEdge):
        (WTF::MemoryInstrumentationClient::reportLeaf):
        (WTF::MemoryInstrumentationClient::reportBaseAddress): if we found an object by a pointer
        to base class it may have different value than real object address. Report both real and
        adjusted addresses so that they both can be used for identifying corresponding heap graph
        node.
        (WTF::MemoryInstrumentation::addRootObject):
        (MemoryInstrumentation):
        (WTF::MemoryInstrumentation::addObject):
        (WTF::MemoryInstrumentation::addRawBuffer):
        (WTF::MemoryInstrumentation::OwningTraits::addObject):
        (WTF::MemoryClassInfo::addMember):
        (MemoryClassInfo):
        (WTF::MemoryInstrumentation::addObjectImpl):
        * wtf/MemoryObjectInfo.h: added methods for repoting class name and some name string.
        (WTF::MemoryObjectInfo::setClassName):
        (WTF::MemoryObjectInfo::setName):
        (MemoryObjectInfo):

2012-12-03  Filip Pizlo  <fpizlo@apple.com>

        Replace JSValue::description() with JSValue::dump(PrintStream&)
        https://bugs.webkit.org/show_bug.cgi?id=103866

        Reviewed by Darin Adler.

        Make it easier to get a String from a StringPrintStream.

        * wtf/StringPrintStream.cpp:
        (WTF::StringPrintStream::toString):
        * wtf/StringPrintStream.h:
        (StringPrintStream):
        (WTF::toString):

2012-12-02  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to build and run with DFG_ENABLE(PROPAGATION_VERBOSE)
        https://bugs.webkit.org/show_bug.cgi?id=103848

        Reviewed by Sam Weinig.

        Increase the variadicity of dataLog() and print(), and add a pointerDump()
        which allows passing a pointer to something that has a printInternal(). If
        the pointer is null, it'll print "(null)"; otherwise it'll invoke the
        printInternal() function.

        * wtf/DataLog.h:
        (WTF):
        (WTF::dataLog):
        * wtf/PrintStream.h:
        (PrintStream):
        (WTF::PrintStream::print):
        (WTF):
        (PointerDump):
        (WTF::PointerDump::PointerDump):
        (WTF::PointerDump::dump):
        (WTF::pointerDump):

2012-11-30  Simon Hausmann  <simon.hausmann@digia.com>, Pierre Rossi  <pierre.rossi@digia.com>

        [Qt] Separate Qt WebKit into Qt WebKit and Qt WebKit Widgets
        https://bugs.webkit.org/show_bug.cgi?id=99314

        Reviewed by Tor Arne Vestbø.

        This big change separates QtWebKit into QtWebKit and QtWebKitWidgets as
        shared libraries.

        It's a big refactoring that mostly involves moving WebCore dependent
        code into QtWebKit and accessing it through exported QWebFrameAdapter
        and QWebPageAdapter classes.


        * wtf/text/WTFString.h:
        (String): Export the QString conversions also as WTF_STRING_API.

2012-11-29  Filip Pizlo  <fpizlo@apple.com>

        It should be easy to find code blocks in debug dumps
        https://bugs.webkit.org/show_bug.cgi?id=103623

        Reviewed by Geoffrey Garen.

        Changed RawPointer to accept both const void* and void*, and use the former internally.
        
        Cleaned up SHA1 so that the functionality already used internally for self-testing is
        available via the API. This includes addBytes(CString) and computing hex digests.

        * wtf/RawPointer.h:
        (WTF::RawPointer::RawPointer):
        (RawPointer):
        (WTF::RawPointer::value):
        * wtf/SHA1.cpp:
        (WTF::expectSHA1):
        (WTF::SHA1::hexDigest):
        (WTF::SHA1::computeHexDigest):
        * wtf/SHA1.h:
        (WTF::SHA1::addBytes):

2012-11-29  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r136096.

        * wtf/StringPrintStream.cpp: Added missing include file.

2012-11-28  Filip Pizlo  <fpizlo@apple.com>

        SpeculatedType dumping should not use the static char buffer[thingy] idiom
        https://bugs.webkit.org/show_bug.cgi?id=103584

        Reviewed by Michael Saboff.

        Added a StringPrintStream, and made it easy to create dumpers for typedefs to primitives.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/PrintStream.cpp:
        (WTF::dumpCharacter):
        * wtf/PrintStream.h:
        (WTF::printInternal):
        * wtf/StringPrintStream.cpp: Added.
        (WTF::StringPrintStream::StringPrintStream):
        (WTF::StringPrintStream::~StringPrintStream):
        (WTF::StringPrintStream::vprintf):
        (WTF::StringPrintStream::toCString):
        (WTF::StringPrintStream::increaseSize):
        * wtf/StringPrintStream.h: Added.
        (StringPrintStream):
        (WTF::toCString):

2012-11-28  Michael Saboff  <msaboff@apple.com>

        Update String Stats for recent dataLog changes and add summary
        https://bugs.webkit.org/show_bug.cgi?id=103583

        Reviewed by Filip Pizlo.

        Updated calls to dataLog() to dataLogF() as a results of r135469.
        Added total savings from 8 bit strings in bytes and as a percentage.

        * wtf/text/StringImpl.cpp:
        (WTF::StringStats::printStats):

2012-11-28  Roger Fong  <roger_fong@apple.com>

        Make DataLog work/compile properly on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=103544

        Reviewed by Filip Pizlo.

        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):

2012-11-28  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to say dataLog("count = ", count, "\n") instead of dataLogF("count = %d\n", count)
        https://bugs.webkit.org/show_bug.cgi?id=103009

        Reviewed by Michael Saboff.

        Added the ability to use out.print(...) and dataLog(...) variadically and with
        WTF::printInternal(PrintStream&, const T&) overloads for any type T that you want
        to be able to pass as an argument to out.print() or dataLog(). Also added one
        example class for doing this: RawPointer, which can be used to force a pointer
        to be printed as "%p" rather than matching any overloads that you might want to
        introduce.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DataLog.h:
        (WTF):
        (WTF::dataLog):
        * wtf/PrintStream.cpp:
        (WTF::printInternal):
        (WTF):
        * wtf/PrintStream.h:
        (PrintStream):
        (WTF::PrintStream::print):
        (WTF):
        * wtf/RawPointer.h: Added.
        (WTF):
        (RawPointer):
        (WTF::RawPointer::RawPointer):
        (WTF::RawPointer::value):

2012-11-27  Filip Pizlo  <fpizlo@apple.com>

        Convert some remaining uses of FILE* to PrintStream&.

        Rubber stamped by Mark Hahnenberg.

        * wtf/BitVector.cpp:
        (WTF::BitVector::dump):
        * wtf/BitVector.h:
        (BitVector):

2012-11-27  Pratik Solanki  <psolanki@apple.com>

        objc/objc-runtime.h does not exist on all PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=101780

        Reviewed by Brent Fulgham.

        Clean up header includes so we don't include objc/objc-runtime.h.

        * wtf/Functional.h:
        * wtf/ObjcRuntimeExtras.h: Include objc/message.h here so we don't rely on proper ordering
        of includes in files that include this header.

2012-11-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135828.
        http://trac.webkit.org/changeset/135828
        https://bugs.webkit.org/show_bug.cgi?id=103405

        [Chromium] Multiple ASAN errors after a WebKit roll due to
        mismatched malloc/delete (not free) resulting from
        StringImpl::deref() (Requested by apavlov on #webkit).

        * wtf/FastAllocBase.h:
        * wtf/Platform.h:

2012-11-26  Adam Barth  <abarth@webkit.org>

        [Chromium] fastMalloc has an extra branch on Windows
        https://bugs.webkit.org/show_bug.cgi?id=103027

        Reviewed by Eric Seidel.

        There's no need to override the new/delete operators on non-Mac
        platform because:

        1) We use the system malloc anyway.
        2) We've modified the system malloc to crash in out-of-memory conditions.

        This patch removes a branch (and a call) from malloc, which will
        hopefully improve performance. I haven't measured the performance
        characteristics of this patch, but I will look at the graphs closely
        when landing.

        * wtf/FastAllocBase.h:
        * wtf/Platform.h:

2012-11-26  Filip Pizlo  <fpizlo@apple.com>

        DataLog to a file should work if there are multiple processes using WTF
        https://bugs.webkit.org/show_bug.cgi?id=103323

        Reviewed by Mark Hahnenberg.

        Whereas before DataLog would open a file with the name you specified, now it'll open a file with the
        name plus the PID appended to it. So if you are dealing with multiple processes running with DataLog
        to a file enabled, you'll get multiple separate log files.

        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):

2012-11-26  Zeno Albisser  <zeno@webkit.org>

        [Qt] Fix the LLInt build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=97587

        Reviewed by Simon Hausmann.

        * wtf/InlineASM.h:
            Use OS(DARWIN) instead of PLATFORM(MAC),
            in order to allow Qt to use the same code.
        * wtf/Platform.h:

2012-11-26  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r135640.

        * wtf/DataLog.cpp:

2012-11-24  Adam Barth  <abarth@webkit.org>

        Chromium should use TCMalloc on Mac to go fast
        https://bugs.webkit.org/show_bug.cgi?id=102866

        Reviewed by Eric Seidel.

        This patch enables TCMalloc for some WebKit objects. It improves
        dom-modify on Mac by 5-10%.

        On non-Mac platforms, Chromium already uses TCMalloc throughout the
        project. Unfortunately, we haven't yet figured out how to turn TCMalloc
        on globally on Mac because the approach we use for other platforms makes
        some OS X APIs sad.

        The next best thing would be to enable TCMalloc for WebKit by
        overriding the global new and delete operator, as is done on apple-mac
        and other platforms. Unfortunately, we cannot use that approach either
        because the Chromium WebKit API is not memory tight.

        Fortunately, WebKit has a mechanism for selectively enabling TCMalloc
        for a selection of objects by overriding the new and delete operators
        on those objects. This patch opts chromium-mac into that scheme by
        setting the appropriate preprocessor macros.

        * WTF.gyp/WTF.gyp:
        * wtf/Platform.h:

2012-11-21  Filip Pizlo  <fpizlo@apple.com>

        Any function that can log things should be able to easily log them to a memory buffer as well
        https://bugs.webkit.org/show_bug.cgi?id=103000

        Reviewed by Sam Weinig.

        We have a number of places where we pass around a FILE* as a target to which to print
        some logging information. But the purpose of passing FILE* instead of always assuming
        that we should dump to stderr is that it may be sometimes useful to send the logging
        information elsewhere. Unfortunately, FILE* isn't quite powerful enough: it's combersome
        to use it to send logging to a string, for example.
        
        We could get around this by using <iostream> and <sstream>, but so far this aspect of
        C++ has not been part of the WebKit coding conventions. Personally I find <iostream>
        awkward due to its abuse of operator overloading.
        
        So this patch introduces the PrintStream abstract class, which offers printf-like
        functionality while completely abstracting the destination and mechanism of the printing
        output. It would be trivial to implement a StringPrintStream, for example. This will feed
        into work on https://bugs.webkit.org/show_bug.cgi?id=102999.
        
        This also sets us up for creating templatized print() and println() methods that will
        allow us to say things like out.print("count = ", count, "\n"), but that is the topic
        of https://bugs.webkit.org/show_bug.cgi?id=103009.
        
        This patch also changes dataLog() to use FilePrintStream internally, and WTF::dataFile()
        now returns a FilePrintStream&. Any previous users of WTF::dataFile() have been changed
        to expect a PrintStream&.

        * GNUmakefile.list.am:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DataLog.cpp:
        (WTF):
        (WTF::initializeLogFileOnce):
        (WTF::initializeLogFile):
        (WTF::dataFile):
        (WTF::dataLogV):
        (WTF::dataLogString):
        * wtf/DataLog.h:
        (WTF):
        * wtf/FilePrintStream.cpp: Added.
        (WTF):
        (WTF::FilePrintStream::FilePrintStream):
        (WTF::FilePrintStream::~FilePrintStream):
        (WTF::FilePrintStream::vprintf):
        (WTF::FilePrintStream::flush):
        * wtf/FilePrintStream.h: Added.
        (WTF):
        (FilePrintStream):
        (WTF::FilePrintStream::file):
        * wtf/PrintStream.cpp: Added.
        (WTF):
        (WTF::PrintStream::PrintStream):
        (WTF::PrintStream::~PrintStream):
        (WTF::PrintStream::printf):
        (WTF::PrintStream::print):
        (WTF::PrintStream::println):
        (WTF::PrintStream::flush):
        (WTF::print):
        * wtf/PrintStream.h: Added.
        (WTF):
        (PrintStream):
        (WTF::print):
        (WTF::println):

2012-11-23  Robert Kroeger  <rjkroege@chromium.org>

        Remove unused ScrollByPixelVelocity
        https://bugs.webkit.org/show_bug.cgi?id=102840

        Reviewed by Sam Weinig.

        The GESTURE_ANIMATION feature turns on code in WebCore is unused.
        Remove it.

        No new tests: code removal/cleanup.

        * wtf/Platform.h:

2012-11-23  Laszlo Gombos  <l.gombos@samsung.com>

        [EFL] Define WTF_PLATFORM_EFL in Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=101482

        Reviewed by Kenneth Rohde Christiansen.

        Define WTF_PLATFORM_EFL in Platform.h to be consistent with 
        other ports.

        * wtf/Platform.h:

2012-11-16  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: extract MemoryObjectInfo declaration into a separate file
        https://bugs.webkit.org/show_bug.cgi?id=102510

        Reviewed by Pavel Feldman.

        Moved MemoryObjectInfo into separate header. Moved definition of MemoryInstrumentation
        methods that depend on MemoryObjectInfo declaration into MemoryInstrumentation.cpp to
        make MemoryInstrumentation require only forward declaration of MemoryObjectInfo.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * wtf/CMakeLists.txt:
        * wtf/MemoryInstrumentation.cpp: Added.
        (WTF):
        (WTF::MemoryInstrumentation::MemoryInstrumentation):
        (WTF::MemoryInstrumentation::~MemoryInstrumentation):
        (WTF::MemoryInstrumentation::getObjectType): this method allows to get object type without
        pulling in MemoryObjectInfo.h and all its dependencies.
        (WTF::MemoryInstrumentation::callReportObjectInfo):
        (WTF::MemoryInstrumentation::InstrumentedPointerBase::InstrumentedPointerBase):
        (WTF::MemoryInstrumentation::InstrumentedPointerBase::process):
        (WTF::MemoryClassInfo::init):
        (WTF::MemoryClassInfo::addRawBuffer):
        (WTF::MemoryClassInfo::addPrivateBuffer):
        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentation):
        (WTF::MemoryInstrumentation::addRootObject):
        (InstrumentedPointerBase):
        (WTF::MemoryInstrumentation::reportObjectMemoryUsage):
        (InstrumentedPointer):
        (WTF::MemoryInstrumentation::addObject): we now pass owner's MemoryObjectInfo in all places
        where we report objects pointed by the owner.
        (WTF::MemoryInstrumentation::OwningTraits::addObject):
        (WTF::MemoryClassInfo::MemoryClassInfo):
        (WTF::MemoryClassInfo::addMember):
        (MemoryClassInfo):
        (WTF::MemoryInstrumentation::addObjectImpl):
        (WTF::::InstrumentedPointer):
        (WTF::::callReportMemoryUsage):
        * wtf/MemoryObjectInfo.h: Added.
        (WTF):
        (MemoryObjectInfo):
        (WTF::MemoryObjectInfo::MemoryObjectInfo):
        (WTF::MemoryObjectInfo::objectType):
        (WTF::MemoryObjectInfo::objectSize):
        (WTF::MemoryObjectInfo::reportedPointer):
        (WTF::MemoryObjectInfo::memoryInstrumentation):
        (WTF::MemoryObjectInfo::reportObjectInfo):

2012-11-23  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Platform support for Accessibility feature.
        https://bugs.webkit.org/show_bug.cgi?id=100848

        Reviewed by Gyuyoung Kim.

        Enable HAVE(ACCESSIBILITY) ifdefs so that EFL port can use it.

        * wtf/Platform.h:

2012-11-22  Michael Saboff  <msaboff@apple.com>

        HTML integer parsing functions don't natively handle 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=102997

        Reviewed by Filip Pizlo.

        Added exports to the LChar* versions of charactersToIntStrict() and charactersToUIntStrict()
        to support the changes made to parseHTMLInteger() and parseHTMLNonNegativeInteger().

        * wtf/text/WTFString.h:
        (WTF::charactersToIntStrict): Added export
        (WTF::charactersToUIntStrict): Added export

2012-11-21  Filip Pizlo  <fpizlo@apple.com>

        Rename dataLog() and dataLogV() to dataLogF() and dataLogFV()
        https://bugs.webkit.org/show_bug.cgi?id=103001

        Rubber stamped by Dan Bernstein.

        * wtf/DataLog.cpp:
        (WTF::dataLogFV):
        (WTF::dataLogF):
        (WTF::dataLogFString):
        * wtf/DataLog.h:
        (WTF):
        * wtf/HashTable.cpp:
        (WTF::HashTableStats::dumpStats):
        * wtf/HashTable.h:
        (WTF::HashTable::Stats::dumpStats):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::dumpProfile):
        * wtf/StackStats.cpp:
        (WTF::StackStats::initialize):
        (WTF::StackStats::PerThreadStats::PerThreadStats):
        (WTF::StackStats::CheckPoint::CheckPoint):
        (WTF::StackStats::CheckPoint::~CheckPoint):
        (WTF::StackStats::probe):
        (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
        * wtf/text/WTFString.cpp:
        (String::show):

2012-11-21  Anthony G. Basile  <blueness@gentoo.org>

        Source/WTF/wtf/Assertions.cpp: fix build on a uClibc system
        https://bugs.webkit.org/show_bug.cgi?id=102946

        Reviewed by Tony Chang.

        Webkit-Gtk fails to build on a uClibc system because
        Assertions.cpp assumes that all Linux systems have execinfo.h
        and provide backtrace(). This is not necessarily the case for
        uClibc which can be configured without these.  This patch
        refines the check for OS(LINUX) to prevent this breakage.
        Originally reported at https://bugs.gentoo.org/441674

        * wtf/Assertions.cpp:

2012-11-19  Filip Pizlo  <fpizlo@apple.com>

        DFG should be able to cache closure calls
        https://bugs.webkit.org/show_bug.cgi?id=102662

        Reviewed by Gavin Barraclough.

        Added support to the meta allocator for easily querying whether an address falls within
        a certain allocated chunk. Also added a useful debug routine to SentinelLinkedList,
        which can be used to check if a node is on a particular list.

        * wtf/MetaAllocatorHandle.h:
        (MetaAllocatorHandle):
        (WTF::MetaAllocatorHandle::containsIntegerAddress):
        (WTF::MetaAllocatorHandle::contains):
        * wtf/SentinelLinkedList.h:
        (SentinelLinkedList):
        (WTF::::isOnList):
        (WTF):

2012-11-19  Laszlo Gombos  <l.gombos@samsung.com>

        Remove ReadWriteLock
        https://bugs.webkit.org/show_bug.cgi?id=101637

        Reviewed by Darin Adler.

        Remove ReadWriteLock as it does not seems to be used.

        * wtf/Platform.h: Remove the definition of HAVE_PTHREAD_RWLOCK.

        * wtf/ThreadingPrimitives.h: Remove the PlatformReadWriteLock type 
        and the ReadWriteLock class.

        * wtf/ThreadingPthreads.cpp: Remove the implementation of
        the ReadWriteLock class using pthreads.

2012-11-19  Brady Eidson  <beidson@apple.com>

        Add 64-bit specializations for atomicIncrement and atomicDecrement
        https://bugs.webkit.org/show_bug.cgi?id=102702

        Reviewed by Eric Carlson.

        * wtf/Atomics.h:
        (WTF::atomicIncrement): Add A 64-bit version for Darwin.
        (WTF::atomicDecrement): Ditto.

2012-11-18  Laszlo Gombos  <l.gombos@samsung.com>

        Remove non-existent directories from the make system
        https://bugs.webkit.org/show_bug.cgi?id=102632

        Reviewed by Adam Barth.

        Remove (non-existent) symbian references from the exclude list in gyp project files.

        * WTF.gyp/WTF.gyp:

2012-11-16  Michael Saboff  <msaboff@apple.com>

        String::fromUTF8() should take advantage of the ASCII check in convertUTF8ToUTF16()
        https://bugs.webkit.org/show_bug.cgi?id=100577

        Reviewed by Oliver Hunt.

        Passed in ASCII flag to convertUTF8ToUTF16() and if try, create an 8 bit string from the original arguments.
        Relanding after fix to https://bugs.webkit.org/show_bug.cgi?id=102482.

        * wtf/text/WTFString.cpp:
        (WTF::String::fromUTF8):

2012-11-15  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: add code for reporting stack traces of unknown instrumented objects
        https://bugs.webkit.org/show_bug.cgi?id=102384

        Reviewed by Pavel Feldman.

        Added an option to collect stack traces for instrumented pointers so that they
        can be printed in case the check failed for the pointer. This code is hidden
        behind a define.

        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentationClient):
        (WTF::MemoryInstrumentation::checkCountedObject): the method now returns false
        in case the check has failed.
        (InstrumentedPointer):
        (WTF::::InstrumentedPointer):
        (WTF):
        (WTF::::process):

2012-11-15  Mark Hahnenberg  <mhahnenberg@apple.com>

        Windows Fibers can corrupt the cached StackBounds
        https://bugs.webkit.org/show_bug.cgi?id=102411

        Reviewed by Geoffrey Garen.

        Windows has support for something called fibers, which are like lightweight versions of 
        threads. Multiple fibers can run within the context of a single thread and they have access 
        to the same thread local storage but have different stacks. If we create a new JSGlobalContext 
        on one fiber, then switch to another fiber and create a JSGlobalContext there, we will call 
        initializeThreading() once for each new JSGlobalContext created. However, since these fibers 
        are technically running inside the same thread, they will clobber each other's wtfThreadData(), 
        which is stored using thread local storage. This can lead to corruption of the WTFThreadData 
        structure for the fibers other than the last one to create a new JSGlobalContext, including 
        the StackBounds data structure which is used during conservative scanning, among other things. 
        This can lead to crashes during garbage collection on Windows if fibers are used.

        A quick fix would be to always get a fresh StackBounds data structure when asking for it 
        instead of using the cached version from the thread local storage. There is a larger problem 
        in that these fibers can corrupt other WebKit data that uses thread local storage. We'll leave 
        those theoretical fixes for future theoretical bugs.

        * wtf/WTFThreadData.h:
        (WTF::WTFThreadData::stack): We now refresh the m_stackBounds field whenever somebody asks for 
        the StackBounds.

2012-11-15  Maciej Stachowiak  <mjs@apple.com>

        Fix an erroneous comment about the operators required by binarySearch
        https://bugs.webkit.org/show_bug.cgi?id=102406

        Reviewed by Anders Carlsson.

        * wtf/StdLibExtras.h: binarySearch needs '==' and '<', not '--', '<' and '>'.

2012-11-14  Michael Saboff  <msaboff@apple.com>

        String::append() should handle two 8 bit strings without converting both to 16 bits
        https://bugs.webkit.org/show_bug.cgi?id=102286

        Reviewed by Oliver Hunt.

        If both strings are 8 bit, then allocate and copy to a new 8 bit string.  Since most strings are
        8 bit, this will save up to 3x the resulting string length in bytes.  2x is due to the possible
        surviving 16 bit source string upconversion and 1x for the 16 bit result now being 8 bit.

        * wtf/text/WTFString.cpp:
        (WTF::String::append):

2012-11-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][ARM] Enable the DFG JIT on ARMv7(Thumb2)
        https://bugs.webkit.org/show_bug.cgi?id=101747

        Reviewed by Simon Hausmann.

        * wtf/Platform.h:

2012-11-13  Christophe Dumez  <christophe.dumez@intel.com>

        Use prefix form of increment / decrement operators in WTF String classes when possible
        https://bugs.webkit.org/show_bug.cgi?id=101859

        Reviewed by Benjamin Poulain.

        Use prefix form of increment / decrement operators whenever possible in
        WTF String classes as this seems to be the convention in WebKit.

        * wtf/text/ASCIIFastPath.h:
        (WTF::copyLCharsFromUCharSource):
        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::add):
        * wtf/text/Base64.cpp:
        (WTF::base64Encode):
        (WTF::base64DecodeInternal):
        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::allocateBufferUpConvert):
        * wtf/text/StringConcatenate.h:
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::getData16SlowCase):
        (WTF::StringImpl::upconvertCharacters):
        (WTF::StringImpl::containsOnlyWhitespace):
        (WTF::StringImpl::lower):
        (WTF::StringImpl::upper):
        (WTF::StringImpl::foldCase):
        (WTF::StringImpl::stripMatchedCharacters):
        (WTF::StringImpl::removeCharacters):
        (WTF::StringImpl::simplifyMatchedCharactersToSpace):
        (WTF::reverseFindInner):
        (WTF::reverseFindIgnoringCaseInner):
        (WTF::StringImpl::replace):
        (WTF::StringImpl::createWithTerminatingNullCharacter):
        * wtf/text/StringImpl.h:
        (WTF::codePointCompare):
        * wtf/text/WTFString.cpp:
        (WTF::String::String):
        (WTF::toIntegralType):

2012-11-13  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r134490.

        * wtf/FastMalloc.cpp:

2012-11-13  Brent Fulgham  <bfulgham@webkit.org> and Alex Christensen <alex.christensen@flexsim.com>

        Fix FastMalloc.cpp compile error for MSVC in 64-bit.
        https://bugs.webkit.org/show_bug.cgi?id=88344

        Reviewed by Ryosuke Niwa.

        MSVC will not compile array declarations of zero size. The existing
        padding math for TCMalloc_Central_FreeListPadded would evaluate
        to zero on 64-bit machines, preventing the compile from finishing.

        * wtf/FastMalloc.cpp:
        (TCMalloc_Central_FreeListPadded_Template): Add new template (and
        zero-size specialization) to provide proper behavior under 64-bit
        Windows build.

2012-11-13  Brent Fulgham <bfulgham@webkit.org> and Alex Christensen  <alex.christensen@flexsim.com>

        FastMalloc.cpp needs to be reordered before padding bug can be fixed
        https://bugs.webkit.org/show_bug.cgi?id=89366

        Note: This file violates Style rules.  This change only moves
        the TCMalloc_Central_FreeList class declaration and the various
        FastMallocZone methods earlier in the file.

        Reviewed by Ryosuke Niwa.

        * wtf/FastMalloc.cpp:
        Reordered definitions to prepare for adding specialized template
        (WTF):
        (TCMalloc_Central_FreeList):
        (WTF::TCMalloc_Central_FreeList::length):
        (WTF::TCMalloc_Central_FreeList::tc_length):
        (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects):
        (TCMalloc_Central_FreeListPadded):
        (FastMallocZone):
        (WTF::FastMallocZone::goodSize):
        (WTF::FastMallocZone::check):
        (WTF::FastMallocZone::print):
        (WTF::FastMallocZone::log):
        (WTF::FastMallocZone::forceLock):
        (WTF::FastMallocZone::forceUnlock):
        (WTF::FastMallocZone::statistics):
        (WTF::FastMallocZone::zoneValloc):
        (WTF::FastMallocZone::zoneDestroy):
        (WTF::KernelSupportsTLS):
        (WTF::CheckIfKernelSupportsTLS):
        (TCMalloc_ThreadCache):

2012-11-11  Kenichi Ishibashi  <bashi@chromium.org>

        WTFString::utf8() should have a mode of conversion to use replacement character
        https://bugs.webkit.org/show_bug.cgi?id=101678

        Reviewed by Alexander Pavlov.

        Introduce conversion mode to String::utf8().
        There are three conversion modes; lenient mode, strict mode, and
        "replacing unpaired surrogates with the replacement character" (replacement) mode.
        Lenient mode converts unpaired surrogates. Strict mode fails when there is an unpaired
        surrogates and returns CString(). Replacement mode replaces unpaired surrogates with
        the replacement character(U+FFFD). Replacement mode implements the algorithm defined at
        http://dev.w3.org/2006/webapi/WebIDL/#dfn-obtain-unicode. WebSocket::send() requires
        this algorithm to encode a string to utf-8.

        * wtf/text/WTFString.cpp:
        (WTF::String::utf8): Changed to take ConversionMode as the argument.
        * wtf/text/WTFString.h:
        (String):

2012-11-09  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Fix heap snapshots counted several times by NMI
        https://bugs.webkit.org/show_bug.cgi?id=101085

        The fix moves snapshots size counting to V8PerIsolateData class. As long
        as it has one instance per isolate its reportMemoryUsage should be
        called once per isolate.

        Reviewed by Yury Semikhatsky.

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryClassInfo::addPrivateBuffer):

2012-11-08  Michael Saboff  <msaboff@apple.com>

        HashAndUTF8CharactersTranslator should create an 8 bit string if possible
        https://bugs.webkit.org/show_bug.cgi?id=101515

        Reviewed by Darin Adler.

        Added isAllASCII flag that's passed to convertUTF8ToUTF16().  If on return it is true, create an
        8 bit string, otherwise use the 16 bit string.

        * wtf/text/AtomicString.cpp:
        (WTF::HashAndUTF8CharactersTranslator::translate):

2012-11-08  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build with MSVC 2012 and Angle
        https://bugs.webkit.org/show_bug.cgi?id=101588

        Reviewed by Tor Arne Vestbø.

        Angle includes STL's <memory> header file, which with MSVC 2012 includes stdint.h. MSVC 2012
        does ship stdint.h, but it's lacking other headers such as inttypes.h.

        So for the rest of WebKit we have to continue to use our own versions of these files from
        JavaScriptCore/os-win32. But for Angle we are just including a shipped STL header file (memory)
        and so it's up to the compiler to make that work, i.e. using the stdint.h it ships.

        This patch moves the addition of JavaScriptCore/os-win32 out of default_post.prf, so that it
        doesn't apply to each and every target anymore. In particular it won't apply to Angle anymore,
        because its presence causes a build issue where due to the addition of os-win32/ we end up
        including our own stdint.h but are lacking WTF/ to be in the include search path (which our own
        stdint.h requires). So out of default_post.prf and into WTF.pri, our own wrappers are now only
        used where WTF is also needed, and since os-win32/stdint.h depends on wtf/Platform.h, it seems
        like a logical location.

        * WTF.pri:

2012-11-07  Hans Wennborg  <hans@chromium.org>

        Fix asm operand type for weakCompareAndSwap on ARM_THUMB2
        https://bugs.webkit.org/show_bug.cgi?id=101238

        Reviewed by Benjamin Poulain.

        'result' was a bool, but the asm was expecting a 32-bit register. A
        recent version of Clang warned about this:

          WebKit/Source/WTF/wtf/Atomics.h:163:34: error: the size being stored
          is truncated, use a modifier to specify the size [-Werror,-Wasm-operand-widths]

        This patch fixes it by making 'result' an unsigned. It does not change
        the functionality in practice ('result' would be in a 32-bit register
        anyway), but it makes the code more correct and makes the warning go
        away.

        Also make 'result' for the X86 version an 'unsigned char' to make it
        more clear that it is a byte.

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

2012-11-07  Remy Demarest  <rdemarest@apple.com>

        Function adoptNS and adoptCF should not generate memory leak diagnostic with Clang Static Analyzer.
        https://bugs.webkit.org/show_bug.cgi?id=101420

        Reviewed by Benjamin Poulain.

        Add attributes to the adoptNS and adoptCF function arguments to remove Clang Static Analyzer diagnotics.
        Define CF_RELEASES_ARGUMENT and NS_RELEASES_ARGUMENT if not available, use them in function declarations.

        * wtf/RetainPtr.h:
        (WTF::adoptCF): Adds CF_RELEASES_ARGUMENT attribute to the argument.
        (WTF::adoptNS): Adds NS_RELEASES_ARGUMENT attribute to the argument.

2012-11-07  Christophe Dumez  <christophe.dumez@intel.com>

        Add replaceWithLiteral() method to WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=101257

        Reviewed by Benjamin Poulain.

        Add replaceWithLiteral() method to WTF::String that takes
        replacement string as a literal to avoid uselessly constructing
        a String object.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::replace):
        (WTF):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::replace):
        (StringImpl):
        * wtf/text/WTFString.h:
        (String):
        (WTF::String::replaceWithLiteral):

2012-11-06  Michael Saboff  <msaboff@apple.com>

        StringBuilder::append(UChar) with an 8 bit quantity shouldn't change the contents to 16 bits
        https://bugs.webkit.org/show_bug.cgi?id=101421

        Reviewed by Anders Carlsson.

        If the string builder contains only 8 bit data, check if the character being appended contains
        8 bit data.  If so, append it to the 8 bit buffer instead of converting the buffer to 16 bits.

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

2012-11-06  Benjamin Poulain  <benjamin@webkit.org>

        Speed up TransformationMatrix::multiply() on modern ARM
        https://bugs.webkit.org/show_bug.cgi?id=101084

        Reviewed by Gavin Barraclough.

        * wtf/Platform.h:
        Add CPU(ARM_VFP) for detecting VFP availability.
        Add CPU(APPLE_ARMV7S) for the Apple ARMv7S architecture.

2012-11-06  Laszlo Gombos  <l.gombos@samsung.com>

        Refactor setting TEXTURE_MAPPER_GL
        https://bugs.webkit.org/show_bug.cgi?id=99758

        Reviewed by Noam Rosenthal.

        Make the rule that sets the default for USE(3D_GRAPHICS) port independent.

        If not set, set USE(TEXTURE_MAPPER_GL) when USE(TEXTURE_MAPPER) and 
        USE(3D_GRAPHICS) is enabled.

        * wtf/Platform.h:

2012-11-05  Philip Rogers  <pdr@google.com>

        Unblock SVG external references
        https://bugs.webkit.org/show_bug.cgi?id=100635

        Reviewed by Adam Barth.

        This patch reverts r132849 and r132869 because the potential XSS issue
        turned out to not be an issue after all.

        Covered by existing tests, many of which are re-whitelisted with this patch.

        * wtf/Platform.h:

2012-11-05  Dima Gorbik  <dgorbik@apple.com>

        Back out controversial changes from Bug 98665.
        https://bugs.webkit.org/show_bug.cgi?id=101244

        Reviewed by David Kilzer.

        Backing out changes from Bug 98665 until further discussions take place on rules for including Platform.h in Assertions.h.

        * wtf/Assertions.h:

2012-11-03  Alexey Proskuryakov  <ap@apple.com>

        Get rid of USE(CFURLSTORAGESESSIONS)
        https://bugs.webkit.org/show_bug.cgi?id=101131

        Reviewed by Sam Weinig.

        * wtf/Platform.h:

2012-11-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI instrument NodeRareData::Map. It uses ~250k on nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=101052

        Reviewed by Yury Semikhatsky.

        I noticed that in many cases cache structures are plain static HashMap, HashSet etc.
        MemoryAgent can visit it but instrumentation for these containers report no objectType.
        It means that addRootObject method needs to accept objectType property as an argument.
        Otherwise I would have had to create a proxy class with proper objectType.

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryInstrumentation::addRootObject):

2012-11-01  Kent Tamura  <tkent@chromium.org>

        Introduce ENABLE_DATE_AND_TIME_INPUT_TYPES, and clarify usage of other related flags
        https://bugs.webkit.org/show_bug.cgi?id=101007

        Reviewed by Kentaro Hara.

        * wtf/Platform.h:
        Add ENABLE_DATE_AND_TIME_INPUT_TYPES.  It's a union of
        ENABLE_INPUT_TYPE_{DATE,DATETIME,DATETIMELOCAL,MONTH,TIME,WEEK}.

2012-11-01  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: do not call checkCountedObject with wrong pointers
        https://bugs.webkit.org/show_bug.cgi?id=100958

        Reviewed by Alexander Pavlov.

        Removed calls to checkCountedObject from places where the pointer may contain
        an address of a base class which may differ from the actual object pointer. Instead
        checkCountedObject is only called right after processing deferred pointer where
        we know real address.

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryInstrumentation::addObjectImpl):
        (WTF::::process):

2012-11-01  Alexey Proskuryakov  <ap@apple.com>

        Rename HAVE(NETWORK_CFDATA_ARRAY_CALLBACK) to USE(NETWORK_CFDATA_ARRAY_CALLBACK)

        Rubber-stamped by Joe Pecoraro.

        All CFNetwork based platforms have this now, but not all use it at the moment.

2012-11-01  Alexey Proskuryakov  <ap@apple.com>

        Fix HAVE(NETWORK_CFDATA_ARRAY_CALLBACK) build
        https://bugs.webkit.org/show_bug.cgi?id=100979

        Reviewed by Joseph Pecoraro.

        * wtf/Platform.h: Added a FIXME about HAVE(NETWORK_CFDATA_ARRAY_CALLBACK).

2012-11-01  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: report memory occupied by ResourceRequest instead of its base ResourceRequestBase
        https://bugs.webkit.org/show_bug.cgi?id=100497

        Reviewed by Alexander Pavlov.

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryClassInfo::addPrivateBuffer): do not report memory usage for empty buffer.

2012-10-31  Anders Carlsson  <andersca@apple.com>

        Fix build.
        <rdar://problem/12612207>.

        Reviewed by Sam Weinig.

        * wtf/CheckedArithmetic.h:

2012-10-31  Benjamin Poulain  <bpoulain@apple.com>

        Add an optimized version of copyLCharsFromUCharSource for ARM
        https://bugs.webkit.org/show_bug.cgi?id=94886

        Reviewed by Gavin Barraclough.

        Michael Saboff added a SIMD version of copyLCharsFromUCharSource() in r125846.

        This patch a similar optimization for ARMv7 by using the interleaved load/store available
        in the NEON extension.

        The performance gains:
        -10000 characters: ~3.5 times faster.
        -20 characters (2 vectors): ~55% faster.
        -15 characters (1 vector): ~21% faster.
        -3 characters (no vector, pure overhead): ~10% slower.

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

2012-10-31  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2][AC] Use smart pointers for Evas_GL types
        https://bugs.webkit.org/show_bug.cgi?id=100745

        Reviewed by Kenneth Rohde Christiansen.

        Make OwnPtr usable with Evas_GL type to avoid handling
        raw pointers in EFL port.

        * wtf/OwnPtrCommon.h:
        (WTF):
        * wtf/efl/OwnPtrEfl.cpp:
        (WTF):
        (WTF::deleteOwnedPtr):

2012-10-29  Anders Carlsson  <andersca@apple.com>

        Build WebKit as C++11 on Mac
        https://bugs.webkit.org/show_bug.cgi?id=100720

        Reviewed by Daniel Bates.

        * Configurations/Base.xcconfig:
        Add CLANG_CXX_LANGUAGE_STANDARD=gnu++0x.

        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::add):
        Change the type of length to be unsigned to prevent implicit type conversions in non-constant initializer lists.

        * wtf/unicode/UTF8.cpp:
        (Unicode):
        Add static_casts to prevent implicit type conversions in non-constant initializer lists.

2012-10-29  Anders Carlsson  <andersca@apple.com>

        String::createCFString should return a RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=100419

        Reviewed by Andreas Kling.

        Make String::createCFString and StringImpl::createCFString return RetainPtrs.

        * wtf/text/AtomicString.h:
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.h:

2012-10-30  Mark Rowe  <mrowe@apple.com>

        Fix WTF to not install a few header files in bogus locations.

        * WTF.xcodeproj/project.pbxproj:

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Simplify Xcode configuration settings that used to vary between OS versions.

        Reviewed by Dan Bernstein.

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

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Remove references to unsupported OS and Xcode versions.

        Reviewed by Anders Carlsson.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig: Removed.
        * Configurations/DebugRelease.xcconfig:
        * WTF.xcodeproj/project.pbxproj:

2012-10-29  Anders Carlsson  <andersca@apple.com>

        AtomicString(CFStringRef) shouldn't unconditionally create a StringImpl
        https://bugs.webkit.org/show_bug.cgi?id=100701

        Reviewed by Dan Bernstein.

        * wtf/text/AtomicString.h:
        (WTF::AtomicString::AtomicString):
        Change the constructors that take a CFStringRef and an NSString * to call AtomicString::add(CFStringRef)
        and remove AtomicString::createCFString.

        (WTF::AtomicString::add):
        Add new member function declaration. The definition is in a new file in WebCore, AtomicStringCF.cpp.
        Also, fix the overload of add that takes a const char* to call the right other overload instead of itself.

2012-10-29  Adam Barth  <abarth@webkit.org>

        Unreviewed. Correct my previous patch to disable external SVG
        references only on PLATFORM(CHROMIUM).

        * wtf/Platform.h:

2012-10-29  Adam Barth  <abarth@webkit.org>

        Block SVG external references pending a security review
        https://bugs.webkit.org/show_bug.cgi?id=100635

        Reviewed by Eric Seidel.

        We need to do a security review of loading external SVG references
        before we're sure that it is safe.

        * wtf/Platform.h:

2012-10-29  Michael Saboff  <msaboff@apple.com>

        String::split(UChar, Vector<String>&) shouldn't create a temporary String
        https://bugs.webkit.org/show_bug.cgi?id=100578

        Reviewed by Anders Carlsson.

        Changed split(UChar, Vector<String>&) to call split(UChar, bool, Vector<String>&) instead of creating a
        string and calling the split(String,...) version and moved it to WTFString.h.  Also moved
        split(const String& separator, Vector<String>& result) to WTFString.h.

        * wtf/text/WTFString.cpp:
        (WTF::String::split):
        * wtf/text/WTFString.h:
        (WTF::String::split):

2012-10-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132736.
        http://trac.webkit.org/changeset/132736
        https://bugs.webkit.org/show_bug.cgi?id=100652

        It broke all plugin related tests on GTK and on Qt (Requested
        by Ossy on #webkit).

        * wtf/text/WTFString.cpp:
        (WTF::String::fromUTF8):

2012-10-27  Michael Saboff  <msaboff@apple.com>

        Try to create AtomicString as 8 bit where possible
        https://bugs.webkit.org/show_bug.cgi?id=100575

        Reviewed by Oliver Hunt.

        Added StringImpl::create8BitIfPossible() that first tries to create an 8 bit string.  If it finds a 16 bit character
        during processing, it calls the standard create() method.  The assumption is that this will be used on mostly 8 bit
        strings and ones that are shorter (in the tens of characters).  Changed AtomicString to use the new creation method
        for UChar based construction.

        * wtf/text/AtomicString.cpp:
        (WTF::UCharBufferTranslator::translate):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::create8BitIfPossible):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::create8BitIfPossible):

2012-10-27  Michael Saboff  <msaboff@apple.com>

        String::fromUTF8() should take advantage of the ASCII check in convertUTF8ToUTF16()
        https://bugs.webkit.org/show_bug.cgi?id=100577

        Reviewed by Oliver Hunt.

        Passed is ASCII flag to convertUTF8ToUTF16() and if try, create an 8 bit string from the original arguments.

        * wtf/text/WTFString.cpp:
        (WTF::String::fromUTF8):

2012-10-27  Dan Bernstein  <mitz@apple.com>

        REAL_PLATFORM_NAME build setting is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=100587

        Reviewed by Mark Rowe.

        Removed the definition of REAL_PLATFORM_NAME and replaced references to it with references
        to PLATFORM_NAME.

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

2012-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132689.
        http://trac.webkit.org/changeset/132689
        https://bugs.webkit.org/show_bug.cgi?id=100574

        Broke HashMaps containing RetainPtrs (Requested by andersca on
        #webkit).

        * wtf/RetainPtr.h:

2012-10-26  Anders Carlsson  <andersca@apple.com>

        Add an operator& to RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=100549

        Reviewed by Dan Bernstein.

        This is useful for APIs that return references using out parameters.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr::operator&):

2012-10-26  Gabor Ballabas  <gaborb@inf.u-szeged.hu>

        [Qt] Enable JSC's disassembler on x86, x86_64 Linux
        https://bugs.webkit.org/show_bug.cgi?id=100386

        Reviewed by Simon Hausmann.

        It works fine on Linux x86, x86_64 just needs to be enabled in the
        QtWebKit build system.

        * wtf/Platform.h:

2012-10-25  Michael Saboff  <msaboff@apple.com>

        REGRESSION (r131836): failures in list styles tests on EFL, GTK
        https://bugs.webkit.org/show_bug.cgi?id=99824

        Reviewed by Oliver Hunt.

        Fixed ASCII check.
        Added placeholder argument for new argument added to convertUTF8ToUTF16() in http://trac.webkit.org/changeset/131836.

        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::convertUTF8ToUTF16):
        * wtf/unicode/glib/UnicodeGLib.cpp:
        (WTF::Unicode::convertCase):

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Remove some C'ism from EwkView
        https://bugs.webkit.org/show_bug.cgi?id=100370

        Reviewed by Kenneth Rohde Christiansen.

        Make OwnPtr useable for Ecore_IMF_Context to avoid
        using raw pointers in EFL port.

        * wtf/OwnPtrCommon.h:
        (WTF):
        * wtf/PlatformEfl.cmake:
        * wtf/efl/OwnPtrEfl.cpp:
        (WTF::deleteOwnedPtr):
        (WTF):

2012-09-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: provide memory instrumentation for ListHashSet
        https://bugs.webkit.org/show_bug.cgi?id=97786

        Reviewed by Vsevolod Vlasov.

        Added memory instrumentation for ListHashSet.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/HashSet.h:
        (WTF):
        * wtf/ListHashSet.h:
        (ListHashSet):
        (ListHashSetNodeAllocator): changed visibility of inPool method to public
        (WTF::ListHashSetNodeAllocator::pool):
        (WTF::ListHashSetNodeAllocator::pastPool):
        (WTF::::sizeInBytes): added a method that returns size of the set in bytes including
        all its internals but not the content elements.
        (WTF):
        * wtf/MemoryInstrumentation.h: removed onsolete method. All clients were updated to
        use generic addMember instead.
        (MemoryInstrumentation):
        (WTF::MemoryClassInfo::addPrivateBuffer):
        * wtf/MemoryInstrumentationHashSet.h:
        * wtf/MemoryInstrumentationListHashSet.h: Copied from Source/WTF/wtf/MemoryInstrumentationHashSet.h.
        (WTF):
        (WTF::reportMemoryUsage):

2012-10-23  Benjamin Poulain  <benjamin@webkit.org>

        WTFURL: Implement KURL::setPort()
        https://bugs.webkit.org/show_bug.cgi?id=99898

        Reviewed by Adam Barth.

        Add an efficient implementation for remplacing the port component
        in an URL. This will be the base for replacing other components
        efficiently.

        The testing is covered by fast/dom/HTMLAnchorElement/set-href-attribute-port.html

        * wtf/url/api/ParsedURL.cpp:
        (WTF::generateNewSpecWithPort):
        (WTF::replacePortWithString):
        (WTF::ParsedURL::replacePort):
        * wtf/url/api/ParsedURL.h:
        (ParsedURL):

2012-10-22  Michael Saboff  <msaboff@apple.com>

        Regression(r131655): Crash in StringImpl::findIgnoringCase
        https://bugs.webkit.org/show_bug.cgi?id=99753

        Reviewed by Geoffrey Garen.

        Fixed to use the searchLength to take into account the start index.

        Added LayoutTests/fast/js/find-ignoring-case-regress-99753.html

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::findIgnoringCase):

2012-10-22  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed: Re-enable LLINT on Qt/Linux after r131932.

        * wtf/Platform.h:

2012-10-22  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: do not double count memory of objects with multiple ancestors
        https://bugs.webkit.org/show_bug.cgi?id=99958

        Reviewed by Alexander Pavlov.

        Make sure memory occupied by objects of classes with multiple inheritance is
        not double counted.

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryObjectInfo::MemoryObjectInfo):
        (WTF::MemoryObjectInfo::reportedPointer):
        (WTF::MemoryObjectInfo::reportObjectInfo): 1) Store actual pointer to the instrumented
        object as it may differ from the original pointer by which it was reported. 2) Make
        the method non-template and calculate object size on the caller side.
        (MemoryObjectInfo):
        (WTF::MemoryInstrumentation::reportObjectMemoryUsage):
        (WTF::MemoryClassInfo::MemoryClassInfo):
        (WTF::MemoryInstrumentation::InstrumentedPointer::process): use adjusted pointer
        returned by reportMemoryUsage to check if the object has already been visited when
        the pointer differs from the orinal one(it may happen if the object was reported
        by a pointer to one of its base classes).

2012-10-20  Martin Robinson  <mrobinson@igalia.com>

        Fix 'make dist' for the GTK+ port

        * GNUmakefile.list.am: Add missing files to the source list.

2012-10-19  Mark Lam  <mark.lam@apple.com>

        Added WTF::StackStats mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=99805.

        Reviewed by Geoffrey Garen.

        Disabled by default. Should have no performance and memory cost when
        disabled. To enable, #define ENABLE_STACK_STATS 1 in StackStats.h.
        The output is currently hardcoded to be dumped in /tmp/stack-stats.log,
        and is in the form of stack sample events. By default, it only logs
        a sample event when a new high watermark value is encountered.

        Also renamed StackBounds::recursiveCheck() to isSafeToRecurse().

        * WTF.xcodeproj/project.pbxproj:
        * wtf/StackBounds.h:
        (StackBounds):
        (WTF::StackBounds::size):
        (WTF::StackBounds::isSafeToRecurse):
        * wtf/StackStats.cpp: Added.
        (WTF):
        (WTF::StackStats::initialize):
        (WTF::StackStats::PerThreadStats::PerThreadStats):
        (WTF::StackStats::CheckPoint::CheckPoint):
        (WTF::StackStats::CheckPoint::~CheckPoint):
        (WTF::StackStats::probe):
        (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
        (WTF::StackStats::LayoutCheckPoint::~LayoutCheckPoint):
        * wtf/StackStats.h: Added.
        (WTF):
        (StackStats):
        (CheckPoint):
        (WTF::StackStats::CheckPoint::CheckPoint):
        (PerThreadStats):
        (WTF::StackStats::PerThreadStats::PerThreadStats):
        (LayoutCheckPoint):
        (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
        (WTF::StackStats::initialize):
        (WTF::StackStats::probe):
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading):
        * wtf/WTFThreadData.cpp:
        (WTF::WTFThreadData::WTFThreadData):
        * wtf/WTFThreadData.h:
        (WTFThreadData):
        (WTF::WTFThreadData::stackStats):

2012-10-19  Anders Carlsson  <andersca@apple.com>

        Deque can use std::reverse_iterator for its reverse iterators
        https://bugs.webkit.org/show_bug.cgi?id=99789

        Reviewed by Andreas Kling.

        Remove DequeReverseIterator and DequeConstReverseIterator and just use std::reverse_iterator directly.
        Also, remove the DequeIteratorBase<T, inlineCapacity> to Base typedef - We can already use DequeIteratorBase since it's
        equivalent to the full class template type.

        * wtf/Deque.h:
        (WTF::Deque::rbegin):
        (WTF::Deque::rend):
        (DequeIteratorBase):
        (WTF::DequeIteratorBase::assign):
        (DequeIterator):
        (DequeConstIterator):
        (WTF::::checkValidity):
        (WTF::::DequeIteratorBase):
        (WTF::=):
        (WTF::::isEqual):

2012-10-19  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix, use C-style comment instead of C++

        * wtf/Platform.h:

2012-10-19  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r131822): It made 500+ tests crash on 32 bit platforms
        https://bugs.webkit.org/show_bug.cgi?id=99814

        Reviewed by Simon Hausmann.

        * wtf/Platform.h: Disable LLINT on (PLATFORM(QT) && CPU(X86)) temporarily until proper fix.

2012-10-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI provide data for mixing with tcmalloc heap dumps.
        https://bugs.webkit.org/show_bug.cgi?id=99457

        Reviewed by Yury Semikhatsky.

        countObjectSize now accepts ptr as the first argument and saves it into HashMap if the binary was ran with HEAPPROFILE env variable.
        getProcessMemoryDistribution does snapshot and calls the downstream code with the map of counted objects.

        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentationClient):
        (WTF::MemoryInstrumentation::countObjectSize):
        (WTF::MemoryInstrumentation::addRawBuffer):
        (WTF::MemoryClassInfo::addPrivateBuffer):
        (WTF::MemoryInstrumentation::addObjectImpl):
        (WTF::MemoryInstrumentation::addListHashSet):
        (WTF::::process):

2012-10-18  Michael Saboff  <msaboff@apple.com>

        convertUTF8ToUTF16() Should Check for ASCII Input
        ihttps://bugs.webkit.org/show_bug.cgi?id=99739

        Reviewed by Geoffrey Garen.

        Added code to accumulate the "or" of all characters seen during the UTF8 to UTF16 conversion.  This is
        used to check to see if all characters are ASCII and is returned via a bool*.

        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::convertUTF8ToUTF16):
        * wtf/unicode/UTF8.h:

2012-10-18  Michael Saboff  <msaboff@apple.com>

        Mac WTF build checks dependencies before copying header files
        https://bugs.webkit.org/show_bug.cgi?id=99770

        Reviewed by Mark Rowe.

        Fixed up build rules per Mark Rowe. Made new target an Aggregate and removed "WTF copy".

        * Configurations/CopyWTFHeaders.xcconfig: Added.
        * Configurations/WTF.xcconfig:
        * WTF.xcodeproj/project.pbxproj:

2012-10-18  Michael Saboff  <msaboff@apple.com>

        Mac WTF build checks dependencies before copying header files
        https://bugs.webkit.org/show_bug.cgi?id=99770

        Reviewed by Geoffrey Garen.

        Added a new build target "Copy WTF HEaders" to copy the header files and made that new target a dependency
        for the main WTF build target.  Moved the "Copy WTF Headers" phase from WTF target to the new target.

        * WTF.xcodeproj/project.pbxproj:

2012-10-17  Anders Carlsson  <andersca@apple.com>

        Clean up Vector.h
        https://bugs.webkit.org/show_bug.cgi?id=99622

        Reviewed by Benjamin Poulain.

        Remove unused member functions from Vector and get rid of the std::max and std::min using declarations
        (as per the WebKit coding style guidelines).

        * WTF.xcodeproj/project.pbxproj:
        Turns out StreamBuffer.h was never added to the Xcode project; add it. Also go ahead and sort the project file.

        * wtf/Deque.h:
        (WTF::::expandCapacity):
        * wtf/StreamBuffer.h:
        (WTF::StreamBuffer::append):
        Add std:: prefixes to max and min.

        * wtf/Vector.h:
        Remove VectorBase::bufferSlot(), VectorReverseProxy and add std:: prefixes where needed.

2012-10-17  Michael Saboff  <msaboff@apple.com>

        Creating a String from an NSString should check for all 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=99392

        Reviewed by Geoffrey Garen.

        Exported the LChar* version of create().

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::create):

2012-10-17  Michael Saboff  <msaboff@apple.com>

        StringImpl::findIgnoringCase() and reverseFindIgnoringCase() don't optimally handle a mix of 8 and 16 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=99224

        Reviewed by Geoffrey Garen.

        Added helper templated functions and all four combinations similar to find() and reverseFind().

        (WTF::findIgnoringCaseInner):
        (WTF::StringImpl::findIgnoringCase):
        (WTF::reverseFindIgnoringCaseInner):
        (WTF::StringImpl::reverseFindIgnoringCase):

2012-10-17  Michael Saboff  <msaboff@apple.com>

        AtomicString::HashAndUTF8CharactersTranslator::equal() doesn't optimally handle 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=99223

        Reviewed by Geoffrey Garen.

        Added an 8 bit path.

        * wtf/text/AtomicString.cpp:
        (WTF::HashAndUTF8CharactersTranslator::equal):

2012-10-17  Anders Carlsson  <andersca@apple.com>

        Always use fastRealloc when growing or shrinking the Vector buffer
        https://bugs.webkit.org/show_bug.cgi?id=99616

        Reviewed by Andreas Kling.

        Remove the pointless #if PLATFORM(BLACKBERRY) and always try to use fastRealloc to grow or shrink the
        vector buffer when possible; realloc should always be at least as fast as free+malloc.

        * wtf/Vector.h:
        (WTF::VectorBufferBase::shouldReallocateBuffer):

2012-10-16  Michael Saboff  <msaboff@apple.com>

        Change WTF_USE_8BIT_TEXTRUN to ENABLE_8BIT_TEXTRUN
        https://bugs.webkit.org/show_bug.cgi?id=99484

        Reviewed by Eric Seidel.

        Changed macro name to align with it's purpose.

        * wtf/Platform.h:

2012-10-16  Michael Saboff  <msaboff@apple.com>

        StringImpl::reverseFind() with a single match character isn't optimal for mixed 8/16 bit cases
        https://bugs.webkit.org/show_bug.cgi?id=99363

        Reviewed by Benjamin Poulain.

        Factored out the 8/16 bitness check of the match character from the subject character bitness
        check.  Did this for both find() and reverseFind().  Added all UChar/LChar combinations to the
        inline reverseFind().

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::find):
        (WTF::StringImpl::reverseFind):
        * wtf/text/StringImpl.h:
        (WTF::reverseFind):

2012-10-16  Dima Gorbik  <dgorbik@apple.com>

        Remove Platform.h include from the header files.
        https://bugs.webkit.org/show_bug.cgi?id=98665

        Reviewed by Eric Seidel.

        We don't want other clients that include WebKit headers to know about Platform.h.

        * wtf/Assertions.h:
        * wtf/MainThread.h:

2012-10-16  Adrienne Walker  <enne@google.com>

        Remove unused WTF_NEW_HASHMAP_ITERATORS_INTERFACE #define
        https://bugs.webkit.org/show_bug.cgi?id=99367

        Reviewed by James Robinson.

        Does what it says on the tin.

        * wtf/HashTraits.h:

2012-10-15  Andreas Kling  <kling@webkit.org>

        Remove WTF::fastDeleteAllValues().
        <http://webkit.org/b/99345>

        Reviewed by Eric Seidel.

        It was only used to fastDelete() a class that was already overriding operator delete
        by way of WTF_MAKE_FAST_ALLOCATED anyway.

        * wtf/HashSet.h:
        (WTF):
        (HashSet):

2012-10-15  Mark Hahnenberg  <mhahnenberg@apple.com>

        Parallel GC should not be disabled for all platforms

        * wtf/Platform.h: D'oh!

2012-10-15  George Staikos  <staikos@webkit.org>

        [BlackBerry] Adapt to Platform API changes in string handling
        https://bugs.webkit.org/show_bug.cgi?id=99248

        Reviewed by Yong Li.

        Convert usage of WebString, char* and std::string to BlackBerry::Platform::String.

        * wtf/Assertions.cpp: Use proper log function.
        * wtf/text/AtomicString.h: Add BlackBerry support
        (AtomicString):
        (WTF::AtomicString::AtomicString): Add BlackBerry Support
        (WTF::AtomicString::operator BlackBerry::Platform::String):
        * wtf/text/StringImpl.h: Conversion support.
        * wtf/text/WTFString.h: Conversion support.
        (Platform):
        (String):

2012-10-15  Michael Saboff  <msaboff@apple.com>

        Update RenderText to use String instead of UChar* for text
        https://bugs.webkit.org/show_bug.cgi?id=96979

        Reviewed by Dan Bernstein.

        Added WTF_USE_8BIT_TEXTRUN to encase code that creates 8 bit TextRun's.  Enabled WTF_USE_8BIT_TEXTRUN
        for PLATFORM(MAC).  Other platform can update this setting in Platform.h when their platform specific use of
        TextRun handle 8 bit data.  Added a new Vector::appendVector to allow appending the contents of a vector
        containing one type to the end of vector containing another.  This is used to append a Vector<LChar> to
        the end of a Vector<UChar>.

        * wtf/Platform.h:
        * wtf/Vector.h:
        (Vector):
        (WTF::Vector::appendVector):

2012-10-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: convert manual size calculation of different WebKit things into MemoryInstrumentation.
        https://bugs.webkit.org/show_bug.cgi?id=99309

        Reviewed by Yury Semikhatsky.

        JSHeap, DOMStorage and HeapProfiler data were counted manually.
        Now we count the sizes more generic way.

        * wtf/MemoryInstrumentation.h: calculateContainerSize were removed.
        * wtf/MemoryInstrumentationSequence.h: empty instrumentations were added for 'const char*' and 'const void*' sequences.

2012-10-12  Anders Carlsson  <andersca@apple.com>

        Move QDataStream functions into HistoryItemQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99203

        Reviewed by Andreas Kling.

        It seems like the QDataStream stream operators are only used from HistoryItemQt.cpp
        inside WebCore, so move them there. If in the future they are required elsewhere, they should
        be moved into a separate header instead of polluting headers unnecessarily.

        * wtf/Vector.h:
        * wtf/qt/StringQt.cpp:
        * wtf/text/WTFString.h:

2012-10-12  Michael Saboff  <msaboff@apple.com>

        StringBuilder::append(StringBuilder&) doesn't take into account the bit size of the argument string
        https://bugs.webkit.org/show_bug.cgi?id=99225

        Reviewed by Benjamin Poulain.

        Added 8 bit path.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::append):

2012-10-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131224.
        http://trac.webkit.org/changeset/131224
        https://bugs.webkit.org/show_bug.cgi?id=99210

        It broke the build (Requested by andersca on #webkit).

        * wtf/Vector.h:
        (WTF):
        (WTF::operator<<):
        (WTF::operator>>):
        * wtf/qt/StringQt.cpp:
        (WTF::operator<<):
        (WTF):
        (WTF::operator>>):
        * wtf/text/WTFString.h:
        (WTF):

2012-10-12  Anders Carlsson  <andersca@apple.com>

        Move QDataStream functions into HistoryItemQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99203

        Reviewed by Andreas Kling.

        It seems like the QDataStream stream operators are only used from HistoryItemQt.cpp
        inside WebCore, so move them there. If in the future they are required elsewhere, they should
        be moved into a separate header instead of polluting headers unnecessarily.

        * wtf/Vector.h:
        * wtf/qt/StringQt.cpp:
        * wtf/text/WTFString.h:

2012-10-11  Mark Toller  <mark.toller@samsung.com>

        Removed incorrect pthread_mutex_trylock code in an ASSERT in TCMalloc_PageHeap::signalScavenger. This 
        branch is used by the Webkit GTK code.

        https://bugs.webkit.org/show_bug.cgi?id=97539

        Reviewed by Geoffrey Garen.

        The code was never compiled in, and was functionally broken. There is no need for locking around the 
        m_scavengeThreadActive flag, however, we should lock pageheap_lock before calling 'shouldScavenge()', as we
        only want to scavenge when really required, so it's better to wait for any current memory operation to 
        complete before checking. 

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::signalScavenger):

2012-10-10  Yong Li  <yoli@rim.com>

        [BlackBerry] Define WTF_USE_EXTRA_MACROS in cmake rather than Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=98819

        Reviewed by Rob Buis.

        And make it depend on SHARED_CORE
        RIM PR# 221339.

        * wtf/Platform.h:

2012-10-09  Filip Pizlo  <fpizlo@apple.com>

        JSC should infer when indexed storage is contiguous, and optimize for it
        https://bugs.webkit.org/show_bug.cgi?id=97288

        Reviewed by Mark Hahnenberg.

        Moved out this helpful math utility to MathExtras, since we now use it in
        multiple places.

        * wtf/MathExtras.h:
        (timesThreePlusOneDividedByTwo):

2012-10-08  Benjamin Poulain  <benjamin@webkit.org>

        Generalize moving URLComponent's begin position
        https://bugs.webkit.org/show_bug.cgi?id=98626

        Reviewed by Adam Barth.

        The patch r130609 introduced moving URLComponents's position.
        It turns out this concept is really useful in the parser so
        this patch generalize the idea.

        * wtf/url/api/ParsedURL.cpp:
        (WTF::ParsedURL::removePort):
        * wtf/url/src/URLCanonEtc.cpp:
        * wtf/url/src/URLComponent.h:
        (WTF::URLComponent::moveBy):
        Rename URLComponent::move() to URLComponent::moveBy() for consistency
        with some of WebCore types.

        * wtf/url/src/URLParse.cpp:
        * wtf/url/src/URLParseFile.cpp:

        * wtf/url/src/URLSegments.cpp:
        (WTF::URLSegments::moveFromComponentBy):
        Change the semantic to everything from a certain component. This is
        useful to move everything, including the scheme.

        * wtf/url/src/URLSegments.h:
        (URLSegments):

2012-10-08  Andreas Kling  <kling@webkit.org>

        Lower minimum table size of WTF::HashTable to reduce memory usage.
        <http://webkit.org/b/98406>
        <rdar://problem/12432140>

        Reviewed by Anders Carlsson.

        Lower the default minimumTableSize for WTF hash tables from 64 to 8 entries.
        This reduces WebProcess memory consumption by ~16MB on Membuster3 (a 6% progression!)

        No significant movement on PLT or JSC benchmarks on my machine. If there's a perf regression somewhere
        from this, we can tweak individual tables to have a larger minimumTableSize.

        * wtf/HashTraits.h:

2012-10-08  Andreas Kling  <kling@webkit.org>

        Using float/double as WTF hash table key is unreliable.
        <http://webkit.org/b/98627>

        Reviewed by Geoffrey Garen.

        Change FloatHash::equal() to do a bitwise compare instead of a logical compare.
        This fixes a problem where the keys with different binary representation but the
        same logical value (e.g 0 and -0) could block each other from being found if they
        ended up in the same hash bucket.

        * wtf/HashFunctions.h:
        (FloatHash):
        (WTF::FloatHash::hash):
        (WTF::FloatHash::equal):

2012-10-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130619.
        http://trac.webkit.org/changeset/130619
        https://bugs.webkit.org/show_bug.cgi?id=98634

        Causes many crashes on the EFL bots. (Requested by rakuco on
        #webkit).

        * wtf/efl/MainThreadEfl.cpp:
        (WTF::pipeObject):
        (WTF):
        (WTF::monitorDispatchFunctions):
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):

2012-10-08  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Use ecore_main_loop_thread_safe_call_async() to wakeup main loop.
        https://bugs.webkit.org/show_bug.cgi?id=98505

        Reviewed by Kenneth Rohde Christiansen.

        Instead of ecore_pipe_write(),
        use ecore_main_loop_thread_safe_call_async() to wakeup ecore main loop.

        According to the EFL API document, this function is designed to dispatch
        a function on ecore main loop by avoiding dead lock or race condition. 
        With this function, webkit doesn't need to maintain ecore pipe also.

        * wtf/efl/MainThreadEfl.cpp:
        (WTF::monitorDispatchFunctions):
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):

2012-10-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        Currently HashMap iterators follow the same interface in std::map: given an
        iterator it, we use it->first to access the key and it->second to access the
        value. This patch changes these accesses to it->key and it->value, improving the
        readability at call sites.

        One potential downside of this change would be the confusion between std::map and
        HashMap interfaces. However, they are already different in other aspects and the
        usage of std::map is more an exception than a rule in WebKit code, so we consider
        the confusion will be less likely to happen.

        * wtf/HashCountedSet.h:
        (WTF::::add):
        (WTF::::remove):
        (WTF::copyToVector):
        * wtf/HashIterators.h:
        (WTF::HashTableConstKeysIterator::get):
        (WTF::HashTableConstValuesIterator::get):
        (WTF::HashTableKeysIterator::get):
        (WTF::HashTableValuesIterator::get):
        * wtf/HashMap.h:
        (WTF::KeyValuePairKeyExtractor::extract):
        (WTF::HashMapValueTraits::isEmptyValue):
        (WTF::HashMapTranslator::translate):
        (WTF::HashMapTranslatorAdapter::translate):
        (WTF::::set):
        (WTF::::get):
        (WTF::::take):
        (WTF::operator==):
        (WTF::deleteAllValues):
        (WTF::deleteAllKeys):
        Removed deleteAllPairFirsts() and deleteAllPairSeconds() since they are now unused.

        * wtf/HashTable.h:
        (WTF::hashTableSwap):
        (WTF::::checkTableConsistencyExceptSize):
        * wtf/HashTraits.h:
        (WTF):
        (WTF::KeyValuePair::KeyValuePair):
        (KeyValuePair):
        (WTF::KeyValuePairHashTraits::constructDeletedValue):
        (WTF::KeyValuePairHashTraits::isDeletedValue):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::addFreeSpace):
        (WTF::MetaAllocator::incrementPageOccupancy):
        (WTF::MetaAllocator::decrementPageOccupancy):
        * wtf/RefCountedLeakCounter.cpp:
        (WTF::RefCountedLeakCounter::~RefCountedLeakCounter):
        * wtf/RefPtrHashMap.h:
        (WTF::::set):
        (WTF::::get):
        (WTF::::inlineGet):
        (WTF::::take):
        * wtf/Spectrum.h:
        (WTF::Spectrum::add):
        (WTF::Spectrum::get):
        (WTF::Spectrum::buildList):
        * wtf/ThreadingPthreads.cpp:
        (WTF::identifierByPthreadHandle):

2012-10-07  Benjamin Poulain  <benjamin@webkit.org>

        WTFURL: implement URL port removal for HTMLAnchorElement
        https://bugs.webkit.org/show_bug.cgi?id=98604

        Reviewed by Adam Barth.

        Add hasStandardScheme() (similar to isStandard from Google URL),
        hasPort() and removePort() to implement the port removal of KURL.

        * wtf/url/api/ParsedURL.cpp:
        (WTF::ParsedURL::hasStandardScheme):
        (WTF::ParsedURL::hasPort):
        (WTF::ParsedURL::removePort):
        * wtf/url/api/ParsedURL.h:
        (ParsedURL):
        * wtf/url/src/URLComponent.h:
        (WTF::URLComponent::move):
        * wtf/url/src/URLSegments.cpp:
        (WTF::URLSegments::moveComponentsAfter):
        * wtf/url/src/URLSegments.h:
        (URLSegments):
        * wtf/url/src/URLUtil.cpp:
        (URLUtilities):
        (WTF::URLUtilities::isStandard):
        * wtf/url/src/URLUtil.h:
        (URLUtilities):
        Remove LowerCaseEqualsASCII() from the interface, make it an internal template.

        (WTF::URLUtilities::isStandard):
        Since in WebKit, LChar is a superset of char, expose LChar and cast char* to LChar*.

2012-10-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI fix String instrumentation the way it was discussed in WK97964
        https://bugs.webkit.org/show_bug.cgi?id=98500

        Reviewed by Benjamin Poulain.

        Current instrumentation incorrectly covers the case when StringImpl object has been created via StringImpl::createWithTerminatingNullCharacter().
        Looks like the only way to detect the strings that has been created from literals is to compare the addresses of buffer and stringImpl + 1.

        * wtf/MemoryInstrumentationString.h:
        (WTF::reportMemoryUsage):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::hasInternalBuffer):

2012-10-06  Benjamin Poulain  <benjamin@webkit.org>

        Fix build of WTFURL after r130187
        https://bugs.webkit.org/show_bug.cgi?id=98588

        Reviewed by Kentaro Hara.

        * wtf/MemoryInstrumentationParsedURL.h:
        (WTF::reportMemoryUsage):
        * wtf/url/api/ParsedURL.h:
        (WTF::ParsedURL::spec):

2012-10-05  Simon Pena  <spena@igalia.com>

        [GTK] Add support for GBytes in GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=98489

        Reviewed by Carlos Garcia Campos.

        Adding support for GBytes in GRefPtr makes it easier
        for them to be used when adding GResources support,
        and is more consistent with the rest of the port.

        This calls g_bytes_ref and g_bytes_unref in the implementation
        of the refPtr and derefPtr template functions, in case the GLib
        version is met. Otherwise, it does nothing.

        * wtf/gobject/GRefPtr.cpp: Implement templates for ref and deref.
        (WTF::refGPtr):
        (WTF):
        (WTF::derefGPtr):
        * wtf/gobject/GRefPtr.h:
        (WTF):
        * wtf/gobject/GTypedefs.h: Define the GBytes datatype.

2012-10-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130478.
        http://trac.webkit.org/changeset/130478
        https://bugs.webkit.org/show_bug.cgi?id=98494

        It broke the Qt build (Requested by Ossy on #webkit).

        * wtf/gobject/GRefPtr.cpp:
        * wtf/gobject/GRefPtr.h:
        (WTF):
        * wtf/gobject/GTypedefs.h:

2012-10-05  Simon Pena  <spena@igalia.com>

        [GTK] Add support for GBytes in GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=98489

        Reviewed by Carlos Garcia Campos.

        Adding support for GBytes in GRefPtr makes it easier
        for them to be used when adding GResources support,
        and is more consistent with the rest of the port.

        This calls g_bytes_ref and g_bytes_unref in the implementation
        of the refPtr and derefPtr template functions.

        * wtf/gobject/GRefPtr.cpp: Implement templates for ref and deref.
        (WTF::refGPtr):
        (WTF):
        (WTF::derefGPtr):
        * wtf/gobject/GRefPtr.h:
        (WTF):
        * wtf/gobject/GTypedefs.h: Define the GBytes datatype.

2012-10-04  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r130419.
        http://trac.webkit.org/changeset/130419
        https://bugs.webkit.org/show_bug.cgi?id=98406

        broke editing/pasteboard/data-transfer-items.html on chromium

        * wtf/HashTraits.h:

2012-10-04  Andreas Kling  <kling@webkit.org>

        Lower minimum table size of WTF::HashTable to reduce memory usage.
        <http://webkit.org/b/98406>
        <rdar://problem/12432140>

        Reviewed by Anders Carlsson.

        Lower the default minimumTableSize for WTF hash tables from 64 to 8 entries.
        This reduces WebProcess memory consumption by ~16MB on Membuster3 (a 6% progression!)

        No significant movement on PLT or JSC benchmarks on my machine. If there's a perf regression somewhere
        from this, we can tweak individual tables to have a larger minimumTableSize.

        * wtf/HashTraits.h:

2012-10-04  Michael Saboff  <msaboff@apple.com>

        String::remove will convert an 8 bit string to a 16 bit string
        https://bugs.webkit.org/show_bug.cgi?id=98299

        Reviewed by Benjamin Poulain.

        Added an 8 bit path to remove().  Added a private templated helper removeInternal.

        * wtf/text/WTFString.cpp:
        (WTF::String::removeInternal):
        (WTF::String::remove):
        * wtf/text/WTFString.h:
        (String):

2012-10-03  Kangil Han  <kangil.han@samsung.com>

        [Refactoring] Tidy NDEBUG optioning in RefCountedBase.
        https://bugs.webkit.org/show_bug.cgi?id=98252

        Reviewed by Benjamin Poulain.

        Fixed incomplete implementation for NDEBUG option.
        Additionally, adopted CHECK_REF_COUNTED_LIFECYCLE definition to suppress abusing NDEBUG option.

        * wtf/RefCounted.h:
        (WTF):
        (WTF::RefCountedBase::ref):
        (WTF::RefCountedBase::hasOneRef):
        (WTF::RefCountedBase::refCount):
        (WTF::RefCountedBase::turnOffVerifier):
        (WTF::RefCountedBase::relaxAdoptionRequirement):
        (WTF::RefCountedBase::RefCountedBase):
        (WTF::RefCountedBase::~RefCountedBase):
        (WTF::RefCountedBase::derefBase):
        (RefCountedBase):
        (WTF::adopted):
        (WTF::RefCountedBase::setMutexForVerifier):
        (WTF::RefCountedBase::setDispatchQueueForVerifier):

2012-10-03  Yury Semikhatsky  <yurys@chromium.org>

        Remove MemoryInstrumentation::addCollectionElements
        https://bugs.webkit.org/show_bug.cgi?id=98245

        Reviewed by Vsevolod Vlasov.

        Removed MemoryInstrumentation::addCollectionElements and switched all call sites
        to reportSequenceMemoryUsage.

        Drive-by fix: removed some unused methods on MemoryInstrumentation.

        * wtf/MemoryInstrumentation.h:
        * wtf/MemoryInstrumentationHashSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationSequence.h:
        (WTF::SequenceMemoryInstrumentationTraits::reportMemoryUsage):
        * wtf/MemoryInstrumentationVector.h:
        (WTF::reportMemoryUsage):

2012-10-02  Yury Semikhatsky  <yurys@chromium.org>

        Provide memory instrumentation for HashCountedSet
        https://bugs.webkit.org/show_bug.cgi?id=98138

        Reviewed by Pavel Feldman.

        Added memory instrumentation for HashCountedSet.

        Extracted common routines for collecting memory info for an iterable sequence.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/MemoryInstrumentation.h:
        (WTF):
        * wtf/MemoryInstrumentationHashCountedSet.h: Copied from Source/WTF/wtf/MemoryInstrumentationHashSet.h.
        (WTF):
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashMap.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashSet.h:
        * wtf/MemoryInstrumentationSequence.h: Copied from Source/WTF/wtf/MemoryInstrumentationHashMap.h.
        (WTF):
        (WTF::SequenceMemoryInstrumentationTraits::reportMemoryUsage):
        (WTF::reportSequenceMemoryUsage):

2012-10-02  Joshua Bell  <jsbell@chromium.org>

        Add htons/htonl definitions and implementations
        https://bugs.webkit.org/show_bug.cgi?id=98054

        Reviewed by Darin Adler.

        For parsing or serializing binary data, byte order matters. The canonical htons/htonl/
        ntohs/ntohl functions are not present everywhere, so implementations are proliferating in
        parsers. Expose a new WTF header (wtf/ByteOrder.h) that includes the standard
        implementations on UNIX-like OSs and provides basic inlined implementations on Windows.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/ByteOrder.h: Added.
        (WTF::wswap32): Inline functions so arguments are only evaluated once.
        (WTF::bswap32):
        (WTF::bswap16):
        (ntohs): Inline functions on OS(WINDOWS) to match macros on OS(UNIX)
        (htons):
        (ntohl):
        (htonl):
        * wtf/CMakeLists.txt:

2012-10-02  Michael Saboff  <msaboff@apple.com>

        HTMLConstructionSite::insertTextNode isn't optimized for 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=97740

        Reviewed by Darin Adler.

        Added an append method that takes an LChar source.  Made both the UChar and LChar versions optimally handle
        the appendee and appendend string bitness.

        * wtf/text/WTFString.cpp:
        (WTF::String::append):
        * wtf/text/WTFString.h:
        (String):

2012-10-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI: switch to non intrusive instrumentation of ParsedURL.
        https://bugs.webkit.org/show_bug.cgi?id=98150

        Reviewed by Yury Semikhatsky.

        Memory instrumentation for ParsedURL was extracted into separate header MemoryInstrumentationParsedURL.h

        Drive by fix: unnecessary include was removed from String*.cpp files.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/MemoryInstrumentation.h:
        (WTF):
        * wtf/MemoryInstrumentationParsedURL.h: Added.
        (WTF):
        (WTF::reportMemoryUsage):
        * wtf/text/AtomicString.cpp:
        * wtf/text/StringImpl.cpp:
        * wtf/text/WTFString.cpp:
        * wtf/url/api/ParsedURL.cpp:
        * wtf/url/api/ParsedURL.h:
        * wtf/url/api/URLString.cpp:
        * wtf/url/api/URLString.h:

2012-09-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI make String* instrumentation non intrusive
        https://bugs.webkit.org/show_bug.cgi?id=97964

        Reviewed by Yury Semikhatsky.

        MemoryInstrumentationString.h was added.
        Intrusive instrumentation was removed.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/MemoryInstrumentation.h:
        (WTF):
        * wtf/MemoryInstrumentationString.h: Added.
        (WTF):
        (WTF::reportMemoryUsage):
        * wtf/text/AtomicString.cpp:
        (WTF):
        * wtf/text/AtomicString.h:
        (AtomicString):
        * wtf/text/CString.h:
        (WTF::CStringBuffer::length):
        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::usesInternalBuffer):
        (WTF::StringImpl::baseString):
        (StringImpl):

2012-10-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130129.
        http://trac.webkit.org/changeset/130129
        https://bugs.webkit.org/show_bug.cgi?id=98125

        broke 4 webkit_unit_tests
        (MemoryInstrumentationTest.hashMapWith*) (Requested by caseq
        on #webkit).

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/MemoryInstrumentation.h:
        (WTF):
        * wtf/MemoryInstrumentationString.h: Removed.
        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::reportMemoryUsage):
        (WTF):
        * wtf/text/AtomicString.h:
        (AtomicString):
        * wtf/text/CString.h:
        (WTF::CStringBuffer::length):
        (CStringBuffer):
        (WTF::CStringBuffer::reportMemoryUsage):
        (CString):
        (WTF::CString::reportMemoryUsage):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::reportMemoryUsage):
        (WTF):
        * wtf/text/StringImpl.h:
        (StringImpl):
        * wtf/text/WTFString.cpp:
        (WTF::String::reportMemoryUsage):
        (WTF):
        * wtf/text/WTFString.h:
        (String):

2012-09-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI make String* instrumentation non intrusive
        https://bugs.webkit.org/show_bug.cgi?id=97964

        Reviewed by Yury Semikhatsky.

        MemoryInstrumentationString.h was added.
        Intrusive instrumentation was removed.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/MemoryInstrumentation.h:
        (WTF):
        * wtf/MemoryInstrumentationString.h: Added.
        (WTF):
        (WTF::reportMemoryUsage):
        * wtf/text/AtomicString.cpp:
        (WTF):
        * wtf/text/AtomicString.h:
        (AtomicString):
        * wtf/text/CString.h:
        (WTF::CStringBuffer::length):
        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::usesInternalBuffer):
        (WTF::StringImpl::baseString):
        (StringImpl):

2012-10-01  Daniel Drake  <dsd@laptop.org>

        Another SIGILL in JavaScriptCore on a Geode processor
        https://bugs.webkit.org/show_bug.cgi?id=96286

        Reviewed by Filip Pizlo.

        Disable LLint for the GTK build where the build target does not
        support SSE2 instructions. Restores support for non-SSE2 processors
        such as the AMD Geode.

        * wtf/Platform.h:

2012-10-01  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: provide memory instrumentation for HashMap
        https://bugs.webkit.org/show_bug.cgi?id=98005

        Reviewed by Pavel Feldman.

        Extracted HashMap memory instrumentation into its own file. The map's content
        elements will be automatically traversed if their types are supported
        by the memory instrumentation. No need to call special method for hash map
        fields any more.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentation):
        (WTF):
        * wtf/MemoryInstrumentationHashMap.h: Added.
        (WTF):
        (WTF::SequenceMemoryInstrumentationTraits::reportMemoryUsage):
        (WTF::reportMemoryUsage):

2012-10-01  Alberto Garcia  <agarcia@igalia.com>

        Check that __cplusplus is defined before comparing its value
        https://bugs.webkit.org/show_bug.cgi?id=98015

        Reviewed by Xan Lopez.

        If __cplusplus is not defined is interpreted as having the value
        0, but it produces a compilation warning with -Wundef.

        This is the case with some API tests that are written in C
        (JSNode.c, JSNodeList.c, minidom.c).

        * wtf/Compiler.h:

2012-10-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header files to compilation.

2012-09-30  Mark Hahnenberg  <mhahnenberg@apple.com>

        Clean up HasTrivialConstructor/Destructor
        https://bugs.webkit.org/show_bug.cgi?id=97754

        Reviewed by Sam Weinig.

        Mixed up the HasTrivialDestructor/Constructor case for VS2010 and later in the previous patch.

        * wtf/TypeTraits.h:

2012-09-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r129982.
        http://trac.webkit.org/changeset/129982
        https://bugs.webkit.org/show_bug.cgi?id=97971

        hit assert in fast/overflow/overflow-height-float-not-removed-
        crash3.html (Requested by eae on #webkit).

        * wtf/Platform.h:

2012-09-29  Emil A Eklund  <eae@chromium.org>

        Enable SATURATED_LAYOUT_ARITHMETIC for chromium
        https://bugs.webkit.org/show_bug.cgi?id=95053

        Reviewed by Abhishek Arya.

        Enable the SATURATED_LAYOUT_ARITHMETIC flag for the chromium port.
        This changes the behavior of FractionalLayoutUnit to clamp to the
        max or min value instead of overflowing.

        This may very well impact performance so the current plan is to enable
        it for a couple of hours to a day to collect performance data and then
        disable it again until we've had a chance to review the perf data.

        * wtf/Platform.h:

2012-09-28  Anders Carlsson  <andersca@apple.com>

        Remove Java bridge
        https://bugs.webkit.org/show_bug.cgi?id=97954

        Reviewed by Sam Weinig.

        The Java bridge is not used by any port; Mac now has a NPAPI Java plug-in.

        * wtf/Platform.h:

2012-09-28  Kai Koehne  <kai.koehne@digia.com>

        Disable YARR_JIT for Windows 64 bit
        https://bugs.webkit.org/show_bug.cgi?id=97772

        Reviewed by Simon Hausmann.

        Using YARR_JIT requires ASSEMBLER, which in turn enables the
        executable fixed allocator, which is mmap based (not available on
        Windows).

        * wtf/Platform.h:

2012-09-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: make HashSet memory instrumentation non-intrusive
        https://bugs.webkit.org/show_bug.cgi?id=97879

        Reviewed by Vsevolod Vlasov.

        Removed reportMemoryUsage declarations as a friend of HashSet and HashTable. Also
        removed MemoryInstrumentationHashTable which is not needed if we don't have
        access to HashSet's guts.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/HashSet.h:
        (WTF):
        (HashSet):
        * wtf/HashTable.h:
        (HashTable):
        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryClassInfo::addPrivateBuffer):
        * wtf/MemoryInstrumentationHashSet.h:
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashTable.h: Removed.

2012-09-27  Anders Carlsson  <andersca@apple.com>

        Remove the clang pragmas to disable warnings in Noncopyable.h
        https://bugs.webkit.org/show_bug.cgi?id=97826

        Reviewed by Beth Dakin.

        Warnings about C++11 extensions are already disabled project-wide now so there's no need
        to keep these pragmas.

        * wtf/Noncopyable.h:

2012-09-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        Clean up HasTrivialConstructor/Destructor
        https://bugs.webkit.org/show_bug.cgi?id=97754

        Reviewed by Darin Adler.

        Cleaned up HasTrivialConstructor and HasTrivialDestructor by defining them in terms of 
        other type traits we have. Also moved some ifdefs and comments to make things more clear.

        * wtf/TypeTraits.h:

2012-09-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI: move visited and countObjectSize methods implementation into separate class.
        https://bugs.webkit.org/show_bug.cgi?id=97461

        Reviewed by Yury Semikhatsky.

        These methods and the data collected by them need to be used in the instrumentation code for other components.
        As example when we are visiting bitmaps we need to visit platform specific objects.
        These objects will be instrumented with help of component's own instrumentation code
        but we have to keep the single set of visited objects and the map of counters.

        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentationClient):
        (WTF::MemoryInstrumentationClient::~MemoryInstrumentationClient):
        (WTF):
        (WTF::MemoryInstrumentation::MemoryInstrumentation):
        (MemoryInstrumentation):
        (WTF::MemoryInstrumentation::countObjectSize):
        (WTF::MemoryInstrumentation::visited):

2012-09-27  Csaba Osztrogonác  <ossy@webkit.org>, Tor Arne Vestbø  <vestbo@webkit.org>

        [Qt] Enable the LLInt on Linux
        https://bugs.webkit.org/show_bug.cgi?id=95749

        Reviewed by Simon Hausmann.

        * wtf/Platform.h:

2012-09-26  Cosmin Truta  <ctruta@rim.com>

        [BlackBerry] Allow denormal floats in ARM VFP
        https://bugs.webkit.org/show_bug.cgi?id=97008

        Reviewed by Filip Pizlo.
        Reviewed internally by Yong Li.

        Cleared the Flush-to-Zero flag in the ARM FPSCR register on QNX.

        * wtf/ThreadingPthreads.cpp:
        (WTF::enableIEEE754Denormal): Added.
        (WTF::initializeThreading):
        (WTF::initializeCurrentThreadInternal):

2012-09-26  Michael Saboff  <msaboff@apple.com>

        Update ComplexTextController for 8 bit TextRun changes
        https://bugs.webkit.org/show_bug.cgi?id=97378

        Reviewed by Geoffrey Garen.

        Add a new create method to make a 16 bit string from 8 bit source data.  This is used in 
        ComplexTextController when we have LChar* + length text data, but we really want 16 bit
        data for the complex text rendering code.

        * wtf/text/WTFString.cpp:
        (WTF::String::make16BitFrom8BitSource):
        (WTF):
        * wtf/text/WTFString.h:
        (String):

2012-09-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI: replace manual JS external resources counting with MemoryInstrumentation
        https://bugs.webkit.org/show_bug.cgi?id=97662

        Reviewed by Yury Semikhatsky.

        Old schema uses sizeInBytes method on StringImpl. This method works incorrect for substrings.
        Also we'd like to know exact pointers to strings and buffers for verification purposes.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/MemoryInstrumentationArrayBufferView.h:
        (WTF):
        (WTF::reportMemoryUsage):

2012-09-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: extract HashSet instrumentation from core NMI code and put it into MemoryInstrumentationHashSet.h
        https://bugs.webkit.org/show_bug.cgi?id=97198

        Reviewed by Yury Semikhatsky.

        Current implementation has overloads for HashSet.
        This prevents us from instrumenting complex cases like Vector<HashSet<...> >.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/HashSet.h:
        (WTF):
        (HashSet):
        * wtf/HashTable.h:
        (WTF):
        (HashTable):
        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryClassInfo::addCollectionElements):
        (WTF::MemoryClassInfo::addHashCountedSet):
        * wtf/MemoryInstrumentationHashSet.h: Added.
        (WTF):
        (WTF::reportMemoryUsage):
        * wtf/MemoryInstrumentationHashTable.h: Added.
        (WTF):
        (WTF::reportMemoryUsage):

2012-09-26  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: compare objects counted by the memory instrumentation with those allocated in the heap
        https://bugs.webkit.org/show_bug.cgi?id=97641

        Reviewed by Pavel Feldman.

        Added a method for checking if reported object was actually allocated in the heap.

        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentation):
        (WTF::MemoryInstrumentation::addObjectImpl):

2012-09-26  Gavin Barraclough  <barraclough@apple.com>

        String.localeCompare should normalize input
        https://bugs.webkit.org/show_bug.cgi?id=97639

        Reviewed by Filip Pizlo.

        From the spec: "It is strongly recommended that this function treat Strings that are
        canonically equivalent according to the Unicode standard as identical (in other words,
        compare the Strings as if they had both been converted to Normalised Form C or D first).
        It is also recommended that this function not honour Unicode compatibility equivalences
        or decompositions."

        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::Collator::createCollator):
            - Enable normalization.

2012-09-25  Cosmin Truta  <ctruta@rim.com>

        [BlackBerry] Enable LLInt
        https://bugs.webkit.org/show_bug.cgi?id=97604

        Reviewed by Yong Li.

        Set the prefix of LOCAL_LABEL_STRING to ".L" on QNX.

        * wtf/InlineASM.h:

2012-09-25  Patrick Gansterer  <paroga@webkit.org>

        Do not enable DFG JIT for COMPILER(MSVC).

        The current code does not support MSVC inline assembler, so disable it for now.

        * wtf/Platform.h:

2012-09-25  Pratik Solanki  <psolanki@apple.com>

        Remove HAVE_SBRK since we never set use_sbrk to true
        https://bugs.webkit.org/show_bug.cgi?id=97525
        <rdar://problem/12363601>

        Reviewed by Geoffrey Garen.

        The code under HAVE(SBRK) has not been used since 2005. We use mmap not sbrk for FastMalloc
        not sbrk. We can just remove the define and move all of this code inside #ifndef
        WTF_CHANGES.

        * wtf/Platform.h:
        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemAlloc):

2012-09-25  Mark Lam  <mark.lam@apple.com>

        #undef some symbols before redefining them.
        https://bugs.webkit.org/show_bug.cgi?id=97568.

        Reviewed by Michael Saboff.

        * wtf/Platform.h:

2012-09-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: extract Vector instrumentation from core NMI code into MemoryInstrumentationVector.h header.
        https://bugs.webkit.org/show_bug.cgi?id=96650

        Reviewed by Vsevolod Vlasov.

        Added reportMemoryUsage free template function with default body to core NMI code
        and add custom version of reportMemoryUsage function for Vectors.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/MemoryInstrumentation.h:
        (WTF):
        (MemoryInstrumentation):
        (WTF::MemoryInstrumentation::addObjectImpl):
        * wtf/MemoryInstrumentationVector.h: Added.
        (WTF):
        (WTF::instrumentVectorValues):
        (WTF::reportMemoryUsage):

2012-09-24  Mark Lam  <mark.lam@apple.com>

        Deleting the classic interpreter and cleaning up some build options.
        https://bugs.webkit.org/show_bug.cgi?id=96969.

        Reviewed by Geoffrey Garen.

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

2012-09-24  Patrick Gansterer  <paroga@webkit.org>

        Remove String::operator+=()
        https://bugs.webkit.org/show_bug.cgi?id=96172

        Reviewed by Benjamin Poulain.

        * wtf/Platform.h:
        * wtf/text/WTFString.h:

2012-09-24  Benjamin Poulain  <benjamin@webkit.org>

        Add support for query encoding to WTFURL
        https://bugs.webkit.org/show_bug.cgi?id=97422

        Reviewed by Adam Barth.

        Expose character conversion through the new abstract class URLQueryCharsetConverter.
        URLQueryCharsetConverter is implemented by WebCore to expose the TextEncoding classes.

        Unfortunatelly that forces us to bring over URLBuffer in the public API. We may be able
        to mitigate that later when moving WTFURL to more templates.

        The change fixes 2 of the URL layout tests.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/url/api/ParsedURL.cpp:
        (WTF::ParsedURL::ParsedURL):
        * wtf/url/api/ParsedURL.h:
        (ParsedURL):
        ParsedURL was using the same constructor for ParsedURLString, and URL without a base.
        That was a mistake on my part, I did not intend that, fixed it now :)

        * wtf/url/api/URLBuffer.h: Renamed from Source/WTF/wtf/url/src/URLBuffer.h.
        (URLBuffer):
        (WTF::URLBuffer::URLBuffer):
        (WTF::URLBuffer::~URLBuffer):
        (WTF::URLBuffer::at):
        (WTF::URLBuffer::set):
        (WTF::URLBuffer::capacity):
        (WTF::URLBuffer::length):
        (WTF::URLBuffer::data):
        (WTF::URLBuffer::setLength):
        (WTF::URLBuffer::append):
        (WTF::URLBuffer::grow):
        * wtf/url/api/URLQueryCharsetConverter.h: Added.
        (URLQueryCharsetConverter):
        (WTF::URLQueryCharsetConverter::URLQueryCharsetConverter):
        (WTF::URLQueryCharsetConverter::~URLQueryCharsetConverter):
        * wtf/url/src/URLCanon.h:
        (URLCanonicalizer):
        * wtf/url/src/URLCanonFilesystemurl.cpp:
        (WTF::URLCanonicalizer::canonicalizeFileSystemURL):
        (WTF::URLCanonicalizer::ReplaceFileSystemURL):
        * wtf/url/src/URLCanonFileurl.cpp:
        (WTF::URLCanonicalizer::CanonicalizeFileURL):
        (WTF::URLCanonicalizer::ReplaceFileURL):
        * wtf/url/src/URLCanonInternal.h:
        (URLCanonicalizer):
        * wtf/url/src/URLCanonQuery.cpp:
        (WTF::URLCanonicalizer::CanonicalizeQuery):
        (WTF::URLCanonicalizer::ConvertUTF16ToQueryEncoding):
        * wtf/url/src/URLCanonRelative.cpp:
        (WTF::URLCanonicalizer::resolveRelativeURL):
        * wtf/url/src/URLCanonStdURL.cpp:
        (WTF::URLCanonicalizer::CanonicalizeStandardURL):
        (WTF::URLCanonicalizer::ReplaceStandardURL):
        * wtf/url/src/URLUtil.cpp:
        (URLUtilities):
        (WTF::URLUtilities::canonicalize):
        (WTF::URLUtilities::resolveRelative):
        (WTF::URLUtilities::ReplaceComponents):
        * wtf/url/src/URLUtil.h:
        (URLUtilities):

2012-09-24  Benjamin Poulain  <benjamin@webkit.org>

        Integrate most of GoogleURL in WTFURL
        https://bugs.webkit.org/show_bug.cgi?id=97405

        Reviewed by Adam Barth.

        This patch brings almost all of the implementatation of Google-URL in WTFURL
        with only minor changes.

        The changes from the original code are mostly:
        -Code cleaning.
        -Replace url_parse::Parsed by URLSegments.
        -Replace url_parse::Component by URLComponent
        -More code cleaning.
        -Adopt URLBuffer and RawURLBuffer instead of the CanonOutputT and RawCanonOutputT.
        -Use URLCharacterTypes instead of the litany of characters functions.
        -Some more code cleaning.
        -Fix the style to match WebKit as much as possible.
        -Rename the files to match WebKit style.

        * WTF.xcodeproj/project.pbxproj:
        * wtf/url/api/ParsedURL.cpp:
        (WTF::ParsedURL::ParsedURL):
        (WTF::ParsedURL::segment):
        * wtf/url/api/ParsedURL.h:
        (WTF::ParsedURL::isValid):
        * wtf/url/src/RawURLBuffer.h:
        * wtf/url/src/URLCanon.h: Added.
        (URLCanonicalizer):
        (CharsetConverter):
        (WTF::URLCanonicalizer::CharsetConverter::CharsetConverter):
        (WTF::URLCanonicalizer::CharsetConverter::~CharsetConverter):
        (CanonHostInfo):
        (WTF::URLCanonicalizer::CanonHostInfo::CanonHostInfo):
        (WTF::URLCanonicalizer::CanonHostInfo::IsIPAddress):
        (WTF::URLCanonicalizer::CanonHostInfo::AddressLength):
        (URLComponentSource):
        (WTF::URLCanonicalizer::URLComponentSource::URLComponentSource):
        (Replacements):
        (WTF::URLCanonicalizer::Replacements::Replacements):
        (WTF::URLCanonicalizer::Replacements::SetScheme):
        (WTF::URLCanonicalizer::Replacements::IsSchemeOverridden):
        (WTF::URLCanonicalizer::Replacements::SetUsername):
        (WTF::URLCanonicalizer::Replacements::ClearUsername):
        (WTF::URLCanonicalizer::Replacements::IsUsernameOverridden):
        (WTF::URLCanonicalizer::Replacements::SetPassword):
        (WTF::URLCanonicalizer::Replacements::ClearPassword):
        (WTF::URLCanonicalizer::Replacements::IsPasswordOverridden):
        (WTF::URLCanonicalizer::Replacements::SetHost):
        (WTF::URLCanonicalizer::Replacements::ClearHost):
        (WTF::URLCanonicalizer::Replacements::IsHostOverridden):
        (WTF::URLCanonicalizer::Replacements::SetPort):
        (WTF::URLCanonicalizer::Replacements::ClearPort):
        (WTF::URLCanonicalizer::Replacements::IsPortOverridden):
        (WTF::URLCanonicalizer::Replacements::SetPath):
        (WTF::URLCanonicalizer::Replacements::ClearPath):
        (WTF::URLCanonicalizer::Replacements::IsPathOverridden):
        (WTF::URLCanonicalizer::Replacements::SetQuery):
        (WTF::URLCanonicalizer::Replacements::ClearQuery):
        (WTF::URLCanonicalizer::Replacements::IsQueryOverridden):
        (WTF::URLCanonicalizer::Replacements::SetRef):
        (WTF::URLCanonicalizer::Replacements::ClearRef):
        (WTF::URLCanonicalizer::Replacements::IsRefOverridden):
        (WTF::URLCanonicalizer::Replacements::sources):
        (WTF::URLCanonicalizer::Replacements::components):
        (WTF::URLCanonicalizer::Replacements::Placeholder):
        * wtf/url/src/URLCanonEtc.cpp: Added.
        (WTF::URLCanonicalizer::removeURLWhitespace):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::canonicalSchemeChar):
        (WTF::URLCanonicalizer::CanonicalizeScheme):
        (WTF::URLCanonicalizer::CanonicalizeUserInfo):
        (WTF::URLCanonicalizer::CanonicalizePort):
        (WTF::URLCanonicalizer::CanonicalizeRef):
        * wtf/url/src/URLCanonFilesystemurl.cpp: Added.
        (WTF::URLCanonicalizer::CanonicalizeFileSystemURL):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::ReplaceFileSystemURL):
        * wtf/url/src/URLCanonFileurl.cpp: Added.
        (WTF::URLCanonicalizer::CanonicalizeFileURL):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::FileCanonicalizePath):
        (WTF::URLCanonicalizer::ReplaceFileURL):
        * wtf/url/src/URLCanonHost.cpp: Added.
        (WTF::URLCanonicalizer::CanonicalizeHost):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::CanonicalizeHostVerbose):
        * wtf/url/src/URLCanonICU.cpp: Added.
        (WTF::URLCanonicalizer::IDNToASCII):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::readUTFChar):
        * wtf/url/src/URLCanonIP.cpp: Added.
        (WTF::URLCanonicalizer::CanonicalizeIPAddress):
        (URLCanonicalizer):
        * wtf/url/src/URLCanonInternal.cpp: Added.
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::AppendInvalidNarrowString):
        (WTF::URLCanonicalizer::ConvertUTF16ToUTF8):
        (WTF::URLCanonicalizer::ConvertUTF8ToUTF16):
        (WTF::URLCanonicalizer::SetupOverrideComponents):
        (WTF::URLCanonicalizer::SetupUTF16OverrideComponents):
        (WTF::URLCanonicalizer::_itoa_s):
        (WTF::URLCanonicalizer::_itow_s):
        * wtf/url/src/URLCanonInternal.h: Added.
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::hexCharToValue):
        (WTF::URLCanonicalizer::isDot):
        (WTF::URLCanonicalizer::appendURLEscapedCharacter):
        (WTF::URLCanonicalizer::doAppendUTF8):
        (WTF::URLCanonicalizer::AppendCharToOutput):
        (WTF::URLCanonicalizer::AppendUTF8Value):
        (WTF::URLCanonicalizer::AppendUTF8EscapedValue):
        (WTF::URLCanonicalizer::AppendUTF16Value):
        (WTF::URLCanonicalizer::AppendUTF8EscapedChar):
        (WTF::URLCanonicalizer::Is8BitChar):
        (WTF::URLCanonicalizer::DecodeEscaped):
        (WTF::URLCanonicalizer::_itoa_s):
        (WTF::URLCanonicalizer::_itow_s):
        (WTF::URLCanonicalizer::_strtoui64):
        * wtf/url/src/URLCanonMailto.cpp: Added.
        (WTF::URLCanonicalizer::CanonicalizeMailtoURL):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::ReplaceMailtoURL):
        * wtf/url/src/URLCanonPath.cpp: Added.
        (WTF::URLCanonicalizer::CanonicalizePath):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::CanonicalizePartialPath):
        * wtf/url/src/URLCanonPathurl.cpp: Added.
        (WTF::URLCanonicalizer::canonicalizePathURL):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::ReplacePathURL):
        * wtf/url/src/URLCanonQuery.cpp: Added.
        (WTF::URLCanonicalizer::CanonicalizeQuery):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::ConvertUTF16ToQueryEncoding):
        * wtf/url/src/URLCanonRelative.cpp: Added.
        (WTF::URLCanonicalizer::isRelativeURL):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::resolveRelativeURL):
        * wtf/url/src/URLCanonStdURL.cpp: Added.
        (WTF::URLCanonicalizer::DefaultPortForScheme):
        (URLCanonicalizer):
        (WTF::URLCanonicalizer::CanonicalizeStandardURL):
        (WTF::URLCanonicalizer::ReplaceStandardURL):
        * wtf/url/src/URLCharacterTypes.cpp:
        * wtf/url/src/URLCharacterTypes.h:
        (WTF::URLCharacterTypes::isComponentChar):
        (WTF::URLCharacterTypes::isHexChar):
        (WTF::URLCharacterTypes::isIPv4Char):
        (WTF::URLCharacterTypes::isQueryChar):
        (WTF::URLCharacterTypes::isCharacterOfType):
        (URLCharacterTypes):
        * wtf/url/src/URLEscape.cpp: Removed.
        * wtf/url/src/URLFile.h: Added.
        (URLParser):
        (WTF::URLParser::isWindowsDriveSeparator):
        (WTF::URLParser::isWindowsDriveLetter):
        (WTF::URLParser::findNextSlash):
        (WTF::URLParser::doesBeginWindowsDriveSpec):
        (WTF::URLParser::doesBeginUNCPath):
        * wtf/url/src/URLParse.cpp: Added.
        (WTF::URLParser::ExtractScheme):
        (URLParser):
        (WTF::URLParser::IsAuthorityTerminator):
        (WTF::URLParser::ExtractFileName):
        (WTF::URLParser::ExtractQueryKeyValue):
        (WTF::URLParser::ParseAuthority):
        (WTF::URLParser::ParsePort):
        (WTF::URLParser::ParseStandardURL):
        (WTF::URLParser::ParsePathURL):
        (WTF::URLParser::ParseFileSystemURL):
        (WTF::URLParser::ParseMailtoURL):
        (WTF::URLParser::parsePathInternal):
        (WTF::URLParser::ParseAfterScheme):
        * wtf/url/src/URLParse.h: Added.
        (URLParser):
        * wtf/url/src/URLParseFile.cpp: Added.
        (WTF):
        (WTF::URLParser::ParseFileURL):
        (URLParser):
        * wtf/url/src/URLParseInternal.h: Added.
        (URLParser):
        (WTF::URLParser::isURLSlash):
        (WTF::URLParser::shouldTrimFromURL):
        (WTF::URLParser::trimURL):
        (WTF::URLParser::countConsecutiveSlashes):
        * wtf/url/src/URLParser.h: Removed.
        * wtf/url/src/URLQueryCanonicalizer.h: Removed.
        * wtf/url/src/URLSegments.cpp:
        * wtf/url/src/URLSegments.h:
        (WTF::URLSegments::URLSegments):
        (URLSegments):
        (WTF::URLSegments::operator=):
        (WTF::URLSegments::innerURLSegments):
        (WTF::URLSegments::setInnerURLSegments):
        (WTF::URLSegments::clearInnerURLSegments):
        * wtf/url/src/URLUtil.cpp: Added.
        (URLUtilities):
        (WTF::URLUtilities::IsStandard):
        (WTF::URLUtilities::FindAndCompareScheme):
        (WTF::URLUtilities::Canonicalize):
        (WTF::URLUtilities::resolveRelative):
        (WTF::URLUtilities::ReplaceComponents):
        (WTF::URLUtilities::LowerCaseEqualsASCII):
        (WTF::URLUtilities::DecodeURLEscapeSequences):
        (WTF::URLUtilities::EncodeURIComponent):
        (WTF::URLUtilities::CompareSchemeComponent):
        * wtf/url/src/URLUtil.h: Added.
        (URLUtilities):
        * wtf/url/src/URLUtilInternal.h: Renamed from Source/WTF/wtf/url/src/URLEscape.h.
        (URLUtilities):

2012-09-24  Joone Hur  <joone.hur@intel.com>

        [GTK] Implement GraphicsLayer using Clutter
        https://bugs.webkit.org/show_bug.cgi?id=73767

        Reviewed by Martin Robinson.

        Add ClutterActor and GraphicsLayerActor to GTypedefs.h.

        * wtf/gobject/GTypedefs.h:

2012-09-23  Byungwoo Lee  <bw80.lee@gmail.com>

        Fix build warnings : -Wunused-parameter, -Wparentheses, -Wuninitialized.
        https://bugs.webkit.org/show_bug.cgi?id=97306

        Reviewed by Benjamin Poulain.

        Fix build warning about -Wunused-parameter on FastMalloc.cpp,
        OSAllocatorPosix.cpp by using UNUSED_PARAM() macro.
        Fix header including order of FastMalloc.cpp.

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

2012-09-22  Sam Weinig  <sam@webkit.org>

        Add explicit conversion operator to RetainPtr for easier use in C++11 environments
        https://bugs.webkit.org/show_bug.cgi?id=97403

        Reviewed by Dan Bernstein.

        * wtf/Compiler.h:
        Add support for COMPILER_SUPPORTS(CXX_EXPLICIT_CONVERSIONS)

        * wtf/RetainPtr.h:
        (RetainPtr):
        (WTF::RetainPtr::get):
        (WTF::RetainPtr::operator PtrType):
        Add the explicit conversion operator and group all the underlying
        pointer accessors together.

2012-09-21  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Error out early if we don't have ICU available

        Reviewed by Tor Arne Vestbø.

        * WTF.pri:

2012-09-20  Patrick Gansterer  <paroga@webkit.org>

        Add String::numberToStringFixedWidth()
        https://bugs.webkit.org/show_bug.cgi?id=96330

        Reviewed by Benjamin Poulain.

        Add this new function as replacement for the ShouldRoundDecimalPlaces flag of String::number()
        and remove the now unnecessary branch in String::number() for the old flags.

        * wtf/text/WTFString.cpp:
        (WTF::String::number):
        (WTF::String::numberToStringFixedWidth):
        * wtf/text/WTFString.h:

2012-09-19  Geoffrey Garen  <ggaren@apple.com>

        OSR exit sometimes neglects to create the arguments object
        https://bugs.webkit.org/show_bug.cgi?id=97162

        Reviewed by Filip Pizlo.

        * wtf/HashTraits.h:
        (NullableHashTraits):
        (WTF::NullableHashTraits::emptyValue):
        (WTF):

2012-09-18  Glenn Adams  <glenn@skynav.com>

        WTFString::show doesn't dump non-ASCII characters in a readable manner
        https://bugs.webkit.org/show_bug.cgi?id=96749

        Reviewed by Benjamin Poulain.

        Dump non-ASCII characters in a useful form for debugging.

        * wtf/text/WTFString.cpp:
        (asciiDebug):
        Dump non-ASCII characters (i.e., UTF-16 code elements) as well as non-printable ASCII characters
        using \uXXXX format. Also escape \ as \\ in order to remove ambiguity.

2012-09-18  Mark Hahnenberg  <mhahnenberg@apple.com>

        Use WTF::HasTrivialDestructor instead of compiler-specific versions in JSC::NeedsDestructor
        https://bugs.webkit.org/show_bug.cgi?id=96980

        Reviewed by Benjamin Poulain.

        * wtf/TypeTraits.h:
        (WTF):

2012-09-17  Glenn Adams  <glenn@skynav.com>

        Including HexNumber.h fails build if hexDigitsForMode is not referenced
        https://bugs.webkit.org/show_bug.cgi?id=96873

        Reviewed by Benjamin Poulain.

        Ensure release build is possible when hexDigitsForMode is not referenced by
        template expansion.

        * wtf/HexNumber.h:
        (WTF::Internal::hexDigitsForMode):
        Change hexDigitsForMode to inline (rather than static). Make string literals
        {lower,upper}HexDigits non-local and non-static, but const, to which the linker
        should merge references in the RO data segment.

2012-09-17  Filip Pizlo  <fpizlo@apple.com>

        The ThreadRescrictionVerifier should be more forcibly disabled on systems that use threads
        https://bugs.webkit.org/show_bug.cgi?id=96957

        Reviewed by Oliver Hunt.

        * wtf/ThreadRestrictionVerifier.h:
        (WTF):
        (WTF::ThreadRestrictionVerifier::ThreadRestrictionVerifier):
        (ThreadRestrictionVerifier):
        (WTF::ThreadRestrictionVerifier::setMutexMode):
        (WTF::ThreadRestrictionVerifier::setDispatchQueueMode):
        (WTF::ThreadRestrictionVerifier::turnOffVerification):
        (WTF::ThreadRestrictionVerifier::setShared):
        (WTF::ThreadRestrictionVerifier::isSafeToUse):

2012-09-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r128796.
        http://trac.webkit.org/changeset/128796
        https://bugs.webkit.org/show_bug.cgi?id=96966

        It broke everything (Requested by Ossy_NIGHT on #webkit).

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

2012-09-17  Uli Schlachter  <psychon@znc.in>

        Implement uncommitted memory for Linux.
        https://bugs.webkit.org/show_bug.cgi?id=65766

        Reviewed by Gavin Barraclough.

        The old approach used MAP_NORESERVE to allocate address space without
        committing it. However, that flag gets ignored if
        /proc/sys/vm/overcommit_memory is set to 2. The new approach uses a
        mapping with PROT_NONE. This works because mappings which aren't even
        readable don't get accounted as committed on Linux.

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

2012-09-17  Filip Pizlo  <fpizlo@apple.com>

        Array profiling has convergence issues
        https://bugs.webkit.org/show_bug.cgi?id=96891

        Reviewed by Gavin Barraclough.

        Added functions for testing if something is a power of 2.

        * wtf/MathExtras.h:
        (hasZeroOrOneBitsSet):
        (hasTwoOrMoreBitsSet):

2012-09-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI: now when we can detect instrumented classes we can
        remove addInstrumentedMember and use addMember for everything.
        https://bugs.webkit.org/show_bug.cgi?id=96913

        Reviewed by Yury Semikhatsky.

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryInstrumentation::addRootObject):
        (WTF::MemoryInstrumentation::addObject):
        (WTF::MemoryInstrumentation::addObjectImpl):
        (WTF):
        (WTF::MemoryInstrumentation::addInstrumentedCollection):
        (WTF::MemoryInstrumentation::addInstrumentedMapEntries):
        (WTF::MemoryInstrumentation::addInstrumentedMapValues):
        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::reportMemoryUsage):
        * wtf/text/CString.h:
        (WTF::CString::reportMemoryUsage):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::reportMemoryUsage):
        * wtf/text/WTFString.cpp:
        (WTF::String::reportMemoryUsage):
        * wtf/url/api/ParsedURL.cpp:
        (WTF::ParsedURL::reportMemoryUsage):
        * wtf/url/api/URLString.cpp:
        (WTF::URLString::reportMemoryUsage):

2012-09-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed compilation fix.

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryInstrumentation::reportObjectMemoryUsage):

2012-09-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: automatically detect if class has reportMemoryUsage method
        https://bugs.webkit.org/show_bug.cgi?id=96756

        Reviewed by Alexander Pavlov.

        Implemeted automatic selector of the memory reporting method. If
        an object has reportMemoryUsage method then call it. Otherwise
        count only object's self size. As the next step we will delete
        addInstrumentedMember and addInstrumentedObjectImpl and will
        have only addMember and addObjectImpl that would automatically
        call reportMemoryUsage if it is present.

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryInstrumentation::selectInstrumentationMethod):
        (MemoryInstrumentation):
        (WTF::MemoryInstrumentation::reportObjectMemoryUsage):
        (WTF::MemoryInstrumentation::addInstrumentedObjectImpl):
        (WTF::MemoryInstrumentation::addObjectImpl):
        (WTF::::process):

2012-09-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: OwnPtr and RefPtr reported by pointer can be double counted by the memory instrumentation
        https://bugs.webkit.org/show_bug.cgi?id=96791

        Reviewed by Alexander Pavlov.

        * wtf/MemoryInstrumentation.h:
        (WTF::MemoryInstrumentation::addObjectImpl): check if the smart pointer has already
        been visited before counting its size.

2012-09-15  Benjamin Poulain  <benjamin@webkit.org>

        Fix the build with WTF URL
        https://bugs.webkit.org/show_bug.cgi?id=96875

        Reviewed by Adam Barth.

        Add support for MemoryInstrumentation to WTF's URL classes.

        * wtf/url/api/ParsedURL.cpp:
        (WTF::ParsedURL::reportMemoryUsage):
        * wtf/url/api/ParsedURL.h:
        (ParsedURL):
        * wtf/url/api/URLString.cpp:
        (WTF::URLString::reportMemoryUsage):
        * wtf/url/api/URLString.h:
        (URLString):

2012-09-15  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        llint: Implement LOCAL_LABEL_STRING for the BSD platforms.
        https://bugs.webkit.org/show_bug.cgi?id=96870

        Reviewed by Filip Pizlo.

        * wtf/InlineASM.h: Extend the definition of LOCAL_LABEL_STRING
        currently used for OS(LINUX) to the BSDs, since they also normally
        use GNU as, and clang/llvm seems to parse that syntax just fine as
        well.

2012-09-14  Alexey Proskuryakov  <ap@apple.com>

        Minimize collisions when hashing pairs
        https://bugs.webkit.org/show_bug.cgi?id=96022

        Build fix (with newer clang?)

        * wtf/HashFunctions.h: (WTF::pairIntHash): Be explicit about casting from
        64 bit to 32 bit.

2012-09-14  Dana Jansens  <danakj@chromium.org>

        Minimize collisions when hashing pairs
        https://bugs.webkit.org/show_bug.cgi?id=96022

        Reviewed by Adrienne Walker.

        The current hash function for pairs has poor performance as it does a
        nice hash function on 64 bits, but then just drops the top 32 bits. The
        hash method for pairs tries to use Thomas Wang's 64 bit Mix Function,
        but this requires not dropping any bits in order to retain the
        characteristics mentioned by Thomas.

        A better method of hashing sets of 32-bit integers is to use
        multiplication in 64 bits with random integers. This method is a
        provably almost-universal hash function. Testing shows that this
        method decreases the time required, when compared with the current
        method, by more than 20% due to better hashing characteristics.

        * wtf/HashFunctions.h:
        (WTF):
        (WTF::pairIntHash):
        Implments the hashing method for a pair of unsigned integers.

        (WTF::PairHash::hash):
        Use pairIntHash() on the hash results of each object in the pair.

        (WTF::IntPairHash::hash):
        Implement an integer-specific PairHash class that does not need to
        hash each object in the pair. It uses pairIntHash on the two
        integers in the pair directly.

        (WTF::IntPairHash::equal):
        (IntPairHash):

2012-09-14  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make force_static_libs_as_shared work on Mac OS

        We had to move a few LIBS += around that were in the wrong place,
        and not caught when everything was just linked into the final
        QtWebKit library.

        Reviewed by Simon Hausmann.

        * WTF.pri:

2012-09-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI: convert template versions of String*::reportMemoryUsage functions to normal functions.
        https://bugs.webkit.org/show_bug.cgi?id=96759

        Reviewed by Yury Semikhatsky.

        Now when MemoryInstrumentation.h is a part of WTF we can move reportMemoryUsage functions to cpp file.

        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::reportMemoryUsage):
        (WTF):
        * wtf/text/AtomicString.h:
        (WTF):
        (AtomicString):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::reportMemoryUsage):
        (WTF):
        * wtf/text/StringImpl.h:
        (WTF):
        (StringImpl):
        * wtf/text/WTFString.cpp:
        (WTF::String::reportMemoryUsage):
        (WTF):
        * wtf/text/WTFString.h:
        (WTF):
        (String):

2012-09-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI: remove current traits helper class because it is customizing the instrumentation at a wrong place and is not necessary at the moment.
        https://bugs.webkit.org/show_bug.cgi?id=96737

        Reviewed by Yury Semikhatsky.

        * wtf/MemoryInstrumentation.h:
        (MemoryInstrumentation):
        WTF::MemoryInstrumentationTraits): removed
        (WTF::MemoryInstrumentation::OwningTraits::addInstrumentedObject): direct call inserted
        (WTF::MemoryInstrumentation::OwningTraits::addObject):direct call inserted

2012-09-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Evas_Object* is a ref'ed structure, so tread it as such
        https://bugs.webkit.org/show_bug.cgi?id=96659

        Reviewed by Gyuyoung Kim.

        Remove OwnPtr support for Evas_Object* and add support for it
        with RefPtr instead (the latter moved from WebCore).

        * wtf/PlatformEfl.cmake:
        * wtf/efl/OwnPtrEfl.cpp:
        * wtf/efl/RefPtrEfl.cpp: Renamed from Source/WebCore/platform/efl/RefPtrEfl.cpp.
        (WTF):
        (WTF::refIfNotNull):
        (WTF::derefIfNotNull):
        * wtf/efl/RefPtrEfl.h: Renamed from Source/WebCore/platform/efl/RefPtrEfl.h.
        (WTF):

2012-09-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r128507.
        http://trac.webkit.org/changeset/128507
        https://bugs.webkit.org/show_bug.cgi?id=96659

        Revert. r128507 makes too many crash in EFL layout test bots.

        * wtf/PlatformEfl.cmake:
        * wtf/efl/OwnPtrEfl.cpp:
        (WTF::deleteOwnedPtr):
        (WTF):

2012-09-13  Kevin Funk  <kevin.funk@kdab.com>

        Make compile with both OS(WINCE) and PLATFORM(QT) support
        https://bugs.webkit.org/show_bug.cgi?id=95536

        Reviewed by Simon Hausmann.

        Fixes for Windows CE.

        * WTF.pri:
        Also include path for mt19937ar.c
        * wtf/unicode/icu/CollatorICU.cpp:
        Fix undeclared strdup() on CE7
        * wtf/Platform.h:

2012-09-13  Byungseon Shin  <xingri@gmail.com>

        Fix for WTF fails to compile in thumb mode when llint is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=96400

        Reviewed by Filip Pizlo.

        When using "+m" with Armv7 cross compiler assume offset range between +/- 4095
        (the largest possible offset range).
        However, ldrex/strex can only use offset range of 0~1020, so "+m" needed to be changed to "+Q".
        Ref. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54480

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

2012-09-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Evas_Object* is a ref'ed structure, so tread it as such
        https://bugs.webkit.org/show_bug.cgi?id=96659

        Reviewed by Adam Barth.

        Remove OwnPtr support for Evas_Object* and add support for it
        with RefPtr instead (the latter moved from WebCore).

        * wtf/PlatformEfl.cmake:
        * wtf/efl/OwnPtrEfl.cpp:
        * wtf/efl/RefPtrEfl.cpp: Renamed from Source/WebCore/platform/efl/RefPtrEfl.cpp.
        (WTF):
        (WTF::refIfNotNull):
        (WTF::derefIfNotNull):
        * wtf/efl/RefPtrEfl.h: Renamed from Source/WebCore/platform/efl/RefPtrEfl.h.
        (WTF):

2012-09-13  Michael Saboff  <msaboff@apple.com>

        Added 8 bit path to WidthIterator::advance()
        https://bugs.webkit.org/show_bug.cgi?id=96590

        Reviewed by Geoffrey Garen.

        Added new character constant for Hiragana Letter Small A.

        * wtf/unicode/CharacterNames.h:
        (Unicode):

2012-09-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI: instrument KURL directly.
        https://bugs.webkit.org/show_bug.cgi?id=96624

        Reviewed by Yury Semikhatsky.

        I replaced traits based instrumentation of KURL with reportMemoryUsage functions.
        CString* were also instrumented.

        Drive by fix: Instrumentation code in QualifiedName was moved to cpp.

        * wtf/text/CString.h:
        (CStringBuffer):
        (WTF::CStringBuffer::reportMemoryUsage):
        (CString):
        (WTF::CString::reportMemoryUsage):

2012-09-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI: migrate core instrumentation code to WTF namespace
        https://bugs.webkit.org/show_bug.cgi?id=96511

        Reviewed by Yury Semikhatsky.

        After moving core NMI code to WTF namespace I removed forward declarations
        of MemoryObjectInfo and MemoryInstrumentation from WebCore headers and add
        forward declaration into wtf/Forward.h

        * wtf/Forward.h:
        (WTF):
        * wtf/MemoryInstrumentation.h:

2012-09-12  Dan Bernstein  <mitz@apple.com>

        Removed a reference to a file that doesn’t participate in any target.

        * WTF.xcodeproj/project.pbxproj: Removed the reference to
        CONTRIBUTORS.pthreads-win32.

2012-09-11  Michael Saboff  <msaboff@apple.com>

        Element::classAttributeChanged should use characters8/16 to find first non-whitespace
        https://bugs.webkit.org/show_bug.cgi?id=96446

        Reviewed by Benjamin Poulain.

        Added bit size related string accessors to AtomicString to support change.

        * wtf/text/AtomicString.h:
        (AtomicString):
        (WTF::AtomicString::is8Bit):
        (WTF::AtomicString::characters8):
        (WTF::AtomicString::characters16):

2012-09-12  Michael Saboff  <msaboff@apple.com>

        Build fixed for http://trac.webkit.org/changeset/128243

        Unreviewed build fix.

        Removed temporarily added function signature.

        * icu/unicode/unistr.h:
        (UnicodeString::extract):

2012-09-12  Michael Saboff  <msaboff@apple.com>

        Build fixed for http://trac.webkit.org/changeset/128243

        Unreviewed build fix.

        Change UnicodeString::extract for gcc based on ICU fix described in
        http://bugs.icu-project.org/trac/ticket/8197.

        * icu/unicode/unistr.h:
        (UnicodeString::extract):

2012-09-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI move String* instrumentation to wtf.
        https://bugs.webkit.org/show_bug.cgi?id=96405

        Reviewed by Yury Semikhatsky.

        This instrumentation is solving the problem with substrings and removes traits based code which is hard to upstream.

        Tested by webkit_unit_tests.

        * wtf/text/AtomicString.h:
        (AtomicString):
        (WTF::AtomicString::reportMemoryUsage):
        * wtf/text/StringImpl.h:
        (StringImpl):
        (WTF::StringImpl::reportMemoryUsage):
        * wtf/text/WTFString.h:
        (String):
        (WTF::String::reportMemoryUsage):

2012-09-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r128279.
        http://trac.webkit.org/changeset/128279
        https://bugs.webkit.org/show_bug.cgi?id=96487

        "Snow Leopard compilation broken" (Requested by yurys on
        #webkit).

        * wtf/MemoryInstrumentation.h:
        (GenericMemoryTypes):
        (WebCore):
        (WebCore::MemoryInstrumentation::addRootObject):
        (WebCore::MemoryObjectInfo::reportObjectInfo):
        (WebCore::MemoryClassInfo::MemoryClassInfo):
        * wtf/text/AtomicString.h:
        (AtomicString):
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.h:

2012-09-12  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: Persistent handle referenced from ScriptWrappable is double counted
        https://bugs.webkit.org/show_bug.cgi?id=96483

        Reviewed by Alexander Pavlov.

        * wtf/MemoryInstrumentation.h:
        (WebCore::MemoryClassInfo::addWeakPointer): this method is expected to be
        used on fields that are pointers to objects which are parts of bigger memory
        blocks (field of another object, element in an array, object allocated in a
        memory arena etc.). We don't want to count such objects' memory separately
        from their owners but in order to be able to validates the memory instrumentation
        with clang plugin we need to make sure all fields in instrumented objects
        are reported.
        (MemoryClassInfo):

2012-09-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI move String* instrumentation to wtf.
        https://bugs.webkit.org/show_bug.cgi?id=96405

        Reviewed by Yury Semikhatsky.

        This instrumentation is solving the problem with substrings and removes traits based code which is hard to upstream.

        Tested by webkit_unit_tests.

        * wtf/MemoryInstrumentation.h:
        (WebCore):
        (WebCore::MemoryInstrumentation::addRootObject):
        (WebCore::MemoryObjectInfo::reportObjectInfo):
        (WebCore::MemoryClassInfo::MemoryClassInfo):
        * wtf/text/AtomicString.h:
        (AtomicString):
        (WTF::AtomicString::reportMemoryUsage):
        * wtf/text/StringImpl.h:
        (StringImpl):
        (WTF::StringImpl::reportMemoryUsage):
        * wtf/text/WTFString.h:
        (String):
        (WTF::String::reportMemoryUsage):

2012-09-11  Michael Saboff  <msaboff@apple.com>

        Build fixed for http://trac.webkit.org/changeset/128243

        Unreviewed build fix.

        Added missing include file needed by 96422 for C++ ICU APIs.

        * icu/unicode/bytestream.h: Added.
        * icu/unicode/rep.h: Added.
        * icu/unicode/std_string.h: Added.
        * icu/unicode/strenum.h: Added.
        * icu/unicode/stringpiece.h: Added.
        * icu/unicode/unistr.h: Added.
        * icu/unicode/uobject.h: Added.

2012-09-11  Michael Saboff  <msaboff@apple.com>

        Build fixed for http://trac.webkit.org/changeset/128243

        Rubber stamped by Stephanie Lewis.

        Added missing include file needed by 96422.

        * icu/unicode/unorm2.h: Added.

2012-09-11  Michael Saboff  <msaboff@apple.com>

        Build fixed for http://trac.webkit.org/changeset/128243

        Rubber stamped by Stephanie Lewis.

        Added missing include file needed by 96422.

        * icu/unicode/ptypes.h: Added.

2012-09-11  Michael Saboff  <msaboff@apple.com>

        Update ICU header files to more recent version
        https://bugs.webkit.org/show_bug.cgi?id=96422

        Reviewed by Geoff Garen.

        Updated ICU header files to 4.6.1.  Modifications made as part of the merge are:
        platform.h - Changed ifndef / define / endif for U_HAVE_UINT8_T, U_HAVE_UINT16_T, U_HAVE_UINT32_T,
            U_HAVE_UINT64_T, U_IS_BIG_ENDIAN and U_ENABLE_TRACING to match the existing platform.h
        putil.h (line 132) - Changes defined(U_WINDOWS) to defined(WIN32) || defined(OS2) to match existing putil.h
        ustring.h (line 945) - Wrapped macro argument cs with { (const UChar *)cs } to match existing ustring.h
        utypes.h (line 545) - Changed defined(U_WINDOWS) to defined(WIN32) to match existing utypes.h

        * icu/unicode/localpointer.h: Added.
        * icu/unicode/parseerr.h:
        * icu/unicode/platform.h:
        * icu/unicode/putil.h:
        * icu/unicode/uchar.h:
        * icu/unicode/ucnv.h:
        * icu/unicode/ucnv_err.h:
        * icu/unicode/ucol.h:
        * icu/unicode/uconfig.h:
        * icu/unicode/uenum.h:
        * icu/unicode/uiter.h:
        * icu/unicode/uloc.h:
        * icu/unicode/umachine.h:
        * icu/unicode/unorm.h:
        * icu/unicode/urename.h:
        * icu/unicode/uscript.h:
        * icu/unicode/uset.h:
        * icu/unicode/ustring.h:
        * icu/unicode/utf.h:
        * icu/unicode/utf16.h:
        * icu/unicode/utf8.h:
        * icu/unicode/utypes.h:
        * icu/unicode/uvernum.h: Added.
        * icu/unicode/uversion.h:

2012-09-11  Pratik Solanki  <psolanki@apple.com>

        Add ObjcRuntimeExtras.h to the Xcode project file
        https://bugs.webkit.org/show_bug.cgi?id=96419

        Reviewed by Alexey Proskuryakov.

        * WTF.xcodeproj/project.pbxproj:

2012-09-11  Adrienne Walker  <enne@google.com>

        Clang doesn't optimize away undefined OwnPtr copy constructor
        https://bugs.webkit.org/show_bug.cgi?id=74625

        Reviewed by Anders Carlsson.

        Original patch by Anders Carlsson, with a minor edit.

        The publicly declared-but-not-defined copy constructor is a compiler
        optimization-dependent landmine. Clang often fails to optimize the use
        of this function out, leading to internal linkage errors for the missing
        definition. gcc doesn't have this problem and optimizes that function
        out, leading to code that inconsistently fails to link across platforms.

        As a partial fix for this problem, on any compiler that supports C++11
        move semantics, replace the bogus copy constructor with the move
        constructors.  In the future, if all compilers support this, then the
        copy constructor can be removed.

        This still leaves other compilers that don't support move semantics
        like Visual Studio vulnerable to linking inconsistencies.

        * wtf/OwnPtr.h:
        (OwnPtr):
        (WTF):
        (WTF::::OwnPtr):
        (WTF::=):

2012-09-11  Raphael Kubo da Costa  <rakuco@webkit.org>

        [EFL] Rewrite the EFL-related Find modules
        https://bugs.webkit.org/show_bug.cgi?id=95237

        Reviewed by Kenneth Rohde Christiansen.

        * CMakeLists.txt: Stop setting the LINK_FLAGS property.
        * PlatformEfl.cmake: Add libraries and include directories for
        each Enlightenment Foundation Library used by the port.

2012-09-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Add a configure step to the Qt build system

        This allows building the Qt port using just 'qmake WebKit.pro'. Using
        the build-webkit script is still supported, and will add slightly more
        logic to the build, such as detecting the need for clean or incremental
        builds.

        Internally, the build system now uses a new variable, WEBKIT_CONFIG, for
        all things related to configuring the build, such as use/have/enable flags,
        and these are translated to defines in default_post. Project files should
        no longer check contains(DEFINES,...) to detect features, but use the new
        enable?(), use?(), and have?() functions. The no_webkit1 and no_webkit2
        options have been translated into WEBKIT_CONFIG options as well, and can
        be checked using build?().

        Reviewed by Simon Hausmann.

        * WTF.pri:
        * wtf/Platform.h:

2012-09-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI: move MemoryInstrumentation.h to wtf
        https://bugs.webkit.org/show_bug.cgi?id=96356

        Reviewed by Yury Semikhatsky.

        It is necessary step because it helps us to remove dependency between platform and WebCore.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/MemoryInstrumentation.h: Renamed from Source/WebCore/dom/MemoryInstrumentation.h.
        (WebCore):
        (GenericMemoryTypes):
        (MemoryInstrumentationTraits):
        (MemoryInstrumentation):
        (WebCore::MemoryInstrumentation::~MemoryInstrumentation):
        (WebCore::MemoryInstrumentation::addRootObject):
        (InstrumentedPointerBase):
        (WebCore::MemoryInstrumentation::InstrumentedPointerBase::~InstrumentedPointerBase):
        (InstrumentedPointer):
        (WebCore::MemoryInstrumentation::InstrumentedPointer::InstrumentedPointer):
        (WebCore::MemoryInstrumentation::addObject):
        (WebCore::MemoryInstrumentation::addInstrumentedObject):
        (WebCore::MemoryInstrumentation::addRawBuffer):
        (WebCore::MemoryInstrumentation::OwningTraits::addInstrumentedObject):
        (WebCore::MemoryInstrumentation::OwningTraits::addObject):
        (WebCore::MemoryInstrumentationTraits::addInstrumentedObject):
        (WebCore::MemoryInstrumentationTraits::addObject):
        (MemoryObjectInfo):
        (WebCore::MemoryObjectInfo::MemoryObjectInfo):
        (WebCore::MemoryObjectInfo::objectType):
        (WebCore::MemoryObjectInfo::objectSize):
        (WebCore::MemoryObjectInfo::memoryInstrumentation):
        (WebCore::MemoryObjectInfo::reportObjectInfo):
        (MemoryClassInfo):
        (WebCore::MemoryClassInfo::MemoryClassInfo):
        (WebCore::MemoryClassInfo::addInstrumentedMember):
        (WebCore::MemoryClassInfo::addMember):
        (WebCore::MemoryClassInfo::addHashMap):
        (WebCore::MemoryClassInfo::addHashSet):
        (WebCore::MemoryClassInfo::addHashCountedSet):
        (WebCore::MemoryClassInfo::addInstrumentedHashSet):
        (WebCore::MemoryClassInfo::addInstrumentedVector):
        (WebCore::MemoryClassInfo::addInstrumentedVectorPtr):
        (WebCore::MemoryClassInfo::addInstrumentedMapEntries):
        (WebCore::MemoryClassInfo::addInstrumentedMapValues):
        (WebCore::MemoryClassInfo::addListHashSet):
        (WebCore::MemoryClassInfo::addVector):
        (WebCore::MemoryClassInfo::addVectorPtr):
        (WebCore::MemoryClassInfo::addRawBuffer):
        (WebCore::MemoryInstrumentation::addInstrumentedObjectImpl):
        (WebCore::MemoryInstrumentation::addObjectImpl):
        (WebCore::MemoryInstrumentation::addHashMap):
        (WebCore::MemoryInstrumentation::addHashSet):
        (WebCore::MemoryInstrumentation::addInstrumentedCollection):
        (WebCore::MemoryInstrumentation::addInstrumentedMapEntries):
        (WebCore::MemoryInstrumentation::addInstrumentedMapValues):
        (WebCore::MemoryInstrumentation::addListHashSet):
        (WebCore::MemoryInstrumentation::addVector):
        (WebCore::MemoryInstrumentation::calculateContainerSize):
        (WebCore::::process):

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

        Fixed ASSERT() and ASSERT_AT() macros so that they can be used in
        comma expressions. Also, added UNUSED_LABEL().
        https://bugs.webkit.org/show_bug.cgi?id=96127.

        Reviewed by Geoffrey Garen.

        * wtf/Assertions.h:
        * wtf/UnusedParam.h: Added UNUSED_LABEL(). Removed an obsolete comment.

2012-09-09  Patrick Gansterer  <paroga@webkit.org>

        Add StringBuilder::appendNumber() and use it
        https://bugs.webkit.org/show_bug.cgi?id=96030

        Reviewed by Eric Seidel.

        Also fix a bunch of append() vs. appendLiteral() issues in the surrounding code.

        * wtf/DateMath.cpp:
        (WTF::makeRFC2822DateString):
        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendNumber):
        * wtf/text/StringBuilder.h:
        (StringBuilder):

2012-09-09  Patrick Gansterer  <paroga@webkit.org>

        Make the String initialization on the function side of String::number()
        https://bugs.webkit.org/show_bug.cgi?id=95940

        Reviewed by Benjamin Poulain.

        Un-Inline String::number() to make the String initialization done on the function side
        instead of being on the caller side.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/IntegerToStringConversion.cpp: Removed.
        * wtf/text/IntegerToStringConversion.h:
        (WTF::numberToStringImpl):
        (WTF::numberToStringSigned):
        (WTF::numberToStringUnsigned):
        * wtf/text/WTFString.cpp:
        (WTF::String::number):
        * wtf/text/WTFString.h:

2012-09-08  Andreas Kling  <kling@webkit.org>

        Give AtomicString SimpleClassVectorTraits.
        <http://webkit.org/b/96186>

        Reviewed by Karl Anders Carlsson.

        AtomicString can be initialized/moved/compared with memset/memcpy/memcmp,
        so add a VectorTraits<AtomicString> to make Vector<AtomicString> a little
        more efficient.

        * wtf/VectorTraits.h:

2012-09-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r127938.
        http://trac.webkit.org/changeset/127938
        https://bugs.webkit.org/show_bug.cgi?id=96166

        It broke the build (Requested by smfr on #webkit).

        * wtf/Assertions.h:

2012-09-07  Mark Lam  <mark.lam@apple.com>

        Fixed ASSERT() and ASSERT_AT() macros so that they can be used in
        comma expressions.
        https://bugs.webkit.org/show_bug.cgi?id=96127.

        Reviewed by Filip Pizlo.

        * wtf/Assertions.h:
        (wtfAssert):

2012-09-07  Michael Saboff  <msaboff@apple.com>

        StringImpl::find(StringImpl*) doesn't handle cases where search and match strings are different bitness
        https://bugs.webkit.org/show_bug.cgi?id=96125

        Reviewed by Benjamin Poulain.

        Changed findInner and reverseFindInner to be templated on both search and match character types.
        Changed both find's and reverseFind to use all four bitness combinations of findInner and
        reverseFindInner.

        * wtf/text/StringImpl.cpp:
        (WTF::findInner):
        (WTF::StringImpl::find):
        (WTF::reverseFindInner):
        (WTF::StringImpl::reverseFind):

2012-09-07  Michael Saboff  <msaboff@apple.com>

        equalIgnoringCase of two StringImpls doesn't handle 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=96028

        Reviewed by Benjamin Poulain.

        Added 8 bit checks and paths to CaseFoldingHash::equal.  Also cleaned up StringHash::equal(), removing
        obvious and in one case wrong comments.  Moved equalIgnoringCase(UChar*, UChar*) from StringImpl.cpp
        to StringImpl.h.

        * wtf/text/StringHash.h:
        (WTF::StringHash::equal):
        (WTF::CaseFoldingHash::equal):
        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:
        (WTF::equalIgnoringCase):

2012-09-07  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Deprecate String += operator
        https://bugs.webkit.org/show_bug.cgi?id=96083

        Reviewed by Adam Barth.

        * wtf/Platform.h:

2012-09-06  Michael Saboff  <msaboff@apple.com>

        StringBuilder::toAtomicString() can create an 16 bit string with 8 bit contents
        https://bugs.webkit.org/show_bug.cgi?id=96029

        Reviewed by Benjamin Poulain.

        Added 8 bit path when creating an AtomicString from a partial 8 bit buffer.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::toAtomicString):

2012-09-06  Michael Saboff  <msaboff@apple.com>

        16 bit JSRopeString up converts an 8 bit fibers to 16 bits during resolution
        https://bugs.webkit.org/show_bug.cgi?id=95810

        Reviewed by Benjamin Poulain.

        New copy routine that takes an 8 bit source and a 16 bit destination.  Used when copying
        the contents of an 8 bit fiber to the 16 bit buffer when resolving a 16 bit rope.

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::copyChars):
        (StringImpl):

2012-09-06  Michael Saboff  <msaboff@apple.com>

        Unreviewed fix to r127799.
        https://bugs.webkit.org/show_bug.cgi?id=95807

        Unreviewed fix.

        Removed extraneous "static".  This code is hidden behind STRING_STATS define and 
        therefore is not enabled by default.

        * wtf/text/StringImpl.cpp:

2012-09-06  Lauro Neto  <lauro.neto@openbossa.org>

        [Qt] Deprecate String += operator
        https://bugs.webkit.org/show_bug.cgi?id=95895

        Reviewed by Benjamin Poulain.

        Remove Qt from WTF_DEPRECATED_STRING_OPERATORS guard.

        * wtf/Platform.h:

2012-09-06  Michael Saboff  <msaboff@apple.com>

        ENH: Add Logging to StringImpl to track String Types
        https://bugs.webkit.org/show_bug.cgi?id=95807

        Reviewed by Benjamin Poulain.

        Added StringsStats class that keeps track of the number of strings, number of 8 and 16 bit
        strings as well as the number of 8 bit strings up converted to 16 bits. The number of characrters
        for each type is also accumulated. These statistics are output via DataLog every 5000
        calls to StringImpl destructor. The 5000 can be adjusted via s_printStringStatsFrequency.
        This StringStats code is disabled by default and enabled by defining STRING_STATS in
        wtf/text/StringImpl.h.

        * wtf/text/StringImpl.cpp:
        (WTF::StringStats::removeString):
        (WTF::StringStats::printStats):
        (WTF::StringImpl::~StringImpl):
        (WTF::StringImpl::getData16SlowCase):
        * wtf/text/StringImpl.h:
        (WTF::StringStats::add8BitString):
        (StringStats):
        (WTF::StringStats::add16BitString):
        (WTF::StringStats::addUpconvertedString):
        (WTF::StringImpl::StringImpl):
        (StringImpl):
        (WTF::StringImpl::isSubString):
        (WTF::StringImpl::stringStats):

2012-09-06  Patrick Gansterer  <paroga@webkit.org>

        Fix export macros in IntegerToStringConversion.h
        https://bugs.webkit.org/show_bug.cgi?id=95900

        Reviewed by Benjamin Poulain.

        The WTF_EXPORT_STRING_API must be used only for symbols which are compiled
        on windows in "non-WTF" binaries too. Since this isn't valid for the
        IntegerToStringConversion function replace it with WTF_EXPORT_PRIVATE.

        * wtf/text/IntegerToStringConversion.h:

2012-09-06  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Various small Windows / MSVC build fixes
        https://bugs.webkit.org/show_bug.cgi?id=95934

        Reviewed by Kenneth Rohde Christiansen.

        For the Qt build on Windows, do not enable WTF_USE_UNIX_DOMAIN_SOCKETS for
        WebKit2 IPC.

        * wtf/Platform.h:

2012-09-06  Adam Barth  <abarth@chromium.org>

        Remove WTF::String::operator+=
        https://bugs.webkit.org/show_bug.cgi?id=95797

        Reviewed by Sam Weinig.

        This patch encloses WTF::String::operator+= in an ifdef so that we can
        gradually remove it from the various port-specific files. The ifdef
        lets us whitelist use of operator+= in individual files during the
        transition.

        * wtf/Platform.h
        * wtf/text/WTFString.h:

2012-09-05  Gabor Rapcsanyi  <rgabor@webkit.org>

        DFG JIT doesn't work properly on ARM hardfp
        https://bugs.webkit.org/show_bug.cgi?id=95684

        Reviewed by Filip Pizlo.

        Add hardfp support to DFG JIT. The patch is created with the
        help of Zoltan Herczeg.

        * wtf/Platform.h:

2012-09-04  Zoltan Horvath  <zoltan@webkit.org>

        Extend the coverage of the Custom Allocation Framework in WTF and in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=95737

        Reviewed by Eric Seidel.

        Add WTF_MAKE_FAST_ALLOCATED macro to the following class declarations because these are instantiated by operator new.

        * wtf/CryptographicallyRandomNumber.cpp: CryptographicallyRandomNumber is instantiated at wtf/CryptographicallyRandomNumber.cpp:162.
        * wtf/MediaTime.h: MediaTime is instantiated at wtf/MediaTime.cpp:288.
        * wtf/MetaAllocator.h:
        (MetaAllocatorTracker): MetaAllocatorTracker is instantiated at JavaScriptCore/tools/CodeProfiling.cpp:120.
        * wtf/ThreadingPthreads.cpp:
        (PthreadState): PthreadState is instantiated at wtf/ThreadingPthreads.cpp:165.
        * wtf/text/AtomicString.cpp:
        (AtomicStringTable): AtomicStringTable is instantiated at wtf/text/AtomicString.cpp:43.

2012-09-01  Mark Lam  <mark.lam@apple.com>

        LLInt C loop backend.
        https://bugs.webkit.org/show_bug.cgi?id=91052.

        Reviewed by Filip Pizlo.

        Added configs for the llint C loop backend.

        * wtf/Platform.h:

2012-08-31  Pratik Solanki  <psolanki@apple.com>

        objc_msgSend and IMP should be cast appropriately before using
        https://bugs.webkit.org/show_bug.cgi?id=95242

        Reviewed by Benjamin Poulain.

        Fix for older compilers. Pass id as the return type to the template
        instead of relying on default type.

        * wtf/Functional.h:
        (WTF::R):
        * wtf/ObjcRuntimeExtras.h:

2012-08-31  Michael Saboff  <msaboff@apple.com>

        CSS Parser should directly parse 8 bit source strings
        https://bugs.webkit.org/show_bug.cgi?id=95207

        Reviewed by Geoffrey Garen.

        * wtf/text/StringImpl.h:
        (WTF::equalIgnoringCase): Added (const char*, const LChar*, unsigned) flavor to support
        8 bit CSS parser work.

2012-08-30  Benjamin Poulain  <bpoulain@apple.com>

        AtomicString(ASCIILiteral) should not compile
        https://bugs.webkit.org/show_bug.cgi?id=95413

        Reviewed by Adam Barth.

        * wtf/text/AtomicString.h:
        (AtomicString): Declare the constructor from ASCIILiteral private to ensure it is
        not used by accident.

2012-08-30  Benjamin Poulain  <bpoulain@apple.com>

        Ambiguous operator[]  after r127191 on some compiler
        https://bugs.webkit.org/show_bug.cgi?id=95509

        Reviewed by Simon Fraser.

        * wtf/text/WTFString.h:
        (WTF::String::characterAt): At this as a synonym to operator[] to attempt a build fix.

2012-08-30  Mark Lam  <mark.lam@apple.com>

        Render unto #ifdef's that which belong to them.
        https://bugs.webkit.org/show_bug.cgi?id=95482.

        Reviewed by Filip Pizlo.

        * wtf/Platform.h: Added ENABLE(COMPUTED_GOTO_OPCODES).

2012-08-30  Pratik Solanki  <psolanki@apple.com>

        objc_msgSend and IMP should be cast appropriately before using
        https://bugs.webkit.org/show_bug.cgi?id=95242

        Reviewed by Benjamin Poulain.

        Add new templates wtfObjcMsgSend and wtfCallIMP that do the appropriate
        casts to correctly typed function pointers before calling objc_msgSend
        and IMP methods directly.

        * wtf/Functional.h:
        (WTF::R): Use wtfObjcMsgSend.
        * wtf/ObjcRuntimeExtras.h: Added.
        (wtfObjcMsgSend):
        (wtfCallIMP):

2012-08-30  Benjamin Poulain  <bpoulain@apple.com>

        Replace JSC::UString by WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=95271

        Reviewed by Geoffrey Garen.

        * wtf/Platform.h: Useless edit to force a full build. This is needed for some bots for some reason.
        * wtf/text/WTFString.h: Export a symbol that was exported on UString and needed in WebCore.

        Add String::getCharactersWithUpconvert<>(), which is similar to String::getCharacters<>() but with the same
        behaviors as UString::getCharacters<>().

        String::getCharactersWithUpconvert<>() is useful when manipulating multiple strings, it allow writting code
        using 16bits characters if any of the input String is not 8bit.

2012-08-30  Yong Li  <yoli@rim.com>

        Vector::shrinkToFit should use realloc when suitable.
        https://bugs.webkit.org/show_bug.cgi?id=94810

        Reviewed by Benjamin Poulain.

        Only tested on BlackBerry. So it is wrapped with PLATFORM(BLACKBERRY) in the mean time.
        Use realloc to shrink buffer when inline buffer isn't involved and and canMoveWithMemcpy is true.

        When running the test code attached to the bug, it gives 30-45% performance boost for the large blocks
        (Every test cycle includes an extra pair of malloc/free, so the boost on shrinkToFit() is even bigger)
        Performance impact on small blocks is not noticeable. (Tested on BlackBerry)

        * wtf/Vector.h:
        (WTF::VectorBufferBase::shouldReallocateBuffer):
        (VectorBufferBase):
        (WTF::VectorBufferBase::reallocateBuffer):
        (VectorBuffer):
        (WTF::VectorBuffer::shouldReallocateBuffer):
        (WTF::VectorBuffer::reallocateBuffer):
        (WTF::VectorBuffer::inlineBuffer):
        (WTF::::shrinkCapacity):

2012-08-30  Patrick Gansterer  <paroga@webkit.org>

        Build fix for COMPILER(MSVC) && !CPU(X86) after r127001.

        * wtf/MathExtras.h:
        (lrint): Added additional parentheses to silence compiler warning.

2012-08-29  Benjamin Poulain  <bpoulain@apple.com>

        REGRESSION(r126780): Crash using StringImpl::is8Bit before checking if there is an impl
        https://bugs.webkit.org/show_bug.cgi?id=95380

        Reviewed by Michael Saboff.

        Blindly copying code from UString in r126780 was stupid. I just brought over a bug.
        This patch adds the zero length branch back so that null strings are handled correctly.

        * wtf/text/WTFString.cpp:
        (WTF::String::ascii): Return a empty CString if the String is null or empty.

2012-08-29  Dominik Röttsches  <dominik.rottsches@intel.com>

        The 2d.imageData.object.round canvas test is failing
        https://bugs.webkit.org/show_bug.cgi?id=40272

        Reviewed by Benjamin Poulain.

        Updating previous patch to address Benjamin's comments.
        #ifdef in Uint8ClampedArray removed, fallback implementation for MSVC on non-X86 added.

        * wtf/MathExtras.h:
        (lrint): Fallback implementation for non-X86 & MSVC case.
        * wtf/Uint8ClampedArray.h: Removed #ifdef.

2012-08-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126914.
        http://trac.webkit.org/changeset/126914
        https://bugs.webkit.org/show_bug.cgi?id=95239

        it breaks everything and fixes nothing (Requested by pizlo on
        #webkit).

        * wtf/HashCountedSet.h:
        (WTF::::add):
        (WTF::::remove):
        (WTF::copyToVector):
        * wtf/HashIterators.h:
        (WTF::HashTableConstKeysIterator::get):
        (WTF::HashTableConstValuesIterator::get):
        (WTF::HashTableKeysIterator::get):
        (WTF::HashTableValuesIterator::get):
        * wtf/HashMap.h:
        (WTF::KeyValuePairKeyExtractor::extract):
        (WTF::HashMapValueTraits::isEmptyValue):
        (WTF::HashMapTranslator::translate):
        (WTF::HashMapTranslatorAdapter::translate):
        (WTF::::set):
        (WTF::::get):
        (WTF::::take):
        (WTF::operator==):
        (WTF):
        (WTF::deleteAllPairSeconds):
        (WTF::deleteAllValues):
        (WTF::deleteAllPairFirsts):
        (WTF::deleteAllKeys):
        * wtf/HashTable.h:
        (WTF::hashTableSwap):
        (WTF::::checkTableConsistencyExceptSize):
        * wtf/HashTraits.h:
        (WTF::KeyValuePair::KeyValuePair):
        (KeyValuePair):
        (WTF::KeyValuePairHashTraits::constructDeletedValue):
        (WTF::KeyValuePairHashTraits::isDeletedValue):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::addFreeSpace):
        (WTF::MetaAllocator::incrementPageOccupancy):
        (WTF::MetaAllocator::decrementPageOccupancy):
        * wtf/RefCountedLeakCounter.cpp:
        (WTF::RefCountedLeakCounter::~RefCountedLeakCounter):
        * wtf/RefPtrHashMap.h:
        (WTF::::set):
        (WTF::::get):
        (WTF::::inlineGet):
        (WTF::::take):
        * wtf/Spectrum.h:
        (WTF::Spectrum::add):
        (WTF::Spectrum::get):
        (WTF::Spectrum::buildList):
        * wtf/ThreadingPthreads.cpp:
        (WTF::identifierByPthreadHandle):

2012-08-28  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * wtf/HashCountedSet.h:
        (WTF::::add):
        (WTF::::remove):
        (WTF::copyToVector):
        * wtf/HashIterators.h:
        (WTF::HashTableConstKeysIterator::get):
        (WTF::HashTableConstValuesIterator::get):
        (WTF::HashTableKeysIterator::get):
        (WTF::HashTableValuesIterator::get):
        * wtf/HashMap.h:
        (WTF::KeyValuePairKeyExtractor::extract):
        (WTF::HashMapValueTraits::isEmptyValue):
        (WTF::HashMapTranslator::translate):
        (WTF::HashMapTranslatorAdapter::translate):
        (WTF::::set):
        (WTF::::get):
        (WTF::::take):
        (WTF::operator==):
        (WTF::deleteAllValues):
        (WTF::deleteAllKeys):
        Remove deleteAllPairFirsts/Seconds.

        * wtf/HashTable.h:
        (WTF::hashTableSwap):
        (WTF::::checkTableConsistencyExceptSize):
        * wtf/HashTraits.h:
        (WTF::KeyValuePair::KeyValuePair):
        (KeyValuePair):
        (WTF::KeyValuePairHashTraits::constructDeletedValue):
        (WTF::KeyValuePairHashTraits::isDeletedValue):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::addFreeSpace):
        (WTF::MetaAllocator::incrementPageOccupancy):
        (WTF::MetaAllocator::decrementPageOccupancy):
        * wtf/RefCountedLeakCounter.cpp:
        (WTF::RefCountedLeakCounter::~RefCountedLeakCounter):
        * wtf/RefPtrHashMap.h:
        (WTF::::set):
        (WTF::::get):
        (WTF::::inlineGet):
        (WTF::::take):
        * wtf/Spectrum.h:
        (WTF::Spectrum::add):
        (WTF::Spectrum::get):
        (WTF::Spectrum::buildList):
        * wtf/ThreadingPthreads.cpp:
        (WTF::identifierByPthreadHandle):

2012-08-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126836.
        http://trac.webkit.org/changeset/126836
        https://bugs.webkit.org/show_bug.cgi?id=95163

        Broke all Apple ports, EFL, and Qt. (Requested by tkent on
        #webkit).

        * wtf/HashCountedSet.h:
        (WTF::::add):
        (WTF::::remove):
        (WTF::copyToVector):
        * wtf/HashIterators.h:
        (WTF::HashTableConstKeysIterator::get):
        (WTF::HashTableConstValuesIterator::get):
        (WTF::HashTableValuesIterator::get):
        * wtf/HashMap.h:
        (WTF::KeyValuePairKeyExtractor::extract):
        (WTF::HashMapValueTraits::isEmptyValue):
        (WTF::HashMapTranslator::translate):
        (WTF::HashMapTranslatorAdapter::translate):
        (WTF::::set):
        (WTF::::get):
        (WTF::::take):
        (WTF::operator==):
        (WTF):
        (WTF::deleteAllPairSeconds):
        (WTF::deleteAllValues):
        (WTF::deleteAllPairFirsts):
        (WTF::deleteAllKeys):
        * wtf/HashTable.h:
        (WTF::hashTableSwap):
        (WTF::::checkTableConsistencyExceptSize):
        * wtf/HashTraits.h:
        (WTF::KeyValuePair::KeyValuePair):
        (KeyValuePair):
        (WTF::KeyValuePairHashTraits::constructDeletedValue):
        (WTF::KeyValuePairHashTraits::isDeletedValue):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::addFreeSpace):
        (WTF::MetaAllocator::incrementPageOccupancy):
        (WTF::MetaAllocator::decrementPageOccupancy):
        * wtf/RefCountedLeakCounter.cpp:
        (WTF::RefCountedLeakCounter::~RefCountedLeakCounter):
        * wtf/RefPtrHashMap.h:
        (WTF::::set):
        (WTF::::get):
        (WTF::::inlineGet):
        (WTF::::take):
        * wtf/Spectrum.h:
        (WTF::Spectrum::add):
        (WTF::Spectrum::get):
        (WTF::Spectrum::buildList):
        * wtf/ThreadingPthreads.cpp:
        (WTF::identifierByPthreadHandle):

2012-08-27  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * wtf/HashCountedSet.h:
        (WTF::::add):
        (WTF::::remove):
        (WTF::copyToVector):
        * wtf/HashIterators.h:
        (WTF::HashTableConstKeysIterator::get):
        (WTF::HashTableConstValuesIterator::get):
        (WTF::HashTableValuesIterator::get):
        * wtf/HashMap.h:
        (WTF::KeyValuePairKeyExtractor::extract):
        (WTF::HashMapValueTraits::isEmptyValue):
        (WTF::HashMapTranslator::translate):
        (WTF::HashMapTranslatorAdapter::translate):
        (WTF::::set):
        (WTF::::get):
        (WTF::::take):
        (WTF::operator==):
        (WTF::deleteAllValues):
        (WTF::deleteAllKeys):
        Remove deleteAllPairFirsts/Seconds.

        * wtf/HashTable.h:
        (WTF::hashTableSwap):
        (WTF::::checkTableConsistencyExceptSize):
        * wtf/HashTraits.h:
        (WTF::KeyValuePair::KeyValuePair):
        (KeyValuePair):
        (WTF::KeyValuePairHashTraits::constructDeletedValue):
        (WTF::KeyValuePairHashTraits::isDeletedValue):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::addFreeSpace):
        (WTF::MetaAllocator::incrementPageOccupancy):
        (WTF::MetaAllocator::decrementPageOccupancy):
        * wtf/RefCountedLeakCounter.cpp:
        (WTF::RefCountedLeakCounter::~RefCountedLeakCounter):
        * wtf/RefPtrHashMap.h:
        (WTF::::set):
        (WTF::::get):
        (WTF::::inlineGet):
        (WTF::::take):
        * wtf/Spectrum.h:
        (WTF::Spectrum::add):
        (WTF::Spectrum::get):
        (WTF::Spectrum::buildList):
        * wtf/ThreadingPthreads.cpp:
        (WTF::identifierByPthreadHandle):

2012-08-27  Benjamin Poulain  <benjamin@webkit.org>

        Add ECMAScript Number to String conversion to WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=95016

        Reviewed by Geoffrey Garen.

        * wtf/text/WTFString.cpp:
        (WTF::String::numberToStringECMAScript):
        * wtf/text/WTFString.h:
        Add the implementation of numberToStringECMAScript(double) from UString to String.
        This will make it easier to replace UString in the future.

2012-08-27  Benjamin Poulain  <benjamin@webkit.org>

        Even up WTF::String to CString functions
        https://bugs.webkit.org/show_bug.cgi?id=95008

        Reviewed by Sam Weinig.

        Apply advantages from UString to WTF::String.

        * wtf/text/WTFString.cpp:
        (WTF::String::ascii): There is no need to special case the null length, both
        following branches use CString::newUninitialized(), which create empty string
        for null length.
        (WTF::String::latin1): Use characters16() instead of characters() to avoid
        testing is8Bit() a second time.

2012-08-24  Benjamin Poulain  <benjamin@webkit.org>

        Touch Platform.h to solve a build dependency issue

        Unreviewed.

        * wtf/Platform.h:

2012-08-24  Benjamin Poulain  <bpoulain@apple.com>

        Unify Number to StringImpl conversion
        https://bugs.webkit.org/show_bug.cgi?id=94879

        Reviewed by Geoffrey Garen.

        Previously, UString::number() and String::number() used different implementations.

        WTF::String::number() was simply forwarding to String::format().
        UString::number() had an optimized version of the conversion.

        This patch replace both implementation by a new version, faster than the two previous versions.

        The new functions numberToStringImpl improvements are:
        -about 3 times faster than String::number().
        -14% faster than UString::number() on signed numbers.
        -9% faster than UString::number() on unsigned numbers.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/IntegerToStringConversion.cpp: Added.
        (WTF::numberToStringImplSigned):
        (WTF::numberToStringImpl):
        (WTF::numberToStringImplUnsigned):
        * wtf/text/IntegerToStringConversion.h: Added.
        * wtf/text/WTFString.cpp:
        (WTF::String::format):
        * wtf/text/WTFString.h:
        (WTF::String::number):

2012-08-24  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Be more explicit about the ICU dependency in the error message

        Rubber-stamped by Simon Hausmann.

        When building QtWebKit with a Qt5 which was not configured with libICU support
        the error message is somewhat ambiguous about the indirect dependency.

        * WTF.pri:

2012-08-23  Julien Chaffraix  <jchaffraix@webkit.org>

        [Chromium] Enable AtomicString && CString && WTFString && StringImpl unit tests
        https://bugs.webkit.org/show_bug.cgi?id=94871

        Reviewed by Benjamin Poulain.

        * wtf/PassRefPtr.h:
        We need to include Assertions.h due to the COMPILE_ASSERT added in r89283.
        This matches other files in WTF though I am not sure why Chromium is the only
        platform complaining about that.

2012-08-23  Mark Rowe  <mrowe@apple.com>

        Build fix for old, old versions of Clang.

        * wtf/FastMalloc.cpp:
        (WTF): Rejigger things so that they parse correctly if __has_warning isn't defined.

2012-08-23  Emil A Eklund  <eae@chromium.org>

        Add saturation arithmetic support to FractionalLayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=94364

        Reviewed by Benjamin Poulain.

        Add support functions for saturated addition and subtraction.

        Test: TestWebKitAPI/Tests/WTF/SaturatedArithmeticOperations.cpp

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * WTF/wtf/CMakeLists.txt:
        Add SaturatedArithmetic.h to build files.

        * wtf/SaturatedArithmetic.h: Added.
        (saturatedAddition):
        (saturatedSubtraction):
        Support functions for saturated addition/subtraction. Compares the signed
        bit of the values instead of using range checks to reduce branching.

        * wtf/Platform.h:
        Add ENABLE_SATURATED_LAYOUT_ARITHMETIC flag.

2012-08-23  Mark Rowe  <mrowe@apple.com>

        Roll back in the part of r126475 that I had rolled out.

        * wtf/FastMalloc.cpp:
        (WTF): Disable the -Wunused-private-field warning around the declaration of
        TCMalloc_Central_FreeListPadded since the padding is intentionally unused.
        Only disable the warning if we detect it is enabled, since the warning may not
        be supported by the version of Clang that is being used.

2012-08-23  Mark Rowe  <mrowe@apple.com>

        Roll out part of r126475 that breaks the build with older versions of Clang.

        * wtf/FastMalloc.cpp:

2012-08-23  Mark Rowe  <mrowe@apple.com>

        Make WTF build with the latest version of clang.

        Reviewed by Dan Bernstein.

        * wtf/FastMalloc.cpp:
        (WTF): Disable the -Wunused-private-field warning around the declaration of
        TCMalloc_Central_FreeListPadded since the padding is intentionally unused.
        (WTF::AdminRegionRecorder): Remove the unused m_reader member.
        (WTF::FastMallocZone::enumerate): Don't pass in the RemoteMemoryReader since
        it is no longer needed.

2012-08-22  Geoffrey Garen  <ggaren@apple.com>

        Fixed a fastMallocForbid/Allow compile error for some compilers
        https://bugs.webkit.org/show_bug.cgi?id=94775

        Reviewed by Gavin Barraclough.

        * wtf/FastMalloc.h:
        (WTF::fastMallocForbid()):
        (WTF::fastMallocAllow()): Export, since these are called by JavaScriptCore.

2012-08-22  Geoffrey Garen  <ggaren@apple.com>

        ThreadRestrictionVerifier should be opt-in, not opt-out
        https://bugs.webkit.org/show_bug.cgi?id=94761

        Reviewed by Mark Hahnenberg.

        WebKit's JavaScript engine supports use on multiple threads, so default-on
        is not appropriate for most of our objects, and it causes lots of suprious
        assertions.

        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocatorHandle::MetaAllocatorHandle): No need to turn off
        explicitly, since it's off by default now.

        * wtf/ThreadRestrictionVerifier.h:
        (WTF::ThreadRestrictionVerifier::ThreadRestrictionVerifier): Turn off by default.

        (WTF::ThreadRestrictionVerifier::setMutexMode):
        (WTF::ThreadRestrictionVerifier::setDispatchQueueMode):
        (WTF::ThreadRestrictionVerifier::turnOffVerification): These assertions
        about state transitions were inconsistent with each other, and impossible
        to maintain with default off, so I removed them.

2012-08-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        [Qt] Optionally support smooth-scrolling on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=74926

        Reviewed by Simon Hausmann.

        Initialize GESTURE_ANIMATION feature flag.

        * wtf/Platform.h:

2012-08-21  Mark Hahnenberg  <mhahnenberg@apple.com>

        WTF Threading leaks kernel objects on platforms that use pthreads
        https://bugs.webkit.org/show_bug.cgi?id=94636

        Reviewed by Geoffrey Garen.

        Creating lots of Web workers on Mac platforms leaks lots of Mach ports. Eventually, the 
        process can exhaust its allocation of Mach ports from the kernel, which can then cause 
        all sorts of badness, including the inability to allocate new virtual memory from the 
        kernel. ThreadingPthreads.cpp and ThreadIdentifierDataPthreads.cpp need to be refactored 
        so that we do not leak these kernel resources. I would assume that we also leak kernel 
        resources on other pthreads platforms as well.

        * wtf/ThreadIdentifierDataPthreads.cpp:
        (WTF):
        (WTF::ThreadIdentifierData::~ThreadIdentifierData): Now calls the event threadDidExit, which 
        handles all relevant tear-down of the thread metadata in the thread map.
        * wtf/ThreadingPthreads.cpp: Added a new class called PthreadState that encapsulates the 
        state of a thread and the possible transitions between those states.
        (PthreadState):
        (WTF::PthreadState::PthreadState):
        (WTF::PthreadState::joinableState): Returns the current state of the pthread.
        (WTF::PthreadState::pthreadHandle): Returns the pthread_t for this particular thread. This needs to 
        remain valid even after the thread has exited because somebody could come along at any time in the 
        future and call join on the thread.
        (WTF::PthreadState::didBecomeDetached): Signals that the thread was detached.
        (WTF::PthreadState::didExit): Signals that the thread's exit destructor (~ThreadIdentifierData) has run.
        (WTF::PthreadState::didJoin): Signals that the thread has been joined on successfully.
        (WTF::PthreadState::hasExited): Returns whether or not the thread's exit destructor has run.
        (WTF):
        (WTF::identifierByPthreadHandle): Changed to also check hasExited() on the threads it finds in the map. We 
        should only have one valid pthread_t in the map, but there are other pthread_t's that need to remain in the 
        thread map for when somebody joins on that thread id later.
        (WTF::establishIdentifierForPthreadHandle): Changed to put the allocate the new PthreadState data structure and 
        put it in the map.
        (WTF::pthreadHandleForIdentifierWithLockAlreadyHeld):
        (WTF::wtfThreadEntryPoint):
        (WTF::waitForThreadCompletion): We now do the relevant cleanup after the specified thread has been 
        successfully joined on depending on if the joined thread has already exited.
        (WTF::detachThread): Performs relevant cleanup if the thread has already exited. Otherwise signals to the 
        PthreadState that the thread has been detached.
        (WTF::threadDidExit): Function called by ~ThreadIdentifierData to indicate that the thread has exited. 
        Only cleans up after itself if the thread isn't Joinable (i.e. Joined or Detached).

2012-08-21  Ulan Degenbaev  <ulan@chromium.org>

        Call AdjustAmountOfExternalAllocatedMemory when V8ArrayBuffer constructed and destructed
        https://bugs.webkit.org/show_bug.cgi?id=92993

        Reviewed by Kenneth Russell.

        Call AdjustAmountOfExternalAllocatedMemory when V8ArrayBuffer
        is constructed and destructed so that V8's garbage collection
        heuristics can account for the memory held by these objects.

        * wtf/ArrayBuffer.h:
        (WTF):
        (ArrayBufferDeallocationObserver):
        (WTF::ArrayBufferContents::ArrayBufferContents):
        (WTF::ArrayBufferContents::transfer):
        (ArrayBufferContents):
        (ArrayBuffer):
        (WTF::ArrayBuffer::setDeallocationObserver):
        (WTF::ArrayBufferContents::~ArrayBufferContents):

2012-08-21  Benjamin Poulain  <bpoulain@apple.com>

        Store CString data in the CStringBuffer to avoid the double indirection
        https://bugs.webkit.org/show_bug.cgi?id=94562

        Reviewed by Darin Adler.

        Previously, any non-trivial CString would require two allocations:
        1) CStringBuffer (ref-counted container for CString's data).
        2) VectorBuffer's m_buffer (the actual char data).

        This patches changes CStringBuffer to hold the data previously owned by
        WTF::Vector and WTF::VectorBuffer. This makes CString more efficient
        both in CPU time and memory use.

        * wtf/text/CString.cpp:
        (WTF::CStringBuffer::createUninitialized): This new method allocate the memory
        for CStringBuffer and its data. We simply allocate more memory after CStringBuffer
        to hold the data.

        The extra memory needed to store the terminating zero is now handled by design.
        (WTF::CString::CString): Move the test for "str" one level up the stack from CString::init().
        This avoid double checking the pointer when using the other constructor.
        (WTF::CString::init):
        (WTF::CString::newUninitialized):
        (WTF::CString::copyBufferIfNeeded):
        * wtf/text/CString.h:
        (WTF::CStringBuffer::data):
        (WTF::CStringBuffer::length):
        (CStringBuffer):
        (WTF::CStringBuffer::CStringBuffer):
        (WTF::CStringBuffer::mutableData):
        (WTF::CString::length):

2012-08-21  Patrick Gansterer  <paroga@webkit.org>

        Build fix for COMPILER(MSVC) && !CPU(X86) after r126023.

        * wtf/MathExtras.h:
        (lrint):

2012-08-20  Dominik Röttsches  <dominik.rottsches@intel.com>

        The 2d.imageData.object.round canvas test is failing
        https://bugs.webkit.org/show_bug.cgi?id=40272

        Reviewed by Kenneth Rohde Christiansen.

        According to the Uint8ClampedArray spec (http://www.khronos.org/registry/typedarray/specs/latest/#7.1)
        which references WebIDL's clamping rules, with implications defined in http://www.w3.org/TR/WebIDL/#es-octet
        we need to round to nearest integer, and to the even one if exactly halfway in between.
        As a solution: applying C99's lrint which, in default rounding mode, does that.

        The updated version of test 2d.imageData.object.round.html test passes now.

        * wtf/MathExtras.h:
        (lrint): Assembly based implementation for MSVC under X86, otherwise falling back to casting.
        * wtf/Uint8ClampedArray.h:
        (WTF::Uint8ClampedArray::set): lrint instead of simple rounding.

2012-08-17  Michael Saboff  <msaboff@apple.com>

        Add ability to create AtomicString using LChar* buffer and length
        https://bugs.webkit.org/show_bug.cgi?id=94381

        Reviewed by Geoffrey Garen.

        Allows the use of 8 bit string data directly without converting to 16 bits first.

        * wtf/text/AtomicString.cpp:
        (WTF::LCharBufferTranslator::hash):
        (LCharBufferTranslator):
        (WTF::LCharBufferTranslator::equal):
        (WTF::LCharBufferTranslator::translate):
        (WTF::AtomicString::add):
        * wtf/text/AtomicString.h:
        (WTF::AtomicString::AtomicString):
        (AtomicString):
        * wtf/text/StringImpl.h:
        (StringImpl):

2012-08-17  Benjamin Poulain  <bpoulain@apple.com>

        Make it easier to append a literal to StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=94273

        Reviewed by Kentaro Hara.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::appendLiteral): Add the method StringBuilder::appendLiteral() for efficiently
        adding a string literal to the StringBuilder.

2012-08-17  Yong Li  <yoli@rim.com>

        [BlackBerry] Turn on a few macros for jpeg decoding and image interpolation
        https://bugs.webkit.org/show_bug.cgi?id=94244

        Reviewed by Antonio Gomes.

        Turn on these macros to get better performance.

        * wtf/Platform.h:

2012-08-17  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] QNX build fails due to ctype usage in system headers
        https://bugs.webkit.org/show_bug.cgi?id=93849

        Reviewed by Simon Hausmann.

        Move the check for whether DisallowCType should be active or not
        to the DisallowCType.h header. This way, we can update the list
        of platforms or OSes which do not work with this header in a
        central place. All users can now safely include the header
        and do not need to place custom guards around it.

        * config.h:
        * wtf/DisallowCType.h:

2012-08-17  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] QNX build fails due to missing timegm declaration
        https://bugs.webkit.org/show_bug.cgi?id=93842

        Reviewed by Simon Hausmann.

        On QNX, timegm is declared in nbutils.h and one must link against
        nbutils to use it.

        * WTF.pri:
        * wtf/DateMath.cpp:

2012-08-16  Kent Tamura  <tkent@chromium.org>

        Build fix for Chromium-mac.

        * wtf/text/WTFString.cpp: Remove unnecessary includes.

2012-08-16  Michael Saboff  <msaboff@apple.com>

        HTML Parser should produce 8bit substrings for inline style and script elements
        https://bugs.webkit.org/show_bug.cgi?id=93742

        Reviewed by Benjamin Poulain.

        Added 8 bit path to String::isAllSpecialCharacters(). Added new String creator
        that takes a pointer to a UChar array that is known to contain only 8 bit
        characters (LChar's). Added new helper method to copy contents of a
        UChar buffer to a LChar buffer. The helper method includes X86-64 intrinsics
        of SSE family instructions for performance.

        * wtf/Alignment.h:
        (WTF::isAlignedTo):
        * wtf/text/ASCIIFastPath.h:
        (WTF::copyLCharsFromUCharSource):
        * wtf/text/WTFString.cpp:
        (WTF::String::make8BitFrom16BitSource):
        * wtf/text/WTFString.h:
        (String):
        (WTF::isAllSpecialCharacters):
        (WTF::String::isAllSpecialCharacters):

2012-08-16  Benjamin Poulain  <bpoulain@apple.com>

        Use initialization from literals for StringStatics
        https://bugs.webkit.org/show_bug.cgi?id=94185

        Reviewed by Geoffrey Garen.

        * wtf/text/StringStatics.cpp:
        Remove the arguments for DEFINE_GLOBAL. They are no longer used by the macro.
        (WTF::AtomicString::init):
        Use ConstructFromLiteral to initialize the strings faster and to save memory.

2012-08-14  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] QNX build fails due to reference to MADV_FREE_REUSE and MADV_FREE_REUSABLE
        https://bugs.webkit.org/show_bug.cgi?id=93843

        Reviewed by Simon Hausmann.

        QNX does not implement MADV_FREE_REUSE nor MADV_FREE_REUSABLE.
        The Blackberry port already sets the define to use the system
        malloc, which is now also done for QNX in general.

        * wtf/Platform.h:

2012-08-13  Raphael Kubo da Costa  <rakuco@webkit.org>

        [CMake] Remove glib-related Find modules and write single new one instead.
        https://bugs.webkit.org/show_bug.cgi?id=93786

        Reviewed by Rob Buis.

        * wtf/PlatformEfl.cmake: Use GLIB_* instead of Glib_*, and link directly to GIO, as wtf/gobject uses functions from it.

2012-08-11  Sam Weinig  <sam@webkit.org>

        Enable XPC Service based WebProcess with runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=93773

        Reviewed by Dan Bernstein.

        * wtf/Platform.h:
        Define HAVE_XPC on 10.7 and later.

2012-08-11  Benjamin Poulain  <bpoulain@apple.com>

        Do the DecimalNumber to String conversion on 8 bits
        https://bugs.webkit.org/show_bug.cgi?id=93683

        Reviewed by Andreas Kling.

        Modify DecimalNumber to do the conversion to string on LChar instead of UChar.

        * wtf/DecimalNumber.cpp:
        (WTF::DecimalNumber::toStringDecimal):
        (WTF::DecimalNumber::toStringExponential):
        * wtf/DecimalNumber.h:
        (DecimalNumber):
        * wtf/dtoa.h:
        * wtf/text/StringBuffer.h:
        (WTF::StringBuffer::operator[]): StringBuffer::operator[] was incorrectly typed to UChar, making
        the method impossible to instanciate with LChar.
        * wtf/text/WTFString.h:
        (String):
        (WTF::String::adopt): String::adopt() is modified to work with both LChar and UChar. StringImpl
        already support that.
        (WTF::appendNumber): Add support for any type that can instanciate the template.

2012-08-11  Benjamin Poulain  <benjamin@webkit.org>

        WebCore::findAtomicString(PropertyName) always convert the name to 16bits
        https://bugs.webkit.org/show_bug.cgi?id=93685

        Reviewed by Geoffrey Garen.

        Previously, WebCore::findAtomicString() was causing a conversion for the 8bit property name
        to a 16bits due to the call to StringImpl::character16().

        This patch fixes the issue by adding support for both 8bits and 16bits string in AtomicString::find().

        * wtf/text/AtomicString.cpp:
        (HashAndCharacters):
        (WTF::HashAndCharactersTranslator::hash):
        (WTF::HashAndCharactersTranslator::equal):
        (WTF::HashAndCharactersTranslator::translate):
        Use a template to make the struct and the translator independant of the CharacterType.

        (WTF::AtomicString::add):
        (WTF::findString):
        (WTF::AtomicString::find): Change the API to take a StringImpl*. AtomicString can use
        it efficiently to find the right string.
        * wtf/text/AtomicString.h:
        (AtomicString):
        * wtf/text/StringImpl.h:
        (StringImpl): Adapt the friends translator to support the template.

2012-08-10  Benjamin Poulain  <bpoulain@apple.com>

        Add support for String initialization from literal to WTFString
        https://bugs.webkit.org/show_bug.cgi?id=93426

        Reviewed by Anders Carlsson.

        This patch adds two constructor to WTF::String in order to support fast initialization from literal:
        -String(ASCIILiteral): Constructor similar to String(const char*) while being faster. This constructor
         does not incur any overhead over String(const char*).
        -String(char[], ConstructFromLiteralTag): Template constructor that encode explicitely the size of the
         string.

        String(ASCIILiteral) is expected to be used in most cases to avoid regressions. This constructor was
        added because of what we have learned from r124922: inlining the string length in the code causes a code bloat
        that is not always welcome.

        Regarding performance of string initialization, the constructors performance are (6 characters string):
        -String(ASCIILiteral): 16% faster.
        -String(char[], ConstructFromLiteralTag): 33% faster (the delta increases with the string length).

        In addition, no memory is allocated for the characters.

        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::createFromLiteral): Extend StringImpl::createFromLiteral to have a version
        with strlen() which avoids loading one extra argument.
        * wtf/text/WTFString.cpp:
        (WTF::String::String):
        * wtf/text/WTFString.h:
        (WTF::String::String):
        (ASCIILiteral): This class is aimed at making the construction of WTFString from a literal very easy.
        By using the explicit constructor ASCIILiteral(char *), one can expect the implicit conversion to String
        when needed.
        (WTF::ASCIILiteral::ASCIILiteral):
        (WTF::ASCIILiteral::operator const char*):

2012-08-08  Benjamin Poulain  <bpoulain@apple.com>

        Use char* instead of LChar* for the public interface of String construction from literals
        https://bugs.webkit.org/show_bug.cgi?id=93402

        Reviewed by Michael Saboff.

        When the initialization from literal was added, some constructor/initialization function were
        using LChar for convenience.

        Since those function should only take ASCII characters, using LChar* could cause confusion. This
        patch intents to clarify this by using char* for all those APIs.

        * wtf/text/AtomicString.cpp:
        (WTF::CharBufferFromLiteralDataTranslator::hash):
        (WTF::CharBufferFromLiteralDataTranslator::equal):
        (WTF::CharBufferFromLiteralDataTranslator::translate):
        (WTF::AtomicString::addFromLiteralData):
        * wtf/text/AtomicString.h:
        (WTF::AtomicString::AtomicString):
        (AtomicString):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::createFromLiteral):
        * wtf/text/StringImpl.h:
        (StringImpl):
        (WTF::StringImpl::StringImpl):
        (WTF::StringImpl::createFromLiteral):

2012-08-08  Patrick Gansterer  <paroga@webkit.org>

        Remove ce_time.(cpp|h) from list of source files
        https://bugs.webkit.org/show_bug.cgi?id=93446

        Reviewed by Simon Hausmann.

        r125004 removed the last dependency on functions defined in ce_time.cpp.

        * wtf/PlatformWinCE.cmake:

2012-08-08  Alvaro Lopez Ortega  <alvaro@alobbs.com>

        Atomics.h has incorrect GCC test for ext/atomicity.h when using LSB compilers
        https://bugs.webkit.org/show_bug.cgi?id=51974

        Reviewed by Simon Hausmann.

        * wtf/Atomics.h: Inhibits the inclusion of the atomicity.h GNU C++
        extension when compiling with a LSB compliant compiler. Thanks to
        Craig Scott for the new precompiler check code.

2012-08-07  Yoshifumi Inoue  <yosin@chromium.org>

        [WTF] Add using WTF::msPerHour into DateMath.h
        https://bugs.webkit.org/show_bug.cgi?id=93428

        Reviewed by Kent Tamura.

        This patch adds "using WTF::msPerHour" into DateMath.h for some codes
        which will use it, e.g. bug 92960. Note: DateMath.h already has had
        using statements for msPerDay, msPerMinute and msPerSecond.

        * wtf/DateMath.h: Added "using WTF::msPerHour".

2012-08-07  Benjamin Poulain  <benjamin@webkit.org>

        Use the initialization from literal for JSC's Identifiers
        https://bugs.webkit.org/show_bug.cgi?id=93193

        Reviewed by Geoffrey Garen.

        * wtf/text/StringImpl.h: Update the names for the HashTranslator used by Identifier.

2012-07-19  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Remove Qt 4 specific code paths
        https://bugs.webkit.org/show_bug.cgi?id=88161

        Reviewed by Kenneth Rohde Christiansen.

        * WTF.pri:
        * WTF.pro:
        * wtf/qt/StringQt.cpp:
        (WTF::String::String):
        (WTF::String::operator QString):
        * wtf/qt/UtilsQt.h: Removed.
        * wtf/qt/compat/QGuiApplication: Removed.
        * wtf/qt/compat/qguiapplication.h: Removed.
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::~StringImpl):
        (WTF):
        * wtf/text/StringImpl.h:
        (StringImpl):

2012-08-06  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Remove dependency on pthread from MachineStackMarker
        https://bugs.webkit.org/show_bug.cgi?id=68429

        Reviewed by Geoffrey Garen.

        Windows has no support for calling a destructor for thread specific data.
        Since we need more control over creating and deleting thread specific keys
        we can not simply extend WTF::ThreadSpecific with this functionality.

        All thread specific keys created via the new API get stored in a list.
        After a thread function finished we iterate over this list and call
        the registered destructor for every item if needed.

        * wtf/ThreadSpecific.h:
        (WTF):
        (WTF::threadSpecificKeyCreate): Added wrapper around pthread_key_create.
        (WTF::threadSpecificKeyDelete): Added wrapper around pthread_key_delete.
        (WTF::threadSpecificSet): Added wrapper around pthread_setspecific.
        (WTF::threadSpecificGet): Added wrapper around pthread_getspecific.
        * wtf/ThreadSpecificWin.cpp:

2012-08-04  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] UI_SIDE_COMPOSITING code has confusing names
        https://bugs.webkit.org/show_bug.cgi?id=93164

        Reviewed by Kenneth Rohde Christiansen.

        Renamed UI_SIDE_COMPOSITING to COORDINATED_GRAPHICS.

        * wtf/Platform.h:

2012-08-03  Michael Saboff  <msaboff@apple.com>

        Convert HTML parser to handle 8-bit resources without converting to UChar*
        https://bugs.webkit.org/show_bug.cgi?id=90321

        Reviewed by Adam Barth.

        * wtf/text/WTFString.h:
        (WTF::String::dataSize): New method to return the number of bytes 
        the string requires.  This replaces a harcoded calculation based on
        length and sizeof(UChar).

2012-08-03  Benjamin Poulain  <benjamin@webkit.org>

        StringImpl created from literal should be BufferInternal
        https://bugs.webkit.org/show_bug.cgi?id=92940

        Reviewed by Anders Carlsson.

        The ownership of string created from literal should be BufferInternal so that
        StringImpl never tries to delete the characters.

        The ownership was accidentaly set to BufferOwned in r123689.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::createFromLiteral): Update to use the new constructor.
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::StringImpl):
        Add a new constructor making the construction from literal explicit.
        Add the flag s_hashFlagHasTerminatingNullCharacter since the data has the terminating
        null character.

2012-08-02  Patrick Gansterer  <paroga@webkit.org>

        Move getLocalTime() as static inline function to DateMath
        https://bugs.webkit.org/show_bug.cgi?id=92955

        Reviewed by Ryosuke Niwa.

        getCurrentLocalTime() and getLocalTime() has been superseded with the
        GregorianDateTime class. So we can move it into DateMath.cpp as an static inline
        function. This allows us to remove the dependecy on time() and localtime()
        for Windows CE, where this functions require the ce_time library to work.

        * wtf/CurrentTime.cpp:
        (WTF):
        * wtf/CurrentTime.h:
        * wtf/DateMath.cpp:
        (WTF):
        (WTF::getLocalTime):

2012-08-02  Patrick Gansterer  <paroga@webkit.org>

        [WINCE] Return 0 at calculateDSTOffset(double, double)
        https://bugs.webkit.org/show_bug.cgi?id=92953

        Reviewed by Ryosuke Niwa.

        localtime() is implemented as a call to gmtime() in ce_time.c.
        Since this will never return correct values, returning 0 instead
        does not remove any existing functionality, but decreases the
        dependency on the (external) ce_time implementation.

        * wtf/DateMath.cpp:
        (WTF::calculateDSTOffsetSimple):

2012-08-02  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        TypedArray set method is slow when called with another typed array
        https://bugs.webkit.org/show_bug.cgi?id=92556

        Reviewed by Kenneth Russell.

        Add an checkInboundData function to TypedArrayBase to check if a
        position will be not be out of bound or overflow from the typed array.

        * wtf/TypedArrayBase.h:
        (WTF::TypedArrayBase::checkInboundData):
        (TypedArrayBase):

2012-08-01  Patrick Gansterer  <paroga@webkit.org>

        Replace WTF::getCurrentLocalTime() with GregorianDateTime::setToCurrentLocalTime()
        https://bugs.webkit.org/show_bug.cgi?id=92286

        Reviewed by Geoffrey Garen.

        Add a method to GregorianDateTime to set its values to the current locale time.
        Replacing all occurrences of getCurrentLocalTime with the new function allows
        us to remove getCurrentLocalTime in a next step.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DateMath.cpp:
        (WTF::dayInYear):
        * wtf/DateMath.h:
        (WTF):
        * wtf/GregorianDateTime.cpp: Added.
        (WTF):
        (WTF::GregorianDateTime::setToCurrentLocalTime):
        * wtf/GregorianDateTime.h:
        (GregorianDateTime):

2012-08-01  Patrick Gansterer  <paroga@webkit.org>

        Fix FastMalloc build with assertions enabled.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::isScavengerSuspended):
        (WTF::TCMalloc_PageHeap::scheduleScavenger):
        (WTF::TCMalloc_PageHeap::suspendScavenger):

2012-08-01  Patrick Gansterer  <paroga@webkit.org>

        Export StringImpl::sizeInBytes() with WTF_EXPORT_STRING_API
        https://bugs.webkit.org/show_bug.cgi?id=92851

        Reviewed by Hajime Morita.

        r124069 missed to change one export macro, which is needed
        to make the windows port with USE(EXPORT_MACROS).

        * wtf/text/StringImpl.h:
        (StringImpl):

2012-08-01  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Add missing WTF export macros to functions
        https://bugs.webkit.org/show_bug.cgi?id=92842

        Reviewed by Hajime Morita.

        When we switch the windows port to USE(EXPORT_MACROS) we
        need to export all functions referenced by WebKit.dll.

        * wtf/ThreadingPrimitives.h:
        (WTF):
        * wtf/dtoa.h:
        (WTF):
        * wtf/dtoa/double-conversion.h:
        (StringToDoubleConverter):
        * wtf/unicode/UTF8.h:

2012-07-31  Sam Weinig  <sam@webkit.org>

        Stop masking 8 bits off of the visited link hash. We need all the bits!
        https://bugs.webkit.org/show_bug.cgi?id=92799

        Reviewed by Anders Carlsson.

        * wtf/StringHasher.h:
        (WTF::StringHasher::hashWithTop8BitsMasked):
        (WTF::StringHasher::hash):
        (StringHasher):
        (WTF::StringHasher::computeHashAndMaskTop8Bits):
        (WTF::StringHasher::hashMemory):
        (WTF::StringHasher::avalancheBits):
        Rename existing computeHash and hash functions to computeHashAndMaskTop8Bits
        and hashWithTop8BitsMasked respectively. Add new computeHash and hash functions
        that do the StringHash without the masking.

        * wtf/text/AtomicString.cpp:
        (WTF::CStringTranslator::hash):
        (WTF::UCharBufferTranslator::hash):
        (WTF::HashAndCharactersTranslator::hash):
        (WTF::SubstringTranslator::hash):
        (WTF::LCharBufferFromLiteralDataTranslator::hash):
        (WTF::AtomicString::fromUTF8Internal):
        * wtf/text/StringHash.h:
        (WTF::CaseFoldingHash::hash):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::setHash):
        * wtf/text/StringStatics.cpp:
        (WTF::StringImpl::hashSlowCase):
        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::calculateStringHashAndLengthFromUTF8MaskingTop8Bits):
        * wtf/unicode/UTF8.h:
        Update for new function names.

2012-07-31  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Add a mechanism to dump the stack trace in case of a crash
        https://bugs.webkit.org/show_bug.cgi?id=92666

        Reviewed by Csaba Osztrogonác.

        Unix based ports can make use of signal handlers to dump the stack
        trace in case of a crash. This is specially handy when a test crashes on
        the bot without hitting an assertion, we might have a chance to see
        some insightful information at the reports.

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

2012-07-31  Stephen Chenney  <schenney@chromium.org>

        xmlserializer strips xlink from xlink:html svg image tag
        https://bugs.webkit.org/show_bug.cgi?id=79586

        Reviewed by Nikolas Zimmermann.

        Add WTF::xlinkAtom as a global AtomicString constant.

        * wtf/text/AtomicString.h:
        (WTF): Add xlinkAtom.
        * wtf/text/StringStatics.cpp:
        (WTF): Add xlinkAtom.
        (WTF::AtomicString::init): Add xlinkAtom.

2012-07-30  Patrick Gansterer  <paroga@webkit.org>

        Add WTF_EXPORT_PRIVATE to deleteOwnedPtr()
        https://bugs.webkit.org/show_bug.cgi?id=92668

        Reviewed by Hajime Morita.

        When using export macros all non-inlined deleteOwnedPtr()
        functions need to be declared with WTF_EXPORT_PRIVATE.

        * wtf/OwnPtrCommon.h:
        (WTF):

2012-07-30  Wei James  <james.wei@intel.com>

        atomicDecrement() never reach 0 on Android so no deref() will be called
        https://bugs.webkit.org/show_bug.cgi?id=92635

        Reviewed by Adam Barth.

        With Android NDK 7b and later, __atomic_dec()  is implemented by
        __sync_fetch_and_sub(), which will result in that atomicDecrement()
        returns the old value instead of new one.

        * wtf/Atomics.h:
        (WTF):
        (WTF::atomicIncrement):
        (WTF::atomicDecrement):

2012-07-30  Patrick Gansterer  <paroga@webkit.org>

        Add function to calculate the day in year from a date
        https://bugs.webkit.org/show_bug.cgi?id=92671

        Reviewed by Ryosuke Niwa.

        Replace monthToDayInYear() with dayInYear() which takes a whole
        date for calculation and will be used for bug 92286 later.

        * wtf/DateMath.cpp:
        (WTF::dayInYear):
        (WTF::dateToDaysFrom1970):

2012-07-30  Patrick Gansterer  <paroga@webkit.org>

        Add special export macro for string related functions
        https://bugs.webkit.org/show_bug.cgi?id=92624

        Reviewed by Hajime Morita.

        The windows port compiles string related code into every binary for performance reasons (see r59187).
        Add the WTF_EXPORT_STRING_API define to allow this behaviour with export macros too.

        * wtf/ExportMacros.h:
        * wtf/text/AtomicString.h:
        (AtomicString):
        * wtf/text/StringImpl.h:
        (StringImpl):
        (WTF):
        * wtf/text/WTFString.h:
        (WTF):
        (String):

2012-07-30  Patrick Gansterer  <paroga@webkit.org>

        Replace UnicodeWinCE with UnicodeWchar
        https://bugs.webkit.org/show_bug.cgi?id=92539

        Reviewed by Ryosuke Niwa.

        UnicodeWinCE never contained WinCE specific code. UnicodeWchar
        is a replacement for it, which is mainly based on the functions
        from <wchar.h>. It is ment as a minimal Unicode backend, which
        can be used very easy and has no external dependencies.

        * WTF.gyp/WTF.gyp:
        * WTF.gypi:
        * wtf/Platform.h:
        * wtf/PlatformWinCE.cmake:
        * wtf/unicode/Unicode.h:
        * wtf/unicode/wchar/UnicodeWchar.cpp: Added.
        (Unicode):
        (WTF::Unicode::category):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::direction):
        (WTF::Unicode::decompositionType):
        (WTF::Unicode::hasLineBreakingPropertyComplexContext):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::convertWithFunction):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        * wtf/unicode/wchar/UnicodeWchar.h: Added.
        (Unicode):
        (WTF::Unicode::isAlphanumeric):
        (WTF::Unicode::isDigit):
        (WTF::Unicode::isLetter):
        (WTF::Unicode::isLower):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::isSpace):
        (WTF::Unicode::isUpper):
        (WTF::Unicode::isArabicChar):
        (WTF::Unicode::isSeparatorSpace):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::umemcasecmp):
        * wtf/unicode/wince/UnicodeWinCE.cpp: Removed.
        * wtf/unicode/wince/UnicodeWinCE.h: Removed.

2012-07-26  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: move StringImpl size calculation to StringImpl
        https://bugs.webkit.org/show_bug.cgi?id=92359

        Reviewed by Pavel Feldman.

        Moved stringSize(StringImpl*) implementation from InspectorMemoryAgent to
        StringImpl::sizeInBytes();

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::sizeInBytes):
        (WTF):
        * wtf/text/StringImpl.h:
        (StringImpl):

2012-07-28  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Add missing export macro to friend decleration.

        Since the __declspec is part of the function signature
        on windows, we need it at all friend declerations too.

        * wtf/MediaTime.h:

2012-07-28  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Add missing MediaTime files after r123878.

        * wtf/CMakeLists.txt:

2012-07-28  Patrick Gansterer  <paroga@webkit.org>

        Remove obsolete functions from WTF::Unicode
        https://bugs.webkit.org/show_bug.cgi?id=92571

        Reviewed by Kentaro Hara.

        Remove hasLineBreakingPropertyComplexContextOrIdeographic() and digitValue(),
        since they are never used and defined for a few Unicode backends only.

        * wtf/unicode/glib/UnicodeGLib.h:
        * wtf/unicode/icu/UnicodeIcu.h:

2012-07-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r123679.
        http://trac.webkit.org/changeset/123679
        https://bugs.webkit.org/show_bug.cgi?id=92565

        Slowed down HTML parsing by 3.6% (Requested by abarth on
        #webkit).

        * wtf/text/WTFString.h:

2012-07-27  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        use createUninitialized when creating TypedArray from another array
        https://bugs.webkit.org/show_bug.cgi?id=92518

        Reviewed by Kenneth Russell.

        Expose a createUninitialized static method on TypedArray classes.

        * wtf/Float32Array.h:
        (Float32Array):
        (WTF::Float32Array::createUninitialized):
        (WTF):
        * wtf/Float64Array.h:
        (Float64Array):
        (WTF::Float64Array::createUninitialized):
        (WTF):
        * wtf/Int16Array.h:
        (Int16Array):
        (WTF::Int16Array::createUninitialized):
        (WTF):
        * wtf/Int32Array.h:
        (Int32Array):
        (WTF::Int32Array::createUninitialized):
        (WTF):
        * wtf/Int8Array.h:
        (Int8Array):
        (WTF::Int8Array::createUninitialized):
        (WTF):
        * wtf/Uint16Array.h:
        (Uint16Array):
        (WTF::Uint16Array::createUninitialized):
        (WTF):
        * wtf/Uint32Array.h:
        (Uint32Array):
        (WTF::Uint32Array::createUninitialized):
        (WTF):
        * wtf/Uint8Array.h:
        (Uint8Array):
        (WTF::Uint8Array::createUninitialized):
        (WTF):
        * wtf/Uint8ClampedArray.h:
        (Uint8ClampedArray):

2012-07-27  Patrick Gansterer  <paroga@webkit.org>

        [WINCE] Use macros from ICU instead of defining the same functionality again
        https://bugs.webkit.org/show_bug.cgi?id=92530

        Reviewed by Ryosuke Niwa.

        Replace isHighSurrogate() with U16_IS_LEAD(), isLowSurrogate() with
        U16_IS_TRAIL() and surrogateToUcs4() with U16_GET_SUPPLEMENTARY().

        * wtf/unicode/wince/UnicodeWinCE.h:

2012-07-27  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Fix build after r123917
        https://bugs.webkit.org/show_bug.cgi?id=92555

        Unreviewed.

        * wtf/GregorianDateTime.h: Needs string.h for memset().

2012-07-27  Paweł Forysiuk  <tuxator@o2.pl>

        MinGW build fails because of missing header in GregorianDateTime.h
        https://bugs.webkit.org/show_bug.cgi?id=92531

        * wtf/GregorianDateTime.h: Include time.h

2012-07-27  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix.

        Use MathExtras.h and the non std:: versions of isnan and signbit.

        * wtf/MediaTime.cpp:
        (WTF::MediaTime::createWithFloat):
        (WTF::MediaTime::createWithDouble):

2012-07-27  Jer Noble  <jer.noble@apple.com>

        Support a rational time class for use by media elements.
        https://bugs.webkit.org/show_bug.cgi?id=88787

        Reviewed by Eric Carlson.

        Add a new MediaTime class which implements rational math operations.

        Add common constructors and assignment operators:
        * wtf/MediaTime.cpp: Added.
        (WTF::MediaTime::MediaTime):
        (WTF::MediaTime::~MediaTime):
        (WTF::MediaTime::operator=):

        Add common math operators:
        * wtf/MediaTime.cpp:
        (WTF::MediaTime::operator+):
        (WTF::MediaTime::operator-):
        (WTF::MediaTime::operator<):
        (WTF::MediaTime::operator>):
        (WTF::MediaTime::operator==):
        (WTF::MediaTime::operator>=):
        (WTF::MediaTime::operator<=):

        Add functions to check the MeiaTime time type flags:
        * wtf/MediaTime.h:
        (WTF::MediaTime::isValid):
        (WTF::MediaTime::isInvalid):
        (WTF::MediaTime::hasBeenRounde):
        (WTF::MediaTime::isPositiveInfinite):
        (WTF::MediaTime::isNegativeInfinite):
        (WTF::MediaTime::isIndefinite):

        Add constants for commonly used MediaTime values:
        (WTF::MediaTime::zeroTime):
        (WTF::MediaTime::invalidTime):
        (WTF::MediaTime::positiveInfiniteTime):
        (WTF::MediaTime::negativeInfiniteTime):
        (WTF::MediaTime::indefiniteTime):

        Add explicit conversion functions to convert to and from floating point values.
        * wtf/MediaTime.cpp:
        (WTF::MediaTime::createWithFloat):
        (WTF::MediaTime::createWithDouble):
        (WTF::MediaTime::toFloat):
        (WTF::MediaTime::toDouble):

        Add some useful exported functions:
        * wtf/MediaTime.cpp:
        (WTF::MediaTime::compare): Master function for the comparison operators above.
        (WTF::MediaTime::setTimeScale): Rescale the time value to a new time scale.
        (WTF::abs): Return an absolute value for the current MediaTime.

        Static utility functions to implement the above:
        * wtf/MediaTime.cpp:
        (WTF::greatestCommonDivisor):
        (WTF::leastCommonMultiple):
        (WTF::signum):

        Windows-only implementations of isinf and signbit:
        * wtf/MediaTime.cpp:
        (std::isinf):
        (std::signbit):

        Add the new class to platform build files:
        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:

2012-07-27  Wei James  <james.wei@intel.com>

        set WTF_USE_LOCKFREE_THREADSAFEREFCOUNTED for chromium android
        https://bugs.webkit.org/show_bug.cgi?id=91746

        Reviewed by Adam Barth.

        This patch is part of efforts to enable web audio for chromium android.
        Web audio component needs to use atomicIncrement and atomicDecrement,
        which are enabled by this MACRO.

        As mentioned in https://bugs.webkit.org/show_bug.cgi?id=89428#c19, make
        this patch standalone.

        * wtf/Atomics.h:
        (WTF):

2012-07-27  Wei James  <james.wei@intel.com>

        set WTF_USE_LOCKFREE_THREADSAFEREFCOUNTED for chromium android
        https://bugs.webkit.org/show_bug.cgi?id=91746

        Reviewed by Adam Barth.

        This patch is part of efforts to enable web audio for chromium android.
        Web audio component needs to use atomicIncrement and atomicDecrement,
        which are enabled by this MACRO.

        As mentioned in https://bugs.webkit.org/show_bug.cgi?id=89428#c19, make
        this patch standalone.

        * wtf/Atomics.h:
        (WTF):

2012-07-26  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        constructing TypedArray from another TypedArray is slow
        https://bugs.webkit.org/show_bug.cgi?id=90838

        Reviewed by Kenneth Russell.

        Introduce virtual method getType on ArrayBufferView. It returns the actual
        type of the view. This method replaces previous is<Type>Array() methods.

        * wtf/ArrayBufferView.h:
        * wtf/Float32Array.h:
        (WTF::Float32Array::getType):
        (Float32Array):
        * wtf/Float64Array.h:
        (WTF::Float64Array::getType):
        (Float64Array):
        * wtf/Int16Array.h:
        (WTF::Int16Array::getType):
        (Int16Array):
        * wtf/Int32Array.h:
        (WTF::Int32Array::getType):
        (Int32Array):
        * wtf/Int8Array.h:
        (WTF::Int8Array::getType):
        (Int8Array):
        * wtf/IntegralTypedArrayBase.h:
        * wtf/TypedArrayBase.h:
        (TypedArrayBase):
        (WTF::TypedArrayBase::item):
        * wtf/Uint16Array.h:
        (WTF::Uint16Array::getType):
        (Uint16Array):
        * wtf/Uint32Array.h:
        (WTF::Uint32Array::getType):
        (Uint32Array):
        * wtf/Uint8Array.h:
        (WTF::Uint8Array::getType):
        (Uint8Array):
        * wtf/Uint8ClampedArray.h:
        (WTF::Uint8ClampedArray::getType):
        (Uint8ClampedArray):

2012-07-26  Zeno Albisser  <zeno@webkit.org>

        [Qt] requestAnimationFrame should only trigger when a new frame can be displayed.
        https://bugs.webkit.org/show_bug.cgi?id=88638

        Disable REQUEST_ANIMATION_FRAME_TIMER for the Qt port and tie
        the servicing of scripted animations to layer syncing for WK2.
        For WK1 we rely on the RefreshAnimation that is based on QAbstractAnimation.

        Reviewed by Jocelyn Turcotte.

        * wtf/Platform.h:

2012-07-26  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Revert r123740 as it breaks AppleMac compilation.

        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:

2012-07-26  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: move StringImpl size calculation to StringImpl
        https://bugs.webkit.org/show_bug.cgi?id=92359

        Reviewed by Pavel Feldman.

        Moved stringSize(StringImpl*) implementation from InspectorMemoryAgent to
        StringImpl::sizeInBytes();

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::sizeInBytes):
        (WTF):
        * wtf/text/StringImpl.h:
        (StringImpl):

2012-07-25  Benjamin Poulain  <bpoulain@apple.com>

        Initialize QualifiedName's strings from the read only data segment
        https://bugs.webkit.org/show_bug.cgi?id=92226

        Reviewed by Anders Carlsson.

        Add constructors for StringImpl and AtomicString to be able to create
        the strings from the literal in read only memory.

        * wtf/text/AtomicString.cpp:
        (HashTranslatorCharBuffer):
        (WTF::LCharBufferFromLiteralDataTranslator::hash):
        (LCharBufferFromLiteralDataTranslator):
        (WTF::LCharBufferFromLiteralDataTranslator::equal):
        (WTF::LCharBufferFromLiteralDataTranslator::translate):
        (WTF::AtomicString::addFromLiteralData):
        * wtf/text/AtomicString.h:
        (WTF::AtomicString::AtomicString):
        (AtomicString):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::createFromLiteral):
        * wtf/text/StringImpl.h:
        (WTF):
        (StringImpl):
        (WTF::StringImpl::createFromLiteral):

2012-07-25  Michael Saboff  <msaboff@apple.com>

        Convert HTML parser to handle 8-bit resources without converting to UChar*
        https://bugs.webkit.org/show_bug.cgi?id=90321

        Reviewed by Geoffrey Garen.

        * wtf/text/WTFString.h:
        (WTF::String::dataSize): New method to return the number of bytes 
        the string requires.  This replaces a harcoded calculation based on
        length and sizeof(UChar).

2012-07-25  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Create a specialized pair for use in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=92137

        Reviewed by Ryosuke Niwa.

        The type used for internal storage in HashMap is exposed in its interface as iterator
        "contents". Currently HashMap uses std::pair<>, which this patch replaces with
        KeyValuePair.

        Having this specialized structure will allow us to customize the members to be called
        key/value, improving readability in code using HashMap iterators. They are still called
        first/second to separate this change from the mechanical change of updating callsites.

        * wtf/HashIterators.h:
        (HashTableConstKeysIterator):
        (HashTableConstValuesIterator):
        (HashTableKeysIterator):
        (HashTableValuesIterator):
        Use KeyValuePair instead of std::pair when defining the iterators.

        * wtf/HashMap.h:
        (WTF):
        (WTF::KeyValuePairKeyExtractor::extract):
        (HashMap):
        Remove PairFirstExtractor. Add and use the KeyValuePair corresponding extractor.

        (WTF::HashMapValueTraits::isEmptyValue): Use KeyValuePairHashTraits for HashMaps.
        (WTF::HashMapTranslator::translate):
        (WTF::HashMapTranslatorAdapter::translate):
        The traits of the mapped value is now called ValueTraits instead of SecondTraits.

        * wtf/HashTable.h:
        (WTF::hashTableSwap): Add specialization for swapping KeyValuePairs.
        (WTF): Remove now unneeded specialization for std::pairs.

        * wtf/HashTraits.h:
        (KeyValuePair):
        (WTF::KeyValuePair::KeyValuePair):
        (WTF):
        Specialized pair. In the future difference from pair should be the member names.

        (KeyValuePairHashTraits):
        (WTF::KeyValuePairHashTraits::emptyValue):
        (WTF::KeyValuePairHashTraits::constructDeletedValue):
        (WTF::KeyValuePairHashTraits::isDeletedValue):
        These traits are analogous to PairHashTraits but for KeyValuePair.

        * wtf/RefPtrHashMap.h: Use KeyValuePairHashTraits.

2012-07-25  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r123560.
        http://trac.webkit.org/changeset/123560
        https://bugs.webkit.org/show_bug.cgi?id=90321

        Breaks chromium valgrind tests.

        * wtf/text/WTFString.h:

2012-07-25  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] There are parallel GC related crashes regularly
        https://bugs.webkit.org/show_bug.cgi?id=90957

        Rubber-stamped by Zoltan Herczeg.

        * wtf/Platform.h: Disable parallel GC temporarily on Qt until proper fix.

2012-07-24  Benjamin Poulain  <bpoulain@apple.com> && Joseph Pecoraro  <pecoraro@apple.com>

        QualifiedName's HashSet should be big enough to hold at least all the static names
        https://bugs.webkit.org/show_bug.cgi?id=91891

        Reviewed by Darin Adler.

        Add a static struct to compute the HashTable capacity for any given size at compile time.
        This allow us to create HashTraits giving the minimumSize without hardcoding the values.

        * wtf/HashTable.h:
        (OneifyLowBits):
        (UpperPowerOfTwoBound):
        (HashTableCapacityForSize): Compute the HashTable capacity at compile time.

2012-07-24  Michael Saboff  <msaboff@apple.com>

        Convert HTML parser to handle 8-bit resources without converting to UChar*
        https://bugs.webkit.org/show_bug.cgi?id=90321

        Reviewed by Geoffrey Garen.

        * wtf/text/WTFString.h:
        (WTF::String::dataSize): New method to return the number of bytes 
        the string requires.  This replaces a harcoded calculation based on
        length and sizeof(UChar).

2012-07-24  Sam Weinig  <sam@webkit.org>

        Add per-HashTable stats
        https://bugs.webkit.org/show_bug.cgi?id=92185

        Reviewed by Anders Carlsson.

        Add per-HashTable stats, so we can look at the effectiveness of an individual HashTable.

        * wtf/HashTable.h:
        (WTF::HashTable::Stats::Stats):
        Add a HashTable::Stats to hold the stats.

        (WTF::HashTable::Stats::recordCollisionAtCount):
        (WTF::HashTable::Stats::dumpStats):
        Add versions of recordCollisionAtCount and dumpStats for per-HashTable version.

        (WTF::HashTable):
        Keep the stats, if enabled, in an OwnPtr, to not blow JSCell max size restrictions.

        (WTF::lookup):
        (WTF::lookupForWriting):
        (WTF::fullLookupForWriting):
        (WTF::add):
        (WTF::reinsert):
        (WTF::remove):
        (WTF::rehash):
        Keep track of the stats as the table is used.

2012-07-24  Patrick Gansterer  <paroga@webkit.org>

        Store the full year in GregorianDateTime
        https://bugs.webkit.org/show_bug.cgi?id=92067

        Reviewed by Geoffrey Garen.

        Use the full year instead of the offset from year 1900 
        for the year member variable of GregorianDateTime.

        * wtf/GregorianDateTime.h:
        (WTF::GregorianDateTime::operator tm):

2012-07-23  Patrick Gansterer  <paroga@webkit.org>

        Move GregorianDateTime from JSC to WTF namespace
        https://bugs.webkit.org/show_bug.cgi?id=91948

        Reviewed by Geoffrey Garen.

        Moving GregorianDateTime into the WTF namespace allows us to us to
        use it in WebCore too. The new class has the same behaviour as the
        old struct. Only the unused timeZone member has been removed.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/GregorianDateTime.h: Added.
        (GregorianDateTime):

2012-07-23  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Merge createThreadInternal implementations
        https://bugs.webkit.org/show_bug.cgi?id=91899

        Reviewed by Yong Li.

        PR 111675

        Remove our implementation since the default thread stack size on QNX is fine.

        * wtf/ThreadingPthreads.cpp:
        (WTF::createThreadInternal):
        (WTF::initializeCurrentThreadInternal): make sure we set the thread name.

2012-07-23  Patrick Gansterer  <paroga@webkit.org>

        [WINCE] Define NOMINMAX in the build system instead of Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=91938

        Reviewed by Ryosuke Niwa.

        * wtf/Platform.h:

2012-07-23  Patrick Gansterer  <paroga@webkit.org>

        Build fix for Windows after r123317.

        * wtf/DateMath.cpp: Added missing header include.

2012-07-23  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Use GetTimeZoneInformation() for calculateUTCOffset()
        https://bugs.webkit.org/show_bug.cgi?id=91935

        Reviewed by Ryosuke Niwa.

        GetTimeZoneInformation() returns the offset directly. Using it
        avoids unnecessary calculations and remove dependencies on
        other time related function, which do not exist on WinCE.

        * wtf/DateMath.cpp:
        (WTF::calculateUTCOffset):

2012-07-20  Han Shen  <shenhan@google.com>

        [Chromium] Compilation fails under gcc 4.7
        https://bugs.webkit.org/show_bug.cgi?id=90227

        Reviewed by Tony Chang.

        Disable warnings about c++0x compatibility in gcc newer than 4.6.

        * WTF.gyp/WTF.gyp:

2012-07-19  Dan Bernstein  <mitz@apple.com>

        The ATSUI-based complex text code is unused
        https://bugs.webkit.org/show_bug.cgi?id=91816

        Reviewed by Sam Weinig.

        Removed definitions of WTF_USE_ATSUI and WTF_USE_CORE_TEXT.

        * wtf/Platform.h:

2012-07-19  Wei James  <james.wei@intel.com>

        enable Web Audio for chromium android port
        https://bugs.webkit.org/show_bug.cgi?id=89428

        Reviewed by Kenneth Russell.

        * wtf/MathExtras.h:
        (log2):
        (log2f):

2012-07-19  Scott Graham  <scottmg@chromium.org>

        [Chromium] disable warning on Windows from gcc-only pragma in Assertions.cpp"
        https://bugs.webkit.org/show_bug.cgi?id=91776

        Reviewed by Ryosuke Niwa.

        Avoids:
            ...\source\wtf\wtf\assertions.cpp(31) : warning C4068: unknown pragma

        * WTF.gyp/WTF.gyp:

2012-07-19  Robert Sesek  <rsesek@chromium.org>

        [chromium][Mac] Switch the MACOSX_DEPLOYMENT_TARGET to 10.6
        https://bugs.webkit.org/show_bug.cgi?id=91752

        Reviewed by Eric Seidel.

        When building CHROMIUM && DARWIN, do not enable ATSUI support.

        * wtf/Platform.h:

2012-07-18  Yong Li  <yoli@rim.com>

        [BlackBerry] Implement currentTime() and monotonicallyIncreasingTime() for OS(QNX)
        https://bugs.webkit.org/show_bug.cgi?id=91659

        Reviewed by Rob Buis.

        Implement currentTime() and monotonicallyIncreasingTime() for OS(QNX) with clock_gettime().

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

2012-07-18  Tom Sepez  <tsepez@chromium.org>

        OOB read of stack buffer below DoubleToStringConverter::CreateExponentialRepresentation() in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=91642

        Reviewed by Abhishek Arya.

        * wtf/dtoa/double-conversion.cc:
        (DoubleToStringConverter::CreateExponentialRepresentation): NUL-terminate string buffer before passing it to StringBuilder::AddSubstring()
        
2012-07-18  Michael Saboff  <msaboff@apple.com>

        Make TextCodecLatin1 handle 8 bit data without converting to UChar's
        https://bugs.webkit.org/show_bug.cgi?id=90319

        Reviewed by Oliver Hunt.

        * wtf/text/StringImpl.h:
        (StringImpl): Exported LChar variant of adopt().
        * wtf/text/WTFString.h:
        (WTF::String::createUninitialized): Exported LChar variant.

2012-07-18  Rob Buis  <rbuis@rim.com>

        Alignment crash in MIMESniffer
        https://bugs.webkit.org/show_bug.cgi?id=89787

        Reviewed by Yong Li.

        PR 169064

        Change isPointerTypeAlignmentOkay so calling it does not require ifdefs.

        * wtf/StdLibExtras.h:
        (isPointerTypeAlignmentOkay):

2012-07-17  Gabor Ballabas  <gaborb@inf.u-szeged.hu>

        [Qt][V8] Remove the V8 related codepaths and configuration
        https://bugs.webkit.org/show_bug.cgi?id=90863

        Reviewed by Simon Hausmann.

        * WTF.pri:

2012-07-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122834.
        http://trac.webkit.org/changeset/122834
        https://bugs.webkit.org/show_bug.cgi?id=91492

        it broke the chromium (Requested by kkristof on #webkit).

        * WTF.pri:

2012-07-17  Gabor Ballabas  <gaborb@inf.u-szeged.hu>

        [Qt][V8] Remove the V8 related codepaths and configuration
        https://bugs.webkit.org/show_bug.cgi?id=90863

        Reviewed by Simon Hausmann.

        * WTF.pri:

2012-07-16  Hajime Morrita  <morrita@chromium.org>

        WebCore needs WEBCORE_TESTING macro to mark methods being exported for testing.
        https://bugs.webkit.org/show_bug.cgi?id=90764

        Reviewed by Adam Barth.

        Added USE(EXPORT_MACROS_FOR_TESTING) and enabled it on GTK and Windows.

        * wtf/ExportMacros.h:
        * wtf/Platform.h:

2012-07-16  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):

2012-07-16  Adam Treat  <atreat@rim.com>

        [BlackBerry] Use newer version of platform API to implement callOnMainThread
        https://bugs.webkit.org/show_bug.cgi?id=91404

        Reviewed by Yong Li.

        Right now we're using an outdated API that involves a virtual function call for no reason.
        Use the new API that is much more direct and to the point.

        * wtf/blackberry/MainThreadBlackBerry.cpp:
        (WTF::scheduleDispatchFunctionsOnMainThread):

2012-07-14  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, build fix.

        * wtf/Assertions.cpp:
        * wtf/Platform.h:
        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::Collator::userDefault):

2012-07-13  Xianzhu Wang  <wangxianzhu@chromium.org>

        Move WebCore/platform/text/Base64 to WTF/wtf/text
        https://bugs.webkit.org/show_bug.cgi?id=91162

        Reviewed by Adam Barth.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/Base64.cpp: Renamed from Source/WebCore/platform/text/Base64.cpp.
        (WTF):
        (WTF::base64Encode):
        (WTF::base64Decode):
        (WTF::base64DecodeInternal):
        * wtf/text/Base64.h: Renamed from Source/WebCore/platform/text/Base64.h.
        (WTF):
        (WTF::base64Encode):

2012-07-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to get HTTPS status to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=91100

        Reviewed by Martin Robinson.

        Add support for GByteArray.

        * wtf/gobject/GRefPtr.cpp:
        (WTF::refGPtr):
        (WTF):
        (WTF::derefGPtr):
        * wtf/gobject/GRefPtr.h:
        (WTF):
        * wtf/gobject/GTypedefs.h:

2012-07-12  Maciej Stachowiak  <mjs@apple.com>

        Document ListHashSet iteration guarantees
        https://bugs.webkit.org/show_bug.cgi?id=91106

        Reviewed by Eric Seidel.

        * wtf/ListHashSet.h:
        (WTF): Expand class comment to document this.

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91024> Build against the latest SDK when targeting older OS X versions.

        Reviewed by Dan Bernstein.

        The deployment target is already set to the version that we're targeting, and it's that setting
        which determines which functionality from the SDK is available to us.

        * Configurations/Base.xcconfig:

2012-07-11  Mark Rowe  <mrowe@apple.com>

        Replace definitions of BUILDING_ON / TARGETING macros with macros that will error when used.

        Part of <http://webkit.org/b/91015> Remove BUILDING_ON / TARGETING macros in favor of system availability macros.

        Reviewed by Anders Carlsson.

        * wtf/Platform.h:

2012-07-11  Mark Rowe  <mrowe@apple.com>

        Switch a few cases that care about the SDK over to checking __MAC_OS_X_VERSION_MAX_ALLOWED so that things build.

        Part of <http://webkit.org/b/91015> Remove BUILDING_ON / TARGETING macros in favor of system availability macros

        Reviewed by Filip Pizlo.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary): The SDK we're building against determines how many elements
        the structure is declared as having.

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91015> Remove BUILDING_ON / TARGETING macros in favor of system availability macros

        This removal was handled by a script that translates the relevant macros in to the equivalent checks
        using the system availability macros.

        Reviewed by Filip Pizlo.

        * wtf/Assertions.cpp:
        * wtf/FastMalloc.cpp:
        * wtf/Platform.h:
        * wtf/ThreadingPthreads.cpp:
        * wtf/unicode/icu/CollatorICU.cpp:

2012-07-11  Anders Carlsson  <andersca@apple.com>

        Add -Wtautological-compare and -Wsign-compare warning flags
        https://bugs.webkit.org/show_bug.cgi?id=90994

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig:

2012-07-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Re-enable __declspec(dl{import,export}) for MinGW when using EXPORT_MACROS
        https://bugs.webkit.org/show_bug.cgi?id=90612

        Reviewed by Csaba Osztrogonác.

        MinGW was switched to use auto import/export of symbols on r44184.
        From my understanding of the documentation, MinGW will not auto-export symbols
        unless there are no explicit __declspec(dlexport) in the DLL already.

        The issues that originally made us rely on the auto-import feature of MinGW
        should now be resolved with the EXPORT_MACROS work. This patch re-enables them.

        It also removes the GCC check for internal symbols hiding as the visibility should
        already be hidden by default for both MSVC and GCC on Windows anyway.

        * wtf/ExportMacros.h:

2012-07-09  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Shared code that is guarded with ENABLE(WEBGL) should be guarded with USE()
        https://bugs.webkit.org/show_bug.cgi?id=90506

        Reviewed by Martin Robinson.

        Made USE(3D_GRAPHICS) default to true when ENABLE(WEBGL) is true.
        Also updated the Qt default to always use TEXTURE_MAPPER, and to use TEXTURE_MAPPER_GL when
        3D_GRAPHICS is used.

        * wtf/Platform.h:

2012-07-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Introduce a build flag for low quality JPEG images
        https://bugs.webkit.org/show_bug.cgi?id=90748

        Reviewed by Adam Barth.

        Turn on the newly introduced flags for android.

        * wtf/Platform.h:

2012-07-05  Filip Pizlo  <fpizlo@apple.com>

        INLINE_ARM_FUNCTION(thingy) should make thingy be thumb2 if we're using thumb2
        https://bugs.webkit.org/show_bug.cgi?id=90644

        Reviewed by Mark Hahnenberg.
        
        Fix breakage introduced in http://trac.webkit.org/changeset/121885

        * wtf/InlineASM.h:

2012-07-05  Zoltan Herczeg  <zherczeg@webkit.org>

        Port DFG JIT to traditional ARM
        https://bugs.webkit.org/show_bug.cgi?id=90198

        Reviewed by Filip Pizlo.

        Enabling DFG JIT on ARM systems with 32 bit instruction set.

        * wtf/InlineASM.h:
        * wtf/Platform.h:

2012-07-04  Andy Wingo  <wingo@igalia.com>

        [GTK] Enable parallel GC
        https://bugs.webkit.org/show_bug.cgi?id=90568

        Reviewed by Martin Robinson.

        * wtf/Platform.h: Add GTK to the ENABLE_PARALLEL_GC party.

2012-07-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Get rid of un-needed QT += declarative for Qt 5

        The declarative module has been renamed to quick1 in Qt 5, and the
        engine-only module for Qt 5 is named 'qml'. For many of the instances
        we could just remove 'declarative', since the project file was only
        used for Qt5/WebKit2 builds. In the other cases the module was wrapped
        in a haveQt(4) scope.

        Reviewed by Csaba Osztrogonác.

        * WTF.pri:

2012-07-03  Yong Li  <yoli@rim.com>

        [BlackBerry] Turn on DFGJIT in Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=90482

        Set ENABLE_DFG_JIT for PLATFORM(BLACKBERRY).

        Reviewed by Rob Buis.

        * wtf/Platform.h:

2012-07-03  Tony Chang  <tony@chromium.org>

        [chromium] Unreviewed, update .gitignore to handle VS2010 files.

        * WTF.gyp/.gitignore:

2012-07-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make use of .qmake.cache for caching features

        Instead of loading() features from the files that need them (and re-running
        a bunch of checks), we now run feature detection as part of configure.pro,
        and have build-webkit write the computed feature-defines and CONFIG to
        .qmake.cache, which is then loaded by qmake _before_ even defaults_pre
        when building WebKit.pro.

        At some point we'll be able to selectivly prevent running of config tests
        in configure.pro, which means we don't need a separate code-path for
        the build-webkit --help case.

        We should also move the code in build-webkit that now uses .webkit.config
        to detect clean builds, to use .qmake.cache, since we now store the same
        thing there.

        Original patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com>

        Reviewed by Tor Arne Vestbø.

        * WTF.pri:

2012-07-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121766.
        http://trac.webkit.org/changeset/121766
        https://bugs.webkit.org/show_bug.cgi?id=90465

        It caused flakey build errors on the bots (Requested by Ossy
        on #webkit).

        * WTF.pri:

2012-07-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make use of .qmake.cache for caching features

        Instead of loading() features from the files that need them (and re-running
        a bunch of checks), we now run feature detection as part of configure.pro,
        and have build-webkit write the computed feature-defines and CONFIG to
        .qmake.cache, which is then loaded by qmake _before_ even defaults_pre
        when building WebKit.pro.

        At some point we'll be able to selectivly prevent running of config tests
        in configure.pro, which means we don't need a separate code-path for
        the build-webkit --help case.

        We should also move the code in build-webkit that now uses .webkit.config
        to detect clean builds, to use .qmake.cache, since we now store the same
        thing there.

        Original patch by Oswald Buddenhagen <oswald.buddenhagen@nokia.com>

        Reviewed by Tor Arne Vestbø.

        * WTF.pri:

2012-07-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>  Joel Dillon <joel.dillon@codethink.co.uk>

        [Qt][Win] Fix broken QtWebKit5.lib linking
        https://bugs.webkit.org/show_bug.cgi?id=88321

        Reviewed by Kenneth Rohde Christiansen.

        Instead of letting a module's headers know which other modules depend on them,
        have depending modules define explicitely that they want its symbols exported too.

        JavaScriptCore should then be compiled with both BUILDING_JavaScriptCore and
        STATICALLY_LINKED_WITH_WTF.

        * wtf/ExportMacros.h:

2012-06-29  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r121572.
        http://trac.webkit.org/changeset/121572
        https://bugs.webkit.org/show_bug.cgi?id=90249

        Breaks Mac build since it depends on r121547, which was rolled
        out

        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeCurrentThreadInternal):

2012-06-29  Eric Seidel  <eric@webkit.org>

        Remove BUILDING_ON_LEOPARD now that no ports build on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=90249

        Reviewed by Ryosuke Niwa.

        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeCurrentThreadInternal):

2012-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121529.
        http://trac.webkit.org/changeset/121529
        https://bugs.webkit.org/show_bug.cgi?id=90260

        Failed to compile on Chromium WebKitMacBuilder (Requested by
        keishi on #webkit).

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::Collator::userDefault):

2012-06-29  Eric Seidel  <eric@webkit.org>

        Remove more BUILDING_ON_LEOPARD branches now that no port builds on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=90252

        Reviewed by Ryosuke Niwa.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::Collator::userDefault):

2012-06-29  Eric Seidel  <eric@webkit.org>

        Remove more BUILDING_ON_LEOPARD usage in PLATFORM(MAC) code
        https://bugs.webkit.org/show_bug.cgi?id=85846

        Reviewed by Adam Barth.

        PLATFORM(MAC) has not supported Leopard for several months now.
        This change removes about 1/3 of the remaining BUILDING_ON_LEOPARD
        uses in the PLATFORM(MAC) codepaths.  PLATFORM(CHROMIUM) still
        supports BUILDING_ON_LEOPARD for now.

        * wtf/Platform.h:

2012-06-28  Kalev Lember  <kalevlember@gmail.com>

        ThreadingWin: Silence GCC compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=89491

        Reviewed by Adam Roben.

        * wtf/ThreadingWin.cpp:
        (WTF::createThreadInternal):
        (WTF::PlatformCondition::timedWait):
        (WTF::PlatformCondition::signal): Fix unused-but-set-variable
        warnings.

2012-06-26  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Add missing heades to HEADERS

        For JavaScriptCore there aren't any Qt specific files, so we include all
        headers for easy editing in Qt Creator.

        Reviewed by Simon Hausmann.

        * WTF.pro:

2012-06-25  Kent Tamura  <tkent@chromium.org>

        Unreviewed, rolling out r121145.
        http://trac.webkit.org/changeset/121145
        https://bugs.webkit.org/show_bug.cgi?id=89847

        Had an objection for the change.

        * wtf/text/StringBuilder.h:

2012-06-25  Yong Li  <yoli@rim.com>

        [BlackBerry] Add JSC statistics into about:memory
        https://bugs.webkit.org/show_bug.cgi?id=89779

        Reviewed by Rob Buis.

        Turn on WTF_USE_EXPORT_MACROS for BlackBerry port.
        This will make macros like JS_EXPORT_PRIVATE work without
        extra porting.

        * wtf/Platform.h:

2012-06-25  Adam Barth  <abarth@webkit.org>

        Use InterpolationLow on chromium-android
        https://bugs.webkit.org/show_bug.cgi?id=89849

        Reviewed by Daniel Bates.

        Introduce a USE macro to control image interpolation quality.

        * wtf/Platform.h:

2012-06-25  Kent Tamura  <tkent@chromium.org>

        Change the serialization format of form control state to make the code simple
        https://bugs.webkit.org/show_bug.cgi?id=89847

        Reviewed by Hajime Morita.

        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::appendEscaped): Added. This function adds the
        escaped form of the input string. e.g. if stiring="foo,bar" escape='\'
        special=',', the appended string is foo\,bar.

2012-06-24  Adam Barth  <abarth@webkit.org>

        Remove USE(CHROMIUM_NET) because it is unused
        https://bugs.webkit.org/show_bug.cgi?id=89850

        Reviewed by Eric Seidel.

        I didn't see any mentions of CHROMIUM_NET when I grepped the Source
        directory. Also, this USE macro isn't defined on OS(DARWIN) or
        OS(ANDROID), which seems a bit odd given that Chromium uses the same
        network stack on all platforms.

        * wtf/Platform.h:

2012-06-22  Peter Beverloo  <peter@chromium.org>

        [Chromium] Disable c++0x compatibility warnings in JavaScriptCore.gyp when building for Android
        https://bugs.webkit.org/show_bug.cgi?id=88853

        Reviewed by Steve Block.

        The Android exclusions were necessary to fix a gyp generation error, as
        the gcc_version variable wasn't being defined for Android. Remove these
        exceptions when Chromium is able to define the gcc_version variable.

        * WTF.gyp/WTF.gyp:

2012-06-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Causes crashes in LLVMPipe
        https://bugs.webkit.org/show_bug.cgi?id=89358

        Reviewed by Martin Robinson.

        Change suggested by Dave Airlie and Xan Lopez.

        * wtf/Platform.h: disable global fastMalloc for GTK+

2012-06-22  Mario Sanchez Prada  <msanchez@igalia.com>

        Memory corruption on HashTable.h
        https://bugs.webkit.org/show_bug.cgi?id=88419

        Reviewed by Martin Robinson.

        Simplify definition of WTF_USE_PTHREADS and HAVE_PTHREAD_RWLOCK
        for the GTK platform using OS(LINUX) instead of HAVE(PTHREAD_H).

        * wtf/Platform.h:

2012-06-21  Parth Patel  <parpatel@rim.com>

        [Blackberry] BlackBerry::Platform::Settings::get() rename to BlackBerry::Platform::Settings::instance() to make it consistent with our other singletons
        https://bugs.webkit.org/show_bug.cgi?id=89684

        Reviewed by Yong Li.
        
        Update setting instance access to use instance() instead of get().

        * wtf/ThreadingPthreads.cpp:
        (WTF::createThreadInternal):

2012-06-21  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Fix NPAPI plugins on Windows
        https://bugs.webkit.org/show_bug.cgi?id=54531

        Reviewed by Martin Robinson.

        Define ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH for the GTK+ port, and
        include OwnPtrWin.cpp in the list of files built on Windows.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * wtf/Platform.h:

2012-06-21  Balazs Kelemen  <kbalazs@webkit.org>

        Compile error: 'bool std::isinf(float)' is not 'constexpr' with GCC 4.6 in C++11 mode
        https://bugs.webkit.org/show_bug.cgi?id=88721

        Reviewed by Csaba Osztrogonác.

        Don't define these as consexpr because with gcc 4.6
        they call non constexpr functions.
        * wtf/MathExtras.h:
        (std::wtf_isinf):
        (std::wtf_isnan):

2012-06-17  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to look at disassembly
        https://bugs.webkit.org/show_bug.cgi?id=89319

        Reviewed by Sam Weinig.
        
        Made changes to Assertions.h to make it friendly to C code again.
        
        Added ENABLE(DISASSEMBLER) and USE(UDIS86) logic to Platform.h.

        * wtf/Assertions.h:
        * wtf/Platform.h:

2012-06-19  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(r120552): Many tests timing out on Windows
        https://bugs.webkit.org/show_bug.cgi?id=89433

        Reviewed by Andy Estes.

        * wtf/CurrentTime.cpp:
        (WTF::lowResUTCTime):
        It looks like there were two bugs:
        1) the function was converting from 100ths of nanoseconds to seconds
           rather than 100s of nanoseconds to seconds by dividing by
           (nsPerSecond * 100) rather than (nsPerSecond / 100)
        2) the function should've been returning milliseconds, not seconds

2012-06-18  Tony Payne  <tpayne@chromium.org>

        [chromium] Add iccjpeg and qcms to chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=81974

        * wtf/Platform.h: Add Chromium USE defines for ICCJPEG and QCMSLIB
        to each Chromium platform, excluding Android.

        Reviewed by Adam Barth.

2012-06-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120485 and r120582.
        http://trac.webkit.org/changeset/120485
        http://trac.webkit.org/changeset/120582
        https://bugs.webkit.org/show_bug.cgi?id=89345

        chromeos tree breakage (Requested by morrita on #webkit).

        * wtf/Platform.h:

2012-06-17  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Simplify implementation of currentTime()
        https://bugs.webkit.org/show_bug.cgi?id=83156

        Reviewed by Brent Fulgham.

        Use GetSystemTimeAsFileTime() instead of ftime().
        This avoids an unneeded call to the MS CRT and
        brings the Win/WinCE code closer together.

        * wtf/CurrentTime.cpp:
        (WTF::lowResUTCTime):
        (WTF::currentTime):

2012-06-15  Tony Payne  <tpayne@chromium.org>

        [chromium] Add iccjpeg and qcms to chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=81974

        * wtf/Platform.h: Add Chromium USE defines for ICCJPEG and QCMSLIB
        to each Chromium platform, excluding Android.

        Reviewed by Adam Barth.

2012-06-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120393.
        http://trac.webkit.org/changeset/120393
        https://bugs.webkit.org/show_bug.cgi?id=89163

        breaks cr-mac build (Requested by morrita on #webkit).

        * wtf/Platform.h:

2012-06-14  Tony Payne  <tpayne@chromium.org>

        [chromium] Add iccjpeg and qcms to chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=81974

        * wtf/Platform.h: Add Chromium USE defines for ICCJPEG and QCMSLIB
        to each Chromium platform, excluding Android.

        Reviewed by Adam Barth.

2012-06-14  Yong Li  <yoli@rim.com>

        [BlackBerry] Implement computeRAMSize for QNX
        https://bugs.webkit.org/show_bug.cgi?id=89110

        Reviewed by Rob Buis.

        * wtf/RAMSize.cpp:
        (WTF::computeRAMSize):

2012-06-14  Geoffrey Garen  <ggaren@apple.com>

        ARMv7 should support spinlocks
        https://bugs.webkit.org/show_bug.cgi?id=88957

        Reviewed by Darin Adler.

        More info @ http://infocenter.arm.com/help/topic/
        com.arm.doc.genc007826/Barrier_Litmus_Tests_and_Cookbook_A08.pdf

        * wtf/Atomics.h:
        (WTF::memoryBarrierAfterLock):
        (WTF::memoryBarrierBeforeUnlock): Added memory barrier primitives since
        ARMv7 has a weakly ordered memory model.

        * wtf/Platform.h: Enabled compare-and-swap on Windows so our spinlock
        implementation would continue working on Windows.

        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):
        (TCMalloc_SpinLock): Use our compare-and-swap helper function to avoid
        rewriting it in assembly here.

        Added memory barriers since ARMv7 needs them.

        Removed PPC support because our helper function doesn't support PPC.

2012-06-13  Arnaud Renevier  <arno@renevier.net>

        make sure headers are included only once per file
        https://bugs.webkit.org/show_bug.cgi?id=88929

        Reviewed by Kentaro Hara.

        * wtf/FastMalloc.cpp:
        * wtf/MathExtras.h:
        * wtf/OSAllocator.h:

2012-06-13  Benjamin Poulain  <benjamin@webkit.org>

        Implement the simple constructors WTFURL's KURL
        https://bugs.webkit.org/show_bug.cgi?id=85724

        Reviewed by Adam Barth.

        This patch extends WTFURL with:
        -support basic debugging using print() methods
        -parsing in the incomming string character set (8bits or 16bits)
        -add a function for parsing of relative URL (but no implementation yet)

        * WTF.xcodeproj/project.pbxproj:
        * wtf/text/WTFString.h:
        (String):
        * wtf/url/api/ParsedURL.cpp:
        (WTF::ParsedURL::ParsedURL):
        (WTF):
        (WTF::ParsedURL::hasFragment): Add this method to query the framgent availability without
        allocating a new String.
        (WTF::ParsedURL::withoutFragment): This method is added to implement KURL::removeFragmentIdentifier() and
        the parsing of empty relative URL (where we return the base without fragment).
        (WTF::ParsedURL::print):
        * wtf/url/api/ParsedURL.h:
        (ParsedURL):
        (WTF::ParsedURL::spec):
        * wtf/url/api/URLString.h:
        (URLString):
        * wtf/url/src/URLParser.h:
        (WTF):
        (URLParser):
        (WTF::URLParser::parseURLWithBase):
        * wtf/url/src/URLSegments.cpp:
        (WTF::URLSegments::length):
        (WTF::URLSegments::charactersBefore):
        * wtf/url/src/URLSegments.h:
        (URLSegments):
        Change the boolean argument includeDelimiter in favor of an enum to improve readability.

2012-06-13  Filip Pizlo  <fpizlo@apple.com>

        DFG should be able to set watchpoints on global variables
        https://bugs.webkit.org/show_bug.cgi?id=88692

        Reviewed by Geoffrey Garen.
        
        Added ability to set the inline capacity of segmented vectors.
        
        Also added the ability ot ASSERT_NOT_REACHED() without having to
        propagate NO_RETURN macros, which would be a show-stopper for code
        that is conditionally unreachable.

        * wtf/Assertions.h:
        (UNREACHABLE_FOR_PLATFORM):
        * wtf/SegmentedVector.h:
        (WTF):
        (SegmentedVectorIterator):
        (WTF::SegmentedVectorIterator::operator=):
        (WTF::SegmentedVectorIterator::SegmentedVectorIterator):
        (SegmentedVector):

2012-06-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r120172.
        http://trac.webkit.org/changeset/120172
        https://bugs.webkit.org/show_bug.cgi?id=88976

        The patch causes compilation failures on Gtk, Qt and Apple Win
        bots (Requested by zdobersek on #webkit).

        * wtf/SegmentedVector.h:
        (WTF):
        (SegmentedVectorIterator):
        (WTF::SegmentedVectorIterator::operator=):
        (WTF::SegmentedVectorIterator::SegmentedVectorIterator):
        (SegmentedVector):

2012-06-10  Filip Pizlo  <fpizlo@apple.com>

        DFG should be able to set watchpoints on global variables
        https://bugs.webkit.org/show_bug.cgi?id=88692

        Reviewed by Geoffrey Garen.
        
        Added ability to set the inline capacity of segmented vectors.

        * wtf/SegmentedVector.h:
        (WTF):
        (SegmentedVectorIterator):
        (WTF::SegmentedVectorIterator::operator=):
        (WTF::SegmentedVectorIterator::SegmentedVectorIterator):
        (SegmentedVector):

2012-06-12  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the build.

        Maybe don't export inlined functions.

        * wtf/ThreadingPrimitives.h:
        (WTF::MutexTryLocker::MutexTryLocker):
        (WTF::MutexTryLocker::~MutexTryLocker):
        (WTF::MutexTryLocker::locked):

2012-06-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Using extrernal ICU library on case unsensitive drives will not work
        https://bugs.webkit.org/show_bug.cgi?id=70913

        Reviewed by Csaba Osztrogonác.

        Properly set the include path for the WTF module and for modules using it.
        The path should include Source/WTF/wtf only when building WTF itself. Other
        modules are expected to include the headers as #include <wtf/Header.h>, so
        only add Source/WTF to their include path.

        "unicode/utf8.h" should now then always reference to ICU in the include path
        and "wtf/unicode/UTF8.h" reference to the WTF version.
        This will work as long as WTF object files don't depend on ICU themselves.

        Removed gobject, qt and unicode from the include path as those directories
        don't exist anymore.

        * WTF.pri:
        * WTF.pro:

2012-06-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Add missing header file.

2012-06-09  Dominic Cooney  <dominicc@chromium.org>

        [Chromium] Remove JavaScriptCore dependencies from gyp
        https://bugs.webkit.org/show_bug.cgi?id=88510

        Reviewed by Adam Barth.

        Chromium doesn't support JSC any more and there doesn't seem to be
        a strong interest in using GYP as the common build system in other
        ports.

        * WTF.gyp/WTF.gyp:

2012-06-08  Andy Wingo  <wingo@igalia.com>

        Explictly mark stubs called by JIT as being internal
        https://bugs.webkit.org/show_bug.cgi?id=88552

        Reviewed by Filip Pizlo.

        * wtf/ExportMacros.h (WTF_INTERNAL, HAVE_INTERNAL_VISIBILITY): New
        defines.  Regardless of what the port does about visibility in
        general, for code referenced only from assembly it is useful to
        give it internal visibility.
        * wtf/InlineASM.h: Split SYMBOL_STRING_RELOCATION into
        LOCAL_REFERENCE and GLOBAL_REFERENCE; the former will try to avoid
        indirection if HAVE(INTERNAL_VISIBILITY).

2012-06-07  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][Win] Fix linking WTF with ICU
        https://bugs.webkit.org/show_bug.cgi?id=88302

        Reviewed by Simon Hausmann.

        * WTF.pri: Use proper library names on win32 platforms.

2012-06-06  Michael Saboff  <msaboff@apple.com>

        ENH: Add Logging to GC Marking Phase
        https://bugs.webkit.org/show_bug.cgi?id=88364

        Reviewed by Filip Pizlo.

        * wtf/DataLog.cpp:
        (WTF::dataLogString): Additional method to support GC Mark logging.
        * wtf/DataLog.h:
        * wtf/Platform.h: New ENABLE_OBJECT_MARK_LOGGING flag macro.

2012-06-06  Andy Wingo  <wingo@igalia.com>

        [GTK] Enable the LLInt
        https://bugs.webkit.org/show_bug.cgi?id=88315

        Reviewed by Filip Pizlo.

        * wtf/InlineASM.h: Add an implementation of LOCAL_LABEL_STRING for
        OS(LINUX).
        * wtf/Platform.h: Add OS(LINUX) to the set of operating systems
        for ENABLE_LLINT.  Add a specific check for PLATFORM(MAC) or
        PLATFORM(IOS), and add to that a check for PLATFORM(GTK).

2012-06-05  Roland Takacs  <takacs.roland@stud.u-szeged.hu>

        [Qt] Use GraphicsContext3DOpenGLES.cpp when using OpenGL ES
        https://bugs.webkit.org/show_bug.cgi?id=78720

        Reviewed by Noam Rosenthal.

        Defined a global Opengl ES macro to check OpenGL ES on every platforms.

        * wtf/Platform.h:

2012-06-04  Takashi Toyoshima  <toyoshim@chromium.org>

        [WebSocket] Send requires super linear time against data size
        https://bugs.webkit.org/show_bug.cgi?id=87383

        Reviewed by Kent Tamura.

        * wtf/StreamBuffer.h: Added.
        (WTF):
        (StreamBuffer):
        (WTF::StreamBuffer::StreamBuffer):
        (WTF::StreamBuffer::~StreamBuffer):
        (WTF::StreamBuffer::isEmpty):
        (WTF::StreamBuffer::append):
        (WTF::StreamBuffer::consume):
        (WTF::StreamBuffer::size):
        (WTF::StreamBuffer::firstBlockData):
        (WTF::StreamBuffer::firstBlockSize):

2012-06-04  Patrick Gansterer  <paroga@webkit.org>

        Port RAMSize to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=87854

        Reviewed by Geoffrey Garen.

        WinCE has no GlobalMemoryStatusEx() function. Use GlobalMemoryStatus() instead.

        * wtf/RAMSize.cpp:
        (WTF::computeRAMSize):

2012-06-01  Xianzhu Wang  <wangxianzhu@chromium.org>

        Remove dependency from ImageDiff to WTF
        https://bugs.webkit.org/show_bug.cgi?id=88147

        Reviewed by Adam Barth.

        * WTF.gyp/WTF.gyp:

2012-06-01  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Save one copy when going from 8-bit WTF::String to QString

        Asking for characters() of an 8-bit string will make a 16-bit copy internally
        in WTF::String. Since we're going to copy the data to QStringData anyways, which
        is 16-bit, we can do the conversion ourselves and save one copy.

        Reviewed by Simon Hausmann.

        * wtf/qt/StringQt.cpp:
        (WTF::String::operator QString):

2012-05-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Make conversion from QString to WTF::String (and back again) ~free

        https://bugs.webkit.org/show_bug.cgi?id=87847

        Instead of copying the QString data when converting to a WTF::String we
        make the WTF::String adopt the QString data by introducing a new buffer
        ownership type, and pointing the internal WTF::StringImpl 16-bit data
        member to the string data managed by QStringData.

        We make sure to reference the QStringData when adopting, so that the
        data will stay alive, and then dereference it when the WTF::StringImpl
        is deleted, which will free the QStringData (either straight away, if
        we're the only one holding a reference still, or later, when the ref
        count goes to 0).

        In the case of going back from a WTF::String to a QString we can cheat
        a bit (avoid a copy), if we know that the WTF::String was adopted from
        a QString, since it's then just a matter of having the QString adopt
        the existing QStringData (just like a regular QString copy).

        If the WTF::String buffer is not owned by QStringData, eg a regular
        8-bit or 16-bit string/substring, we have to fall back to copying,
        as before (though there are potential optimization tricks we can
        apply here later on).

        Reviewed by Gavin Barraclough.

        * wtf/qt/StringQt.cpp:
        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:

2012-06-01  Sudarsana Nagineni  <sudarsana.nagineni@linux.intel.com>

        [EFL] Implement PlatformStrategies
        https://bugs.webkit.org/show_bug.cgi?id=86946

        Reviewed by Carlos Garcia Campos.

        * wtf/Platform.h: Enable PLATFORM_STRATEGIES for EFL platform.

2012-05-31  Anders Carlsson  <andersca@apple.com>

        Enable support for rvalue references when building with a version of clang that supports them
        https://bugs.webkit.org/show_bug.cgi?id=88018

        Re-enable support for rvalue references when building with a version of Xcode newer than 4.2.

        * wtf/Compiler.h:

2012-05-31  Filip Pizlo  <fpizlo@apple.com>

        DataLog should be usable outside of JSC
        https://bugs.webkit.org/show_bug.cgi?id=88015

        Reviewed by Oliver Hunt.

        * wtf/DataLog.h:
        (WTF):

2012-05-31  Anders Carlsson  <andersca@apple.com>

        Disable support for rvalue references until I figure out why this is breaking the Xcode 4.2 build.

        * wtf/Compiler.h:

2012-05-31  Anders Carlsson  <andersca@apple.com>

        Vector should have a move constructor and move assignment operator
        https://bugs.webkit.org/show_bug.cgi?id=87997

        Reviewed by Andreas Kling.

        * wtf/Compiler.h:
        Use __has_extension so we can use move semantics and other C++11 features even when building as C++98.

        * wtf/Vector.h:
        Add a move constructor and a move assignment operator to Vector.

2012-05-31  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Simplify QT_VERSION_CHECKS for Qt5 by introducing HAVE(QT5)
        https://bugs.webkit.org/show_bug.cgi?id=87955

        Reviewed by Simon Hausmann.

        * wtf/qt/UtilsQt.h:

2012-05-30  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        HashTable.h has using directives for std::pair and std::make_pair
        https://bugs.webkit.org/show_bug.cgi?id=29919

        Reviewed by Darin Adler.

        * wtf/HashTraits.h:
        (WTF): Remove the directives.

2012-05-30  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        HashTable.h has using directives for std::pair and std::make_pair
        https://bugs.webkit.org/show_bug.cgi?id=29919

        Reviewed by Darin Adler.

        Change code to use std::pair and std::make_pair. Later patch will remove the
        'using' directives.

        * wtf/HashTable.h:
        (WTF::hashTableSwap):
        (HashTable):
        * wtf/HashTraits.h:
        (PairHashTraits):
        (WTF::PairHashTraits::emptyValue):

2012-05-30  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r118603.

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

2012-05-29  Anders Carlsson  <andersca@apple.com>

        String should be move enabled/optimized
        https://bugs.webkit.org/show_bug.cgi?id=87596

        Reviewed by Andreas Kling.

        Add move constructors and move assignment operators to String and AtomicString when building with
        compilers that support rvalue references. This gets rid of ref-churn when the source of the 
        constructor or assignment is a temporary object.

        * wtf/text/AtomicString.h:
        (AtomicString):
        (WTF::AtomicString::AtomicString):
        (WTF::AtomicString::operator=):
        * wtf/text/WTFString.h:
        (String):
        (WTF::String::String):
        (WTF::String::operator=):

2012-05-29  Alexandre Elias  <aelias@google.com>

        Support WebKit log messages on Android
        https://bugs.webkit.org/show_bug.cgi?id=87773

        Reviewed by Darin Adler.

        This sends WebKit log messages to the Android "logcat" facility, as
        Android sends stderr to /dev/null.

        * wtf/Assertions.cpp:

2012-05-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove duplication of logic for disabling selected warnings related to C++11

        This is already handled in unix/default_post.prf

        Reviewed by Simon Hausmann.

        * WTF.pro:

2012-05-27  Darin Adler  <darin@apple.com>

        Fix an incorrect assertion in Vector::remove
        https://bugs.webkit.org/show_bug.cgi?id=87612

        Reviewed by Dan Bernstein.

        * wtf/Vector.h: There's no good reason to disallow calling remove
        with a size of 0, even when the position is at the end of the vector,
        so changed the two-argument Vector::remove assertion to assert that
        the position is <= size rather than < size.

2012-05-27  Yoshifumi Inoue  <yosin@chromium.org>

        [WTF] Introduce UINT64_C to MathExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=87485

        Reviewed by Kent Tamura.

        * wtf/MathExtras.h:

2012-05-25  Filip Pizlo  <fpizlo@apple.com>

        weakCompareAndSwap should work on Windows
        https://bugs.webkit.org/show_bug.cgi?id=87549

        Reviewed by Jessie Berlin.

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

2012-05-24  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        cti_vm_throw gets kicked out by gcc 4.6 -flto
        https://bugs.webkit.org/show_bug.cgi?id=56088

        Reviewed by Darin Adler.

        Define REFERENCED_FROM_ASM to __attribute__((used)) on GCC.

        * wtf/Compiler.h:

2012-05-23  Darin Adler  <darin@apple.com>

        Optimize iteration of empty hash tables
        https://bugs.webkit.org/show_bug.cgi?id=87215

        Reviewed by Geoffrey Garen.

        Iteration of empty hash tables was showing up on simple page loading
        profiles due to the use of hash tables in the
        NodeListsNodeData::invalidateCaches and
        NodeListsNodeData::invalidateCachesThatDependOnAttributes functions.
        It's worth optimizing the case of an empty table.

        * wtf/HashTable.h:
        (WTF::HashTable::begin): Return the known-good end iterator when the
        table is empty. This makes iterating an empty table faster because we
        avoid skipping empty and deleted buckets.

2012-05-22  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * wtf/RAMSize.cpp:
        (WTF::computeRAMSize): sysctl expects a uint64_t, so use that and then
        cast back to size_t. Since it's coneivable that a 32bit process would
        run on a system with more than 4GB RAM, I added a paranoid check for
        that condition.

2012-05-22  Jessie Berlin  <jberlin@apple.com>

        Build fix.

        * wtf/RAMSize.cpp:
        (WTF::computeRAMSize):
        If you say you are going to return a size_t, actually return a size_t.

2012-05-21  Geoffrey Garen  <ggaren@apple.com>

        GC allocation trigger should be tuned to system RAM
        https://bugs.webkit.org/show_bug.cgi?id=87039

        Reviewed by Darin Adler.

        Added a helper function for measuring system RAM.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/AmountOfRAM.cpp: Added.
        (WTF):
        (WTF::computeAmountOfRAM):
        (WTF::amountOfRAM):
        * wtf/AmountOfRAM.h: Added.
        (WTF):
        * wtf/CMakeLists.txt:
        * wtf/StdLibExtras.h:
        (WTF):

2012-05-22  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        GCC 4.7 and C++11 support.
        https://bugs.webkit.org/show_bug.cgi?id=86465

        Reviewed by Darin Adler.

        Detect C++11 mode in GCC 4.7 and set appropiate compiler feature flags.
        Turn C++11 override control into a compiler feature flag.
        Fix non-clang support of compiler feature CXX_DELETED_FUNCTIONS.

        * wtf/Compiler.h:
        * wtf/Noncopyable.h:

2012-05-22  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION(r117861): It made almost all tests crash on Qt
        https://bugs.webkit.org/show_bug.cgi?id=87082

        Reviewed by Csaba Osztrogonác.
        
        Using OwnArrayPtr is a bad idea if you allocate array with fastCalloc.

        * wtf/FastBitVector.h:
        (WTF::FastBitVector::FastBitVector):
        (WTF::FastBitVector::~FastBitVector):
        (FastBitVector):
        (WTF::FastBitVector::operator=):
        (WTF::FastBitVector::resize):
        (WTF::FastBitVector::setAll):
        (WTF::FastBitVector::clearAll):
        (WTF::FastBitVector::set):

2012-05-21  Filip Pizlo  <fpizlo@apple.com>

        DFG should be able to compute dominators
        https://bugs.webkit.org/show_bug.cgi?id=85269

        Reviewed by Oliver Hunt.
        
        Merged r115754 from dfgopt.
        
        Added a bitvector class suitable for cheap static analysis. This class
        differs from BitVector in that instead of optimizing for space, it
        optimizes for execution time. Its API is also somewhat less friendly,
        which is intentional; it's meant to be used in places where you know
        up front how bit your bitvectors are going to be.

        * GNUmakefile.list.am:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/FastBitVector.h: Added.
        (WTF):
        (FastBitVector):
        (WTF::FastBitVector::FastBitVector):
        (WTF::FastBitVector::operator=):
        (WTF::FastBitVector::numBits):
        (WTF::FastBitVector::resize):
        (WTF::FastBitVector::setAll):
        (WTF::FastBitVector::clearAll):
        (WTF::FastBitVector::set):
        (WTF::FastBitVector::setAndCheck):
        (WTF::FastBitVector::equals):
        (WTF::FastBitVector::merge):
        (WTF::FastBitVector::filter):
        (WTF::FastBitVector::exclude):
        (WTF::FastBitVector::clear):
        (WTF::FastBitVector::get):
        (WTF::FastBitVector::arrayLength):

2012-05-15  Gavin Barraclough  <barraclough@apple.com>

        Add support for private names
        https://bugs.webkit.org/show_bug.cgi?id=86509

        Reviewed by Oliver Hunt.

        The spec isn't final, but we can start adding support to allow property maps
        to contain keys that aren't identifiers.

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::StringImpl):
        (StringImpl):
        (WTF::StringImpl::createEmptyUnique):
        (WTF::StringImpl::isEmptyUnique):
            - Allow empty string impls to be allocated, which can be used as unique keys.

2012-05-21  Emil A Eklund <eae@chromium.org> and Levi Weintraub  <leviw@chromium.org>

        Enable SUBPIXEL_LAYOUT feature flag on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=85555

        Reviewed by Eric Seidel.

        Enabling sub-pixel layout on Chromium port.

        * wtf/Platform.h:

2012-05-21  Andreas Kling  <kling@webkit.org>

        CSS: Move duplicate property elimination to parser.
        <http://webkit.org/b/86948>

        Reviewed by Antti Koivisto.

        Add WTF::BitArray, a simple, malloc free, fixed-size bit array class.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/BitArray.h: Added.
        (WTF):
        (BitArray):
        (WTF::BitArray::BitArray):
        (WTF::BitArray::set):
        (WTF::BitArray::get):
        * wtf/CMakeLists.txt:

2012-05-21  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Colliding isinf/isnan between C99 and C++11 with GCC >=4.6
        https://bugs.webkit.org/show_bug.cgi?id=59249

        Reviewed by Darin Adler.

        Workaround the isinf and isnan conflict in GCC C++11.

        * wtf/Compiler.h:
        * wtf/MathExtras.h:
        (std::wtf_isinf):
        (std::wtf_isnan):

2012-05-21  Andreas Kling  <kling@webkit.org>

        REGRESSION(r117501): IconDatabase asserts on startup in synchronousIconForPageURL().
        <http://webkit.org/b/86935>
        <rdar://problem/11480012>

        Reviewed by Anders Carlsson.

        Added a swap() to HashCountedSet.

        * wtf/HashCountedSet.h:
        (HashCountedSet::swap):

2012-05-16  Geoffrey Garen  <ggaren@apple.com>

        This is not a joke: 3.7X speedup from removing a call to sleep
        https://bugs.webkit.org/show_bug.cgi?id=86702

        Reviewed by Eric Seidel.

        The speedup was on a GC benchmark, with a custom VM caching layer
        not in TOT yet.

        Instruments showed most GC threads spending the majority of their
        time sleeping instead of doing useful work. Removing the call to
        sleep sped up the benchmark.

        * wtf/TCSpinLock.h:
        (TCMalloc_SlowLock): Since a spin lock is only ever held for a short
        amount of time, don't sleep for a long amount of time waiting for it
        to unlock -- yielding to the scheduler is sufficient.

        If we find a case where someone is sitting on a spin lock for over 2ms,
        we should fix the spin lock holder, not the spin lock.

2012-05-16  Simon Fraser  <simon.fraser@apple.com>

        Make things build with DUMP_HASHTABLE_STATS=1
        https://bugs.webkit.org/show_bug.cgi?id=86571

        Reviewed by Geoffrey Garen.
        
        DUMP_HASHTABLE_STATS bitrotted after the WTF separation. This patch
        makes it build.
        
        Added WTF_EXPORTDATA to the global data, and WTF_EXPORT_PRIVATE to
        the static HashTableStats methods. Added a dumpStats() method
        that is not yet called anywhere; we can no longer rely on destroying
        a global object to dump the stats because global destructors are
        disallowed.

        * wtf/HashTable.cpp:
        (WTF):
        (WTF::HashTableStats::recordCollisionAtCount):
        (WTF::HashTableStats::dumpStats):
        * wtf/HashTable.h:
        (HashTableStats):

2012-05-15  Filip Pizlo  <fpizlo@apple.com>

        shrinkToFit() is often not called for Vectors in CodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=86436

        Reviewed by Oliver Hunt.
        
        Gave SegmentedVector a shrinkToFit() method. This only shrinks the segment
        lookup table, which is likely to not be hugely profitable, but it is better
        than nothing.

        * wtf/SegmentedVector.h:
        (SegmentedVector):
        (WTF::SegmentedVector::shrinkToFit):

2012-05-15  Andy Estes  <aestes@apple.com>

        Add WTF_USE_SECURITY_FRAMEWORK and use it in place of the less specific PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=86508

        Reviewed by Sam Weinig.

        * wtf/Platform.h:

2012-05-15  Zoltan Herczeg  <zherczeg@webkit.org>

        NEONizing forceValidPreMultipliedPixels
        https://bugs.webkit.org/show_bug.cgi?id=86468

        Reviewed by Nikolas Zimmermann.

        Allow to disable all intrinsics with a single macro.

        * wtf/Platform.h:

2012-05-14  Andy Estes  <aestes@apple.com>

        Add WTF_USE_APPKIT to differentiate platforms that use AppKit.framework from other Darwin platforms
        https://bugs.webkit.org/show_bug.cgi?id=86432

        Reviewed by Maciej Stachowiak.

        * wtf/Platform.h:

2012-05-14  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/86320> WTF.xcodeproj builds with -O3 in debug builds

        Reviewed by Simon Fraser.

        * WTF.xcodeproj/project.pbxproj: Ensure that the debug configuration uses the
        same settings as the debug variant would.

2012-05-14  Wei James  <james.wei@intel.com>

        [Chromium] ImageDiff should be build for host on Android
        https://bugs.webkit.org/show_bug.cgi?id=82039

        Reviewed by Adam Barth.

        * WTF.gyp/WTF.gyp:

2012-05-14  Yong Li  <yoli@rim.com>

        DFG JIT is not ARM EABI compatible
        https://bugs.webkit.org/show_bug.cgi?id=84449

        Reviewed by Filip Pizlo.

        Add COMPILER_SUPPORTS(EABI) when __ARM_EABI__
        or __EABI__ is defined.

        * wtf/Compiler.h:

2012-05-10  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Add OwnPtr specialization for Eina_Hash.
        https://bugs.webkit.org/show_bug.cgi?id=85046

        Reviewed by Andreas Kling.

        Add an override for Eina_Hash for EFL port.

        * wtf/OwnPtrCommon.h:
        (WTF):
        * wtf/efl/OwnPtrEfl.cpp:
        (WTF::deleteOwnedPtr):
        (WTF):

2012-05-09  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to get useful debug logging from the JIT memory allocator
        https://bugs.webkit.org/show_bug.cgi?id=86042

        Reviewed by Geoff Garen.

        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::findAndRemoveFreeSpace):
        (WTF::MetaAllocator::addFreeSpace):
        (WTF::MetaAllocator::dumpProfile):

2012-05-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r116440.
        http://trac.webkit.org/changeset/116440
        https://bugs.webkit.org/show_bug.cgi?id=85904

        Broke the Chromium Android bot (Requested by beverloo on
        #webkit).

        * WTF.gyp/WTF.gyp:

2012-05-08  Adam Barth  <abarth@webkit.org>

        [Chromium] OS(ANDROID) ImageDiff requires us to build WTF for both host and target
        https://bugs.webkit.org/show_bug.cgi?id=85897

        Reviewed by Tony Chang.

        * WTF.gyp/WTF.gyp:

2012-05-08  Adam Barth  <abarth@webkit.org>

        [Chromium] Assertions.cpp should work on OS(ANDROID)
        https://bugs.webkit.org/show_bug.cgi?id=85867

        Reviewed by Eric Seidel.

        Some minor ifdefs for OS(ANDROID) on PLATFORM(CHROMIUM).

        * wtf/Assertions.cpp:

2012-05-07  Adam Barth  <abarth@webkit.org>

        [Chromium] Android wishes to use an empty implementation if AXObjectCache
        https://bugs.webkit.org/show_bug.cgi?id=85842

        Reviewed by Eric Seidel.

        Disable accessibility on OS(ANDROID) for PLATFORM(CHROMIUM).

        * wtf/Platform.h:

2012-05-04  Jeff Rogers  <jrogers@rim.com>

        [BlackBerry] Implement numberOfProcessorCores() for QNX
        https://bugs.webkit.org/show_bug.cgi?id=85638

        Reviewed by Antonio Gomes.

        * wtf/NumberOfCores.cpp:
        (WTF::numberOfProcessorCores):

2012-05-03  Yong Li  <yoli@rim.com>

        Mutex failure when HashTable is memory moved in debug build
        https://bugs.webkit.org/show_bug.cgi?id=84970

        Reviewed by Rob Buis.

        1. Replace m_mutex with OwnPtr<m_mutex> so HashTable is still
           memory movable in debug build.
        2. Assert successes of pthread_mutex_init() and pthread_mutex_destroy().

        * wtf/HashTable.h:
        (HashTable):
        (WTF::::HashTable):
        (WTF::::invalidateIterators):
        (WTF::addIterator):
        (WTF::removeIterator):
        * wtf/ThreadingPthreads.cpp:
        (WTF::Mutex::Mutex):
        (WTF::Mutex::~Mutex):

2012-05-02  Antti Koivisto  <antti@apple.com>

        Add temporary feature define for parsed stylesheet caching
        https://bugs.webkit.org/show_bug.cgi?id=85413

        Rubber-stamped by Nikolas Zimmermann.

        While not an externally visible feature this is still a significant internal change.
        It is good to have define in case someone has an urgent need to turn it off.
        
        Caching is enabled by default on all platforms. The define should be removed after some bake time.

        * wtf/Platform.h:

2012-05-02  Lauro Neto  <lauro.neto@openbossa.org>

        [Qt]r57240 broke Qt build (gcc bug)
        https://bugs.webkit.org/show_bug.cgi?id=37253

        Reviewed by Csaba Osztrogonác.

        Add back the inline hack just for ARM due to old version of
        gcc still being used on Harmattan SDK. Thanks to Ossy for the
        suggestion.
        * wtf/PassRefPtr.h:
        (WTF):

2012-05-02  Nico Weber  <thakis@chromium.org>

        Let WebKit parse with clang on windows with -std=c++11
        https://bugs.webkit.org/show_bug.cgi?id=85398

        Reviewed by Ryosuke Niwa.

        See http://trac.webkit.org/changeset/85945 for background on the line
        I'm changing. With clang, __GXX_EXPERIMENTLAL_CXX0X__ is set in c++11
        mode, but MSVC's c++ library doesn't have a tr1/memory header. So also
        check for __GLIBCXX__, like it's done in the rest of this file.

        * wtf/TypeTraits.h:

2012-05-02  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [Qt]r57240 broke Qt build (gcc bug)
        https://bugs.webkit.org/show_bug.cgi?id=37253

        Reviewed by Noam Rosenthal.

        Removing workaround macro since current gcc/Qt doesn't require it to compile.

        * wtf/PassRefPtr.h:
        (WTF):

2012-04-30  Oliver Hunt  <oliver@apple.com>

        Investigate overflows in Canvas putImageData routine
        https://bugs.webkit.org/show_bug.cgi?id=61373

        Reviewed by Gavin Barraclough.

        Allow floating point multiplies of checked types (complete with
        bounds checks).

        * wtf/CheckedArithmetic.h:
        (Checked):
        (WTF::Checked::operator*=):

2012-04-30  Benjamin Poulain  <benjamin@webkit.org>

        Add String::startsWith() and endsWith() for string literals
        https://bugs.webkit.org/show_bug.cgi?id=85154

        Reviewed by Darin Adler.

        When invoking StringImpl::startsWidth() or StringImpl::endsWith() with
        a string literal, a new String was constructed implicitly, allocating
        a new StringImpl and copying the characters for the operation.

        This patch adds a version of those methods for single characters and
        string literals.
        This allows us to avoid allocating memory and use the characters in place,
        and it permits some extra shortcuts in the implementation.

        * wtf/text/AtomicString.h:
        (WTF::AtomicString::startsWith):
        (AtomicString):
        (WTF::AtomicString::endsWith):
        * wtf/text/StringImpl.cpp:
        (WTF::equalInner):
        (WTF):
        (WTF::StringImpl::startsWith):
        (WTF::StringImpl::endsWith):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::startsWith):
        (StringImpl):
        (WTF::StringImpl::endsWith):
        * wtf/text/WTFString.h:
        (WTF::String::startsWith):
        (String):
        (WTF::String::endsWith):

2012-04-30  Anders Carlsson  <andersca@apple.com>

        WTF::bind should work with blocks
        https://bugs.webkit.org/show_bug.cgi?id=85227

        Reviewed by Sam Weinig.

        Add a block type FunctionWrapper specialization.

        * wtf/Functional.h:

2012-04-28  Emil A Eklund  <eae@chromium.org>

        Add ENABLE_SUBPIXEL_LAYOUT controlling FractionalLayoutUnit denominator
        https://bugs.webkit.org/show_bug.cgi?id=85146

        Reviewed by Eric Seidel.

        Add a new flag for controlling the fixed point denominator in
        FractionalLayoutUnit. Controls whether the denominator is set to 60 or 1.
        Until we change the LayoutUnit typedef this change will have no effect.

        * wtf/Platform.h:

2012-04-29  Kent Tamura  <tkent@chromium.org>

        [Mac] Add LocalizedDateMac
        https://bugs.webkit.org/show_bug.cgi?id=85039

        Reviewed by Kentaro Hara.

        * wtf/DateMath.h:
        (WTF): Add monthFullName[]. It is useful to make fallback month
        names for calendar/date related features.

2012-04-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add a way to register custom uri schemes in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=84130

        Reviewed by Martin Robinson.

        Add GPtrArray template to be able to use GRefPtr with GPtrArrays.

        * wtf/gobject/GRefPtr.cpp:
        (WTF::refGPtr):
        (WTF):
        (WTF::derefGPtr):
        * wtf/gobject/GRefPtr.h:
        (WTF):
        * wtf/gobject/GTypedefs.h:

2012-04-26  Nico Weber  <thakis@chromium.org>

        Don't define WTF_COMPILER_SUPPORTS_CXX_NULLPTR twice when building with clang on windows.
        https://bugs.webkit.org/show_bug.cgi?id=85018

        Reviewed by Anders Carlsson.

        Clang sets _MSC_VER when compiling for a -pc-win32 target (just like it sets __GNUC__ on unix).
        As a result, WTF_COMPILER_SUPPORTS_CXX_NULLPTR gets currently set twice, once for clang and
        once for _MSC_VER. Guard the second instance with !COMPILER(CLANG). This matches the gcc code
        for WTF_COMPILER_SUPPORTS_CXX_NULLPTR in the same file.

        * wtf/Compiler.h:

2012-04-26  Antonio Gomes  <agomes@rim.com>

        [BlackBerry] properly disable DRAG_SUPPORT
        https://bugs.webkit.org/show_bug.cgi?id=84952

        Reviewed by Daniel Bates.

        * wtf/Platform.h: Remove the line that disables drag support from here
        for the BlackBerry port.

2012-04-25  Benjamin Poulain  <benjamin@webkit.org>

        Add a version of StringImpl::find() without offset
        https://bugs.webkit.org/show_bug.cgi?id=83968

        Reviewed by Sam Weinig.

        This patch add a version of StringImpl::find() without offset, Instead of using the default
        value for the index.

        By not having the index, we can skip a couple of branches and a few instructions. This gives
        significant gains when the strings are short-ish.

        The case of empty string is moved below (matchLength == 1) since it is a less common operation.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::find):
        (WTF):
        * wtf/text/StringImpl.h:
        (StringImpl):
        * wtf/text/WTFString.h:
        (String):
        (WTF::String::find):

2012-04-25  Darin Adler  <darin@apple.com>

        Iterating a HashMap<String, X> involves a string equality comparison to check for the empty value
        https://bugs.webkit.org/show_bug.cgi?id=84524

        Reviewed by Antti Koivisto.

        * wtf/HashMap.h: Added a struct template, HashMapValueTraits, that derives from
        PairHashTraits, adds an isEmptyValue function that looks only at the key, not
        the mapped value, in the hash table value, and uses the isHashTraitsEmptyValue
        function template to check if the key is empty.

2012-04-25  Landry Breuil  <landry@openbsd.org>

        Include <sys/param.h>, needed for sysctl() on OpenBSD/NetBSD
        https://bugs.webkit.org/show_bug.cgi?id=82585

        Reviewed by Zoltan Herczeg.

        * wtf/NumberOfCores.cpp: include <sys/param.h> on the BSDs

2012-04-25  Kenneth Russell  <kbr@google.com>

        Delete CanvasPixelArray, ByteArray, JSByteArray and JSC code once unreferenced
        https://bugs.webkit.org/show_bug.cgi?id=83655

        Reviewed by Oliver Hunt.

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.xcodeproj/project.pbxproj:
        * wtf/ByteArray.cpp: Removed.
        * wtf/ByteArray.h: Removed.
        * wtf/CMakeLists.txt:

2012-04-25  Philippe Normand  <pnormand@igalia.com>

        Webkit build fails due to missing gstreamer include file on Kubuntu 8.04
        https://bugs.webkit.org/show_bug.cgi?id=81913

        Reviewed by Tor Arne Vestbø.

        * WTF.pri: GStreamer build support implies GLib support, as it's
        done in WebCore.pri.

2012-04-24  Benjamin Poulain  <bpoulain@apple.com>

        Generalize the single character optimization of r114072
        https://bugs.webkit.org/show_bug.cgi?id=83961

        Reviewed by Eric Seidel.

        This patch makes some improvment over String::find() in the case of lookup for a single
        character.

        The two function find(UChar|LChar) are replaced by a template.

        The case of searching a UChar in a 8bit string has a shortcut if the UChar cannot
        possibly match any character in the range of the type LChar.

        The slow case StringImpl::find(StringImpl*) is modified to
        -Do not allocate in the fast case if only one string is 8bit.
        -Use the shortcut for searching UChar in LChar.

        This speed up the function by about 7% when avoiding string conversion.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::find):
        * wtf/text/StringImpl.h:
        (StringImpl):
        (WTF):
        (WTF::find):
        (WTF::StringImpl::find):

2012-04-24  Darin Adler  <darin@apple.com>

        Iterating a HashMap<String, X> involves a string equality comparison to check for the empty value
        https://bugs.webkit.org/show_bug.cgi?id=84524

        Reviewed by Antti Koivisto.

        Added a new algorithm for checking for empty buckets that can be specialized.
        Specialized it for String. We may later want to do the same thing for KURL.
        It's not important to do it for AtomicString, since AtomicString's == function
        is already a simple pointer equality compare. We may also later want to do
        something similar for pairs that have String objects in them.

        * wtf/HashTable.h:
        (WTF::HashTable::isEmptyBucket): Call the new isHashTraitsEmptyValue function, which
        will do something more efficient for String.

        * wtf/HashTraits.h: Added hasIsEmptyValueFunction to hash traits, with a default value
        of false. This allows us to continue to get automatic comparison with the appropriate
        emptyValue result for all existing traits, but supply a custom isEmptyValue function
        for HashTraits<String>. Putting an isEmptyValue function into the traits would require
        overriding it in every class that has a custom value for emptyValue. Specialized
        HashTraits for String to add hasIsEmptyValueFunction and declare, but not define, the
        isEmptyValue function.
        (WTF::isHashTraitsEmptyValue): Added a function that uses the HashTraitsEmptyValueChecker
        struct to use either == combined with the emptyValue function or the isEmptyValue function.

        * wtf/text/StringHash.h: Removed unneeded includes and sorted the using statements at
        the bottom of the file.
        (WTF::HashTraits<String>::isEmptyValue): Define this function here, since here we have
        included the WTFString.h header; the HashTraits.h header compiles without WTFString.h.

2012-04-23  Kenneth Russell  <kbr@google.com>

        Change ImageData to reference Uint8ClampedArray rather than CanvasPixelArray
        https://bugs.webkit.org/show_bug.cgi?id=73011

        Reviewed by Oliver Hunt.

        * wtf/ArrayBuffer.h:
        (ArrayBuffer):
        (WTF::ArrayBuffer::create):
        (WTF::ArrayBuffer::createUninitialized):
        (WTF):
        (WTF::ArrayBufferContents::tryAllocate):
        * wtf/TypedArrayBase.h:
        (WTF::TypedArrayBase::createUninitialized):
        (TypedArrayBase):
        * wtf/Uint8ClampedArray.h:
        (Uint8ClampedArray):
        (WTF::Uint8ClampedArray::createUninitialized):
        (WTF):
        (WTF::Uint8ClampedArray::zeroFill):

2012-04-23  George Staikos  <staikos@webkit.org>

        Enable parallel GC for BlackBerry.
        https://bugs.webkit.org/show_bug.cgi?id=84633

        Reviewed by Antonio Gomes.

        * wtf/Platform.h:

2012-04-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r114914.
        http://trac.webkit.org/changeset/114914
        https://bugs.webkit.org/show_bug.cgi?id=84615

        Causing infinite hangs on some tests involving HashMaps with
        integer keys (Requested by dimich on #webkit).

        * wtf/HashTable.h:
        (WTF::HashTable::isEmptyBucket):
        * wtf/HashTraits.h:
        * wtf/text/StringHash.h:

2012-04-23  Darin Adler  <darin@apple.com>

        Iterating a HashMap<String, X> involves a string equality comparison to check for the empty value
        https://bugs.webkit.org/show_bug.cgi?id=84524

        Reviewed by Antti Koivisto.

        Added a new algorithm for checking for empty buckets that can be specialized.
        Specialized it for String. We may later want to do the same thing for KURL.
        It's not important to do it for AtomicString, since AtomicString's == function
        is already a simple pointer equality compare.

        * wtf/HashTable.h:
        (WTF::HashTable::isEmptyBucket): Call the new isHashTraitsEmptyValue function, which
        will do something more efficient for String.

        * wtf/HashTraits.h: Added hasIsEmptyValueFunction to hash traits, with a default value
        of false. This allows us to continue to get automatic comparison with the appropriate
        emptyValue result for all existing traits, but supply a custom isEmptyValue function
        for HashTraits<String>. Putting an isEmptyValue function into the traits would require
        overriding it in every class that has a custom value for emptyValue. Specialized
        HashTraits for String to add hasIsEmptyValueFunction and declare, but not define, the
        isEmptyValue function.
        (WTF::isHashTraitsEmptyValue): Added a function that uses the HashTraitsEmptyValueChecker
        struct to use either == combined with the emptyValue function or the isEmptyValue function.
        (PairHashTraits): Define hasIsEmptyValueFunction and isEmptyValue.

        * wtf/text/StringHash.h: Removed unneeded includes and sorted the using statements at
        the bottom of the file.
        (WTF::HashTraits<String>::isEmptyValue): Define this function here, since here we have
        included the WTFString.h header; the HashTraits.h header compiles without WTFString.h.

2012-04-18  Myles Maxfield  <mmaxfield@google.com>

        Somehow, there's an errant backslash in my last WTF patch
        https://bugs.webkit.org/show_bug.cgi?id=84290

        Reviewed by Andreas Kling.

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

2012-04-16  Nico Weber  <thakis@chromium.org>

        Make NullPtr.h compile with clang -std=c++11 and libstdc++4.2
        https://bugs.webkit.org/show_bug.cgi?id=83999

        Reviewed by Sam Weinig.

        Before this patch, NullPtr.h assumed that a working |nullptr| implied
        a working |std::nullptr_t| as well. With clang and libstdc++4.2, this
        is not true.

        I tested (-stdlib=libc++, -stdlib=libstdc++) x (-std=c++11, -std=c++03)
        with clang.

        * wtf/NullPtr.h:
        (std):

2012-04-14  Sam Weinig  <sam@webkit.org>

        Harden WTF::ByteArray::create()
        https://bugs.webkit.org/show_bug.cgi?id=83318

        Reviewed by Maciej Stachowiak.

        * wtf/ByteArray.cpp:
        (WTF::ByteArray::create):
        Add overflow check. I don't believe there is anyway to trigger this currently,
        hence no tests, so this should be considered hardening.

2012-04-12  Benjamin Poulain  <bpoulain@apple.com>

        Inline StringImpl::find(UChar, ...)
        https://bugs.webkit.org/show_bug.cgi?id=83737

        Reviewed by Geoffrey Garen.

        The implementation of StringImpl::find() is a simple branch before invoking one of
        two inline functions. The overhead of having a function for StringImpl::find() is significant.

        It is better to let the compiler decide if that should be inlined or not.

        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:
        (StringImpl):
        (WTF::find):
        (WTF):
        (WTF::reverseFind):
        (WTF::StringImpl::find):
        * wtf/text/WTFString.h:

2012-04-12  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Fix WebKit1 build with V8
        https://bugs.webkit.org/show_bug.cgi?id=83322

        Reviewed by Adam Barth.

        * wtf/StdLibExtras.h:
        (WTF):

2012-04-12  Jer Noble  <jer.noble@apple.com>

        ThreadingWin: Mutex::unlock() can be "over-unlocked".
        https://bugs.webkit.org/show_bug.cgi?id=83725

        Reviewed by David Levin.

        In order to support the behavior of pthread_mutex_trylock(), the Windows Mutex class includes
        a recursion counter which is incremented in Mutex::lock(), decremented in Mutex::unlock(),
        and checked in Mutex::tryLock().  If the mutex is "over-unlocked", the counter wraps around to
        MAX_INT, and subsequent calls to Mutex::trylock() will fail. Raise an ASSERT in this situation
        so the "over-unlock" will be caught.

        * wtf/ThreadingWin.cpp:
        (WTF::Mutex::unlock): ASSERT if unlocking a non-locked mutex.

2012-04-10  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/10583749> WebKit2 should log to both ASL and stderr

        Reviewed by Sam Weinig.

        * wtf/Assertions.cpp: Add a WTFLogAlways function that unconditionally logs the given message.
        * wtf/Assertions.h:

2012-04-10  Patrick Gansterer  <paroga@webkit.org>

        Cleanup wtf/Platform.h and config.h files
        https://bugs.webkit.org/show_bug.cgi?id=83431

        Reviewed by Eric Seidel.

        The ENABLE() and USE() macros take care about the case when the flag
        isn't defined. So there is no need to define anything with 0.

        Also move duplicated code from the config.h files to Platform.h and
        merge a few preprocessor commands to make the file more readable.

        * config.h:
        * wtf/Platform.h:

2012-04-10  Filip Pizlo  <fpizlo@apple.com>

        DFG should flush SetLocals to arguments
        https://bugs.webkit.org/show_bug.cgi?id=83554

        Reviewed by Gavin Barraclough.
        
        Added an isRoot() method that is a faster shorthand for saying
        find() == this.

        * wtf/UnionFind.h:
        (WTF::UnionFind::isRoot):
        (UnionFind):

2012-04-10  Adam Klein  <adamk@chromium.org>

        Remove unused NonNullPassRefPtr from WTF
        https://bugs.webkit.org/show_bug.cgi?id=82389

        Reviewed by Kentaro Hara.

        NonNullPassRefPtr seems to be unused since JSC allocation was
        restructured in r84052.

        If someone decides they need this later, they can always revert this patch.

        * wtf/PassRefPtr.h:
        * wtf/RefPtr.h:
        (RefPtr):

2012-04-10  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Enable USE_FOLDERS property
        https://bugs.webkit.org/show_bug.cgi?id=83571

        Reviewed by Daniel Bates.

        Setting the FOLDER property on targets gives more structure 
        to the generated Visual Studio solutions.
        This does not affect other CMake generators.

        * wtf/CMakeLists.txt:

2012-04-09  Patrick Gansterer  <paroga@webkit.org>

        Port BinarySemaphoreWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=83502

        Reviewed by Daniel Bates.

        Replace WaitForSingleObjectEx with WaitForSingleObject since
        the additonal parameter supported by the extended function
        is not used anyway and the function does not exist on WinCE.

        * wtf/CMakeLists.txt:
        * wtf/PlatformWinCE.cmake:
        * wtf/threads/win/BinarySemaphoreWin.cpp:
        (WTF::BinarySemaphore::wait):

2012-04-09  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Build fix for USE_SYSTEM_MALLOC after r113570.

        * wtf/CMakeLists.txt:

2012-04-09  Patrick Gansterer  <paroga@webkit.org>

        Remove HAVE_STDINT_H
        https://bugs.webkit.org/show_bug.cgi?id=83434

        Reviewed by Kentaro Hara.

        HAVE_STDINT_H is defined with 1 all the time and we us stdint.h without HAVE(STDINT_H) already.

        * config.h:
        * wtf/FastMalloc.cpp:
        * wtf/TCPageMap.h:
        * wtf/TCSpinLock.h:
        * wtf/TCSystemAlloc.cpp:

2012-04-06  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of the useless flag PREEMPT_GEOLOCATION_PERMISSION
        https://bugs.webkit.org/show_bug.cgi?id=83325

        Reviewed by Ryosuke Niwa.

        * wtf/Platform.h: Remove the flag.

2012-04-06  Darin Adler  <darin@apple.com>

        Streamline strtod and fix some related problems
        https://bugs.webkit.org/show_bug.cgi?id=82857

        Reviewed by Geoffrey Garen.

        Replaced the strtod function template with a parseDouble function, eliminating
        the following unneeded features:

        - need for a trailing null character and a call to strlen
        - needless conversion of string lengths from size_t to int and back that created
          the possibility of incorrect truncation
        - one level of function call; use inlining instead
        - construction of the StringToDoubleConverter object; it was used to pass
          arguments that are known at compile time
        - most of the StringToDoubleConverter::StringToDouble function's body; it was
          code we did not need
        - parsing of Infinity and NaN at the strtod level; added recently when we moved
          from the old strtod to the new one, and not needed or helpful at this level
        - multiple copies of code to narrow to single byte strings; in many cases
          this was done even when starting with an LChar string that is already
          single-byte, now we handle this with an overload of parseDouble

        * wtf/dtoa.cpp:
        Removed a long comment about the original strtod function that no longer
        applies since we deleted that function long ago. Removed a lot of includes.
        Removed the strtod function templates and its instantiations, since they
        are now replaced by the parseDouble function.
        (WTF::Internal::parseDoubleFromLongString): Added.
        * wtf/dtoa.h:
        Added an include of ASCIICType.h so we can use isASCII in a function in this
        header. Left the heretofore unneeded include of double-conversion.h, since we
        now want to use it in a function in this header. Removed the AllowTrailingJunkTag
        and AllowTrailingSpacesTag enumerations and the strtod function template. Added
        new parseDouble function, and inline implementation of it.

        * wtf/dtoa/double-conversion.cc: Removed quite a bit of unused code, hardcoding
        all the StringToDouble function arguments that come from data members so it can
        be a much smaller static member function. Also changed the types of arguments
        from int to size_t.
        * wtf/dtoa/double-conversion.h: Removed most of the StringToDoubleConverter
        class, leaving only the conversion function as a static member function.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::toDouble): Got rid of didReadNumber.
        (WTF::StringImpl::toFloat): Ditto.
        * wtf/text/StringImpl.h: Ditto.
        * wtf/text/WTFString.cpp:
        (WTF::String::toDouble): Got rid of didReadNumber.
        (WTF::String::toFloat): Ditto.
        (WTF::toDoubleType): Rewrote this function to use parseDouble. Moved the code
        to skip leading spaces here, because other callers of parseDouble don't want
        to do that. Repurposed the check for an empty string so it's now the same
        code shared by all the "parsed nothing" cases. Removed the code to convert
        the buffer to ASCII for two reasons: (1) We don't need that code at all when
        CharType is LChar, and (2) We now handle this through the two overloads for
        the parseDouble function. Disallowing trailing junk is now handled here,
        rather than inside parseDouble.
        (WTF::charactersToDouble): Updated for changes to toDoubleType. Removed the
        didReadNumber argument.
        (WTF::charactersToFloat): Ditto. Also added overloads that return the parsed
        length. These are a slightly more powerful way to do what didReadNumber was
        used for before.

        * wtf/text/WTFString.h: Added comments, eliminated didReadNumber, and added
        overloads of charactersToFloat that replace charactersToFloatIgnoringJunk.

2012-04-05  Patrick Gansterer  <paroga@webkit.org>

        [WinCE] Remove unnecessary function decleration
        https://bugs.webkit.org/show_bug.cgi?id=83155

        Reviewed by Kentaro Hara.

        * wtf/DateMath.cpp:
        * wtf/Platform.h:

2012-04-04  Patrick Gansterer  <paroga@webkit.org>

        Add WTF::getCurrentLocalTime()
        https://bugs.webkit.org/show_bug.cgi?id=83164

        Reviewed by Alexey Proskuryakov.

        Replace the calls to WTF::getLocalTime() with time(0) with the new function.
        This allows us to use Win32 API on windows to get the same result in a next step.

        Also remove the inline keyword from WTF::getLocalTime(), since there is no need for
        it and it will make the later Win32 API changes easier.

        * WTF.gyp/WTF.gyp:
        * wtf/CurrentTime.cpp:
        (WTF::getLocalTime):
        (WTF::getCurrentLocalTime):
        * wtf/CurrentTime.h:

2012-04-04  Chris Rogers  <crogers@google.com>

        Web Audio should use MutexTryLocker class
        https://bugs.webkit.org/show_bug.cgi?id=83194

        Reviewed by Kenneth Russell.

        Add MutexTryLocker class which can be used as a stack-based object wrapping a Mutex.
        It will automatically unlock the Mutex in its destructor if the tryLock() succeeded.

        * wtf/ThreadingPrimitives.h:
        (MutexTryLocker):
        (WTF::MutexTryLocker::MutexTryLocker):
        (WTF::MutexTryLocker::~MutexTryLocker):
        (WTF::MutexTryLocker::locked):
        Check if the tryLock() on the Mutex succeeded.
        (WTF):

2012-04-04  Kausalya Madhusudhanan  <kmadhusu@chromium.org>

        [Coverity] Address some uninit constructor values.
        https://bugs.webkit.org/show_bug.cgi?id=82424

        Reviewed by Stephen White.

        New tests are not required since I did not modify any code behavior. I just initialized the class member variables in the constructor.

        * wtf/ArrayBufferView.cpp:
        (WTF::ArrayBufferView::ArrayBufferView):

2012-03-30  David Barr  <davidbarr@chromium.org>

        Split up top-level .gitignore and .gitattributes
        https://bugs.webkit.org/show_bug.cgi?id=82687

        Reviewed by Tor Arne Vestbø.

        * WTF.gyp/.gitignore: Added.

2012-03-29  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add export symbols needed to
        build wx under Windows.
        
        * wtf/NullPtr.h:
        * wtf/ParallelJobsGeneric.h:
        (ParallelEnvironment):
        * wtf/ThreadSpecific.h:
        (WTF):

2012-03-29  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add WTF_EXPORT_PRIVATE_NO_RTTI
        so that ports not using RTTI can add symbol exports to
        classes that RTTI ports export with WTF_EXPORT_PRIVATE_RTTI.

        * wtf/ArrayBufferView.h:
        * wtf/ExportMacros.h:

2012-03-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        HashMap<>::add should return a more descriptive object
        https://bugs.webkit.org/show_bug.cgi?id=71063

        Reviewed by Ryosuke Niwa.

        Make HashTable<>::add() and derivate functions return an AddResult struct instead
        of a pair. This struct contains contains 'iterator' and 'isNewEntry' members, that are
        more readable at callsites than previous 'first' and 'second'.

        * wtf/HashCountedSet.h:
        (HashCountedSet):
        (WTF::::add):
        * wtf/HashMap.h:
        (HashMap):
        (WTF):
        (WTF::::set):
        * wtf/HashSet.h:
        (HashSet):
        (WTF::::add):
        (WTF):
        * wtf/HashTable.h:
        (WTF::HashTableAddResult::HashTableAddResult):
        (HashTableAddResult):
        (WTF):
        (HashTable):
        (WTF::HashTable::add):
        (WTF::::add):
        (WTF::::addPassingHashCode):
        * wtf/ListHashSet.h:
        (ListHashSet):
        (WTF::::add):
        (WTF::::insertBefore):
        * wtf/RefPtrHashMap.h:
        (WTF):
        (WTF::::set):
        * wtf/Spectrum.h:
        (WTF::Spectrum::add):
        * wtf/WTFThreadData.cpp:
        (JSC::IdentifierTable::add):
        * wtf/WTFThreadData.h:
        (IdentifierTable):
        * wtf/text/AtomicString.cpp:
        (WTF::addToStringTable):
        (WTF::AtomicString::addSlowCase):

2012-03-29  Andreas Kling  <kling@webkit.org>

        String: Subscript operator shouldn't force conversion to 16-bit characters.
        <http://webkit.org/b/82613>

        Reviewed by Anders Carlsson.

        Forward String::operator[] to StringImpl::operator[] instead of indexing into characters().
        This avoid implicit conversion of 8-bit strings to 16-bit, and as an example, reduces memory
        usage on http://www.allthingsd.com/ by 360kB.

        * wtf/text/WTFString.h:
        (WTF::String::operator[]):

2012-03-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement PlatformStrategies
        https://bugs.webkit.org/show_bug.cgi?id=82454

        Reviewed by Xan Lopez.

        * wtf/Platform.h: Define WTF_USE_PLATFORM_STRATEGIES for GTK+
        platform too.

2012-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        Set eol-style: native on WTF.sln per Ryan Sleevi's request.

        * WTF.vcproj/WTF.sln: Added property svn:eol-style.

2012-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        Chromium build fix; add BitVector.h/cpp to gypi.

        * WTF.gypi:

2012-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        Touch BitVector as a speculative fix for Chromium Linux.

        * wtf/BitVector.h:
        (BitVector):

2012-03-23  Ryosuke Niwa  <rniwa@webkit.org>

        cssText should use shorthand notations
        https://bugs.webkit.org/show_bug.cgi?id=81737

        Reviewed by Enrica Casucci.

        * wtf/BitVector.h:
        (BitVector):
        (WTF::BitVector::ensureSizeAndSet): Added.

2012-03-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add config.h to the source file list.

2012-03-25  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Move WTF to its own static lib build.

        * wscript: Added.

2012-03-23  Tony Chang  <tony@chromium.org>

        [chromium] Unreviewed, move a comment closer to where it matters and
        make it more specific.

        * WTF.gyp/WTF.gyp:

2012-03-23  Steve Falkenburg  <sfalken@apple.com>

        Update Apple Windows build files for WTF move
        https://bugs.webkit.org/show_bug.cgi?id=82069

        Reviewed by Jessie Berlin.

        * WTF.vcproj/WTF.make: Added.
        * WTF.vcproj/WTF.sln: Added.

2012-03-23  Dean Jackson  <dino@apple.com>

        Disable CSS_SHADERS in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=81996

        Reviewed by Simon Fraser.

        Put ENABLE_CSS_SHADERS into Platform.h, but disable for
        Apple builds.

        * wtf/Platform.h:

2012-03-23  Tony Chang  <tony@chromium.org>

        [chromium] rename newwtf target back to wtf
        https://bugs.webkit.org/show_bug.cgi?id=82064

        Reviewed by Adam Barth.

        * WTF.gyp/WTF.gyp:

2012-03-22  Jessie Berlin  <jberlin@apple.com>

        Windows build fix after r111778.

        * WTF.vcproj/WTF.vcproj:
        DateMath.h and DateMath.cpp should be built by WTF, since they are part of WTF.

2012-03-22  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [CMake] Unreviewed build fix after r111778.

        * CMakeLists.txt: Added.
        * wtf/CMakeLists.txt: Add ${CMAKE_BINARY_DIR} to the include paths
        for cmakeconfig.h to be found.

2012-03-22  Tony Chang  <tony@chromium.org>

        Unreviewed, attempt to fix the chromium-win build and another attempt
        at fixing the chromium-android build.

        * WTF.gyp/WTF.gyp:

2012-03-22  Tony Chang  <tony@chromium.org>

        Unreviewed, attempt to fix chromium-android build.

        * WTF.gyp/WTF.gyp:

2012-03-22  Tony Chang  <tony@chromium.org>

        Unreviewed, fix chromium build after wtf move.

        Move wtf_config and wtf settings to newwtf.

        * WTF.gyp/WTF.gyp:

2012-03-22  Martin Robinson  <mrobinson@igalia.com>

        One more GTK+ build fix after r111778.

        * GNUmakefile.am: Adding missing include path.

2012-03-22  Martin Robinson  <mrobinson@igalia.com>

        Fixed the GTK+ WTF/JavaScriptCore build after r111778.

        * GNUmakefile.am: Remove some extra trailing backslashes and a few uncessary
          variables.
        * GNUmakefile.list.am: Ditto.

2012-03-22  Dan Bernstein  <mitz@apple.com>

        Fixed the JavaScriptCore debug build after r111778.

        * WTF.xcodeproj/project.pbxproj: Use debug DEBUG_DEFINES when building
        the Debug configuration.

2012-03-22  Csaba Osztrogonác  <ossy@webkit.org>

        Actually move WTF files to their new home
        https://bugs.webkit.org/show_bug.cgi?id=81844

        [Qt] Unreviewed buildfix after r111778.

        * WTF.pri:

2012-03-22  Eric Seidel  <eric@webkit.org>

        Actually move WTF files to their new home
        https://bugs.webkit.org/show_bug.cgi?id=81844

        Unreviewed attempt to fix AppleWin.

        * WTF.vcproj/WTFCommon.vsprops:

2012-03-22  Eric Seidel  <eric@webkit.org>

        Actually move WTF files to their new home
        https://bugs.webkit.org/show_bug.cgi?id=81844

        Unreviewed.  The 5MB file move is not very reviewable,
        but various port representatives have OK'd changes to the
        individual build systems.

        * Configurations/WTF.xcconfig:
        * GNUmakefile.list.am:
        * Stub.cpp: Removed.
        * Stub.h: Removed.
        * WTF.gypi:
        * WTF.pri:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.vcproj/copy-files.cmd:
        * WTF.xcodeproj/project.pbxproj:
        * config.h:
        * wtf/ASCIICType.h: Renamed from Source/JavaScriptCore/wtf/ASCIICType.h.
        (WTF):
        (WTF::isASCII):
        (WTF::isASCIIAlpha):
        (WTF::isASCIIDigit):
        (WTF::isASCIIAlphanumeric):
        (WTF::isASCIIHexDigit):
        (WTF::isASCIILower):
        (WTF::isASCIIOctalDigit):
        (WTF::isASCIIPrintable):
        (WTF::isASCIISpace):
        (WTF::isASCIIUpper):
        (WTF::toASCIILower):
        (WTF::toASCIILowerUnchecked):
        (WTF::toASCIIUpper):
        (WTF::toASCIIHexValue):
        (WTF::lowerNibbleToASCIIHexDigit):
        (WTF::upperNibbleToASCIIHexDigit):
        (WTF::isASCIIAlphaCaselessEqual):
        * wtf/AVLTree.h: Renamed from Source/JavaScriptCore/wtf/AVLTree.h.
        (WTF):
        (AVLTreeDefaultBSet):
        (WTF::AVLTreeDefaultBSet::operator[]):
        (WTF::AVLTreeDefaultBSet::set):
        (WTF::AVLTreeDefaultBSet::reset):
        (AVLTree):
        (WTF::AVLTree::abstractor):
        (WTF::AVLTree::purge):
        (WTF::AVLTree::is_empty):
        (WTF::AVLTree::AVLTree):
        (Iterator):
        (WTF::AVLTree::Iterator::Iterator):
        (WTF::AVLTree::Iterator::start_iter):
        (WTF::AVLTree::Iterator::start_iter_least):
        (WTF::AVLTree::Iterator::start_iter_greatest):
        (WTF::AVLTree::Iterator::operator*):
        (WTF::AVLTree::Iterator::operator++):
        (WTF::AVLTree::Iterator::operator--):
        (WTF::AVLTree::Iterator::cmp_k_n):
        (WTF::AVLTree::Iterator::cmp_n_n):
        (WTF::AVLTree::Iterator::get_lt):
        (WTF::AVLTree::Iterator::get_gt):
        (WTF::AVLTree::Iterator::null):
        (WTF::AVLTree::build):
        (abs_plus_root):
        (WTF::AVLTree::get_lt):
        (WTF::AVLTree::set_lt):
        (WTF::AVLTree::get_gt):
        (WTF::AVLTree::set_gt):
        (WTF::AVLTree::get_bf):
        (WTF::AVLTree::set_bf):
        (WTF::AVLTree::cmp_k_n):
        (WTF::AVLTree::cmp_n_n):
        (WTF::AVLTree::null):
        (WTF::AVLTree::balance):
        (WTF::::insert):
        (WTF::::search):
        (WTF::::search_least):
        (WTF::::search_greatest):
        (WTF::::remove):
        (WTF::::subst):
        * wtf/Alignment.h: Renamed from Source/JavaScriptCore/wtf/Alignment.h.
        (WTF):
        (WTF::swap):
        * wtf/AlwaysInline.h: Renamed from Source/JavaScriptCore/wtf/AlwaysInline.h.
        * wtf/ArrayBuffer.cpp: Renamed from Source/JavaScriptCore/wtf/ArrayBuffer.cpp.
        (WTF):
        (WTF::ArrayBuffer::transfer):
        (WTF::ArrayBuffer::addView):
        (WTF::ArrayBuffer::removeView):
        * wtf/ArrayBuffer.h: Renamed from Source/JavaScriptCore/wtf/ArrayBuffer.h.
        (WTF):
        (ArrayBufferContents):
        (WTF::ArrayBufferContents::ArrayBufferContents):
        (WTF::ArrayBufferContents::data):
        (WTF::ArrayBufferContents::sizeInBytes):
        (WTF::ArrayBufferContents::transfer):
        (ArrayBuffer):
        (WTF::ArrayBuffer::isNeutered):
        (WTF::ArrayBuffer::~ArrayBuffer):
        (WTF::ArrayBuffer::clampValue):
        (WTF::ArrayBuffer::create):
        (WTF::ArrayBuffer::ArrayBuffer):
        (WTF::ArrayBuffer::data):
        (WTF::ArrayBuffer::byteLength):
        (WTF::ArrayBuffer::slice):
        (WTF::ArrayBuffer::sliceImpl):
        (WTF::ArrayBuffer::clampIndex):
        (WTF::ArrayBufferContents::tryAllocate):
        (WTF::ArrayBufferContents::~ArrayBufferContents):
        * wtf/ArrayBufferView.cpp: Renamed from Source/JavaScriptCore/wtf/ArrayBufferView.cpp.
        (WTF):
        (WTF::ArrayBufferView::ArrayBufferView):
        (WTF::ArrayBufferView::~ArrayBufferView):
        (WTF::ArrayBufferView::neuter):
        * wtf/ArrayBufferView.h: Renamed from Source/JavaScriptCore/wtf/ArrayBufferView.h.
        (WTF):
        (WTF::ArrayBufferView::setImpl):
        (WTF::ArrayBufferView::setRangeImpl):
        (WTF::ArrayBufferView::zeroRangeImpl):
        (WTF::ArrayBufferView::calculateOffsetAndLength):
        * wtf/Assertions.cpp: Renamed from Source/JavaScriptCore/wtf/Assertions.cpp.
        * wtf/Assertions.h: Renamed from Source/JavaScriptCore/wtf/Assertions.h.
        (assertUnused):
        (assertWithMessageUnused):
        * wtf/Atomics.h: Renamed from Source/JavaScriptCore/wtf/Atomics.h.
        (WTF):
        (WTF::atomicIncrement):
        (WTF::atomicDecrement):
        (WTF::weakCompareAndSwap):
        (WTF::weakCompareAndSwapUIntPtr):
        * wtf/BitVector.cpp: Renamed from Source/JavaScriptCore/wtf/BitVector.cpp.
        (WTF):
        (WTF::BitVector::setSlow):
        (WTF::BitVector::resize):
        (WTF::BitVector::clearAll):
        (WTF::BitVector::OutOfLineBits::create):
        (WTF::BitVector::OutOfLineBits::destroy):
        (WTF::BitVector::resizeOutOfLine):
        (WTF::BitVector::dump):
        * wtf/BitVector.h: Renamed from Source/JavaScriptCore/wtf/BitVector.h.
        (WTF):
        (BitVector):
        (WTF::BitVector::BitVector):
        (WTF::BitVector::~BitVector):
        (WTF::BitVector::operator=):
        (WTF::BitVector::size):
        (WTF::BitVector::ensureSize):
        (WTF::BitVector::quickGet):
        (WTF::BitVector::quickSet):
        (WTF::BitVector::quickClear):
        (WTF::BitVector::get):
        (WTF::BitVector::set):
        (WTF::BitVector::clear):
        (WTF::BitVector::bitsInPointer):
        (WTF::BitVector::maxInlineBits):
        (WTF::BitVector::byteCount):
        (WTF::BitVector::makeInlineBits):
        (OutOfLineBits):
        (WTF::BitVector::OutOfLineBits::numBits):
        (WTF::BitVector::OutOfLineBits::numWords):
        (WTF::BitVector::OutOfLineBits::bits):
        (WTF::BitVector::OutOfLineBits::OutOfLineBits):
        (WTF::BitVector::isInline):
        (WTF::BitVector::outOfLineBits):
        (WTF::BitVector::bits):
        * wtf/Bitmap.h: Renamed from Source/JavaScriptCore/wtf/Bitmap.h.
        (WTF):
        (Bitmap):
        (WTF::::Bitmap):
        (WTF::::get):
        (WTF::::set):
        (WTF::::testAndSet):
        (WTF::::testAndClear):
        (WTF::::concurrentTestAndSet):
        (WTF::::concurrentTestAndClear):
        (WTF::::clear):
        (WTF::::clearAll):
        (WTF::::nextPossiblyUnset):
        (WTF::::findRunOfZeros):
        (WTF::::count):
        (WTF::::isEmpty):
        (WTF::::isFull):
        * wtf/BlockStack.h: Renamed from Source/JavaScriptCore/wtf/BlockStack.h.
        (WTF):
        (BlockStack):
        (WTF::::BlockStack):
        (WTF::::~BlockStack):
        (WTF::::blocks):
        (WTF::::grow):
        (WTF::::shrink):
        * wtf/BloomFilter.h: Renamed from Source/JavaScriptCore/wtf/BloomFilter.h.
        (WTF):
        (BloomFilter):
        (WTF::BloomFilter::maximumCount):
        (WTF::BloomFilter::BloomFilter):
        (WTF::BloomFilter::mayContain):
        (WTF::BloomFilter::add):
        (WTF::BloomFilter::remove):
        (WTF::BloomFilter::firstSlot):
        (WTF::BloomFilter::secondSlot):
        (WTF::::add):
        (WTF::::remove):
        (WTF::::clear):
        (WTF::::likelyEmpty):
        (WTF::::isClear):
        * wtf/BoundsCheckedPointer.h: Renamed from Source/JavaScriptCore/wtf/BoundsCheckedPointer.h.
        (WTF):
        (BoundsCheckedPointer):
        (WTF::BoundsCheckedPointer::BoundsCheckedPointer):
        (WTF::BoundsCheckedPointer::operator=):
        (WTF::BoundsCheckedPointer::operator+=):
        (WTF::BoundsCheckedPointer::operator-=):
        (WTF::BoundsCheckedPointer::operator+):
        (WTF::BoundsCheckedPointer::operator-):
        (WTF::BoundsCheckedPointer::operator++):
        (WTF::BoundsCheckedPointer::operator--):
        (WTF::BoundsCheckedPointer::operator<):
        (WTF::BoundsCheckedPointer::operator<=):
        (WTF::BoundsCheckedPointer::operator>):
        (WTF::BoundsCheckedPointer::operator>=):
        (WTF::BoundsCheckedPointer::operator==):
        (WTF::BoundsCheckedPointer::operator!=):
        (WTF::BoundsCheckedPointer::operator!):
        (WTF::BoundsCheckedPointer::get):
        (WTF::BoundsCheckedPointer::operator*):
        (WTF::BoundsCheckedPointer::operator[]):
        (WTF::BoundsCheckedPointer::strcat):
        (WTF::BoundsCheckedPointer::validate):
        * wtf/BumpPointerAllocator.h: Renamed from Source/JavaScriptCore/wtf/BumpPointerAllocator.h.
        (WTF):
        (BumpPointerPool):
        (WTF::BumpPointerPool::ensureCapacity):
        (WTF::BumpPointerPool::alloc):
        (WTF::BumpPointerPool::dealloc):
        (WTF::BumpPointerPool::operator new):
        (WTF::BumpPointerPool::BumpPointerPool):
        (WTF::BumpPointerPool::create):
        (WTF::BumpPointerPool::shrink):
        (WTF::BumpPointerPool::destroy):
        (WTF::BumpPointerPool::ensureCapacityCrossPool):
        (WTF::BumpPointerPool::deallocCrossPool):
        (BumpPointerAllocator):
        (WTF::BumpPointerAllocator::BumpPointerAllocator):
        (WTF::BumpPointerAllocator::~BumpPointerAllocator):
        (WTF::BumpPointerAllocator::startAllocator):
        (WTF::BumpPointerAllocator::stopAllocator):
        * wtf/ByteArray.cpp: Renamed from Source/JavaScriptCore/wtf/ByteArray.cpp.
        (WTF):
        (WTF::ByteArray::create):
        * wtf/ByteArray.h: Renamed from Source/JavaScriptCore/wtf/ByteArray.h.
        (ByteArray):
        (WTF::ByteArray::length):
        (WTF::ByteArray::set):
        (WTF::ByteArray::get):
        (WTF::ByteArray::data):
        (WTF::ByteArray::clear):
        (WTF::ByteArray::deref):
        (WTF::ByteArray::offsetOfSize):
        (WTF::ByteArray::offsetOfData):
        (WTF::ByteArray::ByteArray):
        * wtf/CMakeLists.txt: Renamed from Source/JavaScriptCore/wtf/CMakeLists.txt.
        * wtf/CONTRIBUTORS.pthreads-win32: Renamed from Source/JavaScriptCore/wtf/CONTRIBUTORS.pthreads-win32.
        * wtf/CheckedArithmetic.h: Renamed from Source/JavaScriptCore/wtf/CheckedArithmetic.h.
        (WTF):
        (CrashOnOverflow):
        (WTF::CrashOnOverflow::overflowed):
        (WTF::CrashOnOverflow::clearOverflow):
        (WTF::CrashOnOverflow::hasOverflowed):
        (RecordOverflow):
        (WTF::RecordOverflow::RecordOverflow):
        (WTF::RecordOverflow::overflowed):
        (WTF::RecordOverflow::clearOverflow):
        (WTF::RecordOverflow::hasOverflowed):
        (WTF::isInBounds):
        (RemoveChecked):
        (WTF::safeAdd):
        (WTF::safeSub):
        (WTF::safeMultiply):
        (WTF::safeEquals):
        (WTF::workAroundClangBug):
        (Checked):
        (WTF::Checked::Checked):
        (WTF::Checked::operator=):
        (WTF::Checked::operator++):
        (WTF::Checked::operator--):
        (WTF::Checked::operator!):
        (WTF::Checked::operator UnspecifiedBoolType*):
        (WTF::Checked::unsafeGet):
        (WTF::Checked::operator+=):
        (WTF::Checked::operator-=):
        (WTF::Checked::operator*=):
        (WTF::Checked::operator==):
        (WTF::Checked::operator!=):
        (WTF::operator+):
        (WTF::operator-):
        (WTF::operator*):
        * wtf/CheckedBoolean.h: Renamed from Source/JavaScriptCore/wtf/CheckedBoolean.h.
        (CheckedBoolean):
        (CheckedBoolean::CheckedBoolean):
        (CheckedBoolean::~CheckedBoolean):
        (CheckedBoolean::operator bool):
        * wtf/Compiler.h: Renamed from Source/JavaScriptCore/wtf/Compiler.h.
        * wtf/Complex.h: Renamed from Source/JavaScriptCore/wtf/Complex.h.
        (WTF):
        (WTF::complexFromMagnitudePhase):
        * wtf/CryptographicallyRandomNumber.cpp: Renamed from Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.cpp.
        (WTF::cryptographicallyRandomNumber):
        (WTF):
        (WTF::cryptographicallyRandomValues):
        * wtf/CryptographicallyRandomNumber.h: Renamed from Source/JavaScriptCore/wtf/CryptographicallyRandomNumber.h.
        (WTF):
        * wtf/CurrentTime.cpp: Renamed from Source/JavaScriptCore/wtf/CurrentTime.cpp.
        (WTF):
        (WTF::highResUpTime):
        (WTF::lowResUTCTime):
        (WTF::qpcAvailable):
        (WTF::currentTime):
        (WTF::currentSystemTime):
        (WTF::monotonicallyIncreasingTime):
        * wtf/CurrentTime.h: Renamed from Source/JavaScriptCore/wtf/CurrentTime.h.
        (WTF):
        (WTF::currentTimeMS):
        (WTF::getLocalTime):
        * wtf/DataLog.cpp: Renamed from Source/JavaScriptCore/wtf/DataLog.cpp.
        (WTF):
        (WTF::initializeLogFileOnce):
        (WTF::initializeLogFile):
        (WTF::dataFile):
        (WTF::dataLogV):
        (WTF::dataLog):
        * wtf/DataLog.h: Renamed from Source/JavaScriptCore/wtf/DataLog.h.
        (WTF):
        * wtf/DateMath.cpp: Renamed from Source/JavaScriptCore/wtf/DateMath.cpp.
        (WTF):
        (WTF::isLeapYear):
        (WTF::daysInYear):
        (WTF::daysFrom1970ToYear):
        (WTF::msToDays):
        (WTF::twoDigitStringFromNumber):
        (WTF::msToYear):
        (WTF::dayInYear):
        (WTF::msToMilliseconds):
        (WTF::msToMinutes):
        (WTF::msToHours):
        (WTF::monthFromDayInYear):
        (WTF::checkMonth):
        (WTF::dayInMonthFromDayInYear):
        (WTF::monthToDayInYear):
        (WTF::dateToDaysFrom1970):
        (WTF::maximumYearForDST):
        (WTF::minimumYearForDST):
        (WTF::equivalentYearForDST):
        (WTF::calculateUTCOffset):
        (WTF::calculateDSTOffsetSimple):
        (WTF::calculateDSTOffset):
        (WTF::initializeDates):
        (WTF::ymdhmsToSeconds):
        (KnownZone):
        (WTF::skipSpacesAndComments):
        (WTF::findMonth):
        (WTF::parseLong):
        (WTF::parseES5DatePortion):
        (WTF::parseES5TimePortion):
        (WTF::parseES5DateFromNullTerminatedCharacters):
        (WTF::parseDateFromNullTerminatedCharacters):
        (WTF::timeClip):
        (WTF::makeRFC2822DateString):
        * wtf/DateMath.h: Renamed from Source/JavaScriptCore/wtf/DateMath.h.
        (WTF):
        (WTF::jsCurrentTime):
        * wtf/DecimalNumber.cpp: Renamed from Source/JavaScriptCore/wtf/DecimalNumber.cpp.
        (WTF):
        (WTF::DecimalNumber::bufferLengthForStringDecimal):
        (WTF::DecimalNumber::bufferLengthForStringExponential):
        (WTF::DecimalNumber::toStringDecimal):
        (WTF::DecimalNumber::toStringExponential):
        * wtf/DecimalNumber.h: Renamed from Source/JavaScriptCore/wtf/DecimalNumber.h.
        (WTF):
        (DecimalNumber):
        (WTF::DecimalNumber::DecimalNumber):
        (WTF::DecimalNumber::sign):
        (WTF::DecimalNumber::exponent):
        (WTF::DecimalNumber::significand):
        (WTF::DecimalNumber::precision):
        * wtf/Decoder.h: Renamed from Source/JavaScriptCore/wtf/Decoder.h.
        (WTF):
        (Decoder):
        (WTF::Decoder::Decoder):
        (WTF::Decoder::~Decoder):
        * wtf/Deque.h: Renamed from Source/JavaScriptCore/wtf/Deque.h.
        (WTF):
        (Deque):
        (WTF::Deque::size):
        (WTF::Deque::isEmpty):
        (WTF::Deque::begin):
        (WTF::Deque::end):
        (WTF::Deque::rbegin):
        (WTF::Deque::rend):
        (WTF::Deque::first):
        (WTF::Deque::last):
        (DequeIteratorBase):
        (WTF::DequeIteratorBase::assign):
        (DequeIterator):
        (WTF::DequeIterator::DequeIterator):
        (WTF::DequeIterator::operator=):
        (WTF::DequeIterator::operator*):
        (WTF::DequeIterator::operator->):
        (WTF::DequeIterator::operator==):
        (WTF::DequeIterator::operator!=):
        (WTF::DequeIterator::operator++):
        (WTF::DequeIterator::operator--):
        (DequeConstIterator):
        (WTF::DequeConstIterator::DequeConstIterator):
        (WTF::DequeConstIterator::operator=):
        (WTF::DequeConstIterator::operator*):
        (WTF::DequeConstIterator::operator->):
        (WTF::DequeConstIterator::operator==):
        (WTF::DequeConstIterator::operator!=):
        (WTF::DequeConstIterator::operator++):
        (WTF::DequeConstIterator::operator--):
        (DequeReverseIterator):
        (WTF::DequeReverseIterator::DequeReverseIterator):
        (WTF::DequeReverseIterator::operator=):
        (WTF::DequeReverseIterator::operator*):
        (WTF::DequeReverseIterator::operator->):
        (WTF::DequeReverseIterator::operator==):
        (WTF::DequeReverseIterator::operator!=):
        (WTF::DequeReverseIterator::operator++):
        (WTF::DequeReverseIterator::operator--):
        (DequeConstReverseIterator):
        (WTF::DequeConstReverseIterator::DequeConstReverseIterator):
        (WTF::DequeConstReverseIterator::operator=):
        (WTF::DequeConstReverseIterator::operator*):
        (WTF::DequeConstReverseIterator::operator->):
        (WTF::DequeConstReverseIterator::operator==):
        (WTF::DequeConstReverseIterator::operator!=):
        (WTF::DequeConstReverseIterator::operator++):
        (WTF::DequeConstReverseIterator::operator--):
        (WTF::::checkValidity):
        (WTF::::checkIndexValidity):
        (WTF::::invalidateIterators):
        (WTF::::Deque):
        (WTF::deleteAllValues):
        (WTF::=):
        (WTF::::destroyAll):
        (WTF::::~Deque):
        (WTF::::swap):
        (WTF::::clear):
        (WTF::::findIf):
        (WTF::::expandCapacityIfNeeded):
        (WTF::::expandCapacity):
        (WTF::::takeFirst):
        (WTF::::append):
        (WTF::::prepend):
        (WTF::::removeFirst):
        (WTF::::remove):
        (WTF::::addToIteratorsList):
        (WTF::::removeFromIteratorsList):
        (WTF::::DequeIteratorBase):
        (WTF::::~DequeIteratorBase):
        (WTF::::isEqual):
        (WTF::::increment):
        (WTF::::decrement):
        (WTF::::after):
        (WTF::::before):
        * wtf/DisallowCType.h: Renamed from Source/JavaScriptCore/wtf/DisallowCType.h.
        * wtf/DoublyLinkedList.h: Renamed from Source/JavaScriptCore/wtf/DoublyLinkedList.h.
        (WTF):
        (DoublyLinkedListNode):
        (WTF::::DoublyLinkedListNode):
        (WTF::::setPrev):
        (WTF::::setNext):
        (WTF::::prev):
        (WTF::::next):
        (DoublyLinkedList):
        (WTF::::DoublyLinkedList):
        (WTF::::isEmpty):
        (WTF::::size):
        (WTF::::clear):
        (WTF::::head):
        (WTF::::tail):
        (WTF::::push):
        (WTF::::append):
        (WTF::::remove):
        (WTF::::removeHead):
        * wtf/DynamicAnnotations.cpp: Renamed from Source/JavaScriptCore/wtf/DynamicAnnotations.cpp.
        (WTFAnnotateBenignRaceSized):
        (WTFAnnotateHappensBefore):
        (WTFAnnotateHappensAfter):
        * wtf/DynamicAnnotations.h: Renamed from Source/JavaScriptCore/wtf/DynamicAnnotations.h.
        * wtf/Encoder.h: Renamed from Source/JavaScriptCore/wtf/Encoder.h.
        (WTF):
        (Encoder):
        (WTF::Encoder::Encoder):
        (WTF::Encoder::~Encoder):
        * wtf/ExportMacros.h: Renamed from Source/JavaScriptCore/wtf/ExportMacros.h.
        * wtf/FastAllocBase.h: Renamed from Source/JavaScriptCore/wtf/FastAllocBase.h.
        (WTF):
        (WTF::fastNew):
        (Internal):
        (WTF::Internal::NewArrayImpl::fastNewArray):
        (WTF::fastNewArray):
        (WTF::fastDelete):
        (WTF::fastDeleteSkippingDestructor):
        (WTF::Internal::DeleteArrayImpl::fastDeleteArray):
        (WTF::fastDeleteArray):
        (WTF::fastNonNullDelete):
        (WTF::Internal::NonNullDeleteArrayImpl::fastNonNullDeleteArray):
        (WTF::fastNonNullDeleteArray):
        * wtf/FastMalloc.cpp: Renamed from Source/JavaScriptCore/wtf/FastMalloc.cpp.
        (WTF):
        (WTF::isForbidden):
        (WTF::fastMallocForbid):
        (WTF::fastMallocAllow):
        (WTF::initializeIsForbiddenKey):
        (Internal):
        (WTF::Internal::fastMallocMatchFailed):
        (WTF::fastZeroedMalloc):
        (WTF::fastStrDup):
        (WTF::tryFastZeroedMalloc):
        (WTF::tryFastMalloc):
        (WTF::fastMalloc):
        (WTF::tryFastCalloc):
        (WTF::fastCalloc):
        (WTF::fastFree):
        (WTF::tryFastRealloc):
        (WTF::fastRealloc):
        (WTF::releaseFastMallocFreeMemory):
        (WTF::fastMallocStatistics):
        (WTF::fastMallocSize):
        (FastMallocZone):
        (WTF::FastMallocZone::goodSize):
        (WTF::FastMallocZone::check):
        (WTF::FastMallocZone::print):
        (WTF::FastMallocZone::log):
        (WTF::FastMallocZone::forceLock):
        (WTF::FastMallocZone::forceUnlock):
        (WTF::FastMallocZone::statistics):
        (WTF::FastMallocZone::zoneValloc):
        (WTF::FastMallocZone::zoneDestroy):
        (WTF::KernelSupportsTLS):
        (WTF::CheckIfKernelSupportsTLS):
        (WTF::ClassIndex):
        (TCEntry):
        (WTF::LgFloor):
        (WTF::SLL_Next):
        (WTF::SLL_SetNext):
        (WTF::SLL_Push):
        (WTF::SLL_Pop):
        (WTF::SLL_PopRange):
        (WTF::SLL_PushRange):
        (WTF::SLL_Size):
        (WTF::SizeClass):
        (WTF::ByteSizeForClass):
        (WTF::NumMoveSize):
        (WTF::InitSizeClasses):
        (WTF::MetaDataAlloc):
        (PageHeapAllocator):
        (WTF::PageHeapAllocator::Init):
        (WTF::PageHeapAllocator::New):
        (WTF::PageHeapAllocator::Delete):
        (WTF::PageHeapAllocator::inuse):
        (WTF::PageHeapAllocator::recordAdministrativeRegions):
        (WTF::pages):
        (WTF::AllocationSize):
        (Span):
        (WTF::Event):
        (WTF::NewSpan):
        (WTF::DeleteSpan):
        (WTF::DLL_Init):
        (WTF::DLL_Remove):
        (WTF::DLL_IsEmpty):
        (WTF::DLL_Length):
        (WTF::DLL_Print):
        (WTF::DLL_Prepend):
        (StackTrace):
        (MapSelector):
        (TCMalloc_PageHeap):
        (WTF::TCMalloc_PageHeap::GetDescriptor):
        (WTF::TCMalloc_PageHeap::GetDescriptorEnsureSafe):
        (WTF::TCMalloc_PageHeap::SystemBytes):
        (WTF::TCMalloc_PageHeap::FreeBytes):
        (WTF::TCMalloc_PageHeap::GetSizeClassIfCached):
        (WTF::TCMalloc_PageHeap::CacheSizeClass):
        (SpanList):
        (WTF::TCMalloc_PageHeap::RecordSpan):
        (WTF::TCMalloc_PageHeap::init):
        (WTF::TCMalloc_PageHeap::initializeScavenger):
        (WTF::TCMalloc_PageHeap::isScavengerSuspended):
        (WTF::TCMalloc_PageHeap::scheduleScavenger):
        (WTF::TCMalloc_PageHeap::rescheduleScavenger):
        (WTF::TCMalloc_PageHeap::suspendScavenger):
        (WTF::TCMalloc_PageHeap::scavengerTimerFired):
        (WTF::TCMalloc_PageHeap::runScavengerThread):
        (WTF::TCMalloc_PageHeap::signalScavenger):
        (WTF::TCMalloc_PageHeap::scavenge):
        (WTF::TCMalloc_PageHeap::shouldScavenge):
        (WTF::TCMalloc_PageHeap::New):
        (WTF::TCMalloc_PageHeap::AllocLarge):
        (WTF::TCMalloc_PageHeap::Split):
        (WTF::TCMalloc_PageHeap::Carve):
        (WTF::mergeDecommittedStates):
        (WTF::TCMalloc_PageHeap::Delete):
        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
        (WTF::TCMalloc_PageHeap::RegisterSizeClass):
        (WTF::TCMalloc_PageHeap::ReturnedBytes):
        (WTF::PagesToMB):
        (WTF::TCMalloc_PageHeap::Dump):
        (WTF::TCMalloc_PageHeap::GrowHeap):
        (WTF::TCMalloc_PageHeap::Check):
        (WTF::TCMalloc_PageHeap::CheckList):
        (WTF::TCMalloc_PageHeap::ReleaseFreeList):
        (WTF::TCMalloc_PageHeap::ReleaseFreePages):
        (TCMalloc_ThreadCache_FreeList):
        (WTF::TCMalloc_ThreadCache_FreeList::Init):
        (WTF::TCMalloc_ThreadCache_FreeList::length):
        (WTF::TCMalloc_ThreadCache_FreeList::empty):
        (WTF::TCMalloc_ThreadCache_FreeList::lowwatermark):
        (WTF::TCMalloc_ThreadCache_FreeList::clear_lowwatermark):
        (WTF::TCMalloc_ThreadCache_FreeList::Push):
        (WTF::TCMalloc_ThreadCache_FreeList::PushRange):
        (WTF::TCMalloc_ThreadCache_FreeList::PopRange):
        (WTF::TCMalloc_ThreadCache_FreeList::Pop):
        (WTF::TCMalloc_ThreadCache_FreeList::enumerateFreeObjects):
        (TCMalloc_ThreadCache):
        (WTF::TCMalloc_ThreadCache::freelist_length):
        (WTF::TCMalloc_ThreadCache::Size):
        (WTF::TCMalloc_ThreadCache::enumerateFreeObjects):
        (TCMalloc_Central_FreeList):
        (WTF::TCMalloc_Central_FreeList::length):
        (WTF::TCMalloc_Central_FreeList::tc_length):
        (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects):
        (TCMalloc_Central_FreeListPadded):
        (WTF::getPageHeap):
        (WTF::TCMalloc_PageHeap::periodicScavenge):
        (WTF::TCMalloc_PageHeap::scavengerThread):
        (WTF::setThreadHeap):
        (WTF::TCMalloc_Central_FreeList::Init):
        (WTF::TCMalloc_Central_FreeList::ReleaseListToSpans):
        (WTF::TCMalloc_Central_FreeList::ReleaseToSpans):
        (WTF::TCMalloc_Central_FreeList::EvictRandomSizeClass):
        (WTF::TCMalloc_Central_FreeList::MakeCacheSpace):
        (WTF::TCMalloc_Central_FreeList::ShrinkCache):
        (WTF::TCMalloc_Central_FreeList::InsertRange):
        (WTF::TCMalloc_Central_FreeList::RemoveRange):
        (WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe):
        (WTF::TCMalloc_Central_FreeList::FetchFromSpans):
        (WTF::TCMalloc_Central_FreeList::Populate):
        (WTF::TCMalloc_ThreadCache::SampleAllocation):
        (WTF::TCMalloc_ThreadCache::Init):
        (WTF::TCMalloc_ThreadCache::Cleanup):
        (WTF::TCMalloc_ThreadCache::Allocate):
        (WTF::TCMalloc_ThreadCache::Deallocate):
        (WTF::TCMalloc_ThreadCache::FetchFromCentralCache):
        (WTF::TCMalloc_ThreadCache::ReleaseToCentralCache):
        (WTF::TCMalloc_ThreadCache::Scavenge):
        (WTF::TCMalloc_ThreadCache::PickNextSample):
        (WTF::TCMalloc_ThreadCache::InitModule):
        (WTF::TCMalloc_ThreadCache::NewHeap):
        (WTF::TCMalloc_ThreadCache::GetThreadHeap):
        (WTF::TCMalloc_ThreadCache::GetCache):
        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
        (WTF::TCMalloc_ThreadCache::InitTSD):
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
        * wtf/FastMalloc.h: Renamed from Source/JavaScriptCore/wtf/FastMalloc.h.
        (WTF):
        (WTF::TryMallocReturnValue::TryMallocReturnValue):
        (WTF::TryMallocReturnValue::~TryMallocReturnValue):
        (TryMallocReturnValue):
        (WTF::TryMallocReturnValue::operator PossiblyNull<T>):
        (WTF::TryMallocReturnValue::getValue):
        (FastMallocStatistics):
        (ValidationHeader):
        (Internal):
        (WTF::Internal::fastMallocValidationHeader):
        (WTF::Internal::fastMallocValidationSuffix):
        (WTF::Internal::fastMallocMatchValidationType):
        (WTF::Internal::setFastMallocMatchValidationType):
        (WTF::fastMallocMatchValidateMalloc):
        (WTF::fastMallocMatchValidateFree):
        (WTF::fastMallocValidate):
        (throw):
        * wtf/FixedArray.h: Renamed from Source/JavaScriptCore/wtf/FixedArray.h.
        (WTF):
        (FixedArray):
        (WTF::FixedArray::operator[]):
        (WTF::FixedArray::data):
        (WTF::FixedArray::size):
        * wtf/Float32Array.h: Renamed from Source/JavaScriptCore/wtf/Float32Array.h.
        (WTF):
        (Float32Array):
        (WTF::Float32Array::set):
        (WTF::Float32Array::item):
        (WTF::Float32Array::isFloatArray):
        (WTF::Float32Array::create):
        (WTF::Float32Array::Float32Array):
        (WTF::Float32Array::subarray):
        * wtf/Float64Array.h: Renamed from Source/JavaScriptCore/wtf/Float64Array.h.
        (WTF):
        (Float64Array):
        (WTF::Float64Array::set):
        (WTF::Float64Array::item):
        (WTF::Float64Array::isDoubleArray):
        (WTF::Float64Array::create):
        (WTF::Float64Array::Float64Array):
        (WTF::Float64Array::subarray):
        * wtf/Forward.h: Renamed from Source/JavaScriptCore/wtf/Forward.h.
        (WTF):
        * wtf/Functional.h: Renamed from Source/JavaScriptCore/wtf/Functional.h.
        (WTF):
        (HasRefAndDeref):
        (NoType):
        (BaseMixin):
        (WTF::R):
        (WTF::C::):
        (WTF::RefAndDeref::ref):
        (WTF::RefAndDeref::deref):
        (ParamStorageTraits):
        (WTF::ParamStorageTraits::wrap):
        (WTF::ParamStorageTraits::unwrap):
        (FunctionImplBase):
        (WTF::FunctionImplBase::~FunctionImplBase):
        (FunctionBase):
        (WTF::FunctionBase::isNull):
        (WTF::FunctionBase::FunctionBase):
        (WTF::FunctionBase::impl):
        (WTF::bind):
        * wtf/GetPtr.h: Renamed from Source/JavaScriptCore/wtf/GetPtr.h.
        (WTF):
        (WTF::getPtr):
        * wtf/HashCountedSet.h: Renamed from Source/JavaScriptCore/wtf/HashCountedSet.h.
        (WTF):
        (HashCountedSet):
        (WTF::HashCountedSet::HashCountedSet):
        (WTF::::size):
        (WTF::::capacity):
        (WTF::::isEmpty):
        (WTF::::begin):
        (WTF::::end):
        (WTF::::find):
        (WTF::::contains):
        (WTF::::count):
        (WTF::::add):
        (WTF::::remove):
        (WTF::::removeAll):
        (WTF::::clear):
        (WTF::copyToVector):
        * wtf/HashFunctions.h: Renamed from Source/JavaScriptCore/wtf/HashFunctions.h.
        (WTF):
        (WTF::intHash):
        (WTF::IntHash::hash):
        (WTF::IntHash::equal):
        (IntHash):
        (WTF::FloatHash::hash):
        (WTF::FloatHash::equal):
        (FloatHash):
        (WTF::PtrHash::hash):
        (WTF::PtrHash::equal):
        (PtrHash):
        (WTF::PairHash::hash):
        (WTF::PairHash::equal):
        (PairHash):
        * wtf/HashIterators.h: Renamed from Source/JavaScriptCore/wtf/HashIterators.h.
        (WTF):
        (HashTableConstKeysIterator):
        (WTF::HashTableConstKeysIterator::HashTableConstKeysIterator):
        (WTF::HashTableConstKeysIterator::get):
        (WTF::HashTableConstKeysIterator::operator*):
        (WTF::HashTableConstKeysIterator::operator->):
        (WTF::HashTableConstKeysIterator::operator++):
        (HashTableConstValuesIterator):
        (WTF::HashTableConstValuesIterator::HashTableConstValuesIterator):
        (WTF::HashTableConstValuesIterator::get):
        (WTF::HashTableConstValuesIterator::operator*):
        (WTF::HashTableConstValuesIterator::operator->):
        (WTF::HashTableConstValuesIterator::operator++):
        (HashTableKeysIterator):
        (WTF::HashTableKeysIterator::HashTableKeysIterator):
        (WTF::HashTableKeysIterator::get):
        (WTF::HashTableKeysIterator::operator*):
        (WTF::HashTableKeysIterator::operator->):
        (WTF::HashTableKeysIterator::operator++):
        (WTF::HashTableKeysIterator::operator HashTableConstKeysIterator<HashTableType, KeyType, MappedType>):
        (HashTableValuesIterator):
        (WTF::HashTableValuesIterator::HashTableValuesIterator):
        (WTF::HashTableValuesIterator::get):
        (WTF::HashTableValuesIterator::operator*):
        (WTF::HashTableValuesIterator::operator->):
        (WTF::HashTableValuesIterator::operator++):
        (WTF::HashTableValuesIterator::operator HashTableConstValuesIterator<HashTableType, KeyType, MappedType>):
        (WTF::operator==):
        (WTF::operator!=):
        * wtf/HashMap.h: Renamed from Source/JavaScriptCore/wtf/HashMap.h.
        (WTF):
        (ReferenceTypeMaker):
        (HashMap):
        (WTF::HashMap::keys):
        (WTF::HashMap::values):
        (HashMapKeysProxy):
        (WTF::HashMap::HashMapKeysProxy::begin):
        (WTF::HashMap::HashMapKeysProxy::end):
        (HashMapValuesProxy):
        (WTF::HashMap::HashMapValuesProxy::begin):
        (WTF::HashMap::HashMapValuesProxy::end):
        (WTF::PairFirstExtractor::extract):
        (WTF::HashMapTranslator::hash):
        (WTF::HashMapTranslator::equal):
        (WTF::HashMapTranslator::translate):
        (WTF::HashMapTranslatorAdapter::hash):
        (WTF::HashMapTranslatorAdapter::equal):
        (WTF::HashMapTranslatorAdapter::translate):
        (WTF::::swap):
        (WTF::::size):
        (WTF::::capacity):
        (WTF::::isEmpty):
        (WTF::::begin):
        (WTF::::end):
        (WTF::::find):
        (WTF::::contains):
        (WTF::::inlineAdd):
        (WTF::::set):
        (WTF::::add):
        (WTF::::get):
        (WTF::::remove):
        (WTF::::clear):
        (WTF::::take):
        (WTF::::checkConsistency):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::deleteAllPairSeconds):
        (WTF::deleteAllValues):
        (WTF::deleteAllPairFirsts):
        (WTF::deleteAllKeys):
        (WTF::copyKeysToVector):
        (WTF::copyValuesToVector):
        * wtf/HashSet.h: Renamed from Source/JavaScriptCore/wtf/HashSet.h.
        (WTF):
        (HashSet):
        (WTF::IdentityExtractor::extract):
        (WTF::HashSetTranslatorAdapter::hash):
        (WTF::HashSetTranslatorAdapter::equal):
        (WTF::HashSetTranslatorAdapter::translate):
        (WTF::::swap):
        (WTF::::size):
        (WTF::::capacity):
        (WTF::::isEmpty):
        (WTF::::begin):
        (WTF::::end):
        (WTF::::find):
        (WTF::::contains):
        (WTF::::add):
        (WTF::::remove):
        (WTF::::clear):
        (WTF::deleteAllValues):
        (WTF::fastDeleteAllValues):
        (WTF::copyToVector):
        * wtf/HashTable.cpp: Renamed from Source/JavaScriptCore/wtf/HashTable.cpp.
        (WTF):
        (WTF::hashTableStatsMutex):
        (WTF::HashTableStats::~HashTableStats):
        (WTF::HashTableStats::recordCollisionAtCount):
        * wtf/HashTable.h: Renamed from Source/JavaScriptCore/wtf/HashTable.h.
        (WTF):
        (HashTableStats):
        (WTF::addIterator):
        (WTF::removeIterator):
        (HashTableConstIterator):
        (WTF::HashTableConstIterator::skipEmptyBuckets):
        (WTF::HashTableConstIterator::HashTableConstIterator):
        (WTF::HashTableConstIterator::~HashTableConstIterator):
        (WTF::HashTableConstIterator::operator=):
        (WTF::HashTableConstIterator::get):
        (WTF::HashTableConstIterator::operator*):
        (WTF::HashTableConstIterator::operator->):
        (WTF::HashTableConstIterator::operator++):
        (WTF::HashTableConstIterator::operator==):
        (WTF::HashTableConstIterator::operator!=):
        (WTF::HashTableConstIterator::checkValidity):
        (HashTableIterator):
        (WTF::HashTableIterator::HashTableIterator):
        (WTF::HashTableIterator::get):
        (WTF::HashTableIterator::operator*):
        (WTF::HashTableIterator::operator->):
        (WTF::HashTableIterator::operator++):
        (WTF::HashTableIterator::operator==):
        (WTF::HashTableIterator::operator!=):
        (WTF::HashTableIterator::operator const_iterator):
        (WTF::hashTableSwap):
        (IdentityHashTranslator):
        (WTF::IdentityHashTranslator::hash):
        (WTF::IdentityHashTranslator::equal):
        (WTF::IdentityHashTranslator::translate):
        (HashTable):
        (WTF::HashTable::~HashTable):
        (WTF::HashTable::begin):
        (WTF::HashTable::end):
        (WTF::HashTable::size):
        (WTF::HashTable::capacity):
        (WTF::HashTable::isEmpty):
        (WTF::HashTable::add):
        (WTF::HashTable::find):
        (WTF::HashTable::contains):
        (WTF::HashTable::isEmptyBucket):
        (WTF::HashTable::isDeletedBucket):
        (WTF::HashTable::isEmptyOrDeletedBucket):
        (WTF::HashTable::lookup):
        (WTF::HashTable::checkTableConsistency):
        (WTF::HashTable::internalCheckTableConsistency):
        (WTF::HashTable::internalCheckTableConsistencyExceptSize):
        (WTF::HashTable::lookupForWriting):
        (WTF::HashTable::shouldExpand):
        (WTF::HashTable::mustRehashInPlace):
        (WTF::HashTable::shouldShrink):
        (WTF::HashTable::shrink):
        (WTF::HashTable::deleteBucket):
        (WTF::HashTable::makeLookupResult):
        (WTF::HashTable::makeIterator):
        (WTF::HashTable::makeConstIterator):
        (WTF::HashTable::makeKnownGoodIterator):
        (WTF::HashTable::makeKnownGoodConstIterator):
        (WTF::HashTable::checkTableConsistencyExceptSize):
        (WTF::HashTable::invalidateIterators):
        (WTF::::HashTable):
        (WTF::doubleHash):
        (WTF::::checkKey):
        (WTF::::lookup):
        (WTF::::lookupForWriting):
        (WTF::::fullLookupForWriting):
        (WTF::::initializeBucket):
        (WTF::::add):
        (WTF::::addPassingHashCode):
        (WTF::::reinsert):
        (WTF::::find):
        (WTF::::contains):
        (WTF::::removeAndInvalidateWithoutEntryConsistencyCheck):
        (WTF::::removeAndInvalidate):
        (WTF::::remove):
        (WTF::::removeWithoutEntryConsistencyCheck):
        (WTF::::allocateTable):
        (WTF::::deallocateTable):
        (WTF::::expand):
        (WTF::::rehash):
        (WTF::::clear):
        (WTF::::swap):
        (WTF::=):
        (WTF::::checkTableConsistency):
        (WTF::::checkTableConsistencyExceptSize):
        (WTF::::invalidateIterators):
        (WTF::HashTableConstIteratorAdapter::HashTableConstIteratorAdapter):
        (HashTableConstIteratorAdapter):
        (WTF::HashTableConstIteratorAdapter::get):
        (WTF::HashTableConstIteratorAdapter::operator*):
        (WTF::HashTableConstIteratorAdapter::operator->):
        (WTF::HashTableConstIteratorAdapter::operator++):
        (WTF::HashTableIteratorAdapter::HashTableIteratorAdapter):
        (HashTableIteratorAdapter):
        (WTF::HashTableIteratorAdapter::get):
        (WTF::HashTableIteratorAdapter::operator*):
        (WTF::HashTableIteratorAdapter::operator->):
        (WTF::HashTableIteratorAdapter::operator++):
        (WTF::HashTableIteratorAdapter::operator HashTableConstIteratorAdapter<HashTableType, ValueType>):
        (WTF::operator==):
        (WTF::operator!=):
        * wtf/HashTraits.h: Renamed from Source/JavaScriptCore/wtf/HashTraits.h.
        (WTF):
        (GenericHashTraits):
        (WTF::GenericHashTraits::emptyValue):
        (WTF::GenericHashTraits::store):
        (WTF::GenericHashTraits::passOut):
        (WTF::GenericHashTraits::peek):
        (FloatHashTraits):
        (WTF::FloatHashTraits::emptyValue):
        (WTF::FloatHashTraits::constructDeletedValue):
        (WTF::FloatHashTraits::isDeletedValue):
        (UnsignedWithZeroKeyHashTraits):
        (WTF::UnsignedWithZeroKeyHashTraits::emptyValue):
        (WTF::UnsignedWithZeroKeyHashTraits::constructDeletedValue):
        (WTF::UnsignedWithZeroKeyHashTraits::isDeletedValue):
        (SimpleClassHashTraits):
        (WTF::SimpleClassHashTraits::constructDeletedValue):
        (WTF::SimpleClassHashTraits::isDeletedValue):
        (PairHashTraits):
        (WTF::PairHashTraits::emptyValue):
        (WTF::PairHashTraits::constructDeletedValue):
        (WTF::PairHashTraits::isDeletedValue):
        * wtf/HexNumber.h: Renamed from Source/JavaScriptCore/wtf/HexNumber.h.
        (WTF):
        (Internal):
        (WTF::Internal::hexDigitsForMode):
        (WTF::appendByteAsHex):
        (WTF::placeByteAsHexCompressIfPossible):
        (WTF::placeByteAsHex):
        (WTF::appendUnsignedAsHex):
        (WTF::appendUnsignedAsHexFixedSize):
        * wtf/InlineASM.h: Renamed from Source/JavaScriptCore/wtf/InlineASM.h.
        * wtf/Int16Array.h: Renamed from Source/JavaScriptCore/wtf/Int16Array.h.
        (WTF):
        (Int16Array):
        (WTF::Int16Array::set):
        (WTF::Int16Array::isShortArray):
        (WTF::Int16Array::create):
        (WTF::Int16Array::Int16Array):
        (WTF::Int16Array::subarray):
        * wtf/Int32Array.h: Renamed from Source/JavaScriptCore/wtf/Int32Array.h.
        (WTF):
        (Int32Array):
        (WTF::Int32Array::set):
        (WTF::Int32Array::isIntArray):
        (WTF::Int32Array::create):
        (WTF::Int32Array::Int32Array):
        (WTF::Int32Array::subarray):
        * wtf/Int8Array.h: Renamed from Source/JavaScriptCore/wtf/Int8Array.h.
        (WTF):
        (Int8Array):
        (WTF::Int8Array::set):
        (WTF::Int8Array::isByteArray):
        (WTF::Int8Array::create):
        (WTF::Int8Array::Int8Array):
        (WTF::Int8Array::subarray):
        * wtf/IntegralTypedArrayBase.h: Renamed from Source/JavaScriptCore/wtf/IntegralTypedArrayBase.h.
        (WTF):
        (IntegralTypedArrayBase):
        (WTF::IntegralTypedArrayBase::set):
        (WTF::IntegralTypedArrayBase::item):
        (WTF::IntegralTypedArrayBase::IntegralTypedArrayBase):
        * wtf/ListHashSet.h: Renamed from Source/JavaScriptCore/wtf/ListHashSet.h.
        (WTF):
        (ListHashSet):
        (ListHashSetNodeAllocator):
        (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator):
        (WTF::ListHashSetNodeAllocator::allocate):
        (WTF::ListHashSetNodeAllocator::deallocate):
        (WTF::ListHashSetNodeAllocator::pool):
        (WTF::ListHashSetNodeAllocator::pastPool):
        (WTF::ListHashSetNodeAllocator::inPool):
        (ListHashSetNode):
        (WTF::ListHashSetNode::ListHashSetNode):
        (WTF::ListHashSetNode::operator new):
        (WTF::ListHashSetNode::destroy):
        (WTF::ListHashSetNodeHashFunctions::hash):
        (WTF::ListHashSetNodeHashFunctions::equal):
        (ListHashSetNodeHashFunctions):
        (ListHashSetIterator):
        (WTF::ListHashSetIterator::ListHashSetIterator):
        (WTF::ListHashSetIterator::get):
        (WTF::ListHashSetIterator::operator*):
        (WTF::ListHashSetIterator::operator->):
        (WTF::ListHashSetIterator::operator++):
        (WTF::ListHashSetIterator::operator--):
        (WTF::ListHashSetIterator::operator==):
        (WTF::ListHashSetIterator::operator!=):
        (WTF::ListHashSetIterator::operator const_iterator):
        (WTF::ListHashSetIterator::node):
        (ListHashSetConstIterator):
        (WTF::ListHashSetConstIterator::ListHashSetConstIterator):
        (WTF::ListHashSetConstIterator::get):
        (WTF::ListHashSetConstIterator::operator*):
        (WTF::ListHashSetConstIterator::operator->):
        (WTF::ListHashSetConstIterator::operator++):
        (WTF::ListHashSetConstIterator::operator--):
        (WTF::ListHashSetConstIterator::operator==):
        (WTF::ListHashSetConstIterator::operator!=):
        (WTF::ListHashSetConstIterator::node):
        (ListHashSetReverseIterator):
        (WTF::ListHashSetReverseIterator::ListHashSetReverseIterator):
        (WTF::ListHashSetReverseIterator::get):
        (WTF::ListHashSetReverseIterator::operator*):
        (WTF::ListHashSetReverseIterator::operator->):
        (WTF::ListHashSetReverseIterator::operator++):
        (WTF::ListHashSetReverseIterator::operator--):
        (WTF::ListHashSetReverseIterator::operator==):
        (WTF::ListHashSetReverseIterator::operator!=):
        (WTF::ListHashSetReverseIterator::operator const_reverse_iterator):
        (WTF::ListHashSetReverseIterator::node):
        (ListHashSetConstReverseIterator):
        (WTF::ListHashSetConstReverseIterator::ListHashSetConstReverseIterator):
        (WTF::ListHashSetConstReverseIterator::get):
        (WTF::ListHashSetConstReverseIterator::operator*):
        (WTF::ListHashSetConstReverseIterator::operator->):
        (WTF::ListHashSetConstReverseIterator::operator++):
        (WTF::ListHashSetConstReverseIterator::operator--):
        (WTF::ListHashSetConstReverseIterator::operator==):
        (WTF::ListHashSetConstReverseIterator::operator!=):
        (WTF::ListHashSetConstReverseIterator::node):
        (WTF::ListHashSetTranslator::hash):
        (WTF::ListHashSetTranslator::equal):
        (WTF::ListHashSetTranslator::translate):
        (WTF::::ListHashSet):
        (WTF::=):
        (WTF::::swap):
        (WTF::::~ListHashSet):
        (WTF::::size):
        (WTF::::capacity):
        (WTF::::isEmpty):
        (WTF::::begin):
        (WTF::::end):
        (WTF::::rbegin):
        (WTF::::rend):
        (WTF::::first):
        (WTF::::last):
        (WTF::::removeLast):
        (WTF::::find):
        (WTF::ListHashSetTranslatorAdapter::hash):
        (WTF::ListHashSetTranslatorAdapter::equal):
        (WTF::::contains):
        (WTF::::add):
        (WTF::::insertBefore):
        (WTF::::remove):
        (WTF::::clear):
        (WTF::::unlinkAndDelete):
        (WTF::::appendNode):
        (WTF::::insertNodeBefore):
        (WTF::::deleteAllNodes):
        (WTF::::makeReverseIterator):
        (WTF::::makeConstReverseIterator):
        (WTF::::makeIterator):
        (WTF::::makeConstIterator):
        (WTF::deleteAllValues):
        * wtf/ListRefPtr.h: Renamed from Source/JavaScriptCore/wtf/ListRefPtr.h.
        (WTF):
        (ListRefPtr):
        (WTF::ListRefPtr::ListRefPtr):
        (WTF::ListRefPtr::~ListRefPtr):
        (WTF::ListRefPtr::operator=):
        (WTF::getPtr):
        * wtf/Locker.h: Renamed from Source/JavaScriptCore/wtf/Locker.h.
        (WTF):
        (Locker):
        (WTF::Locker::Locker):
        (WTF::Locker::~Locker):
        * wtf/MD5.cpp: Renamed from Source/JavaScriptCore/wtf/MD5.cpp.
        (WTF):
        (WTF::testMD5):
        (WTF::expectMD5):
        (WTF::reverseBytes):
        (WTF::MD5Transform):
        (WTF::MD5::MD5):
        (WTF::MD5::addBytes):
        (WTF::MD5::checksum):
        * wtf/MD5.h: Renamed from Source/JavaScriptCore/wtf/MD5.h.
        (WTF):
        (MD5):
        (WTF::MD5::addBytes):
        * wtf/MainThread.cpp: Renamed from Source/JavaScriptCore/wtf/MainThread.cpp.
        (WTF):
        (FunctionWithContext):
        (WTF::FunctionWithContext::FunctionWithContext):
        (WTF::FunctionWithContext::operator == ):
        (FunctionWithContextFinder):
        (WTF::FunctionWithContextFinder::FunctionWithContextFinder):
        (WTF::FunctionWithContextFinder::operator()):
        (WTF::mainThreadFunctionQueueMutex):
        (WTF::functionQueue):
        (WTF::initializeMainThread):
        (WTF::initializeMainThreadOnce):
        (WTF::initializeMainThreadToProcessMainThreadOnce):
        (WTF::initializeMainThreadToProcessMainThread):
        (WTF::dispatchFunctionsFromMainThread):
        (WTF::callOnMainThread):
        (WTF::callOnMainThreadAndWait):
        (WTF::cancelCallOnMainThread):
        (WTF::callFunctionObject):
        (WTF::setMainThreadCallbacksPaused):
        (WTF::isMainThread):
        (WTF::initializeGCThreads):
        (WTF::registerGCThread):
        (WTF::isMainThreadOrGCThread):
        * wtf/MainThread.h: Renamed from Source/JavaScriptCore/wtf/MainThread.h.
        (WTF):
        (WTF::isMainThreadOrGCThread):
        * wtf/MallocZoneSupport.h: Renamed from Source/JavaScriptCore/wtf/MallocZoneSupport.h.
        (WTF):
        (RemoteMemoryReader):
        (WTF::RemoteMemoryReader::RemoteMemoryReader):
        (WTF::RemoteMemoryReader::operator()):
        (WTF::RemoteMemoryReader::nextEntryInLinkedList):
        * wtf/MathExtras.h: Renamed from Source/JavaScriptCore/wtf/MathExtras.h.
        (wtf_ceil):
        (isfinite):
        (isinf):
        (signbit):
        (round):
        (roundf):
        (llround):
        (llroundf):
        (lround):
        (lroundf):
        (trunc):
        (abs):
        (isnan):
        (nextafter):
        (nextafterf):
        (copysign):
        (log2):
        (log2f):
        (wtf_atan2):
        (wtf_fmod):
        (wtf_pow):
        (deg2rad):
        (rad2deg):
        (deg2grad):
        (grad2deg):
        (turn2deg):
        (deg2turn):
        (rad2grad):
        (grad2rad):
        (defaultMinimumForClamp):
        (defaultMaximumForClamp):
        (clampTo):
        (clampToInteger):
        (clampToFloat):
        (clampToPositiveInteger):
        (isWithinIntRange):
        (decomposeDouble):
        (doubleToInteger):
        * wtf/MessageQueue.h: Renamed from Source/JavaScriptCore/wtf/MessageQueue.h.
        (WTF):
        (MessageQueue):
        (WTF::MessageQueue::MessageQueue):
        (WTF::MessageQueue::infiniteTime):
        (WTF::MessageQueue::alwaysTruePredicate):
        (WTF::::~MessageQueue):
        (WTF::::append):
        (WTF::::appendAndCheckEmpty):
        (WTF::::prepend):
        (WTF::::waitForMessage):
        (WTF::::waitForMessageFilteredWithTimeout):
        (WTF::::tryGetMessage):
        (WTF::::tryGetMessageIgnoringKilled):
        (WTF::::removeIf):
        (WTF::::isEmpty):
        (WTF::::kill):
        (WTF::::killed):
        * wtf/MetaAllocator.cpp: Renamed from Source/JavaScriptCore/wtf/MetaAllocator.cpp.
        (WTF):
        (WTF::MetaAllocator::~MetaAllocator):
        (WTF::MetaAllocatorTracker::notify):
        (WTF::MetaAllocatorTracker::release):
        (WTF::MetaAllocator::release):
        (WTF::MetaAllocatorHandle::MetaAllocatorHandle):
        (WTF::MetaAllocatorHandle::~MetaAllocatorHandle):
        (WTF::MetaAllocatorHandle::shrink):
        (WTF::MetaAllocator::MetaAllocator):
        (WTF::MetaAllocator::allocate):
        (WTF::MetaAllocator::currentStatistics):
        (WTF::MetaAllocator::findAndRemoveFreeSpace):
        (WTF::MetaAllocator::addFreeSpaceFromReleasedHandle):
        (WTF::MetaAllocator::addFreshFreeSpace):
        (WTF::MetaAllocator::debugFreeSpaceSize):
        (WTF::MetaAllocator::addFreeSpace):
        (WTF::MetaAllocator::incrementPageOccupancy):
        (WTF::MetaAllocator::decrementPageOccupancy):
        (WTF::MetaAllocator::roundUp):
        (WTF::MetaAllocator::allocFreeSpaceNode):
        (WTF::MetaAllocator::freeFreeSpaceNode):
        (WTF::MetaAllocator::dumpProfile):
        * wtf/MetaAllocator.h: Renamed from Source/JavaScriptCore/wtf/MetaAllocator.h.
        (WTF):
        (MetaAllocatorTracker):
        (WTF::MetaAllocatorTracker::find):
        (MetaAllocator):
        (WTF::MetaAllocator::trackAllocations):
        (WTF::MetaAllocator::bytesAllocated):
        (WTF::MetaAllocator::bytesReserved):
        (WTF::MetaAllocator::bytesCommitted):
        (Statistics):
        (WTF::MetaAllocator::dumpProfile):
        (FreeSpaceNode):
        (WTF::MetaAllocator::FreeSpaceNode::FreeSpaceNode):
        (WTF::MetaAllocator::FreeSpaceNode::key):
        * wtf/MetaAllocatorHandle.h: Renamed from Source/JavaScriptCore/wtf/MetaAllocatorHandle.h.
        (WTF):
        (MetaAllocatorHandle):
        (WTF::MetaAllocatorHandle::start):
        (WTF::MetaAllocatorHandle::end):
        (WTF::MetaAllocatorHandle::sizeInBytes):
        (WTF::MetaAllocatorHandle::isManaged):
        (WTF::MetaAllocatorHandle::allocator):
        (WTF::MetaAllocatorHandle::ownerUID):
        (WTF::MetaAllocatorHandle::key):
        * wtf/NonCopyingSort.h: Renamed from Source/JavaScriptCore/wtf/NonCopyingSort.h.
        (WTF):
        (WTF::siftDown):
        (WTF::heapify):
        (WTF::heapSort):
        (WTF::nonCopyingSort):
        * wtf/Noncopyable.h: Renamed from Source/JavaScriptCore/wtf/Noncopyable.h.
        * wtf/NotFound.h: Renamed from Source/JavaScriptCore/wtf/NotFound.h.
        (WTF):
        * wtf/NullPtr.cpp: Renamed from Source/JavaScriptCore/wtf/NullPtr.cpp.
        * wtf/NullPtr.h: Renamed from Source/JavaScriptCore/wtf/NullPtr.h.
        * wtf/NumberOfCores.cpp: Renamed from Source/JavaScriptCore/wtf/NumberOfCores.cpp.
        (WTF):
        (WTF::numberOfProcessorCores):
        * wtf/NumberOfCores.h: Renamed from Source/JavaScriptCore/wtf/NumberOfCores.h.
        (WTF):
        * wtf/OSAllocator.h: Renamed from Source/JavaScriptCore/wtf/OSAllocator.h.
        (WTF):
        (OSAllocator):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::decommitAndRelease):
        (WTF::OSAllocator::reallocateCommitted):
        * wtf/OSAllocatorPosix.cpp: Renamed from Source/JavaScriptCore/wtf/OSAllocatorPosix.cpp.
        (WTF):
        (WTF::OSAllocator::reserveUncommitted):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::commit):
        (WTF::OSAllocator::decommit):
        (WTF::OSAllocator::releaseDecommitted):
        * wtf/OSAllocatorWin.cpp: Renamed from Source/JavaScriptCore/wtf/OSAllocatorWin.cpp.
        (WTF):
        (WTF::protection):
        (WTF::OSAllocator::reserveUncommitted):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::commit):
        (WTF::OSAllocator::decommit):
        (WTF::OSAllocator::releaseDecommitted):
        * wtf/OSRandomSource.cpp: Renamed from Source/JavaScriptCore/wtf/OSRandomSource.cpp.
        (WTF):
        (WTF::cryptographicallyRandomValuesFromOS):
        * wtf/OSRandomSource.h: Renamed from Source/JavaScriptCore/wtf/OSRandomSource.h.
        (WTF):
        * wtf/OwnArrayPtr.h: Renamed from Source/JavaScriptCore/wtf/OwnArrayPtr.h.
        (WTF):
        (OwnArrayPtr):
        (WTF::OwnArrayPtr::OwnArrayPtr):
        (WTF::OwnArrayPtr::~OwnArrayPtr):
        (WTF::OwnArrayPtr::get):
        (WTF::OwnArrayPtr::operator*):
        (WTF::OwnArrayPtr::operator->):
        (WTF::OwnArrayPtr::operator[]):
        (WTF::OwnArrayPtr::operator!):
        (WTF::OwnArrayPtr::operator UnspecifiedBoolType):
        (WTF::OwnArrayPtr::operator=):
        (WTF::OwnArrayPtr::swap):
        (WTF::::OwnArrayPtr):
        (WTF::::clear):
        (WTF::::release):
        (WTF::::leakPtr):
        (WTF::=):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::getPtr):
        * wtf/OwnPtr.h: Renamed from Source/JavaScriptCore/wtf/OwnPtr.h.
        (WTF):
        (OwnPtr):
        (WTF::OwnPtr::OwnPtr):
        (WTF::OwnPtr::~OwnPtr):
        (WTF::OwnPtr::get):
        (WTF::OwnPtr::operator*):
        (WTF::OwnPtr::operator->):
        (WTF::OwnPtr::operator!):
        (WTF::OwnPtr::operator UnspecifiedBoolType):
        (WTF::OwnPtr::operator=):
        (WTF::OwnPtr::swap):
        (WTF::OwnPtr::operator==):
        (WTF::OwnPtr::operator!=):
        (WTF::::OwnPtr):
        (WTF::::clear):
        (WTF::::release):
        (WTF::::leakPtr):
        (WTF::=):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::getPtr):
        * wtf/OwnPtrCommon.h: Renamed from Source/JavaScriptCore/wtf/OwnPtrCommon.h.
        (WTF):
        (WTF::deleteOwnedPtr):
        * wtf/PackedIntVector.h: Renamed from Source/JavaScriptCore/wtf/PackedIntVector.h.
        (WTF):
        (PackedIntVector):
        (WTF::PackedIntVector::PackedIntVector):
        (WTF::PackedIntVector::operator=):
        (WTF::PackedIntVector::size):
        (WTF::PackedIntVector::ensureSize):
        (WTF::PackedIntVector::resize):
        (WTF::PackedIntVector::clearAll):
        (WTF::PackedIntVector::get):
        (WTF::PackedIntVector::set):
        (WTF::PackedIntVector::mask):
        * wtf/PageAllocation.h: Renamed from Source/JavaScriptCore/wtf/PageAllocation.h.
        (WTF):
        (PageAllocation):
        (WTF::PageAllocation::PageAllocation):
        (WTF::PageAllocation::operator bool):
        (WTF::PageAllocation::allocate):
        (WTF::PageAllocation::deallocate):
        * wtf/PageAllocationAligned.cpp: Renamed from Source/JavaScriptCore/wtf/PageAllocationAligned.cpp.
        (WTF):
        (WTF::PageAllocationAligned::allocate):
        (WTF::PageAllocationAligned::deallocate):
        * wtf/PageAllocationAligned.h: Renamed from Source/JavaScriptCore/wtf/PageAllocationAligned.h.
        (WTF):
        (PageAllocationAligned):
        (WTF::PageAllocationAligned::PageAllocationAligned):
        * wtf/PageBlock.cpp: Renamed from Source/JavaScriptCore/wtf/PageBlock.cpp.
        (WTF):
        (WTF::systemPageSize):
        (WTF::pageSize):
        (WTF::pageMask):
        * wtf/PageBlock.h: Renamed from Source/JavaScriptCore/wtf/PageBlock.h.
        (WTF):
        (WTF::isPageAligned):
        (WTF::isPowerOfTwo):
        (PageBlock):
        (WTF::PageBlock::base):
        (WTF::PageBlock::size):
        (WTF::PageBlock::operator bool):
        (WTF::PageBlock::contains):
        (WTF::PageBlock::PageBlock):
        * wtf/PageReservation.h: Renamed from Source/JavaScriptCore/wtf/PageReservation.h.
        (WTF):
        (PageReservation):
        (WTF::PageReservation::PageReservation):
        (WTF::PageReservation::operator bool):
        (WTF::PageReservation::commit):
        (WTF::PageReservation::decommit):
        (WTF::PageReservation::committed):
        (WTF::PageReservation::reserve):
        (WTF::PageReservation::reserveWithGuardPages):
        (WTF::PageReservation::deallocate):
        * wtf/ParallelJobs.h: Renamed from Source/JavaScriptCore/wtf/ParallelJobs.h.
        (WTF):
        (ParallelJobs):
        (WTF::ParallelJobs::ParallelJobs):
        (WTF::ParallelJobs::numberOfJobs):
        (WTF::ParallelJobs::parameter):
        (WTF::ParallelJobs::execute):
        * wtf/ParallelJobsGeneric.cpp: Renamed from Source/JavaScriptCore/wtf/ParallelJobsGeneric.cpp.
        (WTF):
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::execute):
        (WTF::ParallelEnvironment::ThreadPrivate::tryLockFor):
        (WTF::ParallelEnvironment::ThreadPrivate::execute):
        (WTF::ParallelEnvironment::ThreadPrivate::waitForFinish):
        (WTF::ParallelEnvironment::ThreadPrivate::workerThread):
        * wtf/ParallelJobsGeneric.h: Renamed from Source/JavaScriptCore/wtf/ParallelJobsGeneric.h.
        (WTF):
        (ParallelEnvironment):
        (WTF::ParallelEnvironment::numberOfJobs):
        (ThreadPrivate):
        (WTF::ParallelEnvironment::ThreadPrivate::ThreadPrivate):
        (WTF::ParallelEnvironment::ThreadPrivate::create):
        * wtf/ParallelJobsLibdispatch.h: Renamed from Source/JavaScriptCore/wtf/ParallelJobsLibdispatch.h.
        (WTF):
        (ParallelEnvironment):
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::numberOfJobs):
        (WTF::ParallelEnvironment::execute):
        * wtf/ParallelJobsOpenMP.h: Renamed from Source/JavaScriptCore/wtf/ParallelJobsOpenMP.h.
        (WTF):
        (ParallelEnvironment):
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::numberOfJobs):
        (WTF::ParallelEnvironment::execute):
        * wtf/PassOwnArrayPtr.h: Renamed from Source/JavaScriptCore/wtf/PassOwnArrayPtr.h.
        (WTF):
        (PassOwnArrayPtr):
        (WTF::PassOwnArrayPtr::PassOwnArrayPtr):
        (WTF::PassOwnArrayPtr::~PassOwnArrayPtr):
        (WTF::PassOwnArrayPtr::get):
        (WTF::PassOwnArrayPtr::operator*):
        (WTF::PassOwnArrayPtr::operator->):
        (WTF::PassOwnArrayPtr::operator!):
        (WTF::PassOwnArrayPtr::operator UnspecifiedBoolType):
        (WTF::PassOwnArrayPtr::operator=):
        (WTF::::leakPtr):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::adoptArrayPtr):
        (WTF::deleteOwnedArrayPtr):
        (WTF::static_pointer_cast):
        (WTF::const_pointer_cast):
        (WTF::getPtr):
        * wtf/PassOwnPtr.h: Renamed from Source/JavaScriptCore/wtf/PassOwnPtr.h.
        (WTF):
        (PassOwnPtr):
        (WTF::PassOwnPtr::PassOwnPtr):
        (WTF::PassOwnPtr::~PassOwnPtr):
        (WTF::PassOwnPtr::get):
        (WTF::PassOwnPtr::operator*):
        (WTF::PassOwnPtr::operator->):
        (WTF::PassOwnPtr::operator!):
        (WTF::PassOwnPtr::operator UnspecifiedBoolType):
        (WTF::PassOwnPtr::operator=):
        (WTF::PassOwnPtr::operator==):
        (WTF::PassOwnPtr::operator!=):
        (WTF::::leakPtr):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::adoptPtr):
        (WTF::static_pointer_cast):
        (WTF::const_pointer_cast):
        (WTF::getPtr):
        * wtf/PassRefPtr.h: Renamed from Source/JavaScriptCore/wtf/PassRefPtr.h.
        (WTF):
        (WTF::adopted):
        (WTF::refIfNotNull):
        (WTF::derefIfNotNull):
        (PassRefPtr):
        (WTF::PassRefPtr::PassRefPtr):
        (WTF::PassRefPtr::~PassRefPtr):
        (WTF::PassRefPtr::get):
        (WTF::PassRefPtr::operator*):
        (WTF::PassRefPtr::operator->):
        (WTF::PassRefPtr::operator!):
        (WTF::PassRefPtr::operator UnspecifiedBoolType):
        (WTF::PassRefPtr::operator=):
        (NonNullPassRefPtr):
        (WTF::NonNullPassRefPtr::NonNullPassRefPtr):
        (WTF::NonNullPassRefPtr::~NonNullPassRefPtr):
        (WTF::NonNullPassRefPtr::get):
        (WTF::NonNullPassRefPtr::operator*):
        (WTF::NonNullPassRefPtr::operator->):
        (WTF::NonNullPassRefPtr::operator=):
        (WTF::::PassRefPtr):
        (WTF::::leakRef):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::adoptRef):
        (WTF::static_pointer_cast):
        (WTF::const_pointer_cast):
        (WTF::getPtr):
        * wtf/PassTraits.h: Renamed from Source/JavaScriptCore/wtf/PassTraits.h.
        (WTF):
        (PassTraits):
        (WTF::PassTraits::transfer):
        * wtf/PlatformBlackBerry.cmake: Renamed from Source/JavaScriptCore/wtf/PlatformBlackBerry.cmake.
        * wtf/PlatformEfl.cmake: Renamed from Source/JavaScriptCore/wtf/PlatformEfl.cmake.
        * wtf/PlatformWinCE.cmake: Renamed from Source/JavaScriptCore/wtf/PlatformWinCE.cmake.
        * wtf/PossiblyNull.h: Renamed from Source/JavaScriptCore/wtf/PossiblyNull.h.
        (WTF):
        (WTF::PossiblyNull::PossiblyNull):
        (WTF::PossiblyNull::~PossiblyNull):
        (PossiblyNull):
        (WTF::::getValue):
        * wtf/RandomNumber.cpp: Renamed from Source/JavaScriptCore/wtf/RandomNumber.cpp.
        (WTF):
        (WTF::randomNumber):
        * wtf/RandomNumber.h: Renamed from Source/JavaScriptCore/wtf/RandomNumber.h.
        (WTF):
        * wtf/RandomNumberSeed.h: Renamed from Source/JavaScriptCore/wtf/RandomNumberSeed.h.
        (WTF):
        (WTF::initializeRandomNumberGenerator):
        * wtf/RedBlackTree.h: Renamed from Source/JavaScriptCore/wtf/RedBlackTree.h.
        (WTF):
        (RedBlackTree):
        (Node):
        (WTF::RedBlackTree::Node::successor):
        (WTF::RedBlackTree::Node::predecessor):
        (WTF::RedBlackTree::Node::reset):
        (WTF::RedBlackTree::Node::parent):
        (WTF::RedBlackTree::Node::setParent):
        (WTF::RedBlackTree::Node::left):
        (WTF::RedBlackTree::Node::setLeft):
        (WTF::RedBlackTree::Node::right):
        (WTF::RedBlackTree::Node::setRight):
        (WTF::RedBlackTree::Node::color):
        (WTF::RedBlackTree::Node::setColor):
        (WTF::RedBlackTree::RedBlackTree):
        (WTF::RedBlackTree::insert):
        (WTF::RedBlackTree::remove):
        (WTF::RedBlackTree::findExact):
        (WTF::RedBlackTree::findLeastGreaterThanOrEqual):
        (WTF::RedBlackTree::findGreatestLessThanOrEqual):
        (WTF::RedBlackTree::first):
        (WTF::RedBlackTree::last):
        (WTF::RedBlackTree::size):
        (WTF::RedBlackTree::isEmpty):
        (WTF::RedBlackTree::treeMinimum):
        (WTF::RedBlackTree::treeMaximum):
        (WTF::RedBlackTree::treeInsert):
        (WTF::RedBlackTree::leftRotate):
        (WTF::RedBlackTree::rightRotate):
        (WTF::RedBlackTree::removeFixup):
        * wtf/RefCounted.h: Renamed from Source/JavaScriptCore/wtf/RefCounted.h.
        (WTF):
        (RefCountedBase):
        (WTF::RefCountedBase::ref):
        (WTF::RefCountedBase::hasOneRef):
        (WTF::RefCountedBase::refCount):
        (WTF::RefCountedBase::turnOffVerifier):
        (WTF::RefCountedBase::relaxAdoptionRequirement):
        (WTF::RefCountedBase::addressOfCount):
        (WTF::RefCountedBase::RefCountedBase):
        (WTF::RefCountedBase::~RefCountedBase):
        (WTF::RefCountedBase::derefBase):
        (WTF::RefCountedBase::deletionHasBegun):
        (WTF::adopted):
        (RefCounted):
        (WTF::RefCounted::deref):
        (WTF::RefCounted::RefCounted):
        (WTF::RefCounted::~RefCounted):
        (RefCountedCustomAllocated):
        (WTF::RefCountedCustomAllocated::deref):
        (WTF::RefCountedCustomAllocated::~RefCountedCustomAllocated):
        (WTF::RefCountedBase::setMutexForVerifier):
        (WTF::RefCountedBase::setDispatchQueueForVerifier):
        * wtf/RefCountedArray.h: Renamed from Source/JavaScriptCore/wtf/RefCountedArray.h.
        (WTF):
        (RefCountedArray):
        (WTF::RefCountedArray::RefCountedArray):
        (WTF::RefCountedArray::operator=):
        (WTF::RefCountedArray::~RefCountedArray):
        (WTF::RefCountedArray::size):
        (WTF::RefCountedArray::data):
        (WTF::RefCountedArray::begin):
        (WTF::RefCountedArray::end):
        (WTF::RefCountedArray::at):
        (WTF::RefCountedArray::operator[]):
        (Header):
        (WTF::RefCountedArray::Header::size):
        (WTF::RefCountedArray::Header::payload):
        (WTF::RefCountedArray::Header::fromPayload):
        * wtf/RefCountedLeakCounter.cpp: Renamed from Source/JavaScriptCore/wtf/RefCountedLeakCounter.cpp.
        (WTF):
        (WTF::RefCountedLeakCounter::suppressMessages):
        (WTF::RefCountedLeakCounter::cancelMessageSuppression):
        (WTF::RefCountedLeakCounter::RefCountedLeakCounter):
        (WTF::RefCountedLeakCounter::~RefCountedLeakCounter):
        (WTF::RefCountedLeakCounter::increment):
        (WTF::RefCountedLeakCounter::decrement):
        * wtf/RefCountedLeakCounter.h: Renamed from Source/JavaScriptCore/wtf/RefCountedLeakCounter.h.
        (WTF):
        (RefCountedLeakCounter):
        * wtf/RefPtr.h: Renamed from Source/JavaScriptCore/wtf/RefPtr.h.
        (WTF):
        (RefPtr):
        (WTF::RefPtr::RefPtr):
        (WTF::RefPtr::isHashTableDeletedValue):
        (WTF::RefPtr::~RefPtr):
        (WTF::RefPtr::get):
        (WTF::RefPtr::release):
        (WTF::RefPtr::operator*):
        (WTF::RefPtr::operator->):
        (WTF::RefPtr::operator!):
        (WTF::RefPtr::operator UnspecifiedBoolType):
        (WTF::RefPtr::operator=):
        (WTF::RefPtr::hashTableDeletedValue):
        (WTF::::RefPtr):
        (WTF::::clear):
        (WTF::=):
        (WTF::::swap):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::static_pointer_cast):
        (WTF::const_pointer_cast):
        (WTF::getPtr):
        * wtf/RefPtrHashMap.h: Renamed from Source/JavaScriptCore/wtf/RefPtrHashMap.h.
        (WTF):
        (WTF::::swap):
        (WTF::::size):
        (WTF::::capacity):
        (WTF::::isEmpty):
        (WTF::::begin):
        (WTF::::end):
        (WTF::::find):
        (WTF::::contains):
        (WTF::::inlineAdd):
        (WTF::::set):
        (WTF::::add):
        (WTF::::get):
        (WTF::::inlineGet):
        (WTF::::remove):
        (WTF::::clear):
        (WTF::::take):
        * wtf/RetainPtr.h: Renamed from Source/JavaScriptCore/wtf/RetainPtr.h.
        (WTF):
        (WTF::adoptNSReference):
        (RetainPtr):
        (WTF::RetainPtr::RetainPtr):
        (WTF::RetainPtr::isHashTableDeletedValue):
        (WTF::RetainPtr::~RetainPtr):
        (WTF::RetainPtr::get):
        (WTF::RetainPtr::operator->):
        (WTF::RetainPtr::operator!):
        (WTF::RetainPtr::operator UnspecifiedBoolType):
        (WTF::RetainPtr::operator=):
        (WTF::RetainPtr::hashTableDeletedValue):
        (WTF::::RetainPtr):
        (WTF::::clear):
        (WTF::::leakRef):
        (WTF::=):
        (WTF::::adoptCF):
        (WTF::::adoptNS):
        (WTF::::swap):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::adoptCF):
        (WTF::adoptNS):
        (WTF::retainPtr):
        * wtf/SHA1.cpp: Renamed from Source/JavaScriptCore/wtf/SHA1.cpp.
        (WTF):
        (WTF::testSHA1):
        (WTF::expectSHA1):
        (WTF::f):
        (WTF::k):
        (WTF::rotateLeft):
        (WTF::SHA1::SHA1):
        (WTF::SHA1::addBytes):
        (WTF::SHA1::computeHash):
        (WTF::SHA1::finalize):
        (WTF::SHA1::processBlock):
        (WTF::SHA1::reset):
        * wtf/SHA1.h: Renamed from Source/JavaScriptCore/wtf/SHA1.h.
        (WTF):
        (SHA1):
        (WTF::SHA1::addBytes):
        * wtf/SegmentedVector.h: Renamed from Source/JavaScriptCore/wtf/SegmentedVector.h.
        (WTF):
        (SegmentedVectorIterator):
        (WTF::SegmentedVectorIterator::~SegmentedVectorIterator):
        (WTF::SegmentedVectorIterator::operator*):
        (WTF::SegmentedVectorIterator::operator->):
        (WTF::SegmentedVectorIterator::operator++):
        (WTF::SegmentedVectorIterator::operator==):
        (WTF::SegmentedVectorIterator::operator!=):
        (WTF::SegmentedVectorIterator::operator=):
        (WTF::SegmentedVectorIterator::SegmentedVectorIterator):
        (SegmentedVector):
        (WTF::SegmentedVector::SegmentedVector):
        (WTF::SegmentedVector::~SegmentedVector):
        (WTF::SegmentedVector::size):
        (WTF::SegmentedVector::isEmpty):
        (WTF::SegmentedVector::at):
        (WTF::SegmentedVector::operator[]):
        (WTF::SegmentedVector::last):
        (WTF::SegmentedVector::append):
        (WTF::SegmentedVector::alloc):
        (WTF::SegmentedVector::removeLast):
        (WTF::SegmentedVector::grow):
        (WTF::SegmentedVector::clear):
        (WTF::SegmentedVector::begin):
        (WTF::SegmentedVector::end):
        (WTF::SegmentedVector::deleteAllSegments):
        (WTF::SegmentedVector::segmentExistsFor):
        (WTF::SegmentedVector::segmentFor):
        (WTF::SegmentedVector::subscriptFor):
        (WTF::SegmentedVector::ensureSegmentsFor):
        (WTF::SegmentedVector::ensureSegment):
        * wtf/SentinelLinkedList.h: Renamed from Source/JavaScriptCore/wtf/SentinelLinkedList.h.
        (WTF):
        (BasicRawSentinelNode):
        (WTF::BasicRawSentinelNode::BasicRawSentinelNode):
        (WTF::BasicRawSentinelNode::setPrev):
        (WTF::BasicRawSentinelNode::setNext):
        (WTF::BasicRawSentinelNode::prev):
        (WTF::BasicRawSentinelNode::next):
        (WTF::BasicRawSentinelNode::isOnList):
        (SentinelLinkedList):
        (WTF::SentinelLinkedList::isEmpty):
        (WTF::::remove):
        (WTF::::SentinelLinkedList):
        (WTF::::begin):
        (WTF::::end):
        (WTF::::push):
        * wtf/SimpleStats.h: Renamed from Source/JavaScriptCore/wtf/SimpleStats.h.
        (WTF):
        (SimpleStats):
        (WTF::SimpleStats::SimpleStats):
        (WTF::SimpleStats::add):
        (WTF::SimpleStats::operator!):
        (WTF::SimpleStats::count):
        (WTF::SimpleStats::sum):
        (WTF::SimpleStats::sumOfSquares):
        (WTF::SimpleStats::mean):
        (WTF::SimpleStats::variance):
        (WTF::SimpleStats::standardDeviation):
        * wtf/SinglyLinkedList.h: Renamed from Source/JavaScriptCore/wtf/SinglyLinkedList.h.
        (WTF):
        (SinglyLinkedList):
        (WTF::::SinglyLinkedList):
        (WTF::::isEmpty):
        (WTF::::push):
        (WTF::::pop):
        * wtf/SizeLimits.cpp: Renamed from Source/JavaScriptCore/wtf/SizeLimits.cpp.
        (WTF):
        (SameSizeAsRefCounted):
        * wtf/Spectrum.h: Renamed from Source/JavaScriptCore/wtf/Spectrum.h.
        (WTF):
        (Spectrum):
        (WTF::Spectrum::Spectrum):
        (WTF::Spectrum::add):
        (WTF::Spectrum::get):
        (WTF::Spectrum::begin):
        (WTF::Spectrum::end):
        (WTF::Spectrum::KeyAndCount::KeyAndCount):
        (KeyAndCount):
        (WTF::Spectrum::KeyAndCount::operator<):
        (WTF::Spectrum::buildList):
        * wtf/StackBounds.cpp: Renamed from Source/JavaScriptCore/wtf/StackBounds.cpp.
        (WTF):
        (WTF::estimateStackBound):
        (WTF::StackBounds::initialize):
        (WTF::detectGrowingDownward):
        (WTF::isPageWritable):
        (WTF::getLowerStackBound):
        (WTF::getUpperStackBound):
        * wtf/StackBounds.h: Renamed from Source/JavaScriptCore/wtf/StackBounds.h.
        (WTF):
        (StackBounds):
        (WTF::StackBounds::StackBounds):
        (WTF::StackBounds::currentThreadStackBounds):
        (WTF::StackBounds::origin):
        (WTF::StackBounds::current):
        (WTF::StackBounds::recursionLimit):
        (WTF::StackBounds::recursionCheck):
        (WTF::StackBounds::isGrowingDownward):
        (WTF::StackBounds::checkConsistency):
        * wtf/StaticConstructors.h: Renamed from Source/JavaScriptCore/wtf/StaticConstructors.h.
        * wtf/StdLibExtras.h: Renamed from Source/JavaScriptCore/wtf/StdLibExtras.h.
        (isPointerTypeAlignmentOkay):
        (reinterpret_cast_ptr):
        (WTF):
        (WTF::isPointerAligned):
        (WTF::is8ByteAligned):
        (WTF::bitwise_cast):
        (WTF::safeCast):
        (WTF::bitCount):
        (WTF::roundUpToMultipleOf):
        (WTF::binarySearch):
        (WTF::binarySearchWithFunctor):
        (WTF::genericBinarySearch):
        (operator new):
        * wtf/StringExtras.cpp: Renamed from Source/JavaScriptCore/wtf/StringExtras.cpp.
        (strcasecmp):
        (strncasecmp):
        * wtf/StringExtras.h: Renamed from Source/JavaScriptCore/wtf/StringExtras.h.
        (snprintf):
        (wtf_vsnprintf):
        (strnicmp):
        (stricmp):
        (strdup):
        (strncasecmp):
        (strcasecmp):
        (strnstr):
        * wtf/StringHasher.h: Renamed from Source/JavaScriptCore/wtf/StringHasher.h.
        (WTF):
        (StringHasher):
        (WTF::StringHasher::StringHasher):
        (WTF::StringHasher::addCharacters):
        (WTF::StringHasher::addCharacter):
        (WTF::StringHasher::hash):
        (WTF::StringHasher::computeHash):
        (WTF::StringHasher::hashMemory):
        (WTF::StringHasher::defaultConverter):
        (WTF::StringHasher::addCharactersToHash):
        * wtf/TCPackedCache.h: Renamed from Source/JavaScriptCore/wtf/TCPackedCache.h.
        (PackedCache):
        (PackedCache::PackedCache):
        (PackedCache::Put):
        (PackedCache::Has):
        (PackedCache::GetOrDefault):
        (PackedCache::Clear):
        (PackedCache::EntryToValue):
        (PackedCache::EntryToUpper):
        (PackedCache::KeyToUpper):
        (PackedCache::UpperToPartialKey):
        (PackedCache::Hash):
        (PackedCache::KeyMatch):
        * wtf/TCPageMap.h: Renamed from Source/JavaScriptCore/wtf/TCPageMap.h.
        (TCMalloc_PageMap1):
        (TCMalloc_PageMap1::init):
        (TCMalloc_PageMap1::Ensure):
        (TCMalloc_PageMap1::PreallocateMoreMemory):
        (TCMalloc_PageMap1::get):
        (TCMalloc_PageMap1::set):
        (TCMalloc_PageMap2):
        (Leaf):
        (TCMalloc_PageMap2::init):
        (TCMalloc_PageMap2::get):
        (TCMalloc_PageMap2::set):
        (TCMalloc_PageMap2::Ensure):
        (TCMalloc_PageMap2::PreallocateMoreMemory):
        (TCMalloc_PageMap2::visitValues):
        (TCMalloc_PageMap2::visitAllocations):
        (TCMalloc_PageMap3):
        (Node):
        (TCMalloc_PageMap3::NewNode):
        (TCMalloc_PageMap3::init):
        (TCMalloc_PageMap3::get):
        (TCMalloc_PageMap3::set):
        (TCMalloc_PageMap3::Ensure):
        (TCMalloc_PageMap3::PreallocateMoreMemory):
        (TCMalloc_PageMap3::visitValues):
        (TCMalloc_PageMap3::visitAllocations):
        * wtf/TCSpinLock.h: Renamed from Source/JavaScriptCore/wtf/TCSpinLock.h.
        (TCMalloc_SpinLock):
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):
        (TCMalloc_SpinLock::IsHeld):
        (TCMalloc_SpinLock::Init):
        (TCMalloc_SpinLock::Finalize):
        (TCMalloc_SlowLock):
        (TCMalloc_SpinLockHolder):
        (TCMalloc_SpinLockHolder::TCMalloc_SpinLockHolder):
        (TCMalloc_SpinLockHolder::~TCMalloc_SpinLockHolder):
        * wtf/TCSystemAlloc.cpp: Renamed from Source/JavaScriptCore/wtf/TCSystemAlloc.cpp.
        (TrySbrk):
        (TryMmap):
        (TryVirtualAlloc):
        (TryDevMem):
        (TCMalloc_SystemAlloc):
        (TCMalloc_SystemRelease):
        (TCMalloc_SystemCommit):
        * wtf/TCSystemAlloc.h: Renamed from Source/JavaScriptCore/wtf/TCSystemAlloc.h.
        (TCMalloc_SystemRelease):
        (TCMalloc_SystemCommit):
        * wtf/TemporaryChange.h: Renamed from Source/JavaScriptCore/wtf/TemporaryChange.h.
        (WTF):
        (TemporaryChange):
        (WTF::TemporaryChange::TemporaryChange):
        (WTF::TemporaryChange::~TemporaryChange):
        * wtf/ThreadFunctionInvocation.h: Renamed from Source/JavaScriptCore/wtf/ThreadFunctionInvocation.h.
        (WTF):
        (WTF::ThreadFunctionInvocation::ThreadFunctionInvocation):
        (ThreadFunctionInvocation):
        * wtf/ThreadIdentifierDataPthreads.cpp: Renamed from Source/JavaScriptCore/wtf/ThreadIdentifierDataPthreads.cpp.
        (WTF):
        (WTF::ThreadIdentifierData::~ThreadIdentifierData):
        (WTF::ThreadIdentifierData::initializeOnce):
        (WTF::ThreadIdentifierData::identifier):
        (WTF::ThreadIdentifierData::initialize):
        (WTF::ThreadIdentifierData::destruct):
        * wtf/ThreadIdentifierDataPthreads.h: Renamed from Source/JavaScriptCore/wtf/ThreadIdentifierDataPthreads.h.
        (WTF):
        (ThreadIdentifierData):
        (WTF::ThreadIdentifierData::ThreadIdentifierData):
        * wtf/ThreadRestrictionVerifier.h: Renamed from Source/JavaScriptCore/wtf/ThreadRestrictionVerifier.h.
        (WTF):
        (ThreadRestrictionVerifier):
        (WTF::ThreadRestrictionVerifier::ThreadRestrictionVerifier):
        (WTF::ThreadRestrictionVerifier::~ThreadRestrictionVerifier):
        (WTF::ThreadRestrictionVerifier::setMutexMode):
        (WTF::ThreadRestrictionVerifier::setDispatchQueueMode):
        (WTF::ThreadRestrictionVerifier::turnOffVerification):
        (WTF::ThreadRestrictionVerifier::setShared):
        (WTF::ThreadRestrictionVerifier::isSafeToUse):
        * wtf/ThreadSafeRefCounted.h: Renamed from Source/JavaScriptCore/wtf/ThreadSafeRefCounted.h.
        (WTF):
        (ThreadSafeRefCountedBase):
        (WTF::ThreadSafeRefCountedBase::ThreadSafeRefCountedBase):
        (WTF::ThreadSafeRefCountedBase::ref):
        (WTF::ThreadSafeRefCountedBase::hasOneRef):
        (WTF::ThreadSafeRefCountedBase::refCount):
        (WTF::ThreadSafeRefCountedBase::derefBase):
        (ThreadSafeRefCounted):
        (WTF::ThreadSafeRefCounted::deref):
        (WTF::ThreadSafeRefCounted::ThreadSafeRefCounted):
        * wtf/ThreadSpecific.h: Renamed from Source/JavaScriptCore/wtf/ThreadSpecific.h.
        (WTF):
        (ThreadSpecific):
        (Data):
        (WTF::ThreadSpecific::Data::Data):
        (WTF::::ThreadSpecific):
        (WTF::::get):
        (WTF::::set):
        (WTF::::~ThreadSpecific):
        (WTF::::destroy):
        (WTF::::isSet):
        (WTF::T):
        (WTF::::operator):
        * wtf/ThreadSpecificWin.cpp: Renamed from Source/JavaScriptCore/wtf/ThreadSpecificWin.cpp.
        (WTF):
        (WTF::tlsKeyCount):
        (WTF::tlsKeys):
        (WTF::ThreadSpecificThreadExit):
        * wtf/Threading.cpp: Renamed from Source/JavaScriptCore/wtf/Threading.cpp.
        (WTF):
        (NewThreadContext):
        (WTF::NewThreadContext::NewThreadContext):
        (WTF::threadEntryPoint):
        (WTF::createThread):
        (WTF::ThreadFunctionWithReturnValueInvocation::ThreadFunctionWithReturnValueInvocation):
        (ThreadFunctionWithReturnValueInvocation):
        (WTF::compatEntryPoint):
        (WTF::waitForThreadCompletion):
        * wtf/Threading.h: Renamed from Source/JavaScriptCore/wtf/Threading.h.
        (WTF):
        * wtf/ThreadingNone.cpp: Renamed from Source/JavaScriptCore/wtf/ThreadingNone.cpp.
        * wtf/ThreadingPrimitives.h: Renamed from Source/JavaScriptCore/wtf/ThreadingPrimitives.h.
        (WTF):
        (PlatformMutex):
        (PlatformCondition):
        (Mutex):
        (WTF::Mutex::impl):
        (ReadWriteLock):
        (ThreadCondition):
        * wtf/ThreadingPthreads.cpp: Renamed from Source/JavaScriptCore/wtf/ThreadingPthreads.cpp.
        (WTF):
        (WTF::threadMapMutex):
        (WTF::initializeThreading):
        (WTF::lockAtomicallyInitializedStaticMutex):
        (WTF::unlockAtomicallyInitializedStaticMutex):
        (WTF::threadMap):
        (WTF::identifierByPthreadHandle):
        (WTF::establishIdentifierForPthreadHandle):
        (WTF::pthreadHandleForIdentifier):
        (WTF::clearPthreadHandleForIdentifier):
        (WTF::wtfThreadEntryPoint):
        (WTF::createThreadInternal):
        (WTF::initializeCurrentThreadInternal):
        (WTF::waitForThreadCompletion):
        (WTF::detachThread):
        (WTF::yield):
        (WTF::currentThread):
        (WTF::Mutex::Mutex):
        (WTF::Mutex::~Mutex):
        (WTF::Mutex::lock):
        (WTF::Mutex::tryLock):
        (WTF::Mutex::unlock):
        (WTF::ReadWriteLock::ReadWriteLock):
        (WTF::ReadWriteLock::~ReadWriteLock):
        (WTF::ReadWriteLock::readLock):
        (WTF::ReadWriteLock::tryReadLock):
        (WTF::ReadWriteLock::writeLock):
        (WTF::ReadWriteLock::tryWriteLock):
        (WTF::ReadWriteLock::unlock):
        (WTF::ThreadCondition::ThreadCondition):
        (WTF::ThreadCondition::~ThreadCondition):
        (WTF::ThreadCondition::wait):
        (WTF::ThreadCondition::timedWait):
        (WTF::ThreadCondition::signal):
        (WTF::ThreadCondition::broadcast):
        * wtf/ThreadingWin.cpp: Renamed from Source/JavaScriptCore/wtf/ThreadingWin.cpp.
        (WTF):
        (tagTHREADNAME_INFO):
        (WTF::initializeCurrentThreadInternal):
        (WTF::lockAtomicallyInitializedStaticMutex):
        (WTF::unlockAtomicallyInitializedStaticMutex):
        (WTF::threadMapMutex):
        (WTF::initializeThreading):
        (WTF::threadMap):
        (WTF::storeThreadHandleByIdentifier):
        (WTF::threadHandleForIdentifier):
        (WTF::clearThreadHandleForIdentifier):
        (WTF::wtfThreadEntryPoint):
        (WTF::createThreadInternal):
        (WTF::waitForThreadCompletion):
        (WTF::detachThread):
        (WTF::yield):
        (WTF::currentThread):
        (WTF::Mutex::Mutex):
        (WTF::Mutex::~Mutex):
        (WTF::Mutex::lock):
        (WTF::Mutex::tryLock):
        (WTF::Mutex::unlock):
        (WTF::PlatformCondition::timedWait):
        (WTF::PlatformCondition::signal):
        (WTF::ThreadCondition::ThreadCondition):
        (WTF::ThreadCondition::~ThreadCondition):
        (WTF::ThreadCondition::wait):
        (WTF::ThreadCondition::timedWait):
        (WTF::ThreadCondition::signal):
        (WTF::ThreadCondition::broadcast):
        (WTF::absoluteTimeToWaitTimeoutInterval):
        * wtf/TypeTraits.cpp: Renamed from Source/JavaScriptCore/wtf/TypeTraits.cpp.
        (WTF):
        * wtf/TypeTraits.h: Renamed from Source/JavaScriptCore/wtf/TypeTraits.h.
        (WTF):
        (IsConvertibleToInteger):
        (IsArray):
        (IsSameType):
        (IsSubclass):
        (NoType):
        (IsSubclassOfTemplate):
        (RemoveTemplate):
        (RemoveConst):
        (RemoveVolatile):
        (RemoveConstVolatile):
        (RemovePointer):
        (RemoveReference):
        (RemoveExtent):
        (DecayArray):
        (IntegralConstant):
        * wtf/TypedArrayBase.h: Renamed from Source/JavaScriptCore/wtf/TypedArrayBase.h.
        (WTF):
        (TypedArrayBase):
        (WTF::TypedArrayBase::data):
        (WTF::TypedArrayBase::set):
        (WTF::TypedArrayBase::setRange):
        (WTF::TypedArrayBase::zeroRange):
        (WTF::TypedArrayBase::length):
        (WTF::TypedArrayBase::byteLength):
        (WTF::TypedArrayBase::TypedArrayBase):
        (WTF::TypedArrayBase::create):
        (WTF::TypedArrayBase::subarrayImpl):
        (WTF::TypedArrayBase::neuter):
        * wtf/Uint16Array.h: Renamed from Source/JavaScriptCore/wtf/Uint16Array.h.
        (WTF):
        (Uint16Array):
        (WTF::Uint16Array::set):
        (WTF::Uint16Array::isUnsignedShortArray):
        (WTF::Uint16Array::create):
        (WTF::Uint16Array::Uint16Array):
        (WTF::Uint16Array::subarray):
        * wtf/Uint32Array.h: Renamed from Source/JavaScriptCore/wtf/Uint32Array.h.
        (WTF):
        (Uint32Array):
        (WTF::Uint32Array::set):
        (WTF::Uint32Array::isUnsignedIntArray):
        (WTF::Uint32Array::create):
        (WTF::Uint32Array::Uint32Array):
        (WTF::Uint32Array::subarray):
        * wtf/Uint8Array.h: Renamed from Source/JavaScriptCore/wtf/Uint8Array.h.
        (WTF):
        (Uint8Array):
        (WTF::Uint8Array::set):
        (WTF::Uint8Array::isUnsignedByteArray):
        (WTF::Uint8Array::create):
        (WTF::Uint8Array::Uint8Array):
        (WTF::Uint8Array::subarray):
        * wtf/Uint8ClampedArray.h: Renamed from Source/JavaScriptCore/wtf/Uint8ClampedArray.h.
        (WTF):
        (Uint8ClampedArray):
        (WTF::Uint8ClampedArray::set):
        (WTF::Uint8ClampedArray::isUnsignedByteClampedArray):
        (WTF::Uint8ClampedArray::create):
        (WTF::Uint8ClampedArray::Uint8ClampedArray):
        (WTF::Uint8ClampedArray::subarray):
        * wtf/UnionFind.h: Renamed from Source/JavaScriptCore/wtf/UnionFind.h.
        (WTF):
        (UnionFind):
        (WTF::UnionFind::UnionFind):
        (WTF::UnionFind::find):
        (WTF::UnionFind::unify):
        * wtf/UnusedParam.h: Renamed from Source/JavaScriptCore/wtf/UnusedParam.h.
        (unusedParam):
        * wtf/VMTags.h: Renamed from Source/JavaScriptCore/wtf/VMTags.h.
        * wtf/ValueCheck.h: Renamed from Source/JavaScriptCore/wtf/ValueCheck.h.
        (WTF):
        (ValueCheck):
        (WTF::ValueCheck::checkConsistency):
        * wtf/Vector.h: Renamed from Source/JavaScriptCore/wtf/Vector.h.
        (WTF):
        (WTF::VectorTypeOperations::destruct):
        (VectorTypeOperations):
        (WTF::VectorTypeOperations::initialize):
        (WTF::VectorTypeOperations::move):
        (WTF::VectorTypeOperations::moveOverlapping):
        (WTF::VectorTypeOperations::uninitializedCopy):
        (WTF::VectorTypeOperations::uninitializedFill):
        (WTF::VectorTypeOperations::compare):
        (VectorBufferBase):
        (WTF::VectorBufferBase::allocateBuffer):
        (WTF::VectorBufferBase::tryAllocateBuffer):
        (WTF::VectorBufferBase::deallocateBuffer):
        (WTF::VectorBufferBase::buffer):
        (WTF::VectorBufferBase::bufferSlot):
        (WTF::VectorBufferBase::capacity):
        (WTF::VectorBufferBase::releaseBuffer):
        (WTF::VectorBufferBase::VectorBufferBase):
        (WTF::VectorBufferBase::~VectorBufferBase):
        (VectorBuffer):
        (WTF::VectorBuffer::VectorBuffer):
        (WTF::VectorBuffer::~VectorBuffer):
        (WTF::VectorBuffer::allocateBuffer):
        (WTF::VectorBuffer::tryAllocateBuffer):
        (WTF::VectorBuffer::deallocateBuffer):
        (WTF::VectorBuffer::swap):
        (WTF::VectorBuffer::restoreInlineBufferIfNeeded):
        (WTF::VectorBuffer::releaseBuffer):
        (WTF::VectorBuffer::inlineBuffer):
        (Vector):
        (WTF::Vector::Vector):
        (WTF::Vector::~Vector):
        (WTF::Vector::size):
        (WTF::Vector::capacity):
        (WTF::Vector::isEmpty):
        (WTF::Vector::at):
        (WTF::Vector::operator[]):
        (WTF::Vector::data):
        (WTF::Vector::dataSlot):
        (WTF::Vector::begin):
        (WTF::Vector::end):
        (WTF::Vector::rbegin):
        (WTF::Vector::rend):
        (WTF::Vector::reversed):
        (WTF::Vector::first):
        (WTF::Vector::last):
        (WTF::Vector::shrinkToFit):
        (WTF::Vector::clear):
        (WTF::Vector::removeLast):
        (WTF::Vector::fill):
        (WTF::Vector::swap):
        (VectorReverseProxy):
        (WTF::Vector::VectorReverseProxy::begin):
        (WTF::Vector::VectorReverseProxy::end):
        (WTF::operator<<):
        (WTF::operator>>):
        (WTF::::Vector):
        (WTF::=):
        (WTF::typelessPointersAreEqual):
        (WTF::::contains):
        (WTF::::find):
        (WTF::::reverseFind):
        (WTF::::fill):
        (WTF::::appendRange):
        (WTF::::expandCapacity):
        (WTF::::tryExpandCapacity):
        (WTF::::resize):
        (WTF::::shrink):
        (WTF::::grow):
        (WTF::::reserveCapacity):
        (WTF::::tryReserveCapacity):
        (WTF::::reserveInitialCapacity):
        (WTF::::shrinkCapacity):
        (WTF::::append):
        (WTF::::tryAppend):
        (WTF::::appendSlowCase):
        (WTF::::uncheckedAppend):
        (WTF::::insert):
        (WTF::::prepend):
        (WTF::::remove):
        (WTF::::reverse):
        (WTF::::releaseBuffer):
        (WTF::::checkConsistency):
        (WTF::deleteAllValues):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        * wtf/VectorTraits.h: Renamed from Source/JavaScriptCore/wtf/VectorTraits.h.
        (WTF):
        (SimpleClassVectorTraits):
        * wtf/WTFThreadData.cpp: Renamed from Source/JavaScriptCore/wtf/WTFThreadData.cpp.
        (WTF):
        (WTF::WTFThreadData::WTFThreadData):
        (WTF::WTFThreadData::~WTFThreadData):
        (JSC):
        (JSC::IdentifierTable::~IdentifierTable):
        (JSC::IdentifierTable::add):
        * wtf/WTFThreadData.h: Renamed from Source/JavaScriptCore/wtf/WTFThreadData.h.
        (JSC):
        (IdentifierTable):
        (JSC::IdentifierTable::remove):
        (JSC::IdentifierTable::literalTable):
        (WTF):
        (WTFThreadData):
        (WTF::WTFThreadData::atomicStringTable):
        (WTF::WTFThreadData::currentIdentifierTable):
        (WTF::WTFThreadData::setCurrentIdentifierTable):
        (WTF::WTFThreadData::resetCurrentIdentifierTable):
        (WTF::WTFThreadData::stack):
        (WTF::wtfThreadData):
        * wtf/blackberry/MainThreadBlackBerry.cpp: Renamed from Source/JavaScriptCore/wtf/blackberry/MainThreadBlackBerry.cpp.
        (WTF):
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/chromium/ChromiumThreading.h: Renamed from Source/JavaScriptCore/wtf/chromium/ChromiumThreading.h.
        (WTF):
        (ChromiumThreading):
        * wtf/chromium/MainThreadChromium.cpp: Renamed from Source/JavaScriptCore/wtf/chromium/MainThreadChromium.cpp.
        (WTF):
        (WTF::initializeMainThread):
        (WTF::callOnMainThread):
        (WTF::callOnMainThreadAndWait):
        (WTF::setMainThreadCallbacksPaused):
        (WTF::isMainThread):
        * wtf/dtoa.cpp: Renamed from Source/JavaScriptCore/wtf/dtoa.cpp.
        (WTF):
        (WTF::storeInc):
        (WTF::BigInt::BigInt):
        (BigInt):
        (WTF::BigInt::clear):
        (WTF::BigInt::size):
        (WTF::BigInt::resize):
        (WTF::BigInt::words):
        (WTF::BigInt::append):
        (WTF::multadd):
        (WTF::hi0bits):
        (WTF::lo0bits):
        (WTF::i2b):
        (WTF::mult):
        (P5Node):
        (WTF::P5Node::P5Node):
        (WTF::pow5mult):
        (WTF::lshift):
        (WTF::cmp):
        (WTF::diff):
        (WTF::d2b):
        (WTF::strtod):
        (WTF::quorem):
        (WTF::dtoa):
        * wtf/dtoa.h: Renamed from Source/JavaScriptCore/wtf/dtoa.h.
        (WTF):
        * wtf/dtoa/COPYING: Renamed from Source/JavaScriptCore/wtf/dtoa/COPYING.
        * wtf/dtoa/LICENSE: Renamed from Source/JavaScriptCore/wtf/dtoa/LICENSE.
        * wtf/dtoa/README: Renamed from Source/JavaScriptCore/wtf/dtoa/README.
        * wtf/dtoa/bignum-dtoa.cc: Renamed from Source/JavaScriptCore/wtf/dtoa/bignum-dtoa.cc.
        * wtf/dtoa/bignum-dtoa.h: Renamed from Source/JavaScriptCore/wtf/dtoa/bignum-dtoa.h.
        (WTF):
        (double_conversion):
        * wtf/dtoa/bignum.cc: Renamed from Source/JavaScriptCore/wtf/dtoa/bignum.cc.
        * wtf/dtoa/bignum.h: Renamed from Source/JavaScriptCore/wtf/dtoa/bignum.h.
        (WTF):
        (double_conversion):
        (Bignum):
        (WTF::double_conversion::Bignum::Times10):
        (WTF::double_conversion::Bignum::Equal):
        (WTF::double_conversion::Bignum::LessEqual):
        (WTF::double_conversion::Bignum::Less):
        (WTF::double_conversion::Bignum::PlusEqual):
        (WTF::double_conversion::Bignum::PlusLessEqual):
        (WTF::double_conversion::Bignum::PlusLess):
        (WTF::double_conversion::Bignum::EnsureCapacity):
        (WTF::double_conversion::Bignum::BigitLength):
        * wtf/dtoa/cached-powers.cc: Renamed from Source/JavaScriptCore/wtf/dtoa/cached-powers.cc.
        * wtf/dtoa/cached-powers.h: Renamed from Source/JavaScriptCore/wtf/dtoa/cached-powers.h.
        (WTF):
        (double_conversion):
        (PowersOfTenCache):
        * wtf/dtoa/diy-fp.cc: Renamed from Source/JavaScriptCore/wtf/dtoa/diy-fp.cc.
        * wtf/dtoa/diy-fp.h: Renamed from Source/JavaScriptCore/wtf/dtoa/diy-fp.h.
        (WTF):
        (double_conversion):
        (DiyFp):
        (WTF::double_conversion::DiyFp::DiyFp):
        (WTF::double_conversion::DiyFp::Subtract):
        (WTF::double_conversion::DiyFp::Minus):
        (WTF::double_conversion::DiyFp::Times):
        (WTF::double_conversion::DiyFp::Normalize):
        (WTF::double_conversion::DiyFp::f):
        (WTF::double_conversion::DiyFp::e):
        (WTF::double_conversion::DiyFp::set_f):
        (WTF::double_conversion::DiyFp::set_e):
        * wtf/dtoa/double-conversion.cc: Renamed from Source/JavaScriptCore/wtf/dtoa/double-conversion.cc.
        * wtf/dtoa/double-conversion.h: Renamed from Source/JavaScriptCore/wtf/dtoa/double-conversion.h.
        (WTF):
        (double_conversion):
        (DoubleToStringConverter):
        (WTF::double_conversion::DoubleToStringConverter::DoubleToStringConverter):
        (StringToDoubleConverter):
        (WTF::double_conversion::StringToDoubleConverter::StringToDoubleConverter):
        * wtf/dtoa/double.h: Renamed from Source/JavaScriptCore/wtf/dtoa/double.h.
        (WTF):
        (double_conversion):
        (WTF::double_conversion::double_to_uint64):
        (WTF::double_conversion::uint64_to_double):
        (Double):
        (WTF::double_conversion::Double::Double):
        (WTF::double_conversion::Double::AsDiyFp):
        (WTF::double_conversion::Double::AsNormalizedDiyFp):
        (WTF::double_conversion::Double::AsUint64):
        (WTF::double_conversion::Double::NextDouble):
        (WTF::double_conversion::Double::Exponent):
        (WTF::double_conversion::Double::Significand):
        (WTF::double_conversion::Double::IsDenormal):
        (WTF::double_conversion::Double::IsSpecial):
        (WTF::double_conversion::Double::IsNan):
        (WTF::double_conversion::Double::IsInfinite):
        (WTF::double_conversion::Double::Sign):
        (WTF::double_conversion::Double::UpperBoundary):
        (WTF::double_conversion::Double::NormalizedBoundaries):
        (WTF::double_conversion::Double::value):
        (WTF::double_conversion::Double::SignificandSizeForOrderOfMagnitude):
        (WTF::double_conversion::Double::Infinity):
        (WTF::double_conversion::Double::NaN):
        (WTF::double_conversion::Double::DiyFpToUint64):
        * wtf/dtoa/fast-dtoa.cc: Renamed from Source/JavaScriptCore/wtf/dtoa/fast-dtoa.cc.
        * wtf/dtoa/fast-dtoa.h: Renamed from Source/JavaScriptCore/wtf/dtoa/fast-dtoa.h.
        (WTF):
        (double_conversion):
        * wtf/dtoa/fixed-dtoa.cc: Renamed from Source/JavaScriptCore/wtf/dtoa/fixed-dtoa.cc.
        * wtf/dtoa/fixed-dtoa.h: Renamed from Source/JavaScriptCore/wtf/dtoa/fixed-dtoa.h.
        (WTF):
        (double_conversion):
        * wtf/dtoa/strtod.cc: Renamed from Source/JavaScriptCore/wtf/dtoa/strtod.cc.
        * wtf/dtoa/strtod.h: Renamed from Source/JavaScriptCore/wtf/dtoa/strtod.h.
        (WTF):
        (double_conversion):
        * wtf/dtoa/utils.h: Renamed from Source/JavaScriptCore/wtf/dtoa/utils.h.
        (WTF):
        (double_conversion):
        (WTF::double_conversion::Max):
        (WTF::double_conversion::Min):
        (WTF::double_conversion::StrLength):
        (Vector):
        (WTF::double_conversion::Vector::Vector):
        (WTF::double_conversion::Vector::SubVector):
        (WTF::double_conversion::Vector::length):
        (WTF::double_conversion::Vector::is_empty):
        (WTF::double_conversion::Vector::start):
        (WTF::double_conversion::Vector::operator[]):
        (WTF::double_conversion::Vector::first):
        (WTF::double_conversion::Vector::last):
        (StringBuilder):
        (WTF::double_conversion::StringBuilder::StringBuilder):
        (WTF::double_conversion::StringBuilder::~StringBuilder):
        (WTF::double_conversion::StringBuilder::size):
        (WTF::double_conversion::StringBuilder::position):
        (WTF::double_conversion::StringBuilder::SetPosition):
        (WTF::double_conversion::StringBuilder::Reset):
        (WTF::double_conversion::StringBuilder::AddCharacter):
        (WTF::double_conversion::StringBuilder::AddString):
        (WTF::double_conversion::StringBuilder::AddSubstring):
        (WTF::double_conversion::StringBuilder::AddPadding):
        (WTF::double_conversion::StringBuilder::Finalize):
        (WTF::double_conversion::StringBuilder::is_finalized):
        (WTF::double_conversion::BitCast):
        * wtf/efl/MainThreadEfl.cpp: Renamed from Source/JavaScriptCore/wtf/efl/MainThreadEfl.cpp.
        (WTF):
        (WTF::pipeObject):
        (WTF::monitorDispatchFunctions):
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/efl/OwnPtrEfl.cpp: Renamed from Source/JavaScriptCore/wtf/efl/OwnPtrEfl.cpp.
        (WTF):
        (WTF::deleteOwnedPtr):
        * wtf/gobject/GOwnPtr.cpp: Renamed from Source/JavaScriptCore/wtf/gobject/GOwnPtr.cpp.
        (WTF):
        (WTF::GError):
        (WTF::GList):
        (WTF::GSList):
        (WTF::GPatternSpec):
        (WTF::GDir):
        (WTF::GTimer):
        (WTF::GKeyFile):
        * wtf/gobject/GOwnPtr.h: Renamed from Source/JavaScriptCore/wtf/gobject/GOwnPtr.h.
        (WTF):
        (GOwnPtr):
        (WTF::GOwnPtr::GOwnPtr):
        (WTF::GOwnPtr::~GOwnPtr):
        (WTF::GOwnPtr::get):
        (WTF::GOwnPtr::release):
        (WTF::GOwnPtr::outPtr):
        (WTF::GOwnPtr::set):
        (WTF::GOwnPtr::clear):
        (WTF::GOwnPtr::operator*):
        (WTF::GOwnPtr::operator->):
        (WTF::GOwnPtr::operator!):
        (WTF::GOwnPtr::operator UnspecifiedBoolType):
        (WTF::GOwnPtr::swap):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::getPtr):
        (WTF::freeOwnedGPtr):
        * wtf/gobject/GRefPtr.cpp: Renamed from Source/JavaScriptCore/wtf/gobject/GRefPtr.cpp.
        (WTF):
        (WTF::refGPtr):
        (WTF::derefGPtr):
        (_GVariant):
        * wtf/gobject/GRefPtr.h: Renamed from Source/JavaScriptCore/wtf/gobject/GRefPtr.h.
        (WTF):
        (GRefPtr):
        (WTF::GRefPtr::GRefPtr):
        (WTF::GRefPtr::~GRefPtr):
        (WTF::GRefPtr::clear):
        (WTF::GRefPtr::isHashTableDeletedValue):
        (WTF::GRefPtr::get):
        (WTF::GRefPtr::operator*):
        (WTF::GRefPtr::operator->):
        (WTF::GRefPtr::operator!):
        (WTF::GRefPtr::operator UnspecifiedBoolType):
        (WTF::GRefPtr::hashTableDeletedValue):
        (WTF::=):
        (WTF::::swap):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::static_pointer_cast):
        (WTF::const_pointer_cast):
        (WTF::getPtr):
        (WTF::adoptGRef):
        (WTF::refGPtr):
        (WTF::derefGPtr):
        * wtf/gobject/GTypedefs.h: Renamed from Source/JavaScriptCore/wtf/gobject/GTypedefs.h.
        * wtf/gobject/GlibUtilities.cpp: Renamed from Source/JavaScriptCore/wtf/gobject/GlibUtilities.cpp.
        (getCurrentExecutablePath):
        * wtf/gobject/GlibUtilities.h: Renamed from Source/JavaScriptCore/wtf/gobject/GlibUtilities.h.
        * wtf/gtk/MainThreadGtk.cpp: Renamed from Source/JavaScriptCore/wtf/gtk/MainThreadGtk.cpp.
        (WTF):
        (WTF::initializeMainThreadPlatform):
        (WTF::timeoutFired):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/mac/MainThreadMac.mm: Renamed from Source/JavaScriptCore/wtf/mac/MainThreadMac.mm.
        (-[JSWTFMainThreadCaller call]):
        (WTF):
        (WTF::initializeMainThreadPlatform):
        (WTF::initializeMainThreadToProcessMainThreadPlatform):
        (WTF::timerFired):
        (WTF::postTimer):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        (WTF::isMainThread):
        * wtf/qt/MainThreadQt.cpp: Renamed from Source/JavaScriptCore/wtf/qt/MainThreadQt.cpp.
        (WTF):
        (MainThreadInvoker):
        (WTF::MainThreadInvoker::MainThreadInvoker):
        (WTF::MainThreadInvoker::event):
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/qt/StringQt.cpp: Renamed from Source/JavaScriptCore/wtf/qt/StringQt.cpp.
        (WTF):
        (WTF::String::String):
        (WTF::String::operator QString):
        (WTF::operator<<):
        (WTF::operator>>):
        * wtf/qt/UtilsQt.h: Renamed from Source/JavaScriptCore/wtf/qt/UtilsQt.h.
        (escapeHtml):
        * wtf/qt/compat/QGuiApplication: Renamed from Source/JavaScriptCore/wtf/qt/compat/QGuiApplication.
        * wtf/qt/compat/qguiapplication.h: Renamed from Source/JavaScriptCore/wtf/qt/compat/qguiapplication.h.
        (QGuiApplication):
        (QGuiApplication::styleHints):
        * wtf/text/ASCIIFastPath.h: Renamed from Source/JavaScriptCore/wtf/text/ASCIIFastPath.h.
        (WTF):
        (WTF::isAlignedToMachineWord):
        (WTF::alignToMachineWord):
        (WTF::isAllASCII):
        (WTF::charactersAreAllASCII):
        * wtf/text/AtomicString.cpp: Renamed from Source/JavaScriptCore/wtf/text/AtomicString.cpp.
        (WTF):
        (AtomicStringTable):
        (WTF::AtomicStringTable::create):
        (WTF::AtomicStringTable::table):
        (WTF::AtomicStringTable::destroy):
        (WTF::stringTable):
        (WTF::addToStringTable):
        (WTF::CStringTranslator::hash):
        (CStringTranslator):
        (WTF::CStringTranslator::equal):
        (WTF::CStringTranslator::translate):
        (WTF::AtomicString::add):
        (UCharBuffer):
        (WTF::UCharBufferTranslator::hash):
        (UCharBufferTranslator):
        (WTF::UCharBufferTranslator::equal):
        (WTF::UCharBufferTranslator::translate):
        (HashAndCharacters):
        (WTF::HashAndCharactersTranslator::hash):
        (HashAndCharactersTranslator):
        (WTF::HashAndCharactersTranslator::equal):
        (WTF::HashAndCharactersTranslator::translate):
        (HashAndUTF8Characters):
        (WTF::HashAndUTF8CharactersTranslator::hash):
        (HashAndUTF8CharactersTranslator):
        (WTF::HashAndUTF8CharactersTranslator::equal):
        (WTF::HashAndUTF8CharactersTranslator::translate):
        (SubstringLocation):
        (WTF::SubstringTranslator::hash):
        (SubstringTranslator):
        (WTF::SubstringTranslator::equal):
        (WTF::SubstringTranslator::translate):
        (WTF::AtomicString::addSlowCase):
        (WTF::AtomicString::find):
        (WTF::AtomicString::remove):
        (WTF::AtomicString::lower):
        (WTF::AtomicString::fromUTF8Internal):
        (WTF::AtomicString::show):
        * wtf/text/AtomicString.h: Renamed from Source/JavaScriptCore/wtf/text/AtomicString.h.
        (WTF):
        (AtomicString):
        (WTF::AtomicString::AtomicString):
        (WTF::AtomicString::isHashTableDeletedValue):
        (WTF::AtomicString::operator const String&):
        (WTF::AtomicString::string):
        (WTF::AtomicString::impl):
        (WTF::AtomicString::characters):
        (WTF::AtomicString::length):
        (WTF::AtomicString::operator[]):
        (WTF::AtomicString::contains):
        (WTF::AtomicString::find):
        (WTF::AtomicString::startsWith):
        (WTF::AtomicString::endsWith):
        (WTF::AtomicString::upper):
        (WTF::AtomicString::toInt):
        (WTF::AtomicString::toDouble):
        (WTF::AtomicString::toFloat):
        (WTF::AtomicString::percentage):
        (WTF::AtomicString::isNull):
        (WTF::AtomicString::isEmpty):
        (WTF::AtomicString::createCFString):
        (WTF::AtomicString::operator NSString*):
        (WTF::AtomicString::operator QString):
        (WTF::AtomicString::add):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::equalIgnoringCase):
        (WTF::AtomicString::fromUTF8):
        * wtf/text/AtomicStringHash.h: Renamed from Source/JavaScriptCore/wtf/text/AtomicStringHash.h.
        (WTF):
        (WTF::AtomicStringHash::hash):
        (AtomicStringHash):
        (WTF::AtomicStringHash::equal):
        * wtf/text/AtomicStringImpl.h: Renamed from Source/JavaScriptCore/wtf/text/AtomicStringImpl.h.
        (WTF):
        (AtomicStringImpl):
        (WTF::AtomicStringImpl::AtomicStringImpl):
        * wtf/text/CString.cpp: Renamed from Source/JavaScriptCore/wtf/text/CString.cpp.
        (WTF):
        (WTF::CString::CString):
        (WTF::CString::init):
        (WTF::CString::mutableData):
        (WTF::CString::newUninitialized):
        (WTF::CString::copyBufferIfNeeded):
        (WTF::operator==):
        * wtf/text/CString.h: Renamed from Source/JavaScriptCore/wtf/text/CString.h.
        (WTF):
        (CStringBuffer):
        (WTF::CStringBuffer::data):
        (WTF::CStringBuffer::length):
        (WTF::CStringBuffer::create):
        (WTF::CStringBuffer::CStringBuffer):
        (WTF::CStringBuffer::mutableData):
        (CString):
        (WTF::CString::CString):
        (WTF::CString::data):
        (WTF::CString::length):
        (WTF::CString::isNull):
        (WTF::CString::buffer):
        (WTF::operator!=):
        * wtf/text/StringBuffer.h: Renamed from Source/JavaScriptCore/wtf/text/StringBuffer.h.
        (WTF):
        (StringBuffer):
        (WTF::StringBuffer::StringBuffer):
        (WTF::StringBuffer::~StringBuffer):
        (WTF::StringBuffer::shrink):
        (WTF::StringBuffer::resize):
        (WTF::StringBuffer::length):
        (WTF::StringBuffer::characters):
        (WTF::StringBuffer::operator[]):
        (WTF::StringBuffer::release):
        * wtf/text/StringBuilder.cpp: Renamed from Source/JavaScriptCore/wtf/text/StringBuilder.cpp.
        (WTF):
        (WTF::StringBuilder::reifyString):
        (WTF::StringBuilder::resize):
        (WTF::StringBuilder::allocateBuffer):
        (WTF::StringBuilder::allocateBufferUpConvert):
        (WTF::LChar):
        (WTF::UChar):
        (WTF::StringBuilder::reserveCapacity):
        (WTF::StringBuilder::appendUninitialized):
        (WTF::StringBuilder::appendUninitializedSlow):
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::canShrink):
        (WTF::StringBuilder::shrinkToFit):
        * wtf/text/StringBuilder.h: Renamed from Source/JavaScriptCore/wtf/text/StringBuilder.h.
        (WTF):
        (StringBuilder):
        (WTF::StringBuilder::StringBuilder):
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::toString):
        (WTF::StringBuilder::toStringPreserveCapacity):
        (WTF::StringBuilder::toAtomicString):
        (WTF::StringBuilder::length):
        (WTF::StringBuilder::isEmpty):
        (WTF::StringBuilder::capacity):
        (WTF::StringBuilder::operator[]):
        (WTF::StringBuilder::characters8):
        (WTF::StringBuilder::characters16):
        (WTF::StringBuilder::characters):
        (WTF::StringBuilder::is8Bit):
        (WTF::StringBuilder::clear):
        (WTF::StringBuilder::swap):
        (WTF::LChar):
        (WTF::UChar):
        (WTF::equal):
        (WTF::operator==):
        (WTF::operator!=):
        * wtf/text/StringConcatenate.h: Renamed from Source/JavaScriptCore/wtf/text/StringConcatenate.h.
        (WTF):
        (WTF::sumWithOverflow):
        (WTF::tryMakeString):
        (WTF::makeString):
        * wtf/text/StringHash.h: Renamed from Source/JavaScriptCore/wtf/text/StringHash.h.
        (WTF):
        (WTF::StringHash::hash):
        (WTF::StringHash::equal):
        (StringHash):
        (CaseFoldingHash):
        (WTF::CaseFoldingHash::foldCase):
        (WTF::CaseFoldingHash::hash):
        (WTF::CaseFoldingHash::equal):
        (WTF::AlreadyHashed::hash):
        (AlreadyHashed):
        (WTF::AlreadyHashed::avoidDeletedValue):
        * wtf/text/StringImpl.cpp: Renamed from Source/JavaScriptCore/wtf/text/StringImpl.cpp.
        (WTF):
        (WTF::StringImpl::~StringImpl):
        (WTF::StringImpl::createUninitialized):
        (WTF::StringImpl::reallocate):
        (WTF::StringImpl::create):
        (WTF::StringImpl::getData16SlowCase):
        (WTF::StringImpl::upconvertCharacters):
        (WTF::StringImpl::containsOnlyWhitespace):
        (WTF::StringImpl::substring):
        (WTF::StringImpl::characterStartingAt):
        (WTF::StringImpl::lower):
        (WTF::StringImpl::upper):
        (WTF::StringImpl::fill):
        (WTF::StringImpl::foldCase):
        (WTF::StringImpl::stripMatchedCharacters):
        (UCharPredicate):
        (WTF::UCharPredicate::UCharPredicate):
        (WTF::UCharPredicate::operator()):
        (SpaceOrNewlinePredicate):
        (WTF::SpaceOrNewlinePredicate::operator()):
        (WTF::StringImpl::stripWhiteSpace):
        (WTF::StringImpl::removeCharacters):
        (WTF::StringImpl::simplifyMatchedCharactersToSpace):
        (WTF::StringImpl::simplifyWhiteSpace):
        (WTF::StringImpl::toIntStrict):
        (WTF::StringImpl::toUIntStrict):
        (WTF::StringImpl::toInt64Strict):
        (WTF::StringImpl::toUInt64Strict):
        (WTF::StringImpl::toIntPtrStrict):
        (WTF::StringImpl::toInt):
        (WTF::StringImpl::toUInt):
        (WTF::StringImpl::toInt64):
        (WTF::StringImpl::toUInt64):
        (WTF::StringImpl::toIntPtr):
        (WTF::StringImpl::toDouble):
        (WTF::StringImpl::toFloat):
        (WTF::equalIgnoringCase):
        (WTF::StringImpl::find):
        (WTF::StringImpl::findIgnoringCase):
        (WTF::findInner):
        (WTF::StringImpl::reverseFind):
        (WTF::reverseFindInner):
        (WTF::StringImpl::reverseFindIgnoringCase):
        (WTF::StringImpl::endsWith):
        (WTF::StringImpl::replace):
        (WTF::equal):
        (WTF::equalIgnoringNullity):
        (WTF::StringImpl::defaultWritingDirection):
        (WTF::StringImpl::adopt):
        (WTF::StringImpl::createWithTerminatingNullCharacter):
        * wtf/text/StringImpl.h: Renamed from Source/JavaScriptCore/wtf/text/StringImpl.h.
        (JSC):
        (WTF):
        (StringImpl):
        (WTF::StringImpl::StringImpl):
        (WTF::StringImpl::create):
        (WTF::StringImpl::create8):
        (WTF::StringImpl::tryCreateUninitialized):
        (WTF::StringImpl::flagsOffset):
        (WTF::StringImpl::flagIs8Bit):
        (WTF::StringImpl::dataOffset):
        (WTF::StringImpl::adopt):
        (WTF::StringImpl::length):
        (WTF::StringImpl::is8Bit):
        (WTF::StringImpl::characters8):
        (WTF::StringImpl::characters16):
        (WTF::StringImpl::characters):
        (WTF::StringImpl::cost):
        (WTF::StringImpl::has16BitShadow):
        (WTF::StringImpl::isIdentifier):
        (WTF::StringImpl::setIsIdentifier):
        (WTF::StringImpl::hasTerminatingNullCharacter):
        (WTF::StringImpl::isAtomic):
        (WTF::StringImpl::setIsAtomic):
        (WTF::StringImpl::setHash):
        (WTF::StringImpl::rawHash):
        (WTF::StringImpl::hasHash):
        (WTF::StringImpl::existingHash):
        (WTF::StringImpl::hash):
        (WTF::StringImpl::hasOneRef):
        (WTF::StringImpl::ref):
        (WTF::StringImpl::deref):
        (WTF::StringImpl::copyChars):
        (WTF::StringImpl::operator[]):
        (WTF::StringImpl::find):
        (WTF::StringImpl::findIgnoringCase):
        (WTF::StringImpl::startsWith):
        (WTF::StringImpl::bufferOwnership):
        (WTF::StringImpl::isStatic):
        (WTF::LChar):
        (WTF::UChar):
        (WTF::equal):
        (WTF::equalIgnoringCase):
        (WTF::equalIgnoringNullity):
        (WTF::codePointCompare):
        (WTF::codePointCompare8):
        (WTF::codePointCompare16):
        (WTF::codePointCompare8To16):
        (WTF::isSpaceOrNewline):
        (WTF::StringImpl::isolatedCopy):
        * wtf/text/StringOperators.h: Renamed from Source/JavaScriptCore/wtf/text/StringOperators.h.
        (WTF):
        (StringAppend):
        (WTF::StringAppend::StringAppend):
        (WTF::StringAppend::operator String):
        (WTF::StringAppend::operator AtomicString):
        (WTF::StringAppend::is8Bit):
        (WTF::StringAppend::writeTo):
        (WTF::StringAppend::length):
        (WTF::operator+):
        * wtf/text/StringStatics.cpp: Renamed from Source/JavaScriptCore/wtf/text/StringStatics.cpp.
        (WTF):
        (WTF::StringImpl::empty):
        (WTF::StringImpl::hashSlowCase):
        (WTF::AtomicString::init):
        * wtf/text/TextPosition.h: Renamed from Source/JavaScriptCore/wtf/text/TextPosition.h.
        (WTF):
        (OrdinalNumber):
        (WTF::OrdinalNumber::fromZeroBasedInt):
        (WTF::OrdinalNumber::fromOneBasedInt):
        (WTF::OrdinalNumber::OrdinalNumber):
        (WTF::OrdinalNumber::zeroBasedInt):
        (WTF::OrdinalNumber::oneBasedInt):
        (WTF::OrdinalNumber::operator==):
        (WTF::OrdinalNumber::operator!=):
        (WTF::OrdinalNumber::first):
        (WTF::OrdinalNumber::beforeFirst):
        (TextPosition):
        (WTF::TextPosition::TextPosition):
        (WTF::TextPosition::operator==):
        (WTF::TextPosition::operator!=):
        (WTF::TextPosition::minimumPosition):
        (WTF::TextPosition::belowRangePosition):
        * wtf/text/WTFString.cpp: Renamed from Source/JavaScriptCore/wtf/text/WTFString.cpp.
        (WTF):
        (WTF::String::String):
        (WTF::String::append):
        (WTF::codePointCompare):
        (WTF::String::insert):
        (WTF::String::characterStartingAt):
        (WTF::String::truncate):
        (WTF::String::remove):
        (WTF::String::substring):
        (WTF::String::substringSharingImpl):
        (WTF::String::lower):
        (WTF::String::upper):
        (WTF::String::stripWhiteSpace):
        (WTF::String::simplifyWhiteSpace):
        (WTF::String::removeCharacters):
        (WTF::String::foldCase):
        (WTF::String::percentage):
        (WTF::String::charactersWithNullTermination):
        (WTF::String::format):
        (WTF::String::number):
        (WTF::String::toIntStrict):
        (WTF::String::toUIntStrict):
        (WTF::String::toInt64Strict):
        (WTF::String::toUInt64Strict):
        (WTF::String::toIntPtrStrict):
        (WTF::String::toInt):
        (WTF::String::toUInt):
        (WTF::String::toInt64):
        (WTF::String::toUInt64):
        (WTF::String::toIntPtr):
        (WTF::String::toDouble):
        (WTF::String::toFloat):
        (WTF::String::isolatedCopy):
        (WTF::String::split):
        (WTF::String::ascii):
        (WTF::String::latin1):
        (WTF::putUTF8Triple):
        (WTF::String::utf8):
        (WTF::String::fromUTF8):
        (WTF::String::fromUTF8WithLatin1Fallback):
        (WTF::isCharacterAllowedInBase):
        (WTF::toIntegralType):
        (WTF::lengthOfCharactersAsInteger):
        (WTF::charactersToIntStrict):
        (WTF::charactersToUIntStrict):
        (WTF::charactersToInt64Strict):
        (WTF::charactersToUInt64Strict):
        (WTF::charactersToIntPtrStrict):
        (WTF::charactersToInt):
        (WTF::charactersToUInt):
        (WTF::charactersToInt64):
        (WTF::charactersToUInt64):
        (WTF::charactersToIntPtr):
        (WTF::toDoubleType):
        (WTF::charactersToDouble):
        (WTF::charactersToFloat):
        (WTF::charactersToFloatIgnoringJunk):
        (WTF::emptyString):
        (String::show):
        (string):
        (asciiDebug):
        * wtf/text/WTFString.h: Renamed from Source/JavaScriptCore/wtf/text/WTFString.h.
        (WebKit):
        (WTF):
        (String):
        (WTF::String::String):
        (WTF::String::~String):
        (WTF::String::swap):
        (WTF::String::adopt):
        (WTF::String::isNull):
        (WTF::String::isEmpty):
        (WTF::String::impl):
        (WTF::String::length):
        (WTF::String::characters):
        (WTF::String::characters8):
        (WTF::String::characters16):
        (WTF::String::is8Bit):
        (WTF::String::operator[]):
        (WTF::String::find):
        (WTF::String::reverseFind):
        (WTF::String::findIgnoringCase):
        (WTF::String::reverseFindIgnoringCase):
        (WTF::String::contains):
        (WTF::String::startsWith):
        (WTF::String::endsWith):
        (WTF::String::append):
        (WTF::String::replace):
        (WTF::String::makeLower):
        (WTF::String::makeUpper):
        (WTF::String::fill):
        (WTF::String::left):
        (WTF::String::right):
        (WTF::String::createUninitialized):
        (WTF::String::operator NSString*):
        (WTF::String::fromUTF8):
        (WTF::String::fromUTF8WithLatin1Fallback):
        (WTF::String::defaultWritingDirection):
        (WTF::String::containsOnlyWhitespace):
        (WTF::String::isHashTableDeletedValue):
        (WTF::operator+=):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::equalIgnoringCase):
        (WTF::equalPossiblyIgnoringCase):
        (WTF::equalIgnoringNullity):
        (WTF::operator!):
        (WTF::swap):
        (WTF::LChar):
        (WTF::UChar):
        (WTF::String::containsOnlyLatin1):
        (WTF::nsStringNilIfEmpty):
        (WTF::String::containsOnlyASCII):
        (WTF::codePointCompareLessThan):
        (WTF::find):
        (WTF::reverseFind):
        (WTF::append):
        (WTF::appendNumber):
        (WTF::isAllSpecialCharacters):
        (WTF::String::isAllSpecialCharacters):
        * wtf/threads/BinarySemaphore.cpp: Renamed from Source/JavaScriptCore/wtf/threads/BinarySemaphore.cpp.
        (WTF):
        (WTF::BinarySemaphore::BinarySemaphore):
        (WTF::BinarySemaphore::~BinarySemaphore):
        (WTF::BinarySemaphore::signal):
        (WTF::BinarySemaphore::wait):
        * wtf/threads/BinarySemaphore.h: Renamed from Source/JavaScriptCore/wtf/threads/BinarySemaphore.h.
        (WTF):
        (BinarySemaphore):
        (WTF::BinarySemaphore::event):
        * wtf/threads/win/BinarySemaphoreWin.cpp: Renamed from Source/JavaScriptCore/wtf/threads/win/BinarySemaphoreWin.cpp.
        (WTF):
        (WTF::BinarySemaphore::BinarySemaphore):
        (WTF::BinarySemaphore::~BinarySemaphore):
        (WTF::BinarySemaphore::signal):
        (WTF::BinarySemaphore::wait):
        * wtf/unicode/CharacterNames.h: Renamed from Source/JavaScriptCore/wtf/unicode/CharacterNames.h.
        (Unicode):
        * wtf/unicode/Collator.h: Renamed from Source/JavaScriptCore/wtf/unicode/Collator.h.
        (WTF):
        (Collator):
        * wtf/unicode/CollatorDefault.cpp: Renamed from Source/JavaScriptCore/wtf/unicode/CollatorDefault.cpp.
        (WTF):
        (WTF::Collator::Collator):
        (WTF::Collator::~Collator):
        (WTF::Collator::setOrderLowerFirst):
        (WTF::Collator::userDefault):
        (WTF::Collator::collate):
        * wtf/unicode/ScriptCodesFromICU.h: Renamed from Source/JavaScriptCore/wtf/unicode/ScriptCodesFromICU.h.
        * wtf/unicode/UTF8.cpp: Renamed from Source/JavaScriptCore/wtf/unicode/UTF8.cpp.
        (Unicode):
        (WTF::Unicode::inlineUTF8SequenceLengthNonASCII):
        (WTF::Unicode::inlineUTF8SequenceLength):
        (WTF::Unicode::UTF8SequenceLength):
        (WTF::Unicode::decodeUTF8Sequence):
        (WTF::Unicode::convertLatin1ToUTF8):
        (WTF::Unicode::convertUTF16ToUTF8):
        (WTF::Unicode::isLegalUTF8):
        (WTF::Unicode::readUTF8Sequence):
        (WTF::Unicode::convertUTF8ToUTF16):
        (WTF::Unicode::calculateStringHashAndLengthFromUTF8):
        (WTF::Unicode::equalUTF16WithUTF8):
        * wtf/unicode/UTF8.h: Renamed from Source/JavaScriptCore/wtf/unicode/UTF8.h.
        (Unicode):
        * wtf/unicode/Unicode.h: Renamed from Source/JavaScriptCore/wtf/unicode/Unicode.h.
        * wtf/unicode/UnicodeMacrosFromICU.h: Renamed from Source/JavaScriptCore/wtf/unicode/UnicodeMacrosFromICU.h.
        * wtf/unicode/glib/UnicodeGLib.cpp: Renamed from Source/JavaScriptCore/wtf/unicode/glib/UnicodeGLib.cpp.
        (Unicode):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::getUTF16LengthFromUTF8):
        (WTF::Unicode::convertCase):
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::direction):
        (WTF::Unicode::umemcasecmp):
        * wtf/unicode/glib/UnicodeGLib.h: Renamed from Source/JavaScriptCore/wtf/unicode/glib/UnicodeGLib.h.
        (Unicode):
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::isArabicChar):
        (WTF::Unicode::isAlphanumeric):
        (WTF::Unicode::isFormatChar):
        (WTF::Unicode::isSeparatorSpace):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isDigit):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::hasLineBreakingPropertyComplexContext):
        (WTF::Unicode::hasLineBreakingPropertyComplexContextOrIdeographic):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::category):
        (WTF::Unicode::isLower):
        (WTF::Unicode::digitValue):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::decompositionType):
        * wtf/unicode/icu/CollatorICU.cpp: Renamed from Source/JavaScriptCore/wtf/unicode/icu/CollatorICU.cpp.
        (WTF):
        (WTF::cachedCollatorMutex):
        (WTF::Collator::Collator):
        (WTF::Collator::userDefault):
        (WTF::Collator::~Collator):
        (WTF::Collator::setOrderLowerFirst):
        (WTF::Collator::collate):
        (WTF::Collator::createCollator):
        (WTF::Collator::releaseCollator):
        * wtf/unicode/icu/UnicodeIcu.h: Renamed from Source/JavaScriptCore/wtf/unicode/icu/UnicodeIcu.h.
        (Unicode):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::isArabicChar):
        (WTF::Unicode::isAlphanumeric):
        (WTF::Unicode::isSeparatorSpace):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::hasLineBreakingPropertyComplexContext):
        (WTF::Unicode::hasLineBreakingPropertyComplexContextOrIdeographic):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::category):
        (WTF::Unicode::direction):
        (WTF::Unicode::isLower):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::decompositionType):
        (WTF::Unicode::umemcasecmp):
        * wtf/unicode/qt4/UnicodeQt4.h: Renamed from Source/JavaScriptCore/wtf/unicode/qt4/UnicodeQt4.h.
        (Properties):
        (QUnicodeTables):
        (Unicode):
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::isArabicChar):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isSeparatorSpace):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::isLower):
        (WTF::Unicode::hasLineBreakingPropertyComplexContext):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::decompositionType):
        (WTF::Unicode::umemcasecmp):
        (WTF::Unicode::direction):
        (WTF::Unicode::category):
        * wtf/unicode/wince/UnicodeWinCE.cpp: Renamed from Source/JavaScriptCore/wtf/unicode/wince/UnicodeWinCE.cpp.
        (Unicode):
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isSpace):
        (WTF::Unicode::isLetter):
        (WTF::Unicode::isUpper):
        (WTF::Unicode::isLower):
        (WTF::Unicode::isDigit):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::isAlphanumeric):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::direction):
        (WTF::Unicode::category):
        (WTF::Unicode::decompositionType):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::digitValue):
        * wtf/unicode/wince/UnicodeWinCE.h: Renamed from Source/JavaScriptCore/wtf/unicode/wince/UnicodeWinCE.h.
        (Unicode):
        (WTF::Unicode::isSeparatorSpace):
        (WTF::Unicode::isHighSurrogate):
        (WTF::Unicode::isLowSurrogate):
        (WTF::Unicode::isArabicChar):
        (WTF::Unicode::hasLineBreakingPropertyComplexContext):
        (WTF::Unicode::umemcasecmp):
        (WTF::Unicode::surrogateToUcs4):
        * wtf/url/api/ParsedURL.cpp: Renamed from Source/JavaScriptCore/wtf/url/api/ParsedURL.cpp.
        (WTF):
        (WTF::ParsedURL::ParsedURL):
        (WTF::ParsedURL::isolatedCopy):
        (WTF::ParsedURL::scheme):
        (WTF::ParsedURL::username):
        (WTF::ParsedURL::password):
        (WTF::ParsedURL::host):
        (WTF::ParsedURL::port):
        (WTF::ParsedURL::path):
        (WTF::ParsedURL::query):
        (WTF::ParsedURL::fragment):
        (WTF::ParsedURL::baseAsString):
        (WTF::ParsedURL::segment):
        * wtf/url/api/ParsedURL.h: Renamed from Source/JavaScriptCore/wtf/url/api/ParsedURL.h.
        (WTF):
        (ParsedURL):
        (WTF::ParsedURL::ParsedURL):
        (WTF::ParsedURL::isValid):
        (WTF::ParsedURL::spec):
        * wtf/url/api/URLString.h: Renamed from Source/JavaScriptCore/wtf/url/api/URLString.h.
        (WTF):
        (URLString):
        (WTF::URLString::URLString):
        (WTF::URLString::string):
        * wtf/url/src/RawURLBuffer.h: Renamed from Source/JavaScriptCore/wtf/url/src/RawURLBuffer.h.
        (WTF):
        (RawURLBuffer):
        (WTF::RawURLBuffer::RawURLBuffer):
        (WTF::RawURLBuffer::~RawURLBuffer):
        (WTF::RawURLBuffer::resize):
        * wtf/url/src/URLBuffer.h: Renamed from Source/JavaScriptCore/wtf/url/src/URLBuffer.h.
        (WTF):
        (URLBuffer):
        (WTF::URLBuffer::URLBuffer):
        (WTF::URLBuffer::~URLBuffer):
        (WTF::URLBuffer::at):
        (WTF::URLBuffer::set):
        (WTF::URLBuffer::capacity):
        (WTF::URLBuffer::length):
        (WTF::URLBuffer::data):
        (WTF::URLBuffer::setLength):
        (WTF::URLBuffer::append):
        (WTF::URLBuffer::grow):
        * wtf/url/src/URLCharacterTypes.cpp: Renamed from Source/JavaScriptCore/wtf/url/src/URLCharacterTypes.cpp.
        (WTF):
        * wtf/url/src/URLCharacterTypes.h: Renamed from Source/JavaScriptCore/wtf/url/src/URLCharacterTypes.h.
        (WTF):
        (URLCharacterTypes):
        (WTF::URLCharacterTypes::isQueryChar):
        (WTF::URLCharacterTypes::isIPv4Char):
        (WTF::URLCharacterTypes::isHexChar):
        (WTF::URLCharacterTypes::isCharOfType):
        * wtf/url/src/URLComponent.h: Renamed from Source/JavaScriptCore/wtf/url/src/URLComponent.h.
        (WTF):
        (URLComponent):
        (WTF::URLComponent::URLComponent):
        (WTF::URLComponent::fromRange):
        (WTF::URLComponent::isValid):
        (WTF::URLComponent::isNonEmpty):
        (WTF::URLComponent::isEmptyOrInvalid):
        (WTF::URLComponent::reset):
        (WTF::URLComponent::operator==):
        (WTF::URLComponent::begin):
        (WTF::URLComponent::setBegin):
        (WTF::URLComponent::length):
        (WTF::URLComponent::setLength):
        (WTF::URLComponent::end):
        * wtf/url/src/URLEscape.cpp: Renamed from Source/JavaScriptCore/wtf/url/src/URLEscape.cpp.
        (WTF):
        * wtf/url/src/URLEscape.h: Renamed from Source/JavaScriptCore/wtf/url/src/URLEscape.h.
        (WTF):
        (WTF::appendURLEscapedCharacter):
        * wtf/url/src/URLParser.h: Renamed from Source/JavaScriptCore/wtf/url/src/URLParser.h.
        (WTF):
        (URLParser):
        (WTF::URLParser::isPossibleAuthorityTerminator):
        (WTF::URLParser::parseAuthority):
        (WTF::URLParser::extractScheme):
        (WTF::URLParser::parseAfterScheme):
        (WTF::URLParser::parseStandardURL):
        (WTF::URLParser::parsePath):
        (WTF::URLParser::parsePathURL):
        (WTF::URLParser::parseMailtoURL):
        (WTF::URLParser::parsePort):
        (WTF::URLParser::extractFileName):
        (WTF::URLParser::extractQueryKeyValue):
        (WTF::URLParser::isURLSlash):
        (WTF::URLParser::shouldTrimFromURL):
        (WTF::URLParser::trimURL):
        (WTF::URLParser::consecutiveSlashes):
        (WTF::URLParser::isPortDigit):
        (WTF::URLParser::nextAuthorityTerminator):
        (WTF::URLParser::parseUserInfo):
        (WTF::URLParser::parseServerInfo):
        * wtf/url/src/URLQueryCanonicalizer.h: Renamed from Source/JavaScriptCore/wtf/url/src/URLQueryCanonicalizer.h.
        (WTF):
        (URLQueryCanonicalizer):
        (WTF::URLQueryCanonicalizer::canonicalize):
        (WTF::URLQueryCanonicalizer::isAllASCII):
        (WTF::URLQueryCanonicalizer::isRaw8Bit):
        (WTF::URLQueryCanonicalizer::appendRaw8BitQueryString):
        (WTF::URLQueryCanonicalizer::convertToQueryEncoding):
        * wtf/url/src/URLSegments.cpp: Renamed from Source/JavaScriptCore/wtf/url/src/URLSegments.cpp.
        (WTF):
        (WTF::URLSegments::length):
        (WTF::URLSegments::charactersBefore):
        * wtf/url/src/URLSegments.h: Renamed from Source/JavaScriptCore/wtf/url/src/URLSegments.h.
        (WTF):
        (URLSegments):
        (WTF::URLSegments::URLSegments):
        * wtf/win/MainThreadWin.cpp: Renamed from Source/JavaScriptCore/wtf/win/MainThreadWin.cpp.
        (WTF):
        (WTF::ThreadingWindowWndProc):
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/win/OwnPtrWin.cpp: Renamed from Source/JavaScriptCore/wtf/win/OwnPtrWin.cpp.
        (WTF):
        (WTF::deleteOwnedPtr):
        * wtf/wince/FastMallocWinCE.h: Renamed from Source/JavaScriptCore/wtf/wince/FastMallocWinCE.h.
        (operator new):
        (operator delete):
        (operator new[]):
        (operator delete[]):
        (throw):
        (WTF):
        (Internal):
        (WTF::Internal::fastMallocMatchValidationType):
        (WTF::Internal::fastMallocMatchValidationValue):
        (WTF::Internal::setFastMallocMatchValidationType):
        (WTF::fastMallocMatchValidateMalloc):
        (WTF::fastMallocMatchValidateFree):
        * wtf/wince/MemoryManager.cpp: Renamed from Source/JavaScriptCore/wtf/wince/MemoryManager.cpp.
        (WTF):
        (WTF::memoryManager):
        (WTF::MemoryManager::MemoryManager):
        (WTF::MemoryManager::~MemoryManager):
        (WTF::MemoryManager::createCompatibleBitmap):
        (WTF::MemoryManager::createDIBSection):
        (WTF::MemoryManager::m_malloc):
        (WTF::MemoryManager::m_calloc):
        (WTF::MemoryManager::m_realloc):
        (WTF::MemoryManager::m_free):
        (WTF::MemoryManager::resizeMemory):
        (WTF::MemoryManager::allocate64kBlock):
        (WTF::MemoryManager::free64kBlock):
        (WTF::MemoryManager::onIdle):
        (WTF::MemoryManager::virtualAlloc):
        (WTF::MemoryManager::virtualFree):
        (WTF::fastMalloc):
        (WTF::fastCalloc):
        (WTF::fastFree):
        (WTF::fastRealloc):
        (WTF::fastMallocForbid):
        (WTF::fastMallocAllow):
        (WTF::fastZeroedMalloc):
        (WTF::tryFastMalloc):
        (WTF::tryFastZeroedMalloc):
        (WTF::tryFastCalloc):
        (WTF::tryFastRealloc):
        (WTF::fastStrDup):
        * wtf/wince/MemoryManager.h: Renamed from Source/JavaScriptCore/wtf/wince/MemoryManager.h.
        (WTF):
        (MemoryManager):
        (WTF::MemoryManager::allocationCanFail):
        (WTF::MemoryManager::setAllocationCanFail):
        (MemoryAllocationCanFail):
        (WTF::MemoryAllocationCanFail::MemoryAllocationCanFail):
        (WTF::MemoryAllocationCanFail::~MemoryAllocationCanFail):
        (MemoryAllocationCannotFail):
        (WTF::MemoryAllocationCannotFail::MemoryAllocationCannotFail):
        (WTF::MemoryAllocationCannotFail::~MemoryAllocationCannotFail):
        * wtf/wx/MainThreadWx.cpp: Renamed from Source/JavaScriptCore/wtf/wx/MainThreadWx.cpp.
        (wxCallAfter):
        (wxCallAfter::wxCallAfter):
        (wxCallAfter::OnCallback):
        (WTF):
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/wx/StringWx.cpp: Renamed from Source/JavaScriptCore/wtf/wx/StringWx.cpp.
        (WTF):
        (WTF::String::String):
        (WTF::String::operator wxString):

2012-03-22  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Add PageClientEfl to WebCoreSupport.
        https://bugs.webkit.org/show_bug.cgi?id=80748

        Reviewed by Noam Rosenthal.

        * wtf/Platform.h: Disable accelerated compositing. It's not ready yet.

2012-03-21  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=80322
        Implement image-set

        Reviewed by Dean Jackson.

        For the time being, image-set is opt-in since the implementation is 
        incomplete. 

        Add an ENABLE flag for image-set.
        * wtf/Platform.h:

2012-03-21  Jessie Berlin  <jberlin@apple.com>

        Fix the Windows build after r111504.

        * WTF.vcproj/WTF.vcproj:
        Platform.h was moved to Source/WTF.
        * WTF.vcproj/copy-files.cmd:
        Copy Platform.h from its new source location. This separate copy will not be necessary once
        the full move is done and all the headers are being copied at once from the new locations.

2012-03-21  Jessie Berlin  <jberlin@apple.com>

        WTF headers should be in $(ConfigurationBuildDir)\include\private\wtf, not
        $(ConfigurationBuildDir)\include\private\JavaScriptCore\wtf.
        https://bugs.webkit.org/show_bug.cgi?id=81739

        Reviewed by Dan Bernstein.

        * WTF.vcproj/copy-files.cmd:
        Copy the headers to private/include/wtf instead of private/include/JavaScriptCore/wtf.

2012-03-20  Eric Seidel  <eric@webkit.org>

        Move wtf/Platform.h from JavaScriptCore to Source/WTF/wtf
        https://bugs.webkit.org/show_bug.cgi?id=80911

        Reviewed by Adam Barth.

        Update build systems to account for the new location of Platform.h

        * GNUmakefile.list.am:
        * WTF.gypi:
        * WTF.pro:
        * WTF.vcproj/WTF.vcproj:
        * WTF.vcproj/work-around-vs-dependency-tracking-bugs.py:
        (react_to_vsprops_changes):
        * WTF.xcodeproj/project.pbxproj:
        * config.h: I don't think this change is 100% correct (but seemed to be needed to make qt-wk2 build)
         - This dependency on JSC should be removed regardless (in a later patch).
        * wtf/Platform.h: Renamed from Source/JavaScriptCore/wtf/Platform.h.

2012-03-20  Steve Falkenburg  <sfalken@apple.com>

        Move WTF-related Windows project files out of JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=80680
        
        This change only moves the vcproj and related files from JavaScriptCore/JavaScriptCore.vcproj/WTF.
        It does not move any source code. This is in preparation for the WTF source move out of
        JavaScriptCore.

        Reviewed by Jessie Berlin.

        * WTF.vcproj: Added.
        * WTF.vcproj/WTF.vcproj: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj.
        * WTF.vcproj/WTFCommon.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFCommon.vsprops.
        * WTF.vcproj/WTFDebug.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFDebug.vsprops.
        * WTF.vcproj/WTFDebugAll.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops.
        * WTF.vcproj/WTFDebugCairoCFLite.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops.
        * WTF.vcproj/WTFGenerated.make: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFGenerated.make.
        * WTF.vcproj/WTFGenerated.vcproj: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFGenerated.vcproj.
        * WTF.vcproj/WTFGeneratedCommon.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFGeneratedCommon.vsprops.
        * WTF.vcproj/WTFGeneratedDebug.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFGeneratedDebug.vsprops.
        * WTF.vcproj/WTFGeneratedDebugAll.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFGeneratedDebugAll.vsprops.
        * WTF.vcproj/WTFGeneratedDebugCairoCFLite.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFGeneratedDebugCairoCFLite.vsprops.
        * WTF.vcproj/WTFGeneratedProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFGeneratedProduction.vsprops.
        * WTF.vcproj/WTFGeneratedRelease.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFGeneratedRelease.vsprops.
        * WTF.vcproj/WTFGeneratedReleaseCairoCFLite.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFGeneratedReleaseCairoCFLite.vsprops.
        * WTF.vcproj/WTFPostBuild.cmd: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd.
        * WTF.vcproj/WTFPreBuild.cmd: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd.
        * WTF.vcproj/WTFProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFProduction.vsprops.
        * WTF.vcproj/WTFRelease.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFRelease.vsprops.
        * WTF.vcproj/WTFReleaseCairoCFLite.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops.
        * WTF.vcproj/build-generated-files.sh: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/build-generated-files.sh.
        * WTF.vcproj/copy-files.cmd: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/copy-files.cmd.
        * WTF.vcproj/work-around-vs-dependency-tracking-bugs.py: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/work-around-vs-dependency-tracking-bugs.py.

2012-03-20  Peter Beverloo  <peter@chromium.org>

        [Chromium] Fix the Android build by building NEWWTF for host
        https://bugs.webkit.org/show_bug.cgi?id=81643

        Reviewed by Tony Gentilcore.

        Chromium for Android builds the ImageDiff target for the host architecture,
        so all dependencies it has need to be able to build for host as well.
        r111258 added (new)WTF as a dependency instead of just including the
        header files, so make it possible to build the newwtf target for host.

        * WTF.gyp/WTF.gyp:

2012-03-19  Dan Bernstein  <mitz@apple.com>

        Set the svn:ignore property on the Xcode project.

        * WTF.xcodeproj: Added property svn:ignore.

2012-03-16  Mark Rowe  <mrowe@apple.com>

        Build fix. Do not preserve owner and group information when installing the WTF headers.

        * WTF.xcodeproj/project.pbxproj:

2012-03-07  Mark Rowe  <mrowe@apple.com>

        Teach make to build WTF.

        * Makefile: Added.

2012-02-11  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to send all JSC debug logging to a file
        https://bugs.webkit.org/show_bug.cgi?id=78418

        Reviewed by Sam Weinig.
        
        Introduced wtf/DataLog, which defines WTF::dataFile, WTF::dataLog,
        and WTF::dataLogV. Changed all debugging- and profiling-related printfs
        to use WTF::dataLog() or one of its friends. By default, debug logging
        goes to stderr, unless you change the setting in wtf/DataLog.cpp.

        * WTF.pro:

2012-02-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix build when cross-compiling
        https://bugs.webkit.org/show_bug.cgi?id=77634

        Reviewed by Tor Arne Vestbø.

        * WTF.pri: Don't use icu-config for determining the library search
        path and libraries needed for ICU. Either we use icu-config for includes
        _and_ libraries or we don't. Right now we assume that icu is a system library
        and expect the headers in the default include search pathes (/usr/include for example).
        However we use icu-config to figure out where the libraries are, which breaks when
        cross-compiling, because icu-config isn't cross-compile friendly (I wish icu was using
        pkg-config). I think for the time being we should require ICU as a _system_ library,
        which implies the header and library availability in default search paths. This also
        makes the build succeed when cross-compiling with --sysroot.

2012-01-27  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] Build fails after adding ICU support (r105997).
        https://bugs.webkit.org/show_bug.cgi?id=77118

        Link to libicucore if platform Mac.

        Reviewed by Tor Arne Vestbø.

        * WTF.pri:

2012-01-26  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt] Use ICU if available
        https://bugs.webkit.org/show_bug.cgi?id=76821

        Reviewed by Simon Hausmann.

        Adding libicu dependencies for a Qt5 based build.

        * WTF.pri:

2012-01-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][Win] One more speculative buildfix after r105970.

        * WTF.pri:

2012-01-26  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Try to fix Qt/Win build by building OwnPtrWin.cpp into the WTF library.

        * WTF.pro:

2012-01-19  Joi Sigurdsson  <joi@chromium.org>

        Enable use of precompiled headers in Chromium port on Windows.

        Bug 76381 - Use precompiled headers in Chromium port on Windows
        https://bugs.webkit.org/show_bug.cgi?id=76381

        Reviewed by Tony Chang.

        * WTF.gyp/WTF.gyp: Include WinPrecompile.gypi.

2012-01-18  Roland Takacs  <takacs.roland@stud.u-szeged.hu>

        Cross-platform processor core counter
        https://bugs.webkit.org/show_bug.cgi?id=76530

        Reviewed by Zoltan Herczeg.

        Two files have been added to the project, namely NumberOfCores.h/cpp,
        that include a CPU core number determining function.

        * WTF.pro:

2012-01-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Uint8ClampedArray support
        https://bugs.webkit.org/show_bug.cgi?id=74455

        Reviewed by Filip Pizlo.

        * WTF.pro:

2012-01-13  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed build fix for Qt SnowLeopard build bot.

        This is a workaround for the moment.

        * wtf/Platform.h:

2012-01-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Make the new WTF module build on Qt
        https://bugs.webkit.org/show_bug.cgi?id=76163

        Reviewed by Tor Arne Vestbø.

        With this change the WTF sources are built _here_ but _from_ their old location using a VPATH.

        * WTF.pri: Renamed from Source/JavaScriptCore/wtf/wtf.pri.
        * WTF.pro: Renamed from Source/JavaScriptCore/wtf/wtf.pro.
        * config.h: Bring this file in sync with JavaScriptCore/config.h with regards to the inclusion
        / definition of the export macros.

2012-01-06  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Sort the resources of WTF.xcodeproj
        https://bugs.webkit.org/show_bug.cgi?id=75639

        Reviewed by Andreas Kling.

        * WTF.xcodeproj/project.pbxproj:

2012-01-06  Eric Seidel  <eric@webkit.org> and Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Make the new WTF module build on Gtk
        https://bugs.webkit.org/show_bug.cgi?id=75669

        * GNUmakefile.am: Added.
        * GNUmakefile.list.am: Added.

2011-11-19  Adam Barth  <abarth@webkit.org>

        Integrate Source/WTF with the Chromium build system
        https://bugs.webkit.org/show_bug.cgi?id=72790

        Reviewed by Eric Seidel.

        Rename the target in this file to "newwtf" to avoid naming conflicts.

        * WTF.gyp/WTF.gyp:

2011-11-19  Mark Rowe  <mrowe@apple.com>

        WTF should have an Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=71752

        Reviewed by Adam Barth.

        This adds an Xcode project that includes only Stub.cpp and Stub.h.
        They’re built in to a library at the appropriate path for each
        configuration (WebKitBuild/{Debug,Release}/libWTF.a and
        /usr/local/lib/libWTF.a) and headers are installed in to the
        appropriate location (WebKitBuild/{Debug,Release}/usr/local/include/wtf
        and /usr/local/include/wtf). I tested building WTF in this project and
        everything appears to build except for DateMath.cpp (due to bug 71747).
        I have not yet done any work on making JavaScriptCore and other
        projects use the built products of this new project.

        * Configurations: Added.
        * Configurations/Base.xcconfig: Copied from Source/JavaScriptCore/Configurations/Base.xcconfig.
        * Configurations/CompilerVersion.xcconfig: Copied from Source/JavaScriptCore/Configurations/CompilerVersion.xcconfig.
        * Configurations/DebugRelease.xcconfig: Copied from Source/JavaScriptCore/Configurations/DebugRelease.xcconfig.
        * Configurations/WTF.xcconfig: Copied from Source/WebKit2/Configurations/Shim.xcconfig.
        * WTF.xcodeproj: Added.
        * WTF.xcodeproj/project.pbxproj: Added.
        * config.h: Copied from Source/JavaScriptCore/config.h.
        * icu: Added.
        * icu/LICENSE: Copied from Source/JavaScriptCore/icu/LICENSE.
        * icu/README: Copied from Source/JavaScriptCore/icu/README.
        * icu/unicode: Added.
        * icu/unicode/parseerr.h: Copied from Source/JavaScriptCore/icu/unicode/parseerr.h.
        * icu/unicode/platform.h: Copied from Source/JavaScriptCore/icu/unicode/platform.h.
        * icu/unicode/putil.h: Copied from Source/JavaScriptCore/icu/unicode/putil.h.
        * icu/unicode/uchar.h: Copied from Source/JavaScriptCore/icu/unicode/uchar.h.
        * icu/unicode/ucnv.h: Copied from Source/JavaScriptCore/icu/unicode/ucnv.h.
        * icu/unicode/ucnv_err.h: Copied from Source/JavaScriptCore/icu/unicode/ucnv_err.h.
        * icu/unicode/ucol.h: Copied from Source/JavaScriptCore/icu/unicode/ucol.h.
        * icu/unicode/uconfig.h: Copied from Source/JavaScriptCore/icu/unicode/uconfig.h.
        * icu/unicode/uenum.h: Copied from Source/JavaScriptCore/icu/unicode/uenum.h.
        * icu/unicode/uiter.h: Copied from Source/JavaScriptCore/icu/unicode/uiter.h.
        * icu/unicode/uloc.h: Copied from Source/JavaScriptCore/icu/unicode/uloc.h.
        * icu/unicode/umachine.h: Copied from Source/JavaScriptCore/icu/unicode/umachine.h.
        * icu/unicode/unorm.h: Copied from Source/JavaScriptCore/icu/unicode/unorm.h.
        * icu/unicode/urename.h: Copied from Source/JavaScriptCore/icu/unicode/urename.h.
        * icu/unicode/uscript.h: Copied from Source/JavaScriptCore/icu/unicode/uscript.h.
        * icu/unicode/uset.h: Copied from Source/JavaScriptCore/icu/unicode/uset.h.
        * icu/unicode/ustring.h: Copied from Source/JavaScriptCore/icu/unicode/ustring.h.
        * icu/unicode/utf.h: Copied from Source/JavaScriptCore/icu/unicode/utf.h.
        * icu/unicode/utf16.h: Copied from Source/JavaScriptCore/icu/unicode/utf16.h.
        * icu/unicode/utf8.h: Copied from Source/JavaScriptCore/icu/unicode/utf8.h.
        * icu/unicode/utf_old.h: Copied from Source/JavaScriptCore/icu/unicode/utf_old.h.
        * icu/unicode/utypes.h: Copied from Source/JavaScriptCore/icu/unicode/utypes.h.
        * icu/unicode/uversion.h: Copied from Source/JavaScriptCore/icu/unicode/uversion.h.

2011-11-03  Adam Barth  <abarth@webkit.org>

        Add Stub.h and Stub.cpp to Source-level WTF project
        https://bugs.webkit.org/show_bug.cgi?id=71497

        Reviewed by Eric Seidel.

        This patch adds some stub files and a skelton GYP build file as a
        starting point for the new Source-level WTF project.  Other build
        systems and actual code will arrive in future patches.

        * Stub.cpp: Added.
        * Stub.h: Added.
        * WTF.gyp/WTF.gyp: Added.
        * WTF.gypi: Added.

2011-11-02  Adam Barth  <abarth@webkit.org>

        Add stubs for WTF and Platform
        https://bugs.webkit.org/show_bug.cgi?id=71492

        Reviewed by Eric Seidel.

        This patch creates the WTF directory, which begins the process of
        moving WTF out of JavaScriptCore.
