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

        [WIN] Use GetTimeZoneInformation() for getting the timezone name
        https://bugs.webkit.org/show_bug.cgi?id=91936

        Reviewed by Ryosuke Niwa.

        The MS CRT implementation of strftime calls the same functions in the background.
        Using them directly avoids the overhead of parsing the format string and removes
        the dependency on strftime() for WinCE where this function does not exist.

        * runtime/DateConversion.cpp:
        (JSC::formatTime):

2010-07-08  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

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

        Update compile flags to allow use of ExecutableAllocatorFixedVMPool on platforms
        other than x86-64 (this may be useful on 32-bit platforms, too).

        Simplify ifdefs by dividing into thwo broad allocation strategies
        (ENABLE_EXECUTABLE_ALLOCATOR_FIXED & ENABLE_EXECUTABLE_ALLOCATOR_DEMAND).

        Rename constant used in the code to have names descriptive of their purpose,
        rather than their specific value on a given platform.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::reprotectRegion):
        (JSC::ExecutableAllocator::cacheFlush):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
        (JSC::FixedVMPoolAllocator::free):
        (JSC::ExecutablePool::systemAlloc):
        * jit/ExecutableAllocatorPosix.cpp:
        * jit/ExecutableAllocatorSymbian.cpp:
        * jit/ExecutableAllocatorWin.cpp:
        * wtf/Platform.h:

2010-08-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Don't seed the JS random number generator from time()
        https://bugs.webkit.org/show_bug.cgi?id=41868
        <rdar://problem/8171025>

        Switch to using the secure random number generator to
        seed the fast random generator, and make the generator
        be per global object.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
        (JSC::JSGlobalObject::weakRandomNumber):
        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncRandom):

2010-06-18  Tucker Jay  <jay.tucker@nokia.com>

        Reviewed by NOBODY (OOPS!).

        [Symbian] Lazy commit of memory required in JSC register file
        https://bugs.webkit.org/show_bug.cgi?id=34349

        * JavaScriptCore.pro: Added 1 new Symbian source file
        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::~RegisterFile):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::):
        (JSC::RegisterFile::start):
        (JSC::RegisterFile::end):
        (JSC::RegisterFile::size):
        (JSC::RegisterFile::setNumGlobals):
        (JSC::RegisterFile::numGlobals):
        (JSC::RegisterFile::maxGlobals):
        (JSC::RegisterFile::lastGlobal):
        (JSC::RegisterFile::markGlobals):
        (JSC::RegisterFile::markCallFrames):
        (JSC::isPageAligned):
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::shrink):
        (JSC::RegisterFile::grow):
        * wtf/symbian/RegisterFileAllocatorSymbian.cpp: Added.
        (WTF::RegisterFileAllocator::RegisterFileAllocator):
        Helper class to allocate memory required by RegisterFile
        more efficiently.
        (WTF::RegisterFileAllocator::~RegisterFileAllocator):
        (WTF::RegisterFileAllocator::buffer):
        (WTF::RegisterFileAllocator::grow):
        (WTF::RegisterFileAllocator::shrink):
        * wtf/symbian/RegisterFileAllocatorSymbian.h: Added.
        * wtf/symbian/SymbianDefines.h: Added.

2010-06-19  Thiago Macieira <thiago.macieira@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Don't use __attribute__((may_alias)) with the Intel compiler,
        as it doesn't understand it.

        * wtf/Vector.h:

2010-06-19  Thiago Macieira <thiago.macieira@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix compilation with the Intel C++ compiler (11.1.072).

        Like RVCT, label pointers must be void*, not const void*.

        * bytecode/Opcode.h:

2010-06-19  Thiago Macieira <thiago.macieira@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Add the WTF_COMPILER_INTEL for when the Intel compiler is used
        for building. Usually, the Intel compiler masquerades as
        another compiler in the system and gets away with it, but some
        times specific fixes are required (such as when using language
        extensions).

        * wtf/Platform.h:

2010-06-07  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Crash when compiling on Snow Leopard and running on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=31403

        Disable the use of pthread_setname_np and other symbols
        when targetting Leopard.

        Use the defines TARGETING_XX instead of BUILDING_ON_XX 
        for features that cannot be used before Snow Leopard.

        * wtf/Platform.h:

2010-05-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        [Qt] Disable JIT support for mingw-w64
        https://bugs.webkit.org/show_bug.cgi?id=38747

        Disale JIT for mingw-w64 as it is reportedly
        unstable.

        Thanks for Vanboxem Rruben for the investigation.

        * wtf/Platform.h:

2010-05-06  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        JavaScriptCore/wtf/RandomNumber.h should provide using WTF::*
        https://bugs.webkit.org/show_bug.cgi?id=38719

        * wtf/RandomNumber.h:
          Add using directives.

2010-04-28  Simon Hausmann  <simon.hausmann@nokia.com>, Kent Hansen <kent.hansen@nokia.com>

        Reviewed by Darin Adler.

        JSC's currentThreadStackBase is not reentrant on some platforms
        https://bugs.webkit.org/show_bug.cgi?id=37195

        This function needs to be reentrant to avoid memory corruption on platforms where
        the implementation uses global variables.

        This patch adds a mutex lock where necessary and makes the Symbian implementation
        reentrant.

        * runtime/Collector.cpp:
        (JSC::currentThreadStackBaseMutex):
        (JSC::currentThreadStackBase):

2010-04-14  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Maciej Stachowiak.

        Mac OS X: Use deployment target to determine whether memory tagging should be enabled
        https://bugs.webkit.org/show_bug.cgi?id=34888

        When building on (Snow) Leopard but targeting Tiger
        (TARGETING_TIGER defined, BUILDING_ON_TIGER not defined),
        WebKit would crash on Tiger because the tags passed to mmap
        caused those function calls to fail.

        Conversely, when building on Tiger but targeting Leopard
        (BUILDING_ON_TIGER defined, TARGETING_LEOPARD defined), WebKit
        would crash on Leopard because the tags passed to vm_map and
        vm_allocate caused those function calls to fail.

        Solution: Use TARGETING_TIGER rather than BUILDING_ON_TIGER to
        govern the tag definitions. Use the same tags for vm_map and
        vm_allocate regardless of target, since they work on
        both. Fall back to the mmap tags that work on Tiger (that is,
        "no tags") if targeting Tiger, since those tags also work on
        Leopard.

        * wtf/VMTags.h:

2010-04-02  Ruben Van Boxem  <vanboxem.ruben@gmail.com>

        Reviewed by Eric Seidel.

        Mingw-w64 fixes for JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=35607

        * runtime/Collector.cpp: use the msvc code for mingw-w64 (but not mingw-w32)
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlockPtr):
        (JSC::currentThreadStackBase):
        (JSC::currentThreadStackBase):
        * wtf/Platform.h: added COMPILER(MINGW64) check to differentiate between mingw.org and mingw-w64 functions

2010-03-29  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Corrected name of (u)int64_t compile time assert.
        https://bugs.webkit.org/show_bug.cgi?id=36739

        int64_t_is_four_bytes -> int64_t_is_eight_bytes

        * os-win32/stdint.h:

2010-03-29  Thomas Zander  <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

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

        gcc for Symbian doesn't support gcc extensions like atomicity.h - disable

        * wtf/Threading.h: also detect os symbian

2010-03-23  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice): Some versions of GCC emit a warning about the implicit 64- to 32-bit truncation
        that takes place here. An explicit cast is sufficient to silence it.

2010-03-23  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * runtime/ArrayPrototype.cpp: (JSC::arrayProtoFuncSplice): Fixed a typo - length doesn't
        need to be converted with toInteger().

2010-03-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=36511
        <rdar://problem/7753498> Safari freezes when using SPUTNIK JavaScript conformance check

        Test: fast/js/sputnik-S15.4.4.12_A3_T3.html

        * runtime/ArrayPrototype.cpp: (JSC::arrayProtoFuncSplice): We were incorrectly computing
        the start offset, and iterated over (almost) all integers. Note that this can be fixed
        without using doubles, but the code would be much more complicated, and there is no important
        reason to stick to integers here.

2010-03-22  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Symbian] More efficient aligned memory allocation for JSC Collector
        https://bugs.webkit.org/show_bug.cgi?id=34350

        * JavaScriptCore.pri: Added 2 new Symbian source files and HAL linkage

        * runtime/Collector.cpp: Reduced port-specific code and added private data member
        (JSC::Heap::Heap):
        (JSC::Heap::~Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlockPtr):

        * runtime/Collector.h: Added private data member

        * wtf/symbian: Added.
        * wtf/symbian/BlockAllocatorSymbian.cpp: Added.
        (WTF::AlignedBlockAllocator::AlignedBlockAllocator): Helper class to allocate 
        aligned blocks more efficiently as required by Collector
        (WTF::AlignedBlockAllocator::alloc):
        (WTF::AlignedBlockAllocator::free):
        (WTF::AlignedBlockAllocator::destroy):
        (WTF::AlignedBlockAllocator::~AlignedBlockAllocator):
        * wtf/symbian/BlockAllocatorSymbian.h: Added.

2010-03-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed <rdar://problem/7728196> REGRESSION (r46701): -(-2147483648)
        evaluates to -2147483648 on 32 bit (35842)
        
        Two ways to fix the same bug:
        
        1. Check for overflow when negating, since negating the largest negative
        int causes overflow.
        
        2. Constant-fold even when negating a negative, since, like they say in
        high school, "math works."

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::branchNeg32):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::branchNeg32): Added a branching version
        of the negate operator.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate): Use the branching version of the negate 
        operator to check for overflow.

        (JSC::JIT::emitSlow_op_negate): Link the check for overflow to a slow case.
        (We could emit inline code for this, since we know what the result would
        be, but that's probably just a waste of generated code.)

        * parser/Grammar.y: Constant fold even when negating a negative.

2010-03-17  Mike Homey  <glandium@debian.org>

        Reviewed by Gustavo Noronha.

        Build fix for SPARC. Fix missing macro value.

        * wtf/Platform.h:

2010-03-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        Add virtual memory tags for TCMalloc and WebCore's purgeable buffers.

        * wtf/TCSystemAlloc.cpp:
        (TryMmap): Use the VM tag.
        * wtf/VMTags.h: Make use of VM_MEMORY_TCMALLOC and VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS.

2010-03-01  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Qt build on Mac OS X/Cocoa 64-bit

        * JavaScriptCore.pri: Add missing implementation file to resolve JSC symbols

2010-02-26  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Symbian specific getCPUTime implemetation
        https://bugs.webkit.org/show_bug.cgi?id=34742

        Default implementation doesn't work on Symbian devices.
        This change adds a proper implementation by
        asking thread execution time from the current thread.

        * runtime/TimeoutChecker.cpp:
        (JSC::getCPUTime):

2010-02-15  Gabor Loki  <loki@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix the SP at ctiOpThrowNotCaught on Thumb2 (JSVALUE32)
        https://bugs.webkit.org/show_bug.cgi?id=34939

        * jit/JITStubs.cpp:

2010-02-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Build fix).

        Add missing cast for !YARR (PPC) builds.

        * runtime/RegExp.cpp:
        (JSC::RegExp::match):

2010-02-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Adam Barth.

        Implement NEVER_INLINE and NO_RETURN for RVCT
        https://bugs.webkit.org/show_bug.cgi?id=34740

        * wtf/AlwaysInline.h:

2010-02-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33731
        Many false leaks in release builds due to PtrAndFlags

        Remove UntypedPtrAndBitfield (similar to PtrAndFlags) in UStringImpl,
        and steal bits from the refCount instead.

        * runtime/UStringImpl.cpp:
        (JSC::UStringImpl::baseSharedBuffer):
        (JSC::UStringImpl::~UStringImpl):
        * runtime/UStringImpl.h:
        (JSC::UStringImpl::cost):
        (JSC::UStringImpl::isIdentifier):
        (JSC::UStringImpl::setIsIdentifier):
        (JSC::UStringImpl::ref):
        (JSC::UStringImpl::deref):
        (JSC::UStringImpl::UStringImpl):
        (JSC::UStringImpl::bufferOwnerString):
        (JSC::UStringImpl::bufferOwnership):
        (JSC::UStringImpl::isStatic):
        (JSC::UStringImpl::):

2010-02-12  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Adam Barth.

        Typedef both JSChar and UChar to wchar_t in RVCT.
        https://bugs.webkit.org/show_bug.cgi?id=34560

        Define both JSChar and UChar to wchar_t as the size
        of wchar_t is 2 bytes in RVCT.

        * API/JSStringRef.h:
        * wtf/unicode/qt4/UnicodeQt4.h:

2009-10-06  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        Get rid of WINSCW hack for UnSpecifiedBoolType

        Add parenthesis around (RefPtr::*UnspecifiedBoolType) to make the WINSCW
        compiler work with the default UnSpecifiedBoolType() operator.

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

        * wtf/RefPtr.h:

2010-02-09  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Laszlo Gombos.

        [Qt] use nanval() for Symbian as nonInlineNaN
        https://bugs.webkit.org/show_bug.cgi?id=34170

        numeric_limits<double>::quiet_NaN is broken in Symbian
        causing NaN to be evaluated as a number.

        * runtime/JSValue.cpp:
        (JSC::nonInlineNaN):

2010-02-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Date.UTC() should apply TimeClip operation.
        https://bugs.webkit.org/show_bug.cgi?id=34461

        ECMAScript 5 15.9.4.3:
        > 9 Return TimeClip(MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli))).

        * runtime/DateConstructor.cpp:
        (JSC::dateUTC): Calls WTF::timeClip().

2010-02-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix a bug that Math.round() retunrs incorrect results for huge integers
        https://bugs.webkit.org/show_bug.cgi?id=34462

        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncRound): Avoid "arg + 0.5".

2010-02-01  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        [Qt] WinCE buildfix after r52729 and fix for Q_BIG_ENDIAN typo.
        https://bugs.webkit.org/show_bug.cgi?id=34378

        * wtf/Platform.h:

2010-01-31  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Buildfix for WinCE + style fixes (TLS_OUT_OF_INDEXES is not defined).
        https://bugs.webkit.org/show_bug.cgi?id=34380

        * wtf/ThreadSpecific.h:

2010-01-31  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        [Windows] Fix a bug of round() with huge integral numbers
        https://bugs.webkit.org/show_bug.cgi?id=34297

        Fix a bug that round() for huge integral numbers returns incorrect
        results. For example, round(8639999913600001) returns
        8639999913600002 without this change though the double type can
        represent 8639999913600001 precisely.

        Math.round() of JavaScript has a similar problem. But this change
        doesn't fix it because Math.round() doesn't use round() of
        MathExtra.h.

        * wtf/MathExtras.h:
        (round): Avoid to do "num + 0.5" or "num - 0.5".
        (roundf): Fixed similarly.
        (llround): Calls round().
        (llroundf): Calls roundf().
        (lround): Calls round().
        (lroundf): Calls roundf().

2010-01-27  Anton Muhin  <antonm@chromium.org>

        Reviewed by Darin Adler.

        Remove trailing \ from inline function code
        https://bugs.webkit.org/show_bug.cgi?id=34223

        * assembler/ARMv7Assembler.h:
        (JSC::ARMThumbImmediate::countLeadingZerosPartial):

2010-01-27  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Oliver Hunt.

        [BREWMP] Add MarkStack fastMalloc implementation for platforms without VirtualAlloc or mmap.
        https://bugs.webkit.org/show_bug.cgi?id=33582

        Use fastMalloc and fastFree to implement MarkStack::allocateStack and
        MarkStack::releaseStack for platforms without page level allocation.

        * runtime/MarkStack.h:
        (JSC::MarkStack::MarkStackArray::shrinkAllocation):
        * runtime/MarkStackNone.cpp: Added.
        (JSC::MarkStack::initializePagesize):
        (JSC::MarkStack::allocateStack):
        (JSC::MarkStack::releaseStack):

2010-01-27  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Don't use time function
        https://bugs.webkit.org/show_bug.cgi?id=33577

        Calling time(0) in BREW devices causes a crash because time
        is not properly ported in most devices. Cast currentTime() to
        time_t to get the same result as time(0).

        * wtf/DateMath.cpp:
        (WTF::calculateUTCOffset):

2010-01-27  Alexey Proskuryakov  <ap@apple.com>

        Revert r53899 (HashMap<AtomicStringImpl*, Value> key checks) and subsequent build fixes,
        because they make SVG tests crash in release builds.

        * wtf/HashMap.h:
        (WTF::::remove):
        * wtf/HashSet.h:
        (WTF::::remove):
        * wtf/HashTable.h:
        (WTF::::add):
        (WTF::::addPassingHashCode):
        (WTF::::removeAndInvalidate):
        (WTF::::remove):
        (WTF::::rehash):
        (WTF::::checkTableConsistency):
        (WTF::::checkTableConsistencyExceptSize):
        * wtf/HashTraits.h:
        (WTF::GenericHashTraits::emptyValue):
        (WTF::):
        * wtf/RefPtrHashMap.h:
        (WTF::::remove):

2010-01-26  Alexey Proskuryakov  <ap@apple.com>

        More Windows build fixing.

        * wtf/HashTraits.h: _msize takes void*, remove const qualifier from type.

2010-01-26  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * wtf/HashTraits.h: Include malloc.h for _msize().

2010-01-26  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * wtf/HashTable.h: (WTF::HashTable::checkTableConsistencyExceptSize): Remove const from a
        static (empty) version of this function.

2010-01-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34150
        WebKit needs a mechanism to catch stale HashMap entries

        It is very difficult to catch stale pointers that are HashMap keys - since a pointer's hash
        is just its value, it is very unlikely that any observable problem is reproducible.

        This extends hash table consistency checks to check that pointers are referencing allocated
        memory blocks, and makes it possible to invoke the checks explicitly (it is not feasible
        to enable CHECK_HASHTABLE_CONSISTENCY by default, because that affects performance too much).

        * wtf/HashMap.h: (WTF::::checkConsistency): Call through to HashTable implementation. We can
        add similar calls to HashSet and HashCountedSet, but I haven't seen hard to debug problems
        with those yet.

        * wtf/HashSet.h: (WTF::::remove): The version of checkTableConsistency that's guarded by
        CHECK_HASHTABLE_CONSISTENCY is now called internalCheckTableConsistency().

        * wtf/HashTable.h:
        (WTF::HashTable::internalCheckTableConsistency):
        (WTF::HashTable::internalCheckTableConsistencyExceptSize):
        (WTF::HashTable::checkTableConsistencyExceptSize):
        Expose checkTableConsistency() even if CHECK_HASHTABLE_CONSISTENCY is off.
        (WTF::::add): Updated for checkTableConsistency renaming.
        (WTF::::addPassingHashCode): Ditto.
        (WTF::::removeAndInvalidate): Ditto.
        (WTF::::remove): Ditto.
        (WTF::::rehash): Ditto.
        (WTF::::checkTableConsistency): The assertion for !shouldExpand() was not correct - this
        function returns true for tables with m_table == 0.
        (WTF::::checkTableConsistencyExceptSize): Call checkValueConsistency for key. Potentially,
        we could do the same for values.

        * wtf/HashTraits.h:
        (WTF::GenericHashTraits::checkValueConsistency): An empty function that can be overridden
        to add checks. Currently, the only override is for pointer hashes.

        * wtf/RefPtrHashMap.h: (WTF::::remove): Updated for checkTableConsistency renaming.

2010-01-26  Lyon Chen  <liachen@rim.com>

        Reviewed by Maciej Stachowiak.

        Opcode.h use const void* for Opcode cause error #1211 for RVCT compiler
        https://bugs.webkit.org/show_bug.cgi?id=33902

        * bytecode/Opcode.h:

2010-01-26  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver Hunt.

        Windows build references non-existent include paths
        https://bugs.webkit.org/show_bug.cgi?id=34175

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:

2010-01-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Using JavaScriptCore API with a webkit vended context can result in slow script dialog
        https://bugs.webkit.org/show_bug.cgi?id=34172

        Make the APIShim correctly increment and decrement the timeout
        entry counter.

        * API/APIShims.h:
        (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
        (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
        (JSC::APICallbackShim::APICallbackShim):
        (JSC::APICallbackShim::~APICallbackShim):

2010-01-26  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Fix compilation of QtScript with non-gcc compilers

        Variable length stack arrays are a gcc extension. Use QVarLengthArray
        as a more portable solution that still tries to allocate on the stack
        first.

        * qt/api/qscriptvalue_p.h:
        (QScriptValuePrivate::call):

2010-01-26  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix the build on platforms without JIT support.

        The JIT support should be determined at compile-time via wtf/Platform.h

        * qt/api/QtScript.pro:

2010-01-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        First steps of the QtScript API.
        
        Two new classes were created; QScriptEngine and QScriptValue.
        The first should encapsulate a javascript context and the second a script
        value.
        
        This API is still in development, so it isn't compiled by default.
        To trigger compilation, pass --qmakearg="CONFIG+=build-qtscript" to
        build-webkit.

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

        * qt/api/QtScript.pro: Added.
        * qt/api/qscriptconverter_p.h: Added.
        (QScriptConverter::toString):
        * qt/api/qscriptengine.cpp: Added.
        (QScriptEngine::QScriptEngine):
        (QScriptEngine::~QScriptEngine):
        (QScriptEngine::evaluate):
        (QScriptEngine::collectGarbage):
        * qt/api/qscriptengine.h: Added.
        * qt/api/qscriptengine_p.cpp: Added.
        (QScriptEnginePrivate::QScriptEnginePrivate):
        (QScriptEnginePrivate::~QScriptEnginePrivate):
        (QScriptEnginePrivate::evaluate):
        * qt/api/qscriptengine_p.h: Added.
        (QScriptEnginePrivate::get):
        (QScriptEnginePrivate::collectGarbage):
        (QScriptEnginePrivate::makeJSValue):
        (QScriptEnginePrivate::context):
        * qt/api/qscriptvalue.cpp: Added.
        (QScriptValue::QScriptValue):
        (QScriptValue::~QScriptValue):
        (QScriptValue::isValid):
        (QScriptValue::isBool):
        (QScriptValue::isBoolean):
        (QScriptValue::isNumber):
        (QScriptValue::isNull):
        (QScriptValue::isString):
        (QScriptValue::isUndefined):
        (QScriptValue::isError):
        (QScriptValue::isObject):
        (QScriptValue::isFunction):
        (QScriptValue::toString):
        (QScriptValue::toNumber):
        (QScriptValue::toBool):
        (QScriptValue::toBoolean):
        (QScriptValue::toInteger):
        (QScriptValue::toInt32):
        (QScriptValue::toUInt32):
        (QScriptValue::toUInt16):
        (QScriptValue::call):
        (QScriptValue::engine):
        (QScriptValue::operator=):
        (QScriptValue::equals):
        (QScriptValue::strictlyEquals):
        * qt/api/qscriptvalue.h: Added.
        (QScriptValue::):
        * qt/api/qscriptvalue_p.h: Added.
        (QScriptValuePrivate::):
        (QScriptValuePrivate::get):
        (QScriptValuePrivate::QScriptValuePrivate):
        (QScriptValuePrivate::isValid):
        (QScriptValuePrivate::isBool):
        (QScriptValuePrivate::isNumber):
        (QScriptValuePrivate::isNull):
        (QScriptValuePrivate::isString):
        (QScriptValuePrivate::isUndefined):
        (QScriptValuePrivate::isError):
        (QScriptValuePrivate::isObject):
        (QScriptValuePrivate::isFunction):
        (QScriptValuePrivate::toString):
        (QScriptValuePrivate::toNumber):
        (QScriptValuePrivate::toBool):
        (QScriptValuePrivate::toInteger):
        (QScriptValuePrivate::toInt32):
        (QScriptValuePrivate::toUInt32):
        (QScriptValuePrivate::toUInt16):
        (QScriptValuePrivate::equals):
        (QScriptValuePrivate::strictlyEquals):
        (QScriptValuePrivate::assignEngine):
        (QScriptValuePrivate::call):
        (QScriptValuePrivate::engine):
        (QScriptValuePrivate::context):
        (QScriptValuePrivate::value):
        (QScriptValuePrivate::object):
        (QScriptValuePrivate::inherits):
        (QScriptValuePrivate::isJSBased):
        (QScriptValuePrivate::isNumberBased):
        (QScriptValuePrivate::isStringBased):
        * qt/api/qtscriptglobal.h: Added.
        * qt/tests/qscriptengine/qscriptengine.pro: Added.
        * qt/tests/qscriptengine/tst_qscriptengine.cpp: Added.
        (tst_QScriptEngine::tst_QScriptEngine):
        (tst_QScriptEngine::~tst_QScriptEngine):
        (tst_QScriptEngine::init):
        (tst_QScriptEngine::cleanup):
        (tst_QScriptEngine::collectGarbage):
        (tst_QScriptEngine::evaluate):
        * qt/tests/qscriptvalue/qscriptvalue.pro: Added.
        * qt/tests/qscriptvalue/tst_qscriptvalue.cpp: Added.
        (tst_QScriptValue::tst_QScriptValue):
        (tst_QScriptValue::~tst_QScriptValue):
        (tst_QScriptValue::init):
        (tst_QScriptValue::cleanup):
        (tst_QScriptValue::ctor):
        (tst_QScriptValue::toString_data):
        (tst_QScriptValue::toString):
        (tst_QScriptValue::copyConstructor_data):
        (tst_QScriptValue::copyConstructor):
        (tst_QScriptValue::assignOperator_data):
        (tst_QScriptValue::assignOperator):
        (tst_QScriptValue::dataSharing):
        (tst_QScriptValue::constructors_data):
        (tst_QScriptValue::constructors):
        (tst_QScriptValue::call):
        * qt/tests/tests.pri: Added.
        * qt/tests/tests.pro: Added.

2010-01-25  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Fix Chromium Linux tests: the pthread functions on Linux produce segfault if they receive 0 thread handle.
        After r53714, we can have 0 thread handles passed to pthread_join and pthread_detach if corresponding threads
        were already terminated and their threadMap entries cleared.
        Add a 0 check.

        * wtf/ThreadingPthreads.cpp:
        (WTF::waitForThreadCompletion):
        (WTF::detachThread):

2010-01-24  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Maciej Stachowiak.

        Refactor JITStubs.cpp so that DEFINE_STUB_FUNCTION is only used once for each function
        https://bugs.webkit.org/show_bug.cgi?id=33866

        Place the guard USE(JSVALUE32_64) inside the body of the DEFINE_STUB_FUNCTION
        macro for those functions that are always present.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

2010-01-22  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Remove the Bakefile build system, which is no longer being used.
        
        https://bugs.webkit.org/show_bug.cgi?id=34022

        * JavaScriptCoreSources.bkl: Removed.
        * jscore.bkl: Removed.

2010-01-22  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34025
        Enable client-based Geolocation abstraction for Mac, Windows AppleWebKit targets.

        * Configurations/FeatureDefines.xcconfig:

2010-01-22  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, attempted Snow Leopard build fix.

        * wtf/ThreadingPthreads.cpp: Add a forward declaration of a function which is not 'static'.

2009-01-22  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Maciej Stachowiak.

        Fix the leak of ThreadIdentifiers in threadMap across threads.
        https://bugs.webkit.org/show_bug.cgi?id=32689

        Test is added to DumpRenderTree.mm.

        * Android.mk: Added file ThreadIdentifierDataPthreads.(h|cpp) to build.
        * Android.v8.wtf.mk: Ditto.
        * GNUmakefile.am: Ditto.
        * JavaScriptCore.gyp/JavaScriptCore.gyp: Ditto.
        * JavaScriptCore.gypi: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.

        * wtf/ThreadIdentifierDataPthreads.cpp: Added. Contains custom implementation of thread-specific data that uses custom destructor.
        (WTF::ThreadIdentifierData::~ThreadIdentifierData): Removes the ThreadIdentifier from the threadMap.
        (WTF::ThreadIdentifierData::identifier):
        (WTF::ThreadIdentifierData::initialize):
        (WTF::ThreadIdentifierData::destruct): Custom thread-specific destructor. Resets the value for the key again to cause second invoke.
        (WTF::ThreadIdentifierData::initializeKeyOnceHelper):
        (WTF::ThreadIdentifierData::initializeKeyOnce): Need to use pthread_once since initialization may come on any thread(s).
        * wtf/ThreadIdentifierDataPthreads.h: Added.
        (WTF::ThreadIdentifierData::ThreadIdentifierData):

        * wtf/Threading.cpp:
        (WTF::threadEntryPoint): Move initializeCurrentThreadInternal to after the lock to make
                                 sure it is invoked when ThreadIdentifier is already established.

        * wtf/Threading.h: Rename setThreadNameInternal -> initializeCurrentThreadInternal since it does more then only set the name now.
        * wtf/ThreadingNone.cpp:
        (WTF::initializeCurrentThreadInternal): Ditto.
        * wtf/ThreadingWin.cpp:
        (WTF::initializeCurrentThreadInternal): Ditto.
        (WTF::initializeThreading): Ditto.
        * wtf/gtk/ThreadingGtk.cpp:
        (WTF::initializeCurrentThreadInternal): Ditto.
        * wtf/qt/ThreadingQt.cpp:
        (WTF::initializeCurrentThreadInternal): Ditto.

        * wtf/ThreadingPthreads.cpp:
        (WTF::establishIdentifierForPthreadHandle):
        (WTF::clearPthreadHandleForIdentifier): Make it not 'static' so the ~ThreadIdentifierData() in another file can call it.
        (WTF::initializeCurrentThreadInternal): Set the thread-specific data. The ThreadIdentifier is already established by creating thread.
        (WTF::waitForThreadCompletion): Remove call to clearPthreadHandleForIdentifier(threadID) since it is now done in ~ThreadIdentifierData().
        (WTF::detachThread): Ditto.
        (WTF::currentThread): Use the thread-specific data to get the ThreadIdentifier. It's many times faster then Mutex-protected iteration through the map.
                              Also, set the thread-specific data if called first time on the thread.

2010-01-21  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Alexey Proskuryakov.

        Add ThreadSpecific for ENABLE(SINGLE_THREADED)
        https://bugs.webkit.org/show_bug.cgi?id=33878

        Implement ThreadSpecific with a simple getter/setter
        when ENABLE(SINGLE_THREADED) is true.

        Due to the change in https://bugs.webkit.org/show_bug.cgi?id=33236,
        an implementation of ThreadSpecific must be available to build WebKit.
        This causes a build failure for platforms without a proper
        ThreadSpecific implementation.

        * wtf/ThreadSpecific.h:
        (WTF::::ThreadSpecific):
        (WTF::::~ThreadSpecific):
        (WTF::::get):
        (WTF::::set):
        (WTF::::destroy):

2010-01-21  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Maciej Stachowiak.

        Add fastStrDup to FastMalloc
        https://bugs.webkit.org/show_bug.cgi?id=33937

        The new string returned by fastStrDup is obtained with fastMalloc,
        and can be freed with fastFree. This makes the memory management 
        more consistent because we don't need to keep strdup allocated pointers
        and free them with free(). Instead we can use fastFree everywhere.

        * wtf/FastMalloc.cpp:
        (WTF::fastStrDup):
        * wtf/FastMalloc.h:

2010-01-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak.

        history.back() for same-document history traversals isn't synchronous as the specification states.
        <rdar://problem/7535011> and https://bugs.webkit.org/show_bug.cgi?id=33538

        * wtf/Platform.h: Add a "HISTORY_ALWAYS_ASYNC" enable and turn it on for Chromium.

2010-01-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Always create a prototype for automatically managed classes.
        
        This fixes some errors where prototype chains were not correctly hooked
        up, and also ensures that API classes work correctly with features like
        instanceof.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::create): Cleaned up some of this code. Also changed it
        to always create a prototype class.

        * API/tests/testapi.c:
        (Derived2_class):
        (main): Fixed a null value crash in the exception checking code.
        * API/tests/testapi.js: Added some tests for the case where a prototype
        chain would not be hooked up correctly.

2010-01-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Force JSC to create a prototype chain for API classes with a
        parent class but no static functions.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::create):

2010-01-21  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Geoffrey Garen.

        Object.getOwnPropertyDescriptor always returns undefined for JS API objects
        https://bugs.webkit.org/show_bug.cgi?id=33946

        Ideally the getOwnPropertyDescriptor() reimplementation should return an
        access descriptor that wraps the property getter and setter callbacks, but
        that approach is much more involved than returning a value descriptor.
        Keep it simple for now.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertyDescriptor):
        * API/tests/testapi.js:

2010-01-20  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::initializeScavenger): Remove unnecessary function call.

2010-01-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Use the inline i386 assembly for x86_64 as well rather than falling back to using pthread mutexes.

        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):
        (TCMalloc_SlowLock):

2010-01-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7215063> Use GCD instead of an extra thread for FastMalloc scavenging on platforms where it is supported

        Abstract the background scavenging slightly so that an alternate implementation that uses GCD can be used on platforms
        where it is supported.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::init):
        (WTF::TCMalloc_PageHeap::initializeScavenger):
        (WTF::TCMalloc_PageHeap::signalScavenger):
        (WTF::TCMalloc_PageHeap::shouldContinueScavenging):
        (WTF::TCMalloc_PageHeap::Delete):
        (WTF::TCMalloc_PageHeap::periodicScavenge):
        * wtf/Platform.h:

2010-01-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7562708> REGRESSION(53460): Heap::destroy may not run
        all destructors

        * runtime/Collector.cpp:
        (JSC::Heap::freeBlocks): Instead of fully marking protected objects,
        just set their mark bits. This prevents protected objects from keeping
        unprotected objects alive. Destructor order is not guaranteed, so it's
        OK to destroy objects pointed to by protected objects before destroying
        protected objects.

2010-01-19  David Levin  <levin@chromium.org>

        Reviewed by Oliver Hunt.

        CrossThreadCopier needs to support ThreadSafeShared better.
        https://bugs.webkit.org/show_bug.cgi?id=33698

        * wtf/TypeTraits.cpp: Added tests for the new type traits.
        * wtf/TypeTraits.h:
        (WTF::IsSubclass): Determines if a class is a derived from another class.
        (WTF::IsSubclassOfTemplate): Determines if a class is a derived from a
        template class (with one parameter that is unknown).
        (WTF::RemoveTemplate): Reveals the type for a template parameter.

2010-01-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        Feature defines are difficult to maintain on Windows builds
        https://bugs.webkit.org/show_bug.cgi?id=33883

        FeatureDefines.vsprops are now maintained in a way similar to
        Configurations/FeatureDefines.xcconfig, with the added advantage
        of having a single FeatureDefines file across all projects.

        * Configurations/FeatureDefines.xcconfig: Add comments about keeping feature definitions in sync.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add FeatureDefines.vsprops inherited property sheet.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add FeatureDefines.vsprops inherited property sheet.

2010-01-20  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix for r53547.

        * DerivedSources.pro:

2010-01-20  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Make extraCompilers for generated sources depend on their scripts

        * DerivedSources.pro:

2010-01-19  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        When JavaScriptCore calls Debugger::Exception, have it pass a
        hasHandler variable that represents if exception is being handled
        in the same function (not in a parent on the call stack).
        
        This just adds a new parameter, no behavior is changed.

        * debugger/Debugger.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):

2010-01-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Inline functions that are hot in DOM manipulation
        https://bugs.webkit.org/show_bug.cgi?id=33820
        
        (3% speedup on Dromaeo DOM Core tests)

        * runtime/WeakGCMap.h:
        (JSC::::get): inline

2010-01-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix for JIT with RVCT.

        Remove IMPORT statement; cti_vm_throw is already defined in JITStubs.h.
        Remove extra ')'.

        * jit/JITStubs.cpp:
        (JSC::ctiVMThrowTrampoline):

2010-01-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION (52082): Crash on worker thread when reloading http://radnan.public.iastate.edu/procedural/
        https://bugs.webkit.org/show_bug.cgi?id=33826

        This bug was caused by a GC-protected object being destroyed early by
        Heap::destroy. Clients of the GC protect APIs (reasonably) expect pointers
        to GC-protected memory to be valid.

        The solution is to do two passes of tear-down in Heap::destroy. The first
        pass tears down all unprotected objects. The second pass ASSERTs that all
        previously protected objects are now unprotected, and then tears down
        all perviously protected objects. These two passes simulate the two passes
        that would have been required to free a protected object during normal GC.
        
        * API/JSContextRef.cpp: Removed some ASSERTs that have moved into Heap.

        * runtime/Collector.cpp:
        (JSC::Heap::destroy): Moved ASSERTs to here.
        (JSC::Heap::freeBlock): Tidied up the use of didShrink by moving its
        setter to the function that does the shrinking.
        (JSC::Heap::freeBlocks): Implemented above algorithm.
        (JSC::Heap::shrinkBlocks): Tidied up the use of didShrink.

2010-01-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix).

        Reverting r53455, breaks 2 javascriptcore tests.

        * API/JSContextRef.cpp:
        * runtime/Collector.cpp:
        (JSC::Heap::destroy):
        (JSC::Heap::freeBlock):
        (JSC::Heap::freeBlocks):
        (JSC::Heap::shrinkBlocks):

2010-01-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix).

        Revert r53454, since it causes much sadness in this world.

        * runtime/UString.cpp:
        (JSC::UString::spliceSubstringsWithSeparators):
        (JSC::UString::replaceRange):
        * runtime/UStringImpl.cpp:
        (JSC::UStringImpl::baseSharedBuffer):
        (JSC::UStringImpl::sharedBuffer):
        (JSC::UStringImpl::~UStringImpl):
        * runtime/UStringImpl.h:
        (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
        (JSC::UntypedPtrAndBitfield::asPtr):
        (JSC::UntypedPtrAndBitfield::operator&=):
        (JSC::UntypedPtrAndBitfield::operator|=):
        (JSC::UntypedPtrAndBitfield::operator&):
        (JSC::UStringImpl::create):
        (JSC::UStringImpl::cost):
        (JSC::UStringImpl::isIdentifier):
        (JSC::UStringImpl::setIsIdentifier):
        (JSC::UStringImpl::ref):
        (JSC::UStringImpl::deref):
        (JSC::UStringImpl::checkConsistency):
        (JSC::UStringImpl::UStringImpl):
        (JSC::UStringImpl::bufferOwnerString):
        (JSC::UStringImpl::bufferOwnership):
        (JSC::UStringImpl::isStatic):
        * wtf/StringHashFunctions.h:
        (WTF::stringHash):

2010-01-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION (52082): Crash on worker thread when reloading http://radnan.public.iastate.edu/procedural/
        https://bugs.webkit.org/show_bug.cgi?id=33826

        This bug was caused by a GC-protected object being destroyed early by
        Heap::destroy. Clients of the GC protect APIs (reasonably) expect pointers
        to GC-protected memory to be valid.

        The solution is to do two passes of tear-down in Heap::destroy. The first
        pass tears down all unprotected objects. The second pass ASSERTs that all
        previously protected objects are now unprotected, and then tears down
        all perviously protected objects. These two passes simulate the two passes
        that would have been required to free a protected object during normal GC.
        
        * API/JSContextRef.cpp: Removed some ASSERTs that have moved into Heap.

        * runtime/Collector.cpp:
        (JSC::Heap::destroy): Moved ASSERTs to here.
        (JSC::Heap::freeBlock): Tidied up the use of didShrink by moving its
        setter to the function that does the shrinking.
        (JSC::Heap::freeBlocks): Implemented above algorithm.
        (JSC::Heap::shrinkBlocks): Tidied up the use of didShrink.

2010-01-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=33731
        Remove UntypedPtrAndBitfield from UStringImpl (akin to PtrAndFlags).

        This break the OS X Leaks tool.  Instead, free up some more bits from the refCount.

        * runtime/UStringImpl.cpp:
        (JSC::UStringImpl::sharedBuffer):
        (JSC::UStringImpl::~UStringImpl):
        * runtime/UStringImpl.h:
        (JSC::UStringImpl::cost):
        (JSC::UStringImpl::checkConsistency):
        (JSC::UStringImpl::UStringImpl):
        (JSC::UStringImpl::bufferOwnerString):
        (JSC::UStringImpl::):
        * wtf/StringHashFunctions.h:
        (WTF::stringHash):

2010-01-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::valueAsDate setter support for type=month.
        https://bugs.webkit.org/show_bug.cgi?id=33021

        Expose the following functions to be used by WebCore:
         - WTF::msToyear()
         - WTF::dayInYear()
         - WTF::monthFromDayInYear()
         - WTF::dayInMonthFromDayInYear()

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/DateMath.cpp:
        (WTF::msToYear): Remove "static inline".
        (WTF::dayInYear): Remove "static inline".
        (WTF::monthFromDayInYear): Remove "static inline".
        (WTF::dayInMonthFromDayInYear): Remove "static inline".
        * wtf/DateMath.h: Declare the above functions.

2010-01-18  Darin Adler  <darin@apple.com>

        Fix build by reverting the previous change.

        * runtime/UString.h: Rolled out the FastAllocBase base class.
        It was making UString larger, and therefore JSString larger,
        and too big for a garbage collection cell.

        This raises the unpleasant possibility that many classes became
        larger because we added the FastAllocBase base class. I am
        worried about this, and it needs to be investigated.

2010-01-18  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for UString class
        https://bugs.webkit.org/show_bug.cgi?id=27831

        Inherits the following class from FastAllocBase because it is
        instantiated by 'new' and no need to be copyable:

        class name     - instantiated at:
        classs UString - JavaScriptCore/runtime/UString.cpp:160

        * runtime/UString.h:

2010-01-18  Evan Cheng  <evan.cheng@apple.com>

        Reviewed by Darin Adler.

        Add some ALWAYS_INLINE for key functions not inlined by some versions of GCC.
        rdar://problem/7553780

        * runtime/JSObject.h:
        (JSC::JSObject::getPropertySlot): ALWAYS_INLINE both overloads.
        * runtime/JSString.h:
        (JSC::JSString::JSString): ALWAYS_INLINE the version that takes a UString.
        * runtime/UString.h:
        (JSC::operator==): ALWAYS_INLINE the version that compares two UString objects.

2010-01-18  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Darin Adler.

        Delete dftables-xxxxxxxx.in files automatically.
        https://bugs.webkit.org/show_bug.cgi?id=33796

        * pcre/dftables: unlink unnecessary temporary file.

2010-01-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Force qmake to generate a single makefile for DerivedSources.pro

        * DerivedSources.pro:

2010-01-18  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Gustavo Noronha Silva.

        Rolling out r53391 and r53392 because of random crashes on buildbots.
        https://bugs.webkit.org/show_bug.cgi?id=33731

        * bytecode/CodeBlock.h:
        (JSC::CallLinkInfo::seenOnce):
        (JSC::CallLinkInfo::setSeen):
        (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
        (JSC::MethodCallLinkInfo::seenOnce):
        (JSC::MethodCallLinkInfo::setSeen):
        * jit/JIT.cpp:
        (JSC::JIT::unlinkCall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::patchMethodCallProto):
        * runtime/UString.cpp:
        (JSC::UString::spliceSubstringsWithSeparators):
        (JSC::UString::replaceRange):
        * runtime/UString.h:
        * runtime/UStringImpl.cpp:
        (JSC::UStringImpl::baseSharedBuffer):
        (JSC::UStringImpl::sharedBuffer):
        (JSC::UStringImpl::~UStringImpl):
        * runtime/UStringImpl.h:
        (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
        (JSC::UntypedPtrAndBitfield::asPtr):
        (JSC::UntypedPtrAndBitfield::operator&=):
        (JSC::UntypedPtrAndBitfield::operator|=):
        (JSC::UntypedPtrAndBitfield::operator&):
        (JSC::UStringImpl::create):
        (JSC::UStringImpl::cost):
        (JSC::UStringImpl::isIdentifier):
        (JSC::UStringImpl::setIsIdentifier):
        (JSC::UStringImpl::ref):
        (JSC::UStringImpl::deref):
        (JSC::UStringImpl::checkConsistency):
        (JSC::UStringImpl::UStringImpl):
        (JSC::UStringImpl::bufferOwnerString):
        (JSC::UStringImpl::bufferOwnership):
        (JSC::UStringImpl::isStatic):
        * wtf/StringHashFunctions.h:
        (WTF::stringHash):

2010-01-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix the build with strict gcc and RVCT versions: It's not legal to cast a
        pointer to a function to a void* without an intermediate cast to a non-pointer
        type. A cast to a ptrdiff_t inbetween fixes it.

        * runtime/JSString.h:
        (JSC::Fiber::JSString):

2010-01-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=33731
        Remove UntypedPtrAndBitfield from UStringImpl (akin to PtrAndFlags).

        This break the OS X Leaks tool.  Instead, free up some more bits from the refCount.

        * runtime/UStringImpl.cpp:
        (JSC::UStringImpl::sharedBuffer):
        (JSC::UStringImpl::~UStringImpl):
        * runtime/UStringImpl.h:
        (JSC::UStringImpl::cost):
        (JSC::UStringImpl::checkConsistency):
        (JSC::UStringImpl::UStringImpl):
        (JSC::UStringImpl::bufferOwnerString):
        (JSC::UStringImpl::):
        * wtf/StringHashFunctions.h:
        (WTF::stringHash):

2010-01-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=33731
        Remove uses of PtrAndFlags from JIT data stuctures.

        These break the OS X Leaks tool.  Free up a bit in CallLinkInfo, and invalid
        permutation of pointer states in MethodCallLinkInfo to represent the removed bits.

        * bytecode/CodeBlock.h:
        (JSC::CallLinkInfo::seenOnce):
        (JSC::CallLinkInfo::setSeen):
        (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
        (JSC::MethodCallLinkInfo::seenOnce):
        (JSC::MethodCallLinkInfo::setSeen):
        * jit/JIT.cpp:
        (JSC::JIT::unlinkCall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::patchMethodCallProto):
        * runtime/UString.h:

2010-01-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Cache JS string values made from DOM strings (Dromaeo speedup)
        https://bugs.webkit.org/show_bug.cgi?id=33768
        <rdar://problem/7353576>

        * runtime/JSString.h:
        (JSC::jsStringWithFinalizer): Added new mechanism for a string to have an optional
        finalizer callback, for the benefit of weak-referencing caches.
        (JSC::):
        (JSC::Fiber::JSString):
        (JSC::Fiber::~JSString):
        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope): Clear fibers so this doesn't look like a string with a finalizer.
        * runtime/WeakGCMap.h: Include "Collector.h" to make this header includable by itself.

2010-01-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for <rdar://problem/7548432>
        Add ALWAYS_INLINE to jsLess for a 1% speedup on llvm-gcc.

        * runtime/Operations.h:
        (JSC::jsLess):

2010-01-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        REGRESISON: Google maps buttons not working properly
        https://bugs.webkit.org/show_bug.cgi?id=31871

        REGRESSION(r52948): JavaScript exceptions thrown on Google Maps when
        getting directions for a second time
        https://bugs.webkit.org/show_bug.cgi?id=33446
        
        SunSpider and v8 report no change.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCacheGetByID): Update our cached offset in case
        flattening the dictionary changed any of its offsets.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Operations.h:
        (JSC::normalizePrototypeChain): ditto

2010-01-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=33705
        UStringImpl::create() should use internal storage

        When creating a UStringImpl copying of a UChar*, we can use an internal buffer,
        by calling UStringImpl::tryCreateUninitialized().

        Also, remove duplicate of copyChars from JSString, call UStringImpl's version.

        Small (max 0.5%) progression on Sunspidey.

        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):
        * runtime/UStringImpl.h:
        (JSC::UStringImpl::create):

2010-01-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Make naming & behaviour of UString[Impl] methods more consistent.
        https://bugs.webkit.org/show_bug.cgi?id=33702

        UString::create() creates a copy of the UChar* passed, but UStringImpl::create() assumes
        that it should assume ownership of the provided buffer (with UString::createNonCopying()
        and UStringImpl::createCopying() providing the alternate behaviours).  Unify on create()
        taking a copy of the provided buffer.  For non-copying cases, use the name 'adopt', and
        make this method take a Vector<UChar>&.  For cases where non-copying construction was being
        used, other than from a Vector<UChar>, change the code to allocate the storage along with
        the UStringImpl using UStringImpl::createUninitialized().  (The adopt() method also more
        closely matches that of WebCore::StringImpl).

        Also, UString::createUninitialized() and UStringImpl::createUninitialized() have incompatible
        behaviours, in that the UString form sets the provided UChar* to a null or non-null value to
        indicate success or failure, but UStringImpl uses the returned PassRefPtr<UStringImpl> to
        indicate when allocation has failed (potentially leaving the output Char* uninitialized).
        This is also incompatible with WebCore::StringImpl's behaviour, in that
        StringImpl::createUninitialized() will CRASH() if unable to allocate.  Some uses of
        createUninitialized() in JSC are unsafe, since they do not test the result for null.
        UStringImpl's indication is preferable, since we may want a successful call to set the result
        buffer to 0 (specifically, StringImpl returns 0 for the buffer where createUninitialized()
        returns the empty string, which seems reasonable to catch bugs early).  UString's method
        cannot support UStringImpl's behaviour directly, since it returns an object rather than a
        pointer.
            - remove UString::createUninitialized(), replace with calls to UStringImpl::createUninitialized()
            - create a UStringImpl::tryCreateUninitialized() form UStringImpl::createUninitialized(),
              with current behaviour, make createUninitialized() crash on failure to allocate.
            - make cases in JSC that do not check the result call createUninitialized(), and cases that do
              check call tryCreateUninitialized().

        Rename computedHash() to existingHash(), to bring this in line wih WebCore::StringImpl.

        * API/JSClassRef.cpp:
        (OpaqueJSClassContextData::OpaqueJSClassContextData):
        * JavaScriptCore.exp:
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        * runtime/Identifier.cpp:
        (JSC::CStringTranslator::translate):
        (JSC::UCharBufferTranslator::translate):
        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):
        * runtime/Lookup.cpp:
        (JSC::HashTable::createTable):
        * runtime/Lookup.h:
        (JSC::HashTable::entry):
        * runtime/StringBuilder.h:
        (JSC::StringBuilder::release):
        * runtime/StringConstructor.cpp:
        (JSC::stringFromCharCodeSlowCase):
        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferencesSlow):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncLink):
        * runtime/Structure.cpp:
        (JSC::Structure::despecifyDictionaryFunction):
        (JSC::Structure::get):
        (JSC::Structure::despecifyFunction):
        (JSC::Structure::put):
        (JSC::Structure::remove):
        (JSC::Structure::insertIntoPropertyMapHashTable):
        (JSC::Structure::checkConsistency):
        * runtime/Structure.h:
        (JSC::Structure::get):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTableHash::hash):
        * runtime/UString.cpp:
        (JSC::createRep):
        (JSC::UString::UString):
        (JSC::UString::spliceSubstringsWithSeparators):
        (JSC::UString::replaceRange):
        (JSC::UString::operator=):
        * runtime/UString.h:
        (JSC::UString::adopt):
        (JSC::IdentifierRepHash::hash):
        (JSC::makeString):
        * runtime/UStringImpl.h:
        (JSC::UStringImpl::adopt):
        (JSC::UStringImpl::create):
        (JSC::UStringImpl::createUninitialized):
        (JSC::UStringImpl::tryCreateUninitialized):
        (JSC::UStringImpl::existingHash):

2010-01-13  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Oliver Hunt.

        JSON.stringify and JSON.parse needlessly process properties in the prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=33053

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::walk):

2010-01-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (buildfix).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-01-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33641
        Assertion failure in Lexer.cpp if input stream ends while in string escape

        Test: fast/js/end-in-string-escape.html

        * parser/Lexer.cpp: (JSC::Lexer::lex): Bail out quickly on end of stream, not giving the
        assertion a chance to fire.

2010-01-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (buildfix).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-01-13  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig & Darin Adler.

        Three quick fixes to UStringImpl.
            - The destroy() method can be switched back to a normal destructor; since we've switched
              the way we protect static strings to be using an odd ref-count the destroy() won't abort.
            - The cost() calculation logic was wrong.  If you have multiple JSStrings wrapping substrings
              of a base string, they would each report the full cost of the base string to the heap.
              Instead we should only be reporting once for the base string.
            - Remove the overloaded new operator calling fastMalloc, replace this with a 'using' to pick
              up the implementation from the parent class.

        * JavaScriptCore.exp:
        * runtime/UStringImpl.cpp:
        (JSC::UStringImpl::~UStringImpl):
        * runtime/UStringImpl.h:
        (JSC::UStringImpl::cost):
        (JSC::UStringImpl::deref):

2010-01-13  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Split the build process in two different .pro files.
        This allows qmake to be run once all source files are available.

        * DerivedSources.pro: Added.
        * JavaScriptCore.pri: Moved source generation to DerivedSources.pro
        * pcre/pcre.pri: Moved source generation to DerivedSources.pro

2010-01-12  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Geoffrey Garen.

        [ES5] Implement Object.getOwnPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=32242

        Add an extra argument to getPropertyNames() and getOwnPropertyNames()
        (and all reimplementations thereof) that indicates whether non-enumerable
        properties should be added.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertyNames):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::getOwnPropertyNames):
        * debugger/DebuggerActivation.h:
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertyNames):
        * runtime/Arguments.h:
        * runtime/CommonIdentifiers.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertyNames):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertyNames):
        * runtime/JSByteArray.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertyNames):
        * runtime/JSFunction.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::getOwnPropertyNames):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        (JSC::getClassPropertyNames):
        (JSC::JSObject::getPropertyNames):
        (JSC::JSObject::getOwnPropertyNames):
        * runtime/JSObject.h:
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::getOwnPropertyNames):
        * runtime/JSVariableObject.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConstructorGetOwnPropertyNames):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertyNames):
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertyNames):
        * runtime/StringObject.h:
        * runtime/Structure.cpp: Rename getEnumerablePropertyNames() to getPropertyNames(), which takes an extra argument.
        (JSC::Structure::getPropertyNames):
        * runtime/Structure.h:
        (JSC::):

2010-01-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33540
        Make it possible to build in debug mode with assertions disabled

        * jit/JITStubs.cpp: (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Identifier.cpp: (JSC::Identifier::checkSameIdentifierTable):
        * wtf/FastMalloc.cpp:
        * wtf/HashTable.h: (WTF::HashTableConstIterator::checkValidity):
        * yarr/RegexCompiler.cpp: (JSC::Yarr::compileRegex):

2009-11-23  Yong Li  <yoli@rim.com>

        Reviewed by Adam Treat.

        Make GIF decoder support down-sampling
        https://bugs.webkit.org/show_bug.cgi?id=31806

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::upperBoundScaledY):
        (WebCore::ImageDecoder::lowerBoundScaledY):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::scaledRect):
        (WebCore::RGBA32Buffer::setScaledRect):
        (WebCore::ImageDecoder::scaledSize):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::sizeNowAvailable):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        (WebCore::copyOnePixel):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):

2010-01-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        ecma/Date/15.9.5.12-1.js fails every night at midnight
        https://bugs.webkit.org/show_bug.cgi?id=28041

        Change the test to use a concrete time instead of "now".

        * tests/mozilla/ecma/Date/15.9.5.10-1.js:
        * tests/mozilla/ecma/Date/15.9.5.12-1.js:

2010-01-11  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Enable JIT and YARR_JIT if (CPU(X86_64) && OS(LINUX) && GCC_VERSION >= 40100)

        * wtf/Platform.h:

2010-01-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=33481
        Uninitialized data members in ArrayStorage
        
        SunSpider reports no change.

        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray): Initialize missing data members in the two cases
        where we don't use fastZeroedMalloc, so it doesn't happen automatically.

2010-01-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=33480
        
        Improve debugging reliability for WTF on Windows.
        Store WTF static library's PDB file into a better location.

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:

2010-01-11  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Remove extraneous entries from def file causing build warning.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-01-10  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Darin Adler.

        RegExp.prototype.toString returns "//" for empty regular expressions
        https://bugs.webkit.org/show_bug.cgi?id=33319

        "//" starts a single-line comment, hence "/(?:)/" should be used, according to ECMA.

        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):

        * tests/mozilla/ecma_2/RegExp/properties-001.js:
        (AddRegExpCases):
        * tests/mozilla/js1_2/regexp/toString.js:
        Update relevant Mozilla tests (Mozilla has had this behavior since November 2003).

2010-01-10  Darin Adler  <darin@apple.com>

        * tests/mozilla/ecma/Array/15.4.1.1.js: Added property allow-tabs.
        * tests/mozilla/ecma/Array/15.4.1.2.js: Added property allow-tabs.
        * tests/mozilla/ecma/Array/15.4.2.1-1.js: Added property allow-tabs.
        * tests/mozilla/ecma/Array/15.4.2.2-1.js: Added property allow-tabs.
        * tests/mozilla/ecma/Array/15.4.2.2-2.js: Added property allow-tabs.
        * tests/mozilla/ecma/Array/15.4.2.3.js: Added property allow-tabs.
        * tests/mozilla/ecma/Array/15.4.3.2.js: Added property allow-tabs.
        * tests/mozilla/ecma/Array/15.4.3.js: Added property allow-tabs.
        * tests/mozilla/ecma/Array/15.4.4.1.js: Added property allow-tabs.
        * tests/mozilla/ecma/Array/15.4.4.js: Added property allow-tabs.
        * tests/mozilla/ecma/LexicalConventions/7.7.4.js: Added property allow-tabs.
        * tests/mozilla/ecma/Math/15.8.2.13.js: Added property allow-tabs.
        * tests/mozilla/ecma/Math/15.8.2.16.js: Added property allow-tabs.
        * tests/mozilla/ecma/Math/15.8.2.18.js: Added property allow-tabs.
        * tests/mozilla/ecma/Math/15.8.2.2.js: Added property allow-tabs.
        * tests/mozilla/ecma/Math/15.8.2.4.js: Added property allow-tabs.
        * tests/mozilla/ecma/Math/15.8.2.5.js: Added property allow-tabs.
        * tests/mozilla/ecma/Math/15.8.2.7.js: Added property allow-tabs.
        * tests/mozilla/ecma/String/15.5.1.js: Added property allow-tabs.
        * tests/mozilla/ecma/String/15.5.2.js: Added property allow-tabs.
        * tests/mozilla/ecma/String/15.5.3.1-3.js: Added property allow-tabs.
        * tests/mozilla/ecma/String/15.5.3.1-4.js: Added property allow-tabs.
        * tests/mozilla/ecma/String/15.5.3.js: Added property allow-tabs.
        * tests/mozilla/ecma/TypeConversion/9.5-2.js: Added property allow-tabs.
        * tests/mozilla/ecma/jsref.js: Modified property allow-tabs.
        * tests/mozilla/ecma/shell.js: Modified property allow-tabs.
        * tests/mozilla/ecma_2/LexicalConventions/keywords-001.js: Added property allow-tabs.
        * tests/mozilla/ecma_2/RegExp/exec-001.js: Added property allow-tabs.
        * tests/mozilla/ecma_2/String/match-004.js: Added property allow-tabs.
        * tests/mozilla/ecma_2/String/replace-001.js: Added property allow-tabs.
        * tests/mozilla/ecma_2/String/split-002.js: Added property allow-tabs.
        * tests/mozilla/ecma_2/jsref.js: Modified property allow-tabs.
        * tests/mozilla/ecma_2/shell.js: Added property allow-tabs.
        * tests/mozilla/ecma_3/Date/shell.js: Modified property allow-tabs.
        * tests/mozilla/ecma_3/Exceptions/regress-181654.js: Added property allow-tabs.
        * tests/mozilla/ecma_3/RegExp/regress-209067.js: Added property allow-tabs.
        * tests/mozilla/ecma_3/RegExp/regress-85721.js: Added property allow-tabs.
        * tests/mozilla/importList.html: Added property allow-tabs.
        * tests/mozilla/js1_1/shell.js: Added property allow-tabs.
        * tests/mozilla/js1_2/Array/general1.js: Added property allow-tabs.
        * tests/mozilla/js1_2/Array/general2.js: Added property allow-tabs.
        * tests/mozilla/js1_2/Array/slice.js: Added property allow-tabs.
        * tests/mozilla/js1_2/Array/splice1.js: Added property allow-tabs.
        * tests/mozilla/js1_2/Array/splice2.js: Added property allow-tabs.
        * tests/mozilla/js1_2/Objects/toString-001.js: Added property allow-tabs.
        * tests/mozilla/js1_2/String/charCodeAt.js: Added property allow-tabs.
        * tests/mozilla/js1_2/String/concat.js: Modified property allow-tabs.
        * tests/mozilla/js1_2/String/match.js: Added property allow-tabs.
        * tests/mozilla/js1_2/String/slice.js: Added property allow-tabs.
        * tests/mozilla/js1_2/function/Function_object.js: Added property allow-tabs.
        * tests/mozilla/js1_2/function/Number.js: Modified property allow-tabs.
        * tests/mozilla/js1_2/function/String.js: Modified property allow-tabs.
        * tests/mozilla/js1_2/function/nesting.js: Added property allow-tabs.
        * tests/mozilla/js1_2/function/regexparg-1.js: Added property allow-tabs.
        * tests/mozilla/js1_2/function/regexparg-2-n.js: Added property allow-tabs.
        * tests/mozilla/js1_2/jsref.js: Added property allow-tabs.
        * tests/mozilla/js1_2/operator/equality.js: Added property allow-tabs.
        * tests/mozilla/js1_2/operator/strictEquality.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_dollar_number.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_input.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_input_as_array.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_lastIndex.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_lastMatch.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_lastMatch_as_array.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_lastParen.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_lastParen_as_array.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_leftContext.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_leftContext_as_array.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_multiline.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_multiline_as_array.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_object.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_rightContext.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/RegExp_rightContext_as_array.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/alphanumeric.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/asterisk.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/backslash.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/backspace.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/beginLine.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/character_class.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/compile.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/control_characters.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/digit.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/dot.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/endLine.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/everything.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/exec.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/flags.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/global.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/hexadecimal.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/ignoreCase.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/interval.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/octal.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/parentheses.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/plus.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/question_mark.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/simple_form.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/source.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/special_characters.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/string_replace.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/string_search.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/string_split.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/test.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/toString.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/vertical_bar.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/whitespace.js: Added property allow-tabs.
        * tests/mozilla/js1_2/regexp/word_boundary.js: Added property allow-tabs.
        * tests/mozilla/js1_2/shell.js: Added property allow-tabs.
        * tests/mozilla/js1_2/statements/break.js: Added property allow-tabs.
        * tests/mozilla/js1_2/statements/continue.js: Added property allow-tabs.
        * tests/mozilla/js1_2/statements/do_while.js: Added property allow-tabs.
        * tests/mozilla/js1_2/statements/switch.js: Added property allow-tabs.
        * tests/mozilla/js1_2/statements/switch2.js: Added property allow-tabs.
        * tests/mozilla/js1_3/shell.js: Added property allow-tabs.
        * tests/mozilla/js1_4/shell.js: Added property allow-tabs.
        * tests/mozilla/js1_5/Regress/regress-111557.js: Added property allow-tabs.
        * tests/mozilla/js1_5/Regress/regress-216320.js: Added property allow-tabs.
        * tests/mozilla/menuhead.html: Added property allow-tabs.
        * tests/mozilla/mklistpage.pl: Added property allow-tabs.
        * tests/mozilla/runtests.pl: Added property allow-tabs.

2010-01-08  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Cleans up style errors exposed by the patch for bug #33198.
        Moreover, fixes all "Weird number of spaces at line-start. Are you using a 4-space indent?"
        errors reported by check-webkit-style.

        No functionality was changed. So, no new tests.

        * wtf/Platform.h:

2010-01-08  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Eric Seidel.

        Don't store RegExp flags string representation
        https://bugs.webkit.org/show_bug.cgi?id=33321

        It's unused; the string representation is reconstructed from flags.

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        * runtime/RegExp.h:

2010-01-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Memory use grows grows possibly unbounded in this JavaScript Array test case
        https://bugs.webkit.org/show_bug.cgi?id=31675

        This fixes one observed bug in this test case, which is that
        arrays don't report extra cost for the sparse value maps.

        SunSpider reports a small speedup.

        * runtime/JSArray.cpp:
        (JSC::JSArray::putSlowCase): Report extra memory cost for
        the sparse value map.
        * runtime/JSArray.h: 

2010-01-08  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Remove unnecessary #include from FastMalloc.cpp
        https://bugs.webkit.org/show_bug.cgi?id=33393

        * wtf/FastMalloc.cpp:

2010-01-08  Eric Seidel  <eric@webkit.org>

        No review, rolling out r52983.
        http://trac.webkit.org/changeset/52983
        https://bugs.webkit.org/show_bug.cgi?id=33321

        Broke 59 JavaScriptCore tests.  I don't think Kent knew about
        run-javascriptcore-tests.  Sadly neither does the commit-bot,
        yet.

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        * runtime/RegExp.h:
        (JSC::RegExp::flags):

2010-01-08  Eric Seidel  <eric@webkit.org>

        No review, rolling out r52981.
        http://trac.webkit.org/changeset/52981
        https://bugs.webkit.org/show_bug.cgi?id=33319

        Caused two JS tests to start failing:
        ecma_2/RegExp/properties-001.js and js1_2/regexp/toString.js

        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):

2010-01-08  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Darin Adler.

        Don't store RegExp flags string representation
        https://bugs.webkit.org/show_bug.cgi?id=33321

        It's unused; the string representation is reconstructed from flags.

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        * runtime/RegExp.h:

2010-01-08  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Darin Adler.

        RegExp.prototype.toString returns "//" for empty regular expressions
        https://bugs.webkit.org/show_bug.cgi?id=33319

        "//" starts a single-line comment, hence "/(?:)/" should be used, according to ECMA.

        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):

2010-01-08  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Darin Adler.

        RVCT compiler with "-Otime -O3" optimization tries to optimize out 
        inline new'ed pointers that are passed as arguments.
        Proposed patch assigns new'ed pointer explicitly outside function call.

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

        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass):
        (OpaqueJSClassContextData::OpaqueJSClassContextData):

2010-01-08  Gabor Loki  <loki@webkit.org>

        Reviewed by Gavin Barraclough.

        Remove an unnecessary cacheFlush from ARM_TRADITIONAL JIT
        https://bugs.webkit.org/show_bug.cgi?id=33203

        * assembler/ARMAssembler.cpp: Remove obsolete linkBranch function.
        (JSC::ARMAssembler::executableCopy): Inline a clean linkBranch code.
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::getLdrImmAddress): Use inline function.
        (JSC::ARMAssembler::getLdrImmAddressOnPool): Ditto.
        (JSC::ARMAssembler::patchPointerInternal): Remove an unnecessary cacheFlush.
        (JSC::ARMAssembler::linkJump): Use patchPointerInternal instead of linkBranch.
        (JSC::ARMAssembler::linkCall): Ditto.
        (JSC::ARMAssembler::relinkCall): Ditto.

2010-01-07  Gabor Loki  <loki@webkit.org>

        Reviewed by Gavin Barraclough.

        Build fix for JSVALUE32 when ENABLE_JIT_OPTIMIZE* are disabled
        https://bugs.webkit.org/show_bug.cgi?id=33311

        Move compileGetDirectOffset function to common part of JSVALUE32

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetDirectOffset):

2010-01-07  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Maciej Stachowiak.

        Allow call sites to determine if ASSERT_* and LOG_* macros are operational
        https://bugs.webkit.org/show_bug.cgi?id=33020

        * wtf/Assertions.h: Set ASSERT_MSG_DISABLED, FATAL_DISABLED,
        ERROR_DISABLED, LOG_DISABLED to 1 if the compiler does not support
        variadic macros. Refactor for better readibility.

2010-01-07  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

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

        Added ENABLE_XHTMLMP flag. Disabled by default.

        * Configurations/FeatureDefines.xcconfig:

2010-01-07  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Gavin Barraclough.

        [Symbian] Port ARM traditional JIT Trampolines to RVCT
        https://bugs.webkit.org/show_bug.cgi?id=30552

        Take the GCC implementation and mechanically convert
        it to RVCT syntax.

        Use 'bx rX' instead of 'mov pc, rX' when it is available.

        Developed in cooperation with Iain Campbell and Gabor Loki.

        * JavaScriptCore.pri: Extra step to generate RVCT stubs. The 
        script generation intentionally executed all the time not just
        for RVCT targets.

        * create_rvct_stubs: Added. Perl script to expand precompiler macros
        for RVCT assembler - the template is defined in JITStubs.cpp.

        * jit/JITStubs.cpp:
        (JSC::ctiTrampoline):
        (JSC::ctiVMThrowTrampoline):
        (JSC::ctiOpThrowNotCaught):

2010-01-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fix a crash seen on the buildbots.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): Disable specific function tracking here,
        instead of in WebCore, to ensure that the disabling happens before a
        specific function can be registered.

2010-01-07  Alexey Proskuryakov  <ap@apple.com>

        Mac build fix.

        * JavaScriptCore.exp: Export new JSGlobalData static data members.

2010-01-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=33057
        REGRESSION(r49365): typeof(xhr.responseText) != "string" in Windows

        <rdar://problem/7296920> REGRESSION: WebKit fails to start PeaceKeeper benchmark

        Test: fast/js/webcore-string-comparison.html

        In r49365, some code was moved from JSString.cpp to JSString.h, and as a result, WebCore
        got a way to directly instantiate JSStrings over DLL borders. Since vftable for JSString was
        not exported, objects created from WebCore got a different vptr, and JavaScriptCore
        optimizations that relied on vptr of all JSString objects being equal failed.

        * config.h: Added a JS_EXPORTCLASS macro for exporting classes. It's currently the same as
        JS_EXPORTDATA, but it clearly needed a new name.

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs):
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::createNonDefault):
        (JSC::JSGlobalData::create):
        (JSC::JSGlobalData::sharedInstance):
        * runtime/JSGlobalData.h:
        Store vptrs just once, no need to repeatedly pick and copy them. This makes it possible to
        assert vptr correctness in object destructors (which don't have access to JSGlobalData,
        and even Heap::heap(this) will fail for fake objects created from storeVPtrs()).

        * runtime/JSArray.cpp: (JSC::JSArray::~JSArray): Assert that vptr is what we expect it to be.
        It's important to assert in destructor, because MSVC changes the vptr after constructor
        is invoked.
        * runtime/JSByteArray.cpp: (JSC::JSByteArray::~JSByteArray): Ditto.
        * runtime/JSByteArray.h: Ditto.
        * runtime/JSFunction.h: Ditto.
        * runtime/JSFunction.cpp: (JSC::JSFunction::~JSFunction): Ditto.

        * runtime/JSCell.h: (JSC::JSCell::setVPtr): Added a method to substitute vptr for another
        one.

        * runtime/JSString.h: Export JSString class together with its vftable, and tell other
        libraries tp import it. This is needed on platforms that have a separate JavaScriptCore
        dynamic library - and on Mac, we already did the export via JavaScriptCore.exp.
        (JSC::JSString::~JSString): Assert tha vptr is what we expect it to be.
        (JSC::fixupVPtr): Store a previously saved primary vftable pointer (do nothing if building
        JavaScriptCore itself).
        (JSC::jsSingleCharacterString): Call fixupVPtr in case this is call across DLL boundary.
        (JSC::jsSingleCharacterSubstring): Ditto.
        (JSC::jsNontrivialString): Ditto.
        (JSC::jsString): Ditto.
        (JSC::jsSubstring): Ditto.
        (JSC::jsOwnedString): Ditto.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export the new static
        JSGlobalData members that are used in WebCore via inline functions.

2010-01-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Safari memory usage skyrockets using new Google AdWords interface
        https://bugs.webkit.org/show_bug.cgi?id=33343

        The memory use was caused by the global object creating too many structures
        as it thrashed between different specific functions.

        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::despecifyFunctionTransition):
        (JSC::Structure::addAnonymousSlotsTransition):
        (JSC::Structure::getterSetterTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::despecifyAllFunctions):
        * runtime/Structure.h:
        (JSC::Structure::disableSpecificFunctionTracking): Track a thrash count
        for specific functions. Disable specific function tracking once the
        thrash count has been hit.

2010-01-07  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Enable JIT in debug mode on win32 after r51141 fixed the crashes.

        * JavaScriptCore.pri:

2010-01-07  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Holger Freyther.

        [Mac] Build fix when FAST_MALLOC_MATCH_VALIDATION=1
        https://bugs.webkit.org/show_bug.cgi?id=33312

        Using of operator += cause compile error on Mac, so it is changed to
        "= static_cast<AllocAlignmentInteger*>(old_ptr) + 1".

        * wtf/FastMalloc.cpp:
        (WTF::TCMallocStats::realloc):

2010-01-07  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Holger Freyther.

        [Qt] Build fix when FAST_MALLOC_MATCH_VALIDATION=1
        https://bugs.webkit.org/show_bug.cgi?id=33312

        Remove pByte (committed in r42344 from #20422), because pByte doesn't
        exist and it is unnecessary.

        * wtf/FastMalloc.cpp:
        (WTF::TCMallocStats::realloc):

2010-01-06  Gavin Barraclough  <barraclough@apple.com>

        QT build fix.

        * runtime/Identifier.cpp:
        (JSC::createIdentifierTableSpecific):

2010-01-06  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix part I.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-01-06  Dan Bernstein  <mitz@apple.com>

        Build fix

        * runtime/Identifier.cpp:
        (JSC::createIdentifierTableSpecificCallback):

2010-01-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=33236
        Remove m_identifierTable pointer from UString

        Currently every string holds a pointer so that during destruction,
        if a string has been used as an identifier, it can remove itself
        from the table.  By instead accessing the identifierTable via a
        thread specific tracking the table associated with the current
        globaldata, we can save the memory cost of this pointer.

        * API/APIShims.h:
        (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
        (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
        (JSC::APICallbackShim::APICallbackShim):
        (JSC::APICallbackShim::~APICallbackShim):

            - change the API shims to track the identifierTable of the current JSGlobalData.

        * API/JSContextRef.cpp:
        (JSContextGroupCreate):

            - update creation of JSGlobalData for API usage to use new create method.
            - fix shim instanciation bug in JSGlobalContextCreateInGroup.

        * JavaScriptCore.exp:
        * runtime/Completion.cpp:
        (JSC::checkSyntax):
        (JSC::evaluate):

            - add asserts to check the identifierTable is being tracked correctly.

        * runtime/Identifier.cpp:
        (JSC::IdentifierTable::~IdentifierTable):
        (JSC::IdentifierTable::add):
        (JSC::Identifier::remove):
        (JSC::Identifier::checkSameIdentifierTable):
        (JSC::createIdentifierTableSpecificCallback):
        (JSC::createIdentifierTableSpecific):
        (JSC::createDefaultDataSpecific):

            - Use currentIdentifierTable() instead of UStringImpl::m_identifierTable.
            - Define methods to access the thread specific identifier tables.

        * runtime/Identifier.h:
        (JSC::ThreadIdentifierTableData::ThreadIdentifierTableData):
        (JSC::defaultIdentifierTable):
        (JSC::setDefaultIdentifierTable):
        (JSC::currentIdentifierTable):
        (JSC::setCurrentIdentifierTable):
        (JSC::resetCurrentIdentifierTable):

            - Declare methods to access the thread specific identifier tables.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::createNonDefault):
        (JSC::JSGlobalData::create):
        (JSC::JSGlobalData::sharedInstance):

            - creation of JSGlobalData objects, other than for API usage, associate themselves with the current thread.

        * runtime/JSGlobalData.h:
        * runtime/UStringImpl.cpp:
        (JSC::UStringImpl::destroy):

            - destroy() method should be using isIdentifier().

        * runtime/UStringImpl.h:
        (JSC::UStringImpl::isIdentifier):
        (JSC::UStringImpl::setIsIdentifier):
        (JSC::UStringImpl::checkConsistency):
        (JSC::UStringImpl::UStringImpl):

            - replace m_identifierTable with a single m_isIdentifier bit.

        * wtf/StringHashFunctions.h:
        (WTF::stringHash):

            - change string hash result from 32-bit to 31-bit, to free a bit in UStringImpl for m_isIdentifier.

2009-12-25 Patrick Gansterer <paroga@paroga.com>
 
        Reviewed by Eric Seidel.

        Buildfix for WinCE + style fixes.
        https://bugs.webkit.org/show_bug.cgi?id=32939

        * jsc.cpp:
        (functionPrint):
        (functionQuit):
        (parseArguments):
        (fillBufferWithContentsOfFile):
 
2010-01-05  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        WinCE buildfix after r52791 (renamed PLATFORM(WINCE) to OS(WINCE)).
        https://bugs.webkit.org/show_bug.cgi?id=33205

        * jit/ExecutableAllocator.h:

2010-01-05  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Added compiler error for unsupported platforms.
        https://bugs.webkit.org/show_bug.cgi?id=33112

        * jit/JITStubs.cpp:

2010-01-05  Gabor Loki  <loki@webkit.org>

        Reviewed by Maciej Stachowiak.

        Follow r52729 in ARMAssembler.
        https://bugs.webkit.org/show_bug.cgi?id=33208

        Use WTF_ARM_ARCH_AT_LEAST instead of ARM_ARCH_VERSION

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::encodeComplexImm): Move tmp declaration to ARMv7
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::):
        (JSC::ARMAssembler::bkpt):

2010-01-05  Maciej Stachowiak  <mjs@apple.com>

        Unreviewed build fix for Gtk+

        Don't use // comments in Platform.h, at least some of them seem to make the version of GCC
        used on the Gtk buildbot unhappy.

        * wtf/Platform.h:

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Fisher.

        Reorganize, document and rename OS() platform macros.
        https://bugs.webkit.org/show_bug.cgi?id=33198

        * wtf/Platform.h: Rename, reorganize and document OS() macros.

        Adapt to name changes. Also fixed a few incorrect OS checks.

        * API/JSContextRef.cpp:
        * assembler/MacroAssemblerARM.cpp:
        (JSC::isVFPPresent):
        * assembler/MacroAssemblerX86Common.h:
        * bytecode/SamplingTool.cpp:
        * config.h:
        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::~RegisterFile):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::grow):
        * jit/ExecutableAllocator.h:
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        * jit/ExecutableAllocatorPosix.cpp:
        * jit/ExecutableAllocatorSymbian.cpp:
        * jit/ExecutableAllocatorWin.cpp:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITStubs.cpp:
        * jsc.cpp:
        (main):
        * parser/Grammar.y:
        * profiler/ProfileNode.cpp:
        (JSC::getCount):
        * runtime/Collector.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlockPtr):
        (JSC::currentThreadStackBase):
        (JSC::getCurrentPlatformThread):
        (JSC::suspendThread):
        (JSC::resumeThread):
        (JSC::getPlatformThreadRegisters):
        (JSC::otherThreadStackPointer):
        * runtime/Collector.h:
        * runtime/DateConstructor.cpp:
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/MarkStack.h:
        (JSC::MarkStack::MarkStackArray::shrinkAllocation):
        * runtime/MarkStackPosix.cpp:
        * runtime/MarkStackSymbian.cpp:
        * runtime/MarkStackWin.cpp:
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncLastIndexOf):
        * runtime/TimeoutChecker.cpp:
        (JSC::getCPUTime):
        * runtime/UString.cpp:
        (JSC::UString::from):
        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/CurrentTime.cpp:
        (WTF::lowResUTCTime):
        * wtf/CurrentTime.h:
        (WTF::getLocalTime):
        * wtf/DateMath.cpp:
        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_ThreadCache::InitModule):
        (WTF::TCMallocStats::):
        * wtf/FastMalloc.h:
        * wtf/MathExtras.h:
        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):
        * wtf/RandomNumberSeed.h:
        (WTF::initializeRandomNumberGenerator):
        * wtf/StringExtras.h:
        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::Unlock):
        (TCMalloc_SlowLock):
        * wtf/TCSystemAlloc.cpp:
        * wtf/ThreadSpecific.h:
        (WTF::::destroy):
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading):
        (WTF::isMainThread):
        * wtf/ThreadingWin.cpp:
        (WTF::wtfThreadEntryPoint):
        (WTF::createThreadInternal):
        * wtf/VMTags.h:
        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::Collator::userDefault):
        * wtf/win/MainThreadWin.cpp:
        (WTF::initializeMainThreadPlatform):

2010-01-04  Gustavo Noronha Silva  <gns@gnome.org>

        Add missing files to the build system - make distcheck build fix.

        * GNUmakefile.am:

2010-01-04  Gavin Barraclough <barraclough@apple.com>

        Reviewed by Sam Weinig, additional coding by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=33163
        Add string hashing functions to WTF.
        Use WTF's string hashing functions from UStringImpl.

        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/UStringImpl.cpp:
        * runtime/UStringImpl.h:
        (JSC::UStringImpl::computeHash):
        * wtf/HashFunctions.h:
        * wtf/StringHashFunctions.h: Added.
        (WTF::stringHash):

2010-01-04  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, attempt to fix ARM bulid.

        * wtf/Platform.h:

2010-01-04  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Geoff Garen.

        Add an 'isIdentifier' to UStringImpl, use this where appropriate
        (where previously 'identifierTable' was being tested).

        * API/JSClassRef.cpp:
        (OpaqueJSClass::~OpaqueJSClass):
        (OpaqueJSClassContextData::OpaqueJSClassContextData):
        * runtime/Identifier.cpp:
        (JSC::Identifier::addSlowCase):
        * runtime/Identifier.h:
        (JSC::Identifier::add):
        * runtime/PropertyNameArray.cpp:
        (JSC::PropertyNameArray::add):
        * runtime/UStringImpl.h:
        (JSC::UStringImpl::isIdentifier):

2010-01-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam "Shimmey Shimmey" Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=33158
        Refactor JSC API entry/exit to use RAII instead of copy/pasting code.
        Make it easier to change set of actions taken when passing across the API boundary.

        * API/APIShims.h: Added.
        (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
        (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
        (JSC::APIEntryShim::APIEntryShim):
        (JSC::APICallbackShim::APICallbackShim):
        (JSC::APICallbackShim::~APICallbackShim):
        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax):
        (JSGarbageCollect):
        (JSReportExtraMemoryCost):
        * API/JSCallbackConstructor.cpp:
        (JSC::constructJSCallback):
        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::call):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::init):
        (JSC::::getOwnPropertySlot):
        (JSC::::put):
        (JSC::::deleteProperty):
        (JSC::::construct):
        (JSC::::hasInstance):
        (JSC::::call):
        (JSC::::getOwnPropertyNames):
        (JSC::::toNumber):
        (JSC::::toString):
        (JSC::::staticValueGetter):
        (JSC::::callbackGetter):
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSObjectMakeFunctionWithCallback):
        (JSObjectMakeConstructor):
        (JSObjectMakeFunction):
        (JSObjectMakeArray):
        (JSObjectMakeDate):
        (JSObjectMakeError):
        (JSObjectMakeRegExp):
        (JSObjectGetPrototype):
        (JSObjectSetPrototype):
        (JSObjectHasProperty):
        (JSObjectGetProperty):
        (JSObjectSetProperty):
        (JSObjectGetPropertyAtIndex):
        (JSObjectSetPropertyAtIndex):
        (JSObjectDeleteProperty):
        (JSObjectCallAsFunction):
        (JSObjectCallAsConstructor):
        (JSObjectCopyPropertyNames):
        (JSPropertyNameArrayRelease):
        (JSPropertyNameAccumulatorAddName):
        * API/JSValueRef.cpp:
        (JSValueGetType):
        (JSValueIsUndefined):
        (JSValueIsNull):
        (JSValueIsBoolean):
        (JSValueIsNumber):
        (JSValueIsString):
        (JSValueIsObject):
        (JSValueIsObjectOfClass):
        (JSValueIsEqual):
        (JSValueIsStrictEqual):
        (JSValueIsInstanceOfConstructor):
        (JSValueMakeUndefined):
        (JSValueMakeNull):
        (JSValueMakeBoolean):
        (JSValueMakeNumber):
        (JSValueMakeString):
        (JSValueToBoolean):
        (JSValueToNumber):
        (JSValueToStringCopy):
        (JSValueToObject):
        (JSValueProtect):
        (JSValueUnprotect):
        * JavaScriptCore.xcodeproj/project.pbxproj:

2010-01-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Ada Chan and Mark Rowe.

        Updated copyright string

        * Info.plist:
        * JavaScriptCore.vcproj/JavaScriptCore.resources/Info.plist:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc:

2010-01-04  Adam Roben  <aroben@apple.com>

        No review, rolling out r52741.
        http://trac.webkit.org/changeset/52741
        https://bugs.webkit.org/show_bug.cgi?id=33056

        * wtf/AlwaysInline.h:

2010-01-04  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Add cacheFlush support for WinCE
        https://bugs.webkit.org/show_bug.cgi?id=33110

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):

2010-01-04  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        Implement NO_RETURN for COMPILER(MSVC).
        https://bugs.webkit.org/show_bug.cgi?id=33056

        * wtf/AlwaysInline.h:

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Simon Hausmann.

        Fix some PLATFORM(*_ENDIAN) uses to CPU()
        https://bugs.webkit.org/show_bug.cgi?id=33148

        * runtime/JSCell.cpp:
        (JSC::):
        * runtime/JSValue.h:
        (JSC::JSValue::):

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Document CPU() macros in comments.
        https://bugs.webkit.org/show_bug.cgi?id=33147

        * wtf/Platform.h:

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Reorganize, document and rename CPU() platform macros.
        https://bugs.webkit.org/show_bug.cgi?id=33145
        ExecutableAllocatorSymbian appears to have buggy ARM version check
        https://bugs.webkit.org/show_bug.cgi?id=33138
        
        * wtf/Platform.h:
        Rename all macros related to detection of particular CPUs or
        classes of CPUs to CPU(), reorganize and document them.

        All remaining changes are adapting to the renames, plus fixing the
        second bug cited above.
        
        * assembler/ARMAssembler.cpp:
        * assembler/ARMAssembler.h:
        * assembler/ARMv7Assembler.h:
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Imm32::Imm32):
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerARM.cpp:
        * assembler/MacroAssemblerARM.h:
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
        * assembler/MacroAssemblerX86.h:
        * assembler/MacroAssemblerX86Common.h:
        * assembler/MacroAssemblerX86_64.h:
        * assembler/X86Assembler.h:
        (JSC::X86Registers::):
        (JSC::X86Assembler::):
        (JSC::X86Assembler::movl_mEAX):
        (JSC::X86Assembler::movl_EAXm):
        (JSC::X86Assembler::repatchLoadPtrToLEA):
        (JSC::X86Assembler::X86InstructionFormatter::memoryModRM):
        * jit/ExecutableAllocator.h:
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        * jit/ExecutableAllocatorPosix.cpp:
        * jit/ExecutableAllocatorSymbian.cpp:
        (JSC::ExecutableAllocator::intializePageSize):
        * jit/JIT.cpp:
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        * jit/JITInlineMethods.h:
        (JSC::JIT::beginUninterruptedSequence):
        (JSC::JIT::restoreArgumentReferenceForTrampoline):
        (JSC::JIT::emitCount):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        * jit/JITStubs.h:
        * runtime/Collector.cpp:
        (JSC::currentThreadStackBase):
        (JSC::getPlatformThreadRegisters):
        (JSC::otherThreadStackPointer):
        * wrec/WREC.h:
        * wrec/WRECGenerator.cpp:
        (JSC::WREC::Generator::generateEnter):
        (JSC::WREC::Generator::generateReturnSuccess):
        (JSC::WREC::Generator::generateReturnFailure):
        * wrec/WRECGenerator.h:
        * wtf/FastMalloc.cpp:
        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::Lock):
        (TCMalloc_SpinLock::Unlock):
        (TCMalloc_SlowLock):
        * wtf/Threading.h:
        * wtf/dtoa.cpp:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateEnter):
        (JSC::Yarr::RegexGenerator::generateReturn):
        * yarr/RegexJIT.h:

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Clean up COMPILER macros and remove unused ones.
        https://bugs.webkit.org/show_bug.cgi?id=33132
        
        Removed values are COMPILER(BORLAND) and COMPILER(CYGWIN) - they were
        not used anywhere.

        * wtf/Platform.h:

2010-01-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric Seidel.

        Update wtf/Platform.h to document the new system for porting macros.
        https://bugs.webkit.org/show_bug.cgi?id=33130

        * wtf/Platform.h:

2009-12-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Maciej Stachowiak.

        PLATFORM(CAIRO) should be defined by WIN_CAIRO define
        https://bugs.webkit.org/show_bug.cgi?id=22250

        * wtf/Platform.h: Define WTF_PLATFORM_CAIRO for GTK port only
        For the WinCairo port WTF_PLATFORM_CAIRO is already defined in config.h

2009-12-28  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Delete ThreadPrivate instance after it is finished.
        https://bugs.webkit.org/show_bug.cgi?id=32614

        * wtf/qt/ThreadingQt.cpp:
        (WTF::ThreadMonitor::instance):
        (WTF::ThreadMonitor::threadFinished):
        (WTF::createThreadInternal):
        (WTF::detachThread):

2009-12-28  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Maciej Stachowiak.

        Cleanup of #define JS_EXPORT.

        * API/JSBase.h:

2009-12-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Barth.

        WinCE buildfix (HWND_MESSAGE isn't supported there)

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

2009-12-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Barth.

        Added a file with WinMain function to link agains in WinCE.

        * os-win32/WinMain.cpp: Added.
        (convertToUtf8):
        (WinMain):

2009-12-24  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed; revert of r52550.

        The change regressed the following LayoutTests for QtWebKit.

        fast/workers/worker-call.html -> crashed
        fast/workers/worker-close.html -> crashed

        * wtf/qt/ThreadingQt.cpp:
        (WTF::waitForThreadCompletion):
        (WTF::detachThread):

2009-12-24  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix memory leak by deleting instance of ThreadPrivate
        in function waitForThreadCompletion(), synchronously, or in
        detachThread(), asynchronously.
        https://bugs.webkit.org/show_bug.cgi?id=32614 

        * wtf/qt/ThreadingQt.cpp:
        (WTF::waitForThreadCompletion):
        (WTF::detachThread):

2009-12-23  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Laszlo Gombos.

        Include stddef.h for ptrdiff_t
        https://bugs.webkit.org/show_bug.cgi?id=32891

        ptrdiff_t is typedef-ed in stddef.h.
        Include stddef.h in jit/ExecutableAllocator.h.

        * jit/ExecutableAllocator.h:

2009-12-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        Buildfix after r47092.

        * wtf/wince/MemoryManager.cpp:
        (WTF::tryFastMalloc):
        (WTF::tryFastZeroedMalloc):
        (WTF::tryFastCalloc):
        (WTF::tryFastRealloc):

2009-12-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::valueAsDate getter support.
        https://bugs.webkit.org/show_bug.cgi?id=32876

        Expose dateToDaysFrom1970().

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/DateMath.cpp:
        (WTF::dateToDaysFrom1970):
        * wtf/DateMath.h:

2009-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Turn off datagrid by default, at least for all platforms Apple ships.
        The datagrid implementation isn't ready for general web use yet.

        * Configurations/FeatureDefines.xcconfig: Turn off datagrid by default.

2009-12-22  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Updates Android's scheduleDispatchFunctionsOnMainThread() to use new
        AndroidThreading class, rather than using JavaSharedClient directly.
        This fixes the current layering violation.
        https://bugs.webkit.org/show_bug.cgi?id=32651

        The pattern is copied from Chromium, which uses the ChromiumThreading
        class. This patch also fixes the style in ChromiumThreading.h.

        * wtf/android/AndroidThreading.h: Added. Declares AndroidThreading.
        * wtf/android/MainThreadAndroid.cpp: Modified
        (WTF::scheduleDispatchFunctionsOnMainThread): Uses AndroidThreading.
        * wtf/chromium/ChromiumThreading.h: Modified. Fixes style.

2009-12-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Fix a couple of problems with UntypedPtrAndBitfield.

        Add a m_leaksPtr to reduce false positives from leaks in debug builds
        (this isn't perfect because we'd like a solution for release builds,
        but this is now at least as good as a PtrAndFlags would be).

        Switch SmallStringsto use a regular string for the base, rather than
        a static one.  UntypedPtrAndBitfield assumes all strings are at least
        8 byte aligned; this migt not be true of static strings.  Shared buffers
        are heap allocated, as are all UStringImpls other than static strings.
        Static strings cannot end up being the owner string of substrings,
        since the only static strings are length 0.

        * runtime/SmallStrings.cpp:
        (JSC::SmallStringsStorage::SmallStringsStorage):
        * runtime/UStringImpl.h:
        (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
        (JSC::UStringImpl::UStringImpl):

2009-12-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        RVCT (__ARMCC_VERSION < 400000) does not provide strcasecmp and strncasecmp
        https://bugs.webkit.org/show_bug.cgi?id=32857

        Add implementation of strcasecmp and strncasecmp for RVCT < 4.0
        because earlier versions of RVCT 4.0 does not provide these functions.

        * wtf/StringExtras.cpp: Added.
        (strcasecmp):
        (strncasecmp):
        * wtf/StringExtras.h:

2009-12-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Define ALWAYS_INLINE and WTF_PRIVATE_INLINE to __forceinline for RVCT
        https://bugs.webkit.org/show_bug.cgi?id=32853

        Use __forceinline forces RVCT to compile a C or C++ function
        inline. The compiler attempts to inline the function, regardless of
        the characteristics of the function.

        * wtf/AlwaysInline.h:
        * wtf/FastMalloc.h:

2009-12-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Prospective GTK build fix: Add UStringImpl.cpp/h to the build.

        * GNUmakefile.am:

2009-12-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build, add UStringImpl.cpp to the build.

        * JavaScriptCore.pri:

2009-12-21  Gavin Barraclough  <barraclough@apple.com>

        Windows Build fix part 5.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2009-12-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix).
        Fix breakage of world introduced in build fix to r52463.

        * runtime/UStringImpl.h:

2009-12-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=32831
        Replace UString::Rep implementation, following introduction of ropes to JSC.

            * Remove redundant overcapacity mechanisms.
            * Reduce memory cost of Rep's.
            * Add an inline storage mechanism akin to that in WebCore's StringImpl.

        ~1% Sunspider progression.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStringsStorage::SmallStringsStorage):
        * runtime/UString.cpp:
        (JSC::initializeUString):
        (JSC::createRep):
        (JSC::UString::createFromUTF8):
        (JSC::UString::createUninitialized):
        (JSC::UString::spliceSubstringsWithSeparators):
        (JSC::UString::replaceRange):
        (JSC::UString::ascii):
        (JSC::UString::operator=):
        (JSC::UString::toStrictUInt32):
        (JSC::equal):
        * runtime/UString.h:
        (JSC::UString::isEmpty):
        (JSC::UString::cost):
        (JSC::makeString):
        * runtime/UStringImpl.cpp: Added.
        (JSC::UStringImpl::baseSharedBuffer):
        (JSC::UStringImpl::sharedBuffer):
        (JSC::UStringImpl::destroy):
        (JSC::UStringImpl::computeHash):
        * runtime/UStringImpl.h: Added.
        (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
        (JSC::UntypedPtrAndBitfield::asPtr):
        (JSC::UntypedPtrAndBitfield::operator&=):
        (JSC::UntypedPtrAndBitfield::operator|=):
        (JSC::UntypedPtrAndBitfield::operator&):
        (JSC::UStringImpl::create):
        (JSC::UStringImpl::createCopying):
        (JSC::UStringImpl::createUninitialized):
        (JSC::UStringImpl::data):
        (JSC::UStringImpl::size):
        (JSC::UStringImpl::cost):
        (JSC::UStringImpl::hash):
        (JSC::UStringImpl::computedHash):
        (JSC::UStringImpl::setHash):
        (JSC::UStringImpl::identifierTable):
        (JSC::UStringImpl::setIdentifierTable):
        (JSC::UStringImpl::ref):
        (JSC::UStringImpl::deref):
        (JSC::UStringImpl::allocChars):
        (JSC::UStringImpl::copyChars):
        (JSC::UStringImpl::computeHash):
        (JSC::UStringImpl::null):
        (JSC::UStringImpl::empty):
        (JSC::UStringImpl::checkConsistency):
        (JSC::UStringImpl::):
        (JSC::UStringImpl::UStringImpl):
        (JSC::UStringImpl::operator new):
        (JSC::UStringImpl::bufferOwnerString):
        (JSC::UStringImpl::bufferOwnership):
        (JSC::UStringImpl::isStatic):

2009-12-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Move some build decisions from Qt build system into source files
        https://bugs.webkit.org/show_bug.cgi?id=31956

        * JavaScriptCore.pri: Compile files unconditionally
        * jit/ExecutableAllocatorPosix.cpp: Guard with PLATFORM(UNIX) && !PLATFORM(SYMBIAN)
        * jit/ExecutableAllocatorWin.cpp: Guard with PLATFORM(WIN_OS)
        * runtime/MarkStackPosix.cpp: Guard with PLATFORM(UNIX) && !PLATFORM(SYMBIAN)
        * runtime/MarkStackSymbian.cpp: Guard with PLATFORM(SYMBIAN)
        * runtime/MarkStackWin.cpp: Guard with PLATFORM(WIN_OS)
        * wtf/Platform.h: Guard ENABLE_JSC_MULTIPLE_THREADS with ENABLE_SINGLE_THREADED for the Qt port
        * wtf/ThreadingNone.cpp: Guard with ENABLE(SINGLE_THREADED)
        * wtf/qt/ThreadingQt.cpp: Guard with !ENABLE(SINGLE_THREADED)

2009-12-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Add createNonCopying method to UString to make replace constructor passed bool,
        to make behaviour more explicit.  Add createFromUTF8 to UString (wrapping method
        on UString::Rep), since other cases of transliteration (e.g.  from ascii) are
        performed in UString constructors.  Add/use setHash & size() accessors on Rep,
        rather than accessing _hash/len directly.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass):
        * API/OpaqueJSString.cpp:
        (OpaqueJSString::ustring):
        * JavaScriptCore.exp:
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        * runtime/Identifier.cpp:
        (JSC::Identifier::equal):
        (JSC::CStringTranslator::translate):
        (JSC::UCharBufferTranslator::translate):
        (JSC::Identifier::addSlowCase):
        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):
        * runtime/JSString.h:
        (JSC::JSString::Rope::Fiber::refAndGetLength):
        (JSC::JSString::Rope::append):
        * runtime/StringBuilder.h:
        (JSC::StringBuilder::release):
        * runtime/StringConstructor.cpp:
        (JSC::stringFromCharCodeSlowCase):
        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferencesSlow):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncLink):
        * runtime/UString.cpp:
        (JSC::UString::UString):
        (JSC::UString::createNonCopying):
        (JSC::UString::createFromUTF8):
        * runtime/UString.h:
        (JSC::UString::Rep::setHash):
        (JSC::UString::~UString):
        (JSC::makeString):

2009-12-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich and Gavin Barraclough.
        
        Changed Register constructors to assignment operators, to streamline
        moving values into registers. (In theory, there's no difference between
        the two, since the constructor should just inline away, but there seems
        to be a big difference in the addled mind of the GCC optimizer.)

        In the interpreter, this is a 3.5% SunSpider speedup and a 1K-2K
        reduction in stack usage per privateExecute stack frame.

        * interpreter/CallFrame.h:
        (JSC::ExecState::setCalleeArguments):
        (JSC::ExecState::setCallerFrame):
        (JSC::ExecState::setScopeChain):
        (JSC::ExecState::init):
        (JSC::ExecState::setArgumentCount):
        (JSC::ExecState::setCallee):
        (JSC::ExecState::setCodeBlock): Added a little bit of casting so these
        functions could use the new Register assignment operators.

        * interpreter/Register.h:
        (JSC::Register::withInt):
        (JSC::Register::Register):
        (JSC::Register::operator=): Swapped in assignment operators for constructors.

2009-12-18  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=32713
        [Qt] make wtf/Assertions.h compile in winscw compiler.

        Add string arg before ellipsis to help winscw compiler resolve variadic
        macro definitions in wtf/Assertions.h. 

        * wtf/Assertions.h:

2009-12-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben.

        Fixed intermittent failure seen on Windows buildbot, and in other JSC
        API clients.
        
        Added a WeakGCPtr class and changed OpaqueJSClass::cachedPrototype to
        use it, to avoid vending a stale object as a prototype.

        * API/JSClassRef.cpp:
        (OpaqueJSClassContextData::OpaqueJSClassContextData):
        (OpaqueJSClass::prototype):
        * API/JSClassRef.h: Use WeakGCPtr.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/WeakGCPtr.h: Added.
        (JSC::WeakGCPtr::WeakGCPtr):
        (JSC::WeakGCPtr::get):
        (JSC::WeakGCPtr::clear):
        (JSC::WeakGCPtr::operator*):
        (JSC::WeakGCPtr::operator->):
        (JSC::WeakGCPtr::operator!):
        (JSC::WeakGCPtr::operator bool):
        (JSC::WeakGCPtr::operator UnspecifiedBoolType):
        (JSC::WeakGCPtr::assign):
        (JSC::::operator):
        (JSC::operator==):
        (JSC::operator!=):
        (JSC::static_pointer_cast):
        (JSC::const_pointer_cast):
        (JSC::getPtr): Added WeakGCPtr to the project.

2009-12-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

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

        * JavaScriptCore.exp:
            - Remove exports for UString::append
        * JavaScriptCore.xcodeproj/project.pbxproj:
            - Make StringBuilder a private header (was project).

2009-12-18  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] GRefPtr does not take a reference when assigned a raw pointer
        https://bugs.webkit.org/show_bug.cgi?id=32709

        Ensure that when assigning a raw pointer to a GRefPtr, the reference
        count is incremented. Also remove the GRefPtr conversion overload as
        GRefPtr types have necessarily incompatible reference counting.

        * wtf/gtk/GRefPtr.h:
        (WTF::GRefPtr::operator=):

2009-12-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Clean up the qmake build system to distinguish between trunk builds and package builds

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

        * pcre/pcre.pri: Use standalone_package instead of QTDIR_build

2009-12-18  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Compile warning from line 29 of GRefPtr.cpp
        https://bugs.webkit.org/show_bug.cgi?id=32703

        Fix memory leak and compiler warning in GRefPtr GHashTable template
        specialization.

        * wtf/gtk/GRefPtr.cpp:
        (WTF::refGPtr):

2009-12-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add BUILDING_ON_SNOW_LEOPARD and TARGETING_SNOW_LEOPARD #defines.

        * wtf/Platform.h:

2009-12-17  Adam Roben  <aroben@apple.com>

        Sync JavaScriptCore.vcproj with JavaScriptCore.xcodeproj and the
        source tree

        Fixes <http://webkit.org/b/32665>.

        Reviewed by Ada Chan.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Moved
        around files and filters so that the structure matches
        JavaScriptCore.xcodeproj and the source tree. A few headers that were
        previously omitted have been added, as well as JSZombie.{cpp,h}.

2009-12-17  Adam Roben  <aroben@apple.com>

        Remove HeavyProfile and TreeProfile completely

        These were mostly removed in r42808, but the empty files were left in
        place.

        Fixes <http://webkit.org/b/32664>.

        Reviewed by John Sullivan.

        * Android.mk:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCoreSources.bkl:
        Removed HeavyProfile/TreeProfile source files.

        * profiler/HeavyProfile.cpp: Removed.
        * profiler/HeavyProfile.h: Removed.
        * profiler/TreeProfile.cpp: Removed.
        * profiler/TreeProfile.h: Removed.

2009-12-17  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
        https://bugs.webkit.org/show_bug.cgi?id=21599

        Implement GRefPtr, a smart pointer for reference counted GObject types.

        * GNUmakefile.am:
        * wtf/gtk/GOwnPtr.cpp:
        (WTF::GDir):
        * wtf/gtk/GRefPtr.h: Added.
        (WTF::):
        (WTF::GRefPtr::GRefPtr):
        (WTF::GRefPtr::~GRefPtr):
        (WTF::GRefPtr::clear):
        (WTF::GRefPtr::get):
        (WTF::GRefPtr::operator*):
        (WTF::GRefPtr::operator->):
        (WTF::GRefPtr::operator!):
        (WTF::GRefPtr::operator UnspecifiedBoolType):
        (WTF::GRefPtr::hashTableDeletedValue):
        (WTF::::operator):
        (WTF::::swap):
        (WTF::swap):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::static_pointer_cast):
        (WTF::const_pointer_cast):
        (WTF::getPtr):
        (WTF::adoptGRef):
        (WTF::refGPtr):
        (WTF::derefGPtr):

2009-12-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Build fixes for make distcheck.

        * GNUmakefile.am:

2009-12-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed <rdar://problem/7355025> Interpreter::privateExecute macro generates
        bloated code
        
        This patch cuts Interpreter stack use by about a third.

        * bytecode/Opcode.h: Changed Opcode to const void* to work with the
        const static initiliazation we want to do in Interpreter::privateExecute.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter): Moved hashtable initialization here to
        avoid polluting Interpreter::privateExecute's stack, and changed it from a
        series of add() calls to one add() call in a loop, to cut down on code size.

        (JSC::Interpreter::privateExecute): Changed a series of label computations
        to a copy of a compile-time constant array to cut down on code size.

2009-12-16  Mark Rowe  <mrowe@apple.com>

        Build fix.  Disable debug variants of WebKit frameworks.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-12-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam "r=me" Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=32498
        <rdar://problem/7471495>
        REGRESSION(r51978-r52039): AJAX "Mark This Forum Read" function no longer
        works
        
        Fixed a tyop.

        * runtime/Operations.h:
        (JSC::jsAdd): Use the '&&' operator, not the ',' operator.

2009-12-15  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the windows build: don't export this inlined function.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2009-12-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Inlined JSCell's operator new.
        
        3.7% speedup on bench-allocate-nonretained.js.

        * JavaScriptCore.exp:
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        (JSC::JSCell::operator new):

2009-12-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed the number heap, replacing it with a one-item free list for
        numbers, taking advantage of the fact that two number cells fit inside
        the space for one regular cell, and number cells don't require destruction.
        
        SunSpider says 1.6% faster in JSVALUE32 mode (the only mode that
        heap-allocates numbers).
        
        SunSpider says 1.1% faster in JSVALUE32_64 mode. v8 says 0.8% faster
        in JSVALUE32_64 mode. 10% speedup on bench-alloc-nonretained.js. 6%
        speedup on bench-alloc-retained.js.
        
        There's a lot of formulaic change in this patch, but not much substance.

        * JavaScriptCore.exp:
        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions):
        * runtime/Collector.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlock):
        (JSC::Heap::freeBlockPtr):
        (JSC::Heap::freeBlocks):
        (JSC::Heap::recordExtraCost):
        (JSC::Heap::allocate):
        (JSC::Heap::resizeBlocks):
        (JSC::Heap::growBlocks):
        (JSC::Heap::shrinkBlocks):
        (JSC::Heap::markConservatively):
        (JSC::Heap::clearMarkBits):
        (JSC::Heap::markedCells):
        (JSC::Heap::sweep):
        (JSC::Heap::markRoots):
        (JSC::Heap::objectCount):
        (JSC::Heap::addToStatistics):
        (JSC::Heap::statistics):
        (JSC::Heap::isBusy):
        (JSC::Heap::reset):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::primaryHeapBegin):
        (JSC::Heap::primaryHeapEnd):
        * runtime/Collector.h:
        (JSC::): Removed all code pertaining to the number heap, and changed all
        heap template functions and classes to non-template functions and classes.

        (JSC::Heap::allocateNumber): A new optimization to replace the number
        heap: allocate half-sized number cells in pairs, returning the first
        cell and caching the second cell for the next allocation.

        * runtime/CollectorHeapIterator.h:
        (JSC::LiveObjectIterator::LiveObjectIterator):
        (JSC::LiveObjectIterator::operator++):
        (JSC::DeadObjectIterator::DeadObjectIterator):
        (JSC::DeadObjectIterator::operator++):
        (JSC::ObjectIterator::ObjectIterator):
        (JSC::ObjectIterator::operator++):
        * runtime/JSCell.h:
        (JSC::JSCell::isNumber): Removed all code pertaining to the number heap,
        and changed all heap template functions and classes to non-template functions
        and classes.

2009-12-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WeakGCMap class
        https://bugs.webkit.org/show_bug.cgi?id=32547

        Inherits WeakGCMap from FastAllocBase because it is instantiated by
        'new' at: WebCore/dom/Document.cpp:512.

        * runtime/WeakGCMap.h:

2009-12-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for dtoa's P5Node struct
        https://bugs.webkit.org/show_bug.cgi?id=32544

        Inherits P5Node struct from Noncopyable because it is instantiated by
        'new' at wtf/dtoa.cpp:588 and don't need to be copyable.

        * wtf/dtoa.cpp:

2009-12-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=32524
        REGRESSION(52084): fast/dom/prototypes.html failing two CSS tests

        * wtf/StdLibExtras.h:
        (WTF::bitCount): The original patch put the parentheses in the wrong
        place, completely changing the calculation and making it almost always
        wrong. Moved the parentheses around the '+' operation, like the original
        compiler warning suggested.

2009-12-14  Gabor Loki  <loki@inf.u-szeged.hu>

        Unreviewed trivial buildfix.

        Fix crosses initialization of usedPrimaryBlocks for JSValue32

        * runtime/Collector.cpp:
        (JSC::Heap::markConservatively):

2009-12-14  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Simon Hausmann.

        GCC 4.3.x warning fixed. Suggested parantheses added.
        warning: ../../../JavaScriptCore/wtf/StdLibExtras.h:77: warning: suggest parentheses around + or - in operand of &

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

2009-12-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Changed GC from mark-sweep to mark-allocate.
        
        Added WeakGCMap to keep WebCore blissfully ignorant about objects that
        have become garbage but haven't run their destructors yet.
        
        1% SunSpider speedup.
        7.6% v8 speedup (37% splay speedup).
        17% speedup on bench-alloc-nonretained.js.
        18% speedup on bench-alloc-retained.js.

        * API/JSBase.cpp:
        (JSGarbageCollect):
        * API/JSContextRef.cpp:
        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj: Updated for renames and new
        files.

        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions): Updated to use the Collector
        iterator abstraction.

        * jsc.cpp:
        (functionGC): Updated for rename.

        * runtime/Collector.cpp: Slightly reduced the number of allocations per
        collection, so that small workloads only allocate on collector block,
        rather than two.

        (JSC::Heap::Heap): Updated to use the new allocateBlock function.

        (JSC::Heap::destroy): Updated to use the new freeBlocks function.

        (JSC::Heap::allocateBlock): New function to initialize a block when
        allocating it.

        (JSC::Heap::freeBlock): Consolidated the responsibility for running
        destructors into this function.

        (JSC::Heap::freeBlocks): Updated to use freeBlock.

        (JSC::Heap::recordExtraCost): Sweep the heap in this reporting function,
        so that allocation, which is more common, doesn't have to check extraCost.

        (JSC::Heap::heapAllocate): Run destructors right before recycling a
        garbage cell. This has better cache utilization than a separate sweep phase.

        (JSC::Heap::resizeBlocks):
        (JSC::Heap::growBlocks):
        (JSC::Heap::shrinkBlocks): New set of functions for managing the size of
        the heap, now that the heap doesn't maintain any information about its
        size.

        (JSC::isPointerAligned):
        (JSC::isHalfCellAligned):
        (JSC::isPossibleCell):
        (JSC::isCellAligned):
        (JSC::Heap::markConservatively): Cleaned up this code a bit.

        (JSC::Heap::clearMarkBits):
        (JSC::Heap::markedCells): Some helper functions for examining the the mark
        bitmap.

        (JSC::Heap::sweep): Simplified this function by using a DeadObjectIterator.

        (JSC::Heap::markRoots): Reordered some operations for clarity.

        (JSC::Heap::objectCount):
        (JSC::Heap::addToStatistics):
        (JSC::Heap::statistics): Rewrote these functions to calculate an object
        count on demand, since the heap doesn't maintain this information by 
        itself.

        (JSC::Heap::reset): New function for resetting the heap once we've
        exhausted heap space.

        (JSC::Heap::collectAllGarbage): This function matches the old collect()
        behavior, but it's now an uncommon function used only by API.

        * runtime/Collector.h:
        (JSC::CollectorBitmap::count):
        (JSC::CollectorBitmap::isEmpty): Added some helper functions for managing
        the collector mark bitmap.

        (JSC::Heap::reportExtraMemoryCost): Changed reporting from cell equivalents
        to bytes, so it's easier to understand.
        
        * runtime/CollectorHeapIterator.h:
        (JSC::CollectorHeapIterator::CollectorHeapIterator):
        (JSC::CollectorHeapIterator::operator!=):
        (JSC::CollectorHeapIterator::operator*):
        (JSC::CollectorHeapIterator::advance):
        (JSC::::LiveObjectIterator):
        (JSC::::operator):
        (JSC::::DeadObjectIterator):
        (JSC::::ObjectIterator): New iterators for encapsulating details about
        heap layout, and what's live and dead on the heap.

        * runtime/JSArray.cpp:
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::increaseVectorLength): Delay reporting extra cost until
        we're fully constructed, so the heap mark phase won't visit us in an
        invalid state.

        * runtime/JSCell.h:
        (JSC::JSCell::):
        (JSC::JSCell::createDummyStructure):
        (JSC::JSCell::JSCell):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h: Added a dummy cell to simplify allocation logic.

        * runtime/JSString.h:
        (JSC::jsSubstring): Don't report extra cost for substrings, since they
        share a buffer that's already reported extra cost.

        * runtime/Tracing.d:
        * runtime/Tracing.h: Changed these dtrace hooks not to report object
        counts, since they're no longer cheap to compute.

        * runtime/UString.h: Updated for renames.

        * runtime/WeakGCMap.h: Added.
        (JSC::WeakGCMap::isEmpty):
        (JSC::WeakGCMap::uncheckedGet):
        (JSC::WeakGCMap::uncheckedBegin):
        (JSC::WeakGCMap::uncheckedEnd):
        (JSC::::get):
        (JSC::::take):
        (JSC::::set):
        (JSC::::uncheckedRemove): Mentioned above.

        * wtf/StdLibExtras.h:
        (WTF::bitCount): Added a bit population count function, so the heap can
        count live objects to fulfill statistics questions.

The very last cell in the block is not allocated -- should not be marked.

2009-12-13  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Export some new symbols.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2009-12-13  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Removed some old exports.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2009-12-13  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Use unsigned instead of uint32_t to avoid dependencies.

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

2009-12-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (speculative Windows build fix).

        * runtime/JSGlobalObjectFunctions.cpp:

2009-12-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=32496
        Switch remaining cases of string construction to use StringBuilder.
        Builds strings using a vector rather than using string append / addition.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::paramString):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::decode):
        (JSC::globalFuncEscape):
        (JSC::globalFuncUnescape):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::indent):
        * runtime/JSString.h:
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::Lexer::lexString):
        * runtime/NumberPrototype.cpp:
        (JSC::integerPartNoExp):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToPrecision):
        * runtime/Operations.h:
        (JSC::jsString):
        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferencesSlow):
        (JSC::substituteBackreferences):
        (JSC::stringProtoFuncConcat):

2009-12-08  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        Add code to allow toggling ATSUI/Core Text rendering at runtime in ComplexTextController.
        https://bugs.webkit.org/show_bug.cgi?id=31802

        The goal here is to allow for a zero runtime hit for ports that decide to select
        the API at compile time.
        When both USE(ATSUI) and USE(CORE_TEXT) are true, the API is toggled
        at runtime.  Core Text is used for OS Versions >= 10.6.

        * wtf/Platform.h: #define USE_CORE_TEXT and USE_ATSUI on Chrome/Mac.

2009-12-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Unify codegen for forward and backward variants of branches
        https://bugs.webkit.org/show_bug.cgi?id=32463

        * jit/JIT.h:
        (JSC::JIT::emit_op_loop): Implemented in terms of forward variant.
        (JSC::JIT::emit_op_loop_if_true): ditto
        (JSC::JIT::emitSlow_op_loop_if_true): ditto
        (JSC::JIT::emit_op_loop_if_false): ditto
        (JSC::JIT::emitSlow_op_loop_if_false): ditto
        (JSC::JIT::emit_op_loop_if_less): ditto
        (JSC::JIT::emitSlow_op_loop_if_less): ditto
        * jit/JITOpcodes.cpp:

2009-12-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Allow WTFs concept of the main thread to differ from pthreads when necessary.

        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading):
        (WTF::isMainThread):
        * wtf/mac/MainThreadMac.mm:
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):

2009-12-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=32454
        Refactor construction of simple strings to avoid string concatenation.

        Building strings through concatenation has a memory and performance cost -
        a memory cost since we must over-allocate the buffer to leave space to append
        into, and performance in that the string may still require reallocation (and
        thus copying during construction).  Instead move the full construction to
        within a single function call (makeString), so that the arguments' lengths
        can be calculated and an appropriate sized buffer allocated before copying
        any characters.

        ~No performance change (~2% progression on date tests).

        * bytecode/CodeBlock.cpp:
        (JSC::escapeQuotes):
        (JSC::valueToSourceString):
        (JSC::constantName):
        (JSC::idName):
        (JSC::CodeBlock::registerName):
        (JSC::regexpToSourceString):
        (JSC::regexpName):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::substitute):
        * profiler/Profiler.cpp:
        (JSC::Profiler::createCallIdentifier):
        * runtime/DateConstructor.cpp:
        (JSC::callDate):
        * runtime/DateConversion.cpp:
        (JSC::formatDate):
        (JSC::formatDateUTCVariant):
        (JSC::formatTime):
        (JSC::formatTimeUTC):
        * runtime/DateConversion.h:
        (JSC::):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToString):
        (JSC::dateProtoFuncToUTCString):
        (JSC::dateProtoFuncToDateString):
        (JSC::dateProtoFuncToTimeString):
        (JSC::dateProtoFuncToGMTString):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createUndefinedVariableError):
        (JSC::createErrorMessage):
        (JSC::createInvalidParamError):
        * runtime/FunctionPrototype.cpp:
        (JSC::insertSemicolonIfNeeded):
        (JSC::functionProtoFuncToString):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToString):
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::match):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoFuncToString):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncBig):
        (JSC::stringProtoFuncSmall):
        (JSC::stringProtoFuncBlink):
        (JSC::stringProtoFuncBold):
        (JSC::stringProtoFuncFixed):
        (JSC::stringProtoFuncItalics):
        (JSC::stringProtoFuncStrike):
        (JSC::stringProtoFuncSub):
        (JSC::stringProtoFuncSup):
        (JSC::stringProtoFuncFontcolor):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncAnchor):
        * runtime/UString.h:
        (JSC::):
        (JSC::makeString):

2009-12-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=32400
        Switch remaining cases of string addition to use ropes.

        Re-landing r51975 - added toPrimitiveString method,
        performs toPrimitive then subsequent toString operations.

        ~1% progression on Sunspidey.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSString.h:
        (JSC::JSString::JSString):
        (JSC::JSString::appendStringInConstruct):
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsString):
        (JSC::jsAdd):

2009-12-11  Adam Roben  <aroben@apple.com>

        Windows build fix

        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added
        $(WebKitOutputDir)/include/private to the include path.

2009-12-11  Adam Roben  <aroben@apple.com>

        Move QuartzCorePresent.h to include/private

        This fixes other projects that use wtf/Platform.h

        Rubber-stamped by Steve Falkenburg.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Let VS do its thang.
        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Write
        QuartzCorePresent.h to $(WebKitOutputDir)/include/private.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
        Added $(WebKitOutputDir)/include/private to the include path.

2009-12-11  Adam Roben  <aroben@apple.com>

        Fix clean builds and everything rebuilding on every build

        Reviewed by Sam Weinig.

        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Don't
        write out QuartzCorePresent.h if it exists but is older than
        QuartzCore.h. Also, create the directory we write QuartzCorePresent.h
        into first.

2009-12-11  Adam Roben  <aroben@apple.com>

        Windows build fix for systems with spaces in their paths

        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Quote some paths.

2009-12-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Add check for presence of QuartzCore headers
        https://bugs.webkit.org/show_bug.cgi?id=31856
        
        The script now checks for the presence of QuartzCore.h. If present
        it will turn on ACCELERATED_COMPOSITING and 3D_RENDERING to enable
        HW compositing on Windows. The script writes QuartzCorePresent.h to
        the build directory which has a define telling whether QuartzCore is 
        present.

        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
        * wtf/Platform.h:

2009-12-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix a problem that JSC::gregorianDateTimeToMS() returns a negative
        value for a huge year value.
        https://bugs.webkit.org/show_bug.cgi?id=32304

        * wtf/DateMath.cpp:
        (WTF::dateToDaysFrom1970): Renamed from dateToDayInYear, and changed the return type to double.
        (WTF::calculateDSTOffset): Follow the dateToDaysFrom1970() change.
        (WTF::timeClip): Use maxECMAScriptTime.
        (JSC::gregorianDateTimeToMS): Follow the dateToDaysFrom1970() change.

2009-12-10  Adam Barth  <abarth@webkit.org>

        No review, rolling out r51975.
        http://trac.webkit.org/changeset/51975

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSString.h:
        (JSC::JSString::JSString):
        (JSC::JSString::appendStringInConstruct):
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsString):
        (JSC::jsAdd):

2009-12-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Incorrect caching of prototype lookup with dictionary base
        https://bugs.webkit.org/show_bug.cgi?id=32402

        Make sure we don't add cached prototype lookup to the proto_list
        lookup chain if the top level object is a dictionary.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):

2009-12-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=32400
        Switch remaining cases of string addition to use ropes.

        ~1% progression on Sunspidey.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSString.h:
        (JSC::JSString::JSString):
        (JSC::JSString::appendStringInConstruct):
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsString):
        (JSC::jsAdd):

2009-12-10  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Geoffrey Garen.

        Remove JSObject::getPropertyAttributes() and all usage of it.
        https://bugs.webkit.org/show_bug.cgi?id=31933

        getOwnPropertyDescriptor() should be used instead.

        * JavaScriptCore.exp:
        * JavaScriptCore.order:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::getOwnPropertyDescriptor):
        * debugger/DebuggerActivation.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::propertyIsEnumerable):
        * runtime/JSObject.h:
        * runtime/JSVariableObject.cpp:
        * runtime/JSVariableObject.h:

2009-12-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt & Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=32367
        Add support for short Ropes (up to 3 entries) inline within JSString.
        (rather than externally allocating an object to hold the rope).
        Switch jsAdd of (JSString* + JSString*) to now make use of Ropes.

        ~1% progression on Sunspidey.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):
        (JSC::JSString::toBoolean):
        (JSC::JSString::getStringPropertyDescriptor):
        * runtime/JSString.h:
        (JSC::JSString::Rope::Fiber::deref):
        (JSC::JSString::Rope::Fiber::ref):
        (JSC::JSString::Rope::Fiber::refAndGetLength):
        (JSC::JSString::Rope::append):
        (JSC::JSString::JSString):
        (JSC::JSString::~JSString):
        (JSC::JSString::value):
        (JSC::JSString::tryGetValue):
        (JSC::JSString::length):
        (JSC::JSString::canGetIndex):
        (JSC::JSString::appendStringInConstruct):
        (JSC::JSString::appendValueInConstructAndIncrementLength):
        (JSC::JSString::isRope):
        (JSC::JSString::string):
        (JSC::JSString::ropeLength):
        (JSC::JSString::getStringPropertySlot):
        * runtime/Operations.h:
        (JSC::jsString):
        (JSC::jsAdd):
        (JSC::resolveBase):

2009-12-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoffrey Garen.

        Fix three more things found by compiling with clang++.
        
        * runtime/Structure.h:
        (JSC::StructureTransitionTable::reifySingleTransition):
        Add the 'std' qualifier to the call to make_pair.

        * wtf/DateMath.cpp:
        (WTF::initializeDates):
        Incrementing a bool is deprecated according to the C++ specification.
        
        * wtf/PtrAndFlags.h:
        (WTF::PtrAndFlags::PtrAndFlags):
        Name lookup should not be done in dependent bases, so explicitly qualify the call to set.

2009-12-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Google reader gets stuck in the "Loading..." state and does not complete
        https://bugs.webkit.org/show_bug.cgi?id=32256
        <rdar://problem/7456388>

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_jless): Fix some backward branches.

2009-12-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=32228
        Make destruction of ropes non-recursive to prevent stack exhaustion.
        Also, pass a UString& into initializeFiber rather than a Ustring::Rep*,
        since the Rep is not being ref counted this could result in usage of a
        Rep with refcount zero (where the Rep comes from a temporary UString
        returned from a function).

        * runtime/JSString.cpp:
        (JSC::JSString::Rope::destructNonRecursive):
        (JSC::JSString::Rope::~Rope):
        * runtime/JSString.h:
        (JSC::JSString::Rope::initializeFiber):
        * runtime/Operations.h:
        (JSC::concatenateStrings):

2009-12-09  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

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

        Update to r51457. ASSERTs changed to COMPILE_ASSERTs.
        The speedup is 25%.

        * runtime/JSGlobalData.cpp:
        (JSC::VPtrSet::VPtrSet):

2009-12-09  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Updates Android Makefiles with latest additions.
        https://bugs.webkit.org/show_bug.cgi?id=32278

        * Android.mk: Modified.
        * Android.v8.wtf.mk: Modified.

2009-12-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix a bug found while trying to compile JavaScriptCore with clang++.

        * yarr/RegexPattern.h:
        (JSC::Yarr::PatternTerm::PatternTerm): Don't self assign here.  Use false instead.

2009-12-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Attempt to fix the Windows build.
        
        * wtf/FastMalloc.h:

2009-12-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix some things found while trying to compile JavaScriptCore with clang++.

        * wtf/FastMalloc.h:
        Add correct exception specifications for the allocation/deallocation operators.
        
        * wtf/Vector.h:
        * wtf/VectorTraits.h:
        Fix a bunch of struct/class mismatches.

2009-12-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        move code generation portions of Nodes.cpp to bytecompiler directory
        https://bugs.webkit.org/show_bug.cgi?id=32284

        * bytecompiler/NodesCodegen.cpp: Copied from parser/Nodes.cpp. Removed parts that
        are not about codegen.
        * parser/Nodes.cpp: Removed everything that is about codegen.

        Update build systems:
        
        * Android.mk:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * JavaScriptCoreSources.bkl:

2009-12-08  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Mac plugins support.
        
        https://bugs.webkit.org/show_bug.cgi?id=32236

        * wtf/Platform.h:

2009-12-08  Dmitry Titov  <dimich@chromium.org>

        Rubber-stamped by David Levin.

        Revert and reopen "Add asserts to RefCounted to make sure ref/deref happens on the right thread."
        It may have caused massive increase of reported leaks on the bots.
        https://bugs.webkit.org/show_bug.cgi?id=31639

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        * wtf/RefCounted.h:
        (WTF::RefCountedBase::ref):
        (WTF::RefCountedBase::hasOneRef):
        (WTF::RefCountedBase::refCount):
        (WTF::RefCountedBase::derefBase):
        * wtf/ThreadVerifier.h: Removed.

2009-12-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Darin Adler.

        Make WebKit build correctly on FreeBSD, IA64, and Alpha.
        Based on work by Petr Salinger <Petr.Salinger@seznam.cz>,
        and Colin Watson <cjwatson@ubuntu.com>.

        * wtf/Platform.h:

2009-12-08  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Add asserts to RefCounted to make sure ref/deref happens on the right thread.
        https://bugs.webkit.org/show_bug.cgi?id=31639

        * runtime/Structure.cpp:
        (JSC::Structure::Structure): Disable thread verification on this class since it uses addressOfCount().
        * wtf/RefCounted.h:
        (WTF::RefCountedBase::ref): Add ASSERT.
        (WTF::RefCountedBase::hasOneRef): Ditto.
        (WTF::RefCountedBase::refCount): Ditto.
        (WTF::RefCountedBase::derefBase): Ditto.
        (WTF::RefCountedBase::disableThreadVerification): delegate to ThreadVerifier method.
        * wtf/ThreadVerifier.h: Added.
        (WTF::ThreadVerifier::ThreadVerifier): New Debug-only class to verify that ref/deref of RefCounted is done on the same thread.
        (WTF::ThreadVerifier::activate): Activates checks. Called when ref count becomes above 2.
        (WTF::ThreadVerifier::deactivate): Deactivates checks. Called when ref count drops below 2.
        (WTF::ThreadVerifier::disableThreadVerification): used on objects that should not be checked (StringImpl etc)
        (WTF::ThreadVerifier::verifyThread):
        * GNUmakefile.am: Add ThreadVerifier.h to the build file.
        * JavaScriptCore.gypi: Ditto.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.

2009-12-08  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        [Android] Adds Makefiles for Android port.
        https://bugs.webkit.org/show_bug.cgi?id=31325

        * Android.mk: Added.
        * Android.v8.wtf.mk: Added.

2009-12-07  Dmitry Titov  <dimich@chromium.org>

        Rubber-stamped by Darin Adler.

        Remove ENABLE_SHARED_SCRIPT flags
        https://bugs.webkit.org/show_bug.cgi?id=32245
        This patch was obtained by "git revert" command and then un-reverting of ChangeLog files.

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

2009-12-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Windows build fixage part I).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2009-12-05  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=32184
        Handle out-of-memory conditions with JSC Ropes with a JS exception, rather than crashing.
        Switch from using fastMalloc to tryFastMalloc, pass an ExecState to record the exception on.

        * API/JSCallbackObjectFunctions.h:
        (JSC::::toString):
        * API/JSValueRef.cpp:
        (JSValueIsStrictEqual):
        * JavaScriptCore.exp:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEqualityOp):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::functionName):
        (JSC::DebuggerCallFrame::calculatedFunctionName):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::addParentForConsoleStart):
        * profiler/Profiler.cpp:
        (JSC::Profiler::willExecute):
        (JSC::Profiler::didExecute):
        (JSC::Profiler::createCallIdentifier):
        (JSC::createCallIdentifierFromFunctionImp):
        * profiler/Profiler.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::name):
        (JSC::InternalFunction::displayName):
        (JSC::InternalFunction::calculatedDisplayName):
        * runtime/InternalFunction.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getString):
        * runtime/JSCell.h:
        (JSC::JSValue::getString):
        * runtime/JSONObject.cpp:
        (JSC::gap):
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::appendStringifiedValue):
        * runtime/JSObject.cpp:
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::get):
        * runtime/JSString.cpp:
        (JSC::JSString::Rope::~Rope):
        (JSC::JSString::resolveRope):
        (JSC::JSString::getPrimitiveNumber):
        (JSC::JSString::toNumber):
        (JSC::JSString::toString):
        (JSC::JSString::toThisString):
        (JSC::JSString::getStringPropertyDescriptor):
        * runtime/JSString.h:
        (JSC::JSString::Rope::createOrNull):
        (JSC::JSString::Rope::operator new):
        (JSC::JSString::value):
        (JSC::JSString::tryGetValue):
        (JSC::JSString::getIndex):
        (JSC::JSString::getStringPropertySlot):
        (JSC::JSValue::toString):
        * runtime/JSValue.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/Operations.cpp:
        (JSC::JSValue::strictEqualSlowCase):
        * runtime/Operations.h:
        (JSC::JSValue::equalSlowCaseInline):
        (JSC::JSValue::strictEqualSlowCaseInline):
        (JSC::JSValue::strictEqual):
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::jsAdd):
        (JSC::concatenateStrings):
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::equalTo):
        * runtime/PropertyDescriptor.h:
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):

2009-12-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Holger Freyther.

        Turn on (SVG) Filters support, by default.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        * Configurations/FeatureDefines.xcconfig: Enable FILTERS build flag.

2009-12-07  Steve Falkenburg  <sfalken@apple.com>

        Build fix. Be flexible about which version of ICU is used on Windows.

        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Add optional xcopy commands to copy ICU 4.2.

2009-12-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        op_loop_if_less JIT codegen is broken for 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=32221

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_false): Fix codegen in this version - test was backwards.

2009-12-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Object.create fails if properties on the descriptor are getters
        https://bugs.webkit.org/show_bug.cgi?id=32219

        Correctly initialise the PropertySlots with the descriptor object.

        * runtime/ObjectConstructor.cpp:
        (JSC::toPropertyDescriptor):

2009-12-06  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        Actually tested 64-bit *and* 32-bit build this time.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_false):

2009-12-06  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        Really really fix 64-bit build for prior patch (actually tested this time).

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_false):
        (JSC::JIT::emitSlow_op_loop_if_false):

2009-12-06  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        Really fix 64-bit build for prior patch.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_jless):

2009-12-06  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        Fix 64-bit build for prior patch.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitSlow_op_loop_if_less):

2009-12-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        conway benchmark spends half it's time in op_less (jump fusion fails)
        https://bugs.webkit.org/show_bug.cgi?id=32190

        <1% speedup on SunSpider and V8
        2x speedup on "conway" benchmark
        
        Two optimizations:
        1) Improve codegen for logical operators &&, || and ! in a condition context
        
        When generating code for combinations of &&, || and !, in a
        condition context (i.e. in an if statement or loop condition), we
        used to produce a value, and then separately jump based on its
        truthiness. Now we pass the false and true targets in, and let the
        logical operators generate jumps directly. This helps in four
        ways:

        a) Individual clauses of a short-circuit logical operator can now
        jump directly to the then or else clause of an if statement (or to
        the top or exit of a loop) instead of jumping to a jump.
        
        b) It used to be that jump fusion with the condition of the first
        clause of a logical operator was inhibited, because the register
        was ref'd to be used later, in the actual condition jump; this no
        longer happens since a jump straight to the final target is
        generated directly.

        c) It used to be that jump fusion with the condition of the second
        clause of a logical operator was inhibited, because there was a
        jump target right after the second clause and before the actual
        condition jump. But now it's no longer necessary for the first
        clause to jump there so jump fusion is not blocked.

        d) We avoid generating excess mov statements in some cases.
        
        As a concrete example this source:
        
        if (!((x < q && y < q) || (t < q && z < q))) {
            // ...
        }
        
        Used to generate this bytecode:
        
        [  34] less              r1, r-15, r-19
        [  38] jfalse            r1, 7(->45)
        [  41] less              r1, r-16, r-19
        [  45] jtrue             r1, 14(->59)
        [  48] less              r1, r-17, r-19
        [  52] jfalse            r1, 7(->59)
        [  55] less              r1, r-18, r-19
        [  59] jtrue             r1, 17(->76)
        
        And now generates this bytecode (also taking advantage of the second optimization below):
        
        [  34] jnless            r-15, r-19, 8(->42)
        [  38] jless             r-16, r-19, 26(->64)
        [  42] jnless            r-17, r-19, 8(->50)
        [  46] jless             r-18, r-19, 18(->64)
        
        Note the jump fusion and the fact that there's less jump
        indirection - three of the four jumps go straight to the target
        clause instead of indirecting through another jump.
        
        2) Implement jless opcode to take advantage of the above, since we'll now often generate
        a less followed by a jtrue where fusion is not forbidden.
       
        * parser/Nodes.h:
        (JSC::ExpressionNode::hasConditionContextCodegen): Helper function to determine
        whether a node supports special conditional codegen. Return false as this is the default.
        (JSC::ExpressionNode::emitBytecodeInConditionContext): Assert not reached - only really
        defined for nodes that do have conditional codegen.
        (JSC::UnaryOpNode::expr): Add const version.
        (JSC::LogicalNotNode::hasConditionContextCodegen): Returne true only if subexpression
        supports it.
        (JSC::LogicalOpNode::hasConditionContextCodegen): Return true.
        * parser/Nodes.cpp:
        (JSC::LogicalNotNode::emitBytecodeInConditionContext): Implemented - just swap
        the true and false targets for the child node.
        (JSC::LogicalOpNode::emitBytecodeInConditionContext): Implemented - handle jumps
        directly, improving codegen quality. Also handles further nested conditional codegen.
        (JSC::ConditionalNode::emitBytecode): Use condition context codegen when available.
        (JSC::IfNode::emitBytecode): ditto
        (JSC::IfElseNode::emitBytecode): ditto
        (JSC::DoWhileNode::emitBytecode): ditto
        (JSC::WhileNode::emitBytecode): ditto
        (JSC::ForNode::emitBytecode): ditto

        * bytecode/Opcode.h: 
        - Added loop_if_false opcode - needed now that falsey jumps can be backwards.
        - Added jless opcode to take advantage of new fusion opportunities.
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump): Handle above.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitJumpIfTrue): Add peephole for less + jtrue ==> jless.
        (JSC::BytecodeGenerator::emitJumpIfFalse): Add handling of backwrds falsey jumps.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitNodeInConditionContext): Wrapper to handle tracking of
        overly deep expressions etc.
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute): Implement the two new opcodes (loop_if_false, jless).
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass): Implement JIT support for the two new opcodes.
        (JSC::JIT::privateCompileSlowCases): ditto
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jless):
        (JSC::JIT::emitSlow_op_jless): ditto
        (JSC::JIT::emitBinaryDoubleOp): ditto
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitSlow_op_loop_if_less): ditto
        (JSC::JIT::emit_op_loop_if_false): ditto
        (JSC::JIT::emitSlow_op_loop_if_false): ditto
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:
        (JSC::):

2009-12-04  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Darin Adler.

        JavaScript delete operator should return false for string properties
        https://bugs.webkit.org/show_bug.cgi?id=32012

        * runtime/StringObject.cpp:
        (JSC::StringObject::deleteProperty):

2009-12-03  Drew Wilson  <atwilson@chromium.org>

        Rolled back r51633 because it causes a perf regression in Chromium.

        * wtf/Platform.h:

2009-12-03  Gavin Barraclough  <barraclough@apple.com>

        Try and fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:  Export a symbol that should be exported.

2009-12-03  Mark Rowe  <mrowe@apple.com>

        Try and fix the Mac build.

        * JavaScriptCore.exp:  Export a symbol that should be exported.

2009-12-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        REGRESSION(4.0.3-48777): Crash in JSC::ExecState::propertyNames() (Debug-only?)
        https://bugs.webkit.org/show_bug.cgi?id=32133

        Work around odd GCC-ism and correct the scopechain for use by
        calls made while a cachedcall is active on the callstack.

        * interpreter/CachedCall.h:
        (JSC::CachedCall::newCallFrame):
        * runtime/JSArray.cpp:
        (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):

2009-12-03  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver "Brraaaaiiiinnnnnzzzzzzzz" Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=32136
        Add a rope representation to JSString.  Presently JSString always holds its data in UString form.
        Instead, allow the result of a string concatenation to be represented in a tree form - with a
        variable sized, reference-counted rope node retaining a set of UString::Reps (or other rope nopes).

        Strings must still currently be resolved down to a flat UString representation before being used,
        but by holding the string in a rope representation during construction we can avoid copying data
        until we know the final size of the string.

        ~2% progression on SunSpider (~25% on date-format-xparb, ~20% on string-validate-input).

        * JavaScriptCore.exp:

            - Update exports.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

            - Make use of new JSString::length() method to avoid prematurely resolving ropes.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):

            - Switch the string length trampoline to read the length directly from JSString::m_length,
              rather than from the JSString's UString::Rep's 'len' property.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

            - Modify op_add such that addition of two strings, where either or both strings are already
              in rope representation, produces a rope as a result.

        * runtime/JSString.cpp:
        (JSC::JSString::Rope::~Rope):
        (JSC::copyChars):
        (JSC::JSString::resolveRope):
        (JSC::JSString::getPrimitiveNumber):
        (JSC::JSString::toBoolean):
        (JSC::JSString::toNumber):
        (JSC::JSString::toString):
        (JSC::JSString::toThisString):
        (JSC::JSString::getStringPropertyDescriptor):
        * runtime/JSString.h:
        (JSC::JSString::Rope::Fiber::Fiber):
        (JSC::JSString::Rope::Fiber::destroy):
        (JSC::JSString::Rope::Fiber::isRope):
        (JSC::JSString::Rope::Fiber::rope):
        (JSC::JSString::Rope::Fiber::string):
        (JSC::JSString::Rope::create):
        (JSC::JSString::Rope::initializeFiber):
        (JSC::JSString::Rope::ropeLength):
        (JSC::JSString::Rope::stringLength):
        (JSC::JSString::Rope::fibers):
        (JSC::JSString::Rope::Rope):
        (JSC::JSString::Rope::operator new):
        (JSC::JSString::JSString):
        (JSC::JSString::value):
        (JSC::JSString::length):
        (JSC::JSString::isRope):
        (JSC::JSString::rope):
        (JSC::JSString::string):
        (JSC::JSString::canGetIndex):
        (JSC::jsSingleCharacterSubstring):
        (JSC::JSString::getIndex):
        (JSC::jsSubstring):
        (JSC::JSString::getStringPropertySlot):

            - Add rope form.

        * runtime/Operations.h:
        (JSC::jsAdd):
        (JSC::concatenateStrings):

            - Update string concatenation, and addition of ropes, to produce ropes.

        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertyNames):

            - Make use of new JSString::length() method to avoid prematurely resolving ropes.

2009-11-23  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        Switch Chrome/Mac to use Core Text APIs rather than ATSUI APIs.
        https://bugs.webkit.org/show_bug.cgi?id=31802

        No test since this is already covered by existing pixel tests.

        * wtf/Platform.h: #define USE_CORE_TEXT for Chrome/Mac.

2009-12-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Add files missed in prior patch.

        * runtime/JSZombie.cpp:
        (JSC::):
        (JSC::JSZombie::leakedZombieStructure):
        * runtime/JSZombie.h: Added.
        (JSC::JSZombie::JSZombie):
        (JSC::JSZombie::isZombie):
        (JSC::JSZombie::classInfo):
        (JSC::JSZombie::isGetterSetter):
        (JSC::JSZombie::isAPIValueWrapper):
        (JSC::JSZombie::isPropertyNameIterator):
        (JSC::JSZombie::getCallData):
        (JSC::JSZombie::getConstructData):
        (JSC::JSZombie::getUInt32):
        (JSC::JSZombie::toPrimitive):
        (JSC::JSZombie::getPrimitiveNumber):
        (JSC::JSZombie::toBoolean):
        (JSC::JSZombie::toNumber):
        (JSC::JSZombie::toString):
        (JSC::JSZombie::toObject):
        (JSC::JSZombie::markChildren):
        (JSC::JSZombie::put):
        (JSC::JSZombie::deleteProperty):
        (JSC::JSZombie::toThisObject):
        (JSC::JSZombie::toThisString):
        (JSC::JSZombie::toThisJSString):
        (JSC::JSZombie::getJSNumber):
        (JSC::JSZombie::getOwnPropertySlot):

2009-12-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Add zombies to JSC
        https://bugs.webkit.org/show_bug.cgi?id=32103

        Add a compile time flag to make the JSC collector replace "unreachable"
        objects with zombie objects.  The zombie object is a JSCell subclass that
        ASSERTs on any attempt to use the JSCell methods.  In addition there are
        a number of additional assertions in bottleneck code to catch zombie usage
        as quickly as possible.

        Grrr. Argh. Brains.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * interpreter/Register.h:
        (JSC::Register::Register):
        * runtime/ArgList.h:
        (JSC::MarkedArgumentBuffer::append):
        (JSC::ArgList::ArgList):
        * runtime/Collector.cpp:
        (JSC::Heap::destroy):
        (JSC::Heap::sweep):
        * runtime/Collector.h:
        * runtime/JSCell.h:
        (JSC::JSCell::isZombie):
        (JSC::JSValue::isZombie):
        * runtime/JSValue.h:
        (JSC::JSValue::decode):
        (JSC::JSValue::JSValue):
        * wtf/Platform.h:

2009-12-01  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Adler.

        Added variants of find/contains/add that allow a foreign key type to be used.
        This will allow AtomicString-keyed maps to be queried by C string without
        having to create a temporary AtomicString (see HTTPHeaderMap.)
        The code for this is adapted from the equivalent in HashSet.h.

        * wtf/HashMap.h:
        (WTF::HashMap::find):
        (WTF::HashMap::contains):
        (WTF::HashMap::add):
        * wtf/HashSet.h: Changed "method" to "function member" in a comment.

2009-12-01  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Revert 51551 because it broke GTK+.

        * wtf/Platform.h:

2009-11-30  Gavin Barraclough  <barraclough@apple.com>

        Windows Build fix.  Reviewed by NOBODY.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2009-11-24  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 31859 - Make world selection for JSC IsolatedWorlds automagical.

        WebCore presently has to explicitly specify the world before entering into JSC,
        which is a little fragile (particularly since property access via a
        getter/setter might invoke execution). Instead derive the current world from
        the lexical global object.
        
        Remove the temporary duct tape of willExecute/didExecute virtual hooks on the JSGlobalData::ClientData - these are no longer necessary.

        * API/JSBase.cpp:
        (JSEvaluateScript):
        * API/JSObjectRef.cpp:
        (JSObjectCallAsFunction):
        * JavaScriptCore.exp:
        * runtime/JSGlobalData.cpp:
        * runtime/JSGlobalData.h:

2009-11-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove obsolete PLATFORM(KDE) code
        https://bugs.webkit.org/show_bug.cgi?id=31958

        KDE is now using unpatched QtWebKit.

        * parser/Lexer.cpp: Remove obsolete KDE_USE_FINAL guard
        * wtf/Platform.h: Remove PLATFORM(KDE) definition and code 
        section that is guarded with it.

2009-11-30  Jan-Arve Sæther  <jan-arve.saether@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with win32-icc

        The Intel compiler does not support the __has_trivial_constructor type
        trait.  The Intel Compiler can report itself as _MSC_VER >= 1400. The
        reason for that is that the Intel Compiler depends on the Microsoft
        Platform SDK, and in order to try to be "fully" MS compatible it will
        "pretend" to be the same MS compiler as was shipped with the MS PSDK.
        (Thus, compiling with win32-icc with VC8 SDK will make the source code
        "think" the compiler at hand supports this type trait).

        * wtf/TypeTraits.h:

2009-11-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Mac build has JIT disabled
        https://bugs.webkit.org/show_bug.cgi?id=31828

        * wtf/Platform.h: Enable JIT for Qt Mac builds

2009-11-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Apply workaround for the limitation of VirtualFree with MEM_RELEASE to all ports running on Windows
        https://bugs.webkit.org/show_bug.cgi?id=31943

        * runtime/MarkStack.h:
        (JSC::MarkStack::MarkStackArray::shrinkAllocation):

2009-11-28  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

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

        Seems a typo. We don't need ~270k memory to determine the vptrs.

        * runtime/JSGlobalData.cpp:
        (JSC::VPtrSet::VPtrSet):

2009-11-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed. 

        Move GOwnPtr* from wtf to wtf/gtk
        https://bugs.webkit.org/show_bug.cgi?id=31793

        Build fix for chromium after r51423.
        Exclude gtk directory from chromium build.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2009-11-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Incorrect behaviour of jneq_null in the interpreter
        https://bugs.webkit.org/show_bug.cgi?id=31901

        Correct the logic of jneq_null.  This is already covered by existing tests.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2009-11-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Oliver Hunt.

        Move GOwnPtr* from wtf to wtf/gtk
        https://bugs.webkit.org/show_bug.cgi?id=31793

        * GNUmakefile.am: Change the path for GOwnPtr.*.
        * JavaScriptCore.gyp/JavaScriptCore.gyp: Remove
          GOwnPtr.cpp from the exclude list.
        * JavaScriptCore.gypi: Change the path for GOwnPtr.*.
        * wscript: Remove GOwnPtr.cpp from the exclude list.
        * wtf/GOwnPtr.cpp: Removed.
        * wtf/GOwnPtr.h: Removed.
        * wtf/Threading.h: Change the path for GOwnPtr.h.
        * wtf/gtk/GOwnPtr.cpp: Copied from JavaScriptCore/wtf/GOwnPtr.cpp.
        * wtf/gtk/GOwnPtr.h: Copied from JavaScriptCore/wtf/GOwnPtr.h.
        * wtf/unicode/glib/UnicodeGLib.h: Change the path for GOwnPtr.h.

2009-11-24  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Eric Seidel.

        Add ENABLE_SHARED_SCRIPT feature define and flag for build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=31444

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

2009-11-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Add ability to enable ACCELERATED_COMPOSITING on Windows (currently disabled)
        https://bugs.webkit.org/show_bug.cgi?id=27314

        * wtf/Platform.h:

2009-11-24  Jason Smith  <dark.panda@gmail.com>

        Reviewed by Alexey Proskuryakov.

        RegExp#exec's returned Array-like object behaves differently from
        regular Arrays
        https://bugs.webkit.org/show_bug.cgi?id=31689

        * JavaScriptCore/runtime/RegExpConstructor.cpp: ensure that undefined
        values are added to the returned RegExpMatchesArray

2009-11-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        JSON.stringify performance on undefined is very poor
        https://bugs.webkit.org/show_bug.cgi?id=31839

        Switch from a UString to a Vector<UChar> when building
        the JSON string, allowing us to safely remove the substr-copy
        we otherwise did when unwinding an undefined property.

        Also turns out to be a ~5% speedup on stringification.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::StringBuilder::append):
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::Holder::appendNextProperty):

2009-11-24  Mark Rowe  <mrowe@apple.com>

        Fix production builds where the source tree may be read-only.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-11-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Include "config.h" to meet Coding Style Guidelines
        https://bugs.webkit.org/show_bug.cgi?id=31792

        * wtf/unicode/UTF8.cpp:
        * wtf/unicode/glib/UnicodeGLib.cpp:
        * wtf/unicode/wince/UnicodeWince.cpp:

2009-11-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Streamlined some Math functions where we expect or know the result not
        to be representable as an int.
        
        SunSpider says 0.6% faster.

        * runtime/JSNumberCell.h:
        (JSC::JSValue::JSValue):
        * runtime/JSValue.h:
        (JSC::JSValue::):
        (JSC::jsDoubleNumber):
        (JSC::JSValue::JSValue): Added a function for making a numeric JSValue
        and skipping the "can I encode this as an int?" check, avoiding the
        overhead of int <-> double roundtripping and double <-> double comparison
        and branching.

        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncACos):
        (JSC::mathProtoFuncASin):
        (JSC::mathProtoFuncATan):
        (JSC::mathProtoFuncATan2):
        (JSC::mathProtoFuncCos):
        (JSC::mathProtoFuncExp):
        (JSC::mathProtoFuncLog):
        (JSC::mathProtoFuncRandom):
        (JSC::mathProtoFuncSin):
        (JSC::mathProtoFuncSqrt):
        (JSC::mathProtoFuncTan): For these functions, which we expect or know
        to produce results not representable as ints, call jsDoubleNumber instead
        of jsNumber.

2009-11-23  Mark Rowe  <mrowe@apple.com>

        Unreviewed. Unbreak the regression tests after r51329.

        * API/JSBase.cpp:
        (JSEvaluateScript): Null-check clientData before dereferencing it.
        * API/JSObjectRef.cpp:
        (JSObjectCallAsFunction): Ditto.

2009-11-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Part 1/3 of <rdar://problem/7377477> REGRESSION: Many web pages fail to render after interesting script runs in isolated world

        Some clients of the JavaScriptCore API expect to be able to make callbacks over the JSC API,
        and for this to automagically cause execution to take place in the world associated with the
        global object associated with the ExecState (JSContextRef) passed.  However this is not how
        things work - the world must be explicitly set within WebCore.

        Making this work just for API calls to evaluate & call will be a far from perfect solution,
        since direct (non-API) use of JSC still relies on WebCore setting the current world correctly.
        A better solution would be to make this all work automagically all throughout WebCore, but this
        will require more refactoring.

        Since the API is in JSC but worlds only exist in WebCore, add callbacks on the JSGlobalData::ClientData
        to allow it to update the current world on entry/exit via the JSC API.  This is temporary duck
        tape, and should be removed once the current world no longer needs to be explicitly tracked.

        * API/JSBase.cpp:
        (JSEvaluateScript):
        * API/JSObjectRef.cpp:
        (JSObjectCallAsFunction):
        * JavaScriptCore.exp:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::ClientData::beginningExecution):
        (JSC::JSGlobalData::ClientData::completedExecution):
        * runtime/JSGlobalData.h:

2009-11-23  Steve Block  <steveblock@google.com>

        Reviewed by Dmitry Titov.

        Adds MainThreadAndroid.cpp with Android-specific WTF threading functions.
        https://bugs.webkit.org/show_bug.cgi?id=31807

        * wtf/android: Added.
        * wtf/android/MainThreadAndroid.cpp: Added.
        (WTF::timeoutFired):
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):

2009-11-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=31748
        Make WebSocketHandleCFNet respect proxy auto-configuration files via CFProxySupport

        * JavaScriptCore.exp: Export callOnMainThreadAndWait.

2009-11-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Symbian] Fix lastIndexOf() for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=31773

        Symbian soft floating point library has problems with operators
        comparing NaN to numbers. Without a workaround lastIndexOf() 
        function does not work.

        Patch developed by David Leong.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncLastIndexOf):Add an extra test 
        to check for NaN for Symbian.

2009-11-23  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Android port lacks implementation of atomicIncrement and atomicDecrement.
        https://bugs.webkit.org/show_bug.cgi?id=31715

        * wtf/Threading.h: Modified.
        (WTF::atomicIncrement): Added Android implementation.
        (WTF::atomicDecrement): Added Android implementation.

2009-11-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Sort source lists and remove obsolete comments 
        from the build system.

        * JavaScriptCore.pri:

2009-11-21  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt][Mac] Turn on multiple JavaScript threads for QtWebkit on Mac
        https://bugs.webkit.org/show_bug.cgi?id=31753

        * wtf/Platform.h:

2009-11-19  Steve Block  <steveblock@google.com>

        Android port lacks configuration in Platform.h and config.h.
        https://bugs.webkit.org/show_bug.cgi?id=31671

        * wtf/Platform.h: Modified. Added Android-specific configuration.

2009-11-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=31690
        Make SocketStreamHandleCFNet work on Windows

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/MainThread.cpp:
        (WTF::FunctionWithContext::FunctionWithContext):
        (WTF::dispatchFunctionsFromMainThread):
        (WTF::callOnMainThreadAndWait):
        * wtf/MainThread.h:
        Re-add callOnMainThreadAndWait(), which was removed in bug 23926.

2009-11-19  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        isMainThread() on Chromium (Mac and Linux) is so slow it timeouts LayoutTests..
        https://bugs.webkit.org/show_bug.cgi?id=31693

        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading): grab and use the pthread_t of the main thread instead of ThreadIdentifier.
        (WTF::isMainThread): Ditto.

2009-11-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Remove HAVE(STRING_H) guard from JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=31668

        * config.h:
        * runtime/UString.cpp:

2009-11-19  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dmitry Titov.

        Fixing a bug in MessageQueue::removeIf() that leads to an
        assertion failure.

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

        * wtf/MessageQueue.h:
        (WTF::MessageQueue::removeIf):

2009-11-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Remove HAVE(FLOAT_H) guard
        https://bugs.webkit.org/show_bug.cgi?id=31661

        JavaScriptCore has a dependency on float.h, there is
        no need to guard float.h.

        * runtime/DatePrototype.cpp: Remove include directive 
        for float.h as it is included in MathExtras.h already.
        * runtime/Operations.cpp: Ditto.
        * runtime/UString.cpp: Ditto.
        * wtf/dtoa.cpp: Ditto.
        * wtf/MathExtras.h: Remove HAVE(FLOAT_H) guard.
        * wtf/Platform.h: Ditto.

2009-11-19  Thiago Macieira <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Build fix for 32-bit Sparc machines: these machines are big-endian.

        * wtf/Platform.h:

2009-11-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove support for Qt v4.3 or older versions
        https://bugs.webkit.org/show_bug.cgi?id=29469

        * JavaScriptCore.pro:
        * jsc.pro:
        * wtf/unicode/qt4/UnicodeQt4.h:

2009-11-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Move UString::from(double) implementation to new
        WTF::doubleToStringInJavaScriptFormat(), and expose it because WebCore
        code will use it.
        https://bugs.webkit.org/show_bug.cgi?id=31330

        - Introduce new function createRep(const char*, unsigned) and
          UString::UString(const char*, unsigned) to reduce 2 calls to strlen().
        - Fix a bug that dtoa() doesn't update *rve if the input value is NaN
          or Infinity.

        No new tests because this doesn't change the behavior.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/UString.cpp:
        (JSC::createRep):
        (JSC::UString::UString):
        (JSC::UString::from): Move the code to doubleToStringInJavaScriptFormat().
        * runtime/UString.h:
        * wtf/dtoa.cpp:
        (WTF::dtoa): Fix a bug about rve.
        (WTF::append): A helper for doubleToStringInJavaScriptFormat().
        (WTF::doubleToStringInJavaScriptFormat): Move the code from UString::from(double).
        * wtf/dtoa.h:

2009-11-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove WTF_USE_JAVASCRIPTCORE_BINDINGS as it is no longer used
        https://bugs.webkit.org/show_bug.cgi?id=31643

        * JavaScriptCore.pro:

2009-11-18  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Remove Chromium's unnecessary dependency on wtf's tcmalloc files.

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

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2009-11-18  Thiago Macieira <thiago.macieira@nokia.com>

        Reviewed by Gavin Barraclough.

        [Qt] Implement symbol hiding for JSC's JIT functions.

        These functions are implemented directly in assembly, so they need the
        proper directives to enable/disable visibility. On ELF systems, it's
        .hidden, whereas on Mach-O systems (Mac) it's .private_extern. On
        Windows, it's not necessary since you have to explicitly export. I
        also implemented the AIX idiom, though it's unlikely anyone will
        implement AIX/POWER JIT.
        https://bugs.webkit.org/show_bug.cgi?id=30864

        * jit/JITStubs.cpp:

2009-11-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        Interpreter may do an out of range access when throwing an exception in the profiler.
        https://bugs.webkit.org/show_bug.cgi?id=31635

        Add bounds check.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):

2009-11-18  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Fix the clobber list of cacheFlush for ARM and Thumb2 on Linux
        https://bugs.webkit.org/show_bug.cgi?id=31631

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):

2009-11-18  Harald Fernengel  <harald.fernengel@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix detection of linux-g++

        Never use "linux-g++*" to check for linux-g++, since this will break embedded
        builds which use linux-arm-g++ and friends. Use 'linux*-g++*' to check for any
        g++ on linux mkspec.

        * JavaScriptCore.pri:

2009-11-17  Jon Honeycutt  <jhoneycutt@apple.com>

        Add JSContextRefPrivate.h to list of copied files.

        Reviewed by Mark Rowe.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:

2009-11-17  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Adam Barth.

        [GTK] Style cleanup for GOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=31506

        Remove forward declaration in GOwnPtr and do some style cleanup.

        * wtf/GOwnPtr.cpp:
        * wtf/GOwnPtr.h:
        (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):

2009-11-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Incorrect use of JavaScriptCore API in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=31577

        Add assertions to the 'toJS' functions to catch mistakes like
        this early.  Restructure existing code which blindly passed potentially
        null values to toJS when forwarding exceptions so that a null check is
        performed first.

        * API/APICast.h:
        (toJS):
        (toJSForGC):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertySlot):
        (JSC::::put):
        (JSC::::deleteProperty):
        (JSC::::construct):
        (JSC::::hasInstance):
        (JSC::::call):
        (JSC::::toNumber):
        (JSC::::toString):
        (JSC::::staticValueGetter):
        (JSC::::callbackGetter):
        * API/tests/testapi.c: Fix errors in the API tester.
        (MyObject_getProperty):
        (MyObject_convertToType):
        (EvilExceptionObject_convertToType):

2009-11-16  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

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

        Minor fixes for JSVALUE32_64: branchConvertDoubleToInt32
        failed on a CortexA8 CPU, but not on a simulator; and
        JITCall.cpp modifications was somehow not committed to mainline.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::fmrs_r):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::branchConvertDoubleToInt32):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):

2009-11-16  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon Hausmann.

        Fix Qt build on Windows CE 6.

        * JavaScriptCore.pri: Add missing include path.
        * wtf/Platform.h: Include ce_time.h for Windows CE 6.

2009-11-13  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

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

        Adding optimization support for mode JSVALUE32_64
        on ARM systems.

        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::emit_op_put_by_id):

2009-11-14  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

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

        Adding JSVALUE32_64 support for ARM (but not turning it
        on by default). All optimizations must be disabled, since
        this patch is only the first of a series of patches.

        During the work, a lot of x86 specific code revealed and
        made platform independent.
        See revisions: 50531 50541 50593 50594 50595

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::):
        (JSC::ARMAssembler::fdivd_r):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::lshift32):
        (JSC::MacroAssemblerARM::neg32):
        (JSC::MacroAssemblerARM::rshift32):
        (JSC::MacroAssemblerARM::branchOr32):
        (JSC::MacroAssemblerARM::set8):
        (JSC::MacroAssemblerARM::setTest8):
        (JSC::MacroAssemblerARM::loadDouble):
        (JSC::MacroAssemblerARM::divDouble):
        (JSC::MacroAssemblerARM::convertInt32ToDouble):
        (JSC::MacroAssemblerARM::zeroDouble):
        * jit/JIT.cpp:
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITStubs.cpp:
        * wtf/StdLibExtras.h:

2009-11-13  Dominik Röttsches  <dominik.roettsches@access-company.com>

        Reviewed by Eric Seidel.

        Unify TextBoundaries implementations by only relying on WTF Unicode abstractions
        https://bugs.webkit.org/show_bug.cgi?id=31468

        Adding isAlphanumeric abstraction, required
        by TextBoundaries.cpp.

        * wtf/unicode/glib/UnicodeGLib.h:
        (WTF::Unicode::isAlphanumeric):
        * wtf/unicode/icu/UnicodeIcu.h:
        (WTF::Unicode::isAlphanumeric):

2009-11-13  Norbert Leser  <norbert.leser&nokia.com>

        Reviewed by Eric Seidel.

        Added macros for USERINCLUDE paths within symbian blocks
        to guarantee inclusion of respective header files from local path
        first (to avoid clashes with same names of header files in system include path).

        * JavaScriptCore.pri:

2009-11-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        JSValueProtect and JSValueUnprotect don't protect API wrapper values
        https://bugs.webkit.org/show_bug.cgi?id=31485

        Make JSValueProtect/Unprotect use a new 'toJS' function, 'toJSForGC' that
        does not attempt to to strip out API wrapper objects.

        * API/APICast.h:
        (toJSForGC):
        * API/JSValueRef.cpp:
        (JSValueProtect):
        (JSValueUnprotect):
        * API/tests/testapi.c:
        (makeGlobalNumberValue):
        (main):

2009-11-13  İsmail Dönmez  <ismail@namtrac.org>

        Reviewed by Antti Koivisto.

        Fix typo, ce_time.cpp should be ce_time.c

        * JavaScriptCore.pri:

2009-11-12  Steve VanDeBogart  <vandebo@chromium.org>

        Reviewed by Adam Barth.

        Calculate the time offset only if we were able to parse
        the date string. This saves an IPC in Chromium for
        invalid date strings.
        https://bugs.webkit.org/show_bug.cgi?id=31416

        * wtf/DateMath.cpp:
        (WTF::parseDateFromNullTerminatedCharacters):
        (JSC::parseDateFromNullTerminatedCharacters):

2009-11-12  Oliver Hunt  <oliver@apple.com>

        Rollout r50896 until i can work out why it causes failures.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitReturn):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * parser/Nodes.cpp:
        (JSC::EvalNode::emitBytecode):

2009-11-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Stephanie Lewis.

        Remove LIBRARY directive from def file to fix Debug_All target.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2009-11-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Holger Freyther.

        Revert r50204, since it makes DRT crash on 32 bits release builds
        for GTK+.

        * wtf/FastMalloc.h:

2009-11-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Start unifying entry logic for function and eval code.

        Eval now uses a ret instruction to end execution, and sets up
        a callframe more in line with what we do for function entry.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitReturn):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * parser/Nodes.cpp:
        (JSC::EvalNode::emitBytecode):

2009-11-12  Richard Moe Gustavsen  <richard.gustavsen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Disable pthread_setname_np.

        This allows Qt builds on Mac from 10.6 to run on earlier version
        where this symbol is not present.
        https://bugs.webkit.org/show_bug.cgi?id=31403

        * wtf/Platform.h:

2009-11-12  Thiago Macieira <thiago.macieira@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix linking on Linux 32-bit.

        It was missing the ".text" directive at the top of the file,
        indicating that code would follow. Without it, the assembler created
        "NOTYPE" symbols, which would result in linker errors.
        https://bugs.webkit.org/show_bug.cgi?id=30863

        * jit/JITStubs.cpp:

2009-11-11  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Alexey Proskuryakov.

        Refactor multiple JavaScriptCore threads
        https://bugs.webkit.org/show_bug.cgi?id=31328

        Remove the id field from the PlatformThread structure 
        as it is not used.

        * runtime/Collector.cpp:
        (JSC::getCurrentPlatformThread):
        (JSC::suspendThread):
        (JSC::resumeThread):
        (JSC::getPlatformThreadRegisters):

2009-11-10  Geoffrey Garen  <ggaren@apple.com>

        Linux build fix: Added an #include for UINT_MAX.

        * runtime/WeakRandom.h:

2009-11-10  Geoffrey Garen  <ggaren@apple.com>

        JavaScriptGlue build fix: Marked a file 'private' instead of 'project'.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-11-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin "avGni arBalroguch" Barraclough.

        Faster Math.random, based on GameRand.
        
        SunSpider says 1.4% faster.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj: Added the header to the project.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h: Use an object to track random number generation
        state, initialized to the current time.

        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        (JSC::mathProtoFuncRandom): Use the new hotness.

        * runtime/WeakRandom.h: Added.
        (JSC::WeakRandom::WeakRandom):
        (JSC::WeakRandom::get):
        (JSC::WeakRandom::advance): The new hotness.

2009-11-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Imported the v8 DST cache.
        
        SunSpider says 1.5% faster.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::resetDateCache): Reset the DST cache when resetting
        other date data.

        * runtime/JSGlobalData.h:
        (JSC::DSTOffsetCache::DSTOffsetCache):
        (JSC::DSTOffsetCache::reset): Added a struct for the DST cache.

        * wtf/DateMath.cpp:
        (WTF::calculateDSTOffsetSimple):
        (WTF::calculateDSTOffset):
        (WTF::parseDateFromNullTerminatedCharacters):
        (JSC::getDSTOffset):
        (JSC::gregorianDateTimeToMS):
        (JSC::msToGregorianDateTime):
        (JSC::parseDateFromNullTerminatedCharacters):
        * wtf/DateMath.h: The imported code for probing and updating the cache.

2009-11-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed an edge case that could cause the engine not to notice a timezone
        change.
        
        No test because this case would require manual intervention to change
        the timezone during the test.
        
        SunSpider reports no change.

        * runtime/DateInstanceCache.h:
        (JSC::DateInstanceCache::DateInstanceCache):
        (JSC::DateInstanceCache::reset): Added a helper function for resetting
        this cache. Also, shrank the cache, since we'll be resetting it often.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::resetDateCache): Include resetting the DateInstanceCache
        in resetting Date data. (Otherwise, a cache hit could bypass a necessary
        timezone update check.)

2009-11-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Some manual inlining and constant propogation in Date code.
        
        SunSpider reports a 0.4% speedup on date-*, no overall speedup. Shark
        says some previously evident stalls are now gone.

        * runtime/DateConstructor.cpp:
        (JSC::callDate):
        * runtime/DateConversion.cpp:
        (JSC::formatTime):
        (JSC::formatTimeUTC): Split formatTime into UTC and non-UTC variants.

        * runtime/DateConversion.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::calculateGregorianDateTime):
        (JSC::DateInstance::calculateGregorianDateTimeUTC):
        * runtime/DateInstance.h:
        (JSC::DateInstance::gregorianDateTime):
        (JSC::DateInstance::gregorianDateTimeUTC): Split gregorianDateTime into
        a UTC and non-UTC variant, and split each variant into a fast inline
        case and a slow out-of-line case.

        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        (JSC::dateProtoFuncToString):
        (JSC::dateProtoFuncToUTCString):
        (JSC::dateProtoFuncToISOString):
        (JSC::dateProtoFuncToDateString):
        (JSC::dateProtoFuncToTimeString):
        (JSC::dateProtoFuncGetFullYear):
        (JSC::dateProtoFuncGetUTCFullYear):
        (JSC::dateProtoFuncToGMTString):
        (JSC::dateProtoFuncGetMonth):
        (JSC::dateProtoFuncGetUTCMonth):
        (JSC::dateProtoFuncGetDate):
        (JSC::dateProtoFuncGetUTCDate):
        (JSC::dateProtoFuncGetDay):
        (JSC::dateProtoFuncGetUTCDay):
        (JSC::dateProtoFuncGetHours):
        (JSC::dateProtoFuncGetUTCHours):
        (JSC::dateProtoFuncGetMinutes):
        (JSC::dateProtoFuncGetUTCMinutes):
        (JSC::dateProtoFuncGetSeconds):
        (JSC::dateProtoFuncGetUTCSeconds):
        (JSC::dateProtoFuncGetTimezoneOffset):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear): Updated for the gregorianDateTime change above.

2009-11-09  Geoffrey Garen  <ggaren@apple.com>

        Build fix: export a new symbol.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2009-11-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam "Home Wrecker" Weinig.

        Added a tiny cache for Date parsing.
        
        SunSpider says 1.2% faster.

        * runtime/DateConversion.cpp:
        (JSC::parseDate): Try to reuse the last parsed Date, if present.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::resetDateCache):
        * runtime/JSGlobalData.h: Added storage for last parsed Date. Refactored
        this code to make resetting the date cache easier.

        * runtime/JSGlobalObject.h:
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Updated for
        refactoring.

        * wtf/DateMath.cpp:
        (JSC::parseDateFromNullTerminatedCharacters):
        * wtf/DateMath.h: Changed ExecState to be first parameter, as is the JSC custom.

2009-11-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Can cache prototype lookups on uncacheable dictionaries.
        https://bugs.webkit.org/show_bug.cgi?id=31198

        Replace fromDictionaryTransition with flattenDictionaryObject and
        flattenDictionaryStructure.  This change is necessary as we need to
        guarantee that our attempt to convert away from a dictionary structure
        will definitely succeed, and in some cases this requires mutating the
        object storage itself.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCacheGetByID):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
        * runtime/JSObject.h:
        (JSC::JSObject::flattenDictionaryObject):
        * runtime/Operations.h:
        (JSC::normalizePrototypeChain):
        * runtime/Structure.cpp:
        (JSC::Structure::flattenDictionaryStructure):
        (JSC::comparePropertyMapEntryIndices):
        * runtime/Structure.h:

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Not reviewed, build fix.

        Remove extra character from r50701.

        * JavaScriptCore.pri:

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Not reviewed, build fix.

        Revert r50695 because it broke QtWebKit (clean builds).

        * JavaScriptCore.pri:

2009-11-09  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Prepended $$PWD to GENERATED_SOURCES_DIR to avoid potential ambiguities when included from WebCore.pro.
        Some preprocessors consider this GENERATED_SOURCES_DIR relative to current invoking dir (e.g., ./WebCore),
        and not the working dir of JavaCriptCore.pri (i.e., ../JavaScriptCore/).

        * JavaScriptCore.pri:

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Use explicit parentheses to silence gcc 4.4 -Wparentheses warnings
        https://bugs.webkit.org/show_bug.cgi?id=31040

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2009-11-08  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (speculative snow leopard and windows build fixes).

        * wtf/DateMath.cpp:
        (WTF::parseDateFromNullTerminatedCharacters):
        (JSC::gregorianDateTimeToMS):
        (JSC::msToGregorianDateTime):
        (JSC::parseDateFromNullTerminatedCharacters):
        * wtf/DateMath.h:
        (JSC::GregorianDateTime::GregorianDateTime):

2009-11-08  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (chromium build fix).
        
        Hopefully, the last build fix.

        Create better separation in DateMath about the JSC
        and non-JSC portions. Also, only expose the non-JSC
        version in the exports.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/DateMath.cpp:
        (WTF::parseDateFromNullTerminatedCharacters):
        (JSC::getUTCOffset):
        (JSC::gregorianDateTimeToMS):
        (JSC::msToGregorianDateTime):
        (JSC::parseDateFromNullTerminatedCharacters):
        * wtf/DateMath.h:
        (JSC::gmtoffset):

2009-11-08  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (chromium build fix).

        For the change in DateMath.

        * config.h:
        * wtf/DateMath.cpp:

2009-11-06  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: export some symbols.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2009-11-06  Geoffrey Garen  <ggaren@apple.com>

        Build fix: updated export file.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2009-11-06  Geoffrey Garen  <ggaren@apple.com>

        Build fix: added some #includes.

        * wtf/CurrentTime.h:
        * wtf/DateMath.h:

2009-11-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        https://bugs.webkit.org/show_bug.cgi?id=31197
        Implemented a timezone cache not based on Mac OS X's notify_check API.
        
        If the VM calculates the local timezone offset from UTC, it caches the
        result until the end of the current VM invocation. (We don't want to cache
        forever, because the user's timezone may change over time.)
        
        This removes notify_* overhead on Mac, and, more significantly, removes
        OS time and date call overhead on non-Mac platforms.

        ~8% speedup on Date microbenchmark on Mac. SunSpider reports maybe a tiny
        speedup on Mac. (Speedup on non-Mac platforms should be even more noticeable.)

        * JavaScriptCore.exp:

        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * runtime/JSGlobalObject.h:
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Made the 
        DynamicGlobalObjectScope constructor responsible for checking whether a
        dynamicGlobalObject has already been set. This eliminated some duplicate
        client code, and allowed me to avoid adding even more duplicate client
        code. Made DynamicGlobalObjectScope responsible for resetting the
        local timezone cache upon first entry to the VM.

        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        (JSC::callDate):
        (JSC::dateParse):
        (JSC::dateUTC):
        * runtime/DateConversion.cpp:
        (JSC::parseDate):
        * runtime/DateConversion.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::gregorianDateTime):
        * runtime/DateInstance.h:
        * runtime/DateInstanceCache.h:
        * runtime/DatePrototype.cpp:
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * wtf/DateMath.cpp:
        (WTF::getCurrentUTCTime):
        (WTF::getCurrentUTCTimeWithMicroseconds):
        (WTF::getLocalTime):
        (JSC::getUTCOffset): Use the new cache. Also, see below.
        (JSC::gregorianDateTimeToMS):
        (JSC::msToGregorianDateTime):
        (JSC::initializeDates):
        (JSC::parseDateFromNullTerminatedCharacters): Simplified the way this function
        accounts for the local timezone offset, to accomodate our new caching API,
        and a (possibly misguided) caller in WebCore. Also, see below.
        * wtf/DateMath.h:
        (JSC::GregorianDateTime::GregorianDateTime): Moved most of the code in
        DateMath.* into the JSC namespace. The code needed to move so it could
        naturally interact with ExecState and JSGlobalData to support caching.
        Logically, it seemed right to move it, too, since this code is not really
        as low-level as the WTF namespace might imply -- it implements a set of
        date parsing and conversion quirks that are finely tuned to the JavaScript
        language. Also removed the Mac OS X notify_* infrastructure.
        
        * wtf/CurrentTime.h:
        (WTF::currentTimeMS):
        (WTF::getLocalTime): Moved the rest of the DateMath code here, and renamed
        it to make it consistent with WTF's currentTime function.

2009-11-06  Gabor Loki  <loki@inf.u-szeged.hu>

        Unreviewed trivial buildfix after r50595.

        Rename the remaining rshiftPtr calls to rshift32

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_rshift):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitFastArithImmToInt):

2009-11-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Tidy up the shift methods on the macro-assembler interface.

        Currently behaviour of shifts of a magnitude > 0x1f is undefined.
        Instead defined that all shifts are masked to this range.  This makes a lot of
        practical sense, both since having undefined behaviour is not particularly
        desirable, and because this behaviour is commonly required (particularly since
        it is required bt ECMA-262 for shifts).

        Update the ARM assemblers to provide this behaviour.  Remove (now) redundant
        masks from JITArithmetic, and remove rshiftPtr (this was used in case that
        could be rewritten in a simpler form using rshift32, only optimized JSVALUE32
        on x86-64, which uses JSVALUE64!)

        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::lshift32):
        (JSC::MacroAssemblerARM::rshift32):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::lshift32):
        (JSC::MacroAssemblerARMv7::rshift32):
        * assembler/MacroAssemblerX86_64.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emit_op_rshift):

2009-11-05  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Oliver Hunt.

        Remove a magic number (1) from the JIT, instead compute the value with OBJECT_OFFSET.

        * jit/JITInlineMethods.h:
        (JSC::JIT::emitPutJITStubArg):
        (JSC::JIT::emitPutJITStubArgConstant):
        (JSC::JIT::emitGetJITStubArg):
        (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::JITStubCall):
        (JSC::JITStubCall::getArgument):
        * jit/JITStubs.h:

2009-11-05  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        https://bugs.webkit.org/show_bug.cgi?id=31159
        Fix branchDouble behaviour on ARM THUMB2 JIT.

        The x86 branchDouble behaviour is reworked, and all JIT
        ports should follow the x86 port. See bug 31104 and 31151

        This patch contains a fix for the traditional ARM port

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::):
        (JSC::ARMAssembler::fmrs_r):
        (JSC::ARMAssembler::ftosid_r):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::):
        (JSC::MacroAssemblerARM::branchDouble):
        (JSC::MacroAssemblerARM::branchConvertDoubleToInt32):

2009-11-05  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by Eric Seidel.

        Removed the "this is part of the KDE project" comments from 
        all *.h, *.cpp, *.idl, and *.pm files.
        
        https://bugs.webkit.org/show_bug.cgi?id=31167
        
        The maintenance and architecture page in the project wiki lists
        this as a task.
        
        This change includes no changes or additions to test cases 
        since the change affects only comments.
        
        * wtf/wince/FastMallocWince.h:

2009-11-05  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Use ARMv7 specific encoding for immediate constants on ARMv7 target
        https://bugs.webkit.org/show_bug.cgi?id=31060

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::getOp2): Use INVALID_IMM
        (JSC::ARMAssembler::getImm): Use encodeComplexImm for complex immediate
        (JSC::ARMAssembler::moveImm): Ditto.
        (JSC::ARMAssembler::encodeComplexImm): Encode a constant by one or two
        instructions or a PC relative load.
        * assembler/ARMAssembler.h: Use INVALID_IMM if a constant cannot be
        encoded as an immediate constant.
        (JSC::ARMAssembler::):
        (JSC::ARMAssembler::movw_r): 16-bit immediate load
        (JSC::ARMAssembler::movt_r): High halfword 16-bit immediate load
        (JSC::ARMAssembler::getImm16Op2): Encode immediate constant for
        movw_r and mowt_r

2009-11-04  Mark Mentovai  <mark@chromium.org>

        Reviewed by Mark Rowe.

        Provide TARGETING_TIGER and TARGETING_LEOPARD as analogues to
        BUILDING_ON_TIGER and BUILDING_ON_LEOPARD.  The TARGETING_ macros
        consider the deployment target; the BUILDING_ON_ macros consider the
        headers being built against.

        * wtf/Platform.h:

2009-11-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=31151
        Fix branchDouble behaviour on ARM THUMB2 JIT.

        The ARMv7 JIT is currently using ARMv7Assembler::ConditionEQ to branch
        for DoubleEqualOrUnordered, however this is incorrect – ConditionEQ won't
        branch on unordered operands.  Similarly, DoubleLessThanOrUnordered &
        DoubleLessThanOrEqualOrUnordered use ARMv7Assembler::ConditionLO &
        ARMv7Assembler::ConditionLS, whereas they should be using
        ARMv7Assembler::ConditionLT & ARMv7Assembler::ConditionLE.

        Fix these, and fill out the missing DoubleConditions.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::):
        (JSC::MacroAssemblerARMv7::branchDouble):

2009-11-04  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Oliver Hunt.

        Enable native call optimizations on ARMv7.  (Existing ARM_TRADITIONAL
        implementation was generic, worked perfectly, just needed turning on).

        * jit/JITOpcodes.cpp:
        * wtf/Platform.h:

2009-11-04  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Mark Rowe, Oliver Hunt, and Sam Weinig.

        Add a missing assert to the ARMv7 JIT.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMThumbImmediate::ARMThumbImmediate):

2009-11-04  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Oliver Hunt.

        Remove bogus op_ prefix on dumped version of three opcodes.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):

2009-11-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix dumping of constants in bytecode so that they aren't printed as large positive register numbers.

        We do this by having the registerName function return information about the constant if the register
        number corresponds to a constant.  This requires that registerName, and several functions that call it,
        be converted to member functions of CodeBlock so that the constant value can be retrieved.  The
        ExecState also needs to be threaded down through these functions so that it can be passed on to
        constantName when needed.

        * bytecode/CodeBlock.cpp:
        (JSC::constantName):
        (JSC::CodeBlock::registerName):
        (JSC::CodeBlock::printUnaryOp):
        (JSC::CodeBlock::printBinaryOp):
        (JSC::CodeBlock::printConditionalJump):
        (JSC::CodeBlock::printGetByIdOp):
        (JSC::CodeBlock::printPutByIdOp):
        (JSC::CodeBlock::dump):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::isConstantRegisterIndex):

2009-11-04  Pavel Heimlich  <tropikhajma@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=30647
        Solaris build failure due to strnstr.

        * wtf/StringExtras.h: Enable strnstr on Solaris, too.

2009-11-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=31104
        Refactor x86-specific behaviour out of the JIT.

        - Add explicit double branch conditions for ordered and unordered comparisons (presently the brehaviour is a mix).
        - Refactor double to int conversion out into the MacroAssembler.
        - Remove broken double to int conversion for !JSVALUE32_64 builds - this code was broken and slowing us down, fixing it showed it not to be an improvement.
        - Remove exclusion of double to int conversion from (1 % X) cases in JSVALUE32_64 builds - if this was of benefit this is no longer the case; simplify.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::):
        (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
        (JSC::MacroAssemblerX86Common::branchDouble):
        (JSC::MacroAssemblerX86Common::branchConvertDoubleToInt32):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emitSlow_op_jnlesseq):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jfalse):

2009-11-04  Mark Mentovai  <mark@chromium.org>

        Reviewed by Eric Seidel.

        Remove BUILDING_ON_LEOPARD from JavaScriptCore.gyp.  This is supposed
        to be set as needed only in wtf/Platform.h.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2009-11-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        REGRESSION (r48573): JSC may incorrectly cache chain lookups with a dictionary at the head of the chain
        https://bugs.webkit.org/show_bug.cgi?id=31045

        Add guards to prevent caching of prototype chain lookups with dictionaries at the
        head of the chain.  Also add a few tighter assertions to cached prototype lookups
        to catch this in future.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):

2009-11-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        PLATFORM(CF) should be set when building for Qt on Darwin
        https://bugs.webkit.org/show_bug.cgi?id=23671

        * wtf/Platform.h: Turn on CF support if both QT and DARWIN
        platforms are defined.

2009-11-02  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Remove threadsafe refcounting from tasks used with WTF::MessageQueue.
        https://bugs.webkit.org/show_bug.cgi?id=30612

        * wtf/MessageQueue.h:
        (WTF::MessageQueue::alwaysTruePredicate):
        (WTF::MessageQueue::~MessageQueue):
        (WTF::MessageQueue::append):
        (WTF::MessageQueue::appendAndCheckEmpty):
        (WTF::MessageQueue::prepend):
        (WTF::MessageQueue::waitForMessage):
        (WTF::MessageQueue::waitForMessageFilteredWithTimeout):
        (WTF::MessageQueue::tryGetMessage):
        (WTF::MessageQueue::removeIf):
        The MessageQueue is changed to act as a queue of OwnPtr<DataType>. It takes ownership
        of posted tasks and passes it to the new owner (in another thread) when the task is fetched.
        All methods have arguments of type PassOwnPtr<DataType> and return the same type.

        * wtf/Threading.cpp:
        (WTF::createThread):
        Superficial change to trigger rebuild of JSC project on Windows,
        workaround for https://bugs.webkit.org/show_bug.cgi?id=30890

2009-10-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed failing layout test: restore a special case I accidentally deleted.

        * runtime/DatePrototype.cpp:
        (JSC::setNewValueFromDateArgs): In the case of applying a change to a date
        that is NaN, reset the date to 0 *and* then apply the change; don't just
        reset the date to 0.

2009-10-30  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: update for object-to-pointer change.

        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):

2009-10-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30942
        Use pointers instead of copies to pass GregorianDateTime objects around.
        
        SunSpider reports a shocking 4.5% speedup on date-format-xparb, and 1.3%
        speedup on date-format-tofte.

        * runtime/DateInstance.cpp:
        (JSC::DateInstance::gregorianDateTime):
        * runtime/DateInstance.h:
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        (JSC::dateProtoFuncToString):
        (JSC::dateProtoFuncToUTCString):
        (JSC::dateProtoFuncToISOString):
        (JSC::dateProtoFuncToDateString):
        (JSC::dateProtoFuncToTimeString):
        (JSC::dateProtoFuncGetFullYear):
        (JSC::dateProtoFuncGetUTCFullYear):
        (JSC::dateProtoFuncToGMTString):
        (JSC::dateProtoFuncGetMonth):
        (JSC::dateProtoFuncGetUTCMonth):
        (JSC::dateProtoFuncGetDate):
        (JSC::dateProtoFuncGetUTCDate):
        (JSC::dateProtoFuncGetDay):
        (JSC::dateProtoFuncGetUTCDay):
        (JSC::dateProtoFuncGetHours):
        (JSC::dateProtoFuncGetUTCHours):
        (JSC::dateProtoFuncGetMinutes):
        (JSC::dateProtoFuncGetUTCMinutes):
        (JSC::dateProtoFuncGetSeconds):
        (JSC::dateProtoFuncGetUTCSeconds):
        (JSC::dateProtoFuncGetTimezoneOffset):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear): Renamed getGregorianDateTime to gregorianDateTime,
        since it no longer has an out parameter. Uses 0 to indicate invalid dates.

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for JavaScriptCore's ListHashSet
        https://bugs.webkit.org/show_bug.cgi?id=30853

        Inherits ListHashSet class from FastAllocBase because it is
        instantiated by 'new' in WebCore/rendering/RenderBlock.cpp:1813.

        * wtf/ListHashSet.h:

2009-10-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Regression: crash enumerating properties of an object with getters or setters
        https://bugs.webkit.org/show_bug.cgi?id=30948

        Add a guard to prevent us trying to cache property enumeration on
        objects with getters or setters.

        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):

2009-10-30  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Eric Seidel.

        Remove ENABLE_RUBY guards as discussed with Dave Hyatt and Maciej Stachowiak.

        Bug 28420 -  Implement HTML5 <ruby> rendering
        (https://bugs.webkit.org/show_bug.cgi?id=28420)
 
        No new tests (no functional change).

        * Configurations/FeatureDefines.xcconfig:

2009-10-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r50218-r50262): E*TRADE accounts page is missing content
        https://bugs.webkit.org/show_bug.cgi?id=30947
        <rdar://problem/7348833>

        The logic for flagging that a structure has non-enumerable properties
        was in addPropertyWithoutTransition, rather than in the core Structure::put
        method.  Despite this I was unable to produce a testcase that caused
        the failure that etrade was experiencing, but the new assertion in
        getEnumerablePropertyNames triggers on numerous layout tests without
        the fix, so in effecti all for..in enumeration in any test ends up
        doing the required consistency check.

        * runtime/Structure.cpp:
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::put):
        (JSC::Structure::getEnumerablePropertyNames):
        (JSC::Structure::checkConsistency):

2009-10-29  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Add cacheFlush support for Thumb-2 on Linux
        https://bugs.webkit.org/show_bug.cgi?id=30865

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):

2009-10-28  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        JSC JIT on ARMv7 cannot link jumps >16Mb range
        https://bugs.webkit.org/show_bug.cgi?id=30891

        Start planing all relative jumps as move-32-bit-immediate-to-register-BX.
        In the cases where the jump would fall within a relative jump range, use a relative jump.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::~ARMv7Assembler):
        (JSC::ARMv7Assembler::LinkRecord::LinkRecord):
        (JSC::ARMv7Assembler::):
        (JSC::ARMv7Assembler::executableCopy):
        (JSC::ARMv7Assembler::linkJump):
        (JSC::ARMv7Assembler::relinkJump):
        (JSC::ARMv7Assembler::setInt32):
        (JSC::ARMv7Assembler::isB):
        (JSC::ARMv7Assembler::isBX):
        (JSC::ARMv7Assembler::isMOV_imm_T3):
        (JSC::ARMv7Assembler::isMOVT):
        (JSC::ARMv7Assembler::isNOP_T1):
        (JSC::ARMv7Assembler::isNOP_T2):
        (JSC::ARMv7Assembler::linkJumpAbsolute):
        (JSC::ARMv7Assembler::twoWordOp5i6Imm4Reg4EncodedImmFirst):
        (JSC::ARMv7Assembler::twoWordOp5i6Imm4Reg4EncodedImmSecond):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp5i6Imm4Reg4EncodedImm):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::makeJump):
        (JSC::MacroAssemblerARMv7::makeBranch):
        * jit/JIT.h:
        * wtf/Platform.h:

2009-10-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Improve for..in enumeration performance
        https://bugs.webkit.org/show_bug.cgi?id=30887

        Improve indexing of an object with a for..in iterator by
        identifying cases where get_by_val is being used with a iterator
        as the subscript and replace it with a new get_by_pname
        bytecode.  get_by_pname then optimizes lookups that directly access
        the base object.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetByVal):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::pushOptimisedForIn):
        (JSC::BytecodeGenerator::popOptimisedForIn):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::emit_op_get_by_pname):
        (JSC::JIT::emitSlow_op_get_by_pname):
        * parser/Nodes.cpp:
        (JSC::ForInNode::emitBytecode):
        * runtime/JSObject.h:
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::getOffset):
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        * runtime/JSValue.h:
        (JSC::JSValue::):
        * runtime/Structure.cpp:
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::despecifyFunctionTransition):
        (JSC::Structure::addAnonymousSlotsTransition):
        (JSC::Structure::getterSetterTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::addPropertyWithoutTransition):
          Track the existence (or not) of non-enumerable properties.
        * runtime/Structure.h:
        (JSC::Structure::propertyStorageCapacity):
        (JSC::Structure::propertyStorageSize):
        (JSC::Structure::hasNonEnumerableProperties):
        (JSC::Structure::hasAnonymousSlots):

2009-10-28  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, attemp to fix Windows build.

        Touch the cpp file to cause recompile.

        * wtf/Threading.cpp:
        (WTF::threadEntryPoint):

2009-10-28  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=30805
        Add MessageQueue::removeIf(Predicate&) to remove certain tasks without pulling them from the queue.
        Existing Database tests cover this since Database removes tasks when it is stopped.

        * wtf/MessageQueue.h:
        (WTF::::removeIf):

2009-10-28  Afonso R. Costa Jr.  <afonso.costa@openbossa.org>

        Reviewed by Oliver Hunt.

        [Qt] Enable YARR when YARR_JIT is enabled
        https://bugs.webkit.org/show_bug.cgi?id=30730

        When enabling or disabling JIT using JAVASCRIPTCORE_JIT, the ENABLE_YARR should
        be toggled also.

        * JavaScriptCore.pri:

2009-10-24  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Oliver Hunt.

        Fix strict aliasing warning by switching reinterpret_cast to bitwise_cast.

        strict-aliasing warnings in JSFunction.h
        https://bugs.webkit.org/show_bug.cgi?id=27869

        * runtime/JSFunction.h:
        (JSC::JSFunction::nativeFunction):
        (JSC::JSFunction::scopeChain):
        (JSC::JSFunction::setScopeChain):
        (JSC::JSFunction::setNativeFunction):

2009-10-28  Jan-Arve Sæther <jan-arve.saether@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Build-fix for 64-bit Windows

        * wtf/Platform.h: Make sure to use WTF_USE_JSVALUE64

2009-10-28  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix!).

        * jit/JIT.h:

2009-10-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Darin Adler.

        Export fastMalloc, fastCalloc, fastRealloc and fastFree on GCC/Unix
        https://bugs.webkit.org/show_bug.cgi?id=30769

        When using -fvisibility=hidden to hide all internal symbols by default
        the malloc symbols will be hidden as well. For memory instrumentation
        it is needed to provide an instrumented version of these symbols and
        override the normal routines and by changing the visibility back to
        default this becomes possible.

        The only other solution would be to use system malloc instead of the
        TCmalloc implementation but this will not allow to analyze memory
        behavior with the default allocator.

        * wtf/FastMalloc.h: Define WTF_FAST_MALLOC_EXPORT for GCC and !darwin

2009-10-27  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Samuel Q. Weinig.

        Make the asserts protecting the offsets in the JIT more descriptive.

        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::emit_op_put_by_id):

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        A little bit of refactoring in the date code.

        * JavaScriptCore.exp: Don't export this unused symbol.

        * runtime/DateConstructor.cpp:
        (JSC::constructDate):

        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DateInstance.h: Removed some unused functions. Changed the default
        constructor to ensure that a DateInstance is always initialized.

        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype): Pass an initializer to our constructor,
        since it now requires one.

        * wtf/DateMath.cpp:
        (WTF::msToGregorianDateTime): Only compute our offset from UTC if our
        output will require it. Otherwise, our offset is 0.

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Mark DateInstaceCache.h private, so other frameworks can see it.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Build fix: re-readded this file.

        * runtime/DateInstanceCache.h: Added.
        (JSC::DateInstanceData::create):
        (JSC::DateInstanceData::DateInstanceData):
        (JSC::DateInstanceCache::DateInstanceCache):
        (JSC::DateInstanceCache::add):
        (JSC::DateInstanceCache::lookup):

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler and Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=30800
        Cache recently computed date data.
        
        SunSpider reports a ~0.5% speedup, mostly from date-format-tofte.js.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj: Added new file.

        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        (JSC::DateInstance::getGregorianDateTime): Use the shared cache.

        * runtime/DateInstance.h: Renamed m_cache to m_data, to avoid the confusion
        of a "cache cache".

        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        (JSC::dateProtoFuncToString):
        (JSC::dateProtoFuncToUTCString):
        (JSC::dateProtoFuncToISOString):
        (JSC::dateProtoFuncToDateString):
        (JSC::dateProtoFuncToTimeString):
        (JSC::dateProtoFuncGetFullYear):
        (JSC::dateProtoFuncGetUTCFullYear):
        (JSC::dateProtoFuncToGMTString):
        (JSC::dateProtoFuncGetMonth):
        (JSC::dateProtoFuncGetUTCMonth):
        (JSC::dateProtoFuncGetDate):
        (JSC::dateProtoFuncGetUTCDate):
        (JSC::dateProtoFuncGetDay):
        (JSC::dateProtoFuncGetUTCDay):
        (JSC::dateProtoFuncGetHours):
        (JSC::dateProtoFuncGetUTCHours):
        (JSC::dateProtoFuncGetMinutes):
        (JSC::dateProtoFuncGetUTCMinutes):
        (JSC::dateProtoFuncGetSeconds):
        (JSC::dateProtoFuncGetUTCSeconds):
        (JSC::dateProtoFuncGetTimezoneOffset):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear): Pass an ExecState to these functions, so they
        can access the DateInstanceCache.

        * runtime/JSGlobalData.h: Keep a DateInstanceCache.

2009-10-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        Ensures that JavaScriptCore/wtf/CurrentTime.cpp is not built in PLATFORM(CHROMIUM) builds.

        Chromium uses a different method to calculate the current time than is used in
        JavaScriptCore/wtf/CurrentTime.cpp. This can lead to time skew when calls to currentTime() and Chromium's time
        function are mixed.  In particular, timers can get scheduled in the past which leads to 100% CPU use.
        See http://code.google.com/p/chromium/issues/detail?id=25892 for an example.

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

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * wtf/CurrentTime.cpp:

2009-10-27  Peter Varga  <pvarga@inf.u-szeged.hu>

        Rubber-stamped by Tor Arne Vestbø.

        Fix typo in RegexInterpreter.cpp and RegexJIT.cpp alterantive to
        alternative.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::alternativeBodyDisjunction):
        (JSC::Yarr::ByteCompiler::alternativeDisjunction):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateDisjunction):

2009-10-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Make .rc files compile on Windows without depending on MFC headers
        https://bugs.webkit.org/show_bug.cgi?id=30750

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Use
        winresrc.h because it exists even when MFC is not installed, and is
        all that's needed here.

2009-10-26  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        The thunkReturnAddress is on JITStackFrame on ARM JIT as well
        https://bugs.webkit.org/show_bug.cgi?id=30782

        Move the thunkReturnAddress from top of the stack into the JITStackFrame
        structure. This is a requirement for JSValue32_64 support on ARM.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::ret): Return with link register
        (JSC::MacroAssemblerARM::prepareCall): Store the return address in link register
        * jit/JIT.h: Remove unused ctiReturnRegister
        * jit/JITInlineMethods.h: Same as ARMv7
        (JSC::JIT::restoreArgumentReference): Ditto.
        (JSC::JIT::restoreArgumentReferenceForTrampoline): Ditto.
        * jit/JITOpcodes.cpp: Remove ctiReturnRegister related instruction
        * jit/JITStubs.cpp: Store thunkReturnAddress on JITStackFrame. Use
        small trampoline functions which handle return addresses for each
        CTI_STUB_FUNCTION.
        * jit/JITStubs.h: Store thunkReturnAddress on JITStackFrame
        (JSC::JITStackFrame::returnAddressSlot): Return with the address of thunkReturnAddress
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateEnter): Remove the unnecessary instruction

2009-10-26  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Adds ability to disable ReadWriteLock on platforms (eg Android) that use pthreads but do not support pthread_rwlock.
        https://bugs.webkit.org/show_bug.cgi?id=30713

        * wtf/Platform.h: Modified. Defines HAVE_PTHREAD_RWLOCK for all platforms currently using pthreads.
        * wtf/Threading.h: Modified. Use pthread_rwlock_t only when HAVE_PTHREAD_RWLOCK is defined.
        * wtf/ThreadingPthreads.cpp: Modified. Build ReadWriteLock methods only when HAVE_PTHREAD_RWLOCK is defined.

2009-10-24  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] [Symbian] Set the capability and memory required to run QtWebKit for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=30476

        Assign ReadUserData WriteUserData NetworkServices Symbian capabilities
        to jsc.exe.

        * jsc.pro:

2009-10-23  Steve Block  <steveblock@google.com>

        Reviewed by Dmitry Titov.

        Fixes a leak in createThreadInternal on Android.
        https://bugs.webkit.org/show_bug.cgi?id=30698

        * wtf/ThreadingPthreads.cpp: Modified.
        (WTF::createThreadInternal): Avoid leaking a ThreadData object on failure.

2009-10-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fixed ASSERT when opening Safari's Caches window while the Web Inspector
        is open.

        * runtime/Collector.cpp:
        (JSC::typeName): Added two new types to the type name list in the Collector.
        These types have been around for a while, but nobody remembered to consider them here.

        * runtime/JSCell.h:
        (JSC::JSCell::isPropertyNameIterator):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::isPropertyNameIterator): Give the Collector
        a way to tell if a cell is a JSPropertyNameIterator.

2009-10-22  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Jon Honeycutt.

        https://bugs.webkit.org/show_bug.cgi?id=30686
        Remove debug-specific def file.
        Only Debug_All target uses JavaScriptCore_debug.dll naming, and since
        that target is only used internally, maintaining two files just to
        suppress a single link warning isn't worthwhile.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Removed.

2009-10-21  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7270320> Screenshots of off-screen plug-ins are blank
        <rdar://problem/7270314> After halting a transparent PluginView on
        Windows, the transparency is applied twice

        Reviewed by Dan Bernstein.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        Export WTF::deleteOwnedPtr(HDC).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
        Ditto.

2009-10-20  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: updated variable name.

        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):

2009-10-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_next_pname): Slightly tweaked this #ifdef to match the
        size of a JSValue because m_jsStrings is an array of JSValues.

2009-10-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        Fixed a 64-bit regression caused by the fix for
        https://bugs.webkit.org/show_bug.cgi?id=30570.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_next_pname): Use TimesEight stepping on 64-bit, since
        64-bit pointers are eight bytes long.

2009-10-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Refactored DateInstance::msToGregorianDateTime so that a DateInstance's
        caller doesn't need to supply the DateInstance's own internal value to
        the DateInstance.

        * runtime/DateInstance.cpp:
        (JSC::DateInstance::getGregorianDateTime): Renamed from "msToGregorianDateTime".

        * runtime/DateInstance.h:
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        (JSC::dateProtoFuncToString):
        (JSC::dateProtoFuncToUTCString):
        (JSC::dateProtoFuncToISOString):
        (JSC::dateProtoFuncToDateString):
        (JSC::dateProtoFuncToTimeString):
        (JSC::dateProtoFuncToLocaleString):
        (JSC::dateProtoFuncToLocaleDateString):
        (JSC::dateProtoFuncToLocaleTimeString):
        (JSC::dateProtoFuncGetTime):
        (JSC::dateProtoFuncGetFullYear):
        (JSC::dateProtoFuncGetUTCFullYear):
        (JSC::dateProtoFuncToGMTString):
        (JSC::dateProtoFuncGetMonth):
        (JSC::dateProtoFuncGetUTCMonth):
        (JSC::dateProtoFuncGetDate):
        (JSC::dateProtoFuncGetUTCDate):
        (JSC::dateProtoFuncGetDay):
        (JSC::dateProtoFuncGetUTCDay):
        (JSC::dateProtoFuncGetHours):
        (JSC::dateProtoFuncGetUTCHours):
        (JSC::dateProtoFuncGetMinutes):
        (JSC::dateProtoFuncGetUTCMinutes):
        (JSC::dateProtoFuncGetSeconds):
        (JSC::dateProtoFuncGetUTCSeconds):
        (JSC::dateProtoFuncGetTimezoneOffset):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear): Also renamed "utc" to "outputIsUTC", for clarity.

2009-10-20  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Geoffrey Garen.

        The op_next_pname should use 4 bytes addressing mode in case of JSValue32
        https://bugs.webkit.org/show_bug.cgi?id=30570

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_next_pname):

2009-10-20  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Oliver Hunt.

        Move OverridesMarkChildren flag from DatePrototype to its parent class
        https://bugs.webkit.org/show_bug.cgi?id=30372

        * runtime/DateInstance.h:
        (JSC::DateInstance::createStructure):
        * runtime/DatePrototype.h:

2009-10-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Tightened up some put_by_id_transition code generation.
        https://bugs.webkit.org/show_bug.cgi?id=30539

        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::testPrototype):
        (JSC::JIT::privateCompilePutByIdTransition): No need to do object type
        checks or read Structures and prototypes from objects: they're all known
        constants at compile time.

2009-10-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Added a private API for getting a global context from a context, for
        clients who want to preserve a context for a later callback.

        * API/APICast.h:
        (toGlobalRef): Added an ASSERT, since this function is used more often
        than before.

        * API/JSContextRef.cpp:
        * API/JSContextRefPrivate.h: Added. The new API.

        * API/tests/testapi.c:
        (print_callAsFunction):
        (main): Test the new API.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj: Build and export the new API.

2009-10-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Tightened up some instanceof code generation.
        https://bugs.webkit.org/show_bug.cgi?id=30488

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof): No need to do object type checks - 
        cell type checks and ImplementsDefaultHasIntance checks implicitly
        supersede object type checks.

2009-10-18  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Use _stricmp and _strnicmp instead of deprecated stricmp and strnicmp.
        https://bugs.webkit.org/show_bug.cgi?id=30474

        stricmp and strnicmp are deprecated beginning in Visual
        C++ 2005. Use _stricmp and _strnicmp instead in StringExtras.h.

        * wtf/StringExtras.h:
        (strncasecmp):
        (strcasecmp):

2009-10-16  Geoffrey Garen  <ggaren@apple.com>

        Build fix: apparently we shouldn't export those symbols?

        * JavaScriptCore.exp:

2009-10-16  Geoffrey Garen  <ggaren@apple.com>

        Build fix: export some symbols.

        * JavaScriptCore.exp:

2009-10-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        structure typeinfo flags should be inherited.
        https://bugs.webkit.org/show_bug.cgi?id=30468

        Add StructureFlag constant to the various JSC classes and use
        it for the TypeInfo construction.  This allows us to simply
        accumulate flags by basing each classes StructureInfo on its parents.

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructure):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::createStructure):
        * runtime/Arguments.h:
        (JSC::Arguments::createStructure):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/GlobalEvalFunction.h:
        (JSC::GlobalEvalFunction::createStructure):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createStructure):
        * runtime/JSActivation.h:
        (JSC::JSActivation::createStructure):
        * runtime/JSArray.h:
        (JSC::JSArray::createStructure):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::createStructure):
        * runtime/JSByteArray.h:
        * runtime/JSFunction.h:
        (JSC::JSFunction::createStructure):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::createStructure):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::createStructure):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.h:
        (JSC::JSObject::createStructure):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::createStructure):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::createStructure):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::createStructure):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):

2009-10-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Fast for-in enumeration: Cache JSPropertyNameIterator; cache JSStrings
        in JSPropertyNameIterator; inline more code.

        1.024x as fast on SunSpider (fasta: 1.43x as fast).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetPropertyNames):
        (JSC::BytecodeGenerator::emitNextPropertyName):
        * bytecompiler/BytecodeGenerator.h: Added a few extra operands to
        op_get_pnames and op_next_pname so that we can track iteration state
        in the register file instead of in the JSPropertyNameIterator. (To be
        cacheable, the JSPropertyNameIterator must be stateless.)

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCachePutByID):
        (JSC::Interpreter::tryCacheGetByID): Updated for rename to
        "normalizePrototypeChain" and removal of "isCacheable". 

        (JSC::Interpreter::privateExecute): Updated for in-RegisterFile
        iteration state tracking.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_get_pnames): Updated for in-RegisterFile
        iteration state tracking.

        (JSC::JIT::emit_op_next_pname): Inlined code generation for op_next_pname.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID): Updated for rename to
        "normalizePrototypeChain" and removal of "isCacheable". 

        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        (JSC::): Added has_property and to_object stubs. Removed op_next_pname
        stub, since has_property is all we need anymore.

        * parser/Nodes.cpp:
        (JSC::ForInNode::emitBytecode): Updated for in-RegisterFile
        iteration state tracking.

        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getPropertyNames): Don't do caching at this layer
        anymore, since we don't create a JSPropertyNameIterator at this layer.

        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create): Do do caching at this layer.
        (JSC::JSPropertyNameIterator::get):  Updated for in-RegisterFile
        iteration state tracking.
        (JSC::JSPropertyNameIterator::markChildren): Mark our JSStrings.

        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::size):
        (JSC::JSPropertyNameIterator::setCachedStructure):
        (JSC::JSPropertyNameIterator::cachedStructure):
        (JSC::JSPropertyNameIterator::setCachedPrototypeChain):
        (JSC::JSPropertyNameIterator::cachedPrototypeChain):
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::Structure::setEnumerationCache): Don't store iteration state in
        a JSPropertyNameIterator. Do cache a JSPropertyNameIterator in a
        Structure.

        * runtime/JSValue.h:
        (JSC::asCell):
        * runtime/MarkStack.h: Make those mischievous #include gods happy.

        * runtime/ObjectConstructor.cpp:

        * runtime/Operations.h:
        (JSC::normalizePrototypeChain): Renamed countPrototypeChainEntriesAndCheckForProxies
        to normalizePrototypeChain, since it changes dictionary prototypes to
        non-dictionary objects.

        * runtime/PropertyNameArray.cpp:
        (JSC::PropertyNameArray::add):
        * runtime/PropertyNameArray.h:
        (JSC::PropertyNameArrayData::PropertyNameArrayData):
        (JSC::PropertyNameArray::data):
        (JSC::PropertyNameArray::size):
        (JSC::PropertyNameArray::begin):
        (JSC::PropertyNameArray::end): Simplified some code here to help with
        current and future refactoring.

        * runtime/Protect.h:
        * runtime/Structure.cpp:
        (JSC::Structure::~Structure):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::removePropertyWithoutTransition): No need to clear
        the enumeration cache with adding / removing properties without
        transition. It is an error to add / remove properties without transition
        once an object has been observed, and we can ASSERT to catch that.

        * runtime/Structure.h:
        (JSC::Structure::enumerationCache): Changed the enumeration cache to
        hold a JSPropertyNameIterator.

        * runtime/StructureChain.cpp:
        * runtime/StructureChain.h:
        (JSC::StructureChain::head): Removed StructureChain::isCacheable because
        it was wrong-headed in two ways: (1) It gave up when a prototype was a
        dictionary, but instead we want un-dictionary heavily accessed
        prototypes; (2) It folded a test for hasDefaultGetPropertyNames() into
        a generic test for "cacheable-ness", but hasDefaultGetPropertyNames()
        is only releavant to for-in caching.

2009-10-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add a Debug_All configuration to build entire stack as debug.
        Change Debug_Internal to:
        - stop using _debug suffix for all WebKit/Safari binaries
        - not use _debug as a DLL naming suffix
        - use non-debug C runtime lib.

        * JavaScriptCore.vcproj/JavaScriptCore.make: Debug build in makefile should build Debug_All.
        * JavaScriptCore.vcproj/JavaScriptCore.sln: Add Debug_All configuration.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add Debug_All configuration.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Renamed single configuration from "Release" to "all".
        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Add Debug_All configuration.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add Debug_All configuration.
        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add Debug_All configuration.
        * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add Debug_All configuration.

2009-10-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make typeinfo flags default to false
        https://bugs.webkit.org/show_bug.cgi?id=30372

        Last part -- replace HasDefaultGetPropertyNames with OverridesGetPropertyNames
        flag.

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::createStructure):
        * runtime/Arguments.h:
        (JSC::Arguments::createStructure):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/GlobalEvalFunction.h:
        (JSC::GlobalEvalFunction::createStructure):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        * runtime/JSActivation.h:
        (JSC::JSActivation::createStructure):
        * runtime/JSArray.h:
        (JSC::JSArray::createStructure):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::createStructure):
        * runtime/JSFunction.h:
        (JSC::JSFunction::createStructure):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::createStructure):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::createStructure):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.cpp:
        (JSC::JSObject::getPropertyNames):
        * runtime/JSObject.h:
        (JSC::JSObject::createStructure):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::createStructure):
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::overridesGetPropertyNames):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::createStructure):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::createStructure):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::isCacheable):

2009-10-16  Kevin Ollivier  <kevino@theolliviers.com>

        wxMSW build fix, we can't use the simple hash there because the PlatformModuleVersion 
        structure differs.

        * wtf/Platform.h:

2009-10-16  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement ExecutableAllocator for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=29946

        Tested with YARR JIT enabled for Symbian; 
        This patch does not (yet) enable YARR JIT by default.

        * JavaScriptCore.pri:
        * jit/ExecutableAllocator.h:
        * jit/ExecutableAllocatorSymbian.cpp: Added.
        (JSC::ExecutableAllocator::intializePageSize):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):

2009-10-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Make typeinfo flags default to false
        https://bugs.webkit.org/show_bug.cgi?id=30372

        Part 2 -- Reverse the TypeInfo HasDefaultMark flag to OverridesMarkChildren, etc

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructure):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::createStructure):
        * runtime/Arguments.h:
        (JSC::Arguments::createStructure):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::createStructure):
        * runtime/GlobalEvalFunction.h:
        (JSC::GlobalEvalFunction::createStructure):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createStructure):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        * runtime/JSActivation.h:
        (JSC::JSActivation::createStructure):
        * runtime/JSArray.h:
        (JSC::JSArray::createStructure):
        (JSC::MarkStack::markChildren):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::createStructure):
        * runtime/JSFunction.h:
        (JSC::JSFunction::createStructure):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::createStructure):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::createStructure):
        * runtime/JSNumberCell.h:
        (JSC::JSNumberCell::createStructure):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.h:
        (JSC::JSObject::createStructure):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::createStructure):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::createStructure):
        * runtime/JSString.h:
        (JSC::JSString::createStructure):
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::overridesMarkChildren):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::createStructure):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::createStructure):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):

2009-10-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Make typeinfo flags default to false
        https://bugs.webkit.org/show_bug.cgi?id=30372
        
        Part 1. Reverse the HasStandardGetOwnPropertySlot flag.

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructure):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::createStructure):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Arguments.h:
        (JSC::Arguments::createStructure):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/GlobalEvalFunction.h:
        (JSC::GlobalEvalFunction::createStructure):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createStructure):
        * runtime/JSActivation.h:
        (JSC::JSActivation::createStructure):
        * runtime/JSArray.h:
        (JSC::JSArray::createStructure):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::createStructure):
        * runtime/JSFunction.h:
        (JSC::JSFunction::createStructure):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::createStructure):
        * runtime/JSNumberCell.h:
        (JSC::JSNumberCell::createStructure):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.h:
        (JSC::JSObject::createStructure):
        (JSC::JSCell::fastGetOwnPropertySlot):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::createStructure):
        * runtime/JSString.h:
        (JSC::JSString::createStructure):
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::overridesGetOwnPropertySlot):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::createStructure):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::createStructure):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):

2009-10-14  Kevin Ollivier  <kevino@theolliviers.com>
2009-10-14  Darin Adler  <darin@apple.com>

        Additions so fix for https://bugs.webkit.org/show_bug.cgi?id=18994
        can build on Windows.

        * wtf/MathExtras.h: Added llround and llroundf for Windows.

2009-10-14  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Set ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH for plugins while we're still building stubs.

        * wtf/Platform.h:

2009-10-13  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        Refactor ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH
        https://bugs.webkit.org/show_bug.cgi?id=30278

        Move the definition of ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH
        from the make system into common code.

        * wtf/Platform.h:

2009-10-13  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        ARM compiler does not understand reinterpret_cast<void*>
        https://bugs.webkit.org/show_bug.cgi?id=29034

        Change reinterpret_cast<void*> to regular C style (void*) cast 
        for the ARM RVCT compiler.

        * assembler/MacroAssemblerCodeRef.h:
        (JSC::FunctionPtr::FunctionPtr): 
        * jit/JITOpcodes.cpp: Cast to FunctionPtr first 
           instead of directly casting to reinterpret_cast
        * jit/JITStubCall.h: Ditto + change the type of m_stub
          from void* to FunctionPtr.
        (JSC::JITStubCall::JITStubCall): 
        (JSC::JITStubCall::call):
        * jit/JITStubs.cpp: Ditto.
        (JSC::DEFINE_STUB_FUNCTION(EncodedJSValue, op_throw)):

2009-10-11  Oliver Hunt  <oliver@apple.com>

        Re-enable the JIT.

        * wtf/Platform.h:

2009-10-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Support for String.trim(), String.trimLeft() and String.trimRight() methods
        https://bugs.webkit.org/show_bug.cgi?id=26590

        Implement trim, trimLeft, and trimRight

        * runtime/StringPrototype.cpp:
        (JSC::isTrimWhitespace):
           Our normal string whitespace function does not include U+200B which
           is needed for compatibility with mozilla's implementation of trim.
           U+200B does not appear to be expected according to spec, however I am
           choosing to be lax, and match mozilla behavior so have added this
           exception.
        (JSC::trimString):

2009-10-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Eliminated some legacy bytecode weirdness.
        
        Use vPC[x] subscripting instead of ++vPC to access instruction operands.
        This is simpler, and often more efficient.

        To support this, and to remove use of hard-coded offsets in bytecode and
        JIT code generation and dumping, calculate jump offsets from the beginning
        of an instruction, rather than the middle or end.
        
        Also, use OPCODE_LENGTH instead of hard-coded constants for the sizes of
        opcodes.
        
        SunSpider reports no change in JIT mode, and a 1.01x speedup in Interpreter
        mode.

        * bytecode/CodeBlock.cpp:
        (JSC::printConditionalJump):
        (JSC::CodeBlock::dump):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitJump):
        (JSC::BytecodeGenerator::emitJumpIfTrue):
        (JSC::BytecodeGenerator::emitJumpIfFalse):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        (JSC::BytecodeGenerator::emitComplexJumpScopes):
        (JSC::BytecodeGenerator::emitJumpScopes):
        (JSC::BytecodeGenerator::emitNextPropertyName):
        (JSC::BytecodeGenerator::emitCatch):
        (JSC::BytecodeGenerator::emitJumpSubroutine):
        (JSC::prepareJumpTableForImmediateSwitch):
        (JSC::prepareJumpTableForCharacterSwitch):
        (JSC::prepareJumpTableForStringSwitch):
        (JSC::BytecodeGenerator::endSwitch):
        * bytecompiler/Label.h:
        (JSC::Label::setLocation):
        (JSC::Label::bind):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveBase):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::createExceptionScope):
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emitSlow_op_jnlesseq):
        (JSC::JIT::emitBinaryDoubleOp):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_loop):
        (JSC::JIT::emit_op_loop_if_less):
        (JSC::JIT::emitSlow_op_loop_if_less):
        (JSC::JIT::emit_op_loop_if_lesseq):
        (JSC::JIT::emitSlow_op_loop_if_lesseq):
        (JSC::JIT::emit_op_loop_if_true):
        (JSC::JIT::emitSlow_op_loop_if_true):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emitSlow_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emitSlow_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_jsr):
        (JSC::JIT::emit_op_next_pname):
        (JSC::JIT::emit_op_jmp_scopes):

2009-10-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Migrated some code that didn't belong out of Structure.
        
        SunSpider says maybe 1.03x faster.

        * runtime/JSCell.h: Nixed Structure::markAggregate, and made marking of
        a Structure's prototype the direct responsility of the object using it.
        (Giving Structure a mark function was misleading because it implied that
        all live structures get marked during GC, when they don't.)
        
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        (JSC::JSGlobalObject::markChildren): Added code to mark prototypes stored
        on the global object. Maybe this wasn't necessary, but now we don't have
        to wonder.

        * runtime/JSObject.cpp:
        (JSC::JSObject::getPropertyNames):
        (JSC::JSObject::getOwnPropertyNames):
        (JSC::JSObject::getEnumerableNamesFromClassInfoTable):
        * runtime/JSObject.h:
        (JSC::JSObject::markChildrenDirect):
        * runtime/PropertyNameArray.h:
        * runtime/Structure.cpp:
        * runtime/Structure.h:
        (JSC::Structure::setEnumerationCache):
        (JSC::Structure::enumerationCache): Moved property name gathering code
        from Structure to JSObject because having a Structure iterate its JSObject
        was a layering violation. A JSObject is implemented using a Structure; not
        the other way around.

2009-10-09  Mark Rowe  <mrowe@apple.com>

        Attempt to fix the GTK release build.

        * GNUmakefile.am: Include Grammar.cpp in release builds now that
        AllInOneFile.cpp is gone.

2009-10-09  Gabor Loki  <loki@inf.u-szeged.hu>

        Rubber-stamped by Eric Seidel.

        Add ARM JIT support for Gtk port (disabled by default)
        https://bugs.webkit.org/show_bug.cgi?id=30228

        * GNUmakefile.am:

2009-10-08  Geoffrey Garen  <ggaren@apple.com>

        Tiger build fix: added a few more variable initializations.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncSearch):

2009-10-08  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: added missing #include.

        * jsc.cpp:

2009-10-08  Geoffrey Garen  <ggaren@apple.com>

        Tiger build fix: initialize variable whose initialization the compiler
        can't otherwise figure out.

        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::match):

2009-10-08  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: updated exports.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-10-08  Geoffrey Garen  <ggaren@apple.com>

        Tiger build fix: fixed file name case.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-10-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        At long last, I pronounce the death of AllInOneFile.cpp.
        
        SunSpider reports a 1.01x speedup.

        * AllInOneFile.cpp: Removed.
        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj: Added missing project files
        to compilation stages.

        * parser/Grammar.y:
        * parser/Lexer.cpp:
        * parser/Lexer.h:
        (JSC::jscyylex):
        * runtime/ArrayConstructor.cpp:
        (JSC::constructArrayWithSizeQuirk):
        * runtime/Collector.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::operator new):
        * runtime/JSCell.h:
        (JSC::JSCell::operator new):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::operator new):
        * runtime/JSNumberCell.h:
        (JSC::JSNumberCell::operator new):
        * runtime/JSString.cpp:
        * runtime/JSString.h:
        (JSC::jsString):
        (JSC::jsSubstring):
        (JSC::jsOwnedString):
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructorPrivate::RegExpConstructorPrivate):
        (JSC::RegExpConstructorPrivate::lastOvector):
        (JSC::RegExpConstructorPrivate::tempOvector):
        (JSC::RegExpConstructorPrivate::changeLastOvector):
        (JSC::RegExpConstructor::performMatch):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        * yarr/RegexJIT.cpp:
        * yarr/RegexJIT.h:
        (JSC::Yarr::executeRegex): Inlined a few things that Shark said
        were hot, on the presumption that AllInOneFile.cpp used to inline them
        automatically.

2009-10-08  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Fix for JIT'ed op_call instructions (evals, constructs, etc.)
        when !ENABLE(JIT_OPTIMIZE_CALL) && USE(JSVALUE32_64)

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

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):

2009-10-07  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: removed no longer exported symbol.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-10-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed <rdar://problem/5751979> Database code takes JSLock on secondary
        thread, permanently slowing down JavaScript
        
        Removed the optional lock from Heap::protect, Heap::unprotect, and friends,
        since WebCore no longer uses it.

        * JavaScriptCore.exp:
        * runtime/Collector.cpp:
        (JSC::Heap::protect):
        (JSC::Heap::unprotect):
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::protectedGlobalObjectCount):
        (JSC::Heap::protectedObjectCount):
        (JSC::Heap::protectedObjectTypeCounts):
        * runtime/Collector.h:

2009-10-07  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for JavaScriptCore's IdentifierArena
        https://bugs.webkit.org/show_bug.cgi?id=30158

        Inherits IdentifierArena class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/parser/ParserArena.cpp:36.

        * parser/ParserArena.h:

2009-10-07  Adam Roben  <aroben@apple.com>

        Export DateInstance::info in a way that works on Windows

        Fixes <http://webkit.org/b/30171>
        fast/dom/Window/window-postmessage-clone.html fails on Windows

        Reviewed by Anders Carlsson.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
        Removed the export of DateInstance::info from here.

        * runtime/DateInstance.h: Use JS_EXPORTDATA to export
        DateInstance::info, which is the required way of exporting data on
        Windows.

2009-10-07  Jørgen Lind  <jorgen.lind@nokia.com>

        Reviewed by Simon Hausmann.

        When enabling or disabling the JIT through .qmake.cache, make sure
        to also toggle ENABLE_YARR_JIT.

        * JavaScriptCore.pri:

2009-10-06  Priit Laes  <plaes@plaes.org>

        Reviewed by Gavin Barraclough.

        Linking fails with "relocation R_X86_64_PC32 against symbol
        `cti_vm_throw'"
        https://bugs.webkit.org/show_bug.cgi?id=28422

        * jit/JITStubs.cpp:
        Mark cti_vm_throw symbol as PLT-indirect symbol, so it doesn't end up
        in text segment causing relocation errors on amd64 architecture.
        Introduced new define SYMBOL_STRING_RELOCATION for such symbols.

2009-10-06  Oliver Hunt  <oliver@apple.com>

        Windows linking fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-10-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (build fix).

        Windows build fix.

        * runtime/DateInstance.cpp:

2009-10-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        It should be possible to post (clone) built-in JS objects to Workers
        https://bugs.webkit.org/show_bug.cgi?id=22878

        Expose helpers to throw correct exceptions during object graph walk
        used for cloning and add a helper function to create Date instances
        without going through the JS Date constructor function.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DateInstance.h:
        * runtime/ExceptionHelpers.cpp:
        (JSC::createTypeError):
        * runtime/ExceptionHelpers.h:

2009-10-06  David Levin  <levin@chromium.org>

        Reviewed by Oliver Hunt.

        StringImpl needs a method to get an instance for another thread which doesn't copy the underlying buffer.
        https://bugs.webkit.org/show_bug.cgi?id=30095

        * wtf/CrossThreadRefCounted.h:
        Removed an unused function and assert improvement.
        (WTF::CrossThreadRefCounted::isOwnedByCurrentThread): Moved out common code from asserts.
        (WTF::CrossThreadRefCounted::ref): Changed assert to use the common method.
        (WTF::CrossThreadRefCounted::deref): Changed assert to use the common method.
        (WTF::CrossThreadRefCounted::crossThreadCopy): Since this includes a potentially
        non-threadsafe operation, add an assert that the class is owned by the current thread.

2009-10-05  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Add Symbian files to the list of excludes.

        * wscript:

2009-10-05  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Remove precompiled header from JavaScriptCore compilation to
        prevent qmake warning during autonomous compilation.
        https://bugs.webkit.org/show_bug.cgi?id=30069

        * JavaScriptCore.pro:

2009-10-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed the concept of a "fast access cutoff" in arrays, because it
        punished some patterns of array access too much, and made things too
        complex for inlining in some cases.
        
        1.3% speedup on SunSpider.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:
        (JSC::): Check m_vectorLength instead of m_fastAccessCutoff when
        getting / putting from / to an array. Inline putting past the end of
        the array.

        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::getOwnPropertyNames):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::sort):
        (JSC::JSArray::fillArgList):
        (JSC::JSArray::copyToRegisters):
        (JSC::JSArray::compactForSorting):
        (JSC::JSArray::checkConsistency):
        * runtime/JSArray.h:
        (JSC::JSArray::canGetIndex):
        (JSC::JSArray::canSetIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::markChildrenDirect): Removed m_fastAccessCutoff, and
        replaced with checks for JSValue() to detect reads and writes from / to
        uninitialized parts of the array.

2009-10-02  Jonni Rainisto  <jonni.rainisto@nokia.com>

        Reviewed by Darin Adler.

        Math.random() gives too low values on Win32 when _CRT_RAND_S is not defined
        https://bugs.webkit.org/show_bug.cgi?id=29956

        * wtf/RandomNumber.cpp:
        (WTF::randomNumber): Added PLATFORM(WIN_OS) to handle 15bit rand()

2009-10-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Take one branch instead of two to test for JSValue().
        
        1.1% SunSpider speedup.

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_to_jsnumber):
        (JSC::JIT::emit_op_create_arguments):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val): Test for the empty value tag, instead
        of testing for the cell tag with a 0 payload.

        * runtime/JSValue.cpp:
        (JSC::JSValue::description): Added support for dumping the new empty value,
        and deleted values, in debug builds.

        * runtime/JSValue.h:
        (JSC::JSValue::JSValue()): Construct JSValue() with the empty value tag.

        (JSC::JSValue::JSValue(JSCell*)): Convert null pointer to the empty value
        tag, to avoid having two different c++ versions of null / empty.

        (JSC::JSValue::operator bool): Test for the empty value tag, instead
        of testing for the cell tag with a 0 payload.

2009-10-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Mark Rowe.

        <https://bugs.webkit.org/show_bug.cgi?id=29989>
        Safari version number shouldn't be exposed in WebKit code
        
        For a WebKit version of 532.3.4:
        Product version is: 5.32.3.4 (was 4.0.3.0)
        File version is: 5.32.3.4 (was 4.532.3.4)

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc:

2009-10-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Simon Hausmann.

        Fix the Qt on Mac OS X build.

        * wtf/FastMalloc.cpp:

2009-10-02  Jørgen Lind  <jorgen.lind@nokia.com>

        Reviewed by Simon Hausmann.

        Allow enabling and disabling of the JIT through a qmake variable.

        Qt's configure may set this variable through .qmake.cache if a
        commandline option is given and/or the compile test for hwcap.h
        failed/succeeded.

        * JavaScriptCore.pri:

2009-10-01  Mark Rowe  <mrowe@apple.com>

        Fix the Tiger build.  Don't unconditionally enable 3D canvas as it is not supported on Tiger.

        * Configurations/FeatureDefines.xcconfig:

2009-10-01  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Darin Adler.

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

        Don't inline ~ListRefPtr() to work around winscw compiler forward declaration
        bug regarding templated classes.

        The compiler bug is reported at:
        https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=9812

        The change will be reverted when the above bug is fixed in winscw compiler.

        * wtf/ListRefPtr.h:
        (WTF::::~ListRefPtr):

2009-10-01  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Allow custom memory allocation control for the whole JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=27029

        Since in JavaScriptCore almost every class which has been instantiated by operator new is
        inherited from FastAllocBase (bug #20422), we disable customizing global operator new for the Qt-port
        when USE_SYSTEM_MALLOC=0.

        Add #include <unistd.h> to FastMalloc.cpp because it's used by TCMalloc_PageHeap::scavengerThread().
        (It's needed for the functionality of TCmalloc.)

        Add TCSystemAlloc.cpp to JavaScriptCore.pri if USE_SYSTEM_MALLOC is disabled.

        * JavaScriptCore.pri:
        * wtf/FastMalloc.cpp:
        (WTF::sleep):
        * wtf/FastMalloc.h:

2009-09-30  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by George Staikos.

        Defines two pseudo-platforms for ARM and Thumb-2 instruction set.
        https://bugs.webkit.org/show_bug.cgi?id=29122

        Introduces WTF_PLATFORM_ARM_TRADITIONAL and WTF_PLATFORM_ARM_THUMB2
        macros on ARM platforms. The PLATFORM(ARM_THUMB2) should be used
        when Thumb-2 instruction set is the required target. The
        PLATFORM(ARM_TRADITIONAL) is for generic ARM instruction set. In
        case where the code is common the PLATFORM(ARM) have to be used.

        Modified by George Wright  <gwright@rim.com> to correctly work
        with the RVCT-defined __TARGET_ARCH_ARM and __TARGET_ARCH_THUMB
        compiler macros, as well as adding readability changes.

        * wtf/Platform.h:

2009-09-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Devirtualise array toString conversion

        Tweak the implementation of Array.prototype.toString to have a fast path
        when acting on a true JSArray.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):

2009-09-30  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Geoffrey Garen.

        Buildfix for platforms using JSVALUE32.
        https://bugs.webkit.org/show_bug.cgi?id=29915

        After http://trac.webkit.org/changeset/48905 the build broke in JSVALUE32 case.
        Also removed unreachable code.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_add):
         - Declaration of "OperandTypes types" moved before first use.
         - Typos fixed: dst modified to result, regT2 added.
         - Unreachable code removed.
        (JSC::JIT::emitSlow_op_add):
         - Missing declaration of "OperandTypes types" added.

2009-09-30  Janne Koskinen  <janne.p.koskinen@digia.com> 

        Reviewed by Simon Hausmann.

        Reduce heap size on Symbian from 64MB to 8MB.

        This is not a perfect fix, it requires more fine tuning.
        But this makes it possible again to debug in the emulator,
        which is more important in order to be able to fix other
        run-time issues.

        * runtime/Collector.h:

2009-09-30  Janne Koskinen  <janne.p.koskinen@digia.com> 

        Reviewed by Simon Hausmann.

        Fix CRASH() macro for Symbian build.

        * wtf/Assertions.h: Added missing }

2009-09-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin Barraclough.

        Inlined a few math operations.
        
        ~1% SunSpider speedup.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileBinaryArithOpSlowCase):
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emitSlow_op_mul):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emitSlow_op_sub): Don't take a stub call when operating on
        a constant int and a double.

2009-09-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Tidy up codeblock sampler
        https://bugs.webkit.org/show_bug.cgi?id=29836

        Some rather simple refactoring of codeblock sampler so that
        it's easier for us to use it to find problems in non-jsc
        environments

        * JavaScriptCore.exp:
        * bytecode/SamplingTool.h:
        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::enableSampler):
        (JSC::Interpreter::dumpSampleData):
        (JSC::Interpreter::startSampling):
        (JSC::Interpreter::stopSampling):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::sampler):
        * jit/JIT.h:
        * jsc.cpp:
        (runWithScripts):
        * runtime/Completion.cpp:
        (JSC::checkSyntax):
        (JSC::evaluate):
        * runtime/Executable.h:
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::ProgramExecutable::create):
        (JSC::ProgramExecutable::ProgramExecutable):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::startSampling):
        (JSC::JSGlobalData::stopSampling):
        (JSC::JSGlobalData::dumpSampleData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):

2009-09-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add GYP generated files to svn:ignore
        https://bugs.webkit.org/show_bug.cgi?id=29895

        The following files are generated by JavaScriptCore's GYP file and should be ignored:

        pcre.mk
        wtf.scons
        wtf.mk
        SConstruct
        wtf_config.scons
        wtf_config.mk
        pcre.scons

        * JavaScriptCore.gyp: Changed property svn:ignore.

2009-09-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Standardized an optimization for adding non-numbers.
        
        SunSpider says maybe a tiny speedup.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitSlow_op_add):

2009-09-29  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: export a new symbol.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed virtual destructor from JSGlobalObjectData to eliminate pointer
        fix-ups when accessing JSGlobalObject::d.
        
        Replaced with an explicit destructor function pointer.
        
        6% speedup on bench-alloc-nonretained.js.

        * JavaScriptCore.exp:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::~JSGlobalObject):
        (JSC::JSGlobalObject::destroyJSGlobalObjectData):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
        (JSC::JSGlobalObject::JSGlobalObject):

2009-09-29  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by David Kilzer.

        [Qt] Assert messages prints visible in Symbian
        https://bugs.webkit.org/show_bug.cgi?id=29808

        Asserts use vprintf to print the messages to stderr.
        In Symbian Open C it is not possible to see stderr so
        I routed the messages to stdout instead.

        * wtf/Assertions.cpp:

2009-09-29  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Darin Adler.

        [Qt] Symbian CRASH macro implementation

        Added Symbian specific crash macro that
        stops to crash line if JIT debugging is used.
        Additional differentiation of access violation
        (KERN-EXEC 3) and CRASH panic.

        * wtf/Assertions.h:

2009-09-28  Mark Rowe  <mrowe@apple.com>

        Fix the PowerPC build.

        * JavaScriptCore.exp:

2009-09-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Gavin Barraclough.

        <rdar://problem/7195704> JavaScriptCore fails to mark registers when built for x86_64 using LLVM GCC.

        * runtime/Collector.cpp:
        (JSC::Heap::markCurrentThreadConservatively): Force jmp_buf to use the appropriate alignment for a pointer
        to ensure that we correctly interpret the contents of registers during marking.

2009-09-28  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: added new exports.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-28  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: removed exports that no longer exist.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        NotNullPassRefPtr: smart pointer optimized for passing references that are not null
        https://bugs.webkit.org/show_bug.cgi?id=29822
        
        Added NotNullPassRefPtr, and deployed it in all places that initialize
        JavaScript objects.
        
        2.2% speedup on bench-allocate-nonretained.js.

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::JSCallbackConstructor):
        * API/JSCallbackConstructor.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject::JSCallbackObject):
        * JavaScriptCore.exp:
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addFunctionDecl):
        (JSC::CodeBlock::addFunctionExpr):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::ArrayPrototype):
        * runtime/ArrayPrototype.h:
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        * runtime/BooleanConstructor.h:
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        * runtime/BooleanObject.h:
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateConstructor.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DateInstance.h:
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype):
        * runtime/DatePrototype.h:
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/ErrorConstructor.h:
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorInstance.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/ErrorPrototype.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * runtime/FunctionPrototype.h:
        * runtime/GlobalEvalFunction.cpp:
        (JSC::GlobalEvalFunction::GlobalEvalFunction):
        * runtime/GlobalEvalFunction.h:
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::InternalFunction):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        * runtime/JSActivation.h:
        (JSC::JSActivation::JSActivationData::JSActivationData):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSByteArray.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObject):
        * runtime/JSONObject.h:
        (JSC::JSONObject::JSONObject):
        * runtime/JSObject.h:
        (JSC::JSObject::JSObject):
        (JSC::JSObject::setStructure):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::JSVariableObject):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::JSWrapperObject):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/MathObject.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        * runtime/NativeErrorPrototype.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        * runtime/NumberConstructor.h:
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::NumberObject):
        * runtime/NumberObject.h:
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        * runtime/ObjectConstructor.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        * runtime/ObjectPrototype.h:
        * runtime/PropertyNameArray.h:
        (JSC::PropertyNameArrayData::setCachedPrototypeChain):
        * runtime/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * runtime/PrototypeFunction.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        * runtime/RegExpPrototype.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringConstructor.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/StringPrototype.h:
        * wtf/PassRefPtr.h:
        (WTF::NotNullPassRefPtr::NotNullPassRefPtr):
        (WTF::NotNullPassRefPtr::~NotNullPassRefPtr):
        (WTF::NotNullPassRefPtr::get):
        (WTF::NotNullPassRefPtr::clear):
        (WTF::NotNullPassRefPtr::releaseRef):
        (WTF::NotNullPassRefPtr::operator*):
        (WTF::NotNullPassRefPtr::operator->):
        (WTF::NotNullPassRefPtr::operator!):
        (WTF::NotNullPassRefPtr::operator UnspecifiedBoolType):
        * wtf/RefPtr.h:
        (WTF::RefPtr::RefPtr):
        (WTF::operator==):

2009-09-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Hard dependency on SSE2 instruction set with JIT
        https://bugs.webkit.org/show_bug.cgi?id=29779

        Add floating point support checks to op_jfalse and op_jtrue, and
        fix the logic for the slow case of op_add

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_add):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):

2009-09-28  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Dimitri Glazkov.

        Chromium port - recognize we are being built independently
        of chromium and look for dependencies under webkit/chromium rather
        than chromium/src.

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

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2009-09-28  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement XSLT support with QtXmlPatterns.
        https://bugs.webkit.org/show_bug.cgi?id=28303

        * wtf/Platform.h: Add a WTF_USE_QXMLQUERY #define.

2009-09-28  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Remove __clear_cache which is an internal function of GCC
        https://bugs.webkit.org/show_bug.cgi?id=28886

        Although __clear_cache is exported from GCC, this is an internal
        function. GCC makes no promises about it.

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):

2009-09-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix an absolute path to somewhere in Oliver's machine to a relative path
        for derived JSONObject.lut.h.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-09-28  Joerg Bornemann  <joerg.bornemann@nokia.com>

        Reviewed by Simon Hausmann.

        Add ARM version detection for Windows CE.

        * wtf/Platform.h:

2009-09-26  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        Add MarkStackSymbian.cpp to build JavascriptCore for Symbian.

        Re-use Windows shrinkAllocation implementation because Symbian doesn't
        support releasing part of memory region.
        
        Use fastMalloc and fastFree to implement allocateStack and releaseStack
        for Symbian port.

        * JavaScriptCore.pri:
        * runtime/MarkStack.h:
        (JSC::MarkStack::MarkStackArray::shrinkAllocation):
        * runtime/MarkStackSymbian.cpp: Added.
        (JSC::MarkStack::initializePagesize):
        (JSC::MarkStack::allocateStack):
        (JSC::MarkStack::releaseStack):

2009-09-25  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Fix unaligned data access in YARR_JIT on ARMv5 and below.
        https://bugs.webkit.org/show_bug.cgi?id=29695

        On ARMv5 and below all data access should be naturally aligned.
        In the YARR_JIT there is a case when character pairs are
        loaded from the input string, but this data access is not
        naturally aligned. This fix introduces load32WithUnalignedHalfWords
        and branch32WithUnalignedHalfWords functions which contain
        naturally aligned memory loads - half word loads - on ARMv5 and below.

        * assembler/MacroAssemblerARM.cpp:
        (JSC::MacroAssemblerARM::load32WithUnalignedHalfWords):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::load32WithUnalignedHalfWords):
        (JSC::MacroAssemblerARM::branch32WithUnalignedHalfWords):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::load32WithUnalignedHalfWords):
        (JSC::MacroAssemblerARMv7::branch32):
        (JSC::MacroAssemblerARMv7::branch32WithUnalignedHalfWords):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::load32WithUnalignedHalfWords):
        (JSC::MacroAssemblerX86Common::branch32WithUnalignedHalfWords):
        * wtf/Platform.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generatePatternCharacterPair):

2009-09-25  Jeremy Orlow  <jorlow@chromium.org>

        This is breaking Chromium try bots, so I'm counting this as a build fix.

        Add more svn:ignore exceptions.  On different platforms, these files are
        generated with different case for JavaScriptCore.  Also there are some
        wtf project files that get built apparently.

        * JavaScriptCore.gyp: Changed property svn:ignore.

2009-09-25  Ada Chan  <adachan@apple.com>

        Build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Inlined some object creation code, including lexicalGlobalObject access
        https://bugs.webkit.org/show_bug.cgi?id=29750
        
        SunSpider says 0.5% faster.
        
        0.8% speedup on bench-alloc-nonretained.js.
        2.5% speedup on v8-splay.js.

        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall):
        * interpreter/CallFrame.h:
        (JSC::ExecState::lexicalGlobalObject):
        (JSC::ExecState::globalThisValue):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::dumpRegisters):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::ScopeChainNode):
        (JSC::ScopeChainNode::~ScopeChainNode):
        (JSC::ScopeChainNode::push):
        (JSC::ScopeChain::ScopeChain):
        (JSC::ScopeChain::globalObject): Added a globalObject data member to ScopeChainNode.
        Replaced accessor function for globalObject() with data member. Replaced
        globalThisObject() accessor with direct access to globalThis, to match.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObject.h: Inlined array and object construction.

2009-09-25  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Gavin Barraclough.

        Add ARM version detection rules for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=29715

        * wtf/Platform.h:

2009-09-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark "Do It!" Rowe.

        Some GCC versions don't like C++-style comments in preprocessor
        directives, change to C-style to shut them up.

        * wtf/Platform.h:

2009-09-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Division is needlessly slow in 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=29723

        Add codegen for op_div on x86-64

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileBinaryArithOpSlowCase):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emitSlow_op_div):
        * jit/JITInlineMethods.h:
        (JSC::JIT::isOperandConstantImmediateDouble):
        (JSC::JIT::addressFor):
        (JSC::JIT::emitLoadDouble):
        (JSC::JIT::emitLoadInt32ToDouble):
        (JSC::JIT::emitJumpSlowCaseIfNotImmediateNumber):

2009-09-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add GYP generated files to svn:ignore
        https://bugs.webkit.org/show_bug.cgi?id=29724

        Adding the following files to the svn:ignore list (all in the
        JavaScriptCore/JavaScriptCore.gyp directory)

        JavaScriptCore.xcodeproj
        JavaScriptCore.sln
        JavaScriptCore.vcproj
        JavaScriptCore_Debug.rules
        JavaScriptCore_Release.rules
        JavaScriptCore_Release - no tcmalloc.rules
        JavaScriptCore_Purify.rules
        JavaScriptCore.mk
        JavaScriptCore_Debug_rules.mk
        JavaScriptCore_Release_rules.mk
        JavaScriptCore_Release - no tcmalloc_rules.mk
        JavaScriptCore_Purify_rules.mk
        JavaScriptCore.scons
        JavaScriptCore_main.scons

        * JavaScriptCore.gyp: Changed property svn:ignore.

2009-09-24  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Barth.

        Replace platform-dependent code with WTF::currentTime()
        https://bugs.webkit.org/show_bug.cgi?id=29148

        * jsc.cpp:
        (StopWatch::start):
        (StopWatch::stop):
        (StopWatch::getElapsedMS):
        * runtime/TimeoutChecker.cpp:
        (JSC::getCPUTime):

2009-09-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7215058> FastMalloc scavenging thread should be named

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::scavengerThread): Set the thread name.
        * wtf/Platform.h: Move the knowledge of whether pthread_setname_np exists to here as HAVE(PTHREAD_SETNAME_NP).
        * wtf/ThreadingPthreads.cpp:
        (WTF::setThreadNameInternal): Use HAVE(PTHREAD_SETNAME_NP).

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Renamed clear to removeAll, as suggested by Darin Adler.

        * wtf/HashCountedSet.h:
        (WTF::::removeAll):

2009-09-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Gavin Barraclough.

        Fix FastMalloc to build with assertions enabled.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_Central_FreeList::ReleaseToSpans):
        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::IsHeld):

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        Suggested by Darin Adler.

        Removed some unnecessary parameter names.

        * wtf/HashCountedSet.h:

2009-09-24  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        On Windows JSChar is typedef'ed to wchar_t.

        When building with WINSCW for Symbian we need to do the
        same typedef.

        * API/JSStringRef.h:

2009-09-23  Geoffrey Garen  <ggaren@apple.com>

        A piece of my last patch that I forgot.

        * wtf/HashCountedSet.h:
        (WTF::::clear): Added HashCountedSet::clear.

2009-09-24  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Avoid __clear_cache built-in function if DISABLE_BUILTIN_CLEAR_CACHE define is set
        https://bugs.webkit.org/show_bug.cgi?id=28886

        There are some GCC packages (for example GCC-2006q3 from CodeSourcery)
        which contain __clear_cache built-in function only for C while the C++
        version of __clear_cache is missing on ARM architectures.

        Fixed a small bug in the inline assembly of cacheFlush function on
        ARM_TRADITIONAL.

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):

2009-09-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Added the ability to swap vectors with inline capacities, so you can
        store a vector with inline capacity in a hash table.

        * wtf/Vector.h:
        (WTF::swap):
        (WTF::VectorBuffer::swap):

2009-09-23  David Kilzer  <ddkilzer@apple.com>

        Move definition of USE(PLUGIN_HOST_PROCESS) from WebKitPrefix.h to Platform.h

        Reviewed by Mark Rowe.

        * wtf/Platform.h: Define WTF_USE_PLUGIN_HOST_PROCESS to 1 when
        building on 64-bit SnowLeopard.  Define to 0 elsewhere.

2009-09-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Code sampling builds are broken.
        https://bugs.webkit.org/show_bug.cgi?id=29662

        Fix build.

        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):
        * bytecode/SamplingTool.cpp:
        (JSC::ScriptSampleRecord::sample):
        (JSC::SamplingTool::doRun):
        (JSC::SamplingTool::notifyOfScope):
        (JSC::compareScriptSampleRecords):
        (JSC::SamplingTool::dump):
        * bytecode/SamplingTool.h:
        (JSC::ScriptSampleRecord::ScriptSampleRecord):
        (JSC::ScriptSampleRecord::~ScriptSampleRecord):
        (JSC::SamplingTool::SamplingTool):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitNewFunction):
        (JSC::BytecodeGenerator::emitNewFunctionExpression):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::makeFunction):
        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * parser/Nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        * runtime/Completion.cpp:
        (JSC::checkSyntax):
        (JSC::evaluate):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/Executable.h:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::EvalExecutable::create):
        (JSC::ProgramExecutable::ProgramExecutable):
        (JSC::FunctionExecutable::create):
        (JSC::FunctionExecutable::FunctionExecutable):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):

2009-09-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        * wtf/Forward.h: Added PassOwnPtr.

2009-09-22  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by David Levin.

        Ported chromium.org's javascriptcore.gyp for the webkit chromium port.

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

        * JavaScriptCore.gyp/JavaScriptCore.gyp: Added.

2009-09-22  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Fix compilation with WINSCW: no varargs macros

        Disable variadic arguments for WINSCW just like we do
        for MSVC7.

        * wtf/Assertions.h:

2009-09-22  Kent Hansen  <khansen@trolltech.com>

        Reviewed by Simon Hausmann.

        Disable variadic macros on MSVC7.

        This was originally added in r26589 but not extended
        when LOG_DISABLED/ASSERT_DISABLED was introduced.

        * wtf/Assertions.h:

2009-09-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed build fix for Windows CE < 5

        Define WINCEBASIC to disable the IsDebuggerPresent() code in
        wtf/Assertions.cpp.

        * JavaScriptCore.pri:

2009-09-22  Joerg Bornemann  <joerg.bornemann@nokia.com>

        Reviewed by Simon Hausmann.

        Fix major memory leak in JavaScriptCore RegisterFile on Windows CE

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

        On Widows CE we must decommit all committed pages before we release
        them. See VirtualFree documentation.
        Desktop Windows behaves much smoother in this situation.

        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::~RegisterFile):

2009-09-21  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser & Sam Weinig.

        Add ENABLE(ORIENTATION_EVENTS)
        https://bugs.webkit.org/show_bug.cgi?id=29508

        * wtf/Platform.h: Also sort PLATFORM(IPHONE) #defines.

2009-09-21  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Eric Seidel.

        [Fix] SourceCode's uninitialized member
        
        Potential source of crashes and bugs was fixed. Default constructor
        didn't initialized m_provider member.

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

        * parser/SourceCode.h:
        (JSC::SourceCode::SourceCode):

2009-09-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        REGRESSION (r48582): Crash in StructureStubInfo::initPutByIdTransition when reloading trac.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=29599

        It is unsafe to attempt to cache new property transitions on
        dictionaries of any type.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCachePutByID):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):

2009-09-21  Oliver Hunt  <oliver@apple.com>

        RS=Maciej Stachowiak.

        Re-land SNES fix with corrected assertion.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::tryCachePutByID):
        (JSC::Interpreter::tryCacheGetByID):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
        * runtime/JSObject.cpp:
        (JSC::JSObject::removeDirect):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::getEnumerablePropertyNames):
        (JSC::Structure::despecifyDictionaryFunction):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::removePropertyTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::toCacheableDictionaryTransition):
        (JSC::Structure::toUncacheableDictionaryTransition):
        (JSC::Structure::fromDictionaryTransition):
        (JSC::Structure::removePropertyWithoutTransition):
        * runtime/Structure.h:
        (JSC::Structure::isDictionary):
        (JSC::Structure::isUncacheableDictionary):
        (JSC::Structure::):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::isCacheable):

2009-09-21  Adam Roben  <aroben@apple.com>

        Revert r48573, as it caused many assertion failures

        * interpreter/Interpreter.cpp:
        * jit/JITStubs.cpp:
        * runtime/BatchedTransitionOptimizer.h:
        * runtime/JSObject.cpp:
        * runtime/Structure.cpp:
        * runtime/Structure.h:
        * runtime/StructureChain.cpp:

2009-09-21  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed make dist build fix. Missing files.

        * GNUmakefile.am:

2009-09-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam 'Cabin Boy' Weinig.

        Fix stack alignment with ARM THUMB2 JIT.
        https://bugs.webkit.org/show_bug.cgi?id=29526
        
        Stack is currently being decremented by 0x3c, bump this to 0x40 to make this a
        multiple of 16 bytes.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        * jit/JITStubs.h:

2009-09-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        SNES is too slow
        https://bugs.webkit.org/show_bug.cgi?id=29534

        The problem was that the emulator used multiple classes with
        more properties than our dictionary cutoff allowed, this resulted
        in more or less all critical logic inside the emulator requiring
        uncached property access.

        Rather than simply bumping the dictionary cutoff, this patch
        recognises that there are two ways to create a "dictionary"
        structure.  Either by adding a large number of properties, or
        by removing a property.  In the case of adding properties we
        know all the existing properties will maintain their existing
        offsets, so we could cache access to those properties, if we
        know they won't be removed.

        To make this possible, this patch adds the logic required to
        distinguish a dictionary created by addition from one created
        by removal.  With this logic in place we can now cache access
        to objects with large numbers of properties.

        SNES performance improved by more than 6x.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::tryCachePutByID):
        (JSC::Interpreter::tryCacheGetByID):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
        * runtime/JSObject.cpp:
        (JSC::JSObject::removeDirect):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::getEnumerablePropertyNames):
        (JSC::Structure::despecifyDictionaryFunction):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::removePropertyTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::toCacheableDictionaryTransition):
        (JSC::Structure::toUncacheableDictionaryTransition):
        (JSC::Structure::fromDictionaryTransition):
        (JSC::Structure::removePropertyWithoutTransition):
        * runtime/Structure.h:
        (JSC::Structure::isDictionary):
        (JSC::Structure::isUncacheableDictionary):
        (JSC::Structure::):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::isCacheable):

2009-09-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Implement ES5 Object.create function
        https://bugs.webkit.org/show_bug.cgi?id=29524

        Implement Object.create.  Very simple patch, effectively Object.defineProperties
        only creating the target object itself.

        * runtime/CommonIdentifiers.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConstructorCreate):

2009-09-19  Dan Bernstein  <mitz@apple.com>

        Fix clean debug builds.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-19  Joerg Bornemann  <joerg.bornemann@nokia.com>

        Reviewed by George Staikos.

        QtWebKit Windows CE compile fix

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

        There is no _aligned_alloc or _aligned_free on Windows CE.
        We just use the Windows code that was there before and use VirtualAlloc.
        But that also means that the BLOCK_SIZE must be 64K as this function
        allocates on 64K boundaries.

        * runtime/Collector.cpp:
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlock):
        * runtime/Collector.h:

2009-09-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Implement ES5 Object.defineProperties function
        https://bugs.webkit.org/show_bug.cgi?id=29522

        Implement Object.defineProperties.  Fairly simple patch, simply makes use of
        existing functionality used for defineProperty.

        * runtime/CommonIdentifiers.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::defineProperties):
        (JSC::objectConstructorDefineProperties):

2009-09-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Windows build fix part2

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Buildfix).

        Windows build fix part 1.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Implement ES5 Object.defineProperty function
        https://bugs.webkit.org/show_bug.cgi?id=29503

        Implement Object.defineProperty.  This requires adding the API to
        ObjectConstructor, along with a helper function that implements the
        ES5 internal [[ToPropertyDescriptor]] function.  It then adds
        JSObject::defineOwnProperty that implements the appropriate ES5 semantics.
        Currently defineOwnProperty uses a delete followed by a put to redefine
        attributes of a property, clearly this is less efficient than it could be
        but we can improve this if it needs to be possible in future.

        * JavaScriptCore.exp:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::defineGetter):
        (JSC::DebuggerActivation::defineSetter):
        * debugger/DebuggerActivation.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
          Update defineGetter/Setter calls
        * runtime/CommonIdentifiers.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlot):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::defineGetter):
        (JSC::JSGlobalObject::defineSetter):
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        (JSC::toPropertyDescriptor):
        (JSC::objectConstructorDefineProperty):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::writable):
        (JSC::PropertyDescriptor::enumerable):
        (JSC::PropertyDescriptor::configurable):
        (JSC::PropertyDescriptor::isDataDescriptor):
        (JSC::PropertyDescriptor::isGenericDescriptor):
        (JSC::PropertyDescriptor::isAccessorDescriptor):
        (JSC::PropertyDescriptor::getter):
        (JSC::PropertyDescriptor::setter):
        (JSC::PropertyDescriptor::setDescriptor):
        (JSC::PropertyDescriptor::setAccessorDescriptor):
        (JSC::PropertyDescriptor::setWritable):
        (JSC::PropertyDescriptor::setEnumerable):
        (JSC::PropertyDescriptor::setConfigurable):
        (JSC::PropertyDescriptor::setSetter):
        (JSC::PropertyDescriptor::setGetter):
        (JSC::PropertyDescriptor::equalTo):
        (JSC::PropertyDescriptor::attributesEqual):
        (JSC::PropertyDescriptor::attributesWithOverride):
        * runtime/PropertyDescriptor.h:
        (JSC::PropertyDescriptor::PropertyDescriptor):
        (JSC::PropertyDescriptor::value):
        (JSC::PropertyDescriptor::setValue):
        (JSC::PropertyDescriptor::isEmpty):
        (JSC::PropertyDescriptor::writablePresent):
        (JSC::PropertyDescriptor::enumerablePresent):
        (JSC::PropertyDescriptor::configurablePresent):
        (JSC::PropertyDescriptor::setterPresent):
        (JSC::PropertyDescriptor::getterPresent):
        (JSC::PropertyDescriptor::operator==):
        (JSC::PropertyDescriptor::):

2009-09-18  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Build fix to enable ARM_THUMB2 on Linux
        https://bugs.webkit.org/show_bug.cgi?id=

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):
        * jit/JITStubs.cpp:
        * wtf/Platform.h:

2009-09-18  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Defines two pseudo-platforms for ARM and Thumb-2 instruction set.
        https://bugs.webkit.org/show_bug.cgi?id=29122

        Introduces WTF_PLATFORM_ARM_TRADITIONAL and WTF_PLATFORM_ARM_THUMB2
        macros on ARM platforms. The PLATFORM(ARM_THUMB2) should be used
        when Thumb-2 instruction set is the required target. The
        PLATFORM(ARM_TRADITIONAL) is for generic ARM instruction set. In
        case where the code is common the PLATFORM(ARM) have to be used.

        * assembler/ARMAssembler.cpp:
        * assembler/ARMAssembler.h:
        * assembler/ARMv7Assembler.h:
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerARM.cpp:
        * assembler/MacroAssemblerARM.h:
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
        * jit/ExecutableAllocator.h:
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::beginUninterruptedSequence):
        (JSC::JIT::preserveReturnAddressAfterCall):
        (JSC::JIT::restoreReturnAddressBeforeReturn):
        (JSC::JIT::restoreArgumentReference):
        (JSC::JIT::restoreArgumentReferenceForTrampoline):
        * jit/JITOpcodes.cpp:
        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        * jit/JITStubs.h:
        * wtf/Platform.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateEnter):

2009-09-18  Joerg Bornemann  <joerg.bornemann@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Qt/Windows CE build.

        * JavaScriptCore.pri: Build the ce_time.cpp functions from
        within Qt externally.
        * wtf/DateMath.cpp: Removed unnecessary Qt #ifdef, for the
        Qt build these functions are no external, too.

2009-09-17  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        Symbian/WINSCW build fox.

        Repeat Q_OS_WIN wchar_t hack for WINSCW, similar to
        revision 24774.

        WINSCW defines wchar_t, thus UChar has to be wchar_t

        * wtf/unicode/qt4/UnicodeQt4.h:

2009-09-17  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        Symbian/WINSCW build fix.

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

        WINSCW Template specialisation name in declaration must the be the same as in implementation.

        * runtime/LiteralParser.h:

2009-09-15  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Darin Adler.

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

        Symbian compiler for emulator target (WINSCW) fails with
        "illegal operand" for m_attributesInPrevious in structure.ccp
        (when calling make_pair functions).
        This error is apparently due to the compiler not properly
        resolving the unsigned type of the declared bitfield.

        Initial patch explicitly casted m_attributesInPrevious
        to unsigned, but since bitfield optimization is not critical for
        the emulator target, this conditional change in header file
        appears to be least intrusive.

        * runtime/Structure.h:

2009-09-16  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Fix GCC warnings on ARM_THUMB2 platform

        * assembler/ARMv7Assembler.h:
        (JSC::ARMThumbImmediate::countLeadingZerosPartial):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branchTruncateDoubleToInt32):
        (JSC::MacroAssemblerARMv7::moveFixedWidthEncoding):

2009-09-16  Greg Bolsinga  <bolsinga@apple.com>

        Add ENABLE(INSPECTOR)
        https://bugs.webkit.org/show_bug.cgi?id=29260

        Reviewed by David Kilzer.

        * wtf/Platform.h:

2009-09-16  Greg Bolsinga  <bolsinga@apple.com>

        Add ENABLE(CONTEXT_MENUS)
        https://bugs.webkit.org/show_bug.cgi?id=29225

        Reviewed by David Kilzer.

        * wtf/Platform.h:

2009-09-16  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Eric Seidel.

        The webkit stdint and stdbool headers exists because
        the compiler MSVC doesn't include them.  The check
        should not check for PLATFORM(WIN_OS) but for MSVC.

        * os-win32/stdbool.h:
        * os-win32/stdint.h:

2009-09-16  Greg Bolsinga  <bolsinga@apple.com>

        Add ENABLE(DRAG_SUPPORT)
        https://bugs.webkit.org/show_bug.cgi?id=29233

        Reviewed by David Kilzer.

        * wtf/Platform.h:

2009-09-16  Kevin Ollivier  <kevino@theolliviers.com>

        waf build fix after flag was moved to correct place.

        * wscript:

2009-09-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Build fix for 64-bit Qt on Mac OS X

        * wtf/Platform.h: Use JSVALUE64 on DARWIN, not only on MAC

2009-09-16  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Fix wtf/ThreadSpecific.h under Qt to free thread local objects.
        https://bugs.webkit.org/show_bug.cgi?id=29295

        This is an important fix when JavaScript workers are in use, since
        unfreed ThreadGlobalDatas leak a big amount of memory (50-100k each).
        QThreadStorage calls the destructor of a given object, which is the
        ThreadSpecific::Data. Unlike pthread, Qt is object oriented, and does
        not support the calling of a static utility function when the thread
        is about to close. In this patch we call the ThreadSpecific::destroy()
        utility function from the destructor of ThreadSpecific::Data. Moreover,
        since Qt resets all thread local values to 0 before the calling of the
        appropriate destructors, we set back the pointer to its original value.
        This is necessary because the get() method of the ThreadSpecific
        object may be called during the exuction of the destructor.

        * wtf/ThreadSpecific.h:
        (WTF::ThreadSpecific::Data::~Data):
        (WTF::::~ThreadSpecific):
        (WTF::::set):
        (WTF::::destroy):

2009-09-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Allow anonymous storage inside JSObject
        https://bugs.webkit.org/show_bug.cgi?id=29168

        Add the concept of anonymous slots to Structures so that it is
        possible to store references to values that need marking in the
        standard JSObject storage buffer.  This allows us to reduce the
        malloc overhead of some objects (by allowing them to store JS
        values in the inline storage of the object) and reduce the 
        dependence of custom mark functions (if all an objects children
        are in the standard object property storage there's no need to
        mark them manually).

        * JavaScriptCore.exp:
        * runtime/JSObject.h:
        (JSC::JSObject::putAnonymousValue):
        (JSC::JSObject::getAnonymousValue):
        (JSC::JSObject::addAnonymousSlots):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::createStructure):
        (JSC::JSWrapperObject::JSWrapperObject):
        (JSC::JSWrapperObject::setInternalValue):
        * runtime/PropertyMapHashTable.h:
        * runtime/Structure.cpp:
        (JSC::Structure::~Structure):
        (JSC::Structure::materializePropertyMap):
        (JSC::Structure::addAnonymousSlotsTransition):
        (JSC::Structure::copyPropertyTable):
        (JSC::Structure::put):
        (JSC::Structure::rehashPropertyMapHashTable):
        * runtime/Structure.h:
        (JSC::Structure::propertyStorageSize):
        (JSC::StructureTransitionTable::reifySingleTransition):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::TransitionTable::addSlotTransition):
        (JSC::StructureTransitionTable::TransitionTable::removeSlotTransition):
        (JSC::StructureTransitionTable::TransitionTable::getSlotTransition):
        (JSC::StructureTransitionTable::getAnonymousSlotTransition):
        (JSC::StructureTransitionTable::addAnonymousSlotTransition):
        (JSC::StructureTransitionTable::removeAnonymousSlotTransition):

2009-09-15  Alex Milowski  <alex@milowski.com>

        Reviewed by Tor Arne Vestbø.

        Added the ENABLE_MATHML define to the features

        * Configurations/FeatureDefines.xcconfig:

2009-09-15 Csaba Osztrogonac <oszi@inf.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Build fix for windows.

        After http://trac.webkit.org/changeset/47795 the MinGW build broke,
        because MinGW has __mingw_aligned_malloc instead of _aligned_malloc.

        * runtime/Collector.cpp:
        (JSC::Heap::allocateBlock): MinGW case added.
        (JSC::Heap::freeBlock): MinGW case added.

2009-09-15  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Build fix for Windows/MinGW

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

        * wtf/Platform.h: JSVALUE32_64 temporarily disabled on PLATFORM(WIN_OS) with COMPILER(MINGW)

2009-09-14  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Detect VFP at runtime in generic ARM port on Linux platform.
        https://bugs.webkit.org/show_bug.cgi?id=29076

        * JavaScriptCore.pri:
        * assembler/MacroAssemblerARM.cpp: Added.
        (JSC::isVFPPresent):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::supportsFloatingPoint):

2009-09-14  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Build fix for windows build.

        * JavaScriptCore.pri: Correct a logic error.
        * pcre/dftables: Add missing paranthesis for tmpdir function.

2009-09-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Build fix for windows exports (again).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Build fix for windows exports.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Correct fix for non-allinonefile builds

        * runtime/ObjectConstructor.cpp:

2009-09-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Fix non-allinonefile builds

        * runtime/ObjectConstructor.cpp:

2009-09-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        [ES5] Implement Object.keys
        https://bugs.webkit.org/show_bug.cgi?id=29170

        This patch basically requires two separate steps, the first is to split getPropertyNames
        into two functions -- getOwnPropertyNames and getPropertyNames, basically making them behave
        in the same way as getOwnPropertySlot and getPropertySlot.  In essence getOwnPropertyNames
        produces the list of properties on an object excluding its prototype chain and getPropertyNames
        just iterates the the object and its prototype chain calling getOwnPropertyNames at each level.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertyNames):
        * JavaScriptCore.exp:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::getOwnPropertyNames):
        * debugger/DebuggerActivation.h:
        * runtime/CommonIdentifiers.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertyNames):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertyNames):
        * runtime/JSByteArray.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::getOwnPropertyNames):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertyNames):
        * runtime/JSObject.h:
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::getOwnPropertyNames):
        * runtime/JSVariableObject.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConstructorKeys):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertyNames):
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertyNames):
        * runtime/StringObject.h:
        * runtime/Structure.cpp:
        (JSC::Structure::getOwnEnumerablePropertyNames):
        (JSC::Structure::getEnumerablePropertyNames):
        * runtime/Structure.h:

2009-09-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        getPropertyNames caching is invalid when the prototype chain contains objects with custom getPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=29214

        Add a flag to TypeInfo to indicate whether a type overrides getPropertyNames.
        This flag is used to make sure that caching of the property name data is safe.

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::createStructure):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.h:
        (JSC::JSObject::createStructure):
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::hasDefaultGetPropertyNames):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::createStructure):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::createStructure):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::isCacheable):

2009-09-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=29207
        Add checks for using WebCore JS context on secondary threads

        * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        Added a new mainThreadOnly flag that WebCore would set.

        * runtime/Collector.cpp: (JSC::Heap::registerThread): JSC API methods always call this,
        so this is a good place to check that the API isn't used form a wrong thread.

2009-09-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        Compiling JavaScriptCore on sparc 64 with gcc fails.

        ThreadSafeShared uses the atomic __gnu_cxx::__exchange_and_add with an int,
        however on sparc 64 the _Atomic_word argument is typedefed to long (8 bytes).

        The patch disables WTF_USE_LOCKFREE_THREADSAFESHARED in ThreadSafeShared to use
        a mutex instead when compiling for sparc 64 with gcc.

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

        * wtf/Platform.h:
        __sparc64__ is not defined on all OS.
        Uses instead: __sparc__ && __arch64__ || __sparcv9
        * wtf/Threading.h:

2009-09-11  Prasanth Ullattil  <prasanth.ullattil@nokia.com>

        Reviewed by Simon Hausmann.

        Fix compile error on Windows7(64Bit) with latest SDK.

        Added the missing include file.

        * runtime/UString.cpp:

2009-09-11  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon Hausmann.

        Qt/Windows CE compile fix, include the executable allocator and
        markstack implementation in the windows build.

        * JavaScriptCore.pri:

2009-09-08  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Dimitri Glazkov.

        Remove unneeded define for ActiveX.
        https://bugs.webkit.org/show_bug.cgi?id=29054

        * wtf/Platform.h:

2009-09-10  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Update JavaScriptCore and WebKit's FeatureDefines.xcconfig so that they are in sync with WebCore as they need to be.

        * Configurations/FeatureDefines.xcconfig:

2009-09-10  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Export WTF::tryFastMalloc used in WebSocketChannel.
        https://bugs.webkit.org/show_bug.cgi?id=28038

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Make StructureTransitionTable use an enum for the PtrAndFlags member
        used for the single transition slot optimisation.

        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::StructureTransitionTable):
        (JSC::StructureTransitionTable::usingSingleTransitionSlot):
        (JSC::StructureTransitionTable::):

2009-09-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Refactor StructureTransitionTable and Structure to unify handling of the single slot optimization
        https://bugs.webkit.org/show_bug.cgi?id=29141

        Make StructureTransitionTable encapsulate the single transition slot optimization.

        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::~Structure):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::removePropertyWithoutTransition):
        (JSC::Structure::hasTransition):
        * runtime/Structure.h:
        (JSC::StructureTransitionTable::contains):
        (JSC::StructureTransitionTable::get):
        (JSC::StructureTransitionTable::hasTransition):
        (JSC::StructureTransitionTable::reifySingleTransition):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::StructureTransitionTable):
        (JSC::StructureTransitionTable::~StructureTransitionTable):
        (JSC::StructureTransitionTable::remove):
        (JSC::StructureTransitionTable::add):
        (JSC::StructureTransitionTable::table):
        (JSC::StructureTransitionTable::singleTransition):
        (JSC::StructureTransitionTable::usingSingleTransitionSlot):
        (JSC::StructureTransitionTable::setSingleTransition):
        (JSC::StructureTransitionTable::setTransitionTable):
        (JSC::StructureTransitionTable::):
        * wtf/PtrAndFlags.h:
        (WTF::PtrAndFlags::PtrAndFlags):

2009-09-10  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Implement fastDeleteSkippingDestructor for FastAllocBase and fastDeleteAllValues for HashSet
        https://bugs.webkit.org/show_bug.cgi?id=25930

        FastAllocBase has been extended with fastDeleteSkippingDestructor function which
        releases memory without destructor call. fastDeleteAllValues has been implemented 
        similar as deleteAllValues but it uses fastDelete function to release memory.

        * wtf/FastAllocBase.h:
        (WTF::fastDeleteSkippingDestructor):
        * wtf/HashSet.h:
        (WTF::fastDeleteAllValues):

2009-09-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        ARM compiler does not understand GCC visibility attribute
        https://bugs.webkit.org/show_bug.cgi?id=29079

        * API/JSBase.h: Make the test more specific to hit only
        the GCC compiler

2009-09-10  Adam Barth  <abarth@webkit.org>

        Unreviewed revert of the previous change.  It broke the tests.

        * wtf/dtoa.cpp:
        (WTF::dtoa):

2009-09-10  Ben Laurie  <benl@google.com>

        Reviewed by Adam Barth.

        <https://bugs.webkit.org/show_bug.cgi?id=26836>

        If dtoa was given a small buffer and the number was either infinite or
        NaN, then the buffer would be overflowed.

        * wtf/dtoa.cpp:

2009-09-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Change reinterpret_cast to static_cast in r48212.

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):

2009-09-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Remove WTF_PLATFORM_FORCE_PACK as it is no longer used
        https://bugs.webkit.org/show_bug.cgi?id=29066

        * wtf/Platform.h:

2009-09-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

        Implement flushing the instruction cache for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=29075

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush): Call IMB_Range to flush
        the instruction cache on Symbian

2009-09-09  Kent Hansen  <khansen@trolltech.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=29024
        Make JavaScriptCore compile on platforms with case-insensitive file systems and typeinfo.h in STL

        These platforms include Microsoft Visual Studio 2003, and Symbian with Metrowerks compiler.

        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSTypeInfo.h: Copied from JavaScriptCore/runtime/TypeInfo.h.
        * runtime/Structure.h:
        * runtime/TypeInfo.h: Removed.

2009-09-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        JSON.stringify(Date) loses the milliseconds information
        https://bugs.webkit.org/show_bug.cgi?id=29063

        Make sure we include milliseconds in the output of toISOString.

        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToISOString):

2009-09-08  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, generate derived sources earlier in order to make sure
        they're found by the build system when generating the list of sources to build.

        * wscript:

2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        Build fix when USE(LOCKFREE_THREADSAFESHARED) is not defined
        https://bugs.webkit.org/show_bug.cgi?id=29011

        * wtf/Threading.h: Use LOCKFREE_THREADSAFESHARED guard for 
        atomicIncrement and atomicDecrement

2009-09-07  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control in Yarr's RegexInterpreter
        https://bugs.webkit.org/show_bug.cgi?id=29025

        Inherits RegexInterpreter classes from FastAllocBase (bug #20422), which has
        been instantiated by 'new':

        class ByteDisjunction
        -> instantiated in JavaScriptCore/yarr/RegexInterpreter.cpp:1462

        struct BytecodePattern
        -> instantiated in JavaScriptCore/yarr/RegexInterpreter.cpp:1279

        * yarr/RegexInterpreter.h:

2009-09-07  Drew Wilson  <atwilson@google.com>

        Reverting r48121 to fix Windows build errors.

        * JavaScriptCore.exp:

2009-09-07  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Enable SHARED_WORKERS by default
        https://bugs.webkit.org/show_bug.cgi?id=28959

        * Configurations/FeatureDefines.xcconfig:

2009-09-07  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Export WTF::tryFastMalloc used in WebSocketChannel.
        https://bugs.webkit.org/show_bug.cgi?id=28038

        * JavaScriptCore.exp:

2009-09-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Fix windows export files

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-09-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [[ToString]] conversion should use the actual toString function for String objects.

        Remove incorrect specialisations of toString conversions on StringObject.

        * JavaScriptCore.exp:
        * runtime/StringObject.cpp:
        * runtime/StringObject.h:

2009-09-04  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Add new export.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Add new export.

2009-09-04  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove unneeded export.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Remove unneeded export.

2009-09-04  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        DateInstance object collected on ARM JIT (JSValue: WTF_USE_JSVALUE32)
        https://bugs.webkit.org/show_bug.cgi?id=28909

        Part two.

        Make some improvements to garbage collection code:

            1) Create a runtime assertion that catches any classes that
               override markChildren but have the HasDefaultMark bit set.
            2) Remove checks of the mark bit outside the MarkStack::append
               function; they are redundant.
            3) Improve the efficiency of the asObject and asArray functions
               when called on JSCell* to avoid a round trip to JSValue.
            4) Make more callers use the checked asCell and asObject
               casting functions rather than unchecked casts.
            5) Removed the JSCell::marked function and other GC-related
               functions because these operations are no longer things that
               code other than the core GC code needs to do directly. Fixed
               callers that were calling them.

        * runtime/Collector.cpp:
        (JSC::Heap::markConservatively): Removed unneeded call to MarkStack::drain.
        (JSC::Heap::markProtectedObjects): Removed unneeded check of the mark
        bit and call to MarkStack::drain.
        (JSC::Heap::collect): Removed unneeded checks of the mark bit and also
        changed call to SmallStrings::mark to call markChildren instead to match
        the rest of the objects.
        (JSC::typeName): Removed unneeded cast to JSObject*.

        * runtime/JSArray.h:
        (JSC::asArray): Added an overload for JSCell* and changed the JSValue
        version to call it. Removed some unneeded casts.
        (JSC::JSArray::markChildrenDirect): Marked this function inline. It's in
        a header, and if not marked inline this could lead to linking problems.
        (JSC::MarkStack::markChildren): Added. This helper function is used by
        the drain function to avoid repating code. Also added the code here to
        check fro default mark violations in debug code. If a markChildren
        function adds something to the mark stack, but the type info claimed
        hasDefaultMark was true, then we will get an assertion now. Also fixed
        the assertion about the mark bit to use the Heap function directly
        because we don't have a JSCell::marked function any more.
        (JSC::MarkStack::drain): Changed a local variable from "v" to "value",
        and from "currentCell" to "cell". Changed to call markChildren in two
        places instead of repeating a chain of if statements twice. Changed
        code that reads and writes the mark bit to use Heap::isCellMarked and
        Heap::markCell so we can eliminate the JSCell::marked and
        JSCell::markCellDirect functions.

        * runtime/JSCell.h: Removed JSCell's markCellDirect and marked member
        functions. Added a comment explaining that asCell should be deprecated
        in favor of the JSValue asCell member function.
        (JSC::MarkStack::append): Added the assertion that catches callers
        that have set the HasDefaultMark bit incorrectly. Changed
        code that reads and writes the mark bit to use Heap::isCellMarked and
        Heap::markCell so we can eliminate the JSCell::marked and
        JSCell::markCellDirect functions. Moved the overload of
        MarkStack::append for JSValue here so it can call through to the cell
        version. The old version had a copy of all the code instead, but that
        repeated the conversion from JSValue to JSCell* and the check for
        whether a value is a cell multiple times.
        (JSC::Structure::markAggregate): Moved this function here to avoid
        dependencies for Structure.h, since this calls MarkStack::append.

        * runtime/JSObject.cpp:
        (JSC::JSObject::markChildren): Added code to clear
        m_isCheckingForDefaultMarkViolation so the marking done by JSObject
        doesn't trigger the assertion.

        * runtime/JSValue.h: Moved some stray includes that were outside the
        header guard inside it. Not sure how that happened! Removed the
        GC-related member functions markChildren, hasChildren, marked, and
        markDirect.

        * runtime/JSWrapperObject.h: Made markChildren private.
        (JSC::JSWrapperObject::createStructure): Added. Fixes a bug where the
        HasDefaultMark bit was set.

        * runtime/MarkStack.h: Added m_isCheckingForDefaultMarkViolation and
        initialized it to false. Moved the append function body from here to
        JSCell.h. Added a declaration of a private markChildren function used
        inside the drain function.

        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::markChildren): Changed the name and style of this
        function to match other functions. This allows us to share the normal
        mark stack code path.

        * runtime/SmallStrings.h: Changed the name and interface of mark to
        the more-normal markChildren style.

        * runtime/Structure.h: Moved the body of markAggregate into the
        JSCell.h to avoid a circular dependency with JSCell.h.

2009-09-04  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        DateInstance object collected on ARM JIT (JSValue: WTF_USE_JSVALUE32)
        https://bugs.webkit.org/show_bug.cgi?id=28909

        Part one.

        Make some improvements to garbage collection code:

            1) Fix the two classes that had the default mark bit set but
               should not.
            2) Remove checks of the mark bit outside the MarkStack::append
               function; they are redundant.
            3) Make more callers use the checked asCell and asObject
               casting functions rather than unchecked casts.
            4) Removed some GC-related functions because these operations are
               no longer things that code other than the core GC code needs
               to do directly. Fixed callers that were calling them.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate): Removed unneeded check of the mark
        bit before calling MarkStack::append.

        * interpreter/Register.h: Removed unneeded marked and markChildren
        functions.

        * jit/JITStubs.cpp:
        (op_eq): Removed unneeded assertions, instead using checked casting
        functions such as asObject.

        * runtime/ArgList.h: Added now-needed forward declaration of MarkStack.

        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::markChildren): Remmoved unneeded check of the mark bit.

        * runtime/GlobalEvalFunction.h:
        (JSC::GlobalEvalFunction::createStructure): Added. Fixes a bug where the
        HasDefaultMark bit was set.

        * runtime/JSCell.cpp:
        (JSC::JSCell::getObject): Use asObject to avoid a direct static_cast.

        * runtime/JSObject.h:
        (JSC::asObject): Added an overload for JSCell* and changed the JSValue
        version to call it.
        (JSC::JSValue::get): Use asObject to avoid a direct static_cast.

        * runtime/JSWrapperObject.h: Made markChildren private.
        (JSC::JSWrapperObject::createStructure): Added. Fixes a bug where the
        HasDefaultMark bit was set. Later we may want to optimize this for
        wrapper types that never have cells in their internal values, but there
        is no measured performance regression in SunSpider or V8 doing this
        all the time.

        * runtime/MarkStack.cpp: Tweaked formatting.

2009-09-04  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Switch USE_ defines over to the compiler so that they can be
        checked by files not including config.h (like WebCorePrefix.h).

        * wtf/Platform.h:

2009-09-03  Yong Li  <yong.li@torchmobile.com>

        Reviewed by David Levin.

        Remove unnecessary dependency on unistd.h
        https://bugs.webkit.org/show_bug.cgi?id=28962

        * runtime/Completion.cpp:

2009-09-03  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Add strnstr for Linux and Windows in StringExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=28901

        * wtf/StringExtras.h:
        (strnstr):

2009-09-03  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for JavaScriptCore's HashEntry class
        https://bugs.webkit.org/show_bug.cgi?id=27830

        Inherits HashEntry class from FastAllocBase because it has been
        instantiated by 'new' JavaScriptCore/runtime/Lookup.cpp:32.

        * runtime/Lookup.h:

2009-09-02  Gavin Barraclough  <barraclough@apple.com>

        Should crash if JIT code buffer allocation fails.

        https://bugs.webkit.org/show_bug.cgi?id=28926
        <rdar://problem/7031922>

        * jit/ExecutableAllocatorPosix.cpp:
        (JSC::ExecutablePool::systemAlloc):
        * jit/ExecutableAllocatorWin.cpp:
        (JSC::ExecutablePool::systemAlloc):

2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>

        waf build fixes for Windows/MSVC.

        * wscript:

2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>

        Build fix for building on Windows.

        * wtf/ThreadingPthreads.cpp:

2009-09-02  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Eric Seidel.

        Use fastMalloc when neither MMAP nor VIRTUALALLOC are enabled
        
        RegisterFile constructor currently throws #error when both
        MMAP and VIRTUALALLOC conditions fail.
        On any platform that does not provide these features
        (for instance, Symbian),
        the fallback should be regular malloc (or fastMalloc).
        It is functionally equivalent in this case, even though it may
        have certain drawbacks such as lack of dynamic pre-allocation.

        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::~RegisterFile):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):

2009-08-31  Robert Agoston  <Agoston.Robert@stud.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Fixed typo.
        https://bugs.webkit.org/show_bug.cgi?id=28691

        * parser/Parser.h:
        (JSC::Parser::parse):

2009-08-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        JSON Stringifier does not follow ES5 spec for handling of Number, String and Boolean objects
        https://bugs.webkit.org/show_bug.cgi?id=28797

        Fixed unwrapBoxedPrimitive to do the right thing, which necessitated a couple of new exception
        checks, and corrected the logic in gap to correctly convert Number and String objects.

        * runtime/JSONObject.cpp:
        (JSC::unwrapBoxedPrimitive):
        (JSC::gap):
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::appendStringifiedValue):

2009-08-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam Roben.

        JSON.stringify replacer array does not accept values that are not string primitives.
        https://bugs.webkit.org/show_bug.cgi?id=28788

        Update the JSON stringifier to initialise its replacer array according to the most
        recent version of the spec.

        * runtime/Identifier.h:
        (JSC::Identifier::from):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):

2009-08-27  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=28753
        <rdar://problem/7173448> Excessive number of threads (and a crash)

        * wtf/Threading.h: (WTF::atomicIncrement): Changed atomicIncrement to match decrement
        and return the new value. Also added using directives for these functions, to match
        te rest of WTF.

2009-08-27  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Link the testapi against CFLite when building the WinCairo port.

        * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add new Release_CFLite
          target.  Update all targets to inherit from either the
          JavaScriptCF.vsprops (Apple target) or the JavaScriptCFLite.vsprops
          file (WinCairo target).
        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Remove
          input file CoreFoundation.lib. This is provided by either the
          JavaScriptCF.vsprops or JavaScriptCFLite.vsprops file.

2009-08-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Geoff Garen.
        
        Fix Windows-specific crash due to missing memory clearing call.
        
        * runtime/Collector.cpp:
        (JSC::Heap::allocateBlock):

2009-08-27  Brent Fulgham  <bfulgham@webkit.org>

        Build fix: JavaScriptCore_debug.def missing some exports.  Apple
        Windows build does not use this file, so it was not noticed previously.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-27  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        x86-64 GTK broken due to code offsets changing, pointers sometimes packed into immediates.
        https://bugs.webkit.org/show_bug.cgi?id=28317

        Missed one, fix part II.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::move):
        * assembler/X86Assembler.h:
        (JSC::CAN_SIGN_EXTEND_8_32):

2009-08-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam Roben.

        JSON.stringify replacer array does not accept values that are not string primitives.
        https://bugs.webkit.org/show_bug.cgi?id=28788

        Update the JSON stringifier to initialise its replacer array according to the most
        recent version of the spec.

        * runtime/Identifier.h:
        (JSC::Identifier::from):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):

2009-08-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        JSON parser accepts trailing comma in array literals
        https://bugs.webkit.org/show_bug.cgi?id=28779

        Update parser to correctly fail if there's a trailing comma.

        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::parse):

2009-08-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        'this' in JSON.parse reviver is the global object
        https://bugs.webkit.org/show_bug.cgi?id=28752

        This is a technically simple change, we merely update the code for calling
        the reviver function to pass the correct this object.  Doing so however
        exposes the holder to arbitrary mutation by the reviver function so it is
        necessary for us to now guard all property accesses against the possibility
        of failure.

        * runtime/JSArray.h:
          JSON needs to delete a property from the array, so we friend its 
          Walker class so that we can make a non-virtual call to the arrays
          delete and getOwnPropertySlot methods.
        * runtime/JSONObject.cpp:
        (JSC::Walker::callReviver):
          We need to pass the correct this object
        (JSC::Walker::walk):
          Update calls to callReviver, and update property logic logic
          to correctly handle the holder being mutated by the reviver
          function.

2009-08-26  Alice Liu  <alice.liu@apple.com>

        Windows build fix: added some exported symbols

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-26  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Removed some exported symbols that no longer exist.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Olliejver Hunt.

        x86-64 GTK broken due to code offsets changing, pointers sometimes packed into immediates.
        https://bugs.webkit.org/show_bug.cgi?id=28317

        We rely on a slightly OS X specific behaviour, that x86-64 applications have a 4Gb zero page,
        so pointers are never representable as a 32-bit integer, and always have to be represented by
        a separate immediate load instruction, rather than within the immediate field of an arithmetic
        or memory operation.

        We explicitly check for a couple of cases where a value might be representable in 32-bit, but
        these probably never kick in on Mac OS, and only kick in to hose GTK.  Deleting these does not
        show a performance degradation on SunSpider.  Remove.

        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::storePtr):
        (JSC::MacroAssemblerX86_64::branchPtr):

2009-08-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A bit of Collector refatoring.
        
        SunSpider says no change. v8 says 1.003x faster (1.02x faster on splay).

        * JavaScriptCore.exp:

        * runtime/JSCell.cpp:
        (JSC::JSCell::toPrimitive):
        (JSC::JSCell::getPrimitiveNumber):
        (JSC::JSCell::toBoolean):
        (JSC::JSCell::toNumber):
        (JSC::JSCell::toString):
        (JSC::JSCell::toObject): Removed pure virtual functions from
        JSCell, so the collector can construct one. This allowed
        me to remove a bunch of ASSERT_NOT_REACHED throughout the
        code, too.

        * runtime/JSCell.h:
        (JSC::JSCell::JSCell): ditto
        (JSC::Heap::heap): Inlined this function because it's trivial.

        * JavaScriptCore.exp:

        * runtime/Collector.cpp:
        (JSC::Heap::destroy):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlock):
        (JSC::Heap::freeBlocks): Renamed freeHeap to freeBlocks, since
        it doesn't actually free the Heap object.
        (JSC::Heap::heapAllocate):
        (JSC::Heap::sweep):
        * runtime/Collector.h: Refactored block allocation and destruction
        into helper functions.
        
        * runtime/GetterSetter.cpp:
        * runtime/JSAPIValueWrapper.cpp:
        * runtime/JSPropertyNameIterator.cpp: Removed dummy implementations
        of pure virtual functions. (See above.)

=== End re-roll-in of r47738:47740 with Windows crash fixed ===

2009-08-26  Geoffrey Garen  <ggaren@apple.com>

        Build fix: start out with a 32-bit value to avoid a shortening warning.

        * runtime/Collector.cpp:
        (JSC::Heap::sweep):

2009-08-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Substantially reduced VM thrash in the GC heap.
        
        1.08x faster on v8 (1.60x faster on v8-splay).
        
        1.40x faster on bench-alloc-nonretained.
        
        1.90x faster on bench-alloc-retained.
        
        SunSpider says no change.
        
        * runtime/Collector.cpp:
        (JSC::Heap::heapAllocate): Fixed a long-standing bug: update a few local
        variables unconditionally after calling collect(), since they may be used
        even if we don't "goto scan". (In the bug I saw, usedBlocks got out of
        sync with heap.usedBlocks).
        (JSC::Heap::sweep): Keep enough free heap space to accomodate 
        the number of objects we'll allocate before the next GC, plus 25%, for
        good measure.
        * runtime/Collector.h: Bumped the block size to 256k. This seems to give
        the best cache performance, and it prevents us from initiating lots of
        VM traffic to recover very small chunks of memory.

=== Begin re-roll-in of r47738:47740 with Windows crash fixed ===

2009-08-25  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        postMessage() spec now supports sending arrays of ports
        https://bugs.webkit.org/show_bug.cgi?id=26902

        Added OwnPtr to VectorTraits so we can store OwnPtrs in Vectors.

        * wtf/VectorTraits.h:

2009-08-26  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Gustavo Noronha.

        Remove duplicated files from file list.

        * GNUmakefile.am:

2009-08-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        More export fixes.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Hopefully fix all the exports from JSC on windows

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fixes).

        Forgot I added files to JavaScriptCore. 

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCoreSources.bkl:

2009-08-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [ES5] Implement getOwnPropertyDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=28724

        Implement the core runtime support for getOwnPropertyDescriptor.
        This adds a virtual getOwnPropertyDescriptor method to every class
        that implements getOwnPropertySlot that shadows the behaviour of
        getOwnPropertySlot.  The alternative would be to make getOwnPropertySlot
        (or PropertySlots in general) provide property attribute information,
        but quick testing showed this to be a regression.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertyDescriptor):
        * runtime/Arguments.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::getOwnPropertyDescriptor):
        * runtime/ArrayPrototype.h:
        * runtime/CommonIdentifiers.h:
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::getOwnPropertyDescriptor):
        * runtime/DatePrototype.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertyDescriptor):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertyDescriptor):
        * runtime/JSByteArray.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertyDescriptor):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::getOwnPropertyDescriptor):
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::getOwnPropertyDescriptor):
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::getOwnPropertySlot):
        (JSC::JSONObject::getOwnPropertyDescriptor):
        * runtime/JSONObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertyDescriptor):
        (JSC::JSObject::getPropertyDescriptor):
        * runtime/JSObject.h:
        * runtime/JSString.cpp:
        (JSC::JSString::getStringPropertyDescriptor):
        (JSC::JSString::getOwnPropertyDescriptor):
        * runtime/JSString.h:
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::symbolTableGet):
        * runtime/JSVariableObject.h:
        * runtime/Lookup.h:
        (JSC::getStaticPropertyDescriptor):
        (JSC::getStaticFunctionDescriptor):
        (JSC::getStaticValueDescriptor):
          Add property descriptor equivalents of the lookup
          table access functions

        * runtime/MathObject.cpp:
        (JSC::MathObject::getOwnPropertySlot):
        (JSC::MathObject::getOwnPropertyDescriptor):
        * runtime/MathObject.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getOwnPropertyDescriptor):
        * runtime/NumberConstructor.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        * runtime/PropertyDescriptor.cpp: Added.
        (JSC::PropertyDescriptor::writable):
        (JSC::PropertyDescriptor::enumerable):
        (JSC::PropertyDescriptor::configurable):
        (JSC::PropertyDescriptor::hasAccessors):
        (JSC::PropertyDescriptor::setUndefined):
        (JSC::PropertyDescriptor::getter):
        (JSC::PropertyDescriptor::setter):
        (JSC::PropertyDescriptor::setDescriptor):
        (JSC::PropertyDescriptor::setAccessorDescriptor):
        * runtime/PropertyDescriptor.h: Added.
        (JSC::PropertyDescriptor::PropertyDescriptor):
        (JSC::PropertyDescriptor::attributes):
        (JSC::PropertyDescriptor::isValid):
        (JSC::PropertyDescriptor::value):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getOwnPropertyDescriptor):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::getOwnPropertyDescriptor):
        * runtime/RegExpObject.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertyDescriptor):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::getOwnPropertyDescriptor):
        * runtime/StringPrototype.h:

2009-08-24  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        How many copies of the parameters do you need?
        https://bugs.webkit.org/show_bug.cgi?id=28701

        The function parameters in JSC get copied a lot - and unnecessarily so.

        Originally this happened due to duplicating FunctionBodyNodes on recompilation,
        though the problem has been exacerbated by copying the parameters from the
        original function body onto the executable, then back onto the real body that
        will be generated (this happens on every function).  And this is all made worse
        since the data structures in question are a little ugly - C style arrays of C++
        objects containing ref counts, so they need a full copy-construct (rather than
        a simple memcpy).

        This can all be greatly simplified by just punting the parameters off into
        their own ref-counted object, and forgoing all the copying.

        ~no performance change, possible slight progression.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::makeFunction):
        * parser/Nodes.cpp:
        (JSC::FunctionParameters::FunctionParameters):
        (JSC::FunctionBodyNode::FunctionBodyNode):
        (JSC::FunctionBodyNode::finishParsing):
        * parser/Nodes.h:
        (JSC::FunctionBodyNode::parameters):
        (JSC::FunctionBodyNode::parameterCount):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::~FunctionExecutable):
        (JSC::FunctionExecutable::compile):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::FunctionExecutable::fromGlobalCode):
        (JSC::FunctionExecutable::paramString):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::parameterCount):

2009-08-25  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by NOBODY (Buildfix).

        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add Debug_CFLite target
          that inherits from the debug_wincairo property sheet and therefore
          links to the proper debug library.
        * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add Debug_CFLite target
          that inherits from the debug_wincairo property sheet and therefore
          links to the proper debug library.

2009-08-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Export tryFastMalloc for Canvas3D work
        https://bugs.webkit.org/show_bug.cgi?id=28018

        * JavaScriptCore.exp:

2009-08-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Roben.

        PLATFORM(CFNETWORK) should be USE(CFNETWORK).
        https://bugs.webkit.org/show_bug.cgi?id=28713

        * wtf/Platform.h: Added a #define to catch this issue in the
        future. The define would generate an error on gcc without the
        space in the expansion, but Visual C++ needs the space to cause an error.

2009-08-24  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Steve Falkenburg.

        Revise CFLite Debug build to emit DLL's with _debug label.
        https://bugs.webkit.org/show_bug.cgi?id=28695.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Modify
          Cairo debug build to inherit from new debug_cairo property sheet.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops:
          Modify to look for debug CFLite when in debug build.

2009-08-24  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Adler & Darin Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=28691
        Do not retain ScopeNodes outside of parsing
        
        There is now no need for these to exist outside of parsing - their use in the runtime is replaced by Executable types.

        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitNewFunction):
        (JSC::BytecodeGenerator::emitNewFunctionExpression):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::makeFunction):
        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions):
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * parser/Nodes.cpp:
        (JSC::ScopeNodeData::ScopeNodeData):
        (JSC::ProgramNode::create):
        (JSC::EvalNode::create):
        (JSC::FunctionBodyNode::create):
        * parser/Nodes.h:
        (JSC::ScopeNode::adoptData):
        (JSC::FunctionBodyNode::parameterCount):
        * parser/Parser.cpp:
        * parser/Parser.h:
        (JSC::Parser::arena):
        (JSC::Parser::Parser):
        (JSC::Parser::parse):
        * runtime/ArrayPrototype.cpp:
        (JSC::isNumericCompareFunction):
        (JSC::arrayProtoFuncSort):
        * runtime/Completion.cpp:
        (JSC::checkSyntax):
        (JSC::evaluate):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::~FunctionExecutable):
        (JSC::EvalExecutable::compile):
        (JSC::ProgramExecutable::checkSyntax):
        (JSC::ProgramExecutable::compile):
        (JSC::FunctionExecutable::compile):
        (JSC::EvalExecutable::generateJITCode):
        (JSC::ProgramExecutable::generateJITCode):
        (JSC::FunctionExecutable::generateJITCode):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::EvalExecutable::reparseExceptionInfo):
        (JSC::FunctionExecutable::recompile):
        (JSC::FunctionExecutable::fromGlobalCode):
        (JSC::FunctionExecutable::copyParameters):
        (JSC::FunctionExecutable::paramString):
        * runtime/Executable.h:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::ScriptExecutable::sourceID):
        (JSC::ScriptExecutable::sourceURL):
        (JSC::ScriptExecutable::lineNo):
        (JSC::ScriptExecutable::lastLine):
        (JSC::ScriptExecutable::usesEval):
        (JSC::ScriptExecutable::usesArguments):
        (JSC::ScriptExecutable::needsActivation):
        (JSC::ScriptExecutable::recordParse):
        (JSC::EvalExecutable::bytecode):
        (JSC::EvalExecutable::jitCode):
        (JSC::ProgramExecutable::bytecode):
        (JSC::ProgramExecutable::reparseExceptionInfo):
        (JSC::ProgramExecutable::jitCode):
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::make):
        (JSC::FunctionExecutable::bytecode):
        (JSC::FunctionExecutable::isGenerated):
        (JSC::FunctionExecutable::name):
        (JSC::FunctionExecutable::parameterCount):
        (JSC::FunctionExecutable::jitCode):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::numericCompareFunction):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):

2009-08-24  Darin Adler  <darin@apple.com>

        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::put): Landed revised version I had tested but forgot
        to land. Leave out the branch, since we don't need one.

2009-08-24  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Array index miss case creates a string every time
        https://bugs.webkit.org/show_bug.cgi?id=28664

        SunSpider test results I saw:

            0.5% faster overall
            1% faster on crypto-aes
            20% faster on crypto-md5
            13% faster on crypto-sha1

        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype): Initialize m_hasNoPropertiesWithUInt32Names
        to true.
        (JSC::ObjectPrototype::put): Clearly m_hasNoPropertiesWithUInt32Names if the new
        property has a name that is the string form of a UInt32.
        (JSC::ObjectPrototype::getOwnPropertySlot): Don't call JSObject::getOwnPropertySlot
        if m_hasNoPropertiesWithUInt32Names is true, and it is highly likely to be true.

        * runtime/ObjectPrototype.h: Added declarations for the above.

2009-08-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Fix a typo in my distcheck build fix.

        * GNUmakefile.am:

2009-08-23  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix for make distcheck.

        * GNUmakefile.am: Added files required for the build.

2009-08-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        REGRESSION(r47639-r47660): Webkit crashes on launch on PowerPC
        https://bugs.webkit.org/show_bug.cgi?id=28655

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction): Initialize properly with a VPtrHackExecutable.
        * wtf/Platform.h:

2009-08-22  Darin Adler  <darin@apple.com>

        Fix storage leak from syntax tree arena allocation patch.

        * parser/Nodes.h: CommaNode needs to inherit from ParserArenaDeletable
        because it has a vector.

2009-08-21  Darin Adler  <darin@apple.com>

        Fix Qt build.

        * parser/Nodes.cpp:
        (JSC::ScopeNodeData::ScopeNodeData): Made non-inline again.
        This is used outside Nodes.cpp so can't be inline unless
        it is in the header.

2009-08-21  Darin Adler  <darin@apple.com>

        Two loose ends from the last commit.

        * JavaScriptCore.xcodeproj/project.pbxproj: Made ParserArena.h
        and create_hash_table project-internal instead of "private".
        * runtime/Executable.h: Removed accidentally-added constructor.

2009-08-21  Darin Adler  <darin@apple.com>

        Reviewed by Gavin Barraclough.

        Syntax tree nodes should use arena allocation
        https://bugs.webkit.org/show_bug.cgi?id=25674

        Use an actual arena now. 0.6% speedup on SunSpider.

        New and improved with 100% less leaking of the universe.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
        Removed all exports involving the class FunctionBodyNode, which no
        longer needs to be used outside JavaScriptCore.

        * JavaScriptCore.xcodeproj/project.pbxproj: Made Nodes.h and
        Executable.h project-internal instead of "private".

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack
        contains const Identifier* now.

        * parser/Grammar.y: Made identifiers from the lexer be const
        Identifier* and updated since VarStack contains const Identifier* now.

        * parser/Lexer.cpp:
        (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers.
        (JSC::Lexer::makeIdentifier): Changed return type to const Identifier*
        and changed to call ParserArena.
        (JSC::Lexer::clear): Removed the code to manage m_identifiers and
        added code to set m_arena to 0.
        * parser/Lexer.h: Updated for changes above.

        * parser/NodeConstructors.h:
        (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable
        on the arena.
        (JSC::ParserArenaDeletable::operator new): Changed to call the
        allocateDeletable function on the arena instead of deleteWithArena.
        (JSC::PropertyNode::PropertyNode): Added new constructor that makes
        numeric identifiers. Some day we might want to optimize this for
        integers so it doesn't create a string for each one.
        (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier
        since it's now a const Identifier& so it can't be left uninitialized.
        (JSC::BreakNode::BreakNode): Ditto.
        (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements*
        to keep track of the statements rather than a separate statement vector.
        (JSC::BlockNode::BlockNode): Ditto.
        (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier.

        * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here.
        It seemed strangely out of place in the header.
        (JSC::ThrowableExpressionData::emitThrowError): Added an overload for
        UString as well as Identifier.
        (JSC::SourceElements::singleStatement): Added.
        (JSC::SourceElements::lastStatement): Added.
        (JSC::RegExpNode::emitBytecode): Changed the throwError code to use
        the substitution mechanism instead of doing a string append.
        (JSC::SourceElements::emitBytecode): Added. Replaces the old
        statementListEmitCode function, since we now keep the SourceElements
        objects around.
        (JSC::BlockNode::lastStatement): Added.
        (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of
        statementListEmitCode.
        (JSC::CaseClauseNode::emitBytecode): Added.
        (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode
        instead of statementListEmitCode.
        (JSC::ScopeNodeData::ScopeNodeData): Changed to store the
        SourceElements* instead of using releaseContentsIntoVector.
        (JSC::ScopeNode::emitStatementsBytecode): Added.
        (JSC::ScopeNode::singleStatement): Added.
        (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead
        of statementListEmitCode.
        (JSC::EvalNode::emitBytecode): Ditto.
        (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode
        insetad of statementListEmitCode and check for the return node using
        the new functions.

        * parser/Nodes.h: Changed VarStack to store const Identifier* instead
        of Identifier and rely on the arena to control lifetime. Added a new
        ParserArenaFreeable class. Made ParserArenaDeletable inherit from
        FastAllocBase instead of having its own operator new. Base the Node
        class on ParserArenaFreeable. Changed the various Node classes
        to use const Identifier& instead of Identifier to avoid the need to
        call their destructors and allow them to function as "freeable" in the
        arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions.
        Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode,
        CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable
        as a base class since they do not descend from Node. Eliminated the
        StatementVector type and instead have various classes use SourceElements*
        instead of StatementVector. This prevents those classes from having to
        use ParserArenaDeletable to make sure the vector destructor is called.

        * parser/Parser.cpp:
        (JSC::Parser::parse): Pass the arena to the lexer.

        * parser/Parser.h: Added an include of ParserArena.h, which is no longer
        included by Nodes.h.
        (JSC::Parser::parseFunctionFromGlobalCode): Changed to use the
        singleStatement function, since there is no longer any children function.
        Removed some unneeded use of RefPtr.

        * parser/ParserArena.cpp:
        (JSC::ParserArena::ParserArena): Added. Initializes the new members,
        m_freeableMemory, m_freeablePoolEnd, and m_identifiers.
        (JSC::ParserArena::freeablePool): Added. Computes the pool pointer,
        since we store only the current pointer and the end of pool pointer.
        (JSC::ParserArena::deallocateObjects): Added. Contains the common
        memory-deallocation logic used by both the destructor and the
        reset function.
        (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects.
        (JSC::ParserArena::reset): Ditto. Also added code to zero out the
        new structures, and switched to use clear() instead of shrink(0) since
        we don't really reuse arenas.
        (JSC::ParserArena::makeNumericIdentifier): Added.
        (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool
        is empty.
        (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine
        since this is used only for assertions at the moment.
        (JSC::ParserArena::derefWithArena): Make non-inline.

        * parser/ParserArena.h: Added an actual arena of "freeable" objects,
        ones that don't need destructors to be called. Also added a separate
        IdentifierArena object, a segmented vector of identifiers that used
        to be in the Lexer.

        * runtime/Executable.h: Moved the definition of the
        FunctionExecutable::make function here. It can't go in JSFunction.h
        since that header has to be used outside JavaScriptCore and so can't
        include this, which includes Nodes.h. The function could be moved
        elswhere if we don't want to include JSFunction.h in this header, but
        for now this seems to be the best place.

        * runtime/JSFunction.h: Removed the include of Executable.h and
        definition of the FunctionExecutable::make function.

        * wtf/FastMalloc.cpp: Fixed an incorrect comment.

2009-08-21  Mark Rowe  <mrowe@apple.com>

        Fix the non-JIT build.

        * runtime/Executable.cpp:
        * runtime/Executable.h:

2009-08-21  Gavin Barraclough  <barraclough@apple.com>

        Speculative QuickTime build fix.

        * runtime/JSArray.cpp:

2009-08-21  Gavin Barraclough  <barraclough@apple.com>

        Speculative QT build fix.

        * runtime/StringPrototype.cpp:

2009-08-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Restructure Executable types so that host functions do not hold a FunctionExecutable.
        https://bugs.webkit.org/show_bug.cgi?id=28621

        All JSFunction objects have a pointer to an Executable*.  This is currently always a
        FunctionExecutable, however this has a couple of drawbacks.  Host functions do not
        store a range of information that the FunctionExecutable provides (source, name,
        CodeBlock & information presently held on the FunctionBodyNode). 

        [ * nearly all... see below! ]

        Instead, make JSFunctions hold a pointer to an ExecutableBase, move fields specific
        to JS sourced executable types (source, node) into a new subclass (ScriptExecutable),
        and create a new NativeExecutable type.  We now provide a new method in JSFunction
        to access & downcast to FunctionExecutable, but in doing so we can make an early
        check (with an ASSERT) to ensure that the Executable read from a function will only
        be treated as a FunctionExecutable (and thus the JS sepcific fields will only be
        accessed) if the JSFunction is not a host function.

        There is one JSFunction that currently does not have an Executable, which is the
        object created to allow us to read out the vtable pointer.  By making this change
        we can also add a new Executable type fror this object (VPtrHackExecutable).
        Since this means that really all JSFunctions have an Executable we no longer have
        to null-check m_executable before us it - particularly in isHostFunction().

        This patch removes CacheableEvalExecutable, since all subclasses of ExecutableBase
        can now be ref-counted - since both JSFunction holds (and ref-counts) an ExecutableBase
        that might be a FunctionExecutable or a NativeExecutable.  This does now mean that all
        ProgramExecutables and EvalExecutables (unnecessarily) provide an interface to be
        ref-counted, however this seems less-bad than host functions unnecessarily providing
        interface to access non-host specific information.

        The class hierarcy has changed from this:
        
        - ExecutableBase
            - ProgramExecutable
            - EvalExecutable
                - CacheableEvalExecutable (also RefCounted by multiple-inheritance)
            - FunctionExecutable (also RefCounted by multiple-inheritance, 'special' FunctionExecutable also used for host functions)

        To this:
        
        - RefCounted
            - ExecutableBase
                - NativeExecutable
                - VPtrHackExecutable
                - ScriptExecutable
                    - ProgramExecutable
                    - EvalExecutable
                    - FunctionExecutable

        This patch speeds up sunspidey by a couple of ms (presumably due to the changes to isHostFunction()).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::ownerExecutable):
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):
        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions):
        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * profiler/Profiler.cpp:
        (JSC::createCallIdentifierFromFunctionImp):
        * runtime/Arguments.h:
        (JSC::Arguments::getArgumentsData):
        (JSC::Arguments::Arguments):
        * runtime/Executable.cpp:
        (JSC::NativeExecutable::~NativeExecutable):
        (JSC::VPtrHackExecutable::~VPtrHackExecutable):
        * runtime/Executable.h:
        (JSC::ExecutableBase::ExecutableBase):
        (JSC::ExecutableBase::~ExecutableBase):
        (JSC::ExecutableBase::isHostFunction):
        (JSC::NativeExecutable::NativeExecutable):
        (JSC::VPtrHackExecutable::VPtrHackExecutable):
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::ScriptExecutable::source):
        (JSC::ScriptExecutable::sourceID):
        (JSC::ScriptExecutable::sourceURL):
        (JSC::ScriptExecutable::lineNo):
        (JSC::ScriptExecutable::lastLine):
        (JSC::ScriptExecutable::usesEval):
        (JSC::ScriptExecutable::usesArguments):
        (JSC::ScriptExecutable::needsActivation):
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::EvalExecutable::create):
        (JSC::ProgramExecutable::ProgramExecutable):
        (JSC::FunctionExecutable::FunctionExecutable):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::~JSFunction):
        (JSC::JSFunction::markChildren):
        (JSC::JSFunction::getCallData):
        (JSC::JSFunction::call):
        (JSC::JSFunction::lengthGetter):
        (JSC::JSFunction::getConstructData):
        (JSC::JSFunction::construct):
        * runtime/JSFunction.h:
        (JSC::JSFunction::executable):
        (JSC::JSFunction::jsExecutable):
        (JSC::JSFunction::isHostFunction):

2009-08-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Browser hangs on opening Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=28438

        Code generation needs to be able to walk the entire scopechain in some
        cases, however the symbol table used by activations was a member of the
        codeblock.  Following recompilation this may no longer exist, leading
        to a crash or hang on lookup.

        We fix this by introducing a refcounted SymbolTable subclass, SharedSymbolTable,
        for the CodeBlocks used by function code.  This allows activations to
        maintain ownership of a copy of the symbol table even after recompilation so
        they can continue to work.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::symbolTable):
        (JSC::CodeBlock::sharedSymbolTable):
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        (JSC::FunctionCodeBlock::FunctionCodeBlock):
        (JSC::FunctionCodeBlock::~FunctionCodeBlock):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::retrieveArguments):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::generateBytecode):
        (JSC::FunctionExecutable::generateBytecode):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::EvalExecutable::reparseExceptionInfo):
        * runtime/JSActivation.h:
        (JSC::JSActivation::JSActivationData::JSActivationData):
        (JSC::JSActivation::JSActivationData::~JSActivationData):
        * runtime/SymbolTable.h:

2009-08-20  Xan Lopez  <xlopez@igalia.com>

        Add new file to GTK+ build.

        * GNUmakefile.am:

2009-08-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Added a number => string cache.
        
        1.07x faster on v8 (1.7x faster on v8-splay).
        1.004x faster on SunSpider.

        * runtime/JSCell.h: Moved JSValue::toString to JSString.h.
        * runtime/JSGlobalData.h: Holds the cache.
        * runtime/JSNumberCell.cpp:
        (JSC::JSNumberCell::toString):
        (JSC::JSNumberCell::toThisString): Removed -0 special case.
        UString handles this now, since too many clients were
        special-casing it.

        * runtime/JSString.h:
        (JSC::JSValue::toString): Use the cache when converting
        an int or double to string.

        * runtime/Operations.h:
        (JSC::concatenateStrings): Call toString to take advantage
        of the cache.

        * runtime/SmallStrings.h:
        (JSC::NumericStrings::add):
        (JSC::NumericStrings::lookup): The cache.

        * runtime/UString.cpp:
        (JSC::UString::from): Added -0 special case mentioned above.
        Removed appendNumeric because it's mutually exclusive with the
        cache.

2009-08-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        REGRESSION: fast/profiler/call.html is crashing occasionally
        https://bugs.webkit.org/show_bug.cgi?id=28476

        Using the codeblock for information about how many parameters and
        locals a function has is unsafe in certain circumstances.  The
        basic scenario is all function code being cleared in response to
        the debugger or profiler being enabled, and then an activation is
        marked before its associated function is re-executed.

        To deal with this scenario we store the variable count of a function
        directly in the FunctionExecutable, and then use that information.

        * runtime/Arguments.h:
        (JSC::Arguments::getArgumentsData):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::generateBytecode):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::variableCount):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::markChildren):

2009-08-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Numbering of arguments to emitGetJITStubArg/emitPutJITStubArg incorrect
        <bug lost in the great bug disasteroony of 08/20/09!>

        The argumentNumber argument to emitGetJITStubArg/emitPutJITStubArg should match
        the argument number used within the stub functions in JITStubs.cpp, but it doesn't.

        Firstly, all the numbers changed when we added a void* 'reserved' as the first slot
        (rather than leaving argument 0 unused), and secondly in 32_64 builds the index to
        peek/poke needs to be multiplies by 2 (since the argument to peek/poke is a number
        of machine words, and on 32_64 build the argument slots to stub functions are two
        words wide).

        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallSetupArgs):
        (JSC::JIT::compileOpConstructSetupArgs):
        (JSC::JIT::compileOpCallVarargsSetupArgs):
        (JSC::JIT::compileOpCall):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitPutJITStubArg):
        (JSC::JIT::emitPutJITStubArgConstant):
        (JSC::JIT::emitGetJITStubArg):
        (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):

2009-08-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        REGRESSION: significant slowdown on Celtic Kane "AJAX declaration" subtest
        https://bugs.webkit.org/show_bug.cgi?id=28332

        Follow up style fixes that were missed in review.

        * runtime/Structure.cpp:
        (JSC::Structure::hasTransition):
        * runtime/Structure.h:
        (JSC::Structure::get):
        (JSC::StructureTransitionTable::contains):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::add):

2009-08-20  Oliver Hunt  <oliver@apple.com>

        Add new exports to windows jsc build

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        REGRESSION: significant slowdown on Celtic Kane "AJAX declaration" subtest
        https://bugs.webkit.org/show_bug.cgi?id=28332

        The method check optimisation made transitions aware of the value being
        assigned when a transition was assigning a function.  This had the side
        effect of making every assignment of a function expression result in a
        new transition, and thus a new Structure.  The net result of this is that
        the common JS idiom of

            function MyObject() {
                this.myFunction = function(...){...};
            }
            new MyObject();

        Will produce a unique structure on every iteration, meaning that all
        caching is defeated and there is a significant amount of structure churn.

        The fix is to return the transition to its original form where it is
        keyed off a property name + attributes tuple, but have each transition
        support an optional transition on a specific value.

        * JavaScriptCore.exp:
        * runtime/JSObject.h:
        (JSC::JSObject::putDirectInternal):
        * runtime/Structure.cpp:
        (JSC::Structure::~Structure):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::hasTransition):
        * runtime/Structure.h:
        (JSC::Structure::transitionedFor):
        (JSC::Structure::hasTransition):
        (JSC::Structure::):
        (JSC::StructureTransitionTable::contains):
        (JSC::StructureTransitionTable::get):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTableHashTraits::emptyValue):
        (JSC::StructureTransitionTable::hasTransition):
        (JSC::StructureTransitionTable::remove):
        (JSC::StructureTransitionTable::add):

2009-08-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Remove FunctionCodeBlock.
        https://bugs.webkit.org/show_bug.cgi?id=28502

        These only exist to allow JIT code to dereference properties off the
        CodeBlock for any callee, regardless of whether it is a host function.

        Instead just use the FunctionExecutable.  Copy the m_parameters field
        from the CodeBlock into the Executable, and use this to distinguish
        between host functions, functions that have been bytecompiled, and
        functions that have not.

        m_parameters is moved to ExecutableBase rather than FunctionExecutable
        so that (as a separate change) we can move make a separate class of
        executable for host code, which is not devived from FunctionExecutable
        (host code does not feature any of the properties that normal executable
        do and will provide, such as source, attributes, and a parsed name).

        1% win on v8 tests, 0.5% on sunspider.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::derefStructures):
        (JSC::CodeBlock::refStructures):
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
        (JSC::CodeBlock::handlerForBytecodeOffset):
        (JSC::CodeBlock::lineNumberForBytecodeOffset):
        (JSC::CodeBlock::expressionRangeForBytecodeOffset):
        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
        (JSC::CodeBlock::functionRegisterForBytecodeOffset):
        (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
        (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
        * bytecode/CodeBlock.h:
        (JSC::):
        (JSC::CodeBlock::source):
        (JSC::CodeBlock::sourceOffset):
        (JSC::CodeBlock::evalCodeCache):
        (JSC::CodeBlock::createRareDataIfNecessary):
        
            remove NativeCodeBlocks and the NativeCode code type.
        
        * jit/JIT.cpp:
        (JSC::JIT::linkCall):

            Revert to previous behaviour (as currently still commented!) that Hhost functions have a null codeblock.

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallSetupArgs):
        (JSC::JIT::compileOpCallVarargsSetupArgs):
        (JSC::JIT::compileOpConstructSetupArgs):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):

            Bring the 32_64 & non-32_64 JITs into line with each other, callee in regT0.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):

            Rewrite call trampolines to not use the CodeBlock.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

            Make call_JSFunction & call_arityCheck return the callee, don't expect to be passed the CodeBlock.

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::generateBytecode):
        (JSC::FunctionExecutable::recompile):
        (JSC::FunctionExecutable::FunctionExecutable):
        * runtime/Executable.h:
        (JSC::ExecutableBase::):
        (JSC::ExecutableBase::ExecutableBase):
        (JSC::FunctionExecutable::isHostFunction):

            Add m_numParameters.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::~JSFunction):

            Only call generatedBytecode() on JSFunctions non-host FunctionExecutables.

2009-08-20  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28054
       
        Use a helper function to work around winscw compiler forward declaration bug
        regarding templated classes.

        Add parenthesis around (PassRefPtr::*UnspecifiedBoolType) to make winscw compiler
        work with the default UnSpecifiedBoolType() operator, which removes the winscw
        specific bool cast hack.

        * wtf/PassRefPtr.h:
        (WTF::derefIfNotNull):
        (WTF::PassRefPtr::~PassRefPtr):

2009-08-19  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Gavin Barraclough.

        Change namespace ARM to ARMRegisters
        X86 to X86Registers to avoid conflict with macros
        https://bugs.webkit.org/show_bug.cgi?id=28428

        * assembler/ARMAssembler.cpp:
        * assembler/ARMAssembler.h:
        * assembler/ARMv7Assembler.h:
        * assembler/MacroAssemblerARM.h:
        * assembler/MacroAssemblerARMv7.h:
        * assembler/MacroAssemblerX86Common.h:
        * assembler/MacroAssemblerX86_64.h:
        * assembler/X86Assembler.h:
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        * jit/JITInlineMethods.h:
        * jit/JITOpcodes.cpp:
        * wrec/WRECGenerator.cpp:
        * wrec/WRECGenerator.h:
        * yarr/RegexJIT.cpp:

2009-08-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Devirtualise marking
        https://bugs.webkit.org/show_bug.cgi?id=28294

        We actually need to mark the value in a number object if we're using the
        32bit number representation.

        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):

2009-08-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

         We probably shouldn't be keeping the AST for eval nodes around forevar.
        https://bugs.webkit.org/show_bug.cgi?id=28469

        EvalNodes don't destroyData() (delete their parser data) since they need to hold onto
        their varStack.  Copy a list of variable onto EvalCodeBlock, and this can go away.

        * bytecode/CodeBlock.h:
        (JSC::EvalCodeBlock::variable):
        (JSC::EvalCodeBlock::numVariables):
        (JSC::EvalCodeBlock::adoptVariables):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * parser/Nodes.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::generateBytecode):
        * runtime/Executable.h:

2009-08-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=28441

        Fix a build issue with ICU 4.2 or later on Windows with Visual C++. 
        Instead of defining all isXXX and toupper/tolower as 
          WTF_Please_use_ASCIICType_instead_of_ctype_see_comment_in_ASCIICType_h,
        #define them to be different by prepending 'WTF_...ASCIIType_h' with
        the originial names like 'toupper_WTF_...ASCIIType_h'. 

        * wtf/DisallowCType.h:

2009-08-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Assigning a function to an object should always use the existing transition, even if the transition is not specialized
        https://bugs.webkit.org/show_bug.cgi?id=28442

        Check for an unspecialized transition as an alternative to always failing if specialisation does not match.

        * runtime/Structure.cpp:
        (JSC::Structure::addPropertyTransitionToExistingStructure):

2009-08-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Added additional getter to ByteArray with an unsigned char as return.
        ByteArray can take unsigned char directly now.

        * wtf/ByteArray.h:
        (WTF::ByteArray::set):
        (WTF::ByteArray::get):

2009-08-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28415
        Set svn:eol-style CRLF on all .sln and .vcproj files that don't already
        have it.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
        
2009-08-18  Xan Lopez  <xlopez@igalia.com>

        Try to fix the GTK+ build.

        * GNUmakefile.am:

2009-08-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        No, silly runtime, AST nodes are not for you.

        We still use AST nodes (ScopeNodes, particularly FunctionBodyNodes) within
        the runtime, which means that these nodes must be persisted outside of the
        arena, contain both parser & runtime data, etc.  This is all a bit of a mess.

        Move functionality into a new FunctionExecutable class.

        * API/JSCallbackFunction.cpp:
        * API/JSObjectRef.cpp:
        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::markAggregate):
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
        (JSC::CodeBlock::lineNumberForBytecodeOffset):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::getBytecodeIndex):
        (JSC::CodeBlock::discardBytecode):
        (JSC::CodeBlock::instructionCount):
        (JSC::CodeBlock::getJITCode):
        (JSC::CodeBlock::executablePool):
        (JSC::CodeBlock::ownerExecutable):
        (JSC::CodeBlock::extractExceptionInfo):
        (JSC::CodeBlock::addFunctionDecl):
        (JSC::CodeBlock::functionDecl):
        (JSC::CodeBlock::numberOfFunctionDecls):
        (JSC::CodeBlock::addFunctionExpr):
        (JSC::CodeBlock::functionExpr):
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        (JSC::ProgramCodeBlock::ProgramCodeBlock):
        (JSC::EvalCodeBlock::EvalCodeBlock):
        (JSC::FunctionCodeBlock::FunctionCodeBlock):
        (JSC::NativeCodeBlock::NativeCodeBlock):
        * bytecode/EvalCodeCache.h:
        * bytecode/SamplingTool.cpp:
        (JSC::SamplingTool::doRun):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitNewFunction):
        (JSC::BytecodeGenerator::emitNewFunctionExpression):
        * bytecompiler/BytecodeGenerator.h:
        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions):
        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall):
        * interpreter/CallFrameClosure.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::debug):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveLastCaller):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::JIT::compile):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::emit_op_new_func):
        (JSC::JIT::emit_op_new_func_exp):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        (JSC::):
        * parser/Nodes.cpp:
        (JSC::FunctionBodyNode::reparseDataIfNecessary):
        * parser/Nodes.h:
        (JSC::EvalNode::partialDestroyData):
        * parser/Parser.h:
        * profiler/ProfileGenerator.cpp:
        * profiler/Profiler.cpp:
        (JSC::Profiler::createCallIdentifier):
        (JSC::createCallIdentifierFromFunctionImp):
        * runtime/Arguments.h:
        (JSC::Arguments::getArgumentsData):
        (JSC::Arguments::Arguments):
        (JSC::JSActivation::copyRegisters):
        * runtime/ArrayPrototype.cpp:
        (JSC::isNumericCompareFunction):
        * runtime/CallData.h:
        (JSC::):
        * runtime/Collector.cpp:
        (JSC::Heap::collect):
        * runtime/ConstructData.h:
        (JSC::):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createUndefinedVariableError):
        (JSC::createInvalidParamError):
        (JSC::createNotAConstructorError):
        (JSC::createNotAFunctionError):
        (JSC::createNotAnObjectError):
        * runtime/Executable.cpp: Added.
        (JSC::EvalExecutable::generateBytecode):
        (JSC::ProgramExecutable::generateBytecode):
        (JSC::FunctionExecutable::generateBytecode):
        (JSC::EvalExecutable::generateJITCode):
        (JSC::ProgramExecutable::generateJITCode):
        (JSC::FunctionExecutable::generateJITCode):
        (JSC::FunctionExecutable::isHostFunction):
        (JSC::FunctionExecutable::markAggregate):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::EvalExecutable::reparseExceptionInfo):
        (JSC::FunctionExecutable::recompile):
        (JSC::FunctionExecutable::FunctionExecutable):
        * runtime/Executable.h:
        (JSC::ExecutableBase::~ExecutableBase):
        (JSC::ExecutableBase::ExecutableBase):
        (JSC::ExecutableBase::source):
        (JSC::ExecutableBase::sourceID):
        (JSC::ExecutableBase::lastLine):
        (JSC::ExecutableBase::usesEval):
        (JSC::ExecutableBase::usesArguments):
        (JSC::ExecutableBase::needsActivation):
        (JSC::ExecutableBase::astNode):
        (JSC::ExecutableBase::generatedJITCode):
        (JSC::ExecutableBase::getExecutablePool):
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::EvalExecutable::bytecode):
        (JSC::EvalExecutable::varStack):
        (JSC::EvalExecutable::evalNode):
        (JSC::EvalExecutable::jitCode):
        (JSC::ProgramExecutable::ProgramExecutable):
        (JSC::ProgramExecutable::reparseExceptionInfo):
        (JSC::ProgramExecutable::bytecode):
        (JSC::ProgramExecutable::programNode):
        (JSC::ProgramExecutable::jitCode):
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::name):
        (JSC::FunctionExecutable::bytecode):
        (JSC::FunctionExecutable::generatedBytecode):
        (JSC::FunctionExecutable::usesEval):
        (JSC::FunctionExecutable::usesArguments):
        (JSC::FunctionExecutable::parameterCount):
        (JSC::FunctionExecutable::paramString):
        (JSC::FunctionExecutable::isGenerated):
        (JSC::FunctionExecutable::body):
        (JSC::FunctionExecutable::jitCode):
        (JSC::FunctionExecutable::createNativeThunk):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        (JSC::JSActivation::markChildren):
        (JSC::JSActivation::isDynamicScope):
        (JSC::JSActivation::argumentsGetter):
        * runtime/JSActivation.h:
        (JSC::JSActivation::JSActivationData::JSActivationData):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::isHostFunction):
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::~JSFunction):
        (JSC::JSFunction::markChildren):
        (JSC::JSFunction::getCallData):
        (JSC::JSFunction::call):
        (JSC::JSFunction::lengthGetter):
        (JSC::JSFunction::getConstructData):
        (JSC::JSFunction::construct):
        * runtime/JSFunction.h:
        (JSC::JSFunction::executable):
        (JSC::FunctionExecutable::make):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::numericCompareFunction):
        * runtime/JSGlobalData.h:

2009-08-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Fix 300,000+ leaks seen during the regression tests.

        EvalCodeCache::get was heap-allocating an EvalExecutable instance without adopting the initial reference.
        While fixing this we noticed that EvalExecutable was a RefCounted type that was sometimes stack allocated.
        To make this cleaner and to prevent clients from attempting to ref a stack-allocated instance, we move the
        refcounting down to a new CacheableEvalExecutable class that derives from EvalExecutable. EvalCodeCache::get
        now uses CacheableEvalExecutable::create and avoids the leak.

        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        * runtime/Executable.h:
        (JSC::CacheableEvalExecutable::create):
        (JSC::CacheableEvalExecutable::CacheableEvalExecutable):

2009-08-17  Oliver Hunt  <oliver@apple.com>

        RS=Mark Rowe.

        REGRESSION (r47292): Prototype.js is broken by ES5 Arguments changes
        https://bugs.webkit.org/show_bug.cgi?id=28341
        <rdar://problem/7145615>

        Reverting r47292.  Alas Prototype.js breaks with Arguments inheriting
        from Array as ES5 attempted.  Prototype.js defines $A in terms of a 
        function it places on (among other global objects) the Array prototype,
        thus breaking $A for arrays.

        * runtime/Arguments.h:
        (JSC::Arguments::Arguments):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        * runtime/ObjectPrototype.h:
        * tests/mozilla/ecma_3/Function/arguments-001.js:

2009-08-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:

2009-08-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        Fix build with FAST_MALLOC_MATCH_VALIDATION enabled.

        * wtf/FastMalloc.cpp:
        (WTF::fastMalloc):
        (WTF::fastCalloc):
        (WTF::fastRealloc):

2009-08-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        Fix crash on ./ecma_2/RegExp/exec-002.js.
        https://bugs.webkit.org/show_bug.cgi?id=28353

        Change the order of freeParenthesesDisjunctionContext and
        popParenthesesDisjunctionContext on all call sites as the pop
        method is accessing backTrack->lastContext which is the context
        that is about to be freed.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
        (JSC::Yarr::Interpreter::backtrackParentheses):

2009-08-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

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

        Fix coding style violations. Use m_ for C++ class members. Remove
        trailing whitespace on empty lines.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::tryConsumeCharacter):
        (JSC::Yarr::Interpreter::tryConsumeBackReference):
        (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
        (JSC::Yarr::Interpreter::backtrackParentheses):
        (JSC::Yarr::ByteCompiler::ByteCompiler):
        (JSC::Yarr::ByteCompiler::compile):
        (JSC::Yarr::ByteCompiler::checkInput):
        (JSC::Yarr::ByteCompiler::assertionBOL):
        (JSC::Yarr::ByteCompiler::assertionEOL):
        (JSC::Yarr::ByteCompiler::assertionWordBoundary):
        (JSC::Yarr::ByteCompiler::atomPatternCharacter):
        (JSC::Yarr::ByteCompiler::atomCharacterClass):
        (JSC::Yarr::ByteCompiler::atomBackReference):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
        (JSC::Yarr::ByteCompiler::popParenthesesStack):
        (JSC::Yarr::ByteCompiler::closeAlternative):
        (JSC::Yarr::ByteCompiler::closeBodyAlternative):
        (JSC::Yarr::ByteCompiler::atomParenthesesEnd):
        (JSC::Yarr::ByteCompiler::regexBegin):
        (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction):
        (JSC::Yarr::ByteCompiler::alterantiveDisjunction):
        (JSC::Yarr::ByteCompiler::emitDisjunction):

2009-08-15  Mark Rowe  <mrowe@apple.com>

        Fix the build with JIT disabled.

        * runtime/Arguments.h: Only compile the jitCode method when the JIT is enabled.
        * runtime/Executable.h: Include PrototypeFunction.h so the compiler knows what
        NativeFunctionWrapper is when the JIT is disabled.

2009-08-15  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Sam Weinig.

        Added ENABLE_EVENTSOURCE flag.
        https://bugs.webkit.org/show_bug.cgi?id=14997

        * Configurations/FeatureDefines.xcconfig:

2009-08-14  Gavin Barraclough  <barraclough@apple.com>

        * parser/Parser.h:
        (JSC::EvalExecutable::parse):
        (JSC::ProgramExecutable::parse):
        * runtime/Executable.h:

2009-08-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Remove AST nodes from use within the Runtime (outside of parsing), stage 1
        https://bugs.webkit.org/show_bug.cgi?id=28330

        Remove the EvalNode and ProgramNode from use in the runtime.  They still exist
        after this patch, but are hidden behind EvalExecutable and FunctionExecutable,
        and are also still reachable behind CodeBlock::m_ownerNode.

        The next step will be to beat back FunctionBodyNode in the same fashion.
        Then remove the usage via CodeBlock, then only construct these nodes only on
        demand during bytecode generation.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.h:
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        (JSC::GlobalCodeBlock::~GlobalCodeBlock):
        (JSC::ProgramCodeBlock::ProgramCodeBlock):
        (JSC::EvalCodeBlock::EvalCodeBlock):
        (JSC::FunctionCodeBlock::FunctionCodeBlock):
        (JSC::NativeCodeBlock::NativeCodeBlock):
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):
        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::execute):
        * interpreter/Interpreter.h:
        * parser/Nodes.cpp:
        (JSC::FunctionBodyNode::createNativeThunk):
        (JSC::FunctionBodyNode::generateBytecode):
        (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):
        * parser/Parser.h:
        (JSC::Parser::parse):
        (JSC::Parser::reparse):
        (JSC::Parser::parseFunctionFromGlobalCode):
        (JSC::::parse):
        * runtime/Completion.cpp:
        (JSC::checkSyntax):
        (JSC::evaluate):
        * runtime/Error.cpp:
        (JSC::throwError):
        * runtime/Error.h:
        * runtime/Executable.h: Added.
        (JSC::TemplateExecutable::TemplateExecutable):
        (JSC::TemplateExecutable::markAggregate):
        (JSC::TemplateExecutable::sourceURL):
        (JSC::TemplateExecutable::lineNo):
        (JSC::TemplateExecutable::bytecode):
        (JSC::TemplateExecutable::jitCode):
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::ProgramExecutable::ProgramExecutable):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/FunctionConstructor.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::numericCompareFunction):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::~JSGlobalObject):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::codeBlocks):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):

2009-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Rename the confusing isObject(<class>) to inherits(<class>).
        It still works on non-objects, returning false.

        * runtime/ArrayConstructor.cpp:
        (JSC::arrayConstructorIsArray): Removed unneeded isObject call
        and updated remaining isObject call to new name, inherits.

        * runtime/JSCell.h: Renamed isObject(<class>) to inherits(<class>)
        but more importantly, made it non-virtual (it was already inline)
        so it is now as fast as JSObject::inherits was.

        * runtime/JSObject.h: Removed inherits function since the one
        in the base class is fine as-is. Also made various JSCell functions
        that should not be called on JSObject uncallable by making them
        both private and not implemented.
        (JSC::JSCell::inherits): Updated name.
        (JSC::JSValue::inherits): Ditto.

        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncConcat):
        * runtime/BooleanPrototype.cpp:
        (JSC::booleanProtoFuncToString):
        (JSC::booleanProtoFuncValueOf):
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToString):
        (JSC::dateProtoFuncToUTCString):
        (JSC::dateProtoFuncToISOString):
        (JSC::dateProtoFuncToDateString):
        (JSC::dateProtoFuncToTimeString):
        (JSC::dateProtoFuncToLocaleString):
        (JSC::dateProtoFuncToLocaleDateString):
        (JSC::dateProtoFuncToLocaleTimeString):
        (JSC::dateProtoFuncGetTime):
        (JSC::dateProtoFuncGetFullYear):
        (JSC::dateProtoFuncGetUTCFullYear):
        (JSC::dateProtoFuncToGMTString):
        (JSC::dateProtoFuncGetMonth):
        (JSC::dateProtoFuncGetUTCMonth):
        (JSC::dateProtoFuncGetDate):
        (JSC::dateProtoFuncGetUTCDate):
        (JSC::dateProtoFuncGetDay):
        (JSC::dateProtoFuncGetUTCDay):
        (JSC::dateProtoFuncGetHours):
        (JSC::dateProtoFuncGetUTCHours):
        (JSC::dateProtoFuncGetMinutes):
        (JSC::dateProtoFuncGetUTCMinutes):
        (JSC::dateProtoFuncGetSeconds):
        (JSC::dateProtoFuncGetUTCSeconds):
        (JSC::dateProtoFuncGetMilliSeconds):
        (JSC::dateProtoFuncGetUTCMilliseconds):
        (JSC::dateProtoFuncGetTimezoneOffset):
        (JSC::dateProtoFuncSetTime):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::argumentsGetter):
        * runtime/JSValue.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTest):
        (JSC::regExpProtoFuncExec):
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoFuncToString):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChain::localDepth):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncToString):
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        (JSC::stringProtoFuncSplit):
        Updated to new name, inherits, from old name, isObject.

2009-07-31  Harald Fernengel  <harald.fernengel@nokia.com>

        Reviewed by Simon Hausmann.

        Adding QNX as a platform. Currently only tested with Qt.

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

        * JavaScriptCore/runtime/Collector.cpp: Added retrieving of stack base
          since QNX doesn't have the pthread _nt functions
        * JavaScriptCore/wtf/Platform.h: Added WTF_PLATFORM_QNX and corresponding
          defines
        * WebCore/bridge/npapi.h: Build fix for missing typedefs on QNX

2009-08-14  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Currently generic ARM and ARMv7 platforms work only with JSVALUE32
        https://bugs.webkit.org/show_bug.cgi?id=28300

        * wtf/Platform.h:

2009-08-14  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Enable JIT on ARM for QT by default
        https://bugs.webkit.org/show_bug.cgi?id=28259

        * wtf/Platform.h:

2009-08-14  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Enable YARR_JIT on ARM for QT by default
        https://bugs.webkit.org/show_bug.cgi?id=28259

        * wtf/Platform.h:

2009-08-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [ES5] Arguments object should inherit from Array
        https://bugs.webkit.org/show_bug.cgi?id=28298

        Make the Arguments object conform to the behaviour specified in ES5.
        The simple portion of this is to make Arguments use Array.prototype
        as its prototype rather than Object.prototype.

        The spec then requires us to set instance.constructor to the pristine
        Object constructor, and instance.toString and instance.toLocaleString
        to the pristine versions from Object.prototype.  To do this we now 
        make the ObjectPrototype constructor return its toString and
        toLocaleString functions (similar to the call and apply functions
        from FunctionPrototype).

        Oddly enough this reports itself as a slight win, but given the code
        isn't hit in the tests that claim to have improved I put this down to
        code motion.

        * runtime/Arguments.h:
        (JSC::Arguments::Arguments):
        (JSC::Arguments::initializeStandardProperties):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
        (JSC::JSGlobalObject::objectConstructor):
        (JSC::JSGlobalObject::objectToStringFunction):
        (JSC::JSGlobalObject::objectToLocaleStringFunction):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        * runtime/ObjectPrototype.h:
        * tests/mozilla/ecma_3/Function/arguments-001.js:
          Update test to new es5 behaviour

2009-08-14  Oliver Hunt  <oliver@apple.com>

        Remove MarkStack::drain from the JSC exports file

        MarkStack::drain is now marked inline, the including it in the exports file
        produces an ld warning

        * JavaScriptCore.exp:

2009-08-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Remove accidentally left in debugging statement.

        * runtime/JSArray.h:
        (JSC::MarkStack::drain):

2009-08-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        [ES5] Implement Array.isArray
        https://bugs.webkit.org/show_bug.cgi?id=28296

        Add support for Array.isArray to the Array constructor

        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::arrayConstructorIsArray):
        * runtime/ArrayConstructor.h:
        * runtime/CommonIdentifiers.h:
        * runtime/JSArray.h:
        (JSC::MarkStack::drain):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):

2009-08-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Buildfix).

        Attempt to fix windows build

        * runtime/Collector.cpp:

2009-08-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Devirtualise marking
        https://bugs.webkit.org/show_bug.cgi?id=28294

        Add a bit to TypeInfo to indicate that an object uses the standard
        JSObject::markChildren method.  This allows us to devirtualise marking
        of most objects (though a branch is still needed).  We also add a branch
        to identify arrays thus devirtualising marking in that case as well.

        In order to make the best use of this devirtualisation I've also reworked
        the MarkStack::drain() logic to make the iteration more efficient.

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructure):
        * JavaScriptCore.exp:
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createStructure):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSArray.cpp:
        (JSC::JSArray::markChildren):
        * runtime/JSArray.h:
        (JSC::JSArray::markChildrenDirect):
        (JSC::MarkStack::drain):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::createStructure):
        * runtime/JSCell.h:
        (JSC::MarkStack::append):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSNumberCell.h:
        (JSC::JSNumberCell::createStructure):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.cpp:
        (JSC::JSObject::markChildren):
        * runtime/JSObject.h:
        (JSC::JSObject::markChildrenDirect):
        (JSC::JSObject::createStructure):
        * runtime/JSString.h:
        (JSC::JSString::createStructure):
        * runtime/JSType.h:
        (JSC::):
        * runtime/MarkStack.h:
        (JSC::MarkStack::MarkStack):
        (JSC::MarkStack::MarkSet::MarkSet):
        (JSC::MarkStack::MarkStackArray::last):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
        * runtime/TypeInfo.h:
        (JSC::TypeInfo::hasDefaultMark):

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Some small bits of housekeeping.

        * JavaScriptCore.xcodeproj/project.pbxproj: Make Parser.h
        project instead of private. Remove JSONObject.lut.h.

        * assembler/ARMAssembler.h: Remove unneeded WTF prefix.
        * assembler/AssemblerBufferWithConstantPool.h: Ditto.
        * bytecompiler/BytecodeGenerator.h: Ditto.

        * wtf/SegmentedVector.h: Add a "using" statement as we do
        with the other WTF headers.

2009-08-13  Darin Adler  <darin@apple.com>

        Fix Tiger build.

        * parser/Grammar.y: Use a template function so we can compile
        setStatementLocation even if it comes before YYLTYPE is defined.

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by George Staikos.

        Too much use of void* in Grammar.y
        https://bugs.webkit.org/show_bug.cgi?id=28287

        * parser/Grammar.y: Changed all the helper functions to
        take a JSGlobalData* instead of a void*. A couple formatting
        tweaks that I missed when breaking this into pieces.

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by George Staikos.

        Another part of https://bugs.webkit.org/show_bug.cgi?id=28287

        * parser/Grammar.y: Reduced and sorted includes. Tweaked comment
        format. Marked a few more functions inline.

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by George Staikos.

        Another part of https://bugs.webkit.org/show_bug.cgi?id=28287

        * parser/Grammar.y: Pass the number to the PropertyNode instead of
        first turning it into an Identifier.

        * parser/NodeConstructors.h:
        (JSC::PropertyNode::PropertyNode): Add an overload that takes a double
        so the code to convert to a string can be here instead of Grammar.y.
        * parser/Nodes.h: Ditto.

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by George Staikos.

        Another part of https://bugs.webkit.org/show_bug.cgi?id=28287

        * parser/Grammar.y: Eliminate the DBG macro.

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by George Staikos.

        Another part of https://bugs.webkit.org/show_bug.cgi?id=28287

        * parser/Grammar.y: Eliminate the SET_EXCEPTION_LOCATION macro.

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by George Staikos.

        George asked me to break the patch from
        https://bugs.webkit.org/show_bug.cgi?id=28287
        into smaller pieces and land it in stages.

        * parser/Grammar.y: Eliminate the LEXER macro.

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Try some more to fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a new symbol.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Ditto.

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Try and fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a new symbol.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Ditto.

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        JavaScriptCore tweaks to get ready for the parser arena
        https://bugs.webkit.org/show_bug.cgi?id=28243

        Eliminate dependencies on Nodes.h outside JavaScriptCore,
        and cut down on them inside JavaScriptCore.

        Change regular expression parsing to use identifiers as
        with other strings we parse.

        Fix a couple things that are needed to use const Identifier
        more, which will be part of the parser arena work.

        * JavaScriptCore.exp: Resorted and updated.

        * JavaScriptCore.xcodeproj/project.pbxproj: Changed
        CollectorHeapIterator.h to be project-internal.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitPushNewScope): Added const.
        * bytecompiler/BytecodeGenerator.h: Ditto.

        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions): Moved this function
        here from WebCore. Here is better since it uses so many internals.
        Removed unimportant optimization for the no listener case.
        * debugger/Debugger.h: Ditto. Also removed unneeded include
        and tweaked formatting and comments.

        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::functionName): Call asFunction instead
        of doing the unchecked static_cast.
        (JSC::DebuggerCallFrame::calculatedFunctionName): Ditto.

        * jit/JITStubs.cpp:
        (JSC::op_call_JSFunction): Call isHostFunction on the body rather
        than on the JSFunction.
        (JSC::vm_lazyLinkCall): Ditto.
        (JSC::op_construct_JSConstruct): Ditto.

        * parser/Grammar.y: Changed callers to use new scanRegExp with
        out arguments instead of relying on state in the Lexer. And
        callers that just want to skip a regular expression to use
        skipRegExp.

        * parser/Lexer.cpp:
        (JSC::Lexer::scanRegExp): Changed to use out arguments, and to
        add a prefix argument so we can add in the "=" character as needed.
        Also rewrote to streamline the logic a bit inspired by suggestions
        by David Levin.
        (JSC::Lexer::skipRegExp): Added. Version of the function above that
        does not actually put the regular expression into a string.
        (JSC::Lexer::clear): Removed code to clear m_pattern and m_flags.
        * parser/Lexer.h: Changed scanRegExp to have out arguments. Added
        skipRegExp. Eliminated pattern, flags, m_pattern, and m_flags.

        * parser/NodeConstructors.h:
        (JSC::RegExpNode::RegExpNode): Changed to take const Identifier&.
        * parser/Nodes.cpp:
        (JSC::RegExpNode::emitBytecode): Changed since m_pattern and
        m_flags are now Identifier instead of UString.
        (JSC::FunctionBodyNode::make): Moved this function here instead
        of putting it in the JSFunction.h header.
        * parser/Nodes.h: Changed RegExpNode to use Identifier.

        * profiler/Profiler.cpp:
        (JSC::Profiler::createCallIdentifier): Changed to use isHostFunction
        on the body instead of on the JSFunction object.
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString): Ditto.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::isHostFunction): Moved here from header.
        (JSC::JSFunction::isHostFunctionNonInline): Added.
        (JSC::JSFunction::JSFunction): Removed unneeded initialization of
        m_body to 0.
        (JSC::JSFunction::setBody): Moved here from header.

        * runtime/JSFunction.h: Removed unneeded includes. Moved private
        constructor down to the private section. Made virtual functions
        private. Removed unneeded overload of setBody and moved the body
        of the function into the .cpp file. Changed assertions to use
        the non-inline version of isHostFunction.

        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::functionGetter): Use asFunction instead
        of doing the unchecked static_cast.

        * wtf/SegmentedVector.h:
        (WTF::SegmentedVector::isEmpty): Added.

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Darin Adler.

        Use the version of operator new that takes a JSGlobalData when allocating FuncDeclNode and FuncExprNode
        from within the grammar to prevent these nodes from being leaked.

        * parser/Grammar.y:

2009-08-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Remove the special-case for Qt wrt JSVALUE_32 introduced in
        r46709. It must've been a dependency issue on the bot, as
        after a manual build all the tests pass on amd64 and ia32.

        * wtf/Platform.h:

2009-08-12  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Add optimize call and property access support for ARM JIT.
        https://bugs.webkit.org/show_bug.cgi?id=24986

        For tightly coupled sequences the BEGIN_UNINTERRUPTED_SEQUENCE and
        END_UNINTERRUPTED_SEQUENCE macros have been introduced which ensure
        space for instructions and constants of the named sequence. This
        method is vital for those architecture which are using constant pool.

        The 'latePatch' method - which was linked to JmpSrc - is replaced with
        a port specific solution (each calls are marked to place their address
        on the constant pool).

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::linkBranch):
        (JSC::ARMAssembler::executableCopy): Add extra align for constant pool.
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::JmpSrc::JmpSrc):
        (JSC::ARMAssembler::sizeOfConstantPool):
        (JSC::ARMAssembler::jmp):
        (JSC::ARMAssembler::linkCall):
        * assembler/ARMv7Assembler.h:
        * assembler/AbstractMacroAssembler.h:
        * assembler/AssemblerBufferWithConstantPool.h:
        (JSC::AssemblerBufferWithConstantPool::flushIfNoSpaceFor): Fix the
        computation of the remaining space.
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::branch32):
        (JSC::MacroAssemblerARM::nearCall):
        (JSC::MacroAssemblerARM::call):
        (JSC::MacroAssemblerARM::branchPtrWithPatch):
        (JSC::MacroAssemblerARM::ensureSpace):
        (JSC::MacroAssemblerARM::sizeOfConstantPool):
        (JSC::MacroAssemblerARM::prepareCall):
        * assembler/X86Assembler.h:
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITInlineMethods.h:
        (JSC::JIT::beginUninterruptedSequence):
        (JSC::JIT::endUninterruptedSequence):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::emit_op_put_by_id):

2009-08-12  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Dave Kilzer.

        Disable WTF_USE_JSVALUE32_64 on iPhone for now (support not yet added for ARMv7).

        * wtf/Platform.h:

2009-08-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Maciej Stachoviak.

        Ooops - moved code that had been accidentally added to op_new_func instead of
        op_new_func_exp, to where it shoulds be.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * wtf/Platform.h:

2009-08-12  Ada Chan  <adachan@apple.com>

        Added workaround for the limitation that VirtualFree with MEM_RELEASE
        can only accept the base address returned by VirtualAlloc when the region
        was reserved and it can only free the entire region, and not a part of it.

        Reviewed by Oliver Hunt.

        * runtime/MarkStack.h:
        (JSC::MarkStack::MarkStackArray::shrinkAllocation):
        * runtime/MarkStackWin.cpp:
        (JSC::MarkStack::releaseStack):

2009-08-12  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>

        Reviewed by Ariya Hidayat.

        Build fix: use std::numeric_limits<long long>::min() instead of LLONG_MIN
        since LLONG_MIN is not defined in standard c++.

        * runtime/UString.cpp:
        (JSC::UString::from):

2009-08-12  Benjamin Otte  <otte@gnome.org>

        Reviewed by Jan Alonzo.

        Buildfix for Gtk platforms debug builds.

        * GNUmakefile.am: Choose MarkStackPosix.cpp or MarkStackWin.cpp
        depending on platform.

2009-08-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Prospective build fix for Mac and 32-bit Windows.

        * runtime/UString.cpp: Include wtf/StringExtras.h for snprintf.
        (JSC::UString::from): Use %lld instead of %I64d for snprintf
        on non-windows platforms.

2009-08-12  Prasanth Ullattil  <prasanth.ullattil@nokia.com>

        Reviewed by Simon Hausmann.

        Fix compile error on 64Bit Windows, when UString::from
        is called with an intptr_t.

        Added new UString::From overload with long long parameter.

        Thanks to Holger for the long long idea.

        * runtime/UString.cpp:
        (JSC::UString::from):
        * runtime/UString.h:

2009-08-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Mark Rowe.

        Minor style fixes.

        * runtime/UString.h:
        (JSC::UString::Rep::createEmptyBuffer):
        * wtf/FastMalloc.h:
        (WTF::TryMallocReturnValue::getValue):

2009-08-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make it harder to misuse try* allocation routines
        https://bugs.webkit.org/show_bug.cgi?id=27469

        Jump through a few hoops to make it much harder to accidentally
        miss null-checking of values returned by the try-* allocation
        routines.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSArray.cpp:
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::increaseVectorLength):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncLink):
        * runtime/UString.cpp:
        (JSC::allocChars):
        (JSC::reallocChars):
        (JSC::expandCapacity):
        (JSC::UString::Rep::reserveCapacity):
        (JSC::UString::expandPreCapacity):
        (JSC::createRep):
        (JSC::concatenate):
        (JSC::UString::spliceSubstringsWithSeparators):
        (JSC::UString::replaceRange):
        (JSC::UString::append):
        (JSC::UString::operator=):
        * runtime/UString.h:
        (JSC::UString::Rep::createEmptyBuffer):
        * wtf/FastMalloc.cpp:
        (WTF::tryFastZeroedMalloc):
        (WTF::tryFastMalloc):
        (WTF::tryFastCalloc):
        (WTF::tryFastRealloc):
        (WTF::TCMallocStats::tryFastMalloc):
        (WTF::TCMallocStats::tryFastCalloc):
        (WTF::TCMallocStats::tryFastRealloc):
        * wtf/FastMalloc.h:
        (WTF::TryMallocReturnValue::TryMallocReturnValue):
        (WTF::TryMallocReturnValue::~TryMallocReturnValue):
        (WTF::TryMallocReturnValue::operator PossiblyNull<T>):
        (WTF::TryMallocReturnValue::getValue):
        * wtf/Platform.h:
        * wtf/PossiblyNull.h: Added.
        (WTF::PossiblyNull::PossiblyNull):
        (WTF::PossiblyNull::~PossiblyNull):
        (WTF::::getValue):

2009-08-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix part deux).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-11  Gavin Barraclough  <barraclough@apple.com>

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Restrict use of FuncDeclNode & FuncExprNode to the parser.
        https://bugs.webkit.org/show_bug.cgi?id=28209

        These objects were also being referenced from the CodeBlock.  By changing this
        to just retain pointers to FunctionBodyNodes these classes can be restricted to
        use during parsing.

        No performance impact (or sub-percent progression).

        * JavaScriptCore.exp:
            Update symbols.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::mark):
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addFunction):
        (JSC::CodeBlock::function):
            Unify m_functions & m_functionExpressions into a single Vector<RefPtr<FuncExprNode> >.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::addConstant):
        (JSC::BytecodeGenerator::emitNewFunction):
        (JSC::BytecodeGenerator::emitNewFunctionExpression):
        * bytecompiler/BytecodeGenerator.h:
            FunctionStacks now contain FunctionBodyNodes not FuncDeclNodes.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::privateExecute):
            Update to reflect chnages in CodeBlock.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_func_exp):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        (JSC::):
            Update to reflect chnages in CodeBlock.

        * parser/Grammar.y:
            FunctionStacks now contain FunctionBodyNodes not FuncDeclNodes.

        * parser/NodeConstructors.h:
        (JSC::FuncExprNode::FuncExprNode):
        (JSC::FuncDeclNode::FuncDeclNode):
        * parser/Nodes.cpp:
        (JSC::ScopeNodeData::mark):
        (JSC::FunctionBodyNode::finishParsing):
        * parser/Nodes.h:
        (JSC::FunctionBodyNode::ident):
            Move m_ident & make methods from FuncDeclNode & FuncExprNode to FunctionBodyNode.

        * runtime/JSFunction.h:
        (JSC::FunctionBodyNode::make):
            Make this method inline (was FuncDeclNode::makeFunction).

2009-08-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Native JSON.stringify does not omit functions
        https://bugs.webkit.org/show_bug.cgi?id=28117

        Objects that are callable should be treated as undefined when
        serialising to JSON.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendStringifiedValue):

2009-08-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        REGRESSION: Hang/crash in BytecodeGenerator::constRegisterFor loading simple page
        https://bugs.webkit.org/show_bug.cgi?id=28169

        Handle the case where someone has attempted to shadow a property
        on the global object with a constant.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::constRegisterFor):
        * parser/Nodes.cpp:
        (JSC::ConstDeclNode::emitCodeSingle):

2009-08-11  John Gregg  <johnnyg@google.com>

        Reviewed by Maciej Stachowiak.

        Desktop Notifications API
        https://bugs.webkit.org/show_bug.cgi?id=25463

        Adds ENABLE_NOTIFICATION flag.

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

2009-08-11  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Modifications on JavaScriptCore to allow Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=28121

        * runtime/Collector.cpp: Haiku doesn't have sys/mman.h, using OS.h instead.
        (JSC::currentThreadStackBase): Haiku uses its own threading system.
        * wtf/Platform.h: Defining all Haiku platform values.
        * wtf/haiku/MainThreadHaiku.cpp: Adding a missing header (NotImplemented.h).

2009-08-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Fix windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-11  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        Buildfix for Qt-win platforms.

        * JavaScriptCore.pri: Choose MarkStackPosix.cpp or MarkStackWin.cpp depend on platform.

2009-08-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (And another build fix).

        Add new exports for MSVC

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-08-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (yet another build fix).

        Remove obsolete entries from MSVC exports file

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-10  Oliver Hunt  <oliver@apple.com>

        Add includes needed for non-allinonefile builds

        * runtime/GetterSetter.h:
        * runtime/ScopeChain.h:

2009-08-10  Oliver Hunt  <oliver@apple.com>

        Fix export file for last build fix

        * JavaScriptCore.exp:

2009-08-10  Oliver Hunt  <oliver@apple.com>

        Hoist page size initialization into platform specific code.

        * jit/ExecutableAllocatorPosix.cpp:
        * jit/ExecutableAllocatorWin.cpp:
        * runtime/MarkStack.h:
        (JSC::MarkStack::pageSize):
        * runtime/MarkStackPosix.cpp:
        (JSC::MarkStack::initializePagesize):
        * runtime/MarkStackWin.cpp:
        (JSC::MarkStack::initializePagesize):

2009-08-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Stack overflow crash in JavaScript garbage collector mark pass
        https://bugs.webkit.org/show_bug.cgi?id=12216

        Make the GC mark phase iterative by using an explicit mark stack.
        To do this marking any single object is performed in multiple stages
          * The object is appended to the MarkStack, this sets the marked
            bit for the object using the new markDirect() function, and then
            returns
          * When the MarkStack is drain()ed the object is popped off the stack
            and markChildren(MarkStack&) is called on the object to collect 
            all of its children.  drain() then repeats until the stack is empty.

        Additionally I renamed a number of methods from 'mark' to 'markAggregate'
        in order to make it more clear that marking of those object was not
        going to result in an actual recursive mark.

        * GNUmakefile.am
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::markAggregate):
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::markChildren):
        * debugger/DebuggerActivation.h:
        * interpreter/Register.h:
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::markGlobals):
        (JSC::RegisterFile::markCallFrames):
        * parser/Nodes.cpp:
        (JSC::ScopeNodeData::markAggregate):
        (JSC::EvalNode::markAggregate):
        (JSC::FunctionBodyNode::markAggregate):
        * parser/Nodes.h:
        (JSC::ScopeNode::markAggregate):
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):
        * runtime/ArgList.h:
        * runtime/Arguments.cpp:
        (JSC::Arguments::markChildren):
        * runtime/Arguments.h:
        * runtime/Collector.cpp:
        (JSC::Heap::markConservatively):
        (JSC::Heap::markCurrentThreadConservativelyInternal):
        (JSC::Heap::markCurrentThreadConservatively):
        (JSC::Heap::markOtherThreadConservatively):
        (JSC::Heap::markStackObjectsConservatively):
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::collect):
        * runtime/Collector.h:
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::markChildren):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::GetterSetter):
        (JSC::GetterSetter::createStructure):
        * runtime/GlobalEvalFunction.cpp:
        (JSC::GlobalEvalFunction::markChildren):
        * runtime/GlobalEvalFunction.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::markChildren):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::markChildren):
        * runtime/JSArray.h:
        * runtime/JSCell.h:
        (JSC::JSCell::markCellDirect):
        (JSC::JSCell::markChildren):
        (JSC::JSValue::markDirect):
        (JSC::JSValue::markChildren):
        (JSC::JSValue::hasChildren):
        (JSC::MarkStack::append):
        (JSC::MarkStack::drain):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::markChildren):
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::markChildren):
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::markAggregate):
        (JSC::JSONObject::markStringifiers):
        * runtime/JSONObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::markChildren):
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        * runtime/JSObject.h:
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::markChildren):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::createStructure):
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::create):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::markChildren):
        * runtime/JSStaticScopeObject.h:
        * runtime/JSType.h:
        (JSC::):
        * runtime/JSValue.h:
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::markChildren):
        * runtime/JSWrapperObject.h:
        * runtime/MarkStack.cpp: Added.
        (JSC::MarkStack::compact):
        * runtime/MarkStack.h: Added.
        (JSC::):
        (JSC::MarkStack::MarkStack):
        (JSC::MarkStack::append):
        (JSC::MarkStack::appendValues):
        (JSC::MarkStack::~MarkStack):
        (JSC::MarkStack::MarkSet::MarkSet):
        (JSC::MarkStack::pageSize):
        
        MarkStackArray is a non-shrinking, mmap-based vector type
        used for storing objects to be marked.
        (JSC::MarkStack::MarkStackArray::MarkStackArray):
        (JSC::MarkStack::MarkStackArray::~MarkStackArray):
        (JSC::MarkStack::MarkStackArray::expand):
        (JSC::MarkStack::MarkStackArray::append):
        (JSC::MarkStack::MarkStackArray::removeLast):
        (JSC::MarkStack::MarkStackArray::isEmpty):
        (JSC::MarkStack::MarkStackArray::size):
        (JSC::MarkStack::MarkStackArray::shrinkAllocation):
        * runtime/MarkStackPosix.cpp: Added.
        (JSC::MarkStack::allocateStack):
        (JSC::MarkStack::releaseStack):
        * runtime/MarkStackWin.cpp: Added.
        (JSC::MarkStack::allocateStack):
        (JSC::MarkStack::releaseStack):

        * runtime/ScopeChain.h:
        * runtime/ScopeChainMark.h:
        (JSC::ScopeChain::markAggregate):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::mark):
        * runtime/Structure.h:
        (JSC::Structure::markAggregate):

2009-08-10  Mark Rowe  <mrowe@apple.com>
        
        Reviewed by Darin Adler.

        Fix hundreds of "pointer being freed was not allocated" errors seen on the build bot.

        * wtf/FastMalloc.h: Implement nothrow variants of the delete and delete[] operators since
        we implement the nothrow variants of new and new[].  The nothrow variant of delete is called
        explicitly in the implementation of std::sort which was resulting in FastMalloc-allocated
        memory being passed to the system allocator to free.

2009-08-10  Jan Michael Alonzo  <jmalonzo@webkit.org>

        [Gtk] Unreviewed build fix. Move JSAPIValueWrapper.cpp/.h in the debug
        section. This file is already part of AllInOneFile in Release builds.

        * GNUmakefile.am:

2009-08-10  Darin Adler  <darin@apple.com>

        * wtf/FastMalloc.h: Fix build.

2009-08-10  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        FastMalloc.h has cross-platform code but marked as WinCE-only
        https://bugs.webkit.org/show_bug.cgi?id=28160

        1) The support for nothrow was inside #if PLATFORM(WINCE) even though it is
           not platform-specific.
        2) The code tried to override operator delete nothrow, which does not exist.
        3) The code in the header checks the value of USE_SYSTEM_MALLOC, but the code
           in FastMalloc.cpp checks only if the macro is defined.

        * wtf/FastMalloc.h: See above.
        * wtf/FastMalloc.cpp: Ditto.

2009-08-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix an annoying indentation issue.

        * runtime/DateConstructor.cpp:
        (JSC::constructDate):

2009-08-10  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        Add new files to makefile.

        * GNUmakefile.am:

2009-08-10  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix compilation with the interpreter instead of the JIT by including
        PrototypeFunction.h as forward-declared through NativeFunctionWrapper.h.

        * runtime/ObjectConstructor.cpp:

2009-08-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by George Staikos.

        JSON.stringify replacer returning undefined does not omit object properties
        https://bugs.webkit.org/show_bug.cgi?id=28118

        Correct behaviour of stringify when using a replacer function that returns
        undefined.  This is a simple change to move the undefined value check to
        after the replacer function is called.  This means that the replacer function
        is now called for properties with the value undefined, however i've confirmed
        that this behaviour is correct.
        
        In addition I've made the cyclic object exception have a more useful error
        message.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendStringifiedValue):

2009-08-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric Seidel and Sam Weinig.

        [ES5] Implement Object.getPrototypeOf
        https://bugs.webkit.org/show_bug.cgi?id=28114

        Implement getPrototypeOf

        * runtime/CommonIdentifiers.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConsGetPrototypeOf):
        * runtime/ObjectConstructor.h:

2009-08-07  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for Noncopyable class
        https://bugs.webkit.org/show_bug.cgi?id=27879

        Several classes which are inherited from Noncopyable are instantiated by
        operator new, so Noncopyable class has been inherited from FastAllocBase.

        * wtf/Noncopyable.h:

2009-08-07  George Staikos <george.staikos@torchmobile.com> 

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=27305
        Implement WinCE-specific unicode layer.
        Written by George Staikos <george.staikos@torchmobile.com>
        with bug fixes by Yong Li <yong.li@torchmobile.com>
        refactored by Joe Mason <joe.mason@torchmobile.com> 

        * wtf/Platform.h:
        * wtf/unicode/Unicode.h:
        * wtf/unicode/wince/UnicodeWince.cpp: Added.
        (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::toTitleCase):
        (WTF::Unicode::direction):
        (WTF::Unicode::category):
        (WTF::Unicode::decompositionType):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::digitValue):
        * wtf/unicode/wince/UnicodeWince.h: Added.
        (WTF::Unicode::):
        (WTF::Unicode::isSeparatorSpace):
        (WTF::Unicode::isHighSurrogate):
        (WTF::Unicode::isLowSurrogate):
        (WTF::Unicode::isArabicChar):
        (WTF::Unicode::hasLineBreakingPropertyComplexContext):
        (WTF::Unicode::umemcasecmp):
        (WTF::Unicode::surrogateToUcs4):

2009-08-07  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Eric Seidel.

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

        Add inline to help winscw compiler resolve specialized argument in 
        templated functions.  

        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::Lexer::lexString):

2009-08-07  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for RegExpObjectData struct
        http://bugs.webkit.org/show_bug.cgi?id=26750

        Inherits RegExpObjectData struct from FastAllocBase because
        it has been instantiated by 'new' in JavaScriptCore/runtime/RegExpObject.cpp:62

        * runtime/RegExpObject.h:

2009-08-06  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Darin Adler.

        Updated patch for bug #27059:
        Symbian platform always uses little endian encoding,
        regardless of compiler.
        We need to make sure that we correctly detect EABI architecture
        for armv5 targets on Symbian,
        where __EABI__ is set but not __ARM_EABI__

        * wtf/Platform.h:

2009-08-06  Adam Barth  <abarth@webkit.org>

        Unreviewed revert.

        http://bugs.webkit.org/show_bug.cgi?id=27879

        Revert 46877 because it broke GTK.

        * wtf/Noncopyable.h:

2009-08-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification.
        ( https://bugs.webkit.org/show_bug.cgi?id=27635 )

        This improves performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds by 2-2.5%, reducing the overhead to about 2.5%.
        (No performance impact with ASSEMBLER_WX_EXCLUSIVE disabled).

        * bytecode/CodeBlock.cpp:
        (JSC::printStructureStubInfo):
            - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.

        * bytecode/CodeBlock.h:
        (JSC::):
        (JSC::CallLinkInfo::seenOnce):
        (JSC::CallLinkInfo::setSeen):
        (JSC::MethodCallLinkInfo::seenOnce):
        (JSC::MethodCallLinkInfo::setSeen):
            - Change a pointer in CallLinkInfo/MethodCallLinkInfo to use a PtrAndFlags, use a flag to track when an op has been executed once.

        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):
            - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.

        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::StructureStubInfo):
        (JSC::StructureStubInfo::initGetByIdSelf):
        (JSC::StructureStubInfo::initGetByIdProto):
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::initGetByIdSelfList):
        (JSC::StructureStubInfo::initGetByIdProtoList):
        (JSC::StructureStubInfo::initPutByIdTransition):
        (JSC::StructureStubInfo::initPutByIdReplace):
        (JSC::StructureStubInfo::seenOnce):
        (JSC::StructureStubInfo::setSeen):
            - Make StructureStubInfo store the type as an integer, rather than an OpcodeID, add a flag to track when an op has been executed once.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
            - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::unlinkCall):
            - Remove the "don't lazy link" stage of calls.

        * jit/JIT.h:
        (JSC::JIT::compileCTIMachineTrampolines):
            - Remove the "don't lazy link" stage of calls.

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallSlowCase):
            - Remove the "don't lazy link" stage of calls.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
        (JSC::JITStubs::getPolymorphicAccessStructureListSlot):
            - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.

        * jit/JITStubs.h:
        (JSC::JITThunks::ctiStringLengthTrampoline):
        (JSC::JITStubs::):
            - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.

        * wtf/PtrAndFlags.h:
        (WTF::PtrAndFlags::PtrAndFlags):
        (WTF::PtrAndFlags::operator!):
        (WTF::PtrAndFlags::operator->):
            - Add ! and -> operators, add constuctor with pointer argument.

2009-08-06  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Adam Barth.

        Allow custom memory allocation control for Noncopyable class
        https://bugs.webkit.org/show_bug.cgi?id=27879

        Several classes which inherited from Noncopyable are instantiated by
        operator new, so Noncopyable class has been inherited from FastAllocBase.

        * wtf/Noncopyable.h:

2009-08-06  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Add explicit dependencies for our build verification scripts to ensure that they always run after linking has completed.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-08-06  Mark Rowe  <mrowe@apple.com>

        Bring a little order to our otherwise out of control lives.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-08-06  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for JavaScriptCore's PolymorphicAccessStructureList struct
        https://bugs.webkit.org/show_bug.cgi?id=27877

        Inherits PolymorphicAccessStructureList struct from FastAllocBase because it has been instantiated by
        'new' in JavaScriptCore/jit/JITStubs.cpp:1229.

        * bytecode/Instruction.h:

2009-08-05  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for JavaScriptCore's ScopeNodeData struct
        https://bugs.webkit.org/show_bug.cgi?id=27875

        Inherits ScopeNodeData struct from FastAllocBase because it has been instantiated by
        'new' in JavaScriptCore/parser/Nodes.cpp:1848.

        * parser/Nodes.h:

2009-08-05  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Add floating point support for generic ARM port.
        https://bugs.webkit.org/show_bug.cgi?id=24986

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::doubleTransfer):
        * assembler/ARMAssembler.h:
        (JSC::ARM::):
        (JSC::ARMAssembler::):
        (JSC::ARMAssembler::faddd_r):
        (JSC::ARMAssembler::fsubd_r):
        (JSC::ARMAssembler::fmuld_r):
        (JSC::ARMAssembler::fcmpd_r):
        (JSC::ARMAssembler::fdtr_u):
        (JSC::ARMAssembler::fdtr_d):
        (JSC::ARMAssembler::fmsr_r):
        (JSC::ARMAssembler::fsitod_r):
        (JSC::ARMAssembler::fmstat):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::):
        (JSC::MacroAssemblerARM::supportsFloatingPoint):
        (JSC::MacroAssemblerARM::loadDouble):
        (JSC::MacroAssemblerARM::storeDouble):
        (JSC::MacroAssemblerARM::addDouble):
        (JSC::MacroAssemblerARM::subDouble):
        (JSC::MacroAssemblerARM::mulDouble):
        (JSC::MacroAssemblerARM::convertInt32ToDouble):
        (JSC::MacroAssemblerARM::branchDouble):
        * jit/JIT.h:

2009-08-05  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Add JIT support for generic ARM port without optimizations.
        https://bugs.webkit.org/show_bug.cgi?id=24986

        All JIT optimizations are disabled.

        Signed off by Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
        Signed off by Gabor Loki <loki@inf.u-szeged.hu>

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::baseIndexTransfer32):
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Imm32::Imm32):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::store32):
        (JSC::MacroAssemblerARM::move):
        (JSC::MacroAssemblerARM::branch32):
        (JSC::MacroAssemblerARM::add32):
        (JSC::MacroAssemblerARM::sub32):
        (JSC::MacroAssemblerARM::load32):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::getBytecodeIndex):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::restoreArgumentReference):
        * jit/JITOpcodes.cpp:
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:
        (JSC::JITStackFrame::returnAddressSlot):
        * wtf/Platform.h:

2009-08-04  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Oiver Hunt.

        Revert r46643 since this breaks the Yarr::Interpreter running the v8 tests.
        https://bugs.webkit.org/show_bug.cgi?id=27874

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::allocDisjunctionContext):
        (JSC::Yarr::Interpreter::freeDisjunctionContext):
        (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):

2009-08-04  Oliver Hunt  <oliver@apple.com>

        PPC64 Build fix

        * wtf/Platform.h:

2009-08-04  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Adam Treat

        Explicitly include limits.h header when using INT_MAX and INT_MIN

        * interpreter/Interpreter.cpp

2009-08-03  Harald Fernengel  <harald.fernengel@nokia.com>

        Reviewed by Darin Adler.

        Fix compile error for ambigous call to abs()
        https://bugs.webkit.org/show_bug.cgi?id=27873

        Fix ambiguity in abs(long int) call by calling labs() instead

        * wtf/DateMath.cpp: replace call to abs() with labs()

2009-08-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Consolidate common gcc flags to WebKit.pri
        https://bugs.webkit.org/show_bug.cgi?id=27934

        * JavaScriptCore.pro:

2009-08-03  Ada Chan  <adachan@apple.com>

        Fixed the Tiger build.

        * wtf/FastMalloc.cpp:

2009-08-03  Ada Chan  <adachan@apple.com>

        Reviewed by Darin Adler.

        Don't use background thread to scavenge memory on Tiger until we figure out why it causes a crash.
        https://bugs.webkit.org/show_bug.cgi?id=27900

        * wtf/FastMalloc.cpp:

2009-08-03  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Jan Alonzo.

        Fix build break on Gtk/x86_64.
        https://bugs.webkit.org/show_bug.cgi?id=27936

        Use JSVALUE64 for X86_64 LINUX, except Qt.

        * wtf/Platform.h:

2009-08-02  Xan Lopez  <xlopez@igalia.com>

        Fix the GTK+ build.

        * wtf/Platform.h:

2009-08-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Disabled JSVALUE32_64 on Qt builds, since all layout tests mysteriously
        crash with it enabled.

        * wtf/Platform.h:

2009-08-02  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix.

        Added JSAPIValueWrapper.cpp to the build.

        * JavaScriptCore.pri:

2009-08-02  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix.

        Exported symbols for JSAPIValueWrapper.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-08-02  Geoffrey Garen  <ggaren@apple.com>

        GTK build fix.

        * jit/JITStubs.cpp: #include <stdarg.h>, for a definition of va_start.

2009-08-02  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix.
        
        * runtime/Collector.cpp: #include <limits.h>, for a definition of ULONG_MAX.

2009-08-02  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Nixed JSImmediate::prototype, JSImmediate::toObject,
        and JSImmediate::toThisObject, and removed their exported symbols.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
        * runtime/JSImmediate.cpp:
        * runtime/JSImmediate.h:

2009-08-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        Enabled JSVALUE32_64 by default on all platforms other than x86_64 (which uses JSVALUE64).

        * wtf/Platform.h:

2009-08-02  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Jan Alonzo.

        Script for building the JavaScriptCore library for wx.
        https://bugs.webkit.org/show_bug.cgi?id=27619

        * wscript: Added.

2009-08-02  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        DateMath depends on strftime and localtime, which need to be imported manually on WinCE
        https://bugs.webkit.org/show_bug.cgi?id=26558

        * wtf/DateMath.cpp:

2009-08-01  David Kilzer  <ddkilzer@apple.com>

        wtf/Threading.h: added include of Platform.h

        Reviewed by Mark Rowe.

        * wtf/Threading.h: Added #include "Platform.h" since this header
        uses PLATFORM() and other macros.

2009-08-01  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Oliver Hunt.

        Roll out r46668 as it was misinformed.  ScopeChain is only used with placement new.

        * runtime/ScopeChain.h:

2009-08-01  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Allow custom memory allocation control for JavaScriptCore's HashMap class
        http://bugs.webkit.org/show_bug.cgi?id=27871

        Inherits HashMap class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/API/JSClassRef.cpp:148.

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

2009-08-01  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Allow custom memory allocation control for JavaScriptCore's ScopeChain class
        https://bugs.webkit.org/show_bug.cgi?id=27834

        Inherits ScopeChain class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/runtime/JSFunction.h:109.

        * runtime/ScopeChain.h:

2009-08-01  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for JavaScriptCore's RegExpConstructorPrivate struct 
        https://bugs.webkit.org/show_bug.cgi?id=27833

        Inherits RegExpConstructorPrivate class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/runtime/RegExpConstructor.cpp:152.

        * runtime/RegExpConstructor.cpp:

2009-07-31  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        Resurrect the old GetTickCount implementation of currentTime, controlled by WTF_USE_QUERY_PERFORMANCE_COUNTER
        currentSystemTime taken from older WebKit; currentTime written by Yong Li <yong.li@torchmobile.com>; cleanup by Joe Mason <joe.mason@torchmobile.com>
        https://bugs.webkit.org/show_bug.cgi?id=27848

        * wtf/CurrentTime.cpp:
        (WTF::currentSystemTime): get current time with GetCurrentFT
        (WTF::currentTime): track msec elapsed since first currentSystemTime call using GetTickCount
        * wtf/Platform.h:

2009-07-31  Ada Chan  <adachan@apple.com>

        Fixes the Windows release-PGO build.

        Reviewed by Jon Honeycutt.

        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Suppresses the warning about unreachable code that we get by adding "return 0" to WTF::TCMalloc_PageHeap::runScavengerThread().
        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::runScavengerThread): Fixes the error about the method not returning a value in the release-PGO build.

2009-07-31  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Change malloc to fastMalloc and free to fastFree in Yarr's RegexInterpreter.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27874

        Use fastMalloc and fastFree instead of malloc and free in RegexInterpreter.cpp's methods.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::allocDisjunctionContext):
        (JSC::Yarr::Interpreter::freeDisjunctionContext):
        (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):

2009-07-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Fix compiler warning.

        GCC does not like C++-style comments in preprocessor directives.

        * wtf/Platform.h:

2009-07-30  John McCall  <rjmccall@apple.com>

        Reviewed by Gavin Barraclough.

        Optimize the X86_64 trampolines: avoid the need for filler arguments
        and move the stub-args area closer to the stack pointer.

        * jit/JIT.h: adjust patch offsets because of slight code-size change 
        * jit/JITCode.h:
        (JSC::JITCode::execute): don't pass filler args
        * jit/JITStubs.cpp:
        (ctiTrampoline): (X86_64): push args onto stack, use args directly
        (ctiVMThrowTrampoline): (X86_64): adjust %rsp by correct displacement
        (ctiOpThrowNotCaught): (X86_64): adjust %rsp by correct displacement
        * jit/JITStubs.h:
        (JITStackFrame): (X86_64): move args area earlier
        (ctiTrampoline): remove filler args from prototype

2009-07-30  Gavin Barraclough  <barraclough@apple.com>

        Temporarily revert r46618 since this is b0rking on Linux.

2009-07-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification.
        ( https://bugs.webkit.org/show_bug.cgi?id=27635 )

        This improves performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds by 2-2.5%, reducing the overhead to about 2.5%.
        (No performance impact with ASSEMBLER_WX_EXCLUSIVE disabled).

        * bytecode/CodeBlock.cpp:
        (JSC::printStructureStubInfo):
            - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.

        * bytecode/CodeBlock.h:
        (JSC::):
        (JSC::CallLinkInfo::seenOnce):
        (JSC::CallLinkInfo::setSeen):
        (JSC::MethodCallLinkInfo::seenOnce):
        (JSC::MethodCallLinkInfo::setSeen):
            - Change a pointer in CallLinkInfo/MethodCallLinkInfo to use a PtrAndFlags, use a flag to track when an op has been executed once.

        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):
            - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.

        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::StructureStubInfo):
        (JSC::StructureStubInfo::initGetByIdSelf):
        (JSC::StructureStubInfo::initGetByIdProto):
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::initGetByIdSelfList):
        (JSC::StructureStubInfo::initGetByIdProtoList):
        (JSC::StructureStubInfo::initPutByIdTransition):
        (JSC::StructureStubInfo::initPutByIdReplace):
        (JSC::StructureStubInfo::seenOnce):
        (JSC::StructureStubInfo::setSeen):
            - Make StructureStubInfo store the type as an integer, rather than an OpcodeID, add a flag to track when an op has been executed once.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
            - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::unlinkCall):
            - Remove the "don't lazy link" stage of calls.

        * jit/JIT.h:
        (JSC::JIT::compileCTIMachineTrampolines):
            - Remove the "don't lazy link" stage of calls.

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallSlowCase):
            - Remove the "don't lazy link" stage of calls.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
        (JSC::JITStubs::getPolymorphicAccessStructureListSlot):
            - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.

        * jit/JITStubs.h:
        (JSC::JITThunks::ctiStringLengthTrampoline):
        (JSC::JITStubs::):
            - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.

        * wtf/PtrAndFlags.h:
        (WTF::PtrAndFlags::PtrAndFlags):
        (WTF::PtrAndFlags::operator!):
        (WTF::PtrAndFlags::operator->):
            - Add ! and -> operators, add constuctor with pointer argument.

2009-07-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin Barraclough.

        Fixed failing tests seen on Windows buildbot.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        (JSC::): Use "int" instead of "bool" to guarantee a 32-bit result,
        regardless of compiler. gcc on mac uses 32-bit values for bool,
        but gcc on linux and MSVC on Windows use 8-bit values.

2009-07-30  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: added missing symbols on Windows.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-07-30  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: removed stale symbols on Windows.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

=== End merge of nitro-extreme branch 2009-07-30 ===

2009-07-20  Geoffrey Garen  <ggaren@apple.com>

        Fixed a post-review typo in r46066 that caused tons of test failures.
        
        SunSpider reports no change.

        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray): Initialize the full vector capacity, to avoid
        uninitialized members at the end.

2009-07-20  Geoffrey Garen  <ggaren@apple.com>

        Windows WebKit build fix: Added some missing exports.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-07-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Get the branch working on windows.
        https://bugs.webkit.org/show_bug.cgi?id=27391
        
        SunSpider says 0.3% faster.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Updated
        MSVC export lists to fix linker errors.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added / removed
        new / old project files.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines): Used #pragma pack to tell
        MSVC that these structures represent actual memory layout, and should not be
        automatically aligned. Changed the return value load to load a 64bit quantity
        into the canonical registers.

        * jit/JIT.h: Moved OBJECT_OFFSETOF definition to StdLibExtras.h because
        it's needed by more than just the JIT, and it supplements a standard library
        macro (offsetof).

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame): Fixed an incorrectly signed
        cast to resolve an MSVC warning.

        * jit/JITStubs.h: Used #pragma pack to tell MSVC that these structures
        represent actual memory layout, and should not be automatically aligned. 

        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray): Replaced memset_pattern8 with a for loop, since
        memset_pattern8 is not portable. (I verified that this version of the loop
        gives the best performance / generated code in GCC.)

        * runtime/JSObject.h:
        (JSC::JSObject::JSObject): Removed accidental usage of FIELD_OFFSET --
        OBJECT_OFFSETOF is our new macro name. (FIELD_OFFSET conflicts with a
        definition in winnt.h.)

        * runtime/JSValue.cpp: Added some headers needed by non-all-in-one builds.
        
        * runtime/JSValue.h:
        (JSC::JSValue::): Made the tag signed, to match MSVC's signed enum values.
        (GCC doesn't seem to care one way or the other.)

        * wtf/MainThread.cpp: Moved the StdLibExtras.h #include -- I did this a
        while ago to resolve a conflict with winnt.h. I can't remember if it's truly
        still needed, but what the heck.

        * wtf/StdLibExtras.h: Moved OBJECT_OFFSETOF definition here.

2009-07-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig (?).
        
        Fixed an assertion seen during the stress test.
        
        Don't assume that, if op1 is constant, op2 is not, and vice versa. Sadly,
        not all constants get folded.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emitSlow_op_jnlesseq):

2009-07-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Include op_convert_this in result caching.
        
        No change on SunSpider or v8.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_convert_this):

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        (JSC::): Made the op_convert_this JIT stub return an EncodedJSValue, so
        to maintain the result caching contract that { tag, payload } can be
        found in { regT1, regT0 }.

2009-07-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Implemented result chaining.
        
        1% faster on SunSpider. 4%-5% faster on v8.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::move):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movl_rr): Added an optimization to eliminate
        no-op mov instructions, to simplify chaining.

        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        * jit/JIT.h: Added data members and helper functions for recording
        chained results. We record both a mapping from virtual to machine register
        and the opcode for which the mapping is valid, to help ensure that the
        mapping isn't used after the mapped register has been stomped by other
        instructions.

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCallVarargsSlowCase):
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_construct_verify):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase): Chain function call results.

        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoadTag):
        (JSC::JIT::emitLoadPayload):
        (JSC::JIT::emitLoad):
        (JSC::JIT::emitLoad2):
        (JSC::JIT::isLabeled):
        (JSC::JIT::map):
        (JSC::JIT::unmap):
        (JSC::JIT::isMapped):
        (JSC::JIT::getMappedPayload):
        (JSC::JIT::getMappedTag): Use helper functions when loading virtual
        registers into machine registers, in case the loads can be eliminated
        by chaining.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_end):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emit_op_get_global_var):
        (JSC::JIT::emit_op_put_global_var):
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_next_pname):
        (JSC::JIT::emit_op_to_jsnumber):
        (JSC::JIT::emit_op_catch): Chain results from these opcodes.

        (JSC::JIT::emit_op_profile_will_call):
        (JSC::JIT::emit_op_profile_did_call): Load the profiler into regT2 to
        avoid stomping a chained result.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_get_by_id): Chain results from these opcodes.

        * jit/JITStubCall.h:
        (JSC::JITStubCall::addArgument): Always use { regT1, regT0 }, to facilitate
        chaining.

        (JSC::JITStubCall::call): Unmap all mapped registers, since our callee
        stub might stomp them.

2009-07-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Don't reload values in emitBinaryDoubleOp.

        SunSpider reports a 0.6% progression. 

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emitBinaryDoubleOp):

2009-07-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Convert op_div to load op1 and op2 up front.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_div):

2009-07-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Don't emit code in emitBinaryDoubleOp if code is unreachable, observable
        via an empty (unlinked) jumplist passed in.  This only effects op_jnless
        and op_jnlesseq at present.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emitSlow_op_jnlesseq):
        (JSC::JIT::emitBinaryDoubleOp):

2009-07-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Converted op_mod to put { tag, payload } in { regT1, regT0 }, and
        tidied up its constant case.
        
        SunSpider reports a 0.2% regression, but a micro-benchmark of op_mod
        shows a 12% speedup, and the SunSpider test that uses op_mod most should
        benefit a lot from result caching in the end, since it almost always
        performs (expression) % constant.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):

2009-06-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Converted some more arithmetic ops to put { tag, payload } in
        { regT1, regT0 }.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul):

2009-06-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Converted some more arithmetic ops to put { tag, payload } in
        { regT1, regT0 }, and added a case for subtract constant.
        
        SunSpider says no change. v8 says 0.3% slower.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitAdd32Constant):
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emitSub32Constant):
        (JSC::JIT::emitSlow_op_sub):

2009-06-30  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Remove more uses of addressFor(), load double constants directly from
        the constantpool in the CodeBlock, rather than from the register file.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitAdd32Constant):
        (JSC::JIT::emitBinaryDoubleOp):

2009-06-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed a bug in postfix ops, where we would treat x = x++ and x = x--
        as a no-op, even if x were not an int, and the ++/-- could have side-effects.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_post_inc):
        (JSC::JIT::emitSlow_op_post_inc):
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emitSlow_op_post_dec):

2009-06-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Converted some arithmetic ops to put { tag, payload } in
        { regT1, regT0 }.
        
        SunSpider says 0.7% faster. v8 says no change.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emit_op_rshift):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emit_op_bitxor):
        * jit/JITInlineMethods.h:
        (JSC::JIT::isOperandConstantImmediateInt):
        (JSC::JIT::getOperandConstantImmediateInt):

2009-06-30  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Start removing cases of addressFor().

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitAdd32Constant):
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_div):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoadDouble):
        (JSC::JIT::emitLoadInt32ToDouble):
        (JSC::JIT::emitStoreDouble):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):

2009-06-30  Geoffrey Garen  <ggaren@apple.com>

        Rolled back in my last patch with regression fixed.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_less):
        (JSC::JIT::emit_op_loop_if_lesseq):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emitSlow_op_neq):

2009-06-30  Geoffrey Garen  <ggaren@apple.com>

        Rolled out my last patch because it was a 2% SunSpider regression.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_less):
        (JSC::JIT::emit_op_loop_if_lesseq):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emitSlow_op_neq):

2009-06-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin "Sam Weinig" Barraclough.
        
        Standardized the rest of our opcodes to put { tag, payload } in
        { regT1, regT0 } where possible.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_less):
        (JSC::JIT::emit_op_loop_if_lesseq):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emitSlow_op_neq):

2009-06-30  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoffrey Garen.

        Replace calls to store32(tagFor()) and store32(payloadFor())
        with emitStoreInt32(), emitStoreBool(), and emitStoreCell().

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emit_op_rshift):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emitBitAnd32Constant):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emitBitOr32Constant):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emitBitXor32Constant):
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emit_op_post_inc):
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emit_op_pre_inc):
        (JSC::JIT::emit_op_pre_dec):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitAdd32Constant):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emitSub32ConstantLeft):
        (JSC::JIT::emitSub32ConstantRight):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mod):
        * jit/JITCall.cpp:
        (JSC::JIT::emit_op_load_varargs):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitStoreInt32):
        (JSC::JIT::emitStoreCell):
        (JSC::JIT::emitStoreBool):
        (JSC::JIT::emitStore):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::call):

2009-06-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Standardized the rest of the property access instructions to put { tag,
        payload } in { regT1, regT0 }.

        Small v8 speedup, 0.2% SunSpider slowdown.

        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoad):
        (JSC::JIT::emitLoad2):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::patchPutByIdReplace):

2009-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Various cleanups.
        - Use fpRegT* instead of X86::xmm*.
        - Use a switch statement in emitBinaryDoubleOp instead of a bunch of
          if/elses.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitAdd32Constant):
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_div):

2009-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add inline code dealing with doubles for op_jfalse and op_jtrue.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::):
        (JSC::MacroAssemblerX86Common::zeroDouble):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):

2009-06-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Standardized op_get_by_id to put { tag, payload } in { regT1, regT0 }.
        
        SunSpider and v8 report maybe 0.2%-0.4% regressions, but the optimization
        this enables will win much more than that back.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):

2009-06-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Standardized op_call to put { tag, payload } in { regT1, regT0 }.
        
        SunSpider and v8 report no change.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallSetupArgs):
        (JSC::JIT::compileOpConstructSetupArgs):
        (JSC::JIT::compileOpCallVarargsSetupArgs):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):

2009-06-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Handle multiplying by zero a little better by
        inlining the case that both operands are non-negative
        into the slowpath.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::branchOr32):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul):

2009-06-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Optimize x++ to ++x inside for loops.
        
        Sadly, no measurable speedup, but this should help with result chaining.

        * parser/Nodes.cpp:
        (JSC::ForNode::emitBytecode):

2009-06-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_bitnot):
        (JSC::JIT::emit_op_post_inc):

2009-06-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emit_op_pre_inc):
        (JSC::JIT::emitSlow_op_pre_inc):
        (JSC::JIT::emit_op_pre_dec):
        (JSC::JIT::emitSlow_op_pre_dec):

2009-06-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emitSlow_op_negate):
        * jit/JITCall.cpp:
        (JSC::JIT::emit_op_construct_verify):
        (JSC::JIT::emitSlow_op_construct_verify):

2009-06-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_true):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):

2009-06-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig (sort of, maybe).
        
        Fixed some ASSERTs in http/tests/security.
        
        These ASSERTs were introduced by http://trac.webkit.org/changeset/45057,
        but the underlying problem was actually older. http://trac.webkit.org/changeset/45057
        just exposed the problem by enabling optimization in more cases.
        
        The ASSERTs fired because we tested PropertySlot::slotBase() for validity,
        but slotBase() ASSERTs if it's invalid, so we would ASSERT before
        the test could happen. Solution: Remove the ASSERT. Maybe it was valid
        once, but it clearly goes against a pattern we've deployed of late.
        
        The underlying problem was that WebCore would re-use a PropertySlot in
        the case of a forwarding access, and the second use would not completely
        overwrite the first use. Solution: Make sure to overwrite m_offset when
        setting a value on a PropertySlot. (Other values already get implicitly
        overwritten during reuse.)

        * runtime/PropertySlot.h:
        (JSC::PropertySlot::PropertySlot):
        (JSC::PropertySlot::setValueSlot):
        (JSC::PropertySlot::setValue):
        (JSC::PropertySlot::setRegisterSlot):
        (JSC::PropertySlot::setUndefined):
        (JSC::PropertySlot::slotBase):
        (JSC::PropertySlot::clearOffset):

2009-06-24  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Enable JIT_OPTIMIZE_METHOD_CALLS on the branch, implementation matches current implemenatation in ToT.

        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::emitSlow_op_method_check):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::compileGetByIdSlowCase):

2009-06-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Bit off a tiny bit more of standardizing opcode behavior to help with result
        caching.
        
        SunSpider reports no change, v8 maybe a tiny speedup.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_to_jsnumber):
        (JSC::JIT::emitSlow_op_to_jsnumber):
        (JSC::JIT::emit_op_convert_this):
        (JSC::JIT::emitSlow_op_convert_this):

2009-06-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Bit off a tiny bit more of standardizing opcode behavior to help with result
        caching -- including removing my old enemy, op_resolve_function, because
        it was non-standard, and removing it felt better than helping it limp along.
        
        SunSpider reports no change, v8 maybe a tiny speedup.
        
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        * bytecompiler/BytecodeGenerator.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emitSlow_op_to_primitive):
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:
        * parser/Nodes.cpp:
        (JSC::FunctionCallResolveNode::emitBytecode):

2009-06-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Bit off a tiny bit of standardizing opcode behavior to help with result
        caching.
        
        0.6% SunSpider speedup. 0.3% v8 speedup.

        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoad): Accomodate a base register that overlaps with payload
        by loading tag before payload, to avoid stomping base/payload.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov): Abide by the standard "tag in regT1, payload in
        regT0" semantics.

        (JSC::JIT::emit_op_get_global_var):
        (JSC::JIT::emit_op_put_global_var): Ditto. Also, removed some irrelevent
        loads while I was at it. The global object's "d" pointer never changes
        after construction.

2009-06-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Remove 'arguments' field from Register union (again).
        This time do so without breaking tests (radical, I know).

        * interpreter/CallFrame.h:
        (JSC::ExecState::optionalCalleeArguments):
        (JSC::ExecState::setArgumentCount):
        (JSC::ExecState::init):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::dumpRegisters):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveArguments):
        * interpreter/Register.h:
        (JSC::Register::withInt):
        (JSC::Register::):
        (JSC::Register::Register):
        (JSC::Register::i):
        * jit/JITStubs.cpp:
        (JSC::JITStubs::cti_op_tear_off_arguments):
        * runtime/Arguments.h:
        (JSC::JSActivation::copyRegisters):
        (JSC::Register::arguments):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::argumentsGetter):
        * runtime/JSActivation.h:

2009-06-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Removed some result register tracking cruft in preparation for a new
        result tracking mechanism.
        
        SunSpider reports no change.

        * assembler/AbstractMacroAssembler.h:
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::JmpDst::JmpDst): No need to track jump targets in
        machine code; we already do this in bytecode.

        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::emitTimeoutCheck): Make sure to save and restore the result
        registers, so an opcode with a timeout check can still benefit from result
        register caching.

        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases): Removed calls to killLastResultRegister()
        in preparation for something new.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitGetFromCallFrameHeaderPtr):
        (JSC::JIT::emitGetFromCallFrameHeader32):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_jsr):
        (JSC::JIT::emit_op_sret):
        (JSC::JIT::emit_op_jmp_scopes): ditto

        * jit/JITStubCall.h:
        (JSC::JITStubCall::JITStubCall):
        (JSC::JITStubCall::getArgument): added a mechanism for reloading an argument
        you passed to a JIT stub, for use in emitTimeoutCheck.

2009-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Remove now-useless inplace variants of binary ops.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emit_op_mul):

2009-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Move off memory operands to aid in re-enabling result caching.

        - No regression measured.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emit_op_rshift):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emitBitAnd32Constant):
        (JSC::JIT::emitBitAnd32InPlace):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emitBitOr32Constant):
        (JSC::JIT::emitBitOr32InPlace):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emitBitXor32Constant):
        (JSC::JIT::emitBitXor32InPlace):
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emit_op_post_inc):
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emit_op_pre_inc):
        (JSC::JIT::emitSlow_op_pre_inc):
        (JSC::JIT::emit_op_pre_dec):
        (JSC::JIT::emitSlow_op_pre_dec):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitAdd32Constant):
        (JSC::JIT::emitAdd32InPlace):
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emitSlowAdd32Constant):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emitSlow_op_sub):
        (JSC::JIT::emitSub32ConstantLeft):
        (JSC::JIT::emitSub32ConstantRight):
        (JSC::JIT::emitSub32InPlaceLeft):
        (JSC::JIT::emitSub32InPlaceRight):
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitMul32InPlace):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mod):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallVarargs):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_less):
        (JSC::JIT::emit_op_loop_if_lesseq):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emit_op_to_jsnumber):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):

2009-06-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed some missing and/or misplaced labels in bytecode generation, so
        we don't have to work around them in JIT code generation.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitJumpSubroutine):
        * parser/Nodes.cpp:
        (JSC::TryNode::emitBytecode):

2009-06-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        For member function calls, emit "this" directly into the "this" slot
        for the function call, instead of moving it there later. This reduces
        time spent in op_mov during certain calls, like "a.b.c()".
        
        1%-2% speedup on v8, mostly richards and delta-blue.

        * parser/Nodes.cpp:
        (JSC::FunctionCallDotNode::emitBytecode):

2009-06-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Remove 'arguments' field from Register union.  Having JSCell derived types in the union is
        dangerous since it opens the possibility for the field to be written as a raw pointer but
        then read as a JSValue.  This will lead to statle data being read for the tag, which may
        be dangerous.  Having removed Arguments* types form Register, all arguments objects must
        always explicitly be stored in the register file as JSValues.

        * interpreter/CallFrame.h:
        (JSC::ExecState::optionalCalleeArguments):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveArguments):
        * interpreter/Register.h:
        (JSC::Register::):
        * jit/JITStubs.cpp:
        (JSC::JITStubs::cti_op_tear_off_arguments):
        * runtime/Arguments.h:
        (JSC::JSActivation::copyRegisters):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::argumentsGetter):
        * runtime/JSActivation.h:

2009-06-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add back known this value optimization by abstracting
        slow case if not JSCell jumps.

        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCallVarargsSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        (JSC::JIT::linkSlowCaseIfNotJSCell):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):

2009-06-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed some of the regression in crypto-aes.js. (8.5% speedup in
        crypto-aes.js.)
        
        SunSpider reports no change overall.
        
        Division was producing double results, which took the slow path through
        array access code.
        
        Strangely, all my attempts at versions of this patch that modified array
        access code to accept ints encoded as doubles along the fast or slow paths
        were regressions. So I did this instead.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_div): When dividing an int by an int, go ahead and try
        to turn the result into an int. Don't just do int division, though, because
        testing shows it to be slower than SSE double division, and the corner
        cases are pretty complicated / lengthy on top of that. Also, don't try
        to canonicalize division of known tiny numerators into ints, since that's a
        waste of time.

2009-05-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Fixed a regression caused by my recent fix for NaN.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitBinaryDoubleOp): Actually do the comparison in reverse
        order, like the ChangeLog said we would, bokay?

2009-05-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig and Oliver Hunt.
        
        Fixed two edge cases in %:
        
        - Don't do -2147483648 % x as a fast case, since you might do -2147483648 % -1,
        which will signal a hardware exception due to overflow.

        - In the case of a zero remainder, be sure to store negative zero if the
        dividend was zero.
        
        SunSpider reports no change.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):

2009-05-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Fixed a regression when comparing to NaN.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitBinaryDoubleOp): For op_jnless and op_jnless_eq, do the
        comparison in reverse order, and jump if the result is below or 
        below-or-equal. This ensures that we do jump in the case of NaN.

2009-05-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        SunSpider says no change.
        
        Fixed regressions in fast/js/var-declarations-shadowing.html and
        fast/js/equality.html, caused by recent == and != optimizations.

        * jit/JITStubs.cpp:
        (JSC::JITStubs::cti_op_eq): Don't treat "compare to string" as always
        numeric or string comparison. If the second operand is an object, you
        need to ToPrimitive it, and start all over again. Also, I wrote out each
        of the possible cases explicitly, to cut down on redundant branching.

2009-05-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Fix bug in fast/js/constant-folding.html where we were not negating
        -0 properly.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate):

2009-05-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Refactored new slow case codegen for == and !=.
        
        SunSpider reports no change, maybe a tiny speedup.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emitSlow_op_neq): Made a vptr comparison a *Ptr operation,
        instead of *32, to make it portable to 64bit. Reorganized the string
        and generic cases to make their control flow a little clearer.

2009-05-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Optimized == and != for our new value representation -- especially for strings.
        
        14% speedup on date-format-tofte.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emitSlow_op_neq):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::JITStubCall):
        * jit/JITStubs.cpp:
        (JSC::JITStubs::cti_op_eq):
        (JSC::JITStubs::cti_op_eq_strings):
        (JSC::JITStubs::cti_op_call_eval):
        * jit/JITStubs.h:
        (JSC::):
        * runtime/JSValue.h:

2009-05-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix non-SSE enabled builds.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_add): Don't early return here, we still need to call the JIT stub.
        (JSC::JIT::emitSlow_op_sub): Ditto.

2009-05-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Here's a thought: let's not take a jit stub call just to multiply by 1,
        bokay?
        
        imul doesn't set the zero flag, so to test for a zero result, we need
        an explicit instruction. (Luckily, it does set the overflow flag, so
        we can still use that.)

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul):
        (JSC::JIT::emitMul32InPlace):

2009-05-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey "Premature Commit" Garen.

        Add back constant integer cases for op_add.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitAdd32Constant):
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emitSlowAdd32Constant):
        * jit/JITInlineMethods.h:
        (JSC::JIT::getConstantOperandImmediateDouble):
        (JSC::JIT::isOperandConstantImmediateDouble):

2009-05-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Added fast double cases for op_jnless and op_jnlesseq.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::JumpList::jumps): New accesor, used by
        addSlowCase.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::ucomisd_rm): New method for comparing register to
        memory.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emitSlow_op_jnlesseq):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_div): Modified emitBinaryDoubleOp to accept comparison/jump
        operations in addition to operations with explicit result registers.

        * jit/JITInlineMethods.h:
        (JSC::JIT::addSlowCase): Added an "addSlowCase" for JumpLists, so clients
        can track multiple jumps to the same slow case condition together.

2009-05-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Implement op_negate inline fast cases.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::neg32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::negl_m):
        (JSC::X86Assembler::xorpd_rr):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emitSlow_op_negate):

2009-05-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Update the patchOffsetGetByIdSlowCaseCall constant for the
        case that OPCODE_SAMPLING is enabled.

        * jit/JIT.h:

2009-05-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Added support for inline subtraction of doubles.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emitSlow_op_sub):
        (JSC::JIT::emitSlowSub32InPlaceLeft):
        (JSC::JIT::emitBinaryDoubleOp):

2009-05-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Added support for inline division.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::divsd_rr):
        (JSC::X86Assembler::divsd_mr):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitBinaryOp):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emitSlow_op_div):

2009-05-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Added support for inline addition of doubles.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emitSlowAdd32InPlace):
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul):

2009-05-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Factored inline double operations into a helper function, so that we
        can reuse this code for other math operations.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_mul):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):

2009-05-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Added support for inline multiplication of doubles.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::cvtsi2sd_mr): New function, useful for loading an
        int32 into a double register.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul): Filled out these cases for double arithmetic.

        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::addressFor): New function, useful for addressing a JSValue's
        full 64bits as a double.

2009-05-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implement and enable optimized calls.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines): Add ENABLE(JIT_OPTIMIZE_CALL) guards
        around the the optimize call only trampolines (virtualCallPreLink and virtualCallLink).
        Update the trampolines to account for the new JSValue representation.
        (JSC::JIT::unlinkCall): Use NULL instead of JSValue noValue. 

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall): Update to account for the new JSValue representation
        (JSC::JIT::compileOpCallSlowCase): Ditto.

        * jit/JITStubs.h: Remove incorrect !ENABLE(JIT_OPTIMIZE_CALL) guard.

        * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_CALL.

2009-05-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implement and enable optimized property access.

        * assembler/AbstractMacroAssembler.h: Fix comment.
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines): Remove array length trampoline
        and implement the string length trampoline.
        * jit/JIT.h: Add new constants for patch offsets.
        * jit/JITInlineMethods.h: Remove FIELD_OFFSET which is now in StdLibExtras.h.
        * jit/JITPropertyAccess.cpp: 
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::compilePutDirectOffset):
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::addArgument): Add version of addArgument that takes
        two registers for the tag and payload.
        * jit/JITStubs.cpp:
        (JSC::JITStubs::JITStubs): Remove array length trampoline pointer.
        (JSC::JITStubs::cti_op_get_by_id_self_fail): 
        * jit/JITStubs.h:
        * runtime/JSObject.h:
        (JSC::JSObject::JSObject): Move m_inheritorID below the property storage
        to align it to a 16 byte boundary.
        * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
        * wtf/StdLibExtras.h: Move FIELD_OFFSET here.

2009-05-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Remove unneeded ExecState parameter from the number JSValue constructors.

        * runtime/JSValue.h:
        (JSC::jsNumber):
        (JSC::jsNaN):
        (JSC::JSValue::JSValue):

2009-05-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implemented fast path for op_put_by_val when putting to arrays.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):

2009-05-15  Geoffrey Garen  <ggaren@apple.com> (Mostly by Sam)

        Reviewed by Sam Weinig.
        
        Implemented fast path for op_get_by_val when accessing array.

        * jit/JIT.cpp:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):

2009-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed a failure in fast/js/math-transforms.html caused by failing to
        preserve -0 in multiplication.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::jz):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul):
        (JSC::JIT::emitMul32Constant):
        (JSC::JIT::emitMul32InPlace): Check both for overflow and for zero when
        doing multiplication. Use a slow case to get these right.

2009-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed a bug in the varargs calling convention.

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallVarargs): Move the argument count into regT1,
        since that's where ctiVirtualCall expects it to be.

2009-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed a small bug in instanceof's looping code.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof): NULL means the object has no prototype,
        so only loop when *not* equal to NULL.

2009-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed a small bug in instanceof's result writing code.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof): Make sure to fill out the payload bits
        in all cases.

2009-05-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Removed an invalid assertion in cti_op_urshift which
        depended on a fast path for op_urshift which has
        never existed.

        * jit/JITStubs.cpp:
        (JSC::JITStubs::cti_op_urshift):

2009-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed loop_if_true, which had the same reversed test that jtrue had.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_true):

2009-05-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        In op_neq, we apparently want to check that one value
        does *not* equal another.  Go figure.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_neq):

2009-05-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        The slow case of op_mod should call op_mod's jit stub,
        not op_mul.  That would be dumb.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_mod):

2009-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed problems when using 'arguments' due to a half-initialized register.

        * interpreter/CallFrame.h:
        (JSC::ExecState::setCalleeArguments):
        (JSC::ExecState::init): Require a full JSValue when setting up the 
        'arguments' virtual register, since this register is accessible from JIT
        code and bytecode, and needs to be a true JSValue.

        * interpreter/CallFrameClosure.h:
        (JSC::CallFrameClosure::resetCallFrame): ditto

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute): ditto

        * interpreter/Register.h: Removed the constructor that allowed assignment
        of a JSArguments* to a register. That is not safe. See above.

        * jit/JITStubs.cpp:
        (JSC::JITStubs::cti_op_create_arguments):
        (JSC::JITStubs::cti_op_create_arguments_no_params): ditto

2009-05-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        We really want to go to the slow case in op_jfalse and
        op_jtrue if the value is *not* boolean. 

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):

2009-05-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Flipped the condition when emitting a an op_loop_if_less or op_loop_if_lesseq
        if the first operand is a constant.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_less):
        (JSC::JIT::emit_op_loop_if_lesseq):

2009-05-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Added missing return in op_jnless and op_jnlesseq. 

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):

2009-05-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Load constants into the the register file as a temporary measure to
        aid bring up.  This allows us to use to treat constants like any
        other virtual register.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::emit_op_enter_with_activation):

2009-05-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Implemented op_strict_eq. Original patch by Snowy, by way of Sam and Gavin.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::set8): Added set8, since it's slightly
        faster than set32, and the new value representation usually doesn't
        need set32.

        * jit/JIT.cpp:
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoadTag):
        (JSC::JIT::emitLoadPayload): Added helper functions for dealing with
        constants. Eventually, we should write special cases for all constants,
        but these are helpful in the short term.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emitSlow_op_stricteq):
        (JSC::JIT::emitSlow_op_nstricteq): teh opcodez.

        * runtime/JSValue.h:
        (JSC::JSValue::):
        (JSC::JSValue::isDouble): Added a LowestTag for clarity.

2009-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Fixed some bugs in host function calls.
        
        testapi now passes!

        * jit/JIT.cpp: Changed some registers around to avoid overwriting edx:eax,
        which is how JSValues are now returned. Also changed the code that
        passes thisValue to pass the full 64bits of the value. Also added
        an #error compiler directive to other platform builds, since the JSValue
        return signature probably won't return in edx:eax on those platforms,
        and we'll have to investigate a solution.

2009-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Removed parameters from functions that are intended never to use their
        parameters.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):

2009-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Ported op_instance_of from TOT. It's basically the same, but some register
        stuff changed to memory stuff.

        * jit/JITInlineMethods.h:
        (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
        (JSC::JIT::emitStore): Changed to use helper functions.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof): Ported from TOT.

2009-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin Barraclough.
        
        Added a comment to explain an exception-handling subtelty that we found
        hard to remember when reviewing my last patch.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_catch):

2009-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Implemented try/catch.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_throw): Updated to use JITStackFrame abstraction.
        (JSC::JIT::emit_op_catch): Filled out.

2009-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implemented op_loop_if_true, op_jfalse, op_jtrue, op_jeq_null and op_jneq_null

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitSlow_op_instanceof): Moved from below to be next to its
        fast brother.

        (JSC::JIT::emit_op_loop_if_true): Similar to the old version
        in that it tries to do the integer case first and reduce the
        number of jumps you might need to take.
        (JSC::JIT::emitSlow_op_loop_if_true):

        (JSC::JIT::emit_op_jfalse): Very similar to op_loop_if_true, only
        the inverse and without a timeout check.
        (JSC::JIT::emitSlow_op_jfalse):

        (JSC::JIT::emit_op_jtrue): Very similar to op_loop_if_true except
        without the timeout check.
        (JSC::JIT::emitSlow_op_jtrue):

        (JSC::JIT::emit_op_jeq_null): Very similar to the implementation
        of op_eq, except it takes jumps instead of copying the condition
        to a dst.
        (JSC::JIT::emit_op_jneq_null): Ditto but for op_neq.

2009-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Implemented op_call_varargs.

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallVarargsSetupArgs):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::emit_op_call):
        (JSC::JIT::emit_op_call_eval):
        (JSC::JIT::emit_op_load_varargs):
        (JSC::JIT::emit_op_call_varargs):
        (JSC::JIT::emit_op_construct):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jneq_ptr):

2009-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Implemented op_call_eval.

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallVarargsSetupArgs):
        (JSC::JIT::compileOpCall):
        * jit/JITStubCall.h:
        (JSC::CallEvalJITStub::CallEvalJITStub):

2009-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Implemented op_not. (Gavin did most of the work!)

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emitSlow_op_not):

2009-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Implemented op_global_resolve.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_less):
        (JSC::JIT::emit_op_loop_if_lesseq): Added back accidentally removed
        early returns. 

        (JSC::JIT::emit_op_resolve_global):
        * jit/JITStubs.cpp:
        (JSC::JITStubs::cti_op_resolve_global): Pretty similar to the old code,
        but we need two reads and a TimesEight step in order to account for the
        64bit value size.

        * jit/JITStubs.h:
        (JSC::): Slightly tweaked this code to specialize for a JSGlobalObject*,
        to avoid having to pass an irrelevant tag pointer to the stub.

2009-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implemented op_to_jsnumber.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_to_jsnumber):
        (JSC::JIT::emitSlow_op_to_jsnumber):

2009-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implemented op_convert_this.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_convert_this):
        (JSC::JIT::emitSlow_op_convert_this):

2009-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Got basic JS function and constructor calls working.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallSetupArgs):
        (JSC::JIT::compileOpCallVarargsSetupArgs):
        (JSC::JIT::compileOpConstructSetupArgs):
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_construct_verify):
        (JSC::JIT::emitSlow_op_construct_verify):
        (JSC::JIT::emitSlow_op_call):
        (JSC::JIT::emitSlow_op_call_eval):
        (JSC::JIT::emitSlow_op_call_varargs):
        (JSC::JIT::emitSlow_op_construct):
        (JSC::JIT::compileOpCall): Filled out these cases, with call_eval #if'd out.

        * jit/JITInlineMethods.h:
        (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
        (JSC::JIT::emitLoad): Restored some legacy "*CTIArg*" functions,
        since I wanted to avoid the complexity of revamping the API here while
        trying to bring it up. Eventually, we should re-remove all of these functions.

        (JSC::JIT::recordJumpTarget): Removed unnecessary macro cruft. You will
        not silence me, Sam Weinig! The world will know that you are a crufty,
        crufty, crufty programmer!!!

        * jit/JITOpcodes.cpp:
        * jit/JITStubs.cpp:
        (JSC::):
        * jit/JITStubs.h: Changed up some offsets in the JITStackFrame class, since
        and off-by-one error was causing stack misalignment.

2009-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implement op_eq_null and op_neq_null.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::set8):
        (JSC::MacroAssemblerX86Common::setTest8):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_stricteq):
        (JSC::JIT::emitSlow_op_stricteq):
        (JSC::JIT::emit_op_nstricteq):
        (JSC::JIT::emitSlow_op_nstricteq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        * jsc.cpp:

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implement op_new_error.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_error):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::addArgument): Add a version of addArgument
        that takes a constant JSValue.

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Remove now unused emitGetVariableObjectRegister and emitPutVariableObjectRegister.

        * jit/JIT.cpp:
        * jit/JIT.h:

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implement op_to_primitive and op_next_pname.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitSlow_op_construct_verify):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emitSlow_op_to_primitive):
        (JSC::JIT::emitSlow_op_loop_if_true):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_next_pname):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add op_get_global_var, op_put_global_var, emit_op_get_scoped_var, emit_op_put_scoped_var and
        op_unexpected_load.

        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::tagFor):
        (JSC::JIT::payloadFor):
        (JSC::JIT::emitLoad):
        (JSC::JIT::emitStore):
        (JSC::JIT::emitLoadReturnValue):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_get_global_var):
        (JSC::JIT::emit_op_put_global_var):
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_unexpected_load):

2009-05-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Added overflow handling to op_sub.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_sub):
        (JSC::JIT::emitSlowSub32InPlaceLeft):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Remove a function call by folding op_get_by_id and op_put_by_id into
        their respective compile functions.

        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Make JITStubCall work in 64bit by making the stack index
        step dependent on the size of void*.

        * jit/JITStubCall.h:
        (JSC::JITStubCall::JITStubCall):
        (JSC::JITStubCall::addArgument):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implement simple version of property access opcodes
        which just call a stub functions.

        * jit/JITOpcodes.cpp:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_put_by_index):
        (JSC::JIT::emit_op_put_getter):
        (JSC::JIT::emit_op_put_setter):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compilePutByIdHotPath):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::addArgument):
        * jsc.cpp:

2009-05-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Added work-around for XCode debugging echo problem.

        * jsc.cpp:
        (runInteractive):

2009-05-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Added overflow handling to op_add.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emitSlowAdd32InPlace):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add slow cases for op_jnless or emit_op_jnlesseq.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emitSlow_op_jnlesseq):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add implementations for op_jnless, emit_op_jnlesseq, op_loop_if_less and op_loop_if_lesseq.
        No slow cases for op_jnless or emit_op_jnlesseq yet.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emitSlow_op_jnlesseq):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_less):
        (JSC::JIT::emitSlow_op_loop_if_less):
        (JSC::JIT::emit_op_loop_if_lesseq):
        (JSC::JIT::emitSlow_op_loop_if_lesseq):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Turn the RECORD_JUMP_TARGET macro into an inline function.

        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::recordJumpTarget):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_jsr):
        (JSC::JIT::emit_op_jmp_scopes):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Add MacroAssemblerX86Common::set8 to fix the build.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::set8):

2009-05-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Added overflow recovery for pre_inc and pre_dec.
        
        Turned some short-circuit code into early returns, as is the WebKit style.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_post_inc):
        (JSC::JIT::emitSlow_op_post_inc):
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emitSlow_op_post_dec):
        (JSC::JIT::emitSlow_op_pre_inc):
        (JSC::JIT::emitSlow_op_pre_dec):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implement op_jmp, op_loop, op_eq and op_neq.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_loop):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::emit_op_enter_with_activation):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implement the slow cases for arithmetic opcodes.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_lshift):
        (JSC::JIT::emitSlow_op_rshift):
        (JSC::JIT::emitSlow_op_bitand):
        (JSC::JIT::emitSlow_op_bitor):
        (JSC::JIT::emitSlow_op_bitxor):
        (JSC::JIT::emitSlow_op_bitnot):
        (JSC::JIT::emitSlow_op_sub):
        (JSC::JIT::emitSlow_op_mul):
        (JSC::JIT::emitSlow_op_mod):
        (JSC::JIT::emit_op_mod):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Implement op_bitnot.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::not32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::notl_m):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_bitnot):

2009-05-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add arithmetic opcode implementations from the old nitro-extreme branch.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emitSlow_op_jnlesseq):
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emitSlow_op_lshift):
        (JSC::JIT::emit_op_rshift):
        (JSC::JIT::emitSlow_op_rshift):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emitBitAnd32Constant):
        (JSC::JIT::emitBitAnd32InPlace):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emitSlow_op_bitor):
        (JSC::JIT::emitBitOr32Constant):
        (JSC::JIT::emitBitOr32InPlace):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emitSlow_op_bitxor):
        (JSC::JIT::emitBitXor32Constant):
        (JSC::JIT::emitBitXor32InPlace):
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emitSlow_op_bitnot):
        (JSC::JIT::emit_op_post_inc):
        (JSC::JIT::emitSlow_op_post_inc):
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emitSlow_op_post_dec):
        (JSC::JIT::emit_op_pre_inc):
        (JSC::JIT::emitSlow_op_pre_inc):
        (JSC::JIT::emit_op_pre_dec):
        (JSC::JIT::emitSlow_op_pre_dec):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitAdd32Constant):
        (JSC::JIT::emitAdd32InPlace):
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emitSlow_op_sub):
        (JSC::JIT::emitSub32ConstantLeft):
        (JSC::JIT::emitSub32ConstantRight):
        (JSC::JIT::emitSub32InPlaceLeft):
        (JSC::JIT::emitSub32InPlaceRight):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul):
        (JSC::JIT::emitMul32Constant):
        (JSC::JIT::emitMul32InPlace):
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):
        * jit/JITOpcodes.cpp:

2009-05-12  Geoffrey Garen  <ggaren@apple.com>

        Removed JIT_OPTIMIZE_ARITHMETIC setting, since it was all about 32bit
        value representations.
        
        Added JSAPIValueWrapper to the repository.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        * runtime/JSAPIValueWrapper.cpp: Added.
        (JSC::JSAPIValueWrapper::toPrimitive):
        (JSC::JSAPIValueWrapper::getPrimitiveNumber):
        (JSC::JSAPIValueWrapper::toBoolean):
        (JSC::JSAPIValueWrapper::toNumber):
        (JSC::JSAPIValueWrapper::toString):
        (JSC::JSAPIValueWrapper::toObject):
        * runtime/JSAPIValueWrapper.h: Added.
        (JSC::JSAPIValueWrapper::value):
        (JSC::JSAPIValueWrapper::isAPIValueWrapper):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        (JSC::jsAPIValueWrapper):
        * wtf/Platform.h:

2009-05-12  Geoffrey Garen  <ggaren@apple.com>

        Turned on the JIT and got it building and running the most trivial of
        programs.
        
        All configurable optimizations are turned off, and a few opcodes are ad
        hoc #if'd out.
        
        So far, I've only merged op_mov and op_end, but some stub-reliant
        opcodes work as-is from TOT.
        
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        * bytecode/CodeBlock.h:
        * jit/JIT.cpp:
        (JSC::JIT::compileOpStrictEq):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emitSlow_op_lshift):
        (JSC::JIT::emit_op_rshift):
        (JSC::JIT::emitSlow_op_rshift):
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emitSlow_op_jnlesseq):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emitSlow_op_bitand):
        (JSC::JIT::emit_op_post_inc):
        (JSC::JIT::emitSlow_op_post_inc):
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emitSlow_op_post_dec):
        (JSC::JIT::emit_op_pre_inc):
        (JSC::JIT::emitSlow_op_pre_inc):
        (JSC::JIT::emit_op_pre_dec):
        (JSC::JIT::emitSlow_op_pre_dec):
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::compileBinaryArithOpSlowCase):
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emitSlow_op_mul):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpConstructSetupArgs):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::getConstantOperandImmediateInt):
        (JSC::JIT::isOperandConstantImmediateInt):
        (JSC::JIT::emitInitRegister):
        (JSC::JIT::addSlowCase):
        (JSC::JIT::addJump):
        (JSC::JIT::emitJumpSlowToHot):
        (JSC::JIT::tagFor):
        (JSC::JIT::payloadFor):
        (JSC::JIT::emitLoad):
        (JSC::JIT::emitLoadReturnValue):
        (JSC::JIT::emitStore):
        (JSC::JIT::emitStoreReturnValue):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_end):
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_loop):
        (JSC::JIT::emit_op_loop_if_less):
        (JSC::JIT::emit_op_loop_if_lesseq):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emit_op_get_global_var):
        (JSC::JIT::emit_op_put_global_var):
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_tear_off_activation):
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_construct_verify):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_loop_if_true):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_unexpected_load):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::emit_op_next_pname):
        (JSC::JIT::emit_op_push_scope):
        (JSC::JIT::emit_op_to_jsnumber):
        (JSC::JIT::emit_op_push_new_scope):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_new_error):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_convert_this):
        (JSC::JIT::emit_op_profile_will_call):
        (JSC::JIT::emit_op_profile_did_call):
        (JSC::JIT::emitSlow_op_construct_verify):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emitSlow_op_loop_if_less):
        (JSC::JIT::emitSlow_op_loop_if_lesseq):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emitSlow_op_not):
        (JSC::JIT::emitSlow_op_instanceof):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_put_by_index):
        (JSC::JIT::emit_op_put_getter):
        (JSC::JIT::emit_op_put_setter):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compilePutByIdHotPath):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::JITStubCall):
        (JSC::JITStubCall::addArgument):
        (JSC::JITStubCall::call):
        (JSC::JITStubCall::):
        (JSC::CallEvalJITStub::CallEvalJITStub):
        * jit/JITStubs.cpp:
        (JSC::):
        (JSC::JITStubs::cti_op_add):
        (JSC::JITStubs::cti_op_pre_inc):
        (JSC::JITStubs::cti_op_mul):
        (JSC::JITStubs::cti_op_get_by_val):
        (JSC::JITStubs::cti_op_get_by_val_string):
        (JSC::JITStubs::cti_op_get_by_val_byte_array):
        (JSC::JITStubs::cti_op_sub):
        (JSC::JITStubs::cti_op_put_by_val):
        (JSC::JITStubs::cti_op_put_by_val_array):
        (JSC::JITStubs::cti_op_put_by_val_byte_array):
        (JSC::JITStubs::cti_op_negate):
        (JSC::JITStubs::cti_op_div):
        (JSC::JITStubs::cti_op_pre_dec):
        (JSC::JITStubs::cti_op_post_inc):
        (JSC::JITStubs::cti_op_eq):
        (JSC::JITStubs::cti_op_lshift):
        (JSC::JITStubs::cti_op_bitand):
        (JSC::JITStubs::cti_op_rshift):
        (JSC::JITStubs::cti_op_bitnot):
        (JSC::JITStubs::cti_op_mod):
        (JSC::JITStubs::cti_op_neq):
        (JSC::JITStubs::cti_op_post_dec):
        (JSC::JITStubs::cti_op_urshift):
        (JSC::JITStubs::cti_op_bitxor):
        (JSC::JITStubs::cti_op_bitor):
        (JSC::JITStubs::cti_op_switch_imm):
        * jit/JITStubs.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::~JSFunction):
        * runtime/JSValue.h:
        (JSC::JSValue::payload):
        * wtf/Platform.h:

2009-05-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Add some new MacroAssembler and assembler functions that will be needed shortly.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::add32):
        (JSC::MacroAssemblerX86Common::and32):
        (JSC::MacroAssemblerX86Common::mul32):
        (JSC::MacroAssemblerX86Common::neg32):
        (JSC::MacroAssemblerX86Common::or32):
        (JSC::MacroAssemblerX86Common::sub32):
        (JSC::MacroAssemblerX86Common::xor32):
        (JSC::MacroAssemblerX86Common::branchAdd32):
        (JSC::MacroAssemblerX86Common::branchMul32):
        (JSC::MacroAssemblerX86Common::branchSub32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::):
        (JSC::X86Assembler::addl_rm):
        (JSC::X86Assembler::andl_mr):
        (JSC::X86Assembler::andl_rm):
        (JSC::X86Assembler::andl_im):
        (JSC::X86Assembler::negl_r):
        (JSC::X86Assembler::notl_r):
        (JSC::X86Assembler::orl_rm):
        (JSC::X86Assembler::orl_im):
        (JSC::X86Assembler::subl_rm):
        (JSC::X86Assembler::xorl_mr):
        (JSC::X86Assembler::xorl_rm):
        (JSC::X86Assembler::xorl_im):
        (JSC::X86Assembler::imull_mr):

2009-05-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Cameron Zwarich.

        Remove the NumberHeap.

        * JavaScriptCore.exp:
        * runtime/Collector.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::recordExtraCost):
        (JSC::Heap::heapAllocate):
        (JSC::Heap::markConservatively):
        (JSC::Heap::sweep):
        (JSC::Heap::collect):
        (JSC::Heap::objectCount):
        (JSC::Heap::statistics):
        (JSC::typeName):
        (JSC::Heap::isBusy):
        * runtime/Collector.h:
        (JSC::Heap::globalData):
        * runtime/JSCell.h:

2009-05-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Land initial commit of new number representation for 32 bit platforms,
        with JIT disabled.

        * API/APICast.h:
        (toJS):
        (toRef):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::hasInstance):
        (JSC::::toNumber):
        (JSC::::toString):
        * API/tests/testapi.c:
        (EvilExceptionObject_convertToType):
        * AllInOneFile.cpp:
        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::valueToSourceString):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoad):
        (JSC::BytecodeGenerator::emitUnexpectedLoad):
        (JSC::keyForImmediateSwitch):
        * bytecompiler/BytecodeGenerator.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::dumpRegisters):
        (JSC::Interpreter::privateExecute):
        * parser/Nodes.cpp:
        (JSC::ArrayNode::emitBytecode):
        (JSC::processClauseList):
        * runtime/ArgList.h:
        * runtime/Collector.h:
        (JSC::sizeof):
        * runtime/DateMath.cpp:
        * runtime/ExceptionHelpers.h:
        * runtime/InitializeThreading.cpp:
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        (JSC::JSCell::isAPIValueWrapper):
        (JSC::JSValue::isString):
        (JSC::JSValue::isGetterSetter):
        (JSC::JSValue::isObject):
        (JSC::JSValue::getString):
        (JSC::JSValue::getObject):
        (JSC::JSValue::getCallData):
        (JSC::JSValue::getConstructData):
        (JSC::JSValue::getUInt32):
        (JSC::JSValue::marked):
        (JSC::JSValue::toPrimitive):
        (JSC::JSValue::getPrimitiveNumber):
        (JSC::JSValue::toBoolean):
        (JSC::JSValue::toNumber):
        (JSC::JSValue::toString):
        (JSC::JSValue::needsThisConversion):
        (JSC::JSValue::toThisString):
        (JSC::JSValue::getJSNumber):
        (JSC::JSValue::toObject):
        (JSC::JSValue::toThisObject):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.h:
        (JSC::Structure::prototypeForLookup):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseInt):
        * runtime/JSImmediate.h:
        * runtime/JSNumberCell.cpp: Removed.
        * runtime/JSNumberCell.h: Removed.
        * runtime/JSObject.h:
        (JSC::JSValue::get):
        (JSC::JSValue::put):
        * runtime/JSString.h:
        (JSC::JSValue::toThisJSString):
        * runtime/JSValue.cpp:
        (JSC::JSValue::toInteger):
        (JSC::JSValue::toIntegerPreserveNaN):
        (JSC::JSValue::toObjectSlowCase):
        (JSC::JSValue::toThisObjectSlowCase):
        (JSC::JSValue::synthesizeObject):
        (JSC::JSValue::synthesizePrototype):
        (JSC::JSValue::description):
        (JSC::nonInlineNaN):
        * runtime/JSValue.h:
        (JSC::JSValue::):
        (JSC::EncodedJSValueHashTraits::emptyValue):
        (JSC::jsNaN):
        (JSC::operator==):
        (JSC::operator!=):
        (JSC::toInt32):
        (JSC::toUInt32):
        (JSC::JSValue::encode):
        (JSC::JSValue::decode):
        (JSC::JSValue::JSValue):
        (JSC::JSValue::operator bool):
        (JSC::JSValue::operator==):
        (JSC::JSValue::operator!=):
        (JSC::JSValue::isUndefined):
        (JSC::JSValue::isNull):
        (JSC::JSValue::isUndefinedOrNull):
        (JSC::JSValue::isCell):
        (JSC::JSValue::isInt32):
        (JSC::JSValue::isUInt32):
        (JSC::JSValue::isDouble):
        (JSC::JSValue::isTrue):
        (JSC::JSValue::isFalse):
        (JSC::JSValue::tag):
        (JSC::JSValue::asInt32):
        (JSC::JSValue::asUInt32):
        (JSC::JSValue::asDouble):
        (JSC::JSValue::asCell):
        (JSC::JSValue::isNumber):
        (JSC::JSValue::isBoolean):
        (JSC::JSValue::getBoolean):
        (JSC::JSValue::uncheckedGetNumber):
        (JSC::JSValue::toJSNumber):
        (JSC::JSValue::getNumber):
        (JSC::JSValue::toInt32):
        (JSC::JSValue::toUInt32):
        * runtime/Operations.h:
        (JSC::JSValue::equal):
        (JSC::JSValue::equalSlowCaseInline):
        (JSC::JSValue::strictEqual):
        (JSC::JSValue::strictEqualSlowCaseInline):
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::jsAdd):
        * runtime/PropertySlot.h:
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):
        (JSC::stringProtoFuncIndexOf):
        * wtf/Platform.h:

=== Start merge of nitro-extreme branch 2009-07-30 ===

2009-07-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by George Staikos.

        Resolve class/struct mixup in forward declarations
        https://bugs.webkit.org/show_bug.cgi?id=27708

        * API/JSClassRef.h:
        * bytecode/SamplingTool.h:
        * interpreter/Interpreter.h:
        * jit/JIT.h:
        * profiler/ProfileGenerator.h:
        * profiler/Profiler.h:
        * runtime/ClassInfo.h:
        * runtime/ExceptionHelpers.h:
        * runtime/JSByteArray.h:
        * runtime/JSCell.h:
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:

2009-07-28  Ada Chan  <adachan@apple.com>        

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27236
        - Implement TCMalloc_SystemRelease and TCMalloc_SystemCommit for Windows.
        - Use a background thread to periodically scavenge memory to release back to the system.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::init):
        (WTF::TCMalloc_PageHeap::runScavengerThread):
        (WTF::TCMalloc_PageHeap::scavenge):
        (WTF::TCMalloc_PageHeap::shouldContinueScavenging):
        (WTF::TCMalloc_PageHeap::New):
        (WTF::TCMalloc_PageHeap::AllocLarge):
        (WTF::TCMalloc_PageHeap::Delete):
        (WTF::TCMalloc_PageHeap::GrowHeap):
        (WTF::sleep):
        (WTF::TCMalloc_PageHeap::scavengerThread):
        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemRelease):
        (TCMalloc_SystemCommit):
        * wtf/TCSystemAlloc.h:

2009-07-28  Xan Lopez  <xlopez@igalia.com>

        Add new files, fixes distcheck.

        * GNUmakefile.am:

2009-07-28  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Determining whether to use JIT or interpreter
        moved from JavaScriptCore.pri to Platform.h

        * JavaScriptCore.pri:
        * wtf/Platform.h:

2009-07-27  Brian Weinstein  <bweinstein@apple.com>

        Fix of misuse of sort command.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-07-27  Brian Weinstein  <bweinstein@apple.com>

        Build fix for Windows.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-07-27  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Oliver Hunt.

        Fix tyop in JIT, renamed preverveReturnAddressAfterCall -> preserveReturnAddressAfterCall.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::preserveReturnAddressAfterCall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):

2009-07-27  Alexey Proskuryakov  <ap@webkit.org>

        Gtk build fix.

        * runtime/JSLock.cpp: (JSC::JSLock::JSLock): Fix "no threading" case.

2009-07-27  Alexey Proskuryakov  <ap@webkit.org>

        Release build fix.

        * runtime/JSLock.h: (JSC::JSLock::~JSLock):

2009-07-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27735
        Give a helpful name to JSLock constructor argument

        * API/JSBase.cpp:
        (JSGarbageCollect):
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        (JSPropertyNameArrayRelease):
        (JSPropertyNameAccumulatorAddName):
        * JavaScriptCore.exp:
        * jsc.cpp:
        (functionGC):
        (cleanupGlobalData):
        (jscmain):
        * runtime/Collector.cpp:
        (JSC::Heap::destroy):
        * runtime/JSLock.cpp:
        (JSC::JSLock::JSLock):
        (JSC::JSLock::lock):
        (JSC::JSLock::unlock):
        (JSC::JSLock::DropAllLocks::DropAllLocks):
        (JSC::JSLock::DropAllLocks::~DropAllLocks):
        * runtime/JSLock.h:
        (JSC::):
        (JSC::JSLock::JSLock):
        (JSC::JSLock::~JSLock):

2009-07-25  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for OpaqueJSPropertyNameArray struct
        https://bugs.webkit.org/show_bug.cgi?id=27342

        Inherits OpaqueJSPropertyNameArray struct from FastAllocBase because it has been
        instantiated by 'new' JavaScriptCore/API/JSObjectRef.cpp:473.

        * API/JSObjectRef.cpp:

2009-07-24  Ada Chan  <adachan@apple.com>

        In preparation for https://bugs.webkit.org/show_bug.cgi?id=27236:
        Remove TCMALLOC_TRACK_DECOMMITED_SPANS.  We'll always track decommitted spans.
        We have tested this and show it has little impact on performance.

        Reviewed by Mark Rowe.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::New):
        (WTF::TCMalloc_PageHeap::AllocLarge):
        (WTF::propagateDecommittedState):
        (WTF::mergeDecommittedStates):
        (WTF::TCMalloc_PageHeap::Delete):
        (WTF::TCMalloc_PageHeap::IncrementalScavenge):

2009-07-24  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Darin Adler and Adam Barth.

        Build fix for x86 platforms.
        https://bugs.webkit.org/show_bug.cgi?id=27602

        * jit/JIT.cpp:

2009-07-23  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, adding missing header.

        * jit/JIT.cpp:

2009-07-22  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        Add wince specific memory files into wtf/wince
        https://bugs.webkit.org/show_bug.cgi?id=27550

        * wtf/wince/FastMallocWince.h: Added.
        * wtf/wince/MemoryManager.cpp: Added.
        * wtf/wince/MemoryManager.h: Added.

2009-07-23  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

        Fix for missing mmap features in Symbian
        https://bugs.webkit.org/show_bug.cgi?id=24540

        Fix, conditionally for PLATFORM(SYMBIAN), as an alternative 
        to missing support for the MAP_ANON property flag in mmap. 
        It utilizes Symbian specific memory allocation features.

        * runtime/Collector.cpp

2009-07-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        With ENABLE(ASSEMBLER_WX_EXCLUSIVE), only change permissions once per repatch event.
        ( https://bugs.webkit.org/show_bug.cgi?id=27564 )

        Currently we change permissions forwards and backwards for each instruction modified,
        instead we should only change permissions once per complete repatching event.

        2.5% progression running with ENABLE(ASSEMBLER_WX_EXCLUSIVE) enabled,
        which recoups 1/3 of the penalty of running with this mode enabled.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::linkBranch):
            - Replace usage of MakeWritable with cacheFlush.
        
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::patchPointerInternal):
        (JSC::ARMAssembler::repatchLoadPtrToLEA):
            - Replace usage of MakeWritable with cacheFlush.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::relinkJump):
        (JSC::ARMv7Assembler::relinkCall):
        (JSC::ARMv7Assembler::repatchInt32):
        (JSC::ARMv7Assembler::repatchPointer):
        (JSC::ARMv7Assembler::repatchLoadPtrToLEA):
        (JSC::ARMv7Assembler::setInt32):
            - Replace usage of MakeWritable with cacheFlush.

        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::performFinalization):
            - Make explicit call to cacheFlush.

        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
            - Make size always available.

        * assembler/RepatchBuffer.h:
        (JSC::RepatchBuffer::RepatchBuffer):
        (JSC::RepatchBuffer::~RepatchBuffer):
            - Add calls to MakeWritable & makeExecutable.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::relinkJump):
        (JSC::X86Assembler::relinkCall):
        (JSC::X86Assembler::repatchInt32):
        (JSC::X86Assembler::repatchPointer):
        (JSC::X86Assembler::repatchLoadPtrToLEA):
            - Remove usage of MakeWritable.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::getJITCode):
            - Provide access to CodeBlock's JITCode.

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::makeExecutable):
        (JSC::ExecutableAllocator::cacheFlush):
            - Remove MakeWritable, make cacheFlush public.

        * jit/JIT.cpp:
        (JSC::ctiPatchNearCallByReturnAddress):
        (JSC::ctiPatchCallByReturnAddress):
        (JSC::JIT::privateCompile):
        (JSC::JIT::unlinkCall):
        (JSC::JIT::linkCall):
            - Add CodeBlock argument to RepatchBuffer.

        * jit/JIT.h:
            - Pass CodeBlock argument for use by RepatchBuffer.

        * jit/JITCode.h:
        (JSC::JITCode::start):
        (JSC::JITCode::size):
            - Provide access to code start & size.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchMethodCallProto):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
            - Add CodeBlock argument to RepatchBuffer.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
            - Pass CodeBlock argument for use by RepatchBuffer.

2009-07-21  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Cache not only the structure of the method, but the
        structure of its prototype as well.
        https://bugs.webkit.org/show_bug.cgi?id=27077

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        * bytecode/CodeBlock.h:
        (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::patchMethodCallProto):

2009-07-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Move call linking / repatching down from AbstractMacroAssembler into MacroAssemblerARCH classes.
        ( https://bugs.webkit.org/show_bug.cgi?id=27527 )

        This allows the implementation to be defined per architecture.  Specifically this addresses the
        fact that x86-64 MacroAssembler implements far calls as a load to register, followed by a call
        to register.  Patching the call actually requires the pointer load to be patched, rather than
        the call to be patched.  This is implementation detail specific to MacroAssemblerX86_64, and as
        such is best handled there.

        * assembler/AbstractMacroAssembler.h:
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::linkCall):
        (JSC::MacroAssemblerARM::repatchCall):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::linkCall):
        (JSC::MacroAssemblerARMv7::repatchCall):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::linkCall):
        (JSC::MacroAssemblerX86::repatchCall):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::linkCall):
        (JSC::MacroAssemblerX86_64::repatchCall):

2009-07-21  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Every wtf file includes other wtf files with <> style includes
        except this one.  Fix the exception.

        * wtf/ByteArray.h:

2009-07-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Move LinkBuffer/RepatchBuffer out of AbstractMacroAssembler.
        ( https://bugs.webkit.org/show_bug.cgi?id=27485 )

        This change is the first step in a process to move code that should be in
        the architecture-specific MacroAssembler classes up out of Assmbler and
        AbstractMacroAssembler.

        * JavaScriptCore.xcodeproj/project.pbxproj:
            - added new files
        
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::linkPointer):
            - rename patchPointer to bring it in line with the current link/repatch naming scheme
        
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::linkCall):
        (JSC::ARMv7Assembler::linkPointer):
        (JSC::ARMv7Assembler::relinkCall):
        (JSC::ARMv7Assembler::repatchInt32):
        (JSC::ARMv7Assembler::repatchPointer):
        (JSC::ARMv7Assembler::setInt32):
        (JSC::ARMv7Assembler::setPointer):
            - rename patchPointer to bring it in line with the current link/repatch naming scheme

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::linkJump):
        (JSC::AbstractMacroAssembler::linkCall):
        (JSC::AbstractMacroAssembler::linkPointer):
        (JSC::AbstractMacroAssembler::getLinkerAddress):
        (JSC::AbstractMacroAssembler::getLinkerCallReturnOffset):
        (JSC::AbstractMacroAssembler::repatchJump):
        (JSC::AbstractMacroAssembler::repatchCall):
        (JSC::AbstractMacroAssembler::repatchNearCall):
        (JSC::AbstractMacroAssembler::repatchInt32):
        (JSC::AbstractMacroAssembler::repatchPointer):
        (JSC::AbstractMacroAssembler::repatchLoadPtrToLEA):
            - remove the LinkBuffer/RepatchBuffer classes, but leave a set of (private, friended) methods to interface to the Assembler

        * assembler/LinkBuffer.h: Added.
        (JSC::LinkBuffer::LinkBuffer):
        (JSC::LinkBuffer::~LinkBuffer):
        (JSC::LinkBuffer::link):
        (JSC::LinkBuffer::patch):
        (JSC::LinkBuffer::locationOf):
        (JSC::LinkBuffer::locationOfNearCall):
        (JSC::LinkBuffer::returnAddressOffset):
        (JSC::LinkBuffer::finalizeCode):
        (JSC::LinkBuffer::finalizeCodeAddendum):
        (JSC::LinkBuffer::code):
        (JSC::LinkBuffer::performFinalization):
            - new file containing the LinkBuffer class, previously a member of AbstractMacroAssembler

        * assembler/RepatchBuffer.h: Added.
        (JSC::RepatchBuffer::RepatchBuffer):
        (JSC::RepatchBuffer::relink):
        (JSC::RepatchBuffer::repatch):
        (JSC::RepatchBuffer::repatchLoadPtrToLEA):
        (JSC::RepatchBuffer::relinkCallerToTrampoline):
        (JSC::RepatchBuffer::relinkCallerToFunction):
        (JSC::RepatchBuffer::relinkNearCallerToTrampoline):
            - new file containing the RepatchBuffer class, previously a member of AbstractMacroAssembler

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::linkJump):
        (JSC::X86Assembler::linkCall):
        (JSC::X86Assembler::linkPointerForCall):
        (JSC::X86Assembler::linkPointer):
        (JSC::X86Assembler::relinkJump):
        (JSC::X86Assembler::relinkCall):
        (JSC::X86Assembler::repatchInt32):
        (JSC::X86Assembler::repatchPointer):
        (JSC::X86Assembler::setPointer):
        (JSC::X86Assembler::setInt32):
        (JSC::X86Assembler::setRel32):
            - rename patchPointer to bring it in line with the current link/repatch naming scheme

        * jit/JIT.cpp:
        (JSC::ctiPatchNearCallByReturnAddress):
        (JSC::ctiPatchCallByReturnAddress):
            - include new headers
            - remove MacroAssembler:: specification from RepatchBuffer usage

        * jit/JITPropertyAccess.cpp:
        * yarr/RegexJIT.cpp:
            - include new headers

2009-07-21  Robert Agoston  <Agoston.Robert@stud.u-szeged.hu>

        Reviewed by David Levin.

        Fixed #undef typo.
        https://bugs.webkit.org/show_bug.cgi?id=27506

        * bytecode/Opcode.h:

2009-07-21  Adam Roben  <aroben@apple.com>

        Roll out r46153, r46154, and r46155

        These changes were causing build failures and assertion failures on
        Windows.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSArray.cpp:
        * runtime/StringPrototype.cpp:
        * runtime/UString.cpp:
        * runtime/UString.h:
        * wtf/FastMalloc.cpp:
        * wtf/FastMalloc.h:
        * wtf/Platform.h:
        * wtf/PossiblyNull.h: Removed.

2009-07-21  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by David Levin.

        Add ENABLE_RUBY to list of build options
        https://bugs.webkit.org/show_bug.cgi?id=27324

        * Configurations/FeatureDefines.xcconfig: Added flag ENABLE_RUBY.

2009-07-20  Oliver Hunt  <oliver@apple.com>

        Build fix attempt #2

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-07-20  Oliver Hunt  <oliver@apple.com>

        Build fix attempt #1

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-07-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make it harder to misuse try* allocation routines
        https://bugs.webkit.org/show_bug.cgi?id=27469

        Jump through a few hoops to make it much harder to accidentally
        miss null-checking of values returned by the try-* allocation
        routines.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSArray.cpp:
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::increaseVectorLength):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncLink):
        * runtime/UString.cpp:
        (JSC::allocChars):
        (JSC::reallocChars):
        (JSC::expandCapacity):
        (JSC::UString::Rep::reserveCapacity):
        (JSC::UString::expandPreCapacity):
        (JSC::createRep):
        (JSC::concatenate):
        (JSC::UString::spliceSubstringsWithSeparators):
        (JSC::UString::replaceRange):
        (JSC::UString::append):
        (JSC::UString::operator=):
        * runtime/UString.h:
        (JSC::UString::Rep::createEmptyBuffer):
        * wtf/FastMalloc.cpp:
        (WTF::tryFastZeroedMalloc):
        (WTF::tryFastMalloc):
        (WTF::tryFastCalloc):
        (WTF::tryFastRealloc):
        (WTF::TCMallocStats::tryFastMalloc):
        (WTF::TCMallocStats::tryFastCalloc):
        (WTF::TCMallocStats::tryFastRealloc):
        * wtf/FastMalloc.h:
        (WTF::TryMallocReturnValue::TryMallocReturnValue):
        (WTF::TryMallocReturnValue::~TryMallocReturnValue):
        (WTF::TryMallocReturnValue::operator Maybe<T>):
        (WTF::TryMallocReturnValue::getValue):
        * wtf/PossiblyNull.h:
        (WTF::PossiblyNull::PossiblyNull):
        (WTF::PossiblyNull::~PossiblyNull):
        (WTF::PossiblyNull::getValue):
        * wtf/Platform.h:

2009-07-20  Gavin Barraclough  <barraclough@apple.com>

        RS Oliver Hunt.

        Add ARM assembler files to xcodeproj, for convenience editing.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-07-20  Jessie Berlin  <jberlin@apple.com>

        Reviewed by David Levin.

        Fix an incorrect assertion in Vector::remove.
        
        https://bugs.webkit.org/show_bug.cgi?id=27477

        * wtf/Vector.h:
        (WTF::::remove):
        Assert that the position at which to start removing elements + the
        length (the number of elements to remove) is less than or equal to the
        size of the entire Vector.

2009-07-20  Peter Kasting  <pkasting@google.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=27468
        Back out r46060, which caused problems for some Apple developers.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:

2009-07-20  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Oliver Hunt.

        Allow custom memory allocation control in NewThreadContext
        https://bugs.webkit.org/show_bug.cgi?id=27338

        Inherits NewThreadContext struct from FastAllocBase because it
        has been instantiated by 'new' JavaScriptCore/wtf/Threading.cpp:76.

        * wtf/Threading.cpp:

2009-07-20  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Oliver Hunt.

        Allow custom memory allocation control in JavaScriptCore's JSClassRef.h
        https://bugs.webkit.org/show_bug.cgi?id=27340

        Inherit StaticValueEntry and StaticFunctionEntry struct from FastAllocBase because these
        have been instantiated by 'new' in JavaScriptCore/API/JSClassRef.cpp:153
        and in JavaScriptCore/API/JSClassRef.cpp:166.

        * API/JSClassRef.h:

2009-07-20  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Allow custom memory allocation control in JavaScriptCore's RegexPattern.h
        https://bugs.webkit.org/show_bug.cgi?id=27343

        Inherits RegexPattern.h's structs (which have been instantiated by operator new) from FastAllocBase:

        CharacterClass (new call: JavaScriptCore/yarr/RegexCompiler.cpp:144)
        PatternAlternative (new call: JavaScriptCore/yarr/RegexPattern.h:221) 
        PatternDisjunction (new call: JavaScriptCore/yarr/RegexCompiler.cpp:446)

        * yarr/RegexPattern.h:

2009-07-20  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for JavaScriptCore's MatchFrame struct
        https://bugs.webkit.org/show_bug.cgi?id=27344

        Inherits MatchFrame struct from FastAllocBase because it has
        been instantiated by 'new' JavaScriptCore/pcre/pcre_exec.cpp:359.

        * pcre/pcre_exec.cpp:

2009-07-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        Remove some outdated S60 platform specific code
        https://bugs.webkit.org/show_bug.cgi?id=27423

        * wtf/Platform.h:

2009-07-20  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Qt build fix with MSVC and MinGW.

        * jsc.pro: Make sure jsc is a console application, and turn off
        exceptions and stl support to fix the build.

2009-07-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Do not use C++-style comments in preprocessor directives.

        GCC does not like this in some configurations, using C-style
        comments is safer.

        * wtf/Platform.h:

2009-07-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:

2009-07-17  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Add YARR support for generic ARM platforms (disabled by default).
        https://bugs.webkit.org/show_bug.cgi?id=24986

        Add generic ARM port for MacroAssembler. It supports the whole
        MacroAssembler functionality except floating point.

        The class JmpSrc is extended with a flag which enables to patch
        the jump destination offset during execution. This feature is
        required for generic ARM port.

        Signed off by Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
        Signed off by Gabor Loki <loki@inf.u-szeged.hu>

        * JavaScriptCore.pri:
        * assembler/ARMAssembler.cpp: Added.
        (JSC::ARMAssembler::getLdrImmAddress):
        (JSC::ARMAssembler::linkBranch):
        (JSC::ARMAssembler::patchConstantPoolLoad):
        (JSC::ARMAssembler::getOp2):
        (JSC::ARMAssembler::genInt):
        (JSC::ARMAssembler::getImm):
        (JSC::ARMAssembler::moveImm):
        (JSC::ARMAssembler::dataTransfer32):
        (JSC::ARMAssembler::baseIndexTransfer32):
        (JSC::ARMAssembler::executableCopy):
        * assembler/ARMAssembler.h: Added.
        (JSC::ARM::):
        (JSC::ARMAssembler::ARMAssembler):
        (JSC::ARMAssembler::):
        (JSC::ARMAssembler::JmpSrc::JmpSrc):
        (JSC::ARMAssembler::JmpSrc::enableLatePatch):
        (JSC::ARMAssembler::JmpDst::JmpDst):
        (JSC::ARMAssembler::JmpDst::isUsed):
        (JSC::ARMAssembler::JmpDst::used):
        (JSC::ARMAssembler::emitInst):
        (JSC::ARMAssembler::and_r):
        (JSC::ARMAssembler::ands_r):
        (JSC::ARMAssembler::eor_r):
        (JSC::ARMAssembler::eors_r):
        (JSC::ARMAssembler::sub_r):
        (JSC::ARMAssembler::subs_r):
        (JSC::ARMAssembler::rsb_r):
        (JSC::ARMAssembler::rsbs_r):
        (JSC::ARMAssembler::add_r):
        (JSC::ARMAssembler::adds_r):
        (JSC::ARMAssembler::adc_r):
        (JSC::ARMAssembler::adcs_r):
        (JSC::ARMAssembler::sbc_r):
        (JSC::ARMAssembler::sbcs_r):
        (JSC::ARMAssembler::rsc_r):
        (JSC::ARMAssembler::rscs_r):
        (JSC::ARMAssembler::tst_r):
        (JSC::ARMAssembler::teq_r):
        (JSC::ARMAssembler::cmp_r):
        (JSC::ARMAssembler::orr_r):
        (JSC::ARMAssembler::orrs_r):
        (JSC::ARMAssembler::mov_r):
        (JSC::ARMAssembler::movs_r):
        (JSC::ARMAssembler::bic_r):
        (JSC::ARMAssembler::bics_r):
        (JSC::ARMAssembler::mvn_r):
        (JSC::ARMAssembler::mvns_r):
        (JSC::ARMAssembler::mul_r):
        (JSC::ARMAssembler::muls_r):
        (JSC::ARMAssembler::mull_r):
        (JSC::ARMAssembler::ldr_imm):
        (JSC::ARMAssembler::ldr_un_imm):
        (JSC::ARMAssembler::dtr_u):
        (JSC::ARMAssembler::dtr_ur):
        (JSC::ARMAssembler::dtr_d):
        (JSC::ARMAssembler::dtr_dr):
        (JSC::ARMAssembler::ldrh_r):
        (JSC::ARMAssembler::ldrh_d):
        (JSC::ARMAssembler::ldrh_u):
        (JSC::ARMAssembler::strh_r):
        (JSC::ARMAssembler::push_r):
        (JSC::ARMAssembler::pop_r):
        (JSC::ARMAssembler::poke_r):
        (JSC::ARMAssembler::peek_r):
        (JSC::ARMAssembler::clz_r):
        (JSC::ARMAssembler::bkpt):
        (JSC::ARMAssembler::lsl):
        (JSC::ARMAssembler::lsr):
        (JSC::ARMAssembler::asr):
        (JSC::ARMAssembler::lsl_r):
        (JSC::ARMAssembler::lsr_r):
        (JSC::ARMAssembler::asr_r):
        (JSC::ARMAssembler::size):
        (JSC::ARMAssembler::ensureSpace):
        (JSC::ARMAssembler::label):
        (JSC::ARMAssembler::align):
        (JSC::ARMAssembler::jmp):
        (JSC::ARMAssembler::patchPointerInternal):
        (JSC::ARMAssembler::patchConstantPoolLoad):
        (JSC::ARMAssembler::patchPointer):
        (JSC::ARMAssembler::repatchInt32):
        (JSC::ARMAssembler::repatchPointer):
        (JSC::ARMAssembler::repatchLoadPtrToLEA):
        (JSC::ARMAssembler::linkJump):
        (JSC::ARMAssembler::relinkJump):
        (JSC::ARMAssembler::linkCall):
        (JSC::ARMAssembler::relinkCall):
        (JSC::ARMAssembler::getRelocatedAddress):
        (JSC::ARMAssembler::getDifferenceBetweenLabels):
        (JSC::ARMAssembler::getCallReturnOffset):
        (JSC::ARMAssembler::getOp2Byte):
        (JSC::ARMAssembler::placeConstantPoolBarrier):
        (JSC::ARMAssembler::RM):
        (JSC::ARMAssembler::RS):
        (JSC::ARMAssembler::RD):
        (JSC::ARMAssembler::RN):
        (JSC::ARMAssembler::getConditionalField):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::JmpSrc::enableLatePatch):
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Call::enableLatePatch):
        (JSC::AbstractMacroAssembler::Jump::enableLatePatch):
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerARM.h: Added.
        (JSC::MacroAssemblerARM::):
        (JSC::MacroAssemblerARM::add32):
        (JSC::MacroAssemblerARM::and32):
        (JSC::MacroAssemblerARM::lshift32):
        (JSC::MacroAssemblerARM::mul32):
        (JSC::MacroAssemblerARM::not32):
        (JSC::MacroAssemblerARM::or32):
        (JSC::MacroAssemblerARM::rshift32):
        (JSC::MacroAssemblerARM::sub32):
        (JSC::MacroAssemblerARM::xor32):
        (JSC::MacroAssemblerARM::load32):
        (JSC::MacroAssemblerARM::load32WithAddressOffsetPatch):
        (JSC::MacroAssemblerARM::loadPtrWithPatchToLEA):
        (JSC::MacroAssemblerARM::load16):
        (JSC::MacroAssemblerARM::store32WithAddressOffsetPatch):
        (JSC::MacroAssemblerARM::store32):
        (JSC::MacroAssemblerARM::pop):
        (JSC::MacroAssemblerARM::push):
        (JSC::MacroAssemblerARM::move):
        (JSC::MacroAssemblerARM::swap):
        (JSC::MacroAssemblerARM::signExtend32ToPtr):
        (JSC::MacroAssemblerARM::zeroExtend32ToPtr):
        (JSC::MacroAssemblerARM::branch32):
        (JSC::MacroAssemblerARM::branch16):
        (JSC::MacroAssemblerARM::branchTest32):
        (JSC::MacroAssemblerARM::jump):
        (JSC::MacroAssemblerARM::branchAdd32):
        (JSC::MacroAssemblerARM::mull32):
        (JSC::MacroAssemblerARM::branchMul32):
        (JSC::MacroAssemblerARM::branchSub32):
        (JSC::MacroAssemblerARM::breakpoint):
        (JSC::MacroAssemblerARM::nearCall):
        (JSC::MacroAssemblerARM::call):
        (JSC::MacroAssemblerARM::ret):
        (JSC::MacroAssemblerARM::set32):
        (JSC::MacroAssemblerARM::setTest32):
        (JSC::MacroAssemblerARM::tailRecursiveCall):
        (JSC::MacroAssemblerARM::makeTailRecursiveCall):
        (JSC::MacroAssemblerARM::moveWithPatch):
        (JSC::MacroAssemblerARM::branchPtrWithPatch):
        (JSC::MacroAssemblerARM::storePtrWithPatch):
        (JSC::MacroAssemblerARM::supportsFloatingPoint):
        (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerARM::loadDouble):
        (JSC::MacroAssemblerARM::storeDouble):
        (JSC::MacroAssemblerARM::addDouble):
        (JSC::MacroAssemblerARM::subDouble):
        (JSC::MacroAssemblerARM::mulDouble):
        (JSC::MacroAssemblerARM::convertInt32ToDouble):
        (JSC::MacroAssemblerARM::branchDouble):
        (JSC::MacroAssemblerARM::branchTruncateDoubleToInt32):
        (JSC::MacroAssemblerARM::ARMCondition):
        (JSC::MacroAssemblerARM::prepareCall):
        (JSC::MacroAssemblerARM::call32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::JmpSrc::enableLatePatch):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):
        * wtf/Platform.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateEnter):
        (JSC::Yarr::RegexGenerator::generateReturn):

2009-07-17  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Extend AssemblerBuffer with constant pool handling mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=24986

        Add a platform independed constant pool framework.
        This pool can store 32 or 64 bits values which is enough to hold
        any integer, pointer or double constant.

        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::putIntUnchecked):
        (JSC::AssemblerBuffer::putInt64Unchecked):
        (JSC::AssemblerBuffer::append):
        (JSC::AssemblerBuffer::grow):
        * assembler/AssemblerBufferWithConstantPool.h: Added.
        (JSC::):

2009-07-17  Eric Roman  <eroman@chromium.org>

        Reviewed by Darin Adler.

        Build fix for non-Darwin.
        Add a guard for inclusion of RetainPtr.h which includes CoreFoundation.h

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

        * wtf/unicode/icu/CollatorICU.cpp:

2009-07-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by John Sullivan.

        Get user default collation order via a CFLocale API when available.

        * wtf/unicode/icu/CollatorICU.cpp: (WTF::Collator::userDefault):

2009-07-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix the include path for the Symbian port
        https://bugs.webkit.org/show_bug.cgi?id=27358

        * JavaScriptCore.pri:

2009-07-17  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by David Levin.

        Build fix on platforms don't have MMAP.
        https://bugs.webkit.org/show_bug.cgi?id=27365

        * interpreter/RegisterFile.h: Including stdio.h irrespectively of HAVE(MMAP)

2009-07-16  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Add --web-sockets flag and ENABLE_WEB_SOCKETS define.
        https://bugs.webkit.org/show_bug.cgi?id=27206
        
        Add ENABLE_WEB_SOCKETS

        * Configurations/FeatureDefines.xcconfig: add ENABLE_WEB_SOCKETS

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added Haiku-specific files for JavaScriptCore.
        https://bugs.webkit.org/show_bug.cgi?id=26620

        * wtf/haiku/MainThreadHaiku.cpp: Added.
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):

2009-07-16  Gavin Barraclough  <barraclough@apple.com>

        RS by Oliver Hunt.

        Revert r45969, this fix does not appear to be valid.
        https://bugs.webkit.org/show_bug.cgi?id=27077

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::unlinkCallers):
        * jit/JIT.cpp:
        * jit/JIT.h:

2009-07-16  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Oliver Hunt.

        Allow custom memory allocation control in ExceptionInfo and RareData struct
        https://bugs.webkit.org/show_bug.cgi?id=27336

        Inherits ExceptionInfo and RareData struct from FastAllocBase because these
        have been instantiated by 'new' in JavaScriptCore/bytecode/CodeBlock.cpp:1289 and
        in JavaScriptCore/bytecode/CodeBlock.h:453.

        Remove unnecessary WTF:: namespace from CodeBlock inheritance.
 
        * bytecode/CodeBlock.h:

2009-07-16  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Geoff Garen.

        Fix FeatureDefines.xcconfig to not be out of sync with the rest of the world.

        * Configurations/FeatureDefines.xcconfig:

2009-07-16  Yong Li  <yong.li@torchmobile.com>

         Reviewed by George Staikos.

         https://bugs.webkit.org/show_bug.cgi?id=27320
         _countof is only included in CE6; for CE5 we need to define it ourself

         * wtf/Platform.h:

2009-07-16  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Oliver Hunt.

        Workers + garbage collector: weird crashes
        https://bugs.webkit.org/show_bug.cgi?id=27077

        We need to unlink cached method call sites when a function is destroyed.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::unlinkCallers):
        * jit/JIT.cpp:
        (JSC::JIT::unlinkMethodCall):
        * jit/JIT.h:

2009-07-15  Steve Falkenburg  <sfalken@apple.com>

        Windows Build fix.

        Visual Studio reset our intermediate directory on us.
        This sets it back.
        
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:

2009-07-15  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26794
        Make Yacc-generated parsers to use fastMalloc/fastFree.
        
        Define YYMALLOC and YYFREE to fastMalloc and fastFree
        respectively.

        * parser/Grammar.y:

2009-07-15  Darin Adler  <darin@apple.com>

        Fix a build for a particular Apple configuration.

        * wtf/FastAllocBase.h: Change include to use "" style for
        including another wtf header. This is the style we use for
        including other public headers in the same directory.

2009-07-15  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=27303
        Implement createThreadInternal for WinCE.
        Contains changes by George Staikos <george.staikos@torchmobile.com> and Joe Mason <joe.mason@torchmobile.com>

        * wtf/ThreadingWin.cpp:
        (WTF::createThreadInternal):

2009-07-15  Joe Mason  <joe.mason@torchmobile.com>

         Reviewed by George Staikos.

         https://bugs.webkit.org/show_bug.cgi?id=27298
         Platform defines for WINCE.
         Contains changes by Yong Li <yong.li@torchmobile.com>,
         George Staikos <george.staikos@torchmobile.com> and Joe Mason <joe.mason@torchmobile.com>

         * wtf/Platform.h:

2009-07-15  Yong Li  <yong.li@torchmobile.com>

         Reviewed by Adam Treat.

         https://bugs.webkit.org/show_bug.cgi?id=27306
         Use RegisterClass instead of RegisterClassEx on WinCE.

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

2009-07-15  Yong Li  <yong.li@torchmobile.com>

         Reviewed by George Staikos.

         https://bugs.webkit.org/show_bug.cgi?id=27301
         Use OutputDebugStringW on WinCE since OutputDebugStringA is not supported
         Originally written by Yong Li <yong.li@torchmobile.com> and refactored by
         Joe Mason <joe.mason@torchmobile.com>

         * wtf/Assertions.cpp: vprintf_stderr_common

2009-07-15  Yong Li  <yong.li@torchmobile.com>

         Reviewed by George Staikos.

         https://bugs.webkit.org/show_bug.cgi?id=27020
         msToGregorianDateTime should set utcOffset to 0 when outputIsUTC is false

         * wtf/DateMath.cpp:
         (WTF::gregorianDateTimeToMS):

2009-07-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Cleanup - Remove obsolete code from the make system
        https://bugs.webkit.org/show_bug.cgi?id=27299

        * JavaScriptCore.pro:
        * jsc.pro:

2009-07-07  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

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

        Alternate bool operator for codewarrior compiler (WINSCW).
        Compiler (latest b482) reports error for UnspecifiedBoolType construct:
        "illegal explicit conversion from 'WTF::OwnArrayPtr<JSC::Register>' to 'bool'"

        Same fix as in r38391.

        * JavaScriptCore/wtf/OwnArrayPtr.h:

2009-07-15  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Darin Adler.

        Qualify include path with wtf to fix compilation
        on Symbian.
        https://bugs.webkit.org/show_bug.cgi?id=27055

        * interpreter/Interpreter.h:

2009-07-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Dave Kilzer.

        Turn off non-portable date manipulations for SYMBIAN
        https://bugs.webkit.org/show_bug.cgi?id=27064

        Introduce HAVE(TM_GMTOFF), HAVE(TM_ZONE) and HAVE(TIMEGM) guards 
        and place the rules for controlling the guards in Platform.h.
        Turn off these newly introduced guards for SYMBIAN.

        * wtf/DateMath.cpp:
        (WTF::calculateUTCOffset):
        * wtf/DateMath.h:
        (WTF::GregorianDateTime::GregorianDateTime):
        (WTF::GregorianDateTime::operator tm):
        * wtf/Platform.h:

2009-07-15  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

        Undef ASSERT on Symbian, to avoid excessive warnings
        https://bugs.webkit.org/show_bug.cgi?id=27052

        * wtf/Assertions.h:

2009-07-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Simon Hausmann.

        REGRESSION: fast/js/postfix-syntax.html fails with interpreter
        https://bugs.webkit.org/show_bug.cgi?id=27294

        When postfix operators operating on locals assign to the same local
        the order of operations has to be to store the incremented value, then
        store the unmodified number.  Rather than implementing this subtle
        semantic in the interpreter I've just made the logic explicit in the
        bytecode generator, so x=x++ effectively becomes x=ToNumber(x) (for a
        local var x).

        * parser/Nodes.cpp:
        (JSC::emitPostIncOrDec):

2009-07-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Simon Hausmann.

        REGRESSION(43559): fast/js/kde/arguments-scope.html fails with interpreter
        https://bugs.webkit.org/show_bug.cgi?id=27259

        The interpreter was incorrectly basing its need to create the arguments object
        based on the presence of the callframe's argument reference rather than the local
        arguments reference.  Based on this it then overrode the local variable reference.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2009-07-14  Steve Falkenburg  <sfalken@apple.com>

        Reorganize JavaScriptCore headers into:
        API: include/JavaScriptCore/
        Private: include/private/JavaScriptCore/

        Reviewed by Darin Adler.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Change JSCell's superclass to NoncopyableCustomAllocated
        https://bugs.webkit.org/show_bug.cgi?id=27248

        JSCell class customizes operator new, since Noncopyable will be 
        inherited from FastAllocBase, NoncopyableCustomAllocated has 
        to be used.

        * runtime/JSCell.h:

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Change all Noncopyable inheriting visibility to public.
        https://bugs.webkit.org/show_bug.cgi?id=27225

        Change all Noncopyable inheriting visibility to public because
        it is needed to the custom allocation framework (bug #20422).

        * bytecode/SamplingTool.h:
        * bytecompiler/RegisterID.h:
        * interpreter/CachedCall.h:
        * interpreter/RegisterFile.h:
        * parser/Lexer.h:
        * parser/Parser.h:
        * runtime/ArgList.h:
        * runtime/BatchedTransitionOptimizer.h:
        * runtime/Collector.h:
        * runtime/CommonIdentifiers.h:
        * runtime/JSCell.h:
        * runtime/JSGlobalObject.h:
        * runtime/JSLock.h:
        * runtime/JSONObject.cpp:
        * runtime/SmallStrings.cpp:
        * runtime/SmallStrings.h:
        * wtf/CrossThreadRefCounted.h:
        * wtf/GOwnPtr.h:
        * wtf/Locker.h:
        * wtf/MessageQueue.h:
        * wtf/OwnArrayPtr.h:
        * wtf/OwnFastMallocPtr.h:
        * wtf/OwnPtr.h:
        * wtf/RefCounted.h:
        * wtf/ThreadSpecific.h:
        * wtf/Threading.h:
        * wtf/Vector.h:
        * wtf/unicode/Collator.h:

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Change ParserArenaRefCounted's superclass to RefCountedCustomAllocated
        https://bugs.webkit.org/show_bug.cgi?id=27249

        ParserArenaDeletable customizes operator new, to avoid double inheritance
        ParserArenaDeletable's superclass has been changed to RefCountedCustomAllocated.

        * parser/Nodes.h:

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Add RefCountedCustomAllocated to RefCounted.h
        https://bugs.webkit.org/show_bug.cgi?id=27232

        Some class which are inherited from RefCounted customize
        operator new, but RefCounted is inherited from Noncopyable
        which will be inherited from FastAllocBase. To avoid
        conflicts Noncopyable inheriting was moved down to RefCounted
        and to avoid double inheritance this class has been added.

        * wtf/RefCounted.h:
        (WTF::RefCountedCustomAllocated::deref):
        (WTF::RefCountedCustomAllocated::~RefCountedCustomAllocated):

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Add NoncopyableCustomAllocated to Noncopyable.h.
        https://bugs.webkit.org/show_bug.cgi?id=27228
        
        Some classes which inherited from Noncopyable overrides operator new
        since Noncopyable'll be inherited from FastAllocBase, Noncopyable.h 
        needs to be extended with this new class to support the overriding. 

        * wtf/Noncopyable.h:
        (WTFNoncopyable::NoncopyableCustomAllocated::NoncopyableCustomAllocated):
        (WTFNoncopyable::NoncopyableCustomAllocated::~NoncopyableCustomAllocated):

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for JavaScriptCore's IdentifierTable class
        https://bugs.webkit.org/show_bug.cgi?id=27260

        Inherits IdentifierTable class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/runtime/Identifier.cpp:70.

        * runtime/Identifier.cpp:

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for JavaScriptCore's Profiler class
        https://bugs.webkit.org/show_bug.cgi?id=27253

        Inherits Profiler class from FastAllocBase because it has been instantiated by
        'new' in JavaScriptCore/profiler/Profiler.cpp:56.

        * profiler/Profiler.h:

2009-07-06  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Adam Treat.

        Authors: George Staikos <george.staikos@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com>, Makoto Matsumoto <matumoto@math.keio.ac.jp>, Takuji Nishimura

        https://bugs.webkit.org/show_bug.cgi?id=27030
        Implement custom RNG for WinCE using Mersenne Twister

        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):
        * wtf/RandomNumberSeed.h:
        (WTF::initializeRandomNumberGenerator):
        * wtf/wince/mt19937ar.c: Added.
        (init_genrand):
        (init_by_array):
        (genrand_int32):
        (genrand_int31):
        (genrand_real1):
        (genrand_real2):
        (genrand_real3):
        (genrand_res53):

2009-07-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed make dist build fix.

        * GNUmakefile.am:

2009-07-13  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Add ENABLE(SHARED_WORKERS) flag and define SharedWorker APIs
        https://bugs.webkit.org/show_bug.cgi?id=26932

        Added ENABLE(SHARED_WORKERS) flag (off by default).

        * Configurations/FeatureDefines.xcconfig:

2009-07-07  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Maciej Stachoviak.

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

        Removed superfluous parenthesis around single expression.
        Compilers on Symbian platform fail to properly parse and compile.

        * JavaScriptCore/wtf/Platform.h:

2009-07-13  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Maciej Stachoviak.

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

        Renamed Translator to HashTranslator

        Codewarrior compiler (WINSCW) latest b482 cannot resolve typename
        mismatch between template declaration and definition
        (HashTranslator / Translator)

        * wtf/HashSet.h:

2009-07-13  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Eric Seidel.

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

        Ambiguity in LabelScope initialization

        Codewarrior compiler (WINSCW) latest b482 on Symbian cannot resolve
        type of "0" unambiguously. Set expression explicitly to
        PassRefPtr<Label>::PassRefPtr()

        * bytecompiler/BytecodeGenerator.cpp

2009-07-11  Simon Fraser  <simon.fraser@apple.com>

        Enable support for accelerated compositing and 3d transforms on Leopard.
        <https://bugs.webkit.org/show_bug.cgi?id=20166>
        <rdar://problem/6120614>

        Reviewed by Oliver Hunt.

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

2009-07-10  Mark Rowe  <mrowe@apple.com>

        Second part of the "make Windows happier" dance.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-07-10  Mark Rowe  <mrowe@apple.com>

        Try and make the Windows build happy.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-07-10  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoffrey Garen.

        * debugger/Debugger.h: Made this function virtual for use in WebCore's
        WebInspector.

2009-07-10  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        ParserArenaDeletable should override delete
        https://bugs.webkit.org/show_bug.cgi?id=26790

        ParserArenaDeletable overrides new, but it does not override delete.
        ParserArenaDeletable must be freed by fastFree
        because it is allocated by fastMalloc.

        * parser/NodeConstructors.h:
        (JSC::ParserArenaDeletable::operator delete):
        * parser/Nodes.h:

2009-07-10  Adam Roben  <aroben@apple.com>

        Sort all our Xcode projects

        Accomplished using sort-Xcode-project-file.

        Requested by Dave Kilzer.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2009-07-09  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.

        Windows build fix for the last change.

        * wtf/dtoa.cpp: Forgot to include Vector.h

2009-07-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: crash in edge cases of floating point parsing.
        https://bugs.webkit.org/show_bug.cgi?id=27110
        <rdar://problem/7044458>
        
        Tests: fast/css/number-parsing-crash.html
               fast/css/number-parsing-crash.html
               fast/js/number-parsing-crash.html
        
        * wtf/dtoa.cpp:
        (WTF::BigInt::BigInt): Converted this to more a proper class, using a Vector
        with inline capacity

        (WTF::lshift): Rearranged logic somewhat nontrivially to deal with the new way of sizing BigInts.
        Added an assertion to verify that invariants are maintained.

        All other functions are adapted fairly mechanically to the above changes.
        (WTF::BigInt::clear):
        (WTF::BigInt::size):
        (WTF::BigInt::resize):
        (WTF::BigInt::words):
        (WTF::BigInt::append):
        (WTF::multadd):
        (WTF::s2b):
        (WTF::i2b):
        (WTF::mult):
        (WTF::cmp):
        (WTF::diff):
        (WTF::b2d):
        (WTF::d2b):
        (WTF::ratio):
        (WTF::strtod):
        (WTF::quorem):
        (WTF::dtoa):

2009-07-09  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

        Turned on CHANNEL_MESSAGING by default because the MessageChannel API
        can now be implemented for Web Workers and is reasonably stable.

        * Configurations/FeatureDefines.xcconfig:

2009-07-09  Oliver Hunt  <oliver@apple.com>

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2009-07-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Bug 27016 - Interpreter crashes due to invalid array indexes
        <https://bugs.webkit.org/show_bug.cgi?id=27016>

        Unsigned vs signed conversions results in incorrect behaviour in
        64bit interpreter builds.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2009-07-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Upstream JavaScriptCore.gypi, the project file for Chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=27135

        * JavaScriptCore.gypi: Added.

2009-07-09  Joe Mason  <joe.mason@torchmobile.com>

        Reviewed by George Staikos.
        
        Authors: Yong Li <yong.li@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com>

        https://bugs.webkit.org/show_bug.cgi?id=27031
        Add an override for deleteOwnedPtr(HDC) on Windows
        
        * wtf/OwnPtrCommon.h:
        * wtf/OwnPtrWin.cpp:
        (WTF::deleteOwnedPtr):

2009-07-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Guard singal.h dependency with HAVE(SIGNAL_H) to enable building jsc
        on SYMBIAN.

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

        Based on Norbert Leser's work.

        * jsc.cpp:
        (printUsageStatement):
        (parseArguments):
        * wtf/Platform.h:

2009-07-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Stop loading constants into the register file.

        Instead, use high register values (highest bit bar the sign bit set) to indicate
        constants in the instruction stream, and when we encounter such a value load it
        directly from the CodeBlock.

        Since constants are no longer copied into the register file, this patch renders
        the 'unexpected constant' mechanism redundant, and removes it.

        2% improvement, thanks to Sam Weinig.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::mark):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::isTemporaryRegisterIndex):
        (JSC::CodeBlock::constantRegister):
        (JSC::CodeBlock::isConstantRegisterIndex):
        (JSC::CodeBlock::getConstant):
        (JSC::ExecState::r):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::preserveLastVar):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::addConstantValue):
        (JSC::BytecodeGenerator::emitEqualityOp):
        (JSC::BytecodeGenerator::emitLoad):
        (JSC::BytecodeGenerator::emitResolveBase):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitNewError):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitNode):
        * interpreter/CallFrame.h:
        (JSC::ExecState::noCaller):
        (JSC::ExecState::hasHostCallFrameFlag):
        (JSC::ExecState::addHostCallFrameFlag):
        (JSC::ExecState::removeHostCallFrameFlag):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveBase):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::resolveBaseAndFunc):
        (JSC::Interpreter::dumpRegisters):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::createExceptionScope):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveArguments):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoadDouble):
        (JSC::JIT::emitLoadInt32ToDouble):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_error):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::emit_op_enter_with_activation):
        * parser/Nodes.cpp:
        (JSC::DeleteResolveNode::emitBytecode):
        (JSC::DeleteValueNode::emitBytecode):
        (JSC::PrefixResolveNode::emitBytecode):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        * wtf/Platform.h:

2009-07-07  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=27025> / <rdar://problem/7033448>.
        Bug 27025: Crashes and regression test failures related to regexps in 64-bit

        For x86_64 RegexGenerator uses rbx, a callee-save register, as a scratch register but
        neglects to save and restore it.  The change in handling of the output vector in r45545
        altered code generation so that the RegExp::match was now storing important data in rbx,
        which caused crashes and bogus results when it was clobbered.

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateEnter): Save rbx.
        (JSC::Yarr::RegexGenerator::generateReturn): Restore rbx.

2009-07-06  Ada Chan  <adachan@apple.com>

        Reviewed by Darin Adler and Mark Rowe.

        Decommitted spans are added to the list of normal spans rather than 
        the returned spans in TCMalloc_PageHeap::Delete().
        https://bugs.webkit.org/show_bug.cgi?id=26998
        
        In TCMalloc_PageHeap::Delete(), the deleted span can be decommitted in 
        the process of merging with neighboring spans that are also decommitted.  
        The merged span needs to be placed in the list of returned spans (spans 
        whose memory has been returned to the system).  Right now it's always added 
        to the list of the normal spans which can theoretically cause thrashing.  

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

2009-07-05  Lars Knoll  <lars.knoll@nokia.com>

        Reviewed by Maciej Stachowiak.

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

        Fix run-time crashes in JavaScriptCore with the Metrowerks compiler on Symbian.

        The Metrowerks compiler on the Symbian platform moves the globally
        defined Hashtables into read-only memory, despite one of the members
        being mutable. This causes crashes at run-time due to write access to
        read-only memory.

        Avoid the use of const with this compiler by introducing the
        JSC_CONST_HASHTABLE macro.

        Based on idea by Norbert Leser.

        * runtime/Lookup.h: Define JSC_CONST_HASHTABLE as const for !WINSCW.
        * create_hash_table: Use JSC_CONST_HASHTABLE for hashtables.
        * runtime/JSGlobalData.cpp: Import various global hashtables via the macro.

2009-07-04  Dan Bernstein  <mitz@apple.com>

        - debug build fix

        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getLastParen):

2009-07-03  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Maciej Stachowiak (and revised slightly)

        RegExp::match to be optimized
        https://bugs.webkit.org/show_bug.cgi?id=26957

        Allow regexp matching to use Vectors with inline capacity instead of
        allocating a new ovector buffer every time.
        
        ~5% speedup on SunSpider string-unpack-code test, 0.3% on SunSpider overall.

        * runtime/RegExp.cpp:
        (JSC::RegExp::match):
        * runtime/RegExp.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructorPrivate::RegExpConstructorPrivate):
        (JSC::RegExpConstructorPrivate::lastOvector):
        (JSC::RegExpConstructorPrivate::tempOvector):
        (JSC::RegExpConstructorPrivate::changeLastOvector):
        (JSC::RegExpConstructor::performMatch):
        (JSC::RegExpMatchesArray::RegExpMatchesArray):
        (JSC::RegExpMatchesArray::fillArrayInstance):
        (JSC::RegExpConstructor::getBackref):
        (JSC::RegExpConstructor::getLastParen):
        (JSC::RegExpConstructor::getLeftContext):
        (JSC::RegExpConstructor::getRightContext):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncSplit):

2009-06-30  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Override operator new/delete with const std::nothrow_t& as the second
        argument.
        https://bugs.webkit.org/show_bug.cgi?id=26792

        On Windows CE, operator new/delete, new[]/delete[] with const
        std::nothrow_t& must be overrided because some standard template
        libraries use these operators.

        The problem occurs when memory allocated by new(size_t s, const
        std::nothrow_t&) is freed by delete(void* p). This causes the umatched
        malloc/free problem.

        The patch overrides all new, delete, new[] and delete[] to use
        fastMaloc and fastFree consistently.

        * wtf/FastMalloc.h:
        (throw):

2009-06-30  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Sam Weinig.

        <https://bugs.webkit.org/show_bug.cgi?id=24986>

        Remove unnecessary references to AssemblerBuffer.

        * interpreter/Interpreter.cpp:
        * interpreter/Interpreter.h:

2009-06-29  David Levin  <levin@chromium.org>

        Reviewed by Oliver Hunt.

        Still seeing occasional leaks from UString::sharedBuffer code
        https://bugs.webkit.org/show_bug.cgi?id=26420

        The problem is that the pointer to the memory allocation isn't visible
        by "leaks" due to the lower bits being used as flags.  The fix is to
        make the pointer visible in memory (in debug only). The downside of
        this fix that the memory allocated by sharedBuffer will still look like
        a leak in non-debug builds when any flags are set.

        * wtf/PtrAndFlags.h:
        (WTF::PtrAndFlags::set):

2009-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove more unused scons support.

        * SConstruct: Removed.

2009-06-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        <rdar://problem/7016214> JSON.parse fails to parse valid JSON with most Unicode characters
        <https://bugs.webkit.org/show_bug.cgi?id=26802>

        In the original JSON.parse patch unicode was handled correctly, however in some last
        minute "clean up" I oversimplified isSafeStringCharacter.  This patch corrects this bug.

        * runtime/LiteralParser.cpp:
        (JSC::isSafeStringCharacter):
        (JSC::LiteralParser::Lexer::lexString):

2009-06-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7009684> REGRESSION(r45039): Crashes inside JSEvent::put on PowerPC (26746)
        <https://bugs.webkit.org/show_bug.cgi?id=26746>

        Fix for r45039 incorrectly uncached a get_by_id by converting it to put_by_id.  Clearly this
        is less than correct.  This patch corrects that error.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCacheGetByID):

2009-06-26  Eric Seidel  <eric@webkit.org>

        No review, only rolling out r45259.

        Roll out r45259 after crash appeared on the bots:
        plugins/undefined-property-crash.html
        ASSERTION FAILED: s <= HeapConstants<heapType>::cellSize
        (leopard-intel-debug-tests/build/JavaScriptCore/runtime/Collector.cpp:278
        void* JSC::Heap::heapAllocate(size_t) [with JSC::HeapType heapType = PrimaryHeap])

        * runtime/DateInstance.cpp:
        * runtime/Identifier.cpp:
        * runtime/Lookup.h:
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpObject.h:
        * runtime/ScopeChain.h:
        * runtime/UString.h:

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Add support for QDataStream operators to Vector.

        * wtf/Vector.h:
        (WTF::operator<<):
        (WTF::operator>>):

2009-06-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Make the opcode sampler work once again.

        * jit/JIT.h:
        (JSC::JIT::compileGetByIdProto):
        (JSC::JIT::compileGetByIdSelfList):
        (JSC::JIT::compileGetByIdProtoList):
        (JSC::JIT::compileGetByIdChainList):
        (JSC::JIT::compileGetByIdChain):
        (JSC::JIT::compilePutByIdTransition):
        (JSC::JIT::compileCTIMachineTrampolines):
        (JSC::JIT::compilePatchGetArrayLength):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::call):

2009-06-24  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Maciej Stachowiak.

        Extend FastAllocBase.h with 'using WTF::FastAllocBase' to avoid
        unnecessary WTF:: usings.
        Remove existing unnecessary WTF:: usings.

        * interpreter/Interpreter.h:
        * profiler/CallIdentifier.h:
        * runtime/ScopeChain.h:
        * wtf/FastAllocBase.h:

2009-06-24  David Levin  <levin@chromium.org>

        Fix all builds.

        * bytecode/CodeBlock.h:
        * bytecompiler/BytecodeGenerator.h:
        * interpreter/Register.h:

2009-06-24  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Maciej Stachowiak.
        
        https://bugs.webkit.org/show_bug.cgi?id=26677

        Inherits CodeBlock class from FastAllocBase because it
        has been instantiated by 'new' in JavaScriptCore/bytecode/CodeBlock.h:217.

        * bytecode/CodeBlock.h:

2009-06-24  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Maciej Stachowiak.
        
        https://bugs.webkit.org/show_bug.cgi?id=26676

        Inherits BytecodeGenerator class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/parser/Nodes.cpp:1892.

        * bytecompiler/BytecodeGenerator.h:

2009-06-24  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Maciej Stachowiak.
        
        https://bugs.webkit.org/show_bug.cgi?id=26675

        Inherits Register class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/runtime/JSVariableObject.h:149.

        * interpreter/Register.h:

2009-06-24  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=26674

        Inherits HashMap class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/runtime/Structure.cpp:458.

        * wtf/HashMap.h:

2009-06-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6940519> REGRESSION (Safari 4 Public Beta - TOT): google.com/adplanner shows blank page instead of site details in "basic research'

        The problem was caused by the page returned with a function using a
        var declaration list containing around ~3000 variables.  The solution
        to this is to flatten the comma expression representation and make
        codegen comma expressions and initializer lists iterative rather than
        recursive.

        * parser/Grammar.y:
        * parser/NodeConstructors.h:
        (JSC::CommaNode::CommaNode):
        * parser/Nodes.cpp:
        (JSC::CommaNode::emitBytecode):
        * parser/Nodes.h:
        (JSC::ExpressionNode::isCommaNode):
        (JSC::CommaNode::isCommaNode):
        (JSC::CommaNode::append):

2009-06-24  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Maciej Stachowiak.

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

        Inherits ScopeChainNode class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/runtime/ScopeChain.h:95.

        * wtf/RefPtr.h:

2009-06-24  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

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

        Inherits Deque class from FastAllocBase because it has been
        instantiated by 'new' with DEFINE_STATIC_LOCAL macro in 
        JavaScriptCore/wtf/MainThread.cpp:62.

        * wtf/Deque.h:

2009-06-24  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

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

        Inherits RefPtr class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/runtime/StructureChain.cpp:41.

        * wtf/RefPtr.h:

2009-06-24  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Inherits HashSet class from FastAllocBase, because it has been
        instantiated by 'new' in JavaScriptCore/runtime/Collector.h:116.

        * wtf/HashSet.h:

2009-06-24  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Inherits Vector class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/runtime/Structure.cpp:633.

        * wtf/Vector.h:

2009-06-24  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Maciej Stachoviak.

        The BytecodeGenerator objects were instantiated on stack, which takes up ~38kB per instance
        (each instance includes copy of JSC::CodeBlock with large SymbolTable, etc.).
        Specifically, since there is nested invocation (e.g., GlobalCode --> FunctionCode),
        the stack overflows immediately on Symbian hardware (max. 80 kB).
        Proposed change allocates generator objects on heap.
        Performance impact (if any) should be negligible and change is proposed as general fix,
        rather than ifdef'd for SYMBIAN.

        * parser/Nodes.cpp:
        (JSC::ProgramNode::generateBytecode):
        (JSC::EvalNode::generateBytecode):
        (JSC::EvalNode::bytecodeForExceptionInfoReparse):
        (JSC::FunctionBodyNode::generateBytecode):
        (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):

2009-06-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        <rdar://problem/6992806> REGRESSION: Enumeration can skip new properties in cases of prototypes that have more than 64 (26593)
        <https://bugs.webkit.org/show_bug.cgi?id=26593>

        Do not attempt to cache structure chains if they contain a dictionary at any level.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCachePutByID):
        (JSC::Interpreter::tryCacheGetByID):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        * runtime/Structure.cpp:
        (JSC::Structure::getEnumerablePropertyNames):
        (JSC::Structure::addPropertyTransition):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::isCacheable):
        * runtime/StructureChain.h:

2009-06-23  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=26654
        Add the proper export define for the JavaScriptCore API when building for WINCE.

        * API/JSBase.h:

2009-06-23  Joe Mason  <joe.mason@torchmobile.com>

        Reviewed by Adam Treat.

        Authors: Yong Li <yong.li@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com>

        https://bugs.webkit.org/show_bug.cgi?id=26611
        Implement currentThreadStackBase on WINCE by adding a global,
        g_stackBase, which must be set to the address of a local variable
        by the caller before calling any WebKit function that invokes JSC.

        * runtime/Collector.cpp:
        (JSC::isPageWritable):
        (JSC::getStackBase):
          Starts at the top of the stack and returns the entire range of
          consecutive writable pages as an estimate of the actual stack.
          This will be much bigger than the actual stack range, so some
          dead objects can't be collected, but it guarantees live objects
          aren't collected prematurely.

        (JSC::currentThreadStackBase):
          On WinCE, returns g_stackBase if set or call getStackBase as a
          fallback if not.

2009-06-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fix stupid performance problem in the LiteralParser

        The LiteralParser was making a new UString in order to use
        toDouble, however UString's toDouble allows a much wider range
        of numberic strings than the LiteralParser accepts, and requires
        an additional heap allocation or two for the construciton of the
        UString.  To rectify this we just call WTF::dtoa directly using
        a stack allocated buffer to hold the validated numeric literal.

        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::Lexer::lexNumber):
        (JSC::LiteralParser::parse):
        * runtime/LiteralParser.h:

2009-06-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 26640: JSON.stringify needs to special case Boolean objects
        <https://bugs.webkit.org/show_bug.cgi?id=26640>

        Add special case handling of the Boolean object so we match current
        ES5 errata.

        * runtime/JSONObject.cpp:
        (JSC::unwrapBoxedPrimitive): renamed from unwrapNumberOrString
        (JSC::gap):
        (JSC::Stringifier::appendStringifiedValue):

2009-06-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Bug 26591: Support revivers in JSON.parse
        <https://bugs.webkit.org/show_bug.cgi?id=26591>

        Add reviver support to JSON.parse.  This completes the JSON object.

        * runtime/JSONObject.cpp:
        (JSC::Walker::Walker):
        (JSC::Walker::callReviver):
        (JSC::Walker::walk):
        (JSC::JSONProtoFuncParse):

2009-06-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Bug 26592: Support standard toJSON functions
        <https://bugs.webkit.org/show_bug.cgi?id=26592>

        Add support for the standard Date.toJSON function.

        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToJSON):

2009-06-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Bug 26594: JSC needs to support Date.toISOString
        <https://bugs.webkit.org/show_bug.cgi?id=26594>

        Add support for Date.toISOString.

        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToISOString):

2009-06-21  Oliver Hunt  <oliver@apple.com>

        Remove dead code.

        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::parse):

2009-06-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler and Cameron Zwarich.

        Bug 26587: Support JSON.parse
        <https://bugs.webkit.org/show_bug.cgi?id=26587>

        Extend the LiteralParser to support the full strict JSON
        grammar, fix a few places where the grammar was incorrectly
        lenient.   Doesn't yet support the JSON.parse reviver function
        but that does not block the JSON.parse functionality itself.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::Lexer::lex):
        (JSC::isSafeStringCharacter):
        (JSC::LiteralParser::Lexer::lexString):
        (JSC::LiteralParser::parse):
        * runtime/LiteralParser.h:
        (JSC::LiteralParser::LiteralParser):
        (JSC::LiteralParser::tryJSONParse):
        (JSC::LiteralParser::):
        (JSC::LiteralParser::Lexer::Lexer):

2009-06-21  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (speculative build fix for windows).

        Simply removed some whitespace form this file to make windows build wtf and
        hopefully copy the new MessageQueque.h so that WebCore picks it up.

        * wtf/Assertions.cpp:

2009-06-21  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        <https://bugs.webkit.org/show_bug.cgi?id=25043>
        Added support for multi-threaded MessagePorts.

        * wtf/MessageQueue.h:
        (WTF::::appendAndCheckEmpty):
            Added API to test whether the queue was empty before adding an element.
  
2009-06-20  David D. Kilzer  <ddkilzer@webkit.org>

        Fix namespace comment in SegmentedVector.h

        * wtf/SegmentedVector.h: Updated namespace comment to reflect
        new namespace after r44897.

2009-06-20  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Bug 24986: ARM JIT port
        <https://bugs.webkit.org/show_bug.cgi?id=24986>

        Reviewed by Oliver Hunt.

        An Iterator added for SegmentedVector. Currently
        only the pre ++ operator is supported.

        * wtf/SegmentedVector.h:
        (WTF::SegmentedVectorIterator::~SegmentedVectorIterator):
        (WTF::SegmentedVectorIterator::operator*):
        (WTF::SegmentedVectorIterator::operator->):
        (WTF::SegmentedVectorIterator::operator++):
        (WTF::SegmentedVectorIterator::operator==):
        (WTF::SegmentedVectorIterator::operator!=):
        (WTF::SegmentedVectorIterator::operator=):
        (WTF::SegmentedVectorIterator::SegmentedVectorIterator):
        (WTF::SegmentedVector::alloc):
        (WTF::SegmentedVector::begin):
        (WTF::SegmentedVector::end):

2009-06-20  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Bug 24986: ARM JIT port
        <https://bugs.webkit.org/show_bug.cgi?id=24986>

        Reviewed by Oliver Hunt.

        Move SegmentedVector to /wtf subdirectory
        and change "namespace JSC" to "namespace WTF"

        Additional build file updates by David Kilzer.

        * GNUmakefile.am: Updated path to SegmentedVector.h.
        * JavaScriptCore.order: Updated SegmentedVector namespace from
        JSC to WTF in mangled C++ method name.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Removed reference to bytecompiler\SegmentedVector.h.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added reference to
        wtf\SegmentedVector.h.
        * JavaScriptCore.xcodeproj/project.pbxproj: Moved
        SegmentedVector.h definition from bytecompiler subdirectory to
        wtf subdirectory.
        * bytecompiler/BytecodeGenerator.h: Updated #include path to
        SegmentedVector.h and prepended WTF:: namespace to its use.
        * parser/Lexer.h: Ditto.
        * wtf/SegmentedVector.h: Renamed from JavaScriptCore/bytecompiler/SegmentedVector.h.
        (WTF::SegmentedVector::SegmentedVector):
        (WTF::SegmentedVector::~SegmentedVector):
        (WTF::SegmentedVector::size):
        (WTF::SegmentedVector::at):
        (WTF::SegmentedVector::operator[]):
        (WTF::SegmentedVector::last):
        (WTF::SegmentedVector::append):
        (WTF::SegmentedVector::removeLast):
        (WTF::SegmentedVector::grow):
        (WTF::SegmentedVector::clear):
        (WTF::SegmentedVector::deleteAllSegments):
        (WTF::SegmentedVector::segmentExistsFor):
        (WTF::SegmentedVector::segmentFor):
        (WTF::SegmentedVector::subscriptFor):
        (WTF::SegmentedVector::ensureSegmentsFor):
        (WTF::SegmentedVector::ensureSegment):

2009-06-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix take 2 - rename FIELD_OFFSET to something that doesn't conflict with winnt.h).

        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::emitGetVariableObjectRegister):
        (JSC::JIT::emitPutVariableObjectRegister):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_rshift):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emitSlow_op_jnlesseq):
        (JSC::JIT::compileBinaryArithOp):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCall):
        * jit/JITInlineMethods.h:
        (JSC::JIT::restoreArgumentReference):
        (JSC::JIT::checkStructure):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_construct_verify):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_to_jsnumber):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_convert_this):
        (JSC::JIT::emit_op_profile_will_call):
        (JSC::JIT::emit_op_profile_did_call):
        (JSC::JIT::emitSlow_op_get_by_val):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::compilePutDirectOffset):
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):

2009-06-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Windows build fix).

        * jit/JIT.h:
        * jit/JITInlineMethods.h:

2009-06-19  Gabor Loki  <loki@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Reorganize ARM architecture specific macros.
        Use PLATFORM_ARM_ARCH(7) instead of PLATFORM(ARM_V7).

        Bug 24986: ARM JIT port
        <https://bugs.webkit.org/show_bug.cgi?id=24986>

        * assembler/ARMv7Assembler.h:
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Imm32::Imm32):
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::restoreArgumentReferenceForTrampoline):
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:
        * wtf/Platform.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateEnter):
        (JSC::Yarr::RegexGenerator::generateReturn):

2009-06-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Fix armv7 JIT build issues.

        Unfortunate the arm compiler does not like the use of offsetof on JITStackFrame (since it now contains non POD types),
        and the FIELD_OFFSET macro does not appear constantish enough for it to be happy with its use in COMPILE_ASSERT macros.

        * Replace offsetofs with FIELD_OFFSETs (safe on C++ objects).
        * Move COMPILE_ASSERTs defending layout of JITStackFrame structure on armv7 into JITThunks constructor.

        * jit/JIT.cpp:
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::restoreArgumentReference):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_catch):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):

2009-06-19  Adam Treat  <adam.treat@torchmobile.com>

        Blind attempt at build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-06-19  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Oliver Hunt.

        Inherits CallIdentifier struct from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/profiler/CallIdentifier.h:86.

        * wtf/HashCountedSet.h:

2009-06-19  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=26540
        Modify the test shell to add a new function 'checkSyntax' that will
        only parse the source instead of executing it. In this way we can test
        pure parsing performance against some of the larger scripts in the wild.

        * jsc.cpp:
        (GlobalObject::GlobalObject):
        (functionCheckSyntax):

2009-06-19  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.
        
        Inherits HashCountedSet class from FastAllocBase because it has been
        instantiated by 'new' in JavaScriptCore/runtime/Collector.cpp:1095.

        * wtf/HashCountedSet.h:

2009-06-19  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=26558
        Declare these symbols extern for WINCE as they are provided by libce.

        * runtime/DateConstructor.cpp:
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):

2009-06-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/6988973> ScopeChain leak in interpreter builds

        Move the Scopechain destruction code in JSFunction outside of the ENABLE(JIT)
        path.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::~JSFunction):
        * wtf/Platform.h:

2009-06-19  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=26543
        Windows CE uses 'GetLastError' instead of 'errno.'

        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::grow):

2009-06-19  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (Windows build fix).

        Add export for Windows corresponding to OSX export done in r44844.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:

2009-06-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin "Viceroy of Venezuela" Barraclough.

        Bug 26532: Native functions do not correctly unlink from optimised callsites when they're collected
        <https://bugs.webkit.org/show_bug.cgi?id=26532> <rdar://problem/6625385>

        We need to make sure that each native function instance correctly unlinks any references to it
        when it is collected.  Allowing this to happen required a few changes:
            * Every native function needs a codeblock to track the link information
            * To have this codeblock, every function now also needs its own functionbodynode
              so we no longer get to have a single shared instance.
            * Identifying a host function is now done by looking for CodeBlock::codeType() == NativeCode

        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
           Constructor for NativeCode CodeBlock
        (JSC::CodeBlock::derefStructures):
        (JSC::CodeBlock::refStructures):
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
        (JSC::CodeBlock::handlerForBytecodeOffset):
        (JSC::CodeBlock::lineNumberForBytecodeOffset):
        (JSC::CodeBlock::expressionRangeForBytecodeOffset):
        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
        (JSC::CodeBlock::functionRegisterForBytecodeOffset):
        (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
        (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
        (JSC::CodeBlock::setJITCode):
           Add assertions to ensure we don't try and use NativeCode CodeBlocks as
           a normal codeblock.

        * bytecode/CodeBlock.h:
        (JSC::):
        (JSC::CodeBlock::source):
        (JSC::CodeBlock::sourceOffset):
        (JSC::CodeBlock::evalCodeCache):
        (JSC::CodeBlock::createRareDataIfNecessary):
          More assertions.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::linkCall):
          Update logic to allow native function caching

        * jit/JITStubs.cpp:
        * parser/Nodes.cpp:
        (JSC::FunctionBodyNode::createNativeThunk):
        (JSC::FunctionBodyNode::isHostFunction):
        * parser/Nodes.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::~JSFunction):
        (JSC::JSFunction::mark):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h:

2009-06-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Windows build fix).

        * wtf/DateMath.cpp:
        (WTF::calculateUTCOffset):

2009-06-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Timezone calculation incorrect in Venezuela.

        https://bugs.webkit.org/show_bug.cgi?id=26531
        <rdar://problem/6646169> Time is incorrectly reported to JavaScript in both Safari 3 and Firefox 3

        The problem is that we're calculating the timezone relative to 01/01/2000,
        but the VET timezone changed from -4 hours to -4:30 hours on 12/09/2007.
        According to the spec, section 15.9.1.9 states "the time since the beginning
        of the year", presumably meaning the *current* year.  Change the calculation
        to be based on whatever the current year is, rather than a canned date.

        No performance impact.

        * wtf/DateMath.cpp:
        (WTF::calculateUTCOffset):

2009-06-18  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Mark Rowe (originally reviewed by Sam Weinig).

        (Reintroducing patch added in r44492, and reverted in r44796.)

        Change the implementation of op_throw so the stub function always modifies its
        return address - if it doesn't find a 'catch' it will switch to a trampoline
        to force a return from JIT execution.  This saves memory, by avoiding the need
        for a unique return for every op_throw.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_throw):
            JITStubs::cti_op_throw now always changes its return address,
            remove return code generated after the stub call (this is now
            handled by ctiOpThrowNotCaught).
        * jit/JITStubs.cpp:
        (JSC::):
            Add ctiOpThrowNotCaught definitions.
        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
            Change cti_op_throw to always change its return address.
        * jit/JITStubs.h:
            Add ctiOpThrowNotCaught declaration.

2009-06-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6940880> REGRESSION: Breakpoints don't break in 64-bit

        - Exposed functions now needed by WebCore.

        * JavaScriptCore.exp:

2009-06-17  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Bug 26429: Make JSON.stringify non-recursive so it can handle objects
        of arbitrary complexity
        https://bugs.webkit.org/show_bug.cgi?id=26429

        For marking I decided not to use gcProtect, because this is inside the engine
        so it's easy enough to just do marking. And that darned gcProtect does locking!
        Oliver tried to convince me to used MarkedArgumentBuffer, but the constructor
        for that class says "FIXME: Remove all clients of this API, then remove this API."

        * runtime/Collector.cpp:
        (JSC::Heap::collect): Add a call to JSONObject::markStringifiers.

        * runtime/CommonIdentifiers.cpp:
        (JSC::CommonIdentifiers::CommonIdentifiers): Added emptyIdentifier.
        * runtime/CommonIdentifiers.h: Ditto.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Initialize firstStringifierToMark to 0.
        * runtime/JSGlobalData.h: Added firstStringifierToMark.

        * runtime/JSONObject.cpp: Cut down the includes to the needed ones only.
        (JSC::unwrapNumberOrString): Added. Helper for unwrapping number and string
        objects to get their number and string values.
        (JSC::ReplacerPropertyName::ReplacerPropertyName): Added. The class is used
        to wrap an identifier or integer so we don't have to do any work unless we
        actually call a replacer.
        (JSC::ReplacerPropertyName::value): Added.
        (JSC::gap): Added. Helper function for the Stringifier constructor.
        (JSC::PropertyNameForFunctionCall::PropertyNameForFunctionCall): Added.
        The class is used to wrap an identifier or integer so we don't have to
        allocate a number or string until we actually call toJSON or a replacer.
        (JSC::PropertyNameForFunctionCall::asJSValue): Added.
        (JSC::Stringifier::Stringifier): Updated and moved out of the class
        definition. Added code to hook this into a singly linked list for marking.
        (JSC::Stringifier::~Stringifier): Remove from the singly linked list.
        (JSC::Stringifier::mark): Mark all the objects in the holder stacks.
        (JSC::Stringifier::stringify): Updated.
        (JSC::Stringifier::appendQuotedString): Tweaked and streamlined a bit.
        (JSC::Stringifier::toJSON): Renamed from toJSONValue.
        (JSC::Stringifier::appendStringifiedValue): Renamed from stringify.
        Added code to use the m_holderStack to do non-recursive stringify of
        objects and arrays. This code also uses the timeout checker since in
        pathological cases it could be slow even without calling into the
        JavaScript virtual machine.
        (JSC::Stringifier::willIndent): Added.
        (JSC::Stringifier::indent): Added.
        (JSC::Stringifier::unindent): Added.
        (JSC::Stringifier::startNewLine): Added.
        (JSC::Stringifier::Holder::Holder): Added.
        (JSC::Stringifier::Holder::appendNextProperty): Added. This is the
        function that handles the format of arrays and objects.
        (JSC::JSONObject::getOwnPropertySlot): Moved this down to the bottom
        of the file so the JSONObject class is not interleaved with the
        Stringifier class.
        (JSC::JSONObject::markStringifiers): Added. Calls mark.
        (JSC::JSONProtoFuncStringify): Streamlined the code here. The code
        to compute the gap string is now a separate function.

        * runtime/JSONObject.h: Made everything private. Added markStringifiers.

2009-06-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        <rdar://problem/6974140> REGRESSION(r43849): Crash in cti_op_call_NotJSFunction when getting directions on maps.google.com

        Roll out r43849 as it appears that we cannot rely on the address of
        an objects property storage being constant even if the structure is
        unchanged.

        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):

2009-06-17  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Mark Rowe.

        Fully revert r44492 & r44748 while we fix a bug they cause on internal builds <rdar://problem/6955963>.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_throw):
        * jit/JITStubs.cpp:
        (JSC::):
        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:

2009-06-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/6947426> sunspider math-cordic.js exhibits different intermediate results running 32-bit vs. 64-bit

        On 64-bit, NaN-encoded values must be detagged before they can be used in rshift.

        No performance impact.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_rshift):

2009-06-17  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=23155
        Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks.

        * jsc.cpp:
        (main):

2009-06-17  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=23155
        Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks.

        * config.h:
        * jsc.cpp:
        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/CurrentTime.cpp:
        (WTF::lowResUTCTime):
        * wtf/DateMath.cpp:
        (WTF::getLocalTime):
        * wtf/MathExtras.h:
        * wtf/Platform.h:
        * wtf/StringExtras.h:
        * wtf/Threading.h:
        * wtf/win/MainThreadWin.cpp:

2009-06-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6974175> ASSERT in JITStubs.cpp at appsaccess.apple.com

        Remove PropertySlot::putValue - PropertySlots should only be used for getting,
        not putting.  Rename JSGlobalObject::getOwnPropertySlot to hasOwnPropertyForWrite,
        which is what it really was being used to ask, and remove some other getOwnPropertySlot
        & getOwnPropertySlotForWrite methods, which were unused and likely to lead to confusion.

        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::hasOwnPropertyForWrite):
        * runtime/JSObject.h:
        * runtime/JSStaticScopeObject.cpp:
        * runtime/JSStaticScopeObject.h:
        * runtime/PropertySlot.h:

2009-06-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver hunt.

        Temporarily partially disable r44492, since this is causing some problems on internal builds.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_throw):
        * jit/JITStubs.cpp:
        (JSC::JITStubs::DEFINE_STUB_FUNCTION):

2009-06-16  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * jit/JIT.cpp:
        (JSC::JIT::JIT):

2009-06-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Initialize m_bytecodeIndex to -1 in JIT, and correctly initialize
        it for each type of stub using the return address to find the correct
        offset.

        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        * jit/JIT.h:
        (JSC::JIT::compileGetByIdProto):
        (JSC::JIT::compileGetByIdSelfList):
        (JSC::JIT::compileGetByIdProtoList):
        (JSC::JIT::compileGetByIdChainList):
        (JSC::JIT::compileGetByIdChain):
        (JSC::JIT::compilePutByIdTransition):
        (JSC::JIT::compileCTIMachineTrampolines):
        (JSC::JIT::compilePatchGetArrayLength):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::call):

== Rolled over to ChangeLog-2009-06-16 ==
