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.
