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

        Reviewed by Geoff Garen.

        Bug 54524 - Allow JSObject to fully utilize cell's capacity for inline storage.

        Currently JSObject is both directly instantiated for regular JS objects, and
        derived to implement subtypes. A consequence of this is that we need to ensure
        that sufficient space from the cell is left unused and available for any data
        members that will be introduced by subclasses of JSObject. By restructuring
        the internal storage array out of JSObject we can increase the size in the
        internal storage for regular objects.

        Add classes JSFinalObject and JSNonFinalObject. JSNonFinalObject retains as
        much additional capacity as is currently available to allow for data members
        in subclasses. JSFinalObject utilizes all available space for internal storage,
        and only allows construction through JSFinalObject::create().

        The additional storage made available in the JSObject means that we need no
        longer rely on a union of the internal storage with a pointer to storage that
        is only valid for external storage. This means we can go back to always having
        a valid pointer to property storage, regardless of whether this is internal or
        external. This simplifies some cases of access to the array from C code, and
        significantly simplifies JIT access, since repatching no longer needs to be
        able to change between a load of the storage pointer / a LEA of the internal
        storage.

        * API/JSObjectRef.cpp:
        (JSObjectMake):
        * assembler/ARMAssembler.h:
        * assembler/ARMv7Assembler.h:
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::repatchPointer):
        * assembler/MIPSAssembler.h:
        * assembler/MacroAssemblerARM.h:
        * assembler/MacroAssemblerARMv7.h:
        * assembler/MacroAssemblerMIPS.h:
        * assembler/MacroAssemblerX86.h:
        * assembler/MacroAssemblerX86_64.h:
        * assembler/RepatchBuffer.h:
        * assembler/X86Assembler.h:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        * debugger/DebuggerActivation.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_resolve_global):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_resolve_global):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::emit_op_get_by_pname):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::compilePutDirectOffset):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::compilePutDirectOffset):
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::emit_op_get_by_pname):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Arguments.h:
        (JSC::Arguments::Arguments):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorInstance.h:
        * runtime/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::InterruptedExecutionError):
        (JSC::TerminatedExecutionError::TerminatedExecutionError):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalObject.h:
        (JSC::constructEmptyObject):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::JSNotAnObject):
        * runtime/JSObject.cpp:
        (JSC::JSObject::createInheritorID):
        (JSC::JSObject::allocatePropertyStorage):
        * runtime/JSObject.h:
        (JSC::JSObject::propertyStorage):
        (JSC::JSNonFinalObject::JSNonFinalObject):
        (JSC::JSNonFinalObject::createStructure):
        (JSC::JSFinalObject::create):
        (JSC::JSFinalObject::createStructure):
        (JSC::JSFinalObject::JSFinalObject):
        (JSC::JSObject::offsetOfInlineStorage):
        (JSC::constructEmptyObject):
        (JSC::createEmptyObjectStructure):
        (JSC::JSObject::JSObject):
        (JSC::JSObject::~JSObject):
        (JSC::Structure::isUsingInlineStorage):
        * runtime/JSObjectWithGlobalObject.cpp:
        (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
        * runtime/JSObjectWithGlobalObject.h:
        (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::TypeInfo):
        (JSC::TypeInfo::isVanilla):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::JSVariableObject):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::JSWrapperObject):
        * runtime/ObjectConstructor.cpp:
        (JSC::constructObject):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        * runtime/ObjectPrototype.h:
        * runtime/StrictEvalActivation.cpp:
        (JSC::StrictEvalActivation::StrictEvalActivation):
        * runtime/StrictEvalActivation.h:
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::growPropertyStorageCapacity):

2011-02-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Incorrect handling of global writes in dynamic contexts
        https://bugs.webkit.org/show_bug.cgi?id=49383

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
          Can't use the existing callframe to return an uncaught exception
          as by definition that callframe has already been torn down.
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::ASTBuilder):
        (JSC::ASTBuilder::varDeclarations):
        (JSC::ASTBuilder::funcDeclarations):
        (JSC::ASTBuilder::features):
        (JSC::ASTBuilder::numConstants):
        (JSC::ASTBuilder::createFuncDeclStatement):
        (JSC::ASTBuilder::addVar):
        (JSC::ASTBuilder::incConstants):
        (JSC::ASTBuilder::usesThis):
        (JSC::ASTBuilder::usesCatch):
        (JSC::ASTBuilder::usesClosures):
        (JSC::ASTBuilder::usesArguments):
        (JSC::ASTBuilder::usesAssignment):
        (JSC::ASTBuilder::usesWith):
        (JSC::ASTBuilder::usesEval):
          Don't need a vector of scopes in the ASTBuilder
        * runtime/Operations.h:
        (JSC::resolveBase):
          In strict mode the optimisation that we use to skip a lookup
          on the global object is incorrect and lead to us always
          disallowing global writes when we needed to do a dynamic slot
          lookup.  Now the strict mode path actually checks for the
          property.

2011-02-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Windows build fix for
        https://bugs.webkit.org/show_bug.cgi?id=54415

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Remove deleted files.

2011-02-15  Oliver Hunt  <oliver@apple.com>

        Fix EFL build for
        https://bugs.webkit.org/show_bug.cgi?id=54415

        * CMakeLists.txt:

2011-02-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough and Geoff Garen.

        Refactor handles and weak pointers to become nicer and more automatic
        https://bugs.webkit.org/show_bug.cgi?id=54415

        Move to a true handle based mechanism for GC value protection.  This
        also allows us to switch to a more sensible behaviour for weak pointers
        in which weak pointers are automatically updated.

        This allows us to remove the old (and convoluted) that required all
        objects that may be held by a weak reference to be aware of the reference
        and manually clear them in their destructors.

        This also adds a few new data types to JSC that we use to efficiently
        allocate and return the underlying handle storage.

        This patch is largely renaming and removing now unnecessary destructors
        from objects.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::create):
        (OpaqueJSClassContextData::OpaqueJSClassContextData):
        (OpaqueJSClass::contextData):
        (OpaqueJSClass::prototype):
        * API/JSClassRef.h:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * collector/handles/Global.h: Added.
            New Global handle type used to keep gc objects live, even if they're not
            marked.
        (JSC::Global::Global):
        (JSC::Global::~Global):
        (JSC::Global::set):
            We can only assign directly to a global from another global.
            In all other cases we need the JSGlobalData to be provided
            explicitly so we use a set function.
        (JSC::Global::operator=):
        (JSC::Global::clear):
        (JSC::Global::isHashTableDeletedValue):
        (JSC::Global::internalSet):
        * collector/handles/Handle.h: Added.
            Root "Handle" type used for immutable handles and to provide the basic
            APIs needed for pointer-like behaviour.
        (JSC::HandleBase::operator!):
        (JSC::HandleBase::operator UnspecifiedBoolType*):
        (JSC::HandleBase::isEmpty):
        (JSC::HandleBase::HandleBase):
        (JSC::HandleBase::slot):
        (JSC::HandleBase::invalidate):
        (JSC::HandleBase::setSlot):
        (JSC::HandleTypes::getFromSlot):
        (JSC::HandleTypes::toJSValue):
        (JSC::HandleTypes::validateUpcast):
        (JSC::HandleConverter::operator->):
        (JSC::HandleConverter::operator*):
        (JSC::Handle::Handle):
        (JSC::Handle::get):
        (JSC::Handle::wrapSlot):
        (JSC::operator==):
        (JSC::operator!=):
        * collector/handles/HandleHeap.cpp: Added.
            New heap for global handles.
        (JSC::HandleHeap::HandleHeap):
        (JSC::HandleHeap::grow):
        (JSC::HandleHeap::markStrongHandles):
        (JSC::HandleHeap::updateAfterMark):
        (JSC::HandleHeap::clearWeakPointers):
        (JSC::HandleHeap::writeBarrier):
        * collector/handles/HandleHeap.h: Added.
        (JSC::HandleHeap::heapFor):
        (JSC::HandleHeap::toHandle):
        (JSC::HandleHeap::toNode):
        (JSC::HandleHeap::allocate):
        (JSC::HandleHeap::deallocate):
        (JSC::HandleHeap::makeWeak):
            Convert a hard handle into weak handle that does not
            protect the object it points to.
        (JSC::HandleHeap::makeSelfDestroying):
            Converts a handle to a weak handle that will be returned
            to the free list when the referenced object dies.
        (JSC::HandleHeap::Node::Node):
        (JSC::HandleHeap::Node::slot):
        (JSC::HandleHeap::Node::handleHeap):
        (JSC::HandleHeap::Node::setFinalizer):
        (JSC::HandleHeap::Node::makeWeak):
        (JSC::HandleHeap::Node::isWeak):
        (JSC::HandleHeap::Node::makeSelfDestroying):
        (JSC::HandleHeap::Node::isSelfDestroying):
        (JSC::HandleHeap::Node::finalizer):
        (JSC::HandleHeap::Node::setPrev):
        (JSC::HandleHeap::Node::prev):
        (JSC::HandleHeap::Node::setNext):
        (JSC::HandleHeap::Node::next):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        * interpreter/Interpreter.h:
        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::globalObjectCollected):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        * runtime/GCHandle.cpp: Removed.
        * runtime/GCHandle.h: Removed.
        * runtime/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::markRoots):
        * runtime/Heap.h:
        (JSC::Heap::allocateGlobalHandle):
        (JSC::Heap::reportExtraMemoryCost):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::allocateGlobalHandle):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::~JSGlobalObject):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):
        (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::createStructure):
        (JSC::Structure::setEnumerationCache):
        (JSC::Structure::clearEnumerationCache):
        * runtime/Protect.h:
        * runtime/Structure.cpp:
        (JSC::Structure::~Structure):
        * runtime/Structure.h:
        * runtime/WeakGCPtr.h:
        (JSC::WeakGCPtrBase::get):
        (JSC::WeakGCPtrBase::clear):
        (JSC::WeakGCPtrBase::operator!):
        (JSC::WeakGCPtrBase::operator UnspecifiedBoolType*):
        (JSC::WeakGCPtrBase::~WeakGCPtrBase):
        (JSC::WeakGCPtrBase::WeakGCPtrBase):
        (JSC::WeakGCPtrBase::internalSet):
        (JSC::LazyWeakGCPtr::LazyWeakGCPtr):
        (JSC::LazyWeakGCPtr::set):
        (JSC::WeakGCPtr::WeakGCPtr):
        (JSC::WeakGCPtr::operator=):
        * runtime/WriteBarrier.h:
        * wtf/BlockStack.h: Added.
        (WTF::::BlockStack):
        (WTF::::~BlockStack):
        (WTF::::blocks):
        (WTF::::grow):
        (WTF::::shrink):
        * wtf/SentinelLinkedList.h: Added.
        (WTF::::SentinelLinkedList):
        (WTF::::begin):
        (WTF::::end):
        (WTF::::push):
        (WTF::::remove):
        * wtf/SinglyLinkedList.h: Added.
        (WTF::::SinglyLinkedList):
        (WTF::::isEmpty):
        (WTF::::push):
        (WTF::::pop):

2011-02-15  Pratik Solanki  <psolanki@apple.com>

        Move WTF_USE_CFNETWORK to Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=54168

        Reviewed by Darin Adler.

        * wtf/Platform.h: Define WTF_USE_CFNETWORK for Windows builds.

2011-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Moved MarkedBlock data members to the head of the block
        https://bugs.webkit.org/show_bug.cgi?id=54482
        
        This allows for a variable-sized tail, to accommodate oversized blocks.

        SunSpider reports no change.
        
        * runtime/JSCell.h:
        (JSC::JSCell::MarkedBlock::allocate):
        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::destroy):
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::sweep):
        * runtime/MarkedBlock.h: Added missing element to the CELLS_PER_BLOCK
        calculation. This kind of error is why we want to migrate to the system
        described below.

        (JSC::roundUpToMultipleOf):
        (JSC::MarkedBlock::firstCell):
        (JSC::MarkedBlock::cells):
        (JSC::MarkedBlock::cellNumber): Use subtraction instead of masking to
        calculate cell number. The mask is no longer correct because the first
        cell is not at the head of the block.

        (JSC::MarkedBlock::forEach): Replaced m_cells data member with a cells()
        accessor. We want to use sizeof(MarkedBlock) to calculate the size of the
        block header, so we can't have an explicit data member to represent the block tail.
        
        Also replaced iteration from zero with iteration from startCell(), since
        the first N cells are now occupied by the header.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::reset): Replaced iteration from zero as above.

2011-02-15  Chris Rogers  <crogers@google.com>

        Reviewed by Alexey Proskuryakov.

        Fix Mutex::tryLock() on Windows to work properly with PlatformCondition::timedWait()
        https://bugs.webkit.org/show_bug.cgi?id=54408

        * wtf/ThreadingWin.cpp:
        (WTF::PlatformCondition::timedWait):

2011-02-15  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Remove some dead code in ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=54461

        * assembler/ARMv7Assembler.h: remove dead code.

2011-02-14  Geoffrey Garen  <ggaren@apple.com>

        Rubber-stamped by Gavin Barraclough.

        Some MarkedBlock refactoring.
        
        Made cells private.
        
        Renamed cells => m_cells
                marked => m_marks.

        * runtime/JSCell.h:
        (JSC::JSCell::MarkedBlock::allocate):
        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::destroy):
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::sweep):
        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::isEmpty):
        (JSC::MarkedBlock::clearMarks):
        (JSC::MarkedBlock::markCount):
        (JSC::MarkedBlock::isMarked):
        (JSC::MarkedBlock::testAndSetMarked):
        (JSC::MarkedBlock::setMarked):
        (JSC::MarkedBlock::forEach):

2011-02-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add basic parser for Content Security Policy
        https://bugs.webkit.org/show_bug.cgi?id=54379

        Add a constructor for copying a Vector into a String.  I suspect there
        are a number of call sites that are doing this manually that would
        benefit from being moved to this API.

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

2011-02-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: use call frame column to determine execution line in source frame.
        https://bugs.webkit.org/show_bug.cgi?id=54001

        * wtf/text/TextPosition.h:
        (WTF::ZeroBasedNumber::convertAsOneBasedInt):

2011-02-13  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Adam Barth.

        Add a compile-time option to completely disable WebArchive support.
        https://bugs.webkit.org/show_bug.cgi?id=52712

        Add an ENABLE(WEB_ARCHIVE) compile-time setting and use it for all WebArchive code.
        Ports Affected:
            WebArchive support is currently enabled for all ports that define PLATFORM(CF) apart from Qt.
            This patch preserves this behavior except that it also disables support in the Chromium port.

        * wtf/Platform.h: Add ENABLE_WEB_ARCHIVE definition and turn it off explicitly for Qt & Chromium ports.

2011-02-13  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Dan Bernstein.

        Bug 53760 - JSC fails to build with TOT Clang
        https://bugs.webkit.org/show_bug.cgi?id=53760

        Fix -Woverloaded-virtual warnings. This is also a 6% speedup on the v8 raytrace
        benchmark; it is nothing-to-noise on everything else.

        * API/JSCallbackObject.h: Remove pointlessly overloaded method.
        * API/JSCallbackObjectFunctions.h: Ditto.
        * runtime/Arguments.cpp: 
        (JSC::Arguments::put): Change signature to match the base class. This implementation
        was no longer being called by anyone. This wasn't noticed because it is merely an
        optimization of the base class' implementation.
        * runtime/Arguments.h: Ditto.

2011-02-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Mark Rowe.

        Use /dev/urandom as the OSRandomSource on OS(DARWIN)
        https://bugs.webkit.org/show_bug.cgi?id=54279

        I'm not sure it makes much of a difference whether we use arc4random or
        /dev/urandom on Mac.  However, there's some aesthetic benefit to using
        the same underlying API on as many platforms as reasonable.

        * config.h:
        * wtf/OSRandomSource.cpp:
        (WTF::cryptographicallyRandomValuesFromOS):

2011-02-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Kenneth Russell.

        Enable ArrayBuffers by default
        https://bugs.webkit.org/show_bug.cgi?id=54310

        Export the required functions.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-02-11  Daniel Bates  <dbates@rim.com>

        Reviewed by Geoffrey Garen.

        Remove explicit disable ENABLE_ASSEMBLER_WX_EXCLUSIVE on non-iOS ports
        https://bugs.webkit.org/show_bug.cgi?id=54107
        
        It is unnecessary to explicitly disable ENABLE_ASSEMBLER_WX_EXCLUSIVE
        by the definition of ENABLE().

        * wtf/Platform.h:

2011-02-11  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Randomly touch some build files in the hopes of fixing the Qt build.

        * JavaScriptCore.gypi:
        * JavaScriptCore.pri:
        * JavaScriptCore.pro:

2011-02-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Garbage collection timer cycles forever, even when nothing is happening
        https://bugs.webkit.org/show_bug.cgi?id=54320
        
        (Rolling back in r78386 with the build fixed.)

        * runtime/GCActivityCallbackCF.cpp:
        (JSC::DefaultGCActivityCallbackPlatformData::trigger): Be sure to make
        our timer inert after forcing a GC, to avoid GC'ing repeatedly.

2011-02-11  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.
        
        Used svn merge -r78386:78385 to roll out r78386 because it broke the build.

        * runtime/GCActivityCallbackCF.cpp:
        (JSC::DefaultGCActivityCallbackPlatformData::trigger):

2011-02-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Garbage collection timer cycles forever, even when nothing is happening
        https://bugs.webkit.org/show_bug.cgi?id=54320

        * runtime/GCActivityCallbackCF.cpp:
        (JSC::DefaultGCActivityCallbackPlatformData::trigger): Be sure to make
        our timer inert after forcing a GC, to avoid GC'ing repeatedly.

2011-02-11  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Windows build: added an exported symbol.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-02-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A little more encapsulation for the heap: Removed CollectorHeapIterator
        https://bugs.webkit.org/show_bug.cgi?id=54298
        
        CollectorHeapIterator is a God object that knows the internals of each
        of the pieces of the heap. This undermines the encapsulation I'm trying
        to achieve by splitting concepts into different classes.
        
        As an alternative, I've given each class a forEach iteration function,
        which takes a functor as an argument. Now, each class just needs to
        know how to iterate the things it knows about.

        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Removed CollectorHeapIterator.

        * debugger/Debugger.cpp:
        (JSC::Recompiler::Recompiler):
        (JSC::Recompiler::~Recompiler):
        (JSC::Recompiler::operator()):
        (JSC::Debugger::recompileAllJSFunctions): Updated to use forEach interface
        instead of an iterator.

        * runtime/CollectorHeapIterator.h: Removed.

        * runtime/Heap.cpp:
        (JSC::TypeCounter::TypeCounter):
        (JSC::TypeCounter::typeName):
        (JSC::TypeCounter::operator()):
        (JSC::TypeCounter::take):
        (JSC::Heap::protectedObjectTypeCounts):
        (JSC::Heap::objectTypeCounts): Added forEach and removed iterator.

        * runtime/Heap.h:
        (JSC::Heap::forEach):
        * runtime/JSGlobalData.cpp:
        (JSC::Recompiler::operator()):
        (JSC::JSGlobalData::recompileAllJSFunctions):

        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::forEach): Added forEach. Removed friend declaration
        for CollectorHeapIterator. Now, we can make all our data private and
        change it without breaking any other classes.

        * runtime/MarkedSpace.cpp:
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::forEach): Added forEach and removed iterator.

2011-02-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Andreas Kling.

        CryptographicRandomNumber has its threading ifdefs backwards
        https://bugs.webkit.org/show_bug.cgi?id=54280

        Turns out we want the mutex when thread is enabled.  :)

        * wtf/CryptographicallyRandomNumber.cpp:
        (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomNumber):
        (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomValues):

2011-02-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebKit should have a cryptographic RNG
        https://bugs.webkit.org/show_bug.cgi?id=22049

        Teach JavaScriptCore how to export this function.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-02-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        A little more encapsulation for MarkedBlock: Made all constants private
        so clients don't know whether allocations are fixed-sized or not
        https://bugs.webkit.org/show_bug.cgi?id=54270
        
        SunSpider reports no change.

        * runtime/CollectorHeapIterator.h:
        (JSC::CollectorHeapIterator::advance): Updated for removal of HeapConstants.

        * runtime/Error.cpp: Switched to using ASSERT_CLASS_FITS_IN_CELL, like
        all other classes.

        * runtime/Heap.cpp:
        (JSC::Heap::allocate): Updated for removal of HeapConstants.
        (JSC::Heap::reset): Updated to use size(), instead of calculating size
        on our own.

        * runtime/Heap.h: Moved the ASSERT here to MarkedBlock, since it enforces
        on special knowledge of fixed-sizery, which only MarkedBlock is supposed
        to know about.

        * runtime/JSCell.h:
        (JSC::JSCell::MarkedBlock::allocate): Updated for removal of HeapConstants.
        Also changed to reset nextCell to 0 at the end of a block, since that
        seems more consistent.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs): Changed to use a fixed array of char.
        This hard-coded size is a little wonky, but the compiler will tell us
        if it's ever wrong, so I think it's OK.

        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::destroy):
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::sweep): Updated for removal of HeapConstants.

        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::isEmpty):
        (JSC::MarkedBlock::clearMarks):
        (JSC::MarkedBlock::size):
        (JSC::MarkedBlock::capacity): Made constants private to this class.
        Removed HeapConstants. Added size() and capacity() functions.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::objectCount):
        (JSC::MarkedSpace::size):
        (JSC::MarkedSpace::capacity):
        * runtime/MarkedSpace.h: Use MarkedBlock helper functions instead of
        direct knowledge of MarkedBlock internals.

2011-02-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        A little more encapsulation for MarkedBlock: Made mark bits private
        https://bugs.webkit.org/show_bug.cgi?id=54264
        
        SunSpider reports no change.

        * runtime/Heap.cpp:
        (JSC::Heap::markRoots):
        (JSC::Heap::reset): Renamed clearMarkBits => clearMarks, since clients
        don't need to know that marks are represented as bits. Renamed
        markedCells => markCount, since clients don't need to know that blocks
        are split into cells.

        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::isEmpty):
        (JSC::MarkedBlock::clearMarks):
        (JSC::MarkedBlock::markCount): New helper functions for encapsulating
        the information clients actually need.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::destroy):
        (JSC::MarkedSpace::shrink):
        (JSC::MarkedSpace::clearMarks):
        (JSC::MarkedSpace::markCount):
        (JSC::MarkedSpace::objectCount):
        * runtime/MarkedSpace.h: Use new helper functions instead of accessing
        MarkedBlock data directly.

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

        Reviewed by Geoffrey Garen.

        Cached JavaScript Parser Data Being Left in Memory Cache
        https://bugs.webkit.org/show_bug.cgi?id=54245

        Added clear method which removes SourceProviderCache items.
        Cleaned up extraneous whitespace.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * parser/SourceProviderCache.cpp:
        (JSC::SourceProviderCache::~SourceProviderCache):
        (JSC::SourceProviderCache::clear):
        (JSC::SourceProviderCache::byteSize):
        (JSC::SourceProviderCache::add):
        * parser/SourceProviderCache.h:

2011-02-10  Joseph Pecoraro  <joepeck@webkit.org>

        Follow-up fix to r78291. I should pass (int) 0, not '0' to memset. 

        * runtime/GCActivityCallbackCF.cpp:
        (JSC::DefaultGCActivityCallback::commonConstructor): fix mistaken post-review change.

2011-02-10  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Geoffrey Garen.

        Make DefaultGCActivityCallback for PLATFORM(CF) Easier to Subclass
        https://bugs.webkit.org/show_bug.cgi?id=54257

        A subclass may want to specify the CFRunLoop that the Garbage Collection
        will happen on. It was difficult to manipulate this in a subclass because
        the current DefaultGCActivityCallback class does this in its constructor.
        This patch generalizes things a bit more so that a specific run loop can
        be passed in to the constructor. This makes it so all run loop management
        can stay in DefaultGCActivityCallback and a subclass can specify any runloop.

        * runtime/GCActivityCallback.h: expose a PLATFORM(CF) constructor that can
        specify the runloop GC can be scheduled on.
        * runtime/GCActivityCallbackCF.cpp:
        (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback): two constructors,
        one that specifies the run loop and passes that on to commonConstructor and
        the old constructor defaults to the current run loop.
        (JSC::DefaultGCActivityCallback::commonConstructor): do normal construction,
        adding the timer to the given runloop.

2011-02-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A little more encapsulation for MarkedBlock: Moved allocate() and sweep() into MarkedBlock
        https://bugs.webkit.org/show_bug.cgi?id=54253
        
        SunSpider reports no change.

        * runtime/CollectorHeapIterator.h: Removed DeadObjectIterator, since it
        is now unused.

        * runtime/Heap.cpp:
        (JSC::Heap::reset): Moved the call to shrink() here, since it seems a
        little more clear for MarkedSpace's client to tell it explicitly when to
        shrink.

        * runtime/JSCell.h:
        (JSC::JSCell::MarkedBlock::allocate): Split out from MarkedSpace::allocate.

        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::sweep): Split out from MarkedSpace::sweep, and
        converted to more directly iterate a MarkedBlock based on knowing its
        internal structure.

        * runtime/MarkedBlock.h:
        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::sweep):
        * runtime/MarkedSpace.h: Split out the code mentioned above.

2011-02-10  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Fix compilation error on OpenBSD
        https://bugs.webkit.org/show_bug.cgi?id=53766

        Add a HAVE_STRNSTR in Platform.h and define it only on Darwin and FreeBSD.

        * wtf/Platform.h:
        * wtf/StringExtras.h: Use HAVE(STRNSTR) now.

2011-02-10  Adam Roben  <aroben@apple.com>

        Print locations of assertions and logs in a way that Visual Studio understands

        With this change, double-clicking one of these locations in Visual Studio's Output Window
        will focus that line of code in the editor.

        Fixes <http://webkit.org/b/54208> Double-clicking locations of assertions/logs in Visual
        Studio's Output Window does nothing

        Reviewed by Alexey Proskuryakov.

        * wtf/Assertions.cpp:
        (printCallSite): Use OS(WINDOWS) instead of the meaningless OS(WIN). When we aren't using
        the debug CRT (and thus can't call _CrtDbgReport), print the file and line number using the
        same format that cl.exe uses when it prints compiler errors.

2011-02-10  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::create):

2011-02-10  Peter Varga  <pvarga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove PCRE source from trunk
        https://bugs.webkit.org/show_bug.cgi?id=54188

        * Android.mk:
        * Android.v8.wtf.mk:
        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pro:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.order:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * pcre/AUTHORS: Removed.
        * pcre/COPYING: Removed.
        * pcre/dftables: Removed.
        * pcre/pcre.h: Removed.
        * pcre/pcre.pri: Removed.
        * pcre/pcre_compile.cpp: Removed.
        * pcre/pcre_exec.cpp: Removed.
        * pcre/pcre_internal.h: Removed.
        * pcre/pcre_tables.cpp: Removed.
        * pcre/pcre_ucp_searchfuncs.cpp: Removed.
        * pcre/pcre_xclass.cpp: Removed.
        * pcre/ucpinternal.h: Removed.
        * pcre/ucptable.cpp: Removed.
        * wscript:

2011-02-10  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Add randomValuesFromOS for OS(WINDOWS)
        https://bugs.webkit.org/show_bug.cgi?id=54155

        Use CryptGenRandom for generating cryptographically secure random numbers.
        This will work on WinCE and MinGW too.

        * config.h:
        * wtf/OSRandomSource.cpp:
        (WTF::randomValuesFromOS):

2011-02-10  Jarred Nicholls  <jarred@sencha.com>

        Reviewed by Adam Barth.

        REGRESSION(r78149): Return value of read() shouldn't be ignored.
        https://bugs.webkit.org/show_bug.cgi?id=54167
        
        stdio read should have its return value handled. Build error in gcc 4.4.5.

        * wtf/OSRandomSource.cpp:
        (WTF::randomValuesFromOS):

2011-02-10  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename randomValuesFromOS to cryptographicallyRandomValuesFromOS
        https://bugs.webkit.org/show_bug.cgi?id=54156

        randomValuesFromOS generates random numbers of cryptographic quality.
        Make this clear by adding "cryptographically" to the function name.

        * wtf/CryptographicallyRandomNumber.cpp:
        (WTF::ARC4Stream::ARC4RandomNumberGenerator::stir):
        * wtf/OSRandomSource.cpp:
        (WTF::cryptographicallyRandomValuesFromOS):
        * wtf/OSRandomSource.h:

2011-02-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8805364> Malloc zone enumeration code should be safe in the face of errors from the memory reader.

        * wtf/FastMalloc.cpp:
        (WTF::PageHeapAllocator::recordAdministrativeRegions): Use the new helper function to walk the linked list safely.
        (WTF::TCMalloc_ThreadCache_FreeList::enumerateFreeObjects): Ditto.
        (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Ditto.
        (WTF::TCMallocStats::PageMapFreeObjectFinder::visit): Bail out if the span could not be read.
        (WTF::TCMallocStats::PageMapMemoryUsageRecorder::visit): Ditto.
        * wtf/MallocZoneSupport.h:
        (WTF::RemoteMemoryReader::operator()): Remove an assert that is not valid.
        (WTF::RemoteMemoryReader::nextEntryInLinkedList): Add a helper function for retrieving the next entry in
        a linked list. It maps a failed read of the remote memory in to a null pointer, which all callers can
        handle gracefully.

2011-02-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54164 - Optimize global_var accesses on JSVALUE64

        Directly embed the pointer to d->registers, optimize out the load
        from the variable object, as we do already in JSVALUE32_64.

        This is a ~1.5% win on sunspidey.

        * jit/JIT.cpp:
        * jit/JIT.h:
        * 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):

2011-02-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A little more encapsulation for MarkedBlock: Made MarkedBlock responsible
        for its own initialization and destruction
        https://bugs.webkit.org/show_bug.cgi?id=54137

        * runtime/CollectorHeapIterator.h: Removed ObjectIterator since it is
        now unused.

        * runtime/JSCell.h: Maded MarkedBlock a friend so it can construct and
        destruct JSCells.

        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::create):
        (JSC::MarkedBlock::destroy):
        (JSC::MarkedBlock::MarkedBlock): Migrated initialization and destruction
        code from MarkedSpace, updating it not to use ObjectIterator. We don't
        want to use an abstract iterator since iteration will be unique to each
        block in the future.

        * runtime/MarkedBlock.h: Made the consructor private and moved it into
        the .cpp file because it's big now.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::freeBlock): Migrated code.

        * runtime/MarkedSpace.h:
        (JSC::CollectorHeap::collectorBlock): Keep a vector of MarkedBlock
        pointers instead of aligned allocations -- how MarkedBlocks are allocated
        is now an implementation detail of MarkedBlock.

2011-02-09  Adam Barth  <abarth@webkit.org>

        Another attempt to fix the Qt Windows build.

        * config.h:
        * wtf/OSRandomSource.cpp:
        (WTF::randomValuesFromOS):

2011-02-09  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Qt Windows build.

        * wtf/OSRandomSource.cpp:
        (WTF::randomValuesFromOS):

2011-02-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add WTF::cryptographicallyRandomNumber
        https://bugs.webkit.org/show_bug.cgi?id=54083

        Introduce a cryptographically strong random number generator to WTF.
        The random number generator is based on arc4random as found in:

        http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/crypt/arc4random.c?rev=1.22

        I've changed to source to WebKit style and abstracted the operating
        system interaction to OSRandomSource.  We'll use this functionality to
        expose a cryptographically strong random number generator to
        JavaScript.

        * Android.mk:
        * Android.v8.wtf.mk:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * config.h:
        * wtf/CMakeLists.txt:
        * wtf/CryptographicallyRandomNumber.cpp: Added.
        (WTF::initMutexIfNeeded):
        (WTF::init):
        (WTF::addRandomData):
        (WTF::stir):
        (WTF::stirIfNeeded):
        (WTF::getByte):
        (WTF::getWord):
        (WTF::cryptographicallyRandomNumber):
        (WTF::cryptographicallyRandomValues):
        * wtf/CryptographicallyRandomNumber.h: Added.
        * wtf/OSRandomSource.cpp: Added.
        (WTF::randomValuesFromOS):
        * wtf/OSRandomSource.h: Added.
        * wtf/wtf.pri:

2011-02-09  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the build.

        * wtf/Bitmap.h: Include string.h for memset. Not sure why this started
        failing now.

2011-02-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        A tiny bit of encapsulation for MarkedBlock: made its heap data member private
        https://bugs.webkit.org/show_bug.cgi?id=54129

        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::isCellAligned):
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::heap): Made the heap data member private, and provided
        a constructor and an accessor.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocateBlock):
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::heap): Use the constructor and accessor.

2011-02-09  Peter Varga  <pvarga@webkit.org>

        Reviewed by Gavin Barraclough.

        Replace PCRE with Yarr in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=53496

        * JavaScriptCore.exp:
        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * create_regex_tables:
        * runtime/RegExp.cpp:
        * wtf/Platform.h:
        * yarr/Yarr.h:
        * yarr/YarrJIT.cpp:
        * yarr/YarrJIT.h:
        * yarr/YarrParser.h:
        * yarr/YarrPattern.h:
        * yarr/YarrSyntaxChecker.h:
        * yarr/yarr.pri: Added.

2011-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed some dead code from Heap
        https://bugs.webkit.org/show_bug.cgi?id=54064

        * runtime/MarkedSpace.cpp: Removed some now-unused constants and
        declarations.

        (JSC::MarkedSpace::allocate): Removed some ASSERTs that are also ASSERTed
        by our caller. Removed redundant typedefs.

2011-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Use a vector to track blocks in the Heap, instead of hand-rolled vector-like code
        https://bugs.webkit.org/show_bug.cgi?id=54062
        
        SunSpider reports no change.

        * runtime/CollectorHeapIterator.h:
        (JSC::CollectorHeapIterator::isValid):
        (JSC::CollectorHeapIterator::isLive): Updated for new mark invariant: To
        know if an object is live, you just need to test its mark bit.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace): Moved waterMark and highWaterMark from
        CollectorHeap into MarkedSpace, since they're global state. Removed call
        to memset since CollectorHeap is a true class with its own constructor now.

        (JSC::MarkedSpace::destroy): Change uses of m_heap.usedBlocks to
        m_heap.blocks.size(), and m_heap.numBlocks to m_heap.blocks.capacity().

        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::freeBlock): No need to manage our vector manually anymore.

        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::shrink):
        (JSC::MarkedSpace::clearMarkBits):
        (JSC::MarkedSpace::markedCells):
        (JSC::MarkedSpace::sweep):
        (JSC::MarkedSpace::objectCount):
        (JSC::MarkedSpace::capacity):
        (JSC::MarkedSpace::reset):
        (JSC::MarkedSpace::primaryHeapEnd):
        * runtime/MarkedSpace.h:
        (JSC::CollectorHeap::CollectorHeap):
        (JSC::MarkedSpace::highWaterMark):
        (JSC::MarkedSpace::setHighWaterMark):
        (JSC::MarkedSpace::contains): Same as above.

2011-02-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Give each MarkedBlock enough mark bits to cover the whole block
        https://bugs.webkit.org/show_bug.cgi?id=54029
        
        SunSpider reports no change.

        This simplifies access to mark bits, since any cell-aligned pointer
        into a block now has a valid mark bit to test.
        
        * runtime/MarkedBlock.h: Changed CELLS_PER_BLOCK to account for the extra
        mark bits. This happens not to change its actual value.
        (JSC::MarkedBlock::cellNumber):
        (JSC::MarkedBlock::isMarked):
        (JSC::MarkedBlock::testAndSetMarked):
        (JSC::MarkedBlock::setMarked): Changed const JSCell* to const void* to
        remove a cast from our caller, and to more accurately reflect the fact
        that MarkedBlock is agnostic about the types pointed to by the pointers
        you pass to it.

        (JSC::MarkedBlock::isPossibleCell): Removed a null check. We now consider
        the null pointer to be a possible cell with a 0 (impossible) block. This
        removes a null check from marking.

        * runtime/MarkedSpace.cpp:
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::contains): Simplified the contains check, and inlined
        the whole thing, now that it's so simple.

2011-02-08  Daniel Bates  <dbates@rim.com>

        Rubber-stamped by Martin Robinson.

        Rename enum ProtectionSeting [sic] to ProtectionSetting.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::reprotectRegion):
        * jit/ExecutableAllocator.h:

2011-02-08  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Should not always define USE_SYSTEM_MALLOC
        https://bugs.webkit.org/show_bug.cgi?id=54007

        * wtf/Platform.h:

2011-02-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        LLVM Compiler build fix.

        * runtime/WriteBarrier.h:
        (JSC::WriteBarrier::WriteBarrier):

2011-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        JSVariableObject::setRegisters should take PassOwnArrayPtr for registersArray.
        https://bugs.webkit.org/show_bug.cgi?id=53902

        * runtime/Arguments.h:
        (JSC::JSActivation::copyRegisters): Uses OwnArrayPtr<Register> instead of Register*.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::copyGlobalsFrom): Ditto.
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::setRegisters): Takes PassOwnArrayPtr<Register> instead of Register*
        for registerArray.
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::copyRegisterArray): Returns PassOwnArrayPtr<Register> instead of Register*.
        (JSC::JSVariableObject::setRegisters): Takes PassOwnArrayPtr<Register> instead of Register*
        for registerArray.

2011-02-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed some dead code from Heap
        https://bugs.webkit.org/show_bug.cgi?id=53969
        
        SunSpider reports no change.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::shrink):
        (JSC::MarkedSpace::sweep):
        * runtime/MarkedSpace.h: Removed resizeBlocks and growBlocks, and
        renamed shrinkBlocks to shrink, making it unconditionally shrink as
        much as possible.

2011-02-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Simplified the marked space's mark invariant
        https://bugs.webkit.org/show_bug.cgi?id=53968
        
        SunSpider reports no change.
        
        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocate): Mark objects when allocating them. This
        means that, at all times other than the mark phase, an object is live
        if and only if it is marked.

        (JSC::MarkedSpace::containsSlowCase): Use the new mark invariant to
        simplify testing whether an object is live.

2011-02-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Eric Seidel.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=53950
        USE_WK_SCROLLBAR_PAINTER in ScrollbarThemeMac should be in
        Platform.h instead

        * wtf/Platform.h:

2011-02-07  Darin Adler  <darin@apple.com>

        Reviewed by Antti Koivisto.

        Add built-in decoder for UTF-8 for improved performance
        https://bugs.webkit.org/show_bug.cgi?id=53898

        * wtf/unicode/UnicodeMacrosFromICU.h: Added U8_MAX_LENGTH and
        U8_APPEND_UNSAFE. Also fixed header.

2011-02-07  Adam Roben  <aroben@apple.com>

        Delete precompiled headers whenever any .vsprops file changes

        Precompiled headers need to be rebuilt if, e.g., an ENABLE_* macro is changed in one of our
        .vsprops files. Unfortunately, Visual Studio isn't smart enough to figure this out, so we
        give it some assistance by deleting the precompiled headers whenever any .vsprops file
        changes.

        I also made some drive-by fixes while I was in the area.

        Fixes <http://webkit.org/b/53826> react-to-vsprops-changes.py doesn't force precompiled
        headers to be rebuilt, but should

        Reviewed by David Kilzer.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Stop ignoring the
        return code from react-to-vsprops-changes.py so we will notice when errors are introduced.
        But skip the script entirely in production builds, where it is both unnecessary and can't
        function correctly (due to not having the entire source tree available to it).

        * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
        (main): Removed an extra '*' in the glob for finding manifest files. The extra '*' was
        leftover from before we rearranged WebKitBuild in r75138. Moved code to delete an old file
        to the new delete_if_older_than function. Added code to delete any precompiled headers older
        than the newest .vsprops file.
        (delete_if_older_than): Added. Code came from main.

2011-02-07  Antti Koivisto  <antti@apple.com>

        Not reviewed.
        
        ASSERTS_DISABLED -> ASSERT_DISABLED

        * wtf/BloomFilter.h:

2011-02-06  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed; speculative Qt build fix.

        * JavaScriptCore.pro:

2011-02-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
        https://bugs.webkit.org/show_bug.cgi?id=52867

        Removed LOOSE_OWN_ARRAY_PTR and OwnArrayPtr<T>::set. Replaced all calls to OwnArrayPtr::set
        and loose instantiation of OwnArrayPtr by calls to operator= and adoptArrayPtr. Also removed
        OwnArrayPtrCommon.h since PassOwnArrayPtr.h needs to include OwnArrayPtr.h and there is
        no point in putting deleteOwnedArrayPtr into a separate header.
        
        Note: if this patch breaks build, the code is either instiantiating OwnArrayPtr
        without calling adoptArrayPtr or calling set on ArrayOwnPtr instead of operator=.

        No tests are added since this is a refactoring.

        * API/JSStringRefCF.cpp:
        (JSStringCreateWithCFString): Calls adoptArrayPtr.
        * GNUmakefile.am: Removed OwnArrayPtrCommon.h
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * runtime/Arguments.cpp:
        (JSC::Arguments::deleteProperty): Calls adoptArrayPtr.
        * runtime/Arguments.h:
        (JSC::Arguments::copyRegisters): Ditto.
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator): Ditto.
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::setRegisters): Calls operator= instead of set.
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::StructureChain): Ditto.
        * wtf/CMakeLists.txt:
        * wtf/DateMath.h:
        (JSC::GregorianDateTime::GregorianDateTime): No longer instnatiates OwnArrayPtr
        with a null pointer.
        * wtf/OwnArrayPtr.h:
        * wtf/OwnArrayPtrCommon.h: Removed.
        * wtf/PassOwnArrayPtr.h: No longer includes OwnArrayCommon.h
        (WTF::deleteOwnedArrayPtr): Moved from OwnArrayPtrCommon.h

2011-02-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej Stachowiak.

        Use bloom filter for descendant selector filtering
        https://bugs.webkit.org/show_bug.cgi?id=53880
        
        Implement a bloom filter with k=2 and 8 bit counting.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/BloomFilter.h: Added.
        (WTF::BloomFilter::maximumCount):
        (WTF::BloomFilter::BloomFilter):
        (WTF::BloomFilter::mayContain):
        (WTF::BloomFilter::add):
        (WTF::BloomFilter::remove):
        (WTF::BloomFilter::firstSlot):
        (WTF::BloomFilter::secondSlot):
        (WTF::::add):
        (WTF::::remove):
        (WTF::::clear):
        (WTF::::likelyEmpty):
        (WTF::::isClear):

2011-02-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Rolled back in r77612 with ASSERT/crash fixed.
        https://bugs.webkit.org/show_bug.cgi?id=53759
        
        Don't shrink the heap to 0 unconditionally. Instead, shrink to 1 if
        necessary. For now, the heap assumes that it always has at least one
        block live.

        * runtime/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::reset):
        * runtime/Heap.h:
        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::shrinkBlocks):
        (JSC::MarkedSpace::sweep):
        (JSC::MarkedSpace::reset):
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::highWaterMark):
        (JSC::MarkedSpace::setHighWaterMark):

2011-02-04  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: REALLY remove the last vestiges of JSVALUE32!

        <rdar://problem/8957409> Remove last vestiges of JSVALUE32
        <http://webkit.org/b/53779>

        * DerivedSources.make: Removed dependency on
        JavaScriptCore.JSVALUE32.exp.

2011-02-04  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/8957409> Remove last vestiges of JSVALUE32
        <http://webkit.org/b/53779>

        Reviewed by Darin Adler.

        Support for JSVALUE32 was originaly removed in r70111.

        * Configurations/JavaScriptCore.xcconfig: Changed armv6 to use
        JavaScriptCore.JSVALUE32_64.exp and ppc64 to use
        JavaScriptCore.JSVALUE64.exp to match Platform.h.
        * DerivedSources.make: Removed rule for
        JavaScriptCore.JSVALUE32.exp.
        * JavaScriptCore.JSVALUE32only.exp: Removed.
        * JavaScriptCore.xcodeproj/project.pbxproj: Removed references
        to JavaScriptCore.JSVALUE32only.exp.

2011-02-04  David Kilzer  <ddkilzer@apple.com>

        Use static_cast and other style cleanup in YarrInterpreter.cpp
        <http://webkit.org/b/53772>

        Reviewed by John Sullivan.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::InputStream::readChecked): Use
        static_cast.
        (JSC::Yarr::Interpreter::InputStream::checkInput): Remove
        unnecessary else block.
        (JSC::Yarr::Interpreter::matchAssertionEOL): Ditto.
        (JSC::Yarr::Interpreter::backtrackBackReference): Ditto.
        (JSC::Yarr::ByteCompiler::emitDisjunction): Use static_cast.

2011-02-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77625 and r77626.
        http://trac.webkit.org/changeset/77625
        http://trac.webkit.org/changeset/77626
        https://bugs.webkit.org/show_bug.cgi?id=53765

        It broke Windows builds (Requested by Ossy_ on #webkit).

        * JavaScriptCore.exp:
        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * create_regex_tables:
        * runtime/RegExp.cpp:
        * wtf/Platform.h:
        * yarr/Yarr.h:
        * yarr/YarrJIT.cpp:
        * yarr/YarrJIT.h:
        * yarr/YarrParser.h:
        * yarr/YarrPattern.h:
        * yarr/YarrSyntaxChecker.h:
        * yarr/yarr.pri: Removed.

2011-02-04  Jessie Berlin  <jberlin@apple.com>

        Windows build fix. Unreviewed.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:

2011-02-04  Peter Varga  <pvarga@webkit.org>

        Reviewed by Gavin Barraclough.

        Replace PCRE with Yarr in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=53496

        * JavaScriptCore.exp:
        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * create_regex_tables:
        * runtime/RegExp.cpp:
        * wtf/Platform.h:
        * yarr/Yarr.h:
        * yarr/YarrJIT.cpp:
        * yarr/YarrJIT.h:
        * yarr/YarrParser.h:
        * yarr/YarrPattern.h:
        * yarr/YarrSyntaxChecker.h:
        * yarr/yarr.pri: Added.

2011-02-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed rollout two patches r77614 and r77612.

        REGRESSION: Snow Leopard Intel Release anumber of failing tests.

        * runtime/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::reset):
        * runtime/Heap.h:
        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::sweep):
        (JSC::MarkedSpace::reset):
        * runtime/MarkedSpace.h:

2011-02-04  Geoffrey Garen  <ggaren@apple.com>

        Try to fix 32bit build.

        * runtime/Heap.cpp:
        (JSC::Heap::reset): Use an explicit cast to avoid shortening warnings,
        since 1.5 is double (64bit), and the result is size_t (32bit).

2011-02-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Changed MarkedSpace to delegate grow/shrink decisions to Heap
        https://bugs.webkit.org/show_bug.cgi?id=53759
        
        SunSpider reports no change.
        
        * runtime/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::reset):
        * runtime/Heap.h: Reorganized a few data members for better cache locality.
        Added a grow policy.
        
        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::sweep):
        (JSC::MarkedSpace::reset): Don't shrink automatically. Instead, wait for
        the heap to make an explicit sweep call.

        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::highWaterMark):
        (JSC::MarkedSpace::setHighWaterMark): Use a watermark to determine how
        many bytes to allocate before failing and giving the heap an opportunity
        to collect garbage. This also means that we allocate blocks on demand,
        instead of ahead of time.

2011-02-03  James Kozianski  <koz@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add navigator.registerProtocolHandler behind a flag.
        https://bugs.webkit.org/show_bug.cgi?id=52609

        * Configurations/FeatureDefines.xcconfig:

2011-02-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Not all blocks are freed when the heap is freed (counting is hard!)
        https://bugs.webkit.org/show_bug.cgi?id=53732

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::destroy): Freeing a block compacts the list, so just
        keep freeing block 0 until there are no blocks left.

2011-02-03  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Mac build.

        * JavaScriptCore.xcodeproj/project.pbxproj: The new MarkedBlock.h header
        needs to be private, not project, so other projects can include headers
        that depend on it.

2011-02-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Start using MarkedBlock instead of CollectorBlock
        https://bugs.webkit.org/show_bug.cgi?id=53693
        
        SunSpider reports no change.
        
        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::blockFor):
        (JSC::MarkedBlock::setMarked):
        (JSC::MarkedBlock::isCellAligned):
        (JSC::MarkedBlock::isPossibleCell): Updated for const-ness.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::containsSlowCase):
        (JSC::MarkedSpace::clearMarkBits): Updated for const-ness.

        * runtime/MarkedSpace.h:
        (JSC::CollectorHeap::collectorBlock):
        (JSC::MarkedSpace::heap):
        (JSC::MarkedSpace::isMarked):
        (JSC::MarkedSpace::testAndSetMarked):
        (JSC::MarkedSpace::setMarked):
        (JSC::MarkedSpace::contains): Switched from CollectorBlock to MarkedBlock,
        and deleted dead CollectorBlock-related code.

2011-02-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Avoid strlen() in AtomicString::fromUTF8
        https://bugs.webkit.org/show_bug.cgi?id=50516

        Add an overload to calculateStringHashFromUTF8 to get
        strlen() of the input data with only one call.

        This change shows about 3% performance win on the xml-parser benchmark.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::fromUTF8):
        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::calculateStringHashAndLengthFromUTF8Internal):
        (WTF::Unicode::calculateStringHashFromUTF8):
        (WTF::Unicode::calculateStringHashAndLengthFromUTF8):
        * wtf/unicode/UTF8.h:

2011-02-02  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-02-02  Gavin Barraclough  <barraclough@apple.com>

        oops, build fix!

        * wtf/Assertions.cpp:

2011-02-02  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 53650 - Add a BACKTRACE macro to Assertions.h

        Add a BACKTRACE macro to Assertions.h, which will print a backtrace on
        debug Mac builds, make CRASH (and thus ASSERT) automatically call this.

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

2011-02-02  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Improper backtrack of nested non-capturing greedy paren to prior paren
        https://bugs.webkit.org/show_bug.cgi?id=53261

        A paren that follows a non-capturing greedy paren nested within a 
        non-capturing fixed paren was back tracking to the last paren 
        processed instead of the immediately prior paren.
        Refactored default backtracking of parens to prior paren to work for
        both nested (within) and immediately prior (after) parens.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::GenerationState::addParenthesesTail):
        (JSC::Yarr::YarrGenerator::TermGenerationState::TermGenerationState):
        (JSC::Yarr::YarrGenerator::TermGenerationState::setJumpListToPriorParen):
        (JSC::Yarr::YarrGenerator::TermGenerationState::getJumpListToPriorParen):
        (JSC::Yarr::YarrGenerator::ParenthesesTail::ParenthesesTail):
        (JSC::Yarr::YarrGenerator::ParenthesesTail::generateCode):
        (JSC::Yarr::YarrGenerator::generateParenthesesDisjunction):
        (JSC::Yarr::YarrGenerator::generateParenthesesSingle):
        (JSC::Yarr::YarrGenerator::generateDisjunction):

2011-02-02  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler and Steve Falkenburg.

        Add DerivedSources.make to some Visual Studio projects
        https://bugs.webkit.org/show_bug.cgi?id=53607

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Add DerivedSources.make.

2011-02-02  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        Implement basic media statistics on media elements.
        https://bugs.webkit.org/show_bug.cgi?id=53322

        * Configurations/FeatureDefines.xcconfig:

2011-02-02  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes for wxWebKit.

        * wtf/wx/StringWx.cpp:
        (WTF::String::String):

2011-02-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        A little more Heap refactoring
        https://bugs.webkit.org/show_bug.cgi?id=53577
        
        SunSpider reports no change.
        
        Split out MarkedBlock into its own file / class.
        
        Did the following renames:
            isCellMarked => isMarked
            checkMarkCell => testAndSetMarked
            markCell => setMarked
            cellOffset => cellNumber
            collectorBlock => blockFor

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/Heap.cpp:
        (JSC::WeakGCHandlePool::update):
        * runtime/Heap.h:
        (JSC::Heap::isMarked):
        (JSC::Heap::testAndSetMarked):
        (JSC::Heap::setMarked):
        * runtime/JSArray.h:
        (JSC::MarkStack::markChildren):
        (JSC::MarkStack::drain):
        * runtime/JSCell.h:
        (JSC::JSCell::MarkStack::internalAppend):
        * runtime/MarkedBlock.cpp: Added.
        * runtime/MarkedBlock.h: Added.
        (JSC::MarkedBlock::blockFor):
        (JSC::MarkedBlock::cellNumber):
        (JSC::MarkedBlock::isMarked):
        (JSC::MarkedBlock::testAndSetMarked):
        (JSC::MarkedBlock::setMarked):
        (JSC::MarkedBlock::isCellAligned):
        (JSC::MarkedBlock::isPossibleCell):
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::isMarked):
        (JSC::MarkedSpace::testAndSetMarked):
        (JSC::MarkedSpace::setMarked):
        * runtime/SmallStrings.cpp:
        (JSC::isMarked):
        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::isValid):
        (JSC::::get):
        (JSC::::take):
        (JSC::::set):

2011-02-02  Sam Weinig  <sam@webkit.org>

        Fix windows clean build.

        * DerivedSources.make:

2011-02-02  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix dist compilation
        https://bugs.webkit.org/show_bug.cgi?id=53579

        * GNUmakefile.am: Added WriteBarrier.h to the sources, it was
        added in r77151

2011-02-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77297.
        http://trac.webkit.org/changeset/77297
        https://bugs.webkit.org/show_bug.cgi?id=53538

        caused leopard crashes (Requested by paroga on #webkit).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::fromUTF8):
        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::calculateStringHashFromUTF8):
        * wtf/unicode/UTF8.h:

2011-02-01  Sam Weinig  <sam@webkit.org>

        Fix Mac production builds.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-02-01  Sam Weinig  <sam@webkit.org>

        Try to fix the windows build.

        * DerivedSources.make:

2011-02-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Avoid strlen() in AtomicString::fromUTF8
        https://bugs.webkit.org/show_bug.cgi?id=50516

        Add an overload to calculateStringHashFromUTF8 to get
        strlen() of the input data with only one call.

        This change shows about 3% performance win on the xml-parser benchmark.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::fromUTF8):
        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::calculateStringHashAndLengthFromUTF8Internal):
        (WTF::Unicode::calculateStringHashFromUTF8):
        (WTF::Unicode::calculateStringHashAndLengthFromUTF8):
        * wtf/unicode/UTF8.h:

2011-02-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Part 2 for <rdar://problem/8492788>
        Adopt WKScrollbarPainterController

        Use header detection to define scrollbar painting controller #define.

        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-02-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Refactor JSGlobalObject-related tear-down
        https://bugs.webkit.org/show_bug.cgi?id=53478
        
        While investigating crashes caused by r77082, I noticed some strange
        destructor-time behaviors. This patch makes them less strange.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::globalObject):
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        (JSC::GlobalCodeBlock::~GlobalCodeBlock): Store the set of global code
        blocks on the Heap, instead of on independent global objects. The heap
        is guaranteed to outlast any GC-owned data structure. The heap is also
        a natural place to store objects that needs out-of-band marking, since
        the heap is responsible for marking all roots.

        * runtime/Heap.cpp:
        (JSC::Heap::markRoots):
        (JSC::Heap::globalObjectCount):
        (JSC::Heap::protectedGlobalObjectCount):
        * runtime/Heap.h:
        (JSC::Heap::codeBlocks):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::~JSGlobalObject):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        * runtime/MarkedSpace.cpp: Store the set of global objects in a weak map
        owned by JSGlobalData, instead of an instrusive circular linked list.
        This is simpler, and it avoids destructor-time access between garbage
        collected objects, which is hard to get right.

        (JSC::MarkedSpace::destroy): Make sure to clear mark bits before tearing
        everything down. Otherwise, weak data structures will incorrectly report
        that objects pending destruction are still alive.

2011-02-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION(77082): GC-related crashes seen: on WebKit2 bot; on GTK 32bit
        bot; loading trac pages; typing in search field
        https://bugs.webkit.org/show_bug.cgi?id=53519
        
        The crashes were all caused by failure to run an object's destructor.

        * runtime/CollectorHeapIterator.h:
        (JSC::ObjectIterator::ObjectIterator): Don't skip forward upon
        construction. The iterator class used to do that when it was designed
        for prior-to-beginning initialization. I forgot to remove this line
        of code when I changed the iterator to normal initialization.
        
        Skipping forward upon construction was causing the heap to skip running
        the destructor for the very first object in a block when destroying the
        block. This usually did not crash, since block destruction is rare and
        most objects have pretty trivial destructors. However, in the rare case
        when the heap would destroy a block whose first object was a global
        object or a DOM node, BOOM.

2011-01-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Update JSObject storage for new marking API
        https://bugs.webkit.org/show_bug.cgi?id=53467

        JSObject no longer uses EncodedJSValue for its property storage.
        This produces a stream of mechanical changes to PropertySlot and
        anonymous storage APIs.

        * JavaScriptCore.exp:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::ArrayPrototype):
        * runtime/BooleanConstructor.cpp:
        (JSC::constructBoolean):
        (JSC::constructBooleanFromImmediateBoolean):
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        * runtime/BooleanObject.h:
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::getOwnPropertySlot):
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlot):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObject):
        * runtime/JSObject.cpp:
        (JSC::JSObject::fillGetterPropertySlot):
        * runtime/JSObject.h:
        (JSC::JSObject::getDirectLocation):
        (JSC::JSObject::offsetForLocation):
        (JSC::JSObject::putAnonymousValue):
        (JSC::JSObject::clearAnonymousValue):
        (JSC::JSObject::getAnonymousValue):
        (JSC::JSObject::putThisToAnonymousValue):
        (JSC::JSObject::locationForOffset):
        (JSC::JSObject::inlineGetOwnPropertySlot):
        * runtime/JSObjectWithGlobalObject.cpp:
        (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::JSWrapperObject):
        (JSC::JSWrapperObject::setInternalValue):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/NumberConstructor.cpp:
        (JSC::constructWithNumberConstructor):
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::NumberObject):
        (JSC::constructNumber):
        * runtime/NumberObject.h:
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::getValue):
        (JSC::PropertySlot::setValue):
        (JSC::PropertySlot::setRegisterSlot):
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::setWithoutWriteBarrier):

2011-02-01  Daniel Bates  <dbates@rim.com>

        Reviewed by Antonio Gomes.

        Modify RandomNumberSeed.h to use USE(MERSENNE_TWISTER_19937)
        https://bugs.webkit.org/show_bug.cgi?id=53506

        Currently, use of the Mersenne Twister pseudorandom number generator
        is hardcoded to the Windows CE port. With the passing of bug #53253,
        we can generalize support for this PRNG to all ports that use srand(3)
        and rand(3), including Windows CE.

        * wtf/RandomNumberSeed.h:
        (WTF::initializeRandomNumberGenerator):

2011-02-01  Dave Tapuska  <dtapuska@rim.com>

        Reviewed by Gavin Barraclough.

        MacroAssemblerARM would generate code that did 32bit loads
        on addresses that were not aligned. More specifically it would
        generate a ldr r8,[r1, #7] which isn't valid on ARMv5 and lower.
        The intended instruction really is ldrb r8,[r1, #7]; ensure we
        call load8 instead of load32.

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

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::set32Test32):
        (JSC::MacroAssemblerARM::set32Test8):

2011-02-01  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        Fix some Visual Studio compiler warnings.
        https://bugs.webkit.org/show_bug.cgi?id=53476

        * wtf/MathExtras.h:
        (clampToInteger):
        (clampToPositiveInteger):
        * wtf/ThreadingWin.cpp:
        (WTF::absoluteTimeToWaitTimeoutInterval):

2011-01-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Bogus callframe during stack unwinding
        https://bugs.webkit.org/show_bug.cgi?id=53454

        Trying to access a callframe's globalData after destroying its
        ScopeChain is not a good thing.  While we could access the
        globalData directly through the (known valid) scopechain we're
        holding on to, it feels fragile.  Instead we push the valid
        ScopeChain onto the callframe again to ensure that the callframe
        itself remains valid.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):

2011-01-31  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
        https://bugs.webkit.org/show_bug.cgi?id=53271

        Reapplying this change again.
        Changed isValid() to use .get() as a result of change r77151.

        Added new isValid() methods to check if a contained object in
        a WeakGCMap is valid when using an unchecked iterator.

        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::isValid):

2011-01-31  Oliver Hunt  <oliver@apple.com>

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        rolling r77098, r77099, r77100, r77109, and
        r77111 back in, along with a few more Qt fix attempts.

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
        (JSC::JSCallbackObject::setPrivateProperty):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::put):
        (JSC::::staticFunctionGetter):
        * API/JSObjectRef.cpp:
        (JSObjectMakeConstructor):
        (JSObjectSetPrivateProperty):
        * API/JSWeakObjectMapRefInternal.h:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::globalObject):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        (JSC::BytecodeGenerator::findScopedProperty):
        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        (JSC::DebuggerActivation::markChildren):
        * debugger/DebuggerActivation.h:
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/CallFrame.h:
        (JSC::ExecState::exception):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::appendSourceToError):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (GlobalObject::GlobalObject):
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):
        * runtime/Arguments.cpp:
        (JSC::Arguments::markChildren):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        * runtime/Arguments.h:
        (JSC::Arguments::setActivation):
        (JSC::Arguments::Arguments):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
        (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        (JSC::constructBoolean):
        (JSC::constructBooleanFromImmediateBoolean):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/ConservativeSet.cpp:
        (JSC::ConservativeSet::grow):
        * runtime/ConservativeSet.h:
        (JSC::ConservativeSet::~ConservativeSet):
        (JSC::ConservativeSet::mark):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncSetTime):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::markChildren):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::GetterSetter):
        (JSC::GetterSetter::getter):
        (JSC::GetterSetter::setGetter):
        (JSC::GetterSetter::setter):
        (JSC::GetterSetter::setSetter):
        * runtime/GlobalEvalFunction.cpp:
        (JSC::GlobalEvalFunction::GlobalEvalFunction):
        (JSC::GlobalEvalFunction::markChildren):
        * runtime/GlobalEvalFunction.h:
        (JSC::GlobalEvalFunction::cachedGlobalObject):
        * runtime/Heap.cpp:
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::markTempSortVectors):
        (JSC::Heap::markRoots):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::value):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::markChildren):
        (JSC::JSActivation::put):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::unshiftCount):
        (JSC::JSArray::sort):
        (JSC::JSArray::fillArgList):
        (JSC::JSArray::copyToRegisters):
        (JSC::JSArray::compactForSorting):
        * runtime/JSArray.h:
        (JSC::JSArray::getIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::uncheckedSetIndex):
        (JSC::JSArray::markChildrenDirect):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSCell.h:
        (JSC::JSCell::MarkStack::append):
        (JSC::JSCell::MarkStack::internalAppend):
        (JSC::JSCell::MarkStack::deprecatedAppend):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::resetPrototype):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
        (JSC::JSGlobalObject::regExpConstructor):
        (JSC::JSGlobalObject::errorConstructor):
        (JSC::JSGlobalObject::evalErrorConstructor):
        (JSC::JSGlobalObject::rangeErrorConstructor):
        (JSC::JSGlobalObject::referenceErrorConstructor):
        (JSC::JSGlobalObject::syntaxErrorConstructor):
        (JSC::JSGlobalObject::typeErrorConstructor):
        (JSC::JSGlobalObject::URIErrorConstructor):
        (JSC::JSGlobalObject::evalFunction):
        (JSC::JSGlobalObject::objectPrototype):
        (JSC::JSGlobalObject::functionPrototype):
        (JSC::JSGlobalObject::arrayPrototype):
        (JSC::JSGlobalObject::booleanPrototype):
        (JSC::JSGlobalObject::stringPrototype):
        (JSC::JSGlobalObject::numberPrototype):
        (JSC::JSGlobalObject::datePrototype):
        (JSC::JSGlobalObject::regExpPrototype):
        (JSC::JSGlobalObject::methodCallDummy):
        (JSC::Structure::prototypeForLookup):
        (JSC::constructArray):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::object):
        (JSC::Stringifier::Holder::objectSlot):
        (JSC::Stringifier::markAggregate):
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::callReviver):
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::removeDirect):
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSObject::getDirectOffset):
        (JSC::JSObject::putDirectOffset):
        (JSC::JSObject::putUndefinedAtDirectOffset):
        (JSC::JSObject::flattenDictionaryObject):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::JSValue::putDirect):
        (JSC::JSObject::allocatePropertyStorageInline):
        (JSC::JSObject::markChildrenDirect):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::get):
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::markChildren):
        * runtime/JSString.cpp:
        (JSC::StringObject::create):
        * runtime/JSValue.h:
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::markChildren):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::internalValue):
        (JSC::JSWrapperObject::setInternalValue):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::parse):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::lookupPut):
        * runtime/MarkStack.h:
        (JSC::MarkStack::MarkStack):
        (JSC::MarkStack::deprecatedAppendValues):
        (JSC::MarkStack::appendValues):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        (JSC::constructWithNumberConstructor):
        * runtime/NumberObject.cpp:
        (JSC::constructNumber):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        * runtime/Operations.h:
        (JSC::normalizePrototypeChain):
        (JSC::resolveBase):
        * runtime/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::setExistingProperty):
        (JSC::PutPropertySlot::setNewProperty):
        (JSC::PutPropertySlot::base):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::~ScopeChainNode):
        (JSC::ScopeChainIterator::operator*):
        (JSC::ScopeChainIterator::operator->):
        (JSC::ScopeChain::top):
        * runtime/ScopeChainMark.h:
        (JSC::ScopeChain::markAggregate):
        * runtime/SmallStrings.cpp:
        (JSC::isMarked):
        (JSC::SmallStrings::markChildren):
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::emptyString):
        (JSC::SmallStrings::singleCharacterString):
        (JSC::SmallStrings::singleCharacterStrings):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::flattenDictionaryStructure):
        * runtime/Structure.h:
        (JSC::Structure::storedPrototype):
        (JSC::Structure::storedPrototypeSlot):
        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::uncheckedGet):
        (JSC::WeakGCMap::uncheckedGetSlot):
        (JSC::::get):
        (JSC::::take):
        (JSC::::set):
        (JSC::::uncheckedRemove):
        * runtime/WriteBarrier.h: Added.
        (JSC::DeprecatedPtr::DeprecatedPtr):
        (JSC::DeprecatedPtr::get):
        (JSC::DeprecatedPtr::operator*):
        (JSC::DeprecatedPtr::operator->):
        (JSC::DeprecatedPtr::slot):
        (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
        (JSC::DeprecatedPtr::operator!):
        (JSC::WriteBarrierBase::set):
        (JSC::WriteBarrierBase::get):
        (JSC::WriteBarrierBase::operator*):
        (JSC::WriteBarrierBase::operator->):
        (JSC::WriteBarrierBase::clear):
        (JSC::WriteBarrierBase::slot):
        (JSC::WriteBarrierBase::operator UnspecifiedBoolType*):
        (JSC::WriteBarrierBase::operator!):
        (JSC::WriteBarrier::WriteBarrier):
        (JSC::operator==):

2011-01-31  Dan Winship  <danw@gnome.org>

        Reviewed by Gustavo Noronha Silva.

        wss (websockets ssl) support for gtk via new gio TLS support
        https://bugs.webkit.org/show_bug.cgi?id=50344

        Add a GPollableOutputStream typedef for TLS WebSockets support

        * wtf/gobject/GTypedefs.h:

2011-01-31  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=53352
        Heavy external fragmentation in FixedVMPoolAllocator can lead to a CRASH().

        The FixedVMPoolAllocator currently uses a best fix policy -
        switch to first fit, this is less prone to external fragmentation.

        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::AllocationTableSizeClass::AllocationTableSizeClass):
        (JSC::AllocationTableSizeClass::blockSize):
        (JSC::AllocationTableSizeClass::blockCount):
        (JSC::AllocationTableSizeClass::blockAlignment):
        (JSC::AllocationTableSizeClass::size):
        (JSC::AllocationTableLeaf::AllocationTableLeaf):
        (JSC::AllocationTableLeaf::~AllocationTableLeaf):
        (JSC::AllocationTableLeaf::allocate):
        (JSC::AllocationTableLeaf::free):
        (JSC::AllocationTableLeaf::isEmpty):
        (JSC::AllocationTableLeaf::isFull):
        (JSC::AllocationTableLeaf::size):
        (JSC::AllocationTableLeaf::classForSize):
        (JSC::AllocationTableLeaf::dump):
        (JSC::LazyAllocationTable::LazyAllocationTable):
        (JSC::LazyAllocationTable::~LazyAllocationTable):
        (JSC::LazyAllocationTable::allocate):
        (JSC::LazyAllocationTable::free):
        (JSC::LazyAllocationTable::isEmpty):
        (JSC::LazyAllocationTable::isFull):
        (JSC::LazyAllocationTable::size):
        (JSC::LazyAllocationTable::dump):
        (JSC::LazyAllocationTable::classForSize):
        (JSC::AllocationTableDirectory::AllocationTableDirectory):
        (JSC::AllocationTableDirectory::~AllocationTableDirectory):
        (JSC::AllocationTableDirectory::allocate):
        (JSC::AllocationTableDirectory::free):
        (JSC::AllocationTableDirectory::isEmpty):
        (JSC::AllocationTableDirectory::isFull):
        (JSC::AllocationTableDirectory::size):
        (JSC::AllocationTableDirectory::classForSize):
        (JSC::AllocationTableDirectory::dump):
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
        (JSC::FixedVMPoolAllocator::alloc):
        (JSC::FixedVMPoolAllocator::free):
        (JSC::FixedVMPoolAllocator::allocated):
        (JSC::FixedVMPoolAllocator::isValid):
        (JSC::FixedVMPoolAllocator::classForSize):
        (JSC::FixedVMPoolAllocator::offsetToPointer):
        (JSC::FixedVMPoolAllocator::pointerToOffset):
        (JSC::ExecutableAllocator::committedByteCount):
        (JSC::ExecutableAllocator::isValid):
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        * wtf/PageReservation.h:
        (WTF::PageReservation::PageReservation):
        (WTF::PageReservation::commit):
        (WTF::PageReservation::decommit):
        (WTF::PageReservation::committed):

2011-01-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r76969.
        http://trac.webkit.org/changeset/76969
        https://bugs.webkit.org/show_bug.cgi?id=53418

        "It is causing crashes in GTK+ and Leopard bots" (Requested by
        alexg__ on #webkit).

        * runtime/WeakGCMap.h:

2011-01-30  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r77098, r77099, r77100, r77109, and
        r77111.
        http://trac.webkit.org/changeset/77098
        http://trac.webkit.org/changeset/77099
        http://trac.webkit.org/changeset/77100
        http://trac.webkit.org/changeset/77109
        http://trac.webkit.org/changeset/77111
        https://bugs.webkit.org/show_bug.cgi?id=53219

        Qt build is broken

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
        (JSC::JSCallbackObject::setPrivateProperty):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::put):
        (JSC::::staticFunctionGetter):
        * API/JSObjectRef.cpp:
        (JSObjectMakeConstructor):
        (JSObjectSetPrivateProperty):
        * API/JSWeakObjectMapRefInternal.h:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::globalObject):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        (JSC::BytecodeGenerator::findScopedProperty):
        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        (JSC::DebuggerActivation::markChildren):
        * debugger/DebuggerActivation.h:
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/CallFrame.h:
        (JSC::ExecState::exception):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::appendSourceToError):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (GlobalObject::GlobalObject):
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):
        * runtime/Arguments.cpp:
        (JSC::Arguments::markChildren):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        * runtime/Arguments.h:
        (JSC::Arguments::setActivation):
        (JSC::Arguments::Arguments):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
        (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        (JSC::constructBoolean):
        (JSC::constructBooleanFromImmediateBoolean):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/ConservativeSet.cpp:
        (JSC::ConservativeSet::grow):
        * runtime/ConservativeSet.h:
        (JSC::ConservativeSet::~ConservativeSet):
        (JSC::ConservativeSet::mark):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncSetTime):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::markChildren):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::GetterSetter):
        (JSC::GetterSetter::getter):
        (JSC::GetterSetter::setGetter):
        (JSC::GetterSetter::setter):
        (JSC::GetterSetter::setSetter):
        * runtime/GlobalEvalFunction.cpp:
        (JSC::GlobalEvalFunction::GlobalEvalFunction):
        (JSC::GlobalEvalFunction::markChildren):
        * runtime/GlobalEvalFunction.h:
        (JSC::GlobalEvalFunction::cachedGlobalObject):
        * runtime/Heap.cpp:
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::markTempSortVectors):
        (JSC::Heap::markRoots):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::value):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::markChildren):
        (JSC::JSActivation::put):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::unshiftCount):
        (JSC::JSArray::sort):
        (JSC::JSArray::fillArgList):
        (JSC::JSArray::copyToRegisters):
        (JSC::JSArray::compactForSorting):
        * runtime/JSArray.h:
        (JSC::JSArray::getIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::uncheckedSetIndex):
        (JSC::JSArray::markChildrenDirect):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::toThisObject):
        (JSC::JSCell::MarkStack::append):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::resetPrototype):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
        (JSC::JSGlobalObject::regExpConstructor):
        (JSC::JSGlobalObject::errorConstructor):
        (JSC::JSGlobalObject::evalErrorConstructor):
        (JSC::JSGlobalObject::rangeErrorConstructor):
        (JSC::JSGlobalObject::referenceErrorConstructor):
        (JSC::JSGlobalObject::syntaxErrorConstructor):
        (JSC::JSGlobalObject::typeErrorConstructor):
        (JSC::JSGlobalObject::URIErrorConstructor):
        (JSC::JSGlobalObject::evalFunction):
        (JSC::JSGlobalObject::objectPrototype):
        (JSC::JSGlobalObject::functionPrototype):
        (JSC::JSGlobalObject::arrayPrototype):
        (JSC::JSGlobalObject::booleanPrototype):
        (JSC::JSGlobalObject::stringPrototype):
        (JSC::JSGlobalObject::numberPrototype):
        (JSC::JSGlobalObject::datePrototype):
        (JSC::JSGlobalObject::regExpPrototype):
        (JSC::JSGlobalObject::methodCallDummy):
        (JSC::Structure::prototypeForLookup):
        (JSC::constructArray):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::object):
        (JSC::Stringifier::markAggregate):
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::callReviver):
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::removeDirect):
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSObject::getDirectOffset):
        (JSC::JSObject::putDirectOffset):
        (JSC::JSObject::flattenDictionaryObject):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::JSValue::putDirect):
        (JSC::JSObject::allocatePropertyStorageInline):
        (JSC::JSObject::markChildrenDirect):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::get):
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::markChildren):
        * runtime/JSString.cpp:
        (JSC::StringObject::create):
        * runtime/JSValue.h:
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::markChildren):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::internalValue):
        (JSC::JSWrapperObject::setInternalValue):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::parse):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::lookupPut):
        * runtime/MarkStack.h:
        (JSC::MarkStack::appendValues):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        (JSC::constructWithNumberConstructor):
        * runtime/NumberObject.cpp:
        (JSC::constructNumber):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        * runtime/Operations.h:
        (JSC::normalizePrototypeChain):
        (JSC::resolveBase):
        * runtime/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::setExistingProperty):
        (JSC::PutPropertySlot::setNewProperty):
        (JSC::PutPropertySlot::base):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::~ScopeChainNode):
        (JSC::ScopeChainIterator::operator*):
        (JSC::ScopeChainIterator::operator->):
        (JSC::ScopeChain::top):
        * runtime/ScopeChainMark.h:
        (JSC::ScopeChain::markAggregate):
        * runtime/SmallStrings.cpp:
        (JSC::isMarked):
        (JSC::SmallStrings::markChildren):
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::emptyString):
        (JSC::SmallStrings::singleCharacterString):
        (JSC::SmallStrings::singleCharacterStrings):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::flattenDictionaryStructure):
        * runtime/Structure.h:
        (JSC::Structure::storedPrototype):
        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::uncheckedGet):
        (JSC::WeakGCMap::isValid):
        (JSC::::get):
        (JSC::::take):
        (JSC::::set):
        (JSC::::uncheckedRemove):
        * runtime/WriteBarrier.h: Removed.

2011-01-30  Simon Fraser  <simon.fraser@apple.com>

        Build fix the build fix. I assume Oliver meant m_cell, not m_value.

        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::clear):

2011-01-30  Oliver Hunt  <oliver@apple.com>

        More Qt build fixes

        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::clear):

2011-01-30  Oliver Hunt  <oliver@apple.com>

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        rolling r77006 and r77020 back in.

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
        (JSC::JSCallbackObject::setPrivateProperty):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::put):
        (JSC::::staticFunctionGetter):
        * API/JSObjectRef.cpp:
        (JSObjectMakeConstructor):
        (JSObjectSetPrivateProperty):
        * API/JSWeakObjectMapRefInternal.h:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::globalObject):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        (JSC::BytecodeGenerator::findScopedProperty):
        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        (JSC::DebuggerActivation::markChildren):
        * debugger/DebuggerActivation.h:
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/CallFrame.h:
        (JSC::ExecState::exception):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::appendSourceToError):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (GlobalObject::GlobalObject):
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):
        * runtime/Arguments.cpp:
        (JSC::Arguments::markChildren):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        * runtime/Arguments.h:
        (JSC::Arguments::setActivation):
        (JSC::Arguments::Arguments):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
        (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        (JSC::constructBoolean):
        (JSC::constructBooleanFromImmediateBoolean):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/ConservativeSet.cpp:
        (JSC::ConservativeSet::grow):
        * runtime/ConservativeSet.h:
        (JSC::ConservativeSet::~ConservativeSet):
        (JSC::ConservativeSet::mark):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncSetTime):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::markChildren):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::GetterSetter):
        (JSC::GetterSetter::getter):
        (JSC::GetterSetter::setGetter):
        (JSC::GetterSetter::setter):
        (JSC::GetterSetter::setSetter):
        * runtime/GlobalEvalFunction.cpp:
        (JSC::GlobalEvalFunction::GlobalEvalFunction):
        (JSC::GlobalEvalFunction::markChildren):
        * runtime/GlobalEvalFunction.h:
        (JSC::GlobalEvalFunction::cachedGlobalObject):
        * runtime/Heap.cpp:
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::markTempSortVectors):
        (JSC::Heap::markRoots):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::value):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::markChildren):
        (JSC::JSActivation::put):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::unshiftCount):
        (JSC::JSArray::sort):
        (JSC::JSArray::fillArgList):
        (JSC::JSArray::copyToRegisters):
        (JSC::JSArray::compactForSorting):
        * runtime/JSArray.h:
        (JSC::JSArray::getIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::uncheckedSetIndex):
        (JSC::JSArray::markChildrenDirect):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSCell.h:
        (JSC::JSCell::MarkStack::append):
        (JSC::JSCell::MarkStack::internalAppend):
        (JSC::JSCell::MarkStack::deprecatedAppend):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::resetPrototype):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
        (JSC::JSGlobalObject::regExpConstructor):
        (JSC::JSGlobalObject::errorConstructor):
        (JSC::JSGlobalObject::evalErrorConstructor):
        (JSC::JSGlobalObject::rangeErrorConstructor):
        (JSC::JSGlobalObject::referenceErrorConstructor):
        (JSC::JSGlobalObject::syntaxErrorConstructor):
        (JSC::JSGlobalObject::typeErrorConstructor):
        (JSC::JSGlobalObject::URIErrorConstructor):
        (JSC::JSGlobalObject::evalFunction):
        (JSC::JSGlobalObject::objectPrototype):
        (JSC::JSGlobalObject::functionPrototype):
        (JSC::JSGlobalObject::arrayPrototype):
        (JSC::JSGlobalObject::booleanPrototype):
        (JSC::JSGlobalObject::stringPrototype):
        (JSC::JSGlobalObject::numberPrototype):
        (JSC::JSGlobalObject::datePrototype):
        (JSC::JSGlobalObject::regExpPrototype):
        (JSC::JSGlobalObject::methodCallDummy):
        (JSC::Structure::prototypeForLookup):
        (JSC::constructArray):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::object):
        (JSC::Stringifier::Holder::objectSlot):
        (JSC::Stringifier::markAggregate):
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::callReviver):
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::removeDirect):
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSObject::getDirectOffset):
        (JSC::JSObject::putDirectOffset):
        (JSC::JSObject::putUndefinedAtDirectOffset):
        (JSC::JSObject::flattenDictionaryObject):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::JSValue::putDirect):
        (JSC::JSObject::allocatePropertyStorageInline):
        (JSC::JSObject::markChildrenDirect):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::get):
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::markChildren):
        * runtime/JSString.cpp:
        (JSC::StringObject::create):
        * runtime/JSValue.h:
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::markChildren):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::internalValue):
        (JSC::JSWrapperObject::setInternalValue):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::parse):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::lookupPut):
        * runtime/MarkStack.h:
        (JSC::MarkStack::MarkStack):
        (JSC::MarkStack::deprecatedAppendValues):
        (JSC::MarkStack::appendValues):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        (JSC::constructWithNumberConstructor):
        * runtime/NumberObject.cpp:
        (JSC::constructNumber):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        * runtime/Operations.h:
        (JSC::normalizePrototypeChain):
        (JSC::resolveBase):
        * runtime/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::setExistingProperty):
        (JSC::PutPropertySlot::setNewProperty):
        (JSC::PutPropertySlot::base):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::~ScopeChainNode):
        (JSC::ScopeChainIterator::operator*):
        (JSC::ScopeChainIterator::operator->):
        (JSC::ScopeChain::top):
        * runtime/ScopeChainMark.h:
        (JSC::ScopeChain::markAggregate):
        * runtime/SmallStrings.cpp:
        (JSC::isMarked):
        (JSC::SmallStrings::markChildren):
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::emptyString):
        (JSC::SmallStrings::singleCharacterString):
        (JSC::SmallStrings::singleCharacterStrings):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::flattenDictionaryStructure):
        * runtime/Structure.h:
        (JSC::Structure::storedPrototype):
        (JSC::Structure::storedPrototypeSlot):
        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::uncheckedGet):
        (JSC::WeakGCMap::uncheckedGetSlot):
        (JSC::WeakGCMap::isValid):
        (JSC::::get):
        (JSC::::take):
        (JSC::::set):
        (JSC::::uncheckedRemove):
        * runtime/WriteBarrier.h: Added.
        (JSC::DeprecatedPtr::DeprecatedPtr):
        (JSC::DeprecatedPtr::get):
        (JSC::DeprecatedPtr::operator*):
        (JSC::DeprecatedPtr::operator->):
        (JSC::DeprecatedPtr::slot):
        (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
        (JSC::DeprecatedPtr::operator!):
        (JSC::WriteBarrierBase::set):
        (JSC::WriteBarrierBase::get):
        (JSC::WriteBarrierBase::operator*):
        (JSC::WriteBarrierBase::operator->):
        (JSC::WriteBarrierBase::slot):
        (JSC::WriteBarrierBase::operator UnspecifiedBoolType*):
        (JSC::WriteBarrierBase::operator!):
        (JSC::WriteBarrier::WriteBarrier):
        (JSC::operator==):

2011-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Filter all Heap collection through a common reset function, in
        preparation for adding features triggered by collection.
        https://bugs.webkit.org/show_bug.cgi?id=53396
        
        SunSpider reports no change.

        * runtime/Heap.cpp:
        (JSC::Heap::reportExtraMemoryCostSlowCase): When we're over the extraCost
        limit, just call collectAllGarbage() instead of rolling our own special
        way of resetting the heap. In theory, this may be slower in some cases,
        but it also fixes cases of pathological heap growth that we've seen,
        where the only objects being allocated are temporary and huge
        (<rdar://problem/8885843>).

        (JSC::Heap::allocate):
        (JSC::Heap::collectAllGarbage): Use the shared reset function.

        (JSC::Heap::reset):
        * runtime/Heap.h: Carved a new shared reset function out of the old
        collectAllGarbage.

2011-01-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77025.
        http://trac.webkit.org/changeset/77025
        https://bugs.webkit.org/show_bug.cgi?id=53401

        It made js1_5/Regress/regress-159334.js fail on 64 bit Linux
        (Requested by Ossy on #webkit).

        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FreeListEntry::FreeListEntry):
        (JSC::AVLTreeAbstractorForFreeList::get_less):
        (JSC::AVLTreeAbstractorForFreeList::set_less):
        (JSC::AVLTreeAbstractorForFreeList::get_greater):
        (JSC::AVLTreeAbstractorForFreeList::set_greater):
        (JSC::AVLTreeAbstractorForFreeList::get_balance_factor):
        (JSC::AVLTreeAbstractorForFreeList::set_balance_factor):
        (JSC::AVLTreeAbstractorForFreeList::null):
        (JSC::AVLTreeAbstractorForFreeList::compare_key_key):
        (JSC::AVLTreeAbstractorForFreeList::compare_key_node):
        (JSC::AVLTreeAbstractorForFreeList::compare_node_node):
        (JSC::reverseSortFreeListEntriesByPointer):
        (JSC::reverseSortCommonSizedAllocations):
        (JSC::FixedVMPoolAllocator::release):
        (JSC::FixedVMPoolAllocator::reuse):
        (JSC::FixedVMPoolAllocator::addToFreeList):
        (JSC::FixedVMPoolAllocator::coalesceFreeSpace):
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
        (JSC::FixedVMPoolAllocator::alloc):
        (JSC::FixedVMPoolAllocator::free):
        (JSC::FixedVMPoolAllocator::isValid):
        (JSC::FixedVMPoolAllocator::allocInternal):
        (JSC::FixedVMPoolAllocator::isWithinVMPool):
        (JSC::FixedVMPoolAllocator::addToCommittedByteCount):
        (JSC::ExecutableAllocator::committedByteCount):
        (JSC::maybeModifyVMPoolSize):
        (JSC::ExecutableAllocator::isValid):
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        * wtf/PageReservation.h:
        (WTF::PageReservation::PageReservation):
        (WTF::PageReservation::commit):
        (WTF::PageReservation::decommit):

2011-01-30  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Daniel Bates.

        Code style issue in JavaScriptCore/wtf/CurrentTime.h
        https://bugs.webkit.org/show_bug.cgi?id=53394

        According to rule #3 at http://webkit.org/coding/coding-style.html,
        This patch fix style issue in CurrentTime.h.

        No functionality change, no new tests.

        * wtf/CurrentTime.h:
        (WTF::currentTimeMS):
        (WTF::getLocalTime):

2011-01-30  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] JavaScriptCore does not link on Mac if building WebKit 2
        https://bugs.webkit.org/show_bug.cgi?id=53377

        The option "-whole-archive" is not availabe with the libtool of Mac OS X,
        instead, we can use "-all_load" on Mac.

        * JavaScriptCore.pri:

2011-01-29  Geoffrey Garen  <ggaren@apple.com>

        Sorry Leopard bot -- I committed a change by accident.

        * JavaScriptCore.exp: You may have your symbols back now.

2011-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Simplified Heap iteration
        https://bugs.webkit.org/show_bug.cgi?id=53393

        * runtime/CollectorHeapIterator.h:
        (JSC::CollectorHeapIterator::isValid):
        (JSC::CollectorHeapIterator::isLive):
        (JSC::CollectorHeapIterator::advance): Removed "max" argument to
        advance because it's a constant.
        (JSC::LiveObjectIterator::LiveObjectIterator):
        (JSC::LiveObjectIterator::operator++):
        (JSC::DeadObjectIterator::DeadObjectIterator):
        (JSC::DeadObjectIterator::operator++):
        (JSC::ObjectIterator::ObjectIterator):
        (JSC::ObjectIterator::operator++): Factored out common checks into
        two helper functions -- isValid() for "Am I past the end?" and isLive()
        for "Is the cell I'm pointing to live?".

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::freeBlock):
        (JSC::MarkedSpace::sweep): Always sweep from the beginning of the heap
        to the end, to avoid making sweep subtly reliant on internal Heap state.
        (JSC::MarkedSpace::primaryHeapBegin):
        (JSC::MarkedSpace::primaryHeapEnd): Always be explicit about where
        iteration begins.

2011-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Cameron Zwarich.

        Simplified heap destruction
        https://bugs.webkit.org/show_bug.cgi?id=53392

        * JavaScriptCore.exp:
        * runtime/Heap.cpp:
        (JSC::Heap::destroy):
        * runtime/Heap.h:
        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::destroy):
        * runtime/MarkedSpace.h: Don't go out of our way to destroy GC-protected
        cells last -- the difficult contortions required to do so just don't seem
        justified. We make no guarantees about GC protection after the client
        throws away JSGlobalData, and it doesn't seem like any meaningful
        guarantee is even possible.

2011-01-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Switched heap to use the Bitmap class and removed CollectorBitmap
        https://bugs.webkit.org/show_bug.cgi?id=53391
        
        SunSpider says 1.005x as fast. Seems like a fluke.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocate): Updated for rename and returning a value
        rather than taking a value by reference.

        * runtime/MarkedSpace.h: Code reuse is good.

        * wtf/Bitmap.h:
        (WTF::::testAndSet): Added, since this is the one thing Bitmap was missing
        which CollectorBitmap had. (Renamed from the less conventional "getset".)

        (WTF::::nextPossiblyUnset): Renamed and changed to return a value for
        clarity. It's all the same with inlining.

2011-01-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Some more Heap cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=53357
        
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated exported symbols.

        * runtime/Heap.cpp:
        (JSC::Heap::reportExtraMemoryCostSlowCase): Renamed recordExtraCost to 
        reportExtraMemoryCostSlowCase to match our naming conventions.

        (JSC::Heap::capacity): Renamed size to capacity because this function
        returns the capacity of the heap, including unused portions.

        * runtime/Heap.h:
        (JSC::Heap::globalData):
        (JSC::Heap::markedSpace):
        (JSC::Heap::machineStackMarker):
        (JSC::Heap::reportExtraMemoryCost): Moved statics to the top of the file.
        Moved ctor and dtor to the beginning of the class definition. Grouped
        functions by purpose.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::capacity): Renamed size to capacity because this
        function returns the capacity of the heap, including unused portions.

        * runtime/MarkedSpace.h: Removed statistics and the Statistics class because
        the same information can be gotten just by calling size() and capacity().

        * runtime/MemoryStatistics.cpp:
        * runtime/MemoryStatistics.h: Ditto.

2011-01-29  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

        Move wince/mt19937ar.c to ThirdParty and make it a policy choice
        https://bugs.webkit.org/show_bug.cgi?id=53253

        Make inclusion of MT19937 a policy decision.

        Currently, we hardcoded to  use MT19937 when building for
        Windows CE. Instead, we should make this a policy decision
        with the Windows CE port using this by default.

        * JavaScriptCore.pri: Append Source/ThirdParty to the end
        of the list include directories.
        * wtf/CMakeLists.txt: Ditto.
        * wtf/Platform.h: Defined WTF_USE_MERSENNE_TWISTER_19937 when
        building for Windows CE.
        * wtf/RandomNumber.cpp:
        (WTF::randomNumber): Substituted USE(MERSENNE_TWISTER_19937) for OS(WINCE).

2011-01-29  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by David Kilzer.

        Bug 53374 - Remove uses of unsafe string functions in debugging code
        https://bugs.webkit.org/show_bug.cgi?id=53374

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

2011-01-29  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Oliver Hunt.

        JavaScriptCoreUseJIT environment variable broken
        https://bugs.webkit.org/show_bug.cgi?id=53372

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Check the actual value in the string returned
        by getenv() rather than just doing a NULL check on the return value.

2011-01-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Move CharacterNames.h into WTF directory
        https://bugs.webkit.org/show_bug.cgi?id=49618

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/unicode/CharacterNames.h: Renamed from WebCore/platform/text/CharacterNames.h.
        * wtf/unicode/UTF8.cpp:

2011-01-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Gavin Barraclough.

        Add various clampToInt() methods to MathExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=52910
        
        Add functions for clamping doubles and floats to valid int
        ranges, for signed and positive integers.

        * wtf/MathExtras.h:
        (clampToInteger):
        (clampToPositiveInteger):

2011-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77006 and r77020.
        http://trac.webkit.org/changeset/77006
        http://trac.webkit.org/changeset/77020
        https://bugs.webkit.org/show_bug.cgi?id=53360

        "Broke Windows tests" (Requested by rniwa on #webkit).

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
        (JSC::JSCallbackObject::setPrivateProperty):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::put):
        (JSC::::staticFunctionGetter):
        * API/JSObjectRef.cpp:
        (JSObjectMakeConstructor):
        (JSObjectSetPrivateProperty):
        * API/JSWeakObjectMapRefInternal.h:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::globalObject):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        (JSC::BytecodeGenerator::findScopedProperty):
        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        (JSC::DebuggerActivation::markChildren):
        * debugger/DebuggerActivation.h:
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/CallFrame.h:
        (JSC::ExecState::exception):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::appendSourceToError):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (GlobalObject::GlobalObject):
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):
        * runtime/Arguments.cpp:
        (JSC::Arguments::markChildren):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        * runtime/Arguments.h:
        (JSC::Arguments::setActivation):
        (JSC::Arguments::Arguments):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
        (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        (JSC::constructBoolean):
        (JSC::constructBooleanFromImmediateBoolean):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/ConservativeSet.cpp:
        (JSC::ConservativeSet::grow):
        * runtime/ConservativeSet.h:
        (JSC::ConservativeSet::~ConservativeSet):
        (JSC::ConservativeSet::mark):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncSetTime):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::markChildren):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::GetterSetter):
        (JSC::GetterSetter::getter):
        (JSC::GetterSetter::setGetter):
        (JSC::GetterSetter::setter):
        (JSC::GetterSetter::setSetter):
        * runtime/GlobalEvalFunction.cpp:
        (JSC::GlobalEvalFunction::GlobalEvalFunction):
        (JSC::GlobalEvalFunction::markChildren):
        * runtime/GlobalEvalFunction.h:
        (JSC::GlobalEvalFunction::cachedGlobalObject):
        * runtime/Heap.cpp:
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::markTempSortVectors):
        (JSC::Heap::markRoots):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::value):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::markChildren):
        (JSC::JSActivation::put):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::unshiftCount):
        (JSC::JSArray::sort):
        (JSC::JSArray::fillArgList):
        (JSC::JSArray::copyToRegisters):
        (JSC::JSArray::compactForSorting):
        * runtime/JSArray.h:
        (JSC::JSArray::getIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::uncheckedSetIndex):
        (JSC::JSArray::markChildrenDirect):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::toThisObject):
        (JSC::JSCell::MarkStack::append):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::resetPrototype):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
        (JSC::JSGlobalObject::regExpConstructor):
        (JSC::JSGlobalObject::errorConstructor):
        (JSC::JSGlobalObject::evalErrorConstructor):
        (JSC::JSGlobalObject::rangeErrorConstructor):
        (JSC::JSGlobalObject::referenceErrorConstructor):
        (JSC::JSGlobalObject::syntaxErrorConstructor):
        (JSC::JSGlobalObject::typeErrorConstructor):
        (JSC::JSGlobalObject::URIErrorConstructor):
        (JSC::JSGlobalObject::evalFunction):
        (JSC::JSGlobalObject::objectPrototype):
        (JSC::JSGlobalObject::functionPrototype):
        (JSC::JSGlobalObject::arrayPrototype):
        (JSC::JSGlobalObject::booleanPrototype):
        (JSC::JSGlobalObject::stringPrototype):
        (JSC::JSGlobalObject::numberPrototype):
        (JSC::JSGlobalObject::datePrototype):
        (JSC::JSGlobalObject::regExpPrototype):
        (JSC::JSGlobalObject::methodCallDummy):
        (JSC::Structure::prototypeForLookup):
        (JSC::constructArray):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::object):
        (JSC::Stringifier::markAggregate):
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::callReviver):
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::removeDirect):
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSObject::getDirectOffset):
        (JSC::JSObject::putDirectOffset):
        (JSC::JSObject::flattenDictionaryObject):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::JSValue::putDirect):
        (JSC::JSObject::allocatePropertyStorageInline):
        (JSC::JSObject::markChildrenDirect):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::get):
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::markChildren):
        * runtime/JSString.cpp:
        (JSC::StringObject::create):
        * runtime/JSValue.h:
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::markChildren):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::internalValue):
        (JSC::JSWrapperObject::setInternalValue):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::parse):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::lookupPut):
        * runtime/MarkStack.h:
        (JSC::MarkStack::appendValues):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        (JSC::constructWithNumberConstructor):
        * runtime/NumberObject.cpp:
        (JSC::constructNumber):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        * runtime/Operations.h:
        (JSC::normalizePrototypeChain):
        (JSC::resolveBase):
        * runtime/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::setExistingProperty):
        (JSC::PutPropertySlot::setNewProperty):
        (JSC::PutPropertySlot::base):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::~ScopeChainNode):
        (JSC::ScopeChainIterator::operator*):
        (JSC::ScopeChainIterator::operator->):
        (JSC::ScopeChain::top):
        * runtime/ScopeChainMark.h:
        (JSC::ScopeChain::markAggregate):
        * runtime/SmallStrings.cpp:
        (JSC::isMarked):
        (JSC::SmallStrings::markChildren):
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::emptyString):
        (JSC::SmallStrings::singleCharacterString):
        (JSC::SmallStrings::singleCharacterStrings):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::flattenDictionaryStructure):
        * runtime/Structure.h:
        (JSC::Structure::storedPrototype):
        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::uncheckedGet):
        (JSC::WeakGCMap::isValid):
        (JSC::::get):
        (JSC::::take):
        (JSC::::set):
        (JSC::::uncheckedRemove):
        * runtime/WriteBarrier.h: Removed.

2011-01-28  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=53352
        Heavy external fragmentation in FixedVMPoolAllocator can lead to a CRASH().

        The FixedVMPoolAllocator currently uses a best fix policy -
        switch to first fit, this is less prone to external fragmentation.

        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::AllocationTableSizeClass::AllocationTableSizeClass):
        (JSC::AllocationTableSizeClass::blockSize):
        (JSC::AllocationTableSizeClass::blockCount):
        (JSC::AllocationTableSizeClass::blockAlignment):
        (JSC::AllocationTableSizeClass::size):
        (JSC::AllocationTableLeaf::AllocationTableLeaf):
        (JSC::AllocationTableLeaf::~AllocationTableLeaf):
        (JSC::AllocationTableLeaf::allocate):
        (JSC::AllocationTableLeaf::free):
        (JSC::AllocationTableLeaf::isEmpty):
        (JSC::AllocationTableLeaf::isFull):
        (JSC::AllocationTableLeaf::size):
        (JSC::AllocationTableLeaf::classForSize):
        (JSC::AllocationTableLeaf::dump):
        (JSC::LazyAllocationTable::LazyAllocationTable):
        (JSC::LazyAllocationTable::~LazyAllocationTable):
        (JSC::LazyAllocationTable::allocate):
        (JSC::LazyAllocationTable::free):
        (JSC::LazyAllocationTable::isEmpty):
        (JSC::LazyAllocationTable::isFull):
        (JSC::LazyAllocationTable::size):
        (JSC::LazyAllocationTable::dump):
        (JSC::LazyAllocationTable::classForSize):
        (JSC::AllocationTableDirectory::AllocationTableDirectory):
        (JSC::AllocationTableDirectory::~AllocationTableDirectory):
        (JSC::AllocationTableDirectory::allocate):
        (JSC::AllocationTableDirectory::free):
        (JSC::AllocationTableDirectory::isEmpty):
        (JSC::AllocationTableDirectory::isFull):
        (JSC::AllocationTableDirectory::size):
        (JSC::AllocationTableDirectory::classForSize):
        (JSC::AllocationTableDirectory::dump):
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
        (JSC::FixedVMPoolAllocator::alloc):
        (JSC::FixedVMPoolAllocator::free):
        (JSC::FixedVMPoolAllocator::allocated):
        (JSC::FixedVMPoolAllocator::isValid):
        (JSC::FixedVMPoolAllocator::classForSize):
        (JSC::FixedVMPoolAllocator::offsetToPointer):
        (JSC::FixedVMPoolAllocator::pointerToOffset):
        (JSC::ExecutableAllocator::committedByteCount):
        (JSC::ExecutableAllocator::isValid):
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        * wtf/PageReservation.h:
        (WTF::PageReservation::PageReservation):
        (WTF::PageReservation::commit):
        (WTF::PageReservation::decommit):
        (WTF::PageReservation::committed):

2011-01-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        Move the MarkStack over to a slot based marking API.

        In order to avoiding aliasing concerns there are two new types
        that need to be used when holding on to JSValues and JSCell that
        need to be marked: WriteBarrier and DeprecatedPtr.  WriteBarrier
        is expected to be used for any JSValue or Cell that's lifetime and
        marking is controlled by another GC object.  DeprecatedPtr is used
        for any value that we need to rework ownership for.

        The change over to this model has produced a large amount of
        code changes, but they are mostly mechanical (forwarding JSGlobalData,
        etc).

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
        (JSC::JSCallbackObject::setPrivateProperty):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::put):
        (JSC::::staticFunctionGetter):
        * API/JSObjectRef.cpp:
        (JSObjectMakeConstructor):
        (JSObjectSetPrivateProperty):
        * API/JSWeakObjectMapRefInternal.h:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::globalObject):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        (JSC::BytecodeGenerator::findScopedProperty):
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        (JSC::DebuggerActivation::markChildren):
        * debugger/DebuggerActivation.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::appendSourceToError):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::privateExecute):
        * interpreter/Register.h:
        (JSC::Register::jsValueSlot):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (GlobalObject::GlobalObject):
        * runtime/Arguments.cpp:
        (JSC::Arguments::markChildren):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        * runtime/Arguments.h:
        (JSC::Arguments::setActivation):
        (JSC::Arguments::Arguments):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
        (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        (JSC::constructBoolean):
        (JSC::constructBooleanFromImmediateBoolean):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/ConservativeSet.h:
        (JSC::ConservativeSet::mark):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncSetTime):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::markChildren):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::GetterSetter):
        (JSC::GetterSetter::getter):
        (JSC::GetterSetter::setGetter):
        (JSC::GetterSetter::setter):
        (JSC::GetterSetter::setSetter):
        * runtime/GlobalEvalFunction.cpp:
        (JSC::GlobalEvalFunction::GlobalEvalFunction):
        (JSC::GlobalEvalFunction::markChildren):
        * runtime/GlobalEvalFunction.h:
        (JSC::GlobalEvalFunction::cachedGlobalObject):
        * runtime/Heap.cpp:
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::markTempSortVectors):
        (JSC::Heap::markRoots):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::value):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::put):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::unshiftCount):
        (JSC::JSArray::sort):
        (JSC::JSArray::fillArgList):
        (JSC::JSArray::copyToRegisters):
        (JSC::JSArray::compactForSorting):
        * runtime/JSArray.h:
        (JSC::JSArray::getIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::uncheckedSetIndex):
        (JSC::JSArray::markChildrenDirect):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSCell.h:
        (JSC::JSCell::MarkStack::append):
        (JSC::JSCell::MarkStack::appendCell):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::resetPrototype):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
        (JSC::JSGlobalObject::regExpConstructor):
        (JSC::JSGlobalObject::errorConstructor):
        (JSC::JSGlobalObject::evalErrorConstructor):
        (JSC::JSGlobalObject::rangeErrorConstructor):
        (JSC::JSGlobalObject::referenceErrorConstructor):
        (JSC::JSGlobalObject::syntaxErrorConstructor):
        (JSC::JSGlobalObject::typeErrorConstructor):
        (JSC::JSGlobalObject::URIErrorConstructor):
        (JSC::JSGlobalObject::evalFunction):
        (JSC::JSGlobalObject::objectPrototype):
        (JSC::JSGlobalObject::functionPrototype):
        (JSC::JSGlobalObject::arrayPrototype):
        (JSC::JSGlobalObject::booleanPrototype):
        (JSC::JSGlobalObject::stringPrototype):
        (JSC::JSGlobalObject::numberPrototype):
        (JSC::JSGlobalObject::datePrototype):
        (JSC::JSGlobalObject::regExpPrototype):
        (JSC::JSGlobalObject::methodCallDummy):
        (JSC::constructArray):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::object):
        (JSC::Stringifier::Holder::objectSlot):
        (JSC::Stringifier::markAggregate):
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::callReviver):
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::removeDirect):
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSObject::putDirectOffset):
        (JSC::JSObject::putUndefinedAtDirectOffset):
        (JSC::JSObject::flattenDictionaryObject):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectFunction):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::JSValue::putDirect):
        (JSC::JSObject::allocatePropertyStorageInline):
        (JSC::JSObject::markChildrenDirect):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::markChildren):
        * runtime/JSString.cpp:
        (JSC::StringObject::create):
        * runtime/JSValue.h:
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::markChildren):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::internalValue):
        (JSC::JSWrapperObject::setInternalValue):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::parse):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::lookupPut):
        * runtime/MarkStack.h:
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        (JSC::constructWithNumberConstructor):
        * runtime/NumberObject.cpp:
        (JSC::constructNumber):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        * runtime/Operations.h:
        (JSC::normalizePrototypeChain):
        (JSC::resolveBase):
        * runtime/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::setExistingProperty):
        (JSC::PutPropertySlot::setNewProperty):
        (JSC::PutPropertySlot::base):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::~ScopeChainNode):
        (JSC::ScopeChainIterator::operator*):
        (JSC::ScopeChainIterator::operator->):
        (JSC::ScopeChain::top):
        * runtime/ScopeChainMark.h:
        (JSC::ScopeChain::markAggregate):
        * runtime/SmallStrings.cpp:
        (JSC::isMarked):
        (JSC::SmallStrings::markChildren):
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::emptyString):
        (JSC::SmallStrings::singleCharacterString):
        (JSC::SmallStrings::singleCharacterStrings):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/Structure.cpp:
        (JSC::Structure::flattenDictionaryStructure):
        * runtime/Structure.h:
        (JSC::Structure::storedPrototypeSlot):
        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::uncheckedGet):
        (JSC::WeakGCMap::uncheckedGetSlot):
        (JSC::::get):
        (JSC::::take):
        (JSC::::set):
        (JSC::::uncheckedRemove):
        * runtime/WriteBarrier.h: Added.
        (JSC::DeprecatedPtr::DeprecatedPtr):
        (JSC::DeprecatedPtr::get):
        (JSC::DeprecatedPtr::operator*):
        (JSC::DeprecatedPtr::operator->):
        (JSC::DeprecatedPtr::slot):
        (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
        (JSC::DeprecatedPtr::operator!):
        (JSC::WriteBarrierBase::set):
        (JSC::WriteBarrierBase::get):
        (JSC::WriteBarrierBase::operator*):
        (JSC::WriteBarrierBase::operator->):
        (JSC::WriteBarrierBase::slot):
        (JSC::WriteBarrierBase::operator UnspecifiedBoolType*):
        (JSC::WriteBarrierBase::operator!):
        (JSC::WriteBarrier::WriteBarrier):
        (JSC::operator==):

2011-01-28  Adam Roben  <aroben@apple.com>

        Chromium build fix after r76967

        * wtf/ThreadingPrimitives.h: Use OS(WINDOWS) instead of PLATFORM(WIN), to match other
        similar macros in this file.

2011-01-28  Michael Saboff  <msaboff@apple.com>

        Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
        https://bugs.webkit.org/show_bug.cgi?id=53271

        Reapplying this this change.  No change from prior patch in
        JavaScriptCore.

        Added new isValid() methods to check if a contained object in
        a WeakGCMap is valid when using an unchecked iterator.

        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::isValid):

2011-01-27  Adam Roben  <aroben@apple.com>

        Extract code to convert a WTF absolute time to a Win32 wait interval into a separate
        function

        Fixes <http://webkit.org/b/53208> <rdar://problem/8922490> BinarySemaphore should wrap a
        Win32 event

        Reviewed by Dave Hyatt.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export the new function.

        * wtf/ThreadingPrimitives.h: Declare the new function.

        * wtf/ThreadingWin.cpp:
        (WTF::ThreadCondition::timedWait): Moved code to convert the absolute time to a wait
        interval from here...
        (WTF::absoluteTimeToWaitTimeoutInterval): ...to here.

2011-01-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Add basic rubber banding support
        <rdar://problem/8219429>
        https://bugs.webkit.org/show_bug.cgi?id=53277

        * wtf/Platform.h: Add ENABLE for rubber banding.

2011-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r76893.
        http://trac.webkit.org/changeset/76893
        https://bugs.webkit.org/show_bug.cgi?id=53287

        It made some tests crash on GTK and Qt debug bots (Requested
        by Ossy on #webkit).

        * runtime/WeakGCMap.h:

2011-01-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add WTFString method to compare equality with Vector<UChar>
        https://bugs.webkit.org/show_bug.cgi?id=53266

        I'm planning to use this method in the new XSS filter implementation,
        but it seems generally useful.

        * wtf/text/StringImpl.h:
        (WTF::equalIgnoringNullity):
        * wtf/text/WTFString.h:
        (WTF::equalIgnoringNullity):

2011-01-27  Michael Saboff  <msaboff@apple.com>

        Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
        https://bugs.webkit.org/show_bug.cgi?id=53271

        Added new isValid() methods to check if a contained object in
        a WeakGCMap is valid when using an unchecked iterator.

        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::isValid):

2011-01-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Add events to represent the start/end of a gesture scroll
        https://bugs.webkit.org/show_bug.cgi?id=53215

        * wtf/Platform.h: Add ENABLE for gesture events. 

2011-01-26  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Symbian] Fix --minimal build
        https://bugs.webkit.org/show_bug.cgi?id=52839

        Move definition of USE_SYSTEM_MALLOC out of pri file.
        Put it in platform.h instead.

        * wtf/Platform.h:
        * wtf/TCSystemAlloc.cpp:
        * wtf/wtf.pri:

2011-01-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WINCE] Add JIT support to build system
        https://bugs.webkit.org/show_bug.cgi?id=53079

        * CMakeListsWinCE.txt:

2011-01-25  Adam Roben  <aroben@apple.com>

        Windows Production build fix

        Reviewed by Steve Falkenburg.

        * JavaScriptCore.vcproj/JavaScriptCore.make: Set BUILDSTYLE to Release_PGO at the very start
        of the file so that ConfigurationBuildDir takes that into account. Also set it the right way
        (by redefining the macro) rather than the wrong way (by modifying the environment variable).

2011-01-25  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamped by Adam Roben.

        Windows production build fix.
        Use correct environment variable escaping

        * JavaScriptCore.vcproj/JavaScriptCore.make:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:

2011-01-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        JSON.stringify processing time exponentially grows with size of object
        https://bugs.webkit.org/show_bug.cgi?id=51922

        Remove last use of reserveCapacity from JSON stringification, as it results
        in appalling append behaviour when there are a large number of property names
        and nothing else.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendQuotedString):

2011-01-25  Antti Koivisto  <antti@apple.com>

        Not reviewed.
        
        Try to fix windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-01-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION: Leak in JSParser::Scope::copyCapturedVariablesToVector()
        https://bugs.webkit.org/show_bug.cgi?id=53061
         
        Cache did not know about the subclass so failed to fully delete the items. 
        Got rid of the subclass and moved the classes to separate files.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * parser/JSParser.cpp:
        (JSC::JSParser::Scope::saveFunctionInfo):
        (JSC::JSParser::Scope::restoreFunctionInfo):
        (JSC::JSParser::findCachedFunctionInfo):
        (JSC::JSParser::parseFunctionInfo):
        * parser/SourceProvider.h:
        * parser/SourceProviderCache.cpp: Added.
        (JSC::SourceProviderCache::~SourceProviderCache):
        (JSC::SourceProviderCache::byteSize):
        * parser/SourceProviderCache.h: Added.
        (JSC::SourceProviderCache::SourceProviderCache):
        (JSC::SourceProviderCache::add):
        (JSC::SourceProviderCache::get):
        * parser/SourceProviderCacheItem.h: Added.
        (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
        (JSC::SourceProviderCacheItem::approximateByteSize):
        (JSC::SourceProviderCacheItem::closeBraceToken):

2011-01-25  Marcilio Mendonca  <mamendonca@rim.com>

        Reviewed by Darin Adler.

        Bug 53087: Refactoring: replaced a hanging "else" with a "return"
        statement
        https://bugs.webkit.org/show_bug.cgi?id=53087.

        Refactoring work: Replaced a hanging "else" within an #if PLATFORM(M
        with a "return" so that the code is more readable and less error pro
        (e.g., "else" doesn't use braces so adding extra lines to the else
        block won't have any effect; even worse, code still compiles
        successfully.

        * wtf/Assertions.cpp:

2011-01-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Eric Seidel.

        Change ENABLE_3D_CANVAS to ENABLE_WEBGL
        https://bugs.webkit.org/show_bug.cgi?id=53041

        * Configurations/FeatureDefines.xcconfig:

2011-01-25  Adam Roben  <aroben@apple.com>

        Windows Production build fix

        * JavaScriptCore.vcproj/JavaScriptCore.make: Added a missing "set".

2011-01-25  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Add missing defines for COMPILER(RVCT) && CPU(ARM_THUMB2)
        https://bugs.webkit.org/show_bug.cgi?id=52949

        * jit/JITStubs.cpp:

2011-01-24  Adam Roben  <aroben@apple.com>

        Windows Production build fix

        * JavaScriptCore.vcproj/JavaScriptCore.make: Update for move of JavaScriptCore into Source.

2011-01-24  Peter Varga  <pvarga@webkit.org>

        Reviewed by Oliver Hunt.

        Optimize regex patterns which contain empty alternatives
        https://bugs.webkit.org/show_bug.cgi?id=51395

        Eliminate the empty alternatives from the regex pattern and convert it to do
        the matching in an easier way.

        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::atomParenthesesEnd):

2011-01-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Move project files into Source
        https://bugs.webkit.org/show_bug.cgi?id=52891

        * JavaScriptCore.pri:
        * JavaScriptCore.pro:
        * jsc.pro:

2011-01-23  Mark Rowe  <mrowe@apple.com>

        Follow-up to r76477.

        Fix the scripts that detect problematic code such as static initializers
        and destructors, weak vtables, inappropriate files in the framework wrappers,
        and public headers including private headers. These had all been broken
        since the projects were moved in to the Source directory as the paths to the
        scripts were not updated at that time.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-01-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Use WTF::StringHasher in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=52934

        Add an additional function to calculate the hash
        of data with a runtimedependent size.

        * wtf/StringHasher.h:
        (WTF::StringHasher::createBlobHash):

2011-01-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Fix comment in String::ascii()
        https://bugs.webkit.org/show_bug.cgi?id=52980

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

2011-01-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

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

        * wtf/text/WTFString.h:
        (WTF::String::containsOnlyLatin1):
        (WTF::charactersAreAllLatin1):

2011-01-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Oliver Hunt.

        Remove obsolete JSVALUE32 code
        https://bugs.webkit.org/show_bug.cgi?id=52948

        r70111 removed support for JSVALUE32.
        ARM, MIPS and X86 support JSVALUE32_64 only.

        * jit/JITStubs.cpp:

2011-01-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dan Bernstein.

        ASSERT running run-webkit-tests --threaded.
        https://bugs.webkit.org/show_bug.cgi?id=52971
        
        SunSpider and v8 report no change.

        * runtime/ConservativeSet.cpp:
        (JSC::ConservativeSet::grow):
        (JSC::ConservativeSet::add):
        * runtime/ConservativeSet.h: Tweaked the inline capacity to 128, and
        the growth policy to 2X, to make SunSpider and v8 happy.
        (JSC::ConservativeSet::ConservativeSet):
        (JSC::ConservativeSet::~ConservativeSet):
        (JSC::ConservativeSet::mark): Use OSAllocator directly, instead of malloc.
        Malloc is forbidden during a multi-threaded mark phase because it can
        cause deadlock.

2011-01-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Geoffrey Garen.

        Rubber-stamped by Maciej Stachowiak.

        A few of Maciej's review suggestions for my last patch.
        https://bugs.webkit.org/show_bug.cgi?id=52946        

        SunSpider reports no change.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj: Updated build systems.

        * runtime/ConservativeSet.cpp: Added.
        (JSC::isPointerAligned):
        (JSC::ConservativeSet::add):
        * runtime/ConservativeSet.h: Added.
        (JSC::ConservativeSet::ConservativeSet):
        (JSC::ConservativeSet::mark): Split ConservativeSet out into its own
        file, and moved the conservative check into ConservativeSet::add, making
        ConservativeSet's responsibility clearer.

        * runtime/Heap.cpp:
        (JSC::Heap::markRoots):
        * runtime/MachineStackMarker.cpp:
        (JSC::MachineStackMarker::markCurrentThreadConservativelyInternal):
        (JSC::MachineStackMarker::markOtherThreadConservatively):
        * runtime/MachineStackMarker.h:
        * runtime/MarkStack.h: Updated for changes above.

2011-01-22  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r76430.

        * runtime/MachineStackMarker.cpp:
        (JSC::swapIfBackwards):

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

        Reviewed by Beth Dakin.

        Reorganized MarkedSpace, making many of its functions private.

        * runtime/JSCell.h:
        (JSC::JSCell::Heap::heap):
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::globalData):
        (JSC::MarkedSpace::heap):

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

        Try to fix build: moved helper function out of #ifdef.

        * runtime/MachineStackMarker.cpp:
        (JSC::swapIfBackwards):

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

        Rubber-stamped by Maciej Stachowiak.

        A few of Maciej's review suggestions for my last patch.
        https://bugs.webkit.org/show_bug.cgi?id=52946        

        SunSpider reports no change.

        * runtime/MachineStackMarker.cpp:
        (JSC::swapIfBackwards): Added a helper function for handling platforms
        where the stack can grow in any direction.

        (JSC::MachineStackMarker::markCurrentThreadConservativelyInternal):
        (JSC::MachineStackMarker::markOtherThreadConservatively): Use the helper
        function.

        (JSC::isPointerAligned): Use "!" instead of "==0" because a robot told me to.

        (JSC::MachineStackMarker::markConservatively): Changed to use a more
        standard looping idiom, and to use the helper function above.

        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::isCellAligned): Use "!" instead of "==0" because a robot told me to.

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

        Reviewed by Maciej Stachowiak.

        Cleaned up some conservative marking code.
        https://bugs.webkit.org/show_bug.cgi?id=52946
        
        SunSpider reports no change.

        * interpreter/RegisterFile.h: No need for a special marking function,
        since we already expose a start() and end().

        * runtime/Heap.cpp:
        (JSC::Heap::registerFile):
        (JSC::Heap::markRoots):
        * runtime/Heap.h:
        (JSC::Heap::contains): Migrated markConservatively() to the machine stack
        marker class. Now, Heap just provides a contains() function, which the
        machine stack marker uses for checking whether a pointer points into the heap.

        * runtime/MachineStackMarker.cpp:
        (JSC::MachineStackMarker::markCurrentThreadConservativelyInternal):
        (JSC::MachineStackMarker::markOtherThreadConservatively):
        (JSC::isPointerAligned):
        (JSC::MachineStackMarker::markConservatively):
        * runtime/MachineStackMarker.h: Move the conservative marking code here.

        * runtime/MarkStack.h:
        (JSC::ConservativeSet::add):
        (JSC::ConservativeSet::mark): Changed to using a vector instead of hash
        set. Vector seems to be a bit faster, and it generates smaller code.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::containsSlowCase):
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::isCellAligned):
        (JSC::MarkedSpace::isPossibleCell):
        (JSC::MarkedSpace::contains): Kept the code for determining whether a
        pointer pointed into marked space, and moved the code for marking
        a set of conservative pointers into the machine stack marker.

        * wtf/HashSet.h:
        (WTF::::add): Added two missing inlines that I noticed while testing
        vector vs hash set.

2011-01-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Work around a Clang bug <rdar://problem/8876150> that leads to it incorrectly emitting an access
        control warning when a client tries to use operator bool exposed above via "using PageBlock::operator bool".

        * wtf/PageAllocation.h:
        (WTF::PageAllocation::operator bool):
        * wtf/PageReservation.h:
        (WTF::PageReservation::operator bool):

2011-01-21  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        [RegexFuzz] Hang with forward assertion
        https://bugs.webkit.org/show_bug.cgi?id=52825
        <rdar://problem/8894332>

        The backtrackTo label from the first term in a list of terms is
        being overwritten by processing of subsequent terms.  Changed
        copyBacktrackToLabel() to check for an existing bcaktrackTo label
        before copying and renamed it to propagateBacktrackToLabel() since
        it no longer copies.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::BacktrackDestination::propagateBacktrackToLabel):
        (JSC::Yarr::YarrGenerator::generateParenthesesSingle):

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

        Reviewed by Sam Weinig.

        Moved the mark stack from global data to the heap, since it pertains
        to the heap, and not the virtual machine as a whole.
        https://bugs.webkit.org/show_bug.cgi?id=52930
        
        SunSpider reports no change.

        * runtime/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::markRoots):
        * runtime/Heap.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:

2011-01-21  Peter Gal  <galpeter@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        REGRESSION(r76177): All JavaScriptCore tests fail on ARM
        https://bugs.webkit.org/show_bug.cgi?id=52814

        Get the approximateByteSize value before releasing the OwnPtr.

        * parser/JSParser.cpp:
        (JSC::JSParser::parseFunctionInfo):

2011-01-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Remove unnecessary <stdio.h> include
        https://bugs.webkit.org/show_bug.cgi?id=52884

        * jit/JIT.cpp: remove unnecessary include.

2011-01-20  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Maciej Stachowiak.

        Added OwnPtrCommon.h because OwnArrayPtr::set calls deleteOwnedPtr.

        * wtf/OwnArrayPtr.h:

2011-01-20  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Oliver Hunt.

        [WINCE] Remove obsolete JSVALUE32 code
        https://bugs.webkit.org/show_bug.cgi?id=52450

        Remove the "offset hack" in create_jit_stubs, since we
        only support JSVALUE32_64 in the meantime.

        * create_jit_stubs: Removed offset argument
        * jit/JITStubs.cpp:

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

        Reviewed by Oliver Hunt.

        When marking conservatively, guard against reviving dead objects.
        https://bugs.webkit.org/show_bug.cgi?id=52840
        
        SunSpider and v8 say no change.

        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::markCallFrames): Updated to use the ConservativeSet API.

        * runtime/Heap.cpp:
        (JSC::Heap::recordExtraCost): No need to guard against conservative
        marking reviving dead objects anymore, since the conservative marking
        mechanism guards against this now.

        (JSC::Heap::markConservatively):
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::markTempSortVectors): Don't drain the mark stack inside a
        marking function. We want to establish a separation of concerns between
        visiting roots and draining the mark stack.

        (JSC::Heap::markRoots): Gather the set of conservative references before
        clearning mark bits, because conservative marking now uses the mark bits
        to determine if a reference is valid, and avoid reviving dead objects.

        (JSC::Heap::collectAllGarbage): No need to guard against conservative
        marking reviving dead objects anymore, since the conservative marking
        mechanism guards against this now.

        * runtime/Heap.h: Updated to use the ConservativeSet API.

        * runtime/MachineStackMarker.cpp:
        (JSC::MachineStackMarker::markCurrentThreadConservativelyInternal):
        (JSC::MachineStackMarker::markCurrentThreadConservatively):
        (JSC::MachineStackMarker::markOtherThreadConservatively):
        (JSC::MachineStackMarker::markMachineStackConservatively):
        * runtime/MachineStackMarker.h: Ditto.

        * runtime/MarkStack.h:
        (JSC::ConservativeSet::add):
        (JSC::ConservativeSet::mark): Added ConservativeSet, for gathering the
        set of conservative references. This is different from MarkStack, since
        we don't mark the set until it is completely gathered.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::freeBlock):
        (JSC::MarkedSpace::resizeBlocks):
        (JSC::MarkedSpace::markConservatively):
        * runtime/MarkedSpace.h: When marking conservatively, guard against
        reviving dead objects.

2011-01-20  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Geoffrey Garen.

        [Symbian] Fix StackBounds::initialize()
        https://bugs.webkit.org/show_bug.cgi?id=52842

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::initialize): Use TThreadStackInfo.iLimit for stack limit

2011-01-20  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/8890203> [RegexFuzz] Crash in generated code (52773)
        https://bugs.webkit.org/show_bug.cgi?id=52773

        Fixed case where an existing DataLabelPtr is overwritten.  The
        replacing DataLabelPtr is now resolved immediately in
        linkDataLabelToBacktrackIfExists().  Cleanup - eliminated bool
        return value for the routine as it was never used.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::TermGenerationState::linkDataLabelToBacktrackIfExists):

2011-01-20  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][WK2] WebKit2 enabled build fails to link

        Work around undefined reference linking issues until the buildsystem gets redesigned.
        These issues first occured in minimal builds (see BUG 50519).

        * JavaScriptCore.pri: link as whole-archive for WebKit2 builds

2011-01-20  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Refactoring of the custom allocation framework
        https://bugs.webkit.org/show_bug.cgi?id=49897

        Inheriting from FastAllocBase can result in objects getting larger (bug #33896, #46589).
        The modification replaces Noncopyable and FastAllocBase classes and these inherits with their
        equivalent macro implementation at the necessary places.

        * wtf/FastAllocBase.h: Turn FastAllocBase's implementation into a macro.

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

        Reviewed by Maciej Stachowiak.

        Follow-up to r75766 / <rdar://problem/5469576>.

        We were failing to initialize the key, causing all sorts of unexpected behavior.

        * wtf/FastMalloc.cpp:
        (WTF::setThreadHeap):
        (WTF::TCMalloc_ThreadCache::GetThreadHeap):
        (WTF::TCMalloc_ThreadCache::InitTSD): Ensure that the key is initialized.

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

        Reviewed by Darin Adler.

        Rolled back in r76078, with crash fixed.
        https://bugs.webkit.org/show_bug.cgi?id=52668
        
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::markChildren): Account for the fact that the global
        object moves its variables into and out of the register file. While out
        of the register file, the symbol table's size is not an accurate count
        for the size of the register array, since the BytecodeGenerator might
        be compiling, adding items to the symbol table.
        
2011-01-18  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        Stack overflow when converting an Error object to string
        https://bugs.webkit.org/show_bug.cgi?id=46410

        * Android.mk: Added StringRecursionChecker.cpp and
        StringRecursionChecker.h.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * JavaScriptCore.gypi: Ditto.
        * JavaScriptCore.pro: Ditto.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString): Use StringRecursionChecker instead
        of the older hand-written code to do the same thing.
        (JSC::arrayProtoFuncToLocaleString): Ditto.
        (JSC::arrayProtoFuncJoin): Ditto.

        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString): Use StringRecursionChecker.

        * runtime/JSGlobalData.h: Renamed arrayVisitedElements to
        stringRecursionCheckVisitedObjects.

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

        * runtime/StringRecursionChecker.cpp: Added.
        * runtime/StringRecursionChecker.h: Added.

2011-01-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove non-spec support for callable RegExp
        https://bugs.webkit.org/show_bug.cgi?id=28285

        Remove support for callable regexps.  If it breaks sites we can
        just roll this out.

        * runtime/RegExpObject.cpp:
        * runtime/RegExpObject.h:
        * tests/mozilla/expected.html: update results.

2011-01-19  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        Cache function offsets to speed up javascript parsing
        https://bugs.webkit.org/show_bug.cgi?id=52622
        
        Use cache to save function offsets and some other info.
        This avoids quite a bit of work when reparsing the source.

        * parser/ASTBuilder.h:
        * parser/JSParser.cpp:
        (JSC::JSParser::CachedFunctionInfo::CachedFunctionInfo):
        (JSC::JSParser::CachedFunctionInfo::approximateByteSize):
        (JSC::JSParser::CachedFunctionInfo::closeBraceToken):
        (JSC::JSParser::Scope::copyCapturedVariablesToVector):
        (JSC::JSParser::Scope::saveFunctionInfo):
        (JSC::JSParser::Scope::restoreFunctionInfo):
        (JSC::JSParser::findCachedFunctionInfo):
        (JSC::JSParser::JSParser):
        (JSC::JSParser::parseProgram):
        (JSC::JSParser::parseFunctionInfo):
        * parser/Lexer.h:
        (JSC::Lexer::setOffset):
        (JSC::Lexer::setLineNumber):
        (JSC::Lexer::sourceProvider):
        * parser/SourceProvider.h:
        (JSC::SourceProviderCache::SourceProviderCache):
        (JSC::SourceProviderCache::~SourceProviderCache):
        (JSC::SourceProviderCache::byteSize):
        (JSC::SourceProviderCache::add):
        (JSC::SourceProviderCache::get):
        (JSC::SourceProvider::SourceProvider):
        (JSC::SourceProvider::~SourceProvider):
        (JSC::SourceProvider::cache):
        (JSC::SourceProvider::notifyCacheSizeChanged):
        (JSC::SourceProvider::cacheSizeChanged):
        * parser/SyntaxChecker.h:

2011-01-19  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Follow-up to r75766 / <rdar://problem/5469576>.

        * DerivedSources.make: Evaluate the SDKROOT variable correctly.

2011-01-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [jsfunfuzz] Defining a function called __proto__ inside an eval triggers an assertion
        https://bugs.webkit.org/show_bug.cgi?id=52672

        Rather than coming up with a somewhat convoluted mechanism to ensure that
        developers can override the global objects prototype with a function named
        __proto__ and expect it to work, we just disallow it at the syntax level.

        * parser/JSParser.cpp:
        (JSC::JSParser::parseFunctionInfo):

2011-01-19  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8882994> Regression: Simple nested backtrack hangs
        https://bugs.webkit.org/show_bug.cgi?id=52675

        The changeset (r76076) for https://bugs.webkit.org/show_bug.cgi?id=52540
        broke simple backtracking in some cases.  Reworked that change to 
        link both jumps and labels.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::BacktrackDestination::hasBacktrackToLabel):
        (JSC::Yarr::YarrGenerator::TermGenerationState::propagateBacktrackingFrom):
        (JSC::Yarr::YarrGenerator::generateParenthesesSingle):

2011-01-19  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [JSC] scripts have incorrect starting line (always 1).
        https://bugs.webkit.org/show_bug.cgi?id=52721

        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions):
        * debugger/Debugger.h:
        * parser/Parser.h:
        (JSC::Parser::parse):
        * parser/SourceCode.h:
        (JSC::SourceCode::SourceCode):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::startPosition):

2011-01-19  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Laszlo Gombos and Tor Arne Vestbø.

        [Qt] Remove unnecessary "../Source" from paths
        after moving source files into Source is finished.

        * JavaScriptCore.pri:

2011-01-19  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Darin Adler.

        Don't return void from void function String::split
        https://bugs.webkit.org/show_bug.cgi?id=52684

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

2011-01-18  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r76078.
        http://trac.webkit.org/changeset/76078
        https://bugs.webkit.org/show_bug.cgi?id=52668

        Caused crashes of fast/canvas/webgl/constants.html,
        fast/canvas/webgl/gl-enum-tests.html, and possibly other layout
        test crashes in Release mode. WebGL crashes were observed with
        "run-webkit-tests fast/canvas/webgl". It was necessary to run
        multiple tests to provoke the crash.

        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::markGlobals):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::markChildren):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::markChildren):

2011-01-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [jsfunfuzz] Assertion asking activation for arguments when arguments is overridden
        https://bugs.webkit.org/show_bug.cgi?id=52690

        Clean up code to retrieve arguments from activation and function objects.
        Remove the incorrect assertion from JSActivation's argumentsGetter.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::retrieveArguments):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::argumentsGetter):

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

        Reviewed by Darin Adler.

        Removed RegisterFile::markGlobals because it was obtuse, and it
        unnecessarily relied on conservative marking.
        https://bugs.webkit.org/show_bug.cgi?id=52668

        * interpreter/RegisterFile.h: Removed markGlobals.

        * runtime/JSActivation.cpp:
        (JSC::JSActivation::markChildren): Added a comment explaning why some
        JSActivations don't always mark their registers arrays.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::markChildren): Instead of calling markGlobals, mark
        the registers array directly.

2011-01-18  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/8875432> Regression: Some text-only e-mails cause hang beneath RegExp::match (52540)
        https://bugs.webkit.org/show_bug.cgi?id=52540
        https://bugs.webkit.org/show_bug.cgi?id=52662

        Directly use backtrack label with parentheses nested under a
        non-capturing parentheses.  Also linked current parentheses
        tail code object for possible parens nested within a non-capturing
        parentheses.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::BacktrackDestination::linkBacktrackToLabel):
        (JSC::Yarr::YarrGenerator::generateParenthesesSingle):

2011-01-18  Daniel Bates  <dbates@rim.com>

        Reviewed by Gavin Barraclough.

        Only use moving memory model assumption in ExecutableAllocator::intializePageSize() for Symbian OS
        https://bugs.webkit.org/show_bug.cgi?id=52517

        Patch by David Tapuska

        Currently, we compile code with respect to the Symbian-specific moving memory model
        assumption for all ARMv5 or lower architectures. Instead, we should only compile
        such code when building for Symbian OS on those architectures because this model
        is Symbian-specific.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::intializePageSize):

2011-01-18  Dimitry Andric  <dim@freebsd.org>

        Reviewed by Andreas Kling.

        Fix linking JavaScriptCore on FreeBSD/amd64
        https://bugs.webkit.org/show_bug.cgi?id=52591

        Linking of JavaScriptCore on FreeBSD/amd64 fails, for the same reason as
        in bug 28422: cti_vm_throw needs a "@plt" suffix, otherwise the linker
        complains about the relocation type.

        * jit/JITStubs.cpp: use @plt suffix on x86_64 platforms, for both Linux
        and FreeBSD.

2011-01-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Antti Koivisto.

        [jsfunfuzz] Assertion in codegen for array of NaN constants
        https://bugs.webkit.org/show_bug.cgi?id=52643

        Don't cache NaN literals in the code generator, as NaN doesn't compare
        as equal to itself it causes problems when rehashing the number cache.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoad):

2011-01-17  Jarred Nicholls  <jarred@sencha.com>

        Reviewed by Csaba Osztrogonác.

        REGRESSION(r75709): Return value of fscanf() shouldn't be ignored.
        https://bugs.webkit.org/show_bug.cgi?id=52585
        
        gcc 4.4.4+ has warn_unused_value attribute on fscanf, so we should check
        the return value to get around the gcc warning

        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::maybeModifyVMPoolSize):

2011-01-17  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        [regexfuzz] Crash running regex with lookahead
        https://bugs.webkit.org/show_bug.cgi?id=52548

        Eliminated agressive chaining of backtracks.  This code was overwriting
        already valid backtrack information.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::ParenthesesTail::processBacktracks):

2011-01-17  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix some headers with missing or misspelled #ifndef guards
        https://bugs.webkit.org/show_bug.cgi?id=52545

        * wtf/RefPtrHashMap.h:

2011-01-17  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        Update xcodeproj svn:ignore to include xcuserdata.

        * JavaScriptCore.xcodeproj: Modified property svn:ignore.

2011-01-16  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move WebKit into Source
        https://bugs.webkit.org/show_bug.cgi?id=52530

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2011-01-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        [jsfunfuzz] Parser doesn't correctly validate for-loop syntax
        https://bugs.webkit.org/show_bug.cgi?id=52516

        Ensure that we always check for a semicolon after encountering
        multiple declarations in the initialiser portion of a for-loop.

        * parser/JSParser.cpp:
        (JSC::JSParser::parseForStatement):

2011-01-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Strict mode restrictions on arguments and eval usage aren't complete
        https://bugs.webkit.org/show_bug.cgi?id=52528

        Fix a few bugs in strict mode where we incorrect allow mutation of
        arguments and eval in the parser.

        Alas the "optimisation" used by the syntax checker for validating
        binary and unary expressions was too aggressive: we do actually need
        a stack for operations and operands although it needn't be as complete
        as that used for the full AST builder.

        Also disallow assignment to arguments in all cases as allowing arguments
        to be assignable is always an error in strict mode, regardless of context.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::BinaryExprContext::BinaryExprContext):
        (JSC::ASTBuilder::UnaryExprContext::UnaryExprContext):
        * parser/JSParser.cpp:
        (JSC::JSParser::parseAssignmentExpression):
        (JSC::JSParser::parseBinaryExpression):
        (JSC::JSParser::parseUnaryExpression):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::BinaryExprContext::BinaryExprContext):
        (JSC::SyntaxChecker::BinaryExprContext::~BinaryExprContext):
        (JSC::SyntaxChecker::UnaryExprContext::UnaryExprContext):
        (JSC::SyntaxChecker::UnaryExprContext::~UnaryExprContext):
        (JSC::SyntaxChecker::appendBinaryExpressionInfo):
        (JSC::SyntaxChecker::operatorStackPop):

2011-01-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Rolled back in r75886.
        https://bugs.webkit.org/show_bug.cgi?id=52527
        
        r75886 broke the GTK Linux bot because Linux was -- quite surprisingly --
        set up to use the constants for embedded devices.

        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::maybeModifyVMPoolSize): Separated Linux constants from embedded
        constants.

2011-01-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r75886.
        http://trac.webkit.org/changeset/75886
        https://bugs.webkit.org/show_bug.cgi?id=52526

        "Broke GTK+ 64bit" (Requested by xan_ on #webkit).

        * jit/ExecutableAllocatorFixedVMPool.cpp:

2011-01-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8870429> Shrink the executable pool on embedded devices

        * jit/ExecutableAllocatorFixedVMPool.cpp: Dropped the pool size from 32MB
        to 16MB.

2011-01-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Incorrect behavior changing attributes of an accessor
        https://bugs.webkit.org/show_bug.cgi?id=52515

        defineProperty doesn't correctly handle changing attributes of an accessor
        property.  This is because we don't pass the full descriptor to the 
        putDescriptor helper function, which means we have insufficient information
        to do the right thing. Once that's passed the correct behavior is relatively
        simple to implement.

        * runtime/JSObject.cpp:
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):

2011-01-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        [jsfunfuzz] Incorrect handling of consecutive duplicate labels
        https://bugs.webkit.org/show_bug.cgi?id=52505

        Compare StringImpl*'s instead of Identifier*'s when looking for duplicate
        labels.

        * parser/JSParser.cpp:
        (JSC::JSParser::parseExpressionOrLabelStatement):

2011-01-14  Simon Fraser  <simon.fraser@apple.com>

        No review.
        
        Initialize m_operationInProgress after r75855.

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

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

        Reverted accidentally committed code from my last checkin.

        * runtime/Heap.cpp:
        (JSC::Heap::markRoots):

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

        Reviewed by Sam Weinig.
        
        Try to fix the GTK bot.

        * runtime/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::markRoots): Kids, remember to initialize your data members.
        Knowing is half the battle.

2011-01-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Stephanie Lewis.

        [jsfunfuzz] We should be clearing the lexers temporary character buffers when switching to strict mode
        https://bugs.webkit.org/show_bug.cgi?id=52501

        Clear the temporary character buffers used for reading escaped characters and
        numbers.

        * parser/Lexer.h:
        (JSC::Lexer::setOffset):

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

        Try to fix non-Dtrace builds: #include Tracing.h instead of TracingDtrace.h.

        * runtime/Heap.cpp:

2011-01-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Split out a MarkedSpace strategy object from Heap.
        https://bugs.webkit.org/show_bug.cgi?id=52421
        
        SunSpider reports no change.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj: Updated our 7 build systems. Which is cool.

        * runtime/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::recordExtraCost):
        (JSC::Heap::allocate):
        (JSC::Heap::markConservatively):
        (JSC::Heap::markRoots):
        (JSC::Heap::objectCount):
        (JSC::Heap::statistics):
        (JSC::Heap::size):
        (JSC::Heap::isBusy):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::primaryHeapBegin):
        (JSC::Heap::primaryHeapEnd):
        * runtime/Heap.h:
        (JSC::Heap::globalData):
        (JSC::Heap::markedSpace):
        (JSC::Heap::isCellMarked):
        (JSC::Heap::checkMarkCell):
        (JSC::Heap::markCell): Moved all code pertaining to managing chunks of
        collector memory out of this class. Heap now just delegates to MarkedSpace.

        * runtime/JSCell.h:
        (JSC::JSCell::Heap::heap): Updated for MarkedSpace delegation.

        * runtime/JSValue.h: Moved the ValueStringPair typedef to help with #includes.

        * runtime/MarkedSpace.cpp: Copied from runtime/Heap.cpp.
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::destroy):
        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::freeBlock):
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::resizeBlocks):
        (JSC::MarkedSpace::growBlocks):
        (JSC::MarkedSpace::shrinkBlocks):
        (JSC::MarkedSpace::markConservatively):
        (JSC::MarkedSpace::clearMarkBits):
        (JSC::MarkedSpace::markedCells):
        (JSC::MarkedSpace::sweep):
        (JSC::MarkedSpace::objectCount):
        (JSC::MarkedSpace::addToStatistics):
        (JSC::MarkedSpace::statistics):
        (JSC::MarkedSpace::size):
        (JSC::MarkedSpace::reset):
        (JSC::MarkedSpace::primaryHeapBegin):
        (JSC::MarkedSpace::primaryHeapEnd):
        * runtime/MarkedSpace.h: Copied from runtime/Heap.h.
        (JSC::MarkedSpace::globalData):
        (JSC::MarkedSpace::didShrink):
        (JSC::MarkedSpace::cellBlock):
        (JSC::MarkedSpace::cellOffset):
        (JSC::MarkedSpace::isCellMarked):
        (JSC::MarkedSpace::checkMarkCell):
        (JSC::MarkedSpace::markCell): Moved all code pertaining to managing chunks of
        collector memory into this class.

        * runtime/MemoryStatistics.cpp:
        (JSC::heapStatistics):
        * runtime/MemoryStatistics.h: Updated for MarkedSpace delegation.

2011-01-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [jsfunfuzz] parser doesn't enforce continue restrictions correctly.
        https://bugs.webkit.org/show_bug.cgi?id=52493

        This patch reworks handling of break, continue and label statements
        to correctly handle all the valid and invalid cases.  Previously certain
        errors would be missed by the parser in strict mode, but the bytecode 
        generator needed to handle those cases for non-strict code so nothing
        failed, it simply became non-standard behaviour.

        Now that we treat break and continue errors as early faults in non-strict
        mode as well that safety net has been removed so the parser bugs result in
        crashes at codegen time.

        * parser/JSParser.cpp:
        (JSC::JSParser::ScopeLabelInfo::ScopeLabelInfo):
        (JSC::JSParser::next):
        (JSC::JSParser::nextTokenIsColon):
        (JSC::JSParser::continueIsValid):
            Continue is only valid in loops so we can't use breakIsValid()
        (JSC::JSParser::pushLabel):
            We now track whether the label is for a loop (and is therefore a
            valid target for continue.
        (JSC::JSParser::popLabel):
        (JSC::JSParser::getLabel):
            Replace hasLabel with getLabel so that we can validate the target
            when parsing continue statements.
        (JSC::JSParser::Scope::continueIsValid):
        (JSC::JSParser::Scope::pushLabel):
        (JSC::JSParser::Scope::getLabel):
        (JSC::JSParser::JSParser):
        (JSC::JSParser::parseBreakStatement):
        (JSC::JSParser::parseContinueStatement):
        (JSC::LabelInfo::LabelInfo):
        (JSC::JSParser::parseExpressionOrLabelStatement):
            Consecutive labels now get handled iteratively so that we can determine
            whether they're valid targets for continue.
        * parser/Lexer.cpp:
        (JSC::Lexer::nextTokenIsColon):
        * parser/Lexer.h:
        (JSC::Lexer::setOffset):

2011-01-14  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Use the Windows thread pool instead of an extra thread for FastMalloc scavenging
        https://bugs.webkit.org/show_bug.cgi?id=45186

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::scheduleScavenger): Added missing this pointer to CreateTimerQueueTimer().

2011-01-14  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Use the Windows thread pool instead of an extra thread for FastMalloc scavenging
        https://bugs.webkit.org/show_bug.cgi?id=45186

        r75819 accidentally changed the initial state of the scavenge timer.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::initializeScavenger): Changed initial state of m_scavengingSuspended to true.

2011-01-14  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed Windows Release build fix.

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

2011-01-14  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed Windows Release build fix.

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

2011-01-14  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Use the Windows thread pool instead of an extra thread for FastMalloc scavenging
        https://bugs.webkit.org/show_bug.cgi?id=45186

        Use CreateTimerQueueTimer() to start periodicScavenge() and stop it with DeleteTimerQueueTimer().

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::initializeScavenger):
        (WTF::TCMalloc_PageHeap::isScavengerSuspended):
        (WTF::TCMalloc_PageHeap::scheduleScavenger):
        (WTF::TCMalloc_PageHeap::rescheduleScavenger):
        (WTF::TCMalloc_PageHeap::suspendScavenger):
        (WTF::scavengerTimerFired):
        (WTF::TCMalloc_PageHeap::periodicScavenge):
        (WTF::TCMalloc_PageHeap::signalScavenger):

2011-01-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Align import/export directives
        https://bugs.webkit.org/show_bug.cgi?id=52208

        * API/JSBase.h: Align import/export directives with
        WebKit2/Shared/API/c/WKBase.h

2011-01-14  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        Incorrect backtracking for nested alternatives
        https://bugs.webkit.org/show_bug.cgi?id=52387

        In the process of propigating a datalabel it wasn't getting connected
        to a destination when the destination was an indirect jump.  Added
        code to recognize a direct backtrack destination that was an indirect
        jump and added mechanism to associate DataLabelPtrs with indirect
        jump entries.
        Removed dead method
        BacktrackDestination::linkDataLabelToHereIfExists()

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::IndirectJumpEntry::IndirectJumpEntry):
        (JSC::Yarr::YarrGenerator::IndirectJumpEntry::addDataLabel):
        (JSC::Yarr::YarrGenerator::GenerationState::addIndirectJumpEntry):
        (JSC::Yarr::YarrGenerator::GenerationState::emitIndirectJumpTable):
        Changes to link indirect jumps with DataLabelPtr's.
        (JSC::Yarr::YarrGenerator::BacktrackDestination::clearSubDataLabelPtr):
        (JSC::Yarr::YarrGenerator::TermGenerationState::linkDataLabelToBacktrackIfExists): 
        Updated to handle immediate linking of indirect jumps to
        DataLabelPtr.
        (JSC::Yarr::YarrGenerator::generateParenthesesDisjunction): Changed to
        reflect updated linkDataLabelToBacktrackIfExists().

2011-01-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: provide script column offset to frontend.
        https://bugs.webkit.org/show_bug.cgi?id=52377

        * parser/SourceCode.h:
        (JSC::SourceCode::SourceCode):
        (JSC::SourceCode::firstColumn):

2011-01-13  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/5469576> Use __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY0 if available.

        * DerivedSources.make: Create a header file, HeaderDetection.h, that tells
        us whether pthread_machdep.h is available.
        * wtf/FastMalloc.cpp: If __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY0 is available, then
        don't do the pthread_getspecific_function_pointer trick.
        (WTF::setThreadHeap): Ditto, but set thread-specific data.
        (WTF::TCMalloc_ThreadCache::GetThreadHeap): Ditto, but get rather than set.

2011-01-13  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gavin Barraclough.

        JIT requires VM overcommit (particularly on x86-64), Linux does not by default support this without swap?
        https://bugs.webkit.org/show_bug.cgi?id=42756

        The FixedVMPool Allocator does not work well on systems where
        allocating very large amounts of memory upfront is not reasonable,
        like Linux without overcommit enabled. As a workaround, on Linux,
        default to the values used in embedded environments (in the MB
        range), and only jump to the GB range if we detect at runtime that
        overcommit is enabled. Should fix crashes on Linux/x86_64 with
        less than 3 or 4GB of RAM.

        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::free): use new variables for VM pool
        size and coalesce limit.
        (JSC::ExecutableAllocator::isValid): swap the variables from
        embedded to generic values at runtime, on linux, if overcommit is
        enabled.
        (JSC::ExecutableAllocator::underMemoryPressure): use new variables
        for VM pool size and coalesce limit.

2011-01-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Add new Yarr.h header to the list file.

        * GNUmakefile.am: ditto.

2011-01-12  Martin Robinson  <mrobinson@igalia.com>

        Missing Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h in WebKitGtk tarball
        https://bugs.webkit.org/show_bug.cgi?id=52299

        * GNUmakefile.am: Fix the GTK+ build on ARMv7 by including missing source
        files in the source list.

2011-01-12  Peter Varga  <pvarga@webkit.org>

        Reviewed by Gavin Barraclough.

        Add Yarr.h to YARR
        https://bugs.webkit.org/show_bug.cgi?id=51021

        Move other common constants and functions from YARR's different files
        to Yarr.h.
        Use Yarr.h header instead of including other YARR headers where it
        is possible.

        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/RegExp.cpp:
        * yarr/Yarr.h: Added.
        * yarr/YarrInterpreter.cpp:
        * yarr/YarrInterpreter.h:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::jitCompile):
        (JSC::Yarr::execute):
        * yarr/YarrJIT.h:
        * yarr/YarrParser.h:
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPattern::compile):
        (JSC::Yarr::YarrPattern::YarrPattern):
        * yarr/YarrPattern.h:

2011-01-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r75595.
        http://trac.webkit.org/changeset/75595
        https://bugs.webkit.org/show_bug.cgi?id=52286

        It broke fast/regex/pcre-test-1.html (Requested by Ossy on
        #webkit).

        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/RegExp.cpp:
        * yarr/Yarr.h: Removed.
        * yarr/YarrInterpreter.cpp:
        * yarr/YarrInterpreter.h:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::jitCompile):
        * yarr/YarrJIT.h:
        (JSC::Yarr::execute):
        * yarr/YarrParser.h:
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::compile):
        (JSC::Yarr::YarrPattern::YarrPattern):
        * yarr/YarrPattern.h:

2011-01-12  Peter Varga  <pvarga@webkit.org>

        Reviewed by Gavin Barraclough.

        Add Yarr.h to YARR
        https://bugs.webkit.org/show_bug.cgi?id=51021

        Move other common constants and functions from YARR's different files
        to Yarr.h.
        Use Yarr.h header instead of including other YARR headers where it
        is possible.

        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/RegExp.cpp:
        * yarr/Yarr.h: Added.
        * yarr/YarrInterpreter.cpp:
        * yarr/YarrInterpreter.h:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::jitCompile):
        (JSC::Yarr::execute):
        * yarr/YarrJIT.h:
        * yarr/YarrParser.h:
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPattern::compile):
        (JSC::Yarr::YarrPattern::YarrPattern):
        * yarr/YarrPattern.h:

2011-01-11  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Missing call to popTempSortVector() for exception case in JSArray::sort.
        https://bugs.webkit.org/show_bug.cgi?id=50718

        Fix to patch of 50718 that added pushTempSortVector() and 
        popTempSortVector() to JSArray::sort() to mark elements during sort.
        Need to add popTempSortVector() for the return case if toString()
        had an exception.

        * runtime/JSArray.cpp:
        (JSC::JSArray::sort): Added popTempSortVector()

2011-01-11  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Darin Adler.

        Microoptimization in ~JSString
        https://bugs.webkit.org/show_bug.cgi?id=52222

        The case where m_fibers is 0 seems to be the most common one
        (almost 1/2 of the time, followed at some distance by m_fibers = 1
        in 1/4 of the cases in a typical SunSpider execution). We can save
        one comparison in this common case by doing a bit of refactoring
        in the JSString destructor; overall a 0.3% progression, but only
        the string tests show improvement.

        * runtime/JSString.h:
        (JSC::RopeBuilder::~JSString):

2011-01-10  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        ASSERTION Failure in JSC::binaryChop
        https://bugs.webkit.org/show_bug.cgi?id=25614

        Changed JITStubs::cti_register_file_check() to use the current stack's
        return PC to find the bytecode for handling the exception in the prior
        frame.  Also added the appropriate arrity check routine call to the
        JIT to bytecode vector (m_callReturnIndexVector) in the CodeBlock.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompile): Changed the arrity check call location
        so that it gets added to the m_calls list so that it's included in
        CodeBlock::m_callReturnIndexVector.
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION): Use the current call frame's return PC.

2011-01-10  Daniel Bates  <dbates@rim.com>

        Reviewed by Martin Robinson.

        Remove extraneous COMPILER(GCC) condition when checking GCC_VERSION_AT_LEAST()
        https://bugs.webkit.org/show_bug.cgi?id=52178

        It is sufficient to test GCC_VERSION_AT_LEAST() instead of both COMPILER(GCC) and
        GCC_VERSION_AT_LEAST(). Notice GCC_VERSION_AT_LEAST() is defined to be 0 when we
        are not compiling with GCC.

        Fixes style issues at the callsites (i.e. replace comma with comma-space in
        macro function argument list). Also, makes a spelling correction in a comment.

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

2011-01-10  Geoffrey Garen  <ggaren@apple.com>

        Build fix: removed some uses of nextNumber that I missed last time.

        * runtime/Heap.cpp:
        (JSC::Heap::reset):
        (JSC::Heap::collectAllGarbage):

2011-01-10  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Use __builtin_expect when compiling using RVCT in GNU mode
        https://bugs.webkit.org/show_bug.cgi?id=51866

        We should only use __builtin_expect if we are compiling with GCC or RVCT 3 or higher in GNU mode
        as pointed out by Siddharth Mathur per <http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0202h/Cjabddedbde.html>.

        * wtf/AlwaysInline.h:
        * wtf/Platform.h: Removed define WTF_COMPILER_RVCT4_OR_GREATER. Instead added macro
        function RVCT_VERSION_AT_LEAST so that we can test for an arbitrary minimum RVCT
        version.

2011-01-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Moved Collector.* => Heap.*, since the file contains a class named "Heap".

        * API/JSCallbackObject.cpp:
        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * interpreter/Interpreter.cpp:
        * interpreter/RegisterFile.h:
        * jit/JITStubs.cpp:
        * runtime/Collector.cpp: Removed.
        * runtime/Collector.h: Removed.
        * runtime/CollectorHeapIterator.h:
        * runtime/GCActivityCallbackCF.cpp:
        * runtime/Heap.cpp: Copied from JavaScriptCore/runtime/Collector.cpp.
        * runtime/Heap.h: Copied from JavaScriptCore/runtime/Collector.h.
        * runtime/InitializeThreading.cpp:
        * runtime/JSCell.h:
        * runtime/JSGlobalData.cpp:
        * runtime/JSGlobalData.h:
        * runtime/JSLock.cpp:
        * runtime/JSNumberCell.h:
        * runtime/MachineStackMarker.cpp:
        * runtime/MemoryStatistics.h:
        * runtime/Protect.h:
        * runtime/UString.cpp:
        * runtime/WeakGCMap.h:
        * runtime/WeakGCPtr.h:

2011-01-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gavin Barraclough.

        Remove unused isString() case in JSString::toPrimitiveString()
        https://bugs.webkit.org/show_bug.cgi?id=52167

        We never call toPrimitiveString() with strings, so remove the
        check and add an ASSERT ensuring this never happens. 0.7% overall
        progression in sunspider, since one of the call sites is very hot.

        * runtime/JSString.h:
        (JSC::JSValue::toPrimitiveString):

2011-01-10  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Rename the existing YARR files and classes
        https://bugs.webkit.org/show_bug.cgi?id=51872

        Replace the "Regex" prefix with "Yarr" in the name of YARR files and classes.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::match):
        (JSC::RegExp::printTraceData):
        * yarr/YarrInterpreter.cpp: Renamed from Source/JavaScriptCore/yarr/RegexInterpreter.cpp.
        (JSC::Yarr::Interpreter::appendParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::popParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::DisjunctionContext::DisjunctionContext):
        (JSC::Yarr::Interpreter::DisjunctionContext::operator new):
        (JSC::Yarr::Interpreter::allocDisjunctionContext):
        (JSC::Yarr::Interpreter::freeDisjunctionContext):
        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::operator new):
        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::restoreOutput):
        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::getDisjunctionContext):
        (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::InputStream::InputStream):
        (JSC::Yarr::Interpreter::InputStream::next):
        (JSC::Yarr::Interpreter::InputStream::rewind):
        (JSC::Yarr::Interpreter::InputStream::read):
        (JSC::Yarr::Interpreter::InputStream::readPair):
        (JSC::Yarr::Interpreter::InputStream::readChecked):
        (JSC::Yarr::Interpreter::InputStream::reread):
        (JSC::Yarr::Interpreter::InputStream::prev):
        (JSC::Yarr::Interpreter::InputStream::getPos):
        (JSC::Yarr::Interpreter::InputStream::setPos):
        (JSC::Yarr::Interpreter::InputStream::atStart):
        (JSC::Yarr::Interpreter::InputStream::atEnd):
        (JSC::Yarr::Interpreter::InputStream::checkInput):
        (JSC::Yarr::Interpreter::InputStream::uncheckInput):
        (JSC::Yarr::Interpreter::InputStream::isNotAvailableInput):
        (JSC::Yarr::Interpreter::testCharacterClass):
        (JSC::Yarr::Interpreter::checkCharacter):
        (JSC::Yarr::Interpreter::checkCasedCharacter):
        (JSC::Yarr::Interpreter::checkCharacterClass):
        (JSC::Yarr::Interpreter::tryConsumeBackReference):
        (JSC::Yarr::Interpreter::matchAssertionBOL):
        (JSC::Yarr::Interpreter::matchAssertionEOL):
        (JSC::Yarr::Interpreter::matchAssertionWordBoundary):
        (JSC::Yarr::Interpreter::backtrackPatternCharacter):
        (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter):
        (JSC::Yarr::Interpreter::matchCharacterClass):
        (JSC::Yarr::Interpreter::backtrackCharacterClass):
        (JSC::Yarr::Interpreter::matchBackReference):
        (JSC::Yarr::Interpreter::backtrackBackReference):
        (JSC::Yarr::Interpreter::recordParenthesesMatch):
        (JSC::Yarr::Interpreter::resetMatches):
        (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
        (JSC::Yarr::Interpreter::matchParenthesesOnceBegin):
        (JSC::Yarr::Interpreter::matchParenthesesOnceEnd):
        (JSC::Yarr::Interpreter::backtrackParenthesesOnceBegin):
        (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd):
        (JSC::Yarr::Interpreter::matchParenthesesTerminalBegin):
        (JSC::Yarr::Interpreter::matchParenthesesTerminalEnd):
        (JSC::Yarr::Interpreter::backtrackParenthesesTerminalBegin):
        (JSC::Yarr::Interpreter::backtrackParenthesesTerminalEnd):
        (JSC::Yarr::Interpreter::matchParentheticalAssertionBegin):
        (JSC::Yarr::Interpreter::matchParentheticalAssertionEnd):
        (JSC::Yarr::Interpreter::backtrackParentheticalAssertionBegin):
        (JSC::Yarr::Interpreter::backtrackParentheticalAssertionEnd):
        (JSC::Yarr::Interpreter::matchParentheses):
        (JSC::Yarr::Interpreter::backtrackParentheses):
        (JSC::Yarr::Interpreter::lookupForBeginChars):
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::Interpreter::matchNonZeroDisjunction):
        (JSC::Yarr::Interpreter::interpret):
        (JSC::Yarr::Interpreter::Interpreter):
        (JSC::Yarr::ByteCompiler::ParenthesesStackEntry::ParenthesesStackEntry):
        (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::atomParenthesesOnceBegin):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalBegin):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd):
        (JSC::Yarr::ByteCompiler::popParenthesesStack):
        (JSC::Yarr::ByteCompiler::dumpDisjunction):
        (JSC::Yarr::ByteCompiler::closeAlternative):
        (JSC::Yarr::ByteCompiler::closeBodyAlternative):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesOnceEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalEnd):
        (JSC::Yarr::ByteCompiler::regexBegin):
        (JSC::Yarr::ByteCompiler::regexEnd):
        (JSC::Yarr::ByteCompiler::alternativeBodyDisjunction):
        (JSC::Yarr::ByteCompiler::alternativeDisjunction):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        (JSC::Yarr::byteCompile):
        (JSC::Yarr::interpret):
        * yarr/YarrInterpreter.h: Renamed from Source/JavaScriptCore/yarr/RegexInterpreter.h.
        (JSC::Yarr::ByteTerm::ByteTerm):
        (JSC::Yarr::ByteTerm::BOL):
        (JSC::Yarr::ByteTerm::CheckInput):
        (JSC::Yarr::ByteTerm::EOL):
        (JSC::Yarr::ByteTerm::WordBoundary):
        (JSC::Yarr::ByteTerm::BackReference):
        (JSC::Yarr::ByteTerm::BodyAlternativeBegin):
        (JSC::Yarr::ByteTerm::BodyAlternativeDisjunction):
        (JSC::Yarr::ByteTerm::BodyAlternativeEnd):
        (JSC::Yarr::ByteTerm::AlternativeBegin):
        (JSC::Yarr::ByteTerm::AlternativeDisjunction):
        (JSC::Yarr::ByteTerm::AlternativeEnd):
        (JSC::Yarr::ByteTerm::SubpatternBegin):
        (JSC::Yarr::ByteTerm::SubpatternEnd):
        (JSC::Yarr::ByteTerm::invert):
        (JSC::Yarr::ByteTerm::capture):
        (JSC::Yarr::ByteDisjunction::ByteDisjunction):
        (JSC::Yarr::BytecodePattern::BytecodePattern):
        (JSC::Yarr::BytecodePattern::~BytecodePattern):
        * yarr/YarrJIT.cpp: Renamed from Source/JavaScriptCore/yarr/RegexJIT.cpp.
        (JSC::Yarr::YarrGenerator::optimizeAlternative):
        (JSC::Yarr::YarrGenerator::matchCharacterClassRange):
        (JSC::Yarr::YarrGenerator::matchCharacterClass):
        (JSC::Yarr::YarrGenerator::jumpIfNoAvailableInput):
        (JSC::Yarr::YarrGenerator::jumpIfAvailableInput):
        (JSC::Yarr::YarrGenerator::checkInput):
        (JSC::Yarr::YarrGenerator::atEndOfInput):
        (JSC::Yarr::YarrGenerator::notAtEndOfInput):
        (JSC::Yarr::YarrGenerator::jumpIfCharEquals):
        (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals):
        (JSC::Yarr::YarrGenerator::readCharacter):
        (JSC::Yarr::YarrGenerator::storeToFrame):
        (JSC::Yarr::YarrGenerator::storeToFrameWithPatch):
        (JSC::Yarr::YarrGenerator::loadFromFrame):
        (JSC::Yarr::YarrGenerator::loadFromFrameAndJump):
        (JSC::Yarr::YarrGenerator::IndirectJumpEntry::IndirectJumpEntry):
        (JSC::Yarr::YarrGenerator::IndirectJumpEntry::addJump):
        (JSC::Yarr::YarrGenerator::AlternativeBacktrackRecord::AlternativeBacktrackRecord):
        (JSC::Yarr::YarrGenerator::GenerationState::GenerationState):
        (JSC::Yarr::YarrGenerator::GenerationState::addIndirectJumpEntry):
        (JSC::Yarr::YarrGenerator::GenerationState::emitIndirectJumpTable):
        (JSC::Yarr::YarrGenerator::GenerationState::incrementParenNestingLevel):
        (JSC::Yarr::YarrGenerator::GenerationState::decrementParenNestingLevel):
        (JSC::Yarr::YarrGenerator::GenerationState::addParenthesesTail):
        (JSC::Yarr::YarrGenerator::GenerationState::emitParenthesesTail):
        (JSC::Yarr::YarrGenerator::GenerationState::addJumpToNextInteration):
        (JSC::Yarr::YarrGenerator::GenerationState::addJumpsToNextInteration):
        (JSC::Yarr::YarrGenerator::GenerationState::addDataLabelToNextIteration):
        (JSC::Yarr::YarrGenerator::GenerationState::linkToNextIteration):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::BacktrackDestination):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::clear):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::clearDataLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::hasDestination):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::isStackOffset):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::isLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::isJumpList):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::hasDataLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::copyTarget):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::copyTo):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::addBacktrackJump):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::setStackOffset):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::setLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::setNextBacktrackLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::copyBacktrackToLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::setBacktrackToLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::setBacktrackJumpList):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::setBacktrackSourceLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::setDataLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::setSubDataLabelPtr):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::linkToNextBacktrack):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::getStackOffset):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::getLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::getBacktrackJumps):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::getDataLabel):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::jumpToBacktrack):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::linkDataLabelToHereIfExists):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::plantJumpToBacktrackIfExists):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::linkAlternativeBacktracks):
        (JSC::Yarr::YarrGenerator::BacktrackDestination::linkAlternativeBacktracksTo):
        (JSC::Yarr::YarrGenerator::TermGenerationState::TermGenerationState):
        (JSC::Yarr::YarrGenerator::TermGenerationState::resetAlternative):
        (JSC::Yarr::YarrGenerator::TermGenerationState::alternativeValid):
        (JSC::Yarr::YarrGenerator::TermGenerationState::nextAlternative):
        (JSC::Yarr::YarrGenerator::TermGenerationState::alternative):
        (JSC::Yarr::YarrGenerator::TermGenerationState::isLastAlternative):
        (JSC::Yarr::YarrGenerator::TermGenerationState::resetTerm):
        (JSC::Yarr::YarrGenerator::TermGenerationState::termValid):
        (JSC::Yarr::YarrGenerator::TermGenerationState::nextTerm):
        (JSC::Yarr::YarrGenerator::TermGenerationState::term):
        (JSC::Yarr::YarrGenerator::TermGenerationState::isLastTerm):
        (JSC::Yarr::YarrGenerator::TermGenerationState::getSubParenNum):
        (JSC::Yarr::YarrGenerator::TermGenerationState::isMainDisjunction):
        (JSC::Yarr::YarrGenerator::TermGenerationState::setParenthesesTail):
        (JSC::Yarr::YarrGenerator::TermGenerationState::getParenthesesTail):
        (JSC::Yarr::YarrGenerator::TermGenerationState::lookaheadTerm):
        (JSC::Yarr::YarrGenerator::TermGenerationState::isSinglePatternCharacterLookaheadTerm):
        (JSC::Yarr::YarrGenerator::TermGenerationState::inputOffset):
        (JSC::Yarr::YarrGenerator::TermGenerationState::clearBacktrack):
        (JSC::Yarr::YarrGenerator::TermGenerationState::jumpToBacktrack):
        (JSC::Yarr::YarrGenerator::TermGenerationState::plantJumpToBacktrackIfExists):
        (JSC::Yarr::YarrGenerator::TermGenerationState::linkDataLabelToBacktrackIfExists):
        (JSC::Yarr::YarrGenerator::TermGenerationState::addBacktrackJump):
        (JSC::Yarr::YarrGenerator::TermGenerationState::setBacktrackDataLabel):
        (JSC::Yarr::YarrGenerator::TermGenerationState::setBackTrackStackOffset):
        (JSC::Yarr::YarrGenerator::TermGenerationState::setBacktrackLabel):
        (JSC::Yarr::YarrGenerator::TermGenerationState::linkAlternativeBacktracks):
        (JSC::Yarr::YarrGenerator::TermGenerationState::linkAlternativeBacktracksTo):
        (JSC::Yarr::YarrGenerator::TermGenerationState::setBacktrackLink):
        (JSC::Yarr::YarrGenerator::TermGenerationState::chainBacktracks):
        (JSC::Yarr::YarrGenerator::TermGenerationState::chainBacktrackJumps):
        (JSC::Yarr::YarrGenerator::TermGenerationState::getBacktrackDestination):
        (JSC::Yarr::YarrGenerator::TermGenerationState::propagateBacktrackingFrom):
        (JSC::Yarr::YarrGenerator::ParenthesesTail::ParenthesesTail):
        (JSC::Yarr::YarrGenerator::ParenthesesTail::processBacktracks):
        (JSC::Yarr::YarrGenerator::ParenthesesTail::setNextIteration):
        (JSC::Yarr::YarrGenerator::ParenthesesTail::addAfterParenJump):
        (JSC::Yarr::YarrGenerator::ParenthesesTail::generateCode):
        (JSC::Yarr::YarrGenerator::generateAssertionBOL):
        (JSC::Yarr::YarrGenerator::generateAssertionEOL):
        (JSC::Yarr::YarrGenerator::matchAssertionWordchar):
        (JSC::Yarr::YarrGenerator::generateAssertionWordBoundary):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterSingle):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterPair):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterNonGreedy):
        (JSC::Yarr::YarrGenerator::generateCharacterClassSingle):
        (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
        (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
        (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
        (JSC::Yarr::YarrGenerator::generateParenthesesDisjunction):
        (JSC::Yarr::YarrGenerator::generateParenthesesSingle):
        (JSC::Yarr::YarrGenerator::generateParenthesesGreedyNoBacktrack):
        (JSC::Yarr::YarrGenerator::generateParentheticalAssertion):
        (JSC::Yarr::YarrGenerator::generateTerm):
        (JSC::Yarr::YarrGenerator::generateDisjunction):
        (JSC::Yarr::YarrGenerator::generateEnter):
        (JSC::Yarr::YarrGenerator::generateReturn):
        (JSC::Yarr::YarrGenerator::YarrGenerator):
        (JSC::Yarr::YarrGenerator::generate):
        (JSC::Yarr::YarrGenerator::compile):
        (JSC::Yarr::jitCompile):
        * yarr/YarrJIT.h: Renamed from Source/JavaScriptCore/yarr/RegexJIT.h.
        (JSC::Yarr::YarrCodeBlock::YarrCodeBlock):
        (JSC::Yarr::YarrCodeBlock::~YarrCodeBlock):
        (JSC::Yarr::YarrCodeBlock::setFallBack):
        (JSC::Yarr::YarrCodeBlock::isFallBack):
        (JSC::Yarr::YarrCodeBlock::set):
        (JSC::Yarr::YarrCodeBlock::execute):
        (JSC::Yarr::YarrCodeBlock::getAddr):
        (JSC::Yarr::execute):
        * yarr/YarrParser.h: Renamed from Source/JavaScriptCore/yarr/RegexParser.h.
        (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::begin):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::end):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference):
        (JSC::Yarr::Parser::Parser):
        (JSC::Yarr::Parser::parseEscape):
        (JSC::Yarr::Parser::parseAtomEscape):
        (JSC::Yarr::Parser::parseCharacterClassEscape):
        (JSC::Yarr::Parser::parseCharacterClass):
        (JSC::Yarr::Parser::parseParenthesesBegin):
        (JSC::Yarr::Parser::parseParenthesesEnd):
        (JSC::Yarr::Parser::parseQuantifier):
        (JSC::Yarr::Parser::parseTokens):
        (JSC::Yarr::Parser::parse):
        (JSC::Yarr::Parser::saveState):
        (JSC::Yarr::Parser::restoreState):
        (JSC::Yarr::Parser::atEndOfPattern):
        (JSC::Yarr::Parser::peek):
        (JSC::Yarr::Parser::peekIsDigit):
        (JSC::Yarr::Parser::peekDigit):
        (JSC::Yarr::Parser::consume):
        (JSC::Yarr::Parser::consumeDigit):
        (JSC::Yarr::Parser::consumeNumber):
        (JSC::Yarr::Parser::consumeOctal):
        (JSC::Yarr::Parser::tryConsume):
        (JSC::Yarr::Parser::tryConsumeHex):
        (JSC::Yarr::parse):
        * yarr/YarrPattern.cpp: Renamed from Source/JavaScriptCore/yarr/RegexPattern.cpp.
        (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor):
        (JSC::Yarr::CharacterClassConstructor::reset):
        (JSC::Yarr::CharacterClassConstructor::append):
        (JSC::Yarr::CharacterClassConstructor::putChar):
        (JSC::Yarr::CharacterClassConstructor::isUnicodeUpper):
        (JSC::Yarr::CharacterClassConstructor::isUnicodeLower):
        (JSC::Yarr::CharacterClassConstructor::putRange):
        (JSC::Yarr::CharacterClassConstructor::charClass):
        (JSC::Yarr::CharacterClassConstructor::addSorted):
        (JSC::Yarr::CharacterClassConstructor::addSortedRange):
        (JSC::Yarr::BeginCharHelper::BeginCharHelper):
        (JSC::Yarr::BeginCharHelper::addBeginChar):
        (JSC::Yarr::BeginCharHelper::merge):
        (JSC::Yarr::BeginCharHelper::addCharacter):
        (JSC::Yarr::BeginCharHelper::linkHotTerms):
        (JSC::Yarr::YarrPatternConstructor::YarrPatternConstructor):
        (JSC::Yarr::YarrPatternConstructor::~YarrPatternConstructor):
        (JSC::Yarr::YarrPatternConstructor::reset):
        (JSC::Yarr::YarrPatternConstructor::assertionBOL):
        (JSC::Yarr::YarrPatternConstructor::assertionEOL):
        (JSC::Yarr::YarrPatternConstructor::assertionWordBoundary):
        (JSC::Yarr::YarrPatternConstructor::atomPatternCharacter):
        (JSC::Yarr::YarrPatternConstructor::atomBuiltInCharacterClass):
        (JSC::Yarr::YarrPatternConstructor::atomCharacterClassBegin):
        (JSC::Yarr::YarrPatternConstructor::atomCharacterClassAtom):
        (JSC::Yarr::YarrPatternConstructor::atomCharacterClassRange):
        (JSC::Yarr::YarrPatternConstructor::atomCharacterClassBuiltIn):
        (JSC::Yarr::YarrPatternConstructor::atomCharacterClassEnd):
        (JSC::Yarr::YarrPatternConstructor::atomParenthesesSubpatternBegin):
        (JSC::Yarr::YarrPatternConstructor::atomParentheticalAssertionBegin):
        (JSC::Yarr::YarrPatternConstructor::atomParenthesesEnd):
        (JSC::Yarr::YarrPatternConstructor::atomBackReference):
        (JSC::Yarr::YarrPatternConstructor::copyDisjunction):
        (JSC::Yarr::YarrPatternConstructor::copyTerm):
        (JSC::Yarr::YarrPatternConstructor::quantifyAtom):
        (JSC::Yarr::YarrPatternConstructor::disjunction):
        (JSC::Yarr::YarrPatternConstructor::regexBegin):
        (JSC::Yarr::YarrPatternConstructor::regexEnd):
        (JSC::Yarr::YarrPatternConstructor::regexError):
        (JSC::Yarr::YarrPatternConstructor::setupAlternativeOffsets):
        (JSC::Yarr::YarrPatternConstructor::setupDisjunctionOffsets):
        (JSC::Yarr::YarrPatternConstructor::setupOffsets):
        (JSC::Yarr::YarrPatternConstructor::checkForTerminalParentheses):
        (JSC::Yarr::YarrPatternConstructor::optimizeBOL):
        (JSC::Yarr::YarrPatternConstructor::addBeginTerm):
        (JSC::Yarr::YarrPatternConstructor::setupDisjunctionBeginTerms):
        (JSC::Yarr::YarrPatternConstructor::setupAlternativeBeginTerms):
        (JSC::Yarr::YarrPatternConstructor::setupBeginChars):
        (JSC::Yarr::compile):
        (JSC::Yarr::YarrPattern::YarrPattern):
        * yarr/YarrPattern.h: Renamed from Source/JavaScriptCore/yarr/RegexPattern.h.
        (JSC::Yarr::CharacterRange::CharacterRange):
        (JSC::Yarr::CharacterClassTable::create):
        (JSC::Yarr::CharacterClassTable::CharacterClassTable):
        (JSC::Yarr::CharacterClass::CharacterClass):
        (JSC::Yarr::PatternTerm::PatternTerm):
        (JSC::Yarr::PatternTerm::ForwardReference):
        (JSC::Yarr::PatternTerm::BOL):
        (JSC::Yarr::PatternTerm::EOL):
        (JSC::Yarr::PatternTerm::WordBoundary):
        (JSC::Yarr::PatternTerm::invert):
        (JSC::Yarr::PatternTerm::capture):
        (JSC::Yarr::PatternTerm::quantify):
        (JSC::Yarr::PatternAlternative::PatternAlternative):
        (JSC::Yarr::PatternAlternative::lastTerm):
        (JSC::Yarr::PatternAlternative::removeLastTerm):
        (JSC::Yarr::PatternAlternative::setOnceThrough):
        (JSC::Yarr::PatternAlternative::onceThrough):
        (JSC::Yarr::PatternDisjunction::PatternDisjunction):
        (JSC::Yarr::PatternDisjunction::~PatternDisjunction):
        (JSC::Yarr::PatternDisjunction::addNewAlternative):
        (JSC::Yarr::TermChain::TermChain):
        (JSC::Yarr::BeginChar::BeginChar):
        (JSC::Yarr::YarrPattern::~YarrPattern):
        (JSC::Yarr::YarrPattern::reset):
        (JSC::Yarr::YarrPattern::containsIllegalBackReference):
        (JSC::Yarr::YarrPattern::newlineCharacterClass):
        (JSC::Yarr::YarrPattern::digitsCharacterClass):
        (JSC::Yarr::YarrPattern::spacesCharacterClass):
        (JSC::Yarr::YarrPattern::wordcharCharacterClass):
        (JSC::Yarr::YarrPattern::nondigitsCharacterClass):
        (JSC::Yarr::YarrPattern::nonspacesCharacterClass):
        (JSC::Yarr::YarrPattern::nonwordcharCharacterClass):

2011-01-10  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * parser/SyntaxChecker.h:

2011-01-10  Dave Tapuska  <dtapuska@rim.com>

        Reviewed by Gavin Barraclough.

        Add CTI ASM versions for RVCT ARM THUMB2 mode.

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

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

2011-01-10  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

        * JavaScriptCore.pro:

2011-01-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 52079 - Syntax errors should be early errors.

        From chapter 16 the spec:
            An implementation must report most errors at the time the relevant ECMAScript language construct is
            evaluated. An early error is an error that can be detected and reported prior to the evaluation of
            any construct in the Program containing the error. An implementation must report early errors in a
            Program prior to the first evaluation of that Program. Early errors in eval code are reported at
            the time eval is called but prior to evaluation of any construct within the eval code. All errors
            that are not early errors are runtime errors.

            An implementation must treat any instance of the following kinds of errors as an early error:
                * Any syntax error."

        * JavaScriptCore.xcodeproj/project.pbxproj:
            Added new files.
        * bytecode/CodeBlock.cpp:
            Removed op_throw_syntax_error.
        * bytecode/Opcode.h:
            Removed op_throw_syntax_error.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
            If m_expressionTooDeep then throw a runtime error.
        (JSC::BytecodeGenerator::BytecodeGenerator):
            Initialize m_expressionTooDeep.
        (JSC::BytecodeGenerator::emitThrowExpressionTooDeepException):
            Sets m_expressionTooDeep.
        * bytecompiler/BytecodeGenerator.h:
            Added m_expressionTooDeep, removed emitThrowSyntaxError.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::RegExpNode::emitBytecode):
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::LabelNode::emitBytecode):
            Conditions that threw syntax error are now handled during parsing;
            during bytecompilation these are now just ASSERTs.
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        * jit/JITOpcodes32_64.cpp:
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:
            Removed op_throw_syntax_error.
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createRegExp):
            Renamed; added syntax check.
        * parser/JSParser.cpp:
        (JSC::JSParser::breakIsValid):
        (JSC::JSParser::hasLabel):
        (JSC::JSParser::Scope::Scope):
        (JSC::JSParser::Scope::setIsFunction):
        (JSC::JSParser::Scope::isFunctionBoundary):
        (JSC::JSParser::ScopeRef::hasContainingScope):
        (JSC::JSParser::ScopeRef::containingScope):
        (JSC::JSParser::AutoPopScopeRef::AutoPopScopeRef):
        (JSC::JSParser::AutoPopScopeRef::~AutoPopScopeRef):
        (JSC::JSParser::AutoPopScopeRef::setPopped):
        (JSC::JSParser::popScopeInternal):
        (JSC::JSParser::popScope):
        (JSC::jsParse):
        (JSC::JSParser::JSParser):
        (JSC::JSParser::parseProgram):
        (JSC::JSParser::parseBreakStatement):
        (JSC::JSParser::parseContinueStatement):
        (JSC::JSParser::parseReturnStatement):
        (JSC::JSParser::parseTryStatement):
        (JSC::JSParser::parseFunctionInfo):
        (JSC::JSParser::parseExpressionOrLabelStatement):
        (JSC::JSParser::parsePrimaryExpression):
        * parser/JSParser.h:
        * parser/Nodes.h:
        * parser/Parser.cpp:
        (JSC::Parser::parse):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createRegExp):
            Renamed; added syntax check.
        * runtime/ExceptionHelpers.cpp:
        (JSC::createOutOfMemoryError):
        (JSC::throwOutOfMemoryError):
        * runtime/ExceptionHelpers.h:
            Broke out createOutOfMemoryError.
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
            Add check for exception after bytecode generation.
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
            RegExp error prefixes not included in error string.
        * yarr/RegexParser.h:
        (JSC::Yarr::Parser::parse):
            Removed regexBegin/regexEnd/regexError.
        * yarr/RegexPattern.cpp:
        (JSC::Yarr::RegexPatternConstructor::regexBegin):
            Removed regexEnd/regexError.
        (JSC::Yarr::compileRegex):
            Add call to regexBegin (no longer called from the parser).
        * yarr/YarrSyntaxChecker.cpp: Added.
        (JSC::Yarr::SyntaxChecker::assertionBOL):
        (JSC::Yarr::SyntaxChecker::assertionEOL):
        (JSC::Yarr::SyntaxChecker::assertionWordBoundary):
        (JSC::Yarr::SyntaxChecker::atomPatternCharacter):
        (JSC::Yarr::SyntaxChecker::atomBuiltInCharacterClass):
        (JSC::Yarr::SyntaxChecker::atomCharacterClassBegin):
        (JSC::Yarr::SyntaxChecker::atomCharacterClassAtom):
        (JSC::Yarr::SyntaxChecker::atomCharacterClassRange):
        (JSC::Yarr::SyntaxChecker::atomCharacterClassBuiltIn):
        (JSC::Yarr::SyntaxChecker::atomCharacterClassEnd):
        (JSC::Yarr::SyntaxChecker::atomParenthesesSubpatternBegin):
        (JSC::Yarr::SyntaxChecker::atomParentheticalAssertionBegin):
        (JSC::Yarr::SyntaxChecker::atomParenthesesEnd):
        (JSC::Yarr::SyntaxChecker::atomBackReference):
        (JSC::Yarr::SyntaxChecker::quantifyAtom):
        (JSC::Yarr::SyntaxChecker::disjunction):
        (JSC::Yarr::checkSyntax):
        * yarr/YarrSyntaxChecker.h: Added.
            Check RegExp syntax.

2011-01-10  Adam Roben  <aroben@apple.com>

        Roll out r75289

        It was causing assertion failures. See <http://webkit.org/b/52156>.

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::initialize):

2011-01-08  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Unify string table adding in AtomicString
        https://bugs.webkit.org/show_bug.cgi?id=51927

        Move code for adding a string into a separate function.
        This removes multiple occurrence of the same logic.

        * wtf/text/AtomicString.cpp:
        (WTF::addToStringTable): Added.
        (WTF::AtomicString::add): Use addToStringTable().
        (WTF::AtomicString::fromUTF8): Ditto.

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

        Reviewed by Gavin Barraclough.

        Split machine stack marking functions into their own class (MachineStackMarker)
        https://bugs.webkit.org/show_bug.cgi?id=52088

        * API/APIShims.h:
        (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock): Moved registerThread()
        call behind an #ifdef because we shouldn't be registering threads at all
        if we don't support usage on multiple threads.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj: Updated projects.

        * runtime/Collector.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::markRoots):
        * runtime/Collector.h:
        (JSC::Heap::machineStackMarker): Moved code to machineStackMarker.

        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::makeUsableFromMultipleThreads): Removed an unnecessary
        level of indirection, to make Heap less of a God class.

        * runtime/MachineStackMarker.h: Copied from Source/JavaScriptCore/runtime/Collector.h.
        * runtime/MachineStackMarker.cpp: Copied from Source/JavaScriptCore/runtime/Collector.cpp.
        (JSC::MachineStackMarker::MachineStackMarker):
        (JSC::MachineStackMarker::~MachineStackMarker):
        (JSC::MachineStackMarker::makeUsableFromMultipleThreads):
        (JSC::MachineStackMarker::registerThread):
        (JSC::MachineStackMarker::unregisterThread):
        (JSC::MachineStackMarker::markCurrentThreadConservativelyInternal):
        (JSC::MachineStackMarker::markCurrentThreadConservatively):
        (JSC::MachineStackMarker::markOtherThreadConservatively):
        (JSC::MachineStackMarker::markMachineStackConservatively): Moved code from Heap.

2011-01-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 26276 - Need a mechanism to determine stack extent on WINDOWS, SOLARIS, OPENBSD, SYMBIAN, HAIKU, WINCE platforms

        Fix for win32.  The base of the stack is stored in the "deallocation stack" field of the
        Thread Information Block - see: http://en.wikipedia.org/wiki/Win32_Thread_Information_Block
        for more information!

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::initialize):

2011-01-07  Adam Roben  <aroben@apple.com>

        Update react-to-vsprops-changes.py after r74855

        * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:

2011-01-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Port scrollbar painting to GtkStyleContext
        https://bugs.webkit.org/show_bug.cgi?id=52051

        * wtf/gobject/GTypedefs.h: Add GtkStyleContext forward
        declaration.

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

        Reviewed by Martin Robinson.

        Enable PCRE computed gotos when compiling with RCVT 4.0 or greater in GNU mode
        https://bugs.webkit.org/show_bug.cgi?id=52034

        Derived from a patch by Eli Fidler.

        RVCT 4 or greater in GNU mode supports the computed goto GNU language extension
        as per <http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348c/ch03s07s12.html>.

        * pcre/pcre_exec.cpp: Modified to check for feature, HAVE(COMPUTED_GOTO), instead
        of hardcoding the GCC compiler.
        * wtf/Platform.h: Define WTF_COMPILER_RVCT4_OR_GREATER if __ARMCC_VERSION >= 400000.

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

        Reviewed by Geoff Garen.

        Bug 52035 - Unregistering DOMWrapperWorlds is unsafe

        The method DOMWrapperWorld::unregisterWorld() effectively calls the DOMWrapperWorld's
        destructor early, in order to release wrappers once we know we no longer intend to use them.
        Whilst it is okay to have a method to throw away wrappers (assuming we know we're willing to
        lose any state stored on them) it is not okay to deregister the world from the JSGlobalData.
        A sequence of events that triggers the bug would look like this:

        (1) Create a DOMWrapperWorld.
        (2) Register a timer in the world.
        (3) Call unregisterWorld() on the world.
        (4) Timer goes off, code is executed in the world, creates a Node not attached to a Document.
        (5) We attempt to lookup a wrapper map for the world on the JSGlobalData, but because we've
            called forgetWorld() none exists.
        (6) Attempt to add a wrapper to a NULL map.

        Fix the problem by not removing the JSGlobalData's wrapper map until the world really goes away.

        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::clear):

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

        Reviewed by Darin Adler.

        Bug 52021 - zeroDouble broken on ARMv7

        The bug here is that zeroDouble was working incorrectly,
        leading to op_loop_if_true failing - specifically in the
        case where the value being checked is 0.0 encoded as a
        double (rather than an integer immediate).

        Additionally this patch removes a redundant duplicate compare
        in some (many) case.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::vcmp_F64):
        (JSC::ARMv7Assembler::vcmpz_F64):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::branchDoubleNonZero):
        (JSC::MacroAssemblerARM::branchDoubleZeroOrNaN):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branchDouble):
        (JSC::MacroAssemblerARMv7::branchDoubleNonZero):
        (JSC::MacroAssemblerARMv7::branchDoubleZeroOrNaN):
        (JSC::MacroAssemblerARMv7::compare32):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::branchDoubleNonZero):
        (JSC::MacroAssemblerMIPS::branchDoubleZeroOrNaN):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::branchDoubleNonZero):
        (JSC::MacroAssemblerX86Common::branchDoubleZeroOrNaN):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):

2011-01-06  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Added debug code to compare the results of JIT regexp with 
        interpreted regexp and displays discrepencies.  This debug code is
        controlled by the ENABLE_YARR_JIT_DEBUG macro in wtf/Platform.h and
        is only valid if ENABLE_YARR_JIT is enabled.

        Fixed a discovered problem in RegExp::printTraceData, changing
        m_pattern to the getter pattern().
        Also deleted an extraneous semicolon.

        Enhancement: Add Regexp Debug Compare between JIT and Interpreter
        https://bugs.webkit.org/show_bug.cgi?id=51834

        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::match):
        (JSC::RegExp::printTraceData):
        * wtf/Platform.h:

2011-01-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        [WINCE] Remove JSC::g_stackBase
        https://bugs.webkit.org/show_bug.cgi?id=51779

        * wtf/StackBounds.cpp:

2011-01-06  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Eric Seidel.

        WML Parser should treat line/column number in a consistent way
        https://bugs.webkit.org/show_bug.cgi?id=51601

        Add the equality operators to TextPosition class.

        * wtf/text/TextPosition.h:
        (WTF::TextPosition::operator==): Added.
        (WTF::TextPosition::operator!=): Added.
        (WTF::TextPosition::belowRangePosition): Use belowBase() instead of base().
        (WTF::ZeroBasedNumber::operator==): Added.
        (WTF::ZeroBasedNumber::operator!=): Added.
        (WTF::OneBasedNumber::operator==): Added.
        (WTF::OneBasedNumber::operator!=): Added.

2011-01-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Gavin Barraclough.

        [WINCE] Determine stack extent
        https://bugs.webkit.org/show_bug.cgi?id=26276

        Scan the stack for writeable pages and use the limits.

        * wtf/StackBounds.cpp:
        (WTF::detectGrowingDownward):
        (WTF::isPageWritable):
        (WTF::getLowerStackBound):
        (WTF::getUpperStackBound):
        (WTF::StackBounds::initialize):

2011-01-05  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Revert change to additional library search path needed to find ICU.

2011-01-05  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Debug and Release builds on Windows clobber each other
        https://bugs.webkit.org/show_bug.cgi?id=49185
        
        Changes the structure of WebKitBuild build products directory so we
        completely separate each build configuration into independent directories.
        
        Although we previously had per-configuration directories for obj, this change adds
        per-configuration directories for bin, lib, obj, and include. Each configuration's
        build products are stored within a directory inside of WebKitBuild.
        
        Most use of $(WebKitOutputDir) in the build files has been replaced by $(ConfigurationBuildDir),
        defined in common.vsprops to be $(WebKitOutputDir)\$(ConfigurationName).
        
        For PGO, $(ConfigurationBuildDir) points to the same directory (Release_PGO) to allow
        for proper operation of the instrumentation/optimization scripts.

        * JavaScriptCore.vcproj/JavaScriptCore.make:
        * JavaScriptCore.vcproj/JavaScriptCore.sln:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePGOOptimize.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd:
        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
        * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd:
        * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
        * JavaScriptCore.vcproj/jsc/jscPostBuild.cmd:
        * JavaScriptCore.vcproj/jsc/jscPreBuild.cmd:
        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiPostBuild.cmd:
        * JavaScriptCore.vcproj/testapi/testapiPreBuild.cmd:

2011-01-05  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * wtf/Encoder.h: Add <stdint.h> include for systems that
        do not natively know about uint8_t, etc.

2011-01-05  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Fix the usage of SOURCE_GROUP
        https://bugs.webkit.org/show_bug.cgi?id=51739

        * CMakeLists.txt:

2011-01-05  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][V8] Fix the build after recent changes.

        * pcre/pcre.pri: Correct the path after Source was introduced.

2011-01-04  Steve Falkenburg  <sfalken@apple.com>

        Build fix. Update path to FindSafari after source code reorganization.

        * JavaScriptCore.vcproj/JavaScriptCore.sln:

2011-01-04  Daniel Bates  <dbates@rim.com>

        Fix the Android build after changeset 74975 <http://trac.webkit.org/changeset/74975>
        (https://bugs.webkit.org/show_bug.cgi?id=51855).

        * wtf/ThreadingPthreads.cpp: Add include of PassOwnPtr.h.
        (WTF::runThreadWithRegistration): Use -> instead of . to dereference pointer.

2011-01-04  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the EFL build.

        * wtf/CMakeLists.txt: Remove PlatformRefPtr from the CMake source list.

2011-01-04  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Adler.

        StackBounds initialization in WTFThreadData should be guarded by #if USE(JSC)
        https://bugs.webkit.org/show_bug.cgi?id=51881

        The StackBounds class is only used by JavaScriptCore.

        * wtf/WTFThreadData.cpp:
        (WTF::WTFThreadData::WTFThreadData):
        * wtf/WTFThreadData.h:
        (WTF::WTFThreadData::resetCurrentIdentifierTable):

2011-01-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Darin Adler.

        Remove the last non-GObject usage of PlatformRefPtr and move the code to GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=51846

        * GNUmakefile.am: Remove PlatformRefPtr.h from the sources list.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
        * jit/ExecutableAllocator.h: Change references to PlatformRefPtr to RefPtr.
        (JSC::ExecutableAllocator::cacheFlush): Ditto.
        * wtf/PlatformRefPtr.h: Removed.
        * wtf/RandomNumber.cpp: Change references to PlatformRefPtr to RefPtr.
        (WTF::randomNumber): Ditto.
        * wtf/brew/RefPtrBrew.h: Ditto.
        (WTF::refIfNotNull): Added.
        (WTF::derefIfNotNull): Added.
        * wtf/brew/ShellBrew.h: Change references to PlatformRefPtr to RefPtr.
        (WTF::createRefPtrInstance): Modified to return a RefPtr.
        * wtf/gobject/GRefPtr.cpp: 
        (WTF::refGPtr): Moved from PlatformRefPtr here.
        (WTF::derefGPtr): Ditto.
        * wtf/gobject/GRefPtr.h: Ditto.
        (WTF::GRefPtr::GRefPtr): Ditto.
        (WTF::GRefPtr::~GRefPtr): Ditto.
        (WTF::GRefPtr::clear): Ditto.
        (WTF::GRefPtr::isHashTableDeletedValue): Ditto.
        (WTF::GRefPtr::get): Ditto.
        (WTF::GRefPtr::operator*): Ditto.
        (WTF::GRefPtr::operator->): Ditto.
        (WTF::GRefPtr::operator!): Ditto.
        (WTF::GRefPtr::operator UnspecifiedBoolType): Ditto.
        (WTF::GRefPtr::hashTableDeletedValue): Ditto.
        (WTF::::operator): Ditto.
        (WTF::::swap): Ditto.
        (WTF::swap): Ditto.
        (WTF::operator==): Ditto.
        (WTF::operator!=): Ditto.
        (WTF::static_pointer_cast): Ditto.
        (WTF::const_pointer_cast): Ditto.
        (WTF::getPtr): Ditto.
        (WTF::adoptGRef): Ditto.
        (WTF::refGPtr): Ditto.
        (WTF::derefGPtr): Ditto.

2011-01-04  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Roben.

        LEAK: Deallocate instance of ThreadFunctionInvocation if thread creation fails
        https://bugs.webkit.org/show_bug.cgi?id=51860

        * wtf/ThreadingWin.cpp:
        (WTF::createThreadInternal):

2011-01-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt][Symbian] Make sure that WebKit headers are included before platform headers on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=31273

        On Symbian PREPEND_INCLUDEPATH is the best way to make sure that WebKit headers
        are included before platform headers. On all other platforms continue to use
        INCLUDEPATH (as before). This is a continuation of r65877.

        No new tests as there is no new functionality.

        * JavaScriptCore.pri:

2011-01-04  Darin Adler  <darin@apple.com>

        Try to fix Windows build.

        * wtf/ThreadingWin.cpp: Added include of PassOwnPtr.h. Fixed paragraphing
        of conditional includes.
        (WTF::wtfThreadEntryPoint): Use -> instead of . to dereference pointer.
        (WTF::createThreadInternal): Tweaked #if to not need separate macro.

2011-01-04  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Roben.

        Extract ThreadFunctionInvocation into separate file and share between Apple Windows and Android
        https://bugs.webkit.org/show_bug.cgi?id=51855

        Both the Apple Windows and Android ports implement a similar adapter structure,
        called ThreadFunctionInvocation and ThreadData respectively, as part of
        their thread creation process. Instead, we should share such an adapter
        structure and remove duplicate code.

        * JavaScriptCore.gypi: Added header wtf/ThreadFunctionInvocation.h.
        * wtf/ThreadFunctionInvocation.h: Added.
        (WTF::ThreadFunctionInvocation::ThreadFunctionInvocation):
        * wtf/ThreadingPthreads.cpp: Removed Android-specific structure ThreadData; Instead, use ThreadFunctionInvocation.
        (WTF::runThreadWithRegistration):
        (WTF::createThreadInternal): 
        * wtf/ThreadingWin.cpp: Moved structure ThreadFunctionInvocation to its own file so that
        it can be shared with the Android implementation of createThreadInternal().
        (WTF::wtfThreadEntryPoint): Use OwnPtr to hold passed instance of ThreadFunctionInvocation.

2011-01-04  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Use __builtin_expect when compiling using RVCT in GNU mode
        https://bugs.webkit.org/show_bug.cgi?id=51866

        Derived from a patch by Dave Tapuska.

        * wtf/AlwaysInline.h:

2011-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson.

        * wtf/Forward.h: Added Decoder and Encoder.

2011-01-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Add Encode/Decode machinery Darin and I plan to work with for back/forward stuff in WebKit2.

        Starting out with a pure virtual interface to be implemented in WK2, but we might change that later.

        * GNUmakefile.am:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:

        * wtf/Decoder.h: Added.
        * wtf/Encoder.h: Added.

2011-01-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix.

        [Qt] Add NullPtr.cpp introduced in r71155 to the Qt build system.

        This fix is required for builds where HAVE(NULLPTR) is false
        (e.g. some MSVC and Symbian builds).

        * wtf/wtf.pri:

2011-01-02  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Simon Fraser.

        <rdar://problem/8812159> Update copyright strings

        * Info.plist:

2011-01-02  Csaba Osztrogonác  <ossy@webkit.org>

        Fix GTK+ build after r74855.

        Reviewed by Xan Lopez.

        * GNUmakefile.am: Fix include pathes.

2011-01-02  Adam Barth  <abarth@webkit.org>

        One more .. missing in the Qt build.

        * jsc.pro:

2011-01-02  Xan Lopez  <xlopez@igalia.com>

        Fix GTK+ build.

        * GNUmakefile.am: add -I$(srcdir)/Source to the JSC cppflags so
        that anyone can include its headers without adding the prefix
        'Source/'.

2011-01-02  Carl Lobo  <carllobo@gmail.com>

        Reviewed by Adam Barth.

        Fix Windows Build for non-production where VSPropsRedirectionDir is not defined.
        https://bugs.webkit.org/show_bug.cgi?id=51797

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Fix relative include paths in an attempt to fix the Qt build.

        * JavaScriptCore.pri:
        * JavaScriptCore.pro:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Another speculative build fix for GTK.

        * GNUmakefile.am:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Speculative build fix for GTK.  Update the paths in GNUmakefile to
        include "Source".

        * GNUmakefile.am:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Update relative paths in JavaScriptCore.gyp to account for the extra
        level of directories.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2010-12-31  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Add a fast case for ASCII strings in HashAndUTF8CharactersTranslator::equal
        https://bugs.webkit.org/show_bug.cgi?id=50517

        This change shows about 2% performance win on the xml-parser benchmark.

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

2010-12-30  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Ariya Hidayat.

        [CMake] Add WTF_HEADERS
        https://bugs.webkit.org/show_bug.cgi?id=51741

        Add the WTF headers to show them in Visual Studio.

        * wtf/CMakeLists.txt:
        * wtf/CMakeListsWinCE.txt:

2010-12-30  Konstantin Tokarev  <annulen@yandex.ru>

        Reviewed by David Kilzer.

        [Qt] Don't build wtf/TCSystemAlloc.cpp if --system-malloc option is
        used
        https://bugs.webkit.org/show_bug.cgi?id=51672

        * wtf/wtf.pri: Replaced USE_SYSTEM_MALLOC with USE_SYSTEM_MALLOC=1

2010-12-30  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Use OS(WINDOWS) instead of COMPILER(MSVC) in FastMalloc.cpp
        https://bugs.webkit.org/show_bug.cgi?id=51743

        Most of the ifdefs belong to windows and not to the MSVC compiler.

        * wtf/FastMalloc.cpp:

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

        Reviewed by Sam Weinig.

        Bug 51724 - In strict mode string literals should allow \0, but disallow \8 and \9.

        * parser/Lexer.cpp:
        (JSC::Lexer::parseString):

2010-12-29  Helder Correia  <helder@sencha.com>

        Reviewed by Eric Seidel.

        <VT> and <FF> are not valid JSON whitespace characters
        https://bugs.webkit.org/show_bug.cgi?id=51671

        Vertical Tab and Form Feed are not allowed white spaces by the JSON
        RFC 4627: http://www.ietf.org/rfc/rfc4627.txt (2. JSON Grammar).

        Tests: ietestcenter/Javascript/15.12.1.1-0-2.html
               ietestcenter/Javascript/15.12.1.1-0-3.html

        * runtime/LiteralParser.cpp:
        (JSC::isJSONWhiteSpace):
        (JSC::LiteralParser::Lexer::lex):

2010-12-28  Helder Correia  <helder@sencha.com>

        Reviewed by Eric Seidel.

        JSON.stringify must exist as a function taking 3 parameters
        https://bugs.webkit.org/show_bug.cgi?id=51667

        The reported function length is 1 instead.

        Test: ietestcenter/Javascript/15.12.3-0-2.html

        * runtime/JSONObject.cpp:

2010-12-28  Helder Correia  <helder@sencha.com>

        Reviewed by Sam Weinig.

        JSON.parse must exist as a function taking 2 parameters
        https://bugs.webkit.org/show_bug.cgi?id=51666

        Support for revivers was introduced in bug 26591, but the function
        length has since remained unchanged.

        Test: ietestcenter/Javascript/15.12.2-0-2.html

        * runtime/JSONObject.cpp:

2010-12-27  Jake Helfert  <jake@jakeonthenet.com>

        Reviewed and reworked by Darin Adler.

        Building WebKit with Visual Studio 2010 fails due
        to ambiguous assignment operator errors.
        https://bugs.webkit.org/show_bug.cgi?id=51116

        * wtf/NullPtr.h: Added a HAVE(NULLPTR) definition for use with
        Platform.h HAVE macro, and included the Visual Studio 2010 compiler
        as one of the ones that has nullptr.
        * wtf/NullPtr.cpp: Updated condition to match.
        
        * wtf/PassOwnArrayPtr.h: Don't include the operator=(nullptr_t)
        overload if we are compiling in loose mode and the compiler has
        nullptr, because assignment of 0 will otherwise encounter
        ambiguitity with this overload and the overload for loose mode
        that takes a raw pointer. The conditional can be removed when we
        get rid of loose mode.
        * wtf/PassOwnPtr.h: Ditto.

        * wtf/PassRefPtr.h: Don't include the operator=(nullptr_t) overload
        if the compiler has nullptr, because assignment of 0 would be
        ambiguous with the overload that takes a raw pointer. The conditional
        can be removed if we ever decide we no longer need to support
        assigning 0, but might need a way to catch that usage on older compilers.
        * wtf/RefPtr.h: Ditto.
        * wtf/RetainPtr.h: Ditto

        * JavaScriptCore.xcodeproj/project.pbxproj: Added NullPtr.cpp,
        accidentally omitted when the file was first added.

2010-12-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Add standalone target for JSC
        https://bugs.webkit.org/show_bug.cgi?id=51607

        * GNUmakefile.am: add convenience target to only build jsc and its
        dependencies.

2010-12-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        [WINCE] Add CPU(MIPS) detection
        https://bugs.webkit.org/show_bug.cgi?id=51342

        WinCE usually defines MIPS and _MIPS_.

        * wtf/Platform.h:

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

        Reviewed by Sam Weinig.

        Rename RegexCompiler.cpp to RegexPattern.cpp.
        Implicitly call compileRegex from RegexPattern's constructor.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        * yarr/RegexCompiler.cpp: Removed.
        * yarr/RegexCompiler.h: Removed.
        * yarr/RegexInterpreter.cpp:
        * yarr/RegexJIT.cpp:
        * yarr/RegexPattern.cpp: Copied from JavaScriptCore/yarr/RegexCompiler.cpp.
        (JSC::Yarr::compileRegex):
        (JSC::Yarr::RegexPattern::RegexPattern):
        * yarr/RegexPattern.h:

2010-12-23  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for WinCE after r74360.

        Move the OS(WINDOWS) section after the OS(WINCE) section
        and add missing argument to the getStackMax call.

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::initialize):

2010-12-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix.

        [Symbian] Make sure OSAllocatorSymbian builds

        This patch only addresses the build problem.

        https://bugs.webkit.org/show_bug.cgi?id=51128 tracks the full
        (re)implementation of the Symbian allocator.

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

2010-12-22  Dan Bernstein  <mitz@apple.com>

        Changed WebKitTools to Tools.

        * JavaScriptCore.vcproj/JavaScriptCore.sln:

2010-12-22  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        Changed WebKitTools to Tools in script build phases.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2010-12-22  Andrei Popescu  <andreip@google.com>

        Unreviewed build fix.

        Fix Chromium Linux shared library build.
        [Chromium] r74431 broke the Chromium Linux shared library build
        https://bugs.webkit.org/show_bug.cgi?id=51462

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:

2010-12-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74462.
        http://trac.webkit.org/changeset/74462
        https://bugs.webkit.org/show_bug.cgi?id=51449

        broke chromium win (Requested by tonyg-cr on #webkit).

        * JavaScriptCore.gypi:

2010-12-21  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        [chromium] Build fix after r74431
        https://bugs.webkit.org/show_bug.cgi?id=51447

        * JavaScriptCore.gypi:

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Speculative build fix.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::underMemoryPressure):

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

        Reviewed by Oliver Hunt.

        Bug 26276 - Need a mechanism to determine stack extent

        This patch adds accurate stack size calculation for:
            DARWIN, QNX, UNIX
        We still need to fix:
            WINDOWS, SOLARIS, OPENBSD, SYMBIAN, HAIKU, WINCE

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::initialize):

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

         Reviewed by Geoff Garen.
 
        <rdar://problem/8765333> CRASH running out of executable memory, loading io9.com
        https://bugs.webkit.org/show_bug.cgi?id=51443

        The problem here is that each page uses a reasonable amount of memory, (~4Mb),
        and that when miultiple pages are open we keep all JIT code for all functions
        in all pages alive.

        Add a check to detect high memory pressure situations in the executable allocator
        (>50% of available memory allocated), and upon a top level entry into JSC (no code
        running on the stack) in this situation throw away all JIT code.

        * JavaScriptCore.exp:
        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions): stop passing exec to recompile.
        * jit/ExecutableAllocator.h:
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::ExecutablePool::systemAlloc): Count allocations.
        (JSC::ExecutablePool::systemRelease): Count deallocations.
        (JSC::ExecutablePool::underMemoryPressure): Check memory pressure.
        * jit/ExecutableAllocatorPosix.cpp:
        (JSC::ExecutablePool::underMemoryPressure): Stub out; only meaningful with FixedVMPool.
        * jit/ExecutableAllocatorWin.cpp:
        (JSC::ExecutablePool::underMemoryPressure): Stub out; only meaningful with FixedVMPool.
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::recompile): Remove ExecState argument to recompile.
        * runtime/Executable.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::recompileAllJSFunctions): throws away all JIT code.
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.h:
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): add check / call to throw away.

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

        Reviewed by Geoff Garen.

        <rdar://problem/8241425> JIT executable memory excessive usage due to regex caching
        https://bugs.webkit.org/show_bug.cgi?id=51434

        Reduce the amount of memory the RegExpCache can hold on to on iOS.
        Currently the RegExpCache can hold 256 RegExp objects. If each falls into a separate
        ExecutablePool, with a common size of 16Kb, this means we end up holding onto 4Mb of
        memory. Firstly, we can reduce this by simply reducing the size of the cache to 32
        entries. Secondly, we can use a separate set of ExecutablePools for JIT code generated
        from RegExp objects. This helps in two ways (1) it increases the probability that
        RegExps in the cache share the same pool, and (2) it means that a RegExp can't end
        up holding on to a large ExecutablePool containing a translation of JS code.
        (A RegExp could end up keeping a larger RegExp alive that happened to be sharing the
        same pool, but large RegExp patterns are less common).

        * runtime/JSGlobalData.h:
        * runtime/RegExpCache.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::compile):

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Eeeep! build fix!

        * wtf/OSAllocator.h:
        (WTF::OSAllocator::decommitAndRelease):

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

        Ooops, fixed typo in comment.

        * wtf/OSAllocator.h:

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

        Reviewed by Gavin Barraclough & Oliver Hunt.

        Added PageAllocationAligned, a cross-platform abstraction for memory allocations with arbitrary alignment requirements
        https://bugs.webkit.org/show_bug.cgi?id=51359
        
        I think this patch fixes <rdar://problem/8107952> [5.0.1] WER crash in
        Heap::allocateBlock (1902752929), and some other leaks and crashes as well.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj: Updated build files.

        * runtime/AlignedMemoryAllocator.h: Removed. Supplanted by
        PageAllocationAligned.

        * runtime/Collector.cpp:
        (JSC::Heap::destroy):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlock):
        (JSC::Heap::addWeakGCHandle):
        * runtime/Collector.h: Switched from AlignedMemoryAllocator to
        PageAllocationAligned.

        * runtime/GCHandle.cpp:
        * runtime/GCHandle.h: Ditto.

        * wtf/PageAllocation.h:
        (WTF::PageAllocation::PageAllocation): Removed aligned memory allocation
        functions. Supplanted by PageAllocationAligned.

        * wtf/PageAllocationAligned.cpp: Added.
        (WTF::PageAllocationAligned::allocate):
        (WTF::PageAllocationAligned::deallocate):
        * wtf/PageAllocationAligned.h: Added.
        (WTF::PageAllocationAligned::PageAllocationAligned): New cross-platform
        class for doing aligned memory allocation. This class properly matches
        allocation and deallocation library calls, fixing a long-standing bug
        in PageAllocation.

        * wtf/Platform.h: Removed some defunction VM platform defines.

        * wtf/wtf.pri: Updated build files.

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

        Reviewed by Gavin Barraclough.

        ASSERTION FAILED: base->index() == m_codeBlock->argumentsRegister() while loading taobao.com
        https://bugs.webkit.org/show_bug.cgi?id=49006

        This problem was caused by having a parameter named 'arguments'.
        The fix is to treat parameters named 'arguments' as shadowing
        the actual arguments property, and so logically turn the function
        into one that doesn't "use" arguments.

        This required a bit of fiddling in the parser to ensure we correctly
        propagate the 'feature' of shadowing is set correctly.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::createArgumentsIfNecessary):
          Change assertion to an early return as we may now reference
          a property named 'arguments' without being in a function that
          has the ArgumentsFeature
        * parser/JSParser.cpp:
        (JSC::JSParser::Scope::Scope):
        (JSC::JSParser::Scope::declareParameter):
        (JSC::JSParser::Scope::shadowsArguments):
        (JSC::JSParser::parseProgram):
        (JSC::JSParser::parseFormalParameters):
        (JSC::JSParser::parseFunctionInfo):
        * parser/Nodes.h:
        (JSC::ScopeNode::usesArguments):

2010-12-21  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel and Darin Adler.

        Deallocate GregorianDateTime.timeZone (if allocated) when copying so that we don't leak memory.
        https://bugs.webkit.org/show_bug.cgi?id=51367

        Inspired by a patch by George Staikos.

        * wtf/DateMath.cpp:
        (JSC::msToGregorianDateTime): Modified to set timeZone to nullptr since timeZone is now
        of type OwnPtrArray<char>.
        * wtf/DateMath.h: Change timeZone to type OwnArrayPtr<char>; Removed destructor since it is no longer needed.
        (JSC::GregorianDateTime::GregorianDateTime): Modified to use OwnPtrArray semantics for timeZone.
        (JSC::GregorianDateTime::operator tm): Ditto.
        (JSC::GregorianDateTime::copyFrom): Ditto.

2010-12-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74402.
        http://trac.webkit.org/changeset/74402
        https://bugs.webkit.org/show_bug.cgi?id=51402

        This patch broke the Windows 7 Release Layout Tests (Requested
        by jessieberlin on #webkit).

        * wtf/StackBounds.cpp:
        (WTF::estimateStackBound):
        (WTF::StackBounds::initialize):

2010-12-21  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        Unify the name of parentheses in YARR: rename parenthesis to
        parentheses.

        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::RegexPatternConstructor::atomParenthesesEnd):

2010-12-21  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Set BUILDING_QT__ consistently
        https://bugs.webkit.org/show_bug.cgi?id=51341

        * JavaScriptCore.pri: Remove the definition of BUILDING_QT__ as it
        is already defined in WebKit.pri.

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

        Reviewed by Oliver Hunt.

        Bug 26276 - Need a mechanism to determine stack extent

        This patch adds accurate stack size calculation for:
            DARWIN, WINDOWS, QNX, UNIX
        We still need to fix:
            SOLARIS, OPENBSD, SYMBIAN, HAIKU, WINCE

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::initialize):

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

        PPC build fix; stop using std::swap on PageAllocation/PageReservation,
        this was failing on some compilers since the lack of default construction
        for the m_executable/m_writable fields meant the value being swapped may
        not have been fully initialized.

        * wtf/PageAllocation.h:
        (WTF::PageAllocation::deallocate):
        * wtf/PageBlock.h:
        * wtf/PageReservation.h:
        (WTF::PageReservation::deallocate):

2010-12-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        |delete name| in strict mode code should be an early error
        https://bugs.webkit.org/show_bug.cgi?id=50431

        Disallow the |delete IDENTIFIER| production in strict mode, and removed
        a bunch of now unnecessary code.

        * parser/JSParser.cpp:
        (JSC::JSParser::Scope::collectFreeVariables):
        (JSC::jsParse):
        (JSC::JSParser::parseProgram):
        (JSC::JSParser::parseUnaryExpression):
        * parser/JSParser.h:
        * parser/Parser.cpp:
        (JSC::Parser::parse):
        * parser/Parser.h:
        (JSC::Parser::parse):

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

        Reviewed by Olver Hunt.

        Bug 51358 - Should check stack depth rather than using recursion limits in byte compilation

        The current implementation of recursion limit checking is not safe on smaller stacks.
        Switch to using a common mechanism, shared with the parser, to check recursion limits.

        Make bytecompiler use StackBounds. Empirical testing shows emitStrcat to have the largest
        footprint on the stack, at just under 1k on x86-64.  Given this, the default recursion
        check (requiring 4k of available space to recurse) seems reasonable.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitNode):
        (JSC::BytecodeGenerator::emitNodeInConditionContext):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BinaryOpNode::emitStrcat):

2010-12-20  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Include pthread to fix chromium mac build (broken by r74360)
        https://bugs.webkit.org/show_bug.cgi?id=51356

        * wtf/StackBounds.cpp:

2010-12-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        * GNUmakefile.am: add missing files.

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

        Reviewed by Oliver Hunt.

        Bug 26276 - Need a mechanism to determine stack extent

        This patch adds a class 'StackBounds', to hold information about the machine stack.
        The implementation of this class broadly adheres to the current implmentation of
        stack limit checking, and as such does not solve the problem of determining stack
        extent, but gives us a common place to do so.

        Currently two mechanism are provided to determine the stack origin (the point the
        stack is growing away from). currentThreadStackBase() in Collector provides a
        more accurate determination of the stack origin, so use this to calculate
        StackBounds::m_origin; WTFThreadData::approximatedStackStart is less accurate, and
        as such can be removed.  Cache the StackBounds on WTFThreadData such that they
        need only be determined once per thread, and for non-API contexts cache this
        information in JSGlobalData, to save a thread-specific access.

        For the time being retain the estimate of stack size used by JSC's parser
        (128 * sizeof(void*) * 1024), with a view to replacing this with something more
        accurate in the near future.

        * parser/JSParser.cpp:
        (JSC::JSParser::canRecurse):
        (JSC::JSParser::JSParser):
            Change to use StackBounds.
        * runtime/Collector.cpp:
        (JSC::Heap::registerThread):
        (JSC::Heap::markCurrentThreadConservativelyInternal):
            Change to use StackBounds, cached on JSGlobalData.
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::stack):
            Add a cached copy of StackBounds.
        * wtf/StackBounds.cpp: Copied from JavaScriptCore/runtime/Collector.cpp.
        (WTF::estimateStackBound):
        (WTF::StackBounds::initialize):
        (WTF::getStackMax):
            Copy code from Collector.cpp to determine stack origin.
        * wtf/StackBounds.h: Added.
        (WTF::StackBounds::StackBounds):
            No argument constructor; returns a null StackBounds.
        (WTF::StackBounds::currentThreadStackBounds):
            Returns a StackBounds object representing the stack limits
            of the current thread.
        (WTF::StackBounds::origin):
            Returns to stack origin (the point the stack is growing away
            from; the highest extent of the stack on machines where the
            stack grows downwards.
        (WTF::StackBounds::recursionLimit):
            Returns a limit value that is 'a comfortable distance from
            the end of the stack'. Our concept of this is currently 1 page
            away from the end, however the default value may be tuned in
            the future, and clients may override passing a larger delta;
            should only be called on StackBounds object representing the
            stack of the thread this method is called on (checked by
            checkConsistency).
        (WTF::StackBounds::recursionCheck):
            Checks whether we are currently 'a comfortable distance from
            the end of the stack'. Our concept of this is currently 1 page
            away from the end, however the default value may be tuned in
            the future, and clients may override passing a larger delta
            to apply when checking, if they wish to do so. This method
            should only be called on StackBounds object representing the
            stack of the thread this method is called on (checked by
            checkConsistency).
        (WTF::StackBounds::current):
            Approximate current stack position. On machines where the stack
            is growing downwards this is the lowest address that might need
            conservative collection.
        (WTF::StackBounds::isGrowingDownward):
            True for all platforms other than WINCE, which has to check.
        (WTF::StackBounds::checkConsistency):
            This is called in methods that shoulds only be operating on a
            valid set of bounds; as such we expect m_origin != m_bounds
            (i.e. stack size != zero) - we're really testing that this
            object is not null (the constructor initializes both fields
            to zero).  Also checks that current() is within the stack's
            bounds.
        * wtf/WTFThreadData.cpp:
        (WTF::WTFThreadData::WTFThreadData):
        * wtf/WTFThreadData.h:
        (WTF::WTFThreadData::stack):
            Add the StackBounds member variable.

2010-12-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Factored common page set management into a new PageBlock base class
        https://bugs.webkit.org/show_bug.cgi?id=51285

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::intializePageSize):
        * wtf/PageAllocation.cpp: Removed.
        * wtf/PageAllocation.h:
        (WTF::PageAllocation::deallocate):
        (WTF::PageAllocation::PageAllocation):
        * wtf/PageReservation.h:
        (WTF::PageReservation::commit):
        (WTF::PageReservation::decommit):
        (WTF::PageReservation::deallocate):
        (WTF::PageReservation::PageReservation):
        * wtf/wtf.pri:

2010-12-17  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        RegExp Jit'ed expression crashes clicking link on yelp.com
        https://bugs.webkit.org/show_bug.cgi?id=51284

        When transitioning between an non-repeating beginning of line
        anchored expression and the remaining refactored repeating 
        expression, we should not clear any residual datalabel in 
        state's m_backtrack.  It will be resolved and cleared in subsequent
        code when linkAlternativeBacktracks() is called for the repeating
        alternative(s).

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::BacktrackDestination::clear):
        (JSC::Yarr::RegexGenerator::TermGenerationState::clearBacktrack):

2010-12-17  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        Updated for the renaming of WebKitTools to Tools

        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:

2010-12-17  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Oliver Hunt.

        [JSC] parseAssignmentExpression should use TreeBuilder::CreatesAST
        https://bugs.webkit.org/show_bug.cgi?id=51268

        * parser/JSParser.cpp:
        (JSC::JSParser::parseAssignmentExpression):

2010-12-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed RChunk from PageAllocation/PageReservation, since it's now unused.
        https://bugs.webkit.org/show_bug.cgi?id=51276

        * wtf/PageAllocation.h:
        (WTF::PageAllocation::PageAllocation):
        * wtf/PageReservation.h:
        (WTF::PageReservation::PageReservation):

2010-12-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Incorrect encoding of some constants in ARMv7 JIT
        https://bugs.webkit.org/show_bug.cgi?id=51273
        <rdar://problem/8650210>

        When using immediate encoding 3 we need to write the byte
        that holds a duplicated value.

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

2010-12-16  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] useless warnings when building on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50985

        Disable some compiler warnings that aren't indicative of real problems.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2010-12-16  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=51166
        ExecutableAllocator::cacheFlush should call sys_cache_control

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush): Use the more correct and forward looking API -
        sys_cache_control(kCacheFunctionPrepareForExecution,...).

2010-12-16  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Andreas Kling.

        [JSC] Const correctness in ASTBuilder and SyntaxChecker
        https://bugs.webkit.org/show_bug.cgi?id=51141

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::getName):
        (JSC::ASTBuilder::getType):
        (JSC::ASTBuilder::isResolve):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::operatorStackPop):

2010-12-15  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Web Audio API: port FFTFrame to MKL
        https://bugs.webkit.org/show_bug.cgi?id=50986

        Fixed bug in log2 emulation function provided for Windows port of
        Web Audio API.

        * wtf/MathExtras.h:
        (log2):

2010-12-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <http://webkit.org/b/51064> Reproducible crash inside WebCore::MediaPlayerPrivateQTKit::createQTMovie when loading <video>

        * wtf/text/WTFString.h: Prevent String from being implicitly convertable to bool.
        It was previously implicitly convertible to bool on Mac via operator NSString*,
        but since that always has a non-zero return value it would give unexpected results.

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

        Reviewed by Eric Seidel.

        [Qt] [Symbian] Do not use pkg-config on Symbian as it is not supported
        https://bugs.webkit.org/show_bug.cgi?id=50231

        Guard CONFIG+=link_pkgconfig with !symbian.

        * jsc.pro:

2010-12-14  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Revert accidental change disabling the JIT for most platforms.

        * wtf/Platform.h:

2010-12-13  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Eric Seidel.

        Clang fails to build the JSC interpreter
        https://bugs.webkit.org/show_bug.cgi?id=51016

        Clang does not allow indirect gotos out of scopes with cleanup. GCC 4.2 allows
        them, but it does not correctly generate the cleanup, causing a leak if the
        cleanup decrements a reference count.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute): Put an Identifier into its own scope.

2010-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Simplify context-menu handling code
        https://bugs.webkit.org/show_bug.cgi?id=49658

        * wtf/PlatformRefPtr.h: Add leakRef()

2010-12-13  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Gavin Barraclough.

        JavaScriptCore should not use "asm volatile" outside of a function
        https://bugs.webkit.org/show_bug.cgi?id=50991

        * jit/JITStubs.cpp: Remove the volatile keyword from asm statements.

2010-12-13  Steve Falkenburg  <sfalken@apple.com>

        Windows production build fix.
        Try copying ICU 4.6 in addition to 4.4 and 4.2.

        * JavaScriptCore.vcproj/jsc/jscPostBuild.cmd:

2010-12-13  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION: mobileme mail viewing is broken
        https://bugs.webkit.org/show_bug.cgi?id=50884

        Fixed problem where simple parenthesis (those without capture and
        with a fixed count) where not propagating backtrack to labels for 
        nested parentheses.  Also added the nesting level for the parentheses 
        state created in that case as well.

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::BacktrackDestination::copyBacktrackToLabel):
        (JSC::Yarr::RegexGenerator::TermGenerationState::isLastTerm):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::generateCode):
        (JSC::Yarr::RegexGenerator::generateParenthesesSingle):

2010-12-13  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Reduce the size of the RegexStackSpaceForBackTrackInfoParentheses in YARR
        https://bugs.webkit.org/show_bug.cgi?id=49385

        Remove the BackTrackInfoParentheses struct prevBegin and prevEnd members.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::matchParentheses):
        (JSC::Yarr::Interpreter::backtrackParentheses):
        * yarr/RegexPattern.h:

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

        Reviewed by Gavin Barraclough.

        REGRESSION Hang inside Yarr::RegexCodeBlock::execute when visiting
        bugs.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=50816

        First nested parentheses of the second or greater alternative
        where backtracking to the prior parentheses.  Changed the default
        handling of initial parentheses for all alternatives to go back
        to the immediate outer paren.

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::GenerationState::addParenthesesTail):
        (JSC::Yarr::RegexGenerator::TermGenerationState::TermGenerationState):
        (JSC::Yarr::RegexGenerator::TermGenerationState::isLastTerm):
        (JSC::Yarr::RegexGenerator::TermGenerationState::getTermIndex):
        (JSC::Yarr::RegexGenerator::TermGenerationState::setParenthesesTail):
        (JSC::Yarr::RegexGenerator::TermGenerationState::getParenthesesTail):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::ParenthesesTail):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::processBacktracks):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::generateCode):
        (JSC::Yarr::RegexGenerator::generateParenthesesSingle):

2010-12-11  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Add an overload to makeString for Vector<char>
        https://bugs.webkit.org/show_bug.cgi?id=50123

        Also cleanup StringTypeAdapter.

        * wtf/text/StringConcatenate.h:

2010-12-10  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Build fix for Symbian: don't compile POSIX memory management implementation 
        https://bugs.webkit.org/show_bug.cgi?id=50707

        * wtf/wtf.pri:

2010-12-10  Steve Falkenburg  <sfalken@apple.com>

        Windows production build fix.
        
        Don't stop if react-to-vsprops-changes.py exits with an error,
        since this will occur in production builds.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:

2010-12-10  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Turn on USE(CROSS_PLATFORM_CONTEXT_MENUS) for Windows.

        * wtf/Platform.h:

2010-12-10  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed, rolling out r73703.
        http://trac.webkit.org/changeset/73703
        https://bugs.webkit.org/show_bug.cgi?id=49658

        This patch is causing crashes on the GTK+ bots.

        * wtf/PlatformRefPtr.h:

2010-12-10  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Cleanup StringWx.cpp
        https://bugs.webkit.org/show_bug.cgi?id=50525

        Use StringImpl::createUninitialized to avoid memcpy and fix style issues.

        * wtf/wx/StringWx.cpp:
        (WTF::String::String):

2010-12-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Simplify context-menu handling code
        https://bugs.webkit.org/show_bug.cgi?id=49658

        * wtf/PlatformRefPtr.h:

2010-12-09  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        REGRESSION (r73065?): A regex no longer works 
        https://bugs.webkit.org/show_bug.cgi?id=50570

        Changed the handling of adjacent parentheses backtracks in two ways.
        First, only outer most paren backtracks default to back tracking
        to the "next character" looping code.  Second, added a jump around 
        backtracks that fall through to the next backtrack where the
        second backtrack has some greedy processing before the backtracking
        from outside the parentheses code.
        Also cleaned up extraneous white spce, removing white space at the
        end of or that makes up a whole line.

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::GenerationState::GenerationState):
        (JSC::Yarr::RegexGenerator::GenerationState::incrementParenNestingLevel):
        (JSC::Yarr::RegexGenerator::GenerationState::decrementParenNestingLevel):
        (JSC::Yarr::RegexGenerator::GenerationState::addParenthesesTail):
        (JSC::Yarr::RegexGenerator::GenerationState::emitParenthesesTail):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::ParenthesesTail):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::setNextIteration):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::generateCode):
        (JSC::Yarr::RegexGenerator::generateParenthesesSingle):

2010-12-09  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Addressed the "FIXME" issues in array sort for toString() methods that
        mutate the array in either size or contents.  The change is to mark
        the temporary array contents so that they are not garbage collected
        and to make sure the array is large enough to hold the contents
        of the sorted temporary vector.
        https://bugs.webkit.org/show_bug.cgi?id=50718

        * runtime/Collector.cpp:
        (JSC::Heap::addTempSortVector):
        (JSC::Heap::removeTempSortVector):
        (JSC::Heap::markTempSortVectors):
        (JSC::Heap::markRoots):
        * runtime/Collector.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::sort):
        * runtime/JSValue.h:

2010-12-09  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Changed setting of backtrack labels to not overwrite a prior
        label.  Where losing prior labe which then reverted back to 
        next character label.
        https://bugs.webkit.org/show_bug.cgi?id=50579

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::BacktrackDestination::setBacktrackToLabel):

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

        Reviewed by Sam Weinig.

        Permit Character Class Escape in CharacterRange in Character Class.
        https://bugs.webkit.org/show_bug.cgi?id=50483
        https://bugs.webkit.org/show_bug.cgi?id=50538
        https://bugs.webkit.org/show_bug.cgi?id=50654
        https://bugs.webkit.org/show_bug.cgi?id=50646

        We recently tightened up our spec conformance in generating syntax
        error in these cases, however testing in the wild has shown this
        to be problematic. This reverts the previous change in allowing
        class escapes (e.g. \d) in ranges in character classes ([]), but
        does retain some closer conformance to the spec in only allowing
        ranges that would be permitted per the grammar rules in the spec
        (e.g. in /[\d-a-z]/ "a-z" cannot be considered as a range).

        * yarr/RegexParser.h:
        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass):
        (JSC::Yarr::Parser::parse):

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

        Reviewed by Sam Weinig.

        Try to fix crash-on-launch seen on Windows builder.

        * wtf/OSAllocatorWin.cpp:
        (WTF::OSAllocator::release): Disabled an ASSERT, because it checks for
        a bug that hasn't been fixed yet.

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

        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated .def file.

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

        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated .def
        file to remove a symbol -- the next build failure will say which symbol
        to add back.

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

        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated .def file.

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

        Try to fix GTK Linux build.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutablePool::systemAlloc):
        * runtime/AlignedMemoryAllocator.h:
        (JSC::::AlignedMemoryAllocator): Updated for Usage enum moving to OSAllocator.

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

        Reviewed by Sam Weinig.

        Migrated OS-specific allocation code from PageReservation and PageAllocation to OSAllocator
        https://bugs.webkit.org/show_bug.cgi?id=50653

        * JavaScriptCore.exp: Updated for new function signature.

        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::grow):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::reuse):
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): Removed checkAllocatedOkay.
        OSAllocator is now the central location for verifying that allocation succeeds.
        This allowed me to remove some complicating cross-platform cruft.

        * runtime/AlignedMemoryAllocator.h:
        (JSC::::allocate): Updated for code motion.

        * wtf/OSAllocator.h: Added Usage, writable, and executable parameters, to
        support VM features required by clients of PageAllocation and PageReservation.

        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::reserve):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::commit): Moved PageAllocation support for randomizing
        executable memory here.

        * wtf/OSAllocatorSymbian.cpp:
        (WTF::OSAllocator::reserve):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::commit): Updated for new function signatures.

        * wtf/OSAllocatorWin.cpp:
        (WTF::protection):
        (WTF::OSAllocator::reserve):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::commit):
        (WTF::OSAllocator::release): Updated for new function signatures. Moved
        some protection-related and WINCE-related code from PageAllocation here.

        * wtf/PageAllocation.cpp: Nixed cross-platform lastError abstraction, since
        it was only used by checkAllocatedOkay, which is now gone.

        * wtf/PageAllocation.h:
        (WTF::PageAllocation::allocate):
        (WTF::PageAllocation::allocateAligned):
        (WTF::PageAllocation::deallocate):
        (WTF::PageAllocation::isPowerOfTwo):
        (WTF::PageAllocation::systemAllocateAligned): Removed system* functions,
        and replaced calls to them with calls to OSAllocator.

        * wtf/PageReservation.h:
        (WTF::PageReservation::commit):
        (WTF::PageReservation::decommit):
        (WTF::PageReservation::reserve):
        (WTF::PageReservation::deallocate):
        (WTF::PageReservation::PageReservation): Ditto. Added m_writable and
        m_executable because these flags are now required when committing memory.

2010-12-08  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add web audio files to mac port Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=50721

        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Reviewed by Gavin Barraclough.

        Marking the active global object re-enters through markConservatively
        https://bugs.webkit.org/show_bug.cgi?id=50711

        draining of the MarkStack is not allowed to be re-entrant, we got away
        with this simply due to the logic in MarkStack::drain implicitly handling
        changes that could be triggered by the re-entry.

        Just to be safe this patch removes the re-entry through markConservatively
        so we don't accidentally introduce such an issue in future.  I've also
        added an assertion to catch such errors.

        * runtime/Collector.cpp:
        (JSC::Heap::markConservatively):
        (JSC::Heap::markCurrentThreadConservativelyInternal):
        (JSC::Heap::markOtherThreadConservatively):
        * runtime/JSArray.h:
        (JSC::MarkStack::drain):
        * runtime/MarkStack.h:
        (JSC::MarkStack::MarkStack):

2010-12-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Added a WTF_PLATFORM_CA flag. Set when platform is MAC or IOS or (WINDOWS AND CG)
        which was decided was the best way to identify a build with CoreAnimation

        * wtf/Platform.h:

2010-12-07  Anders Carlsson  <andersca@apple.com>

        Build fix follow up build fix.

        * pcre/pcre_ucp_searchfuncs.cpp:
        (jsc_pcre_ucp_othercase):

2010-12-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Fix clang++ build
        https://bugs.webkit.org/show_bug.cgi?id=50645

        Explicitly cast offset to int.

        * pcre/pcre_ucp_searchfuncs.cpp:
        (jsc_pcre_ucp_othercase):

2010-12-07  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Fix compilation of core web audio files on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50603

        Added log2 definition to MathExtras.h on Windows platform.

        * wtf/MathExtras.h:
        (log2):

2010-12-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Gavin Barraclough.

        https://bugs.webkit.org/show_bug.cgi?id=50412
        http://www.wunderground.com/US/CA/Hayward.html causes big memory spike during page loading 
        
        Creating a substring caused the original string be flattened if it was in the rope form. This could use
        significant amount of memory by reducing buffer sharing between strings.
        
        Add a rope specific substring function that constructs the substring by reusing the rope fibers
        instead of flattening the rope.
        
        No change observed in SunSpider.

        * runtime/JSString.cpp:
        (JSC::JSString::substringFromRope):
        * runtime/JSString.h:
        (JSC::jsSubstring):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncSubstr):
        (JSC::stringProtoFuncSubstring):

2010-12-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin Barraclough.

        Simplified some ASLR-related code in PageAllocation/Reservation
        https://bugs.webkit.org/show_bug.cgi?id=50599
        
        Removed reserveAt, allocateAt, and friends, since they all existed to
        serve one feature: ASLR for executable memory on x86_64 on Mac. Moved
        ASLR code down into systemAllocate -- now, any time you allocate
        executable memory on a supporting platform, the memory's location is
        randomized.

        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): No need for the caller
        to randomize anything.

        * wtf/PageAllocation.h:
        (WTF::PageAllocation::systemAllocate): Removed some *At() functions, and
        beefed up executable allocation with randomization.

        * wtf/PageReservation.h:
        (WTF::PageReservation::systemReserve): Removed some *At() functions.

2010-12-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        reserveAndCommit doesn't commit on MADVISE_FREE_REUSE systems
        https://bugs.webkit.org/show_bug.cgi?id=50588
        
        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::reserve):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::commit): Tightened up some comments. Changed
        reserveAndCommit to actually commit on MADVISE_FREE_REUSE systems.

2010-12-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WINCE] Add build system
        https://bugs.webkit.org/show_bug.cgi?id=50522

        * CMakeListsWinCE.txt: Added.
        * shell/CMakeListsWinCE.txt: Added.
        * wtf/CMakeListsWinCE.txt: Added.

2010-12-06  John Tantalo  <john.tantalo@gmail.com>

        Reviewed by Geoffrey Garen.

        jsc does not ignore shebang
        https://bugs.webkit.org/show_bug.cgi?id=49576

        * jsc.cpp:
        (fillBufferWithContentsOfFile):
          - translate shebang into a valid JavaScript comment so the lexer ignores it

2010-12-05  Adam Roben  <aroben@apple.com>

        Windows production build fix

        Put spaces after trailing backslashes when setting
        %WebKitVSPropsRedirectionDir%. According to MSDN
        <http://msdn.microsoft.com/en-us/library/2kzfk8c7(v=VS.80).aspx>:

           A backslash ( \ ) followed by a newline character is interpreted as
           a space in the command; use a backslash at the end of a line to
           continue a command onto the next line. NMAKE interprets the
           backslash literally if any other character, including a space or
           tab, follows the backslash.

        * JavaScriptCore.vcproj/JavaScriptCore.make:

2010-12-04  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed, build fix after r69132.

        * shell/CMakeLists.txt: Fix directory name (jsc -> shell).

2010-12-04  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Drop GdkDrawable usage, it's deprecated in GTK+3.x and we can use GdkWindow
        https://bugs.webkit.org/show_bug.cgi?id=50451

        * wtf/gobject/GTypedefs.h: add GdkWindow defines.

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

        Rubber stamped by Oliver Hunt.

        Bug 50509 - set* methods on MacroAssembler are awfully named.

        Methods set32 and setTest32 compare 32-bit operands, and set a 32-bit results based on the comparison.
        set8 compares 32-bit operands, and sets an 8-bit result based on the comparison.
        setTest8 compares 8-bit operands, and sets a 32-bit result based on the comparison.

        Rename to clarify.

        set32 -> set32Compare32
        setTest32 -> set32Test32
        set8 -> set8Compare32
        setTest8 -> set32Test8

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::setPtr):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::set32Compare32):
        (JSC::MacroAssemblerARM::set8Compare32):
        (JSC::MacroAssemblerARM::set32Test32):
        (JSC::MacroAssemblerARM::set32Test8):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::set32Compare32):
        (JSC::MacroAssemblerARMv7::set8Compare32):
        (JSC::MacroAssemblerARMv7::set32Test32):
        (JSC::MacroAssemblerARMv7::set32Test8):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::set8Compare32):
        (JSC::MacroAssemblerMIPS::set32Compare32):
        (JSC::MacroAssemblerMIPS::set32Test8):
        (JSC::MacroAssemblerMIPS::set32Test32):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::set8Compare32):
        (JSC::MacroAssemblerX86Common::set32Compare32):
        (JSC::MacroAssemblerX86Common::set32Test8):
        (JSC::MacroAssemblerX86Common::set32Test32):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):

2010-12-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Incorrect logic for returning memory at the end of linking.
        Reviewed by Geoff Garen.

        At the end of linking we return any space at the end of the
        allocated executable region that was saved due to branch
        compaction.  This is currently by done by subtracting the
        different from the m_freePtr in the allocation pool.  This
        can be incorrect if your allocation was made from a new
        page that was not selected for subsequent allocations.

        This patch corrects this behaviour by verifying that the
        memory being returned actually comes from the current
        allocation pool.

        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::linkCode):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::tryShrink):

2010-12-03  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough

        Changes to significantly reduce branches to branches in JIT'ed
        parentheses backtrack processing.  The changes include the following:
        - Taking the backtracking processing out of line and adding it as
          code at the end of the JIT'ed routine.
        - Allow backtracks to be direct via an indirect branch for an address
          pushed onto the stack.  If the use of an indirect branch is from a
          conditional jump, then we emit a trampoline at the end of the 
          routine.
        - Propogate backtracks instead of adding trampolines.  Backtracks are
          propogated to where they are used.  This change also eliminated 
          trampoline branch code that aren't used.
        - Added global expression state to keep track of parentheses tail
          code and indirect branches.
        Other changes made to support these changes.
        - Split invertOrCapture flag on Patterns to two separate flags.  Added
          getters for these flags.  Rippled these changes to both the JIT 
          and interpreter code.
        - Split BacktrackDestination out off TermGenerationState struct.
          This is done to hold references to a backtrack for later code
          generation.
        https://bugs.webkit.org/show_bug.cgi?id=50295

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::JmpDst::isSet):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::JmpDst::isSet):
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Label::isSet):
        (JSC::AbstractMacroAssembler::DataLabelPtr::isUsed):
        (JSC::AbstractMacroAssembler::DataLabelPtr::used):
        (JSC::AbstractMacroAssembler::JumpList::clear):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::JmpDst::isSet):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::JmpDst::isSet):
        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::RegexPatternConstructor::atomParenthesesSubpatternBegin):
        (JSC::Yarr::RegexPatternConstructor::atomParentheticalAssertionBegin):
        (JSC::Yarr::RegexPatternConstructor::atomBackReference):
        (JSC::Yarr::RegexPatternConstructor::setupAlternativeBeginTerms):
        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::atomParenthesesOnceBegin):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalBegin):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesOnceEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalEnd):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        * yarr/RegexInterpreter.h:
        (JSC::Yarr::ByteTerm::ByteTerm):
        (JSC::Yarr::ByteTerm::BackReference):
        (JSC::Yarr::ByteTerm::invert):
        (JSC::Yarr::ByteTerm::capture):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::IndirectJumpEntry::IndirectJumpEntry):
        (JSC::Yarr::RegexGenerator::IndirectJumpEntry::addJump):
        (JSC::Yarr::RegexGenerator::GenerationState::GenerationState):
        (JSC::Yarr::RegexGenerator::GenerationState::addIndirectJumpEntry):
        (JSC::Yarr::RegexGenerator::GenerationState::emitIndirectJumpTable):
        (JSC::Yarr::RegexGenerator::GenerationState::addParenthesesTail):
        (JSC::Yarr::RegexGenerator::GenerationState::emitParenthesesTail):
        (JSC::Yarr::RegexGenerator::GenerationState::addJumpToNextInteration):
        (JSC::Yarr::RegexGenerator::GenerationState::addJumpsToNextInteration):
        (JSC::Yarr::RegexGenerator::GenerationState::addDataLabelToNextIteration):
        (JSC::Yarr::RegexGenerator::GenerationState::linkToNextIteration):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::BacktrackDestination):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::clear):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::clearDataLabel):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::haveDestination):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::isStackOffset):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::isLabel):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::isJumpList):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::haveDataLabel):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::copyTarget):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::copyTo):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::addBacktrackJump):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::setStackOffset):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::setLabel):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::setNextBacktrackLabel):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::setBacktrackToLabel):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::setBacktrackJumpList):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::setBacktrackSourceLabel):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::setDataLabel):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::setSubDataLabelPtr):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::linkToNextBacktrack):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::getStackOffset):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::getLabel):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::getBacktrackJumps):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::getDataLabel):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::jumpToBacktrack):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::linkDataLabelToHereIfExists):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::plantJumpToBacktrackIfExists):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::linkAlternativeBacktracks):
        (JSC::Yarr::RegexGenerator::BacktrackDestination::linkAlternativeBacktracksTo):
        (JSC::Yarr::RegexGenerator::TermGenerationState::TermGenerationState):
        (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative):
        (JSC::Yarr::RegexGenerator::TermGenerationState::isLastAlternative):
        (JSC::Yarr::RegexGenerator::TermGenerationState::clearBacktrack):
        (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack):
        (JSC::Yarr::RegexGenerator::TermGenerationState::plantJumpToBacktrackIfExists):
        (JSC::Yarr::RegexGenerator::TermGenerationState::linkDataLabelToBacktrackIfExists):
        (JSC::Yarr::RegexGenerator::TermGenerationState::addBacktrackJump):
        (JSC::Yarr::RegexGenerator::TermGenerationState::setDataLabelPtr):
        (JSC::Yarr::RegexGenerator::TermGenerationState::setBackTrackStackOffset):
        (JSC::Yarr::RegexGenerator::TermGenerationState::setBacktrackLabel):
        (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracks):
        (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracksTo):
        (JSC::Yarr::RegexGenerator::TermGenerationState::setBacktrackLink):
        (JSC::Yarr::RegexGenerator::TermGenerationState::chainBacktracks):
        (JSC::Yarr::RegexGenerator::TermGenerationState::chainBacktrackJumps):
        (JSC::Yarr::RegexGenerator::TermGenerationState::getBacktrackDestination):
        (JSC::Yarr::RegexGenerator::TermGenerationState::propagateBacktrackingFrom):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::ParenthesesTail):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::processBacktracks):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::setNextIteration):
        (JSC::Yarr::RegexGenerator::ParenthesesTail::generateCode):
        (JSC::Yarr::RegexGenerator::generateAssertionBOL):
        (JSC::Yarr::RegexGenerator::generateAssertionEOL):
        (JSC::Yarr::RegexGenerator::generateAssertionWordBoundary):
        (JSC::Yarr::RegexGenerator::generatePatternCharacterSingle):
        (JSC::Yarr::RegexGenerator::generatePatternCharacterPair):
        (JSC::Yarr::RegexGenerator::generatePatternCharacterFixed):
        (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy):
        (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy):
        (JSC::Yarr::RegexGenerator::generateCharacterClassSingle):
        (JSC::Yarr::RegexGenerator::generateCharacterClassFixed):
        (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy):
        (JSC::Yarr::RegexGenerator::generateCharacterClassNonGreedy):
        (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction):
        (JSC::Yarr::RegexGenerator::generateParenthesesSingle):
        (JSC::Yarr::RegexGenerator::generateParenthesesGreedyNoBacktrack):
        (JSC::Yarr::RegexGenerator::generateParentheticalAssertion):
        (JSC::Yarr::RegexGenerator::generateDisjunction):
        (JSC::Yarr::RegexGenerator::compile):
        * yarr/RegexPattern.h:
        (JSC::Yarr::PatternTerm::PatternTerm):
        (JSC::Yarr::PatternTerm::invert):
        (JSC::Yarr::PatternTerm::capture):

2010-12-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        First steps to adding web audio files to build systems
        https://bugs.webkit.org/show_bug.cgi?id=49952

        * wtf/Complex.h:

2010-12-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move StringWx.cpp into wtf directory
        https://bugs.webkit.org/show_bug.cgi?id=50060

        * wtf/wx/StringWx.cpp: Renamed from WebCore/platform/text/wx/StringWx.cpp.
        (WTF::String::String):

2010-12-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move StringBrew.cpp into wtf directory
        https://bugs.webkit.org/show_bug.cgi?id=50058

        * wtf/brew/StringBrew.cpp: Renamed from WebCore/platform/text/brew/StringBrew.cpp.
        (WTF::String::String):

2010-12-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move StringHaiku.cpp into wtf directory
        https://bugs.webkit.org/show_bug.cgi?id=50057

        * wtf/haiku/StringHaiku.cpp: Renamed from WebCore/platform/text/haiku/StringHaiku.cpp.
        (WTF::String::String):
        (WTF::String::operator BString):

2010-12-02  Geoffrey Garen  <ggaren@apple.com>

        Try to fix Windows build.

        * runtime/GCActivityCallback.cpp:
        (JSC::DefaultGCActivityCallback::synchronize): Added a non-CF implementation.

2010-12-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin Barraclough.

        Fixed <rdar://problem/8310571> CrashTracer: 60 crashes in Photo Booth at
        com.apple.JavaScriptCore: JSC::Heap::markRoots + 746
        
        * API/APIShims.h:
        (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock): Call our new
        synchronize() function.

        * runtime/Collector.cpp:
        (JSC::Heap::activityCallback):
        * runtime/Collector.h: Added an activityCallback() accessor, for the
        call above.

        * runtime/GCActivityCallback.h:
        (JSC::GCActivityCallback::synchronize):
        * runtime/GCActivityCallbackCF.cpp:
        (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback):
        (JSC::DefaultGCActivityCallback::~DefaultGCActivityCallback):
        (JSC::DefaultGCActivityCallback::operator()):
        (JSC::DefaultGCActivityCallback::synchronize): Track the run loop we're
        scheduled in. If we begin/resume execution within a new run loop, reschedule
        on it. This prevents a crash when using a lockless context group on
        multiple threads -- the crash would happen if the GC timer scheduled on
        thread A, then you continued execution on thread B, then the thread A
        timer fired.

2010-12-02  Darin Adler  <darin@apple.com>

        * wtf/ASCIICType.h: Fix wrong type from last check-in.

2010-12-02  Darin Adler  <darin@apple.com>

        Try to fix certain builds (Qt Windows).

        * wtf/ASCIICType.h: Added an overload for unsigned because in obsolete
        versions of ICU, UChar32 can be a typedef for unsigned. Adding this
        overload should make us compatible with these old ICUs.

2010-12-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Add AtomicString::fromUTF8
        https://bugs.webkit.org/show_bug.cgi?id=45594

        Unicode::calculateStringHashFromUTF8 creates a StringHash out of UTF8 input data and
        calculates the required length for the UTF16 conversation in one step.
        This is then used in a specialized translator for the string table of AtomicString.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/text/AtomicString.cpp:
        (WTF::CStringTranslator::equal):
        (WTF::HashAndUTF8CharactersTranslator::hash):
        (WTF::HashAndUTF8CharactersTranslator::equal):
        (WTF::HashAndUTF8CharactersTranslator::translate):
        (WTF::AtomicString::add):
        (WTF::AtomicString::addSlowCase):
        (WTF::AtomicString::find):
        (WTF::AtomicString::fromUTF8):
        * wtf/text/AtomicString.h:
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.h:
        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::readUTF8Sequence):
        (WTF::Unicode::convertUTF8ToUTF16):
        (WTF::Unicode::calculateStringHashFromUTF8):
        (WTF::Unicode::equalUTF16WithUTF8):
        * wtf/unicode/UTF8.h:

2010-12-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Added a little hardening to OSAllocator.

        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::release):
        * wtf/OSAllocatorWin.cpp:
        (WTF::OSAllocator::reserve):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::commit):
        (WTF::OSAllocator::decommit):
        (WTF::OSAllocator::release): CRASH() if the OS's virtual memory system
        reports an error.

2010-12-02  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Geoffrey Garen.

        [Qt] Make platform managing of OSAllocator better than r73106
        https://bugs.webkit.org/show_bug.cgi?id=50385

        * wtf/OSAllocatorPosix.cpp: Remove platform specific guard.
        * wtf/OSAllocatorSymbian.cpp: Remove platform specific guard.
        * wtf/OSAllocatorWin.cpp: Remove platform specific guard.
        * wtf/wtf.pri: Add the correct platform specific source file instead of all of them.

2010-12-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WINCE] Use GetTickCount() for srand()
        https://bugs.webkit.org/show_bug.cgi?id=50338

        time() is not a native function on WinCE, so use GetTickCount() instead.

        * wtf/RandomNumberSeed.h:
        (WTF::initializeRandomNumberGenerator):

2010-12-02  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] [Symbian] Reintroduce compiler optimizations for JSC
        https://bugs.webkit.org/show_bug.cgi?id=50270

        Add compiler optimization (symbian ARM target) which was lost after split from WebCore.
        Tested via Sunspider and V8 - both of which show significant performance improvement.

        * JavaScriptCore.pro:

2010-12-02  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Move regex parsing and fallback handling to runtime/RegExp.cpp
        https://bugs.webkit.org/show_bug.cgi?id=50015

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        (JSC::RegExp::compile):
        (JSC::RegExp::match):
        (JSC::RegExp::printTraceData):
        * runtime/RegExp.h:
        (JSC::RegExp::pattern):
        * yarr/RegexInterpreter.cpp:
        * yarr/RegexInterpreter.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::compile):
        (JSC::Yarr::jitCompileRegex):
        * yarr/RegexJIT.h:
        (JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
        (JSC::Yarr::RegexCodeBlock::setFallBack):
        (JSC::Yarr::RegexCodeBlock::isFallBack):
        (JSC::Yarr::executeRegex):

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

        Try to fix the GTK build.

        * GNUmakefile.am: Use a full path to OSAllocator*.cpp.

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

        Try to fix the EFL Linux build.

        * CMakeListsEfl.txt: Added OSAllocator to the project.

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

        Try to fix the Qt build: Include all OS files for Qt's sake, and then
        use #ifdefs in the files to exclude things based on OS.
        
        This is a pretty bad way to manage platforms -- hopefully we can
        fix the Qt build system and move away from this in the future.

        * wtf/OSAllocatorPosix.cpp:
        * wtf/OSAllocatorSymbian.cpp:
        * wtf/OSAllocatorWin.cpp:
        * wtf/wtf.pri:

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

        Try to fix the Chromium build.
        
        * JavaScriptCore.gypi: This is a Windows build file, so use OSAllocatorWin.cpp.

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

        Try to fix the GTK build.

        * GNUmakefile.am: Added OSAllocator to another project.

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

        Try to fix the GTK Linux build.

        * JavaScriptCore.gypi: Added OSAllocator to the project.

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

        Try to fix the Qt Linux build.

        * wtf/OSAllocatorPosix.cpp: Use the right errno.h.

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

        Try to fix Windows build: export some more symbols.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Try to fix the Qt Linux build.

        * wtf/wtf.pri: Use the POSIX OSAllocator for Qt Linux.

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

        Windows build fix: commit doesn't have a return value.

        * wtf/OSAllocatorWin.cpp:
        (WTF::OSAllocator::commit):

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

        Build fix: Export some symbols.

        * JavaScriptCore.exp:

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

        Build fix.

        * JavaScriptCore.xcodeproj/project.pbxproj: Export OSAllocator.h as private
        so other projects can see it.

        * wtf/OSAllocatorPosix.cpp: #include UnusedParam.h for UNUSED_PARAM.

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

        Reviewed by Sam Weinig.

        Baby step toward a cross-platform virtual memory abstraction: created
        an all-static OSAllocator class and changed MarkStack to use it.

        * JavaScriptCore.exp: These functions are inlined now.

        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added OSAllocatorWin.cpp.

        * JavaScriptCore.xcodeproj/project.pbxproj: Added OSAllocatorPosix.cpp.

        * runtime/MarkStack.h:
        (JSC::MarkStack::allocateStack):
        (JSC::MarkStack::releaseStack): Use OSAllocator instead of rolling our
        own platform-specific code.

        * runtime/MarkStackNone.cpp: Removed. Nothing used this.

        * runtime/MarkStackPosix.cpp: 
        * runtime/MarkStackSymbian.cpp:
        * runtime/MarkStackWin.cpp: Removed custom platform-specific code, since
        we use the OSAllocator abstraction now.

        * wtf/OSAllocator.h: Added.
        * wtf/OSAllocatorPosix.cpp: Added.
        (WTF::OSAllocator::reserve):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::commit):
        (WTF::OSAllocator::decommit):
        (WTF::OSAllocator::release):
        * wtf/OSAllocatorSymbian.cpp: Added.
        (WTF::OSAllocator::reserve):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::commit):
        (WTF::OSAllocator::decommit):
        (WTF::OSAllocator::release):
        * wtf/OSAllocatorWin.cpp: Added.
        (WTF::OSAllocator::reserve):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::OSAllocator::commit):
        (WTF::OSAllocator::decommit):
        (WTF::OSAllocator::release): The new OSAllocator abstraction.

        * wtf/wtf.pri: Added OSAllocatorSymbian.cpp.

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

        Reviewed by Adam Roben.

        WinCairo build should not use link-time code generation (LTCG)
        https://bugs.webkit.org/show_bug.cgi?id=50353

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:

010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        vcproj changes can't be applied cleanly by the Windows EWS bot
        https://bugs.webkit.org/show_bug.cgi?id=50328

        * JavaScriptCore.vcproj/JavaScriptCore.sln: Modified property svn:eol-style.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Modified property svn:eol-style.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops: Added property svn:eol-style.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops: Added property svn:eol-style.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Added property svn:eol-style.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Modified property svn:eol-style.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops: Added property svn:eol-style.
        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Modified property svn:eol-style.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Modified property svn:eol-style.
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Added property svn:eol-style.
        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Modified property svn:eol-style.
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added property svn:eol-style.
        * JavaScriptCore.vcproj/testapi/testapi.vcproj: Modified property svn:eol-style.
        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Added property svn:eol-style.

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

        Reviewed by Sam Weinig.

        Bug 50298 - /()()()()()()()()()(?:(\10a|b)(X|Y))+/.exec("bXXaYYaY") ASSERTs

        For unmatched subpattens we previously used to set the subpattern end to -1,
        but now we only set the start value. E.g. consider the following:
            /a(b)?c/.exec("ac");
        Previously we would generate an internal results array of:
            [ 0, 2, -1, -1 ]
        Since fairly recently we have generated results of:
            [ 0, 2, -1, ??? ]
        (With the end index of the subpattern uninitialized).

        Update these ASSERTs to account for this.

        Also, when stripping out self-referencing backreferences, (e.g. /(\1)/) we
        were checking the wrong property on the pattern term. We should have been
        looking at term.parentheses.subpatternId, but instead were checking
        term.subpatternId. The latter is actually only the subpatternId for
        back reference terms. Rename this to backReferenceSubpatternId.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::matchBackReference):
        (JSC::Yarr::Interpreter::backtrackBackReference):

2010-11-30  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.

        Bug 50297 - \s in YARR should match BOMs.

        From section 15.10.2.12 CharacterClassEscape contains:

        The production CharacterClassEscape :: s evaluates by returning the set of characters containing the
        characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions.

        Table 2 in section 7.2 contains:

        \uFEFF Byte Order Mark <BOM>

        * create_regex_tables:
            Add BOM to spaces table.

2010-11-30  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        Fixed review comments following bug #48101.
        Mostly typos, plus gave quantifyInfinite a symbolic name.

        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
        (JSC::Yarr::RegexPatternConstructor::checkForTerminalParentheses):
        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd):
        (JSC::Yarr::Interpreter::matchParenthesesTerminalBegin):
        (JSC::Yarr::Interpreter::backtrackParenthesesTerminalBegin):
        (JSC::Yarr::Interpreter::backtrackParenthesesTerminalEnd):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy):
        (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy):
        (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy):
        * yarr/RegexParser.h:
        (JSC::Yarr::Parser::parseTokens):
        (JSC::Yarr::parse):

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

        Reviewed by Darin Adler.

        WTF project missing build-stopping code from its pre-build event
        https://bugs.webkit.org/show_bug.cgi?id=50281

        * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd:

2010-11-30  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Cleanup UTF8.cpp
        https://bugs.webkit.org/show_bug.cgi?id=49581

        Use macros and functions instead of range values directly.

        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::inlineUTF8SequenceLength):
        (WTF::Unicode::UTF8SequenceLength):
        (WTF::Unicode::convertUTF16ToUTF8):
        (WTF::Unicode::readUTF8Sequence):
        (WTF::Unicode::convertUTF8ToUTF16):
        * wtf/unicode/UnicodeMacrosFromICU.h: Added U_IS_SUPPLEMENTARY macro.

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

        Reviewed by Gavin Barraclough.

        Fixed a crash seen when using a PageAllocation to store itself.

        * wtf/PageAllocation.h:
        (WTF::PageAllocation::systemDeallocate): Zero out m_base before unmapping
        it, in case unmapping m_base unmaps the PageAllocation.

        * wtf/BumpPointerAllocator.h:
        (WTF::BumpPointerPool::destroy): Now this work-around isn't needed!

2010-11-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Darin Adler.

        m_hasNonEnumerableProperties is never initialized in Structure
        https://bugs.webkit.org/show_bug.cgi?id=50266

        * runtime/Structure.cpp:
        (JSC::Structure::Structure): initialize member variable.

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

        Windows build fix (part 1). Use correct environment variable syntax in cmd files.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreLink.cmd:
        * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd:
        * JavaScriptCore.vcproj/jsc/jscPostBuild.cmd:
        * JavaScriptCore.vcproj/jsc/jscPreBuild.cmd:
        * JavaScriptCore.vcproj/jsc/jscPreLink.cmd:
        * JavaScriptCore.vcproj/testapi/testapiPostBuild.cmd:
        * JavaScriptCore.vcproj/testapi/testapiPreBuild.cmd:
        * JavaScriptCore.vcproj/testapi/testapiPreLink.cmd:

2010-11-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WTF support for <rdar://problem/8650085> adding word-prefix search options to the text search API.
        https://bugs.webkit.org/show_bug.cgi?id=50038

        * wtf/unicode/UnicodeMacrosFromICU.h: Copied additional macros from icu/unicode/utf16.h.

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

        Reviewed by Darin Adler.

        JavaScriptCore projects on Windows should use cmd files for build events
        https://bugs.webkit.org/show_bug.cgi?id=50193

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreLink.cmd: Added.
        * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd: Added property svn:eol-style.
        * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd: Added property svn:eol-style.
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
        * JavaScriptCore.vcproj/jsc/jscPostBuild.cmd: Added.
        * JavaScriptCore.vcproj/jsc/jscPreBuild.cmd: Added.
        * JavaScriptCore.vcproj/jsc/jscPreLink.cmd: Added.
        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiPostBuild.cmd: Added.
        * JavaScriptCore.vcproj/testapi/testapiPreBuild.cmd: Added.
        * JavaScriptCore.vcproj/testapi/testapiPreLink.cmd: Added.

2010-11-29  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        when empty, clicking "down" on outer-spin-button returns "max value"
        https://bugs.webkit.org/show_bug.cgi?id=45491

        It is required to calculate UTC/DST offsets to retrieve the current local milliseconds for
        date/time type inputs. WTF::currentTimeMS() returns a UTC time, and WTF::getLocalTime()
        returns a struct tm, not milliseconds.

        Calculating milliseconds from a struct tm is not simple since timegm() cannot be used in all
        environments. This calculation is already done in calculateUTCOffset(), and complicated.
        Duplicating this complicated calculation is unreasonable because of maintainability.
        To achieve this without duplication, we must call calculate{UTC|DST}Offset in some way.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/DateMath.cpp: Changed calculateUTCOffset() and calculateDSTOffset() to external functions.
        (WTF::calculateUTCOffset):
        (WTF::calculateDSTOffset):
        * wtf/DateMath.h:

2010-11-29  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Switch web audio code to use FloatPoint3D instead of Vector3
        https://bugs.webkit.org/show_bug.cgi?id=50186

        * wtf/Vector3.h: Removed.

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

        Reviewed by Adam Roben.

        Add a mechanism for Windows pre-build/pre-link/post-build events to be separated into individual cmd files
        https://bugs.webkit.org/show_bug.cgi?id=49858

        We're migrating our prebuild/prelink/postbuild steps out of vcproj and vsprops files:
        - To simplify editing (editing vsprops build steps is confusing).
        - For more readable diffs.

        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd: Added.
        * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd: Added.

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

        Reviewed by Gavin Barraclough.

        Improved accuracy of command-line SunSpider.

        * jsc.cpp:
        (functionRun): Changed the "run" function to run a given test in
        its own global object. Previously, all tests ran in the same global
        object, which created name conflicts, and made globals from previous
        tests artificially survive into later tests.
        
        Also changed "run" to return the elapsed milliseconds when running a
        given test, for slightly more accurate numbers.

        (functionCheckSyntax): Ditto on returning elapsed milliseconds.

2010-11-29  Darin Adler  <darin@apple.com>

        Reviewed by Andreas Kling.

        Remove a couple unneeded overflow checks
        https://bugs.webkit.org/show_bug.cgi?id=49816

        * wtf/text/CString.cpp:
        (WTF::CString::init): Use an ASSERT instead of
        an overflow check with CRASH.

2010-11-29  Adam Roben  <aroben@apple.com>

        Robustify react-to-vsprops-changes.py against changes to its location
        or the location of the .vsprops files

        Suggested by John Sullivan.

        * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
        Removed file_modification_times.
        (main): Use glob.glob to find the .vsprops files and assert that we found some.

2010-11-29  Adam Roben  <aroben@apple.com>

        Touch wtf/Platform.h whenever any .vsprops file changes

        This will cause all files to be recompiled, which will make changes to
        preprocessor macros (e.g., ENABLE_*) actually take effect.

        Fixes <http://webkit.org/b/50167> Windows build fails when ENABLE_*
        macros are changed (because not enough files are rebuilt)

        Reviewed by John Sullivan.

        * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
        (main): Touch wtf/Platform.h if it's older than any .vsprops file. Also
        added some comments and logging to make it clearer what the script is
        doing and why.

2010-11-29  Adam Roben  <aroben@apple.com>

        Update react-to-vsprops-changes.py after r72555

        .vsprops files are no longer accessed relative to $WebKitLibrariesDir.

        Fixes <http://webkit.org/b/50166> REGRESSION (r72555):
        react-to-vsprops-changes.py no longer works for people with a
        non-default $WebKitLibrariesDir

        Reviewed by John Sullivan.

        * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
        (main): Always look in WebKitLibraries/win for .vsprops files, not in
        $WebKitLibrariesDir.

2010-11-28  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 48100 - YARR allows what seems like a bogus character-class range

        Per ECMA-262 character classes containing character ranges containing
        character classes are invalid, eg:
            /[\d-x]/
            /[x-\d]/
            /[\d-\d]/
        These should throw a syntax error.

        * yarr/RegexParser.h:

2010-11-27  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 48101 - Yarr gives different results for /(?:a*?){2,}/

        The test cases in the linked mozilla bug demonstrate a couple of
        problems in subpattern matching. These bugs lie in the optimized
        cases - for matching parentheses with a quantity count of 1, and
        for matching greedy quantified parentheses at the end of a regex
        (which do not backtrack).

        In both of these cases we are failing to correctly handle empty
        matches. In the case of parentheses-single matches (quantity count
        one) we are failing to test for empty matches at all. In the case
        of terminal subpattern matches we do currently check, however there
        is a subtler bug here too. In the case of an empty match we will
        presently immediately fall through to the next alternative (or
        complete the regex match), whereas upon a failed match we should
        be backtracking into the failing alternative, to give it a chance
        to match further (e.g. consider /a??b?|a/.exec("ab") - upon first
        attempting to match the first alternative this will match the empty
        string - since a?? is non-greedy, however rather than moving on to
        the second alternative we should be re-matching the first one, at
        which point the non-greedy a?? will match, and as such the result
        should be "ab", not "a").

        Terminal subpattern matching contains a second bug, too. The frame
        location values in the subpattern should be being allocated with
        the outer disjunction's frame (as we do for the parentheses-single
        optimization). Consider the following three regexes:
            /a*(?:b*)*c*/
            /a*(?:b*)c*/
            /a*(?:b*)*/
        Considering only the frame location required by the atoms a,b, and
        c, (ignoring space associated with the nested subpattern) the first
        regex (a normal subpattern match) requires a frame size of 2 for
        the outer disjunction, (to backtrack terms a & c), with each
        iteration of the subpattern requiring a frame of size 1 (in order
        to backtrack b). In the case of the second regex (where the
        parentheses-single optimization will kick in) the outer frame must
        be set up with a frame size of 3, since the outer frame will also
        be used when running the nested subpattern. We will currently only
        allocate a farme of size 1 for the outer disjuntion (to contain a),
        howver the frame size should be 2 (since the subpattern will be
        evaluated in the outer frame). In addition to failing to allocate
        frame space the frame offsets are also presently invalid - in the
        case of the last regex b's frame location will be set assuming it
        to be the first term in the frame, whereas in this case b lies
        after the term a, and should be taking a separate frame location.

        In order to correctly allocate the frame for terminal subpattern
        matches we must move this optimization back up from the JIT into
        the compiler (and thus interpreter too), since this is where the
        frame allocation takes place.

        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets):
        (JSC::Yarr::RegexPatternConstructor::checkForTerminalParentheses):
        (JSC::Yarr::compileRegex):
        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::matchParenthesesOnceBegin):
        (JSC::Yarr::Interpreter::matchParenthesesOnceEnd):
        (JSC::Yarr::Interpreter::backtrackParenthesesOnceBegin):
        (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd):
        (JSC::Yarr::Interpreter::matchParenthesesTerminalBegin):
        (JSC::Yarr::Interpreter::matchParenthesesTerminalEnd):
        (JSC::Yarr::Interpreter::backtrackParenthesesTerminalBegin):
        (JSC::Yarr::Interpreter::backtrackParenthesesTerminalEnd):
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::ByteCompiler::atomParenthesesOnceBegin):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalBegin):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesOnceEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalEnd):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        * yarr/RegexInterpreter.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateParenthesesSingle):
        (JSC::Yarr::RegexGenerator::generateParenthesesGreedyNoBacktrack):
        (JSC::Yarr::RegexGenerator::generateTerm):
        * yarr/RegexPattern.h:
        (JSC::Yarr::PatternTerm::PatternTerm):

2010-11-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove Bakefile build system files
        https://bugs.webkit.org/show_bug.cgi?id=49983

        r53757 only removed the content, but not the files.
        This patch removes that empty files.

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

2010-11-24  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Merge the usage of jumps and calls at ARM-JIT
        https://bugs.webkit.org/show_bug.cgi?id=50008

        Those JmpSrc objects which represent jumps (not calls) should point to
        after the jump instruction.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::blx):
        (JSC::ARMAssembler::loadBranchTarget):
        (JSC::ARMAssembler::getAbsoluteJumpAddress):
        (JSC::ARMAssembler::linkJump):
        (JSC::ARMAssembler::relinkJump):
        (JSC::ARMAssembler::linkCall):
        (JSC::ARMAssembler::relinkCall):
        (JSC::ARMAssembler::getRelocatedAddress):
        (JSC::ARMAssembler::getDifferenceBetweenLabels):
        (JSC::ARMAssembler::getCallReturnOffset):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::call):

2010-11-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Optimize foldCase, toLower and toUpper methods in glib unicode backend
        https://bugs.webkit.org/show_bug.cgi?id=48625

        GLib methods use UTF-8 strings, so we have to convert from UTF-16 to
        UTF-8 to perform the case operations and then convert back the result to
        UTF-16. GLib conversion methods return a new allocated string, so we
        have to memcpy the result into the destination buffer too. Using our
        own methods to convert between UTF-8 and UTF-16 from wtf/unicode/UTF8.h
        we don't need such memcpy, since they take an already allocated buffer
        rather than returning a new one. There's another optimization for the
        case when the destination buffer is not large enough. In that case,
        methods should return the expected destination buffer size and are
        called again with a new buffer. We can avoid the conversion to UTF-16 by
        pre-calculating the required size for the destination buffer.

        * wtf/unicode/glib/UnicodeGLib.cpp:
        (WTF::Unicode::getUTF16LengthFromUTF8):
        (WTF::Unicode::convertCase):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):

2010-11-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Sam Weinig.

        Use WTF::StringHasher directly in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=49893

        * profiler/CallIdentifier.h:
        (JSC::CallIdentifier::Hash::hash):
        * runtime/Identifier.cpp:
        (JSC::IdentifierCStringTranslator::hash):
        (JSC::IdentifierUCharBufferTranslator::hash):

2010-11-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Sam Weinig.

        Add WTF::FixedArray::size()
        https://bugs.webkit.org/show_bug.cgi?id=49891

        Add a method to get the size of a FixedArray.

        * wtf/FixedArray.h:
        (WTF::FixedArray::size):

2010-11-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Set correct preprocessor definitions
        https://bugs.webkit.org/show_bug.cgi?id=49887

        * wtf/Platform.h:

2010-11-22  Adam Roben  <aroben@apple.com>

        Use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops files

        Apple's Windows build allows placing header files and import libraries for WebKit's
        dependencies (CoreGraphics, CFNetwork, SQLite, etc.) outside the source tree via the
        $WebKitLibrariesDir environment variable. This is both required for production builds and
        convenient for Apple-internal developer builds. Apple's production builds also require that
        WebKit's shared .vsprops files be accessed relative to $WebKitLibrariesDir. In production
        builds, the files are copied into that directory tree by the
        WebKitLibraries/win/tools/WinTools.make file. In Apple-internal developer builds, the
        copying is done by
        JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make.

        This .vsprops copying is problematic in one very important case: when a developer updates
        their source tree and then tries to build. Visual Studio only reads .vsprops files when a
        project is first loaded. So, when Visual Studio is first opened after the .vsprops files are
        updated, it reads in the old files that were already residing in $WebKitLibrariesDir. When a
        build is started, JavaScriptCoreGenerated.make copies the new .vsprops files into
        $WebKitLibrariesDir, but Visual Studio will not pick up the changes.  The rest of the build
        will proceed with out-of-date .vsprops files, which will likely result in a build failure.

        To fix this, we now use normal relative paths to access the .vsprops files in the source
        tree rather than in $WebKitLibrariesDir, but prefix those paths with a new environment
        variable, $WebKitVSPropsRedirectionDir. In developer builds, this environment variable is
        unset, so the normal relative paths are used to read the .vsprops files out of the source
        tree directly. In production builds, this environment variable is set to a fake directory
        that will cause the .vsprops files in $WebKitLibrariesDir to be found when the relative path
        is resolved.
        
        For example, JavaScriptCore.vcproj uses this path for FeatureDefines.vsprops:

        $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        In developer builds, where $WebKitVSPropsRedirectionDir is unset, this will point to the
        files in WebKitLibraries\win\tools\vsprops in the source tree. In production builds,
        JavaScriptCore.make sets $WebKitVSPropsRedirectionDir to
        "$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\", so the full path for
        FeatureDefines.vsprops becomes:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        which resolves to:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        (We rely on the fact that Windows doesn't care whether the directories "1", "2", and "3"
        actually exist since they are matched by an equal number of ".." path components.)

        Note that Visual Studio still won't pick up changes made to .vsprops files while Visual
        Studio is open, but that problem hasn't seemed to cause developers many headaches so far.

        Fixes <http://webkit.org/b/49181> Windows build fails mysteriously when .vsprops files are
        updated

        Reviewed by Dave Hyatt.

        * JavaScriptCore.vcproj/JavaScriptCore.make: Set $WebKitVSPropsRedirectionDir so that
        production builds can find the .vsprops files.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Stopy copying the
        .vsprops files. It isn't needed anymore.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
        Changed to use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops
        files.

2010-11-19  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        YARR JIT should fallback to YARR Interpreter instead of PCRE.
        https://bugs.webkit.org/show_bug.cgi?id=46719

        Remove the ENABLE_YARR macro and the option of matching regular
        expressions with PCRE from JavaScriptCore.

        * runtime/JSGlobalData.h:
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::match):
        * tests/mozilla/expected.html:
        * wtf/Platform.h:
        * yarr/RegexCompiler.cpp:
        * yarr/RegexCompiler.h:
        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::byteCompileRegex):
        * yarr/RegexInterpreter.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::jitCompileRegex):
        * yarr/RegexJIT.h:
        (JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
        (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock):
        (JSC::Yarr::RegexCodeBlock::getFallback):
        (JSC::Yarr::RegexCodeBlock::isFallback):
        (JSC::Yarr::RegexCodeBlock::setFallback):
        (JSC::Yarr::executeRegex):
        * yarr/RegexParser.h:
        * yarr/RegexPattern.h:

2010-11-20  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by David Kilzer.

        [BREWMP] Replace DBGPRINTF and DBGPRINTF_FATAL with dbg_Message
        https://bugs.webkit.org/show_bug.cgi?id=49520

        DBGPRINTF and DBGPRINTF_FATAL macros are prohibited in Mod1. Use dbg_Message instead.

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

2010-11-20  Gabor Loki  <loki@webkit.org>

        Reviewed by Gavin Barraclough.

        Support JIT_OPTIMIZE_MOD on Thumb-2
        https://bugs.webkit.org/show_bug.cgi?id=49432

        Rewrite the soft modulo operation into macroassembler form, and move it
        to JSValue32_64 section.
        Add support for soft modulo on Thumb-2 JIT also.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::clz):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::countLeadingZeros32):
        (JSC::MacroAssemblerARM::relativeTableJump):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::countLeadingZeros32):
        (JSC::MacroAssemblerARMv7::relativeTableJump):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mod):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::softModulo):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        * wtf/Platform.h:

2010-11-20  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/49848> Make it possible to display the last character of a secure text field unobscured

        Reviewed by Darin Adler.

        * JavaScriptCore.exp:
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::secure): Added argument that controls whether
        the last character is obscured or not.  Implemented behavior.
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::LastCharacterBehavior): Added enum.
        (WTF::StringImpl::secure): Updated method signature.

2010-11-19  William Chan  <willchan@chromium.org>

        Reviewed by David Levin.

        Add USE(CHROMIUM_NET)

        Indicates the use of Chromium's network stack.  Chromium's network
        stack performs better when it has full view of all resource requests,
        so USE(CHROMIUM_NET) can be used to bypass throttles.

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

        * wtf/Platform.h:

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

        Reviewed by Adam Roben.

        Add Debug_Cairo_CFLite and Release_Cairo_CFLite configurations for all vcproj files
        https://bugs.webkit.org/show_bug.cgi?id=49819

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:

2010-11-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Don't check for constant registers when we can guarantee that the register won't be in the constant pool
        https://bugs.webkit.org/show_bug.cgi?id=49814

        Add uncheckedR(int) to CallFrame, and replace all the uses of r() with uncheckedR()
        when we can guarantee that the register is not referring to a constant.
        This makes the interpreter about 0.5% faster, and makes the CallFrame initialisation
        logic correct when we're using a faked callframe (as in the case of the globalExec).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::createActivation):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::thisObject):
        * interpreter/CallFrame.h:
        (JSC::ExecState::uncheckedR):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::resolveBase):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::createExceptionScope):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::argumentsGetter):

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

        Reviewed by Darin Adler.

        Normalize Cairo/CFLite project/solution configuration names
        https://bugs.webkit.org/show_bug.cgi?id=49818

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:

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

        Reviewed by Adam Roben.

        Windows vcproj configuration names should be normalized across projects
        https://bugs.webkit.org/show_bug.cgi?id=49776

        * JavaScriptCore.vcproj/JavaScriptCore.sln:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:

2010-11-19  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed, build fix after r72360.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::bytecodeOffset):

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

        Rubber stamped by Geoff Garen.

        Bug 49577 - Function.prototype should be non-configurable

        Ooops, Function.prototype should not be enumerable!

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):

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

        Reviewed by Oliver Hunt.

        Bug 49708 - Stop recompiling functions to regenerate exception info.

        Instead only hold info as necessary – keep divot info is the inspector
        is enabled, line number info is debugging or profiling, and handler
        info for functions with try/catch.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpStatistics):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::lineNumberForBytecodeOffset):
        (JSC::CodeBlock::expressionRangeForBytecodeOffset):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::bytecodeOffset):
        (JSC::CodeBlock::addExpressionInfo):
        (JSC::CodeBlock::addLineInfo):
        (JSC::CodeBlock::hasExpressionInfo):
        (JSC::CodeBlock::hasLineInfo):
        (JSC::CodeBlock::needsCallReturnIndices):
        (JSC::CodeBlock::callReturnIndexVector):
        * bytecode/SamplingTool.cpp:
        (JSC::SamplingTool::dump):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitNode):
        (JSC::BytecodeGenerator::emitNodeInConditionContext):
        (JSC::BytecodeGenerator::emitExpressionInfo):
        (JSC::BytecodeGenerator::addLineInfo):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        (JSC::appendSourceToError):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveLastCaller):
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JITStubs.cpp:
        (JSC::jitThrow):
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Collector.cpp:
        (JSC::Heap::markRoots):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::usingAPI):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::supportsRichSourceInfo):
        (JSC::JSGlobalObject::globalData):

2010-11-18  Adam Roben  <aroben@apple.com>

        Add a script to delete manifest-related files when they are older than
        any .vsprops file

        Changes to .vsprops files can cause the manifest files to become
        invalid, and Visual Studio doesn't always figure out that it needs to
        rebuild them.

        Reviewed by Sam Weinig.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
        Call the new script.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        Added the new script.

        * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py: Added.
        (file_modification_times): Generator to return the modification time of
        each file in a directory hierarchy.
        (main): Get the modification time of the newest vsprops file, then find
        all manifest-related files in the obj directory. Delete all
        manifest-related files that are older than the newest vsprops file.

2010-11-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Adam Roben.

        <rdar://problem/8602509&8602717&8602724> Enable compaction support.

        * Configurations/JavaScriptCore.xcconfig:

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

        Reviewed by Oliver Hunt.

        Bug 49635 - Profiler implementation is fragile

        The profile presently requires the exception handling mechanism to explicitly
        remove all stack frames that are exited during the exception unwind mechanism.
        This is fragile in a number of ways:
          * We have to change bytecode register allocation when compiling code to run
            when profiling, to preserve the callee function (this is also required to
            call did_call after the call has returned).
          * In the JIT we have to maintain additional data structures
            (CodeBlock::RareData::m_functionRegisterInfos) to map back to the register
            containing the callee.
          * In the interpreter we use 'magic values' to offset into the instruction
            stream to rediscover the register containing the function.

        Instead, move profiling into the head and tail of functions.
          * This correctly accounts the cost of the call itself to the caller.
          * This allows us to access the callee function object from the callframe.
          * This means that at the point a call is made we can track the stack depth
            on the ProfileNode.
          * When unwinding we can simply report the depth at which the exception is
            being handled - all call frames above this level are freed.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::bytecodeOffset):
        (JSC::CodeBlock::methodCallLinkInfo):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallVarargs):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * profiler/Profile.cpp:
        (JSC::Profile::Profile):
        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::addParentForConsoleStart):
        (JSC::ProfileGenerator::willExecute):
        (JSC::ProfileGenerator::didExecute):
        (JSC::ProfileGenerator::exceptionUnwind):
        (JSC::ProfileGenerator::stopProfiling):
        * profiler/ProfileGenerator.h:
        * profiler/ProfileNode.cpp:
        (JSC::ProfileNode::ProfileNode):
        (JSC::ProfileNode::willExecute):
        * profiler/ProfileNode.h:
        (JSC::ProfileNode::create):
        (JSC::ProfileNode::callerCallFrame):
        * profiler/Profiler.cpp:
        (JSC::dispatchFunctionToProfiles):
        (JSC::Profiler::_willExecute):
        (JSC::Profiler::_didExecute):
        (JSC::Profiler::exceptionUnwind):
        * profiler/Profiler.h:

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

        Reviewed by Adam Roben.

        Remove leftover Windows Debug_Internal configurations
        https://bugs.webkit.org/show_bug.cgi?id=49758

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:

2010-11-18  Chao-ying Fu  <fu@mips.com>

        Reviewed by Csaba Osztrogonác.

        Avoid increasing required alignment of target type warning
        https://bugs.webkit.org/show_bug.cgi?id=43963

        * runtime/UString.h:
        (JSC::UStringHash::equal):
        * wtf/StdLibExtras.h:

2010-11-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add stubbed out ScrollAnimator for the Mac
        https://bugs.webkit.org/show_bug.cgi?id=49678

        * wtf/Platform.h: Enable SMOOTH_SCROLLING on the Mac, this has no
        change in behavior at the moment.

2010-11-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/49634> Make overflow guards in WTF::String::utf8 explicit

        Reviewed by Darin Adler.

        Add an explicit overflow check prior to allocating our buffer,
        rather than implicitly relying on the guard in convertUTF16ToUTF8.

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

2010-11-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72197.
        http://trac.webkit.org/changeset/72197
        https://bugs.webkit.org/show_bug.cgi?id=49661

        broke fast/regex/test1.html (Requested by stampho on #webkit).

        * runtime/JSGlobalData.h:
        * runtime/RegExp.cpp:
        (JSC::RegExpRepresentation::~RegExpRepresentation):
        (JSC::RegExp::compile):
        (JSC::RegExp::match):
        * tests/mozilla/expected.html:
        * wtf/Platform.h:
        * yarr/RegexCompiler.cpp:
        * yarr/RegexCompiler.h:
        * yarr/RegexInterpreter.cpp:
        * yarr/RegexInterpreter.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::jitCompileRegex):
        * yarr/RegexJIT.h:
        (JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
        (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock):
        (JSC::Yarr::RegexCodeBlock::getFallback):
        (JSC::Yarr::RegexCodeBlock::setFallback):
        (JSC::Yarr::executeRegex):
        * yarr/RegexParser.h:
        * yarr/RegexPattern.h:

2010-11-17  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        YARR JIT should fallback to YARR Interpreter instead of PCRE.
        https://bugs.webkit.org/show_bug.cgi?id=46719

        Remove the ENABLE_YARR macro and the option of matching regular
        expressions with PCRE from JavaScriptCore.

        * runtime/JSGlobalData.h:
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::match):
        * tests/mozilla/expected.html:
        * wtf/Platform.h:
        * yarr/RegexCompiler.cpp:
        * yarr/RegexCompiler.h:
        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::byteCompileRegex):
        * yarr/RegexInterpreter.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::jitCompileRegex):
        * yarr/RegexJIT.h:
        (JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
        (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock):
        (JSC::Yarr::RegexCodeBlock::getFallback):
        (JSC::Yarr::RegexCodeBlock::isFallback):
        (JSC::Yarr::RegexCodeBlock::setFallback):
        (JSC::Yarr::executeRegex):
        * yarr/RegexParser.h:
        * yarr/RegexPattern.h:

2010-11-17  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Extend YARR Interpreter with beginning character look-up optimization
        https://bugs.webkit.org/show_bug.cgi?id=45751

        Add beginning character look-up optimization which sets the start
        index to the first possible successful pattern match.
        Extend YARR Interpreter with lookupForBeginChars function which
        implements the beginning character look-up optimization.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::InputStream::readPair):
        (JSC::Yarr::Interpreter::InputStream::isNotAvailableInput):
        (JSC::Yarr::Interpreter::lookupForBeginChars):
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::Interpreter::interpret):
        * yarr/RegexInterpreter.h:
        (JSC::Yarr::BytecodePattern::BytecodePattern):

2010-11-17  Alexis Menard  <alexis.menard@nokia.com>, Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Christiansen, Tor Arne Vestbø.

        [Qt] Add support for use GStreamer with the Qt build

        Enable the build/inclusion of the wtf/QObject convenience classes.

        * JavaScriptCore.pri:
        * wtf/wtf.pri:

2010-11-17  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Collect the beginning characters in a RegExp pattern for look-up
        optimization
        https://bugs.webkit.org/show_bug.cgi?id=45748

        Extend the YARR's parser with an algorithm which collects the potential
        beginning characters from a RegExp pattern for later look-up optimization.

        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::BeginCharHelper::BeginCharHelper):
        (JSC::Yarr::BeginCharHelper::addBeginChar):
        (JSC::Yarr::BeginCharHelper::merge):
        (JSC::Yarr::BeginCharHelper::addCharacter):
        (JSC::Yarr::BeginCharHelper::linkHotTerms):
        (JSC::Yarr::RegexPatternConstructor::RegexPatternConstructor):
        (JSC::Yarr::RegexPatternConstructor::addBeginTerm):
        (JSC::Yarr::RegexPatternConstructor::setupDisjunctionBeginTerms):
        (JSC::Yarr::RegexPatternConstructor::setupAlternativeBeginTerms):
        (JSC::Yarr::RegexPatternConstructor::setupBeginChars):
        (JSC::Yarr::compileRegex):
        * yarr/RegexPattern.h:
        (JSC::Yarr::TermChain::TermChain):
        (JSC::Yarr::BeginChar::BeginChar):
        (JSC::Yarr::RegexPattern::RegexPattern):
        (JSC::Yarr::RegexPattern::reset):

2010-11-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72160.
        http://trac.webkit.org/changeset/72160
        https://bugs.webkit.org/show_bug.cgi?id=49646

        Broke lots of fast/profiler tests, among others (Requested by
        aroben on #webkit).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::functionRegisterForBytecodeOffset):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addFunctionRegisterInfo):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallVarargs):
        (JSC::BytecodeGenerator::emitReturn):
        (JSC::BytecodeGenerator::emitConstruct):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::CallArguments::profileHookRegister):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::CallArguments::CallArguments):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_profile_will_call):
        (JSC::JIT::emit_op_profile_did_call):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_profile_will_call):
        (JSC::JIT::emit_op_profile_did_call):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * profiler/Profile.cpp:
        (JSC::Profile::Profile):
        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::addParentForConsoleStart):
        (JSC::ProfileGenerator::willExecute):
        (JSC::ProfileGenerator::didExecute):
        (JSC::ProfileGenerator::stopProfiling):
        * profiler/ProfileGenerator.h:
        * profiler/ProfileNode.cpp:
        (JSC::ProfileNode::ProfileNode):
        (JSC::ProfileNode::willExecute):
        * profiler/ProfileNode.h:
        (JSC::ProfileNode::create):
        (JSC::ProfileNode::operator==):
        * profiler/Profiler.cpp:
        (JSC::dispatchFunctionToProfiles):
        (JSC::Profiler::willExecute):
        (JSC::Profiler::didExecute):
        * profiler/Profiler.h:

2010-11-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 49635 - Profiler implementation is fragile

        The profile presently requires the exception handling mechanism to explicitly
        remove all stack frames that are exited during the exception unwind mechanism.
        This is fragile in a number of ways:
          * We have to change bytecode register allocation when compiling code to run
            when profiling, to preserve the callee function (this is also required to
            call did_call after the call has returned).
          * In the JIT we have to maintain additional data structures
            (CodeBlock::RareData::m_functionRegisterInfos) to map back to the register
            containing the callee.
          * In the interpreter we use 'magic values' to offset into the instruction
            stream to rediscover the register containing the function.

        Instead, move profiling into the head and tail of functions.
          * This correctly accounts the cost of the call itself to the caller.
          * This allows us to access the callee function object from the callframe.
          * This means that at the point a call is made we can track the stack depth
            on the ProfileNode.
          * When unwinding we can simply report the depth at which the exception is
            being handled - all call frames above this level are freed.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::bytecodeOffset):
        (JSC::CodeBlock::methodCallLinkInfo):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallVarargs):
        (JSC::BytecodeGenerator::emitReturn):
        (JSC::BytecodeGenerator::emitConstruct):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::CallArguments::count):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::CallArguments::CallArguments):
        * interpreter/Interpreter.cpp:
        (JSC::ProfileHostCall::ProfileHostCall):
        (JSC::ProfileHostCall::~ProfileHostCall):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_profile_has_called):
        (JSC::JIT::emit_op_profile_will_return):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_profile_has_called):
        (JSC::JIT::emit_op_profile_will_return):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * profiler/Profile.cpp:
        (JSC::Profile::Profile):
        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::addParentForConsoleStart):
        (JSC::ProfileGenerator::willExecute):
        (JSC::ProfileGenerator::didExecute):
        (JSC::ProfileGenerator::exceptionUnwind):
        (JSC::ProfileGenerator::stopProfiling):
        * profiler/ProfileGenerator.h:
        * profiler/ProfileNode.cpp:
        (JSC::ProfileNode::ProfileNode):
        (JSC::ProfileNode::willExecute):
        * profiler/ProfileNode.h:
        (JSC::ProfileNode::create):
        (JSC::ProfileNode::operator==):
        (JSC::ProfileNode::exec):
        * profiler/Profiler.cpp:
        (JSC::dispatchFunctionToProfiles):
        (JSC::Profiler::hasCalled):
        (JSC::Profiler::willEvaluate):
        (JSC::Profiler::willReturn):
        (JSC::Profiler::didEvaluate):
        (JSC::Profiler::exceptionUnwind):
        * profiler/Profiler.h:

2010-11-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben and Steve Falkenburg.

        Touch Platform.h to force a rebuild for Windows.

        * wtf/Platform.h:

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

        Reviewed by Adam Roben.

        Disable LTCG for Windows Release builds. Add new Release_LTCG configuration.
        https://bugs.webkit.org/show_bug.cgi?id=49632

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:

2010-11-16  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        The number of recursive match calls isn't limited in YARR Interpreter
        https://bugs.webkit.org/show_bug.cgi?id=47906

        Check the number of the matchDisjunction recursive calls to avoid unbounded
        recursion.
        Now the matchDisjunction function returns JSRegExpResult instead of bool.
        The JSRegExpResult enum contains the result of matching or the error code
        of the failure (like HitLimit) which terminates the matching.
        The error codes are based on pcre's jsRegExpExecute error codes.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
        (JSC::Yarr::Interpreter::matchParentheses):
        (JSC::Yarr::Interpreter::backtrackParentheses):
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::Interpreter::matchNonZeroDisjunction):
        (JSC::Yarr::Interpreter::interpret):
        (JSC::Yarr::Interpreter::Interpreter):
        * yarr/RegexInterpreter.h:

2010-11-16  Brian Weinstein  <bweinstein@apple.com>

        Rest of the Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-11-16  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix pt 1.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-11-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

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

        The bug here is that we read the prototype from the RHS argument using a regular
        op_get_by_id before op_instanceof has checked that this is an object implementing
        HasInstance. This incorrect behaviour gives rise to further unnecessary complexity
        in the code base, since we have additional logic (implemented using the
        GetByIdExceptionInfo data structures on CodeBlock) to convert not an object errors
        from the get_by_id into invalid parameter errors. Having fixed this bug this code
        is all redundant, since in these cases the get_by_id will never have been reached.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addExpressionInfo):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitCheckHasInstance):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::InstanceOfNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_check_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_check_has_instance):
        (JSC::JIT::emitSlow_op_instanceof):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_check_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_check_has_instance):
        (JSC::JIT::emitSlow_op_instanceof):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * runtime/ExceptionHelpers.cpp:
        (JSC::createInterruptedExecutionException):
        (JSC::createTerminatedExecutionException):
        (JSC::createUndefinedVariableError):
        (JSC::createNotAFunctionError):
        (JSC::createNotAnObjectError):
        * runtime/ExceptionHelpers.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::toPrimitive):
        (JSC::JSNotAnObject::getPrimitiveNumber):
        (JSC::JSNotAnObject::toBoolean):
        (JSC::JSNotAnObject::toNumber):
        (JSC::JSNotAnObject::toString):
        (JSC::JSNotAnObject::toObject):
        (JSC::JSNotAnObject::getOwnPropertySlot):
        (JSC::JSNotAnObject::getOwnPropertyDescriptor):
        (JSC::JSNotAnObject::put):
        (JSC::JSNotAnObject::deleteProperty):
        (JSC::JSNotAnObject::getOwnPropertyNames):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::JSNotAnObject):
        * runtime/JSObject.h:
        (JSC::JSObject::isActivationObject):
        * runtime/JSValue.cpp:
        (JSC::JSValue::toObjectSlowCase):
        (JSC::JSValue::synthesizeObject):
        (JSC::JSValue::synthesizePrototype):

2010-11-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Harden additional string functions against large lengths
        https://bugs.webkit.org/show_bug.cgi?id=49574

        * wtf/text/CString.cpp:
        (WTF::CString::init): Check for length that is too large for CString.
        (WTF::CString::newUninitialized): Ditto.
        (WTF::CString::copyBufferIfNeeded): Fix types so the length stays
        in a size_t.

        * wtf/text/WTFString.cpp:
        (WTF::String::append): Check for length that is too large.

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

        Reviewed by Sam Weinig.

        Bug 49577 - Function.prototype should be non-configurable

        JSC lazily allocates the prototype property of Function objects.

        We check the prototype exists on 'get', but not on 'put'.
        If you 'put' without having first done a 'get' you can end up with a configurable
        prototype (prototype should only ever be non-configurable).

        This is visible in a couple of ways:
          * 'delete' on the property may succeed. (the next access will result in a new,
          reset prototype object).
          * the prototype may be set to a getter.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertyNames):
            Reify the prototype property before allowing an enumerate including don't enum properties.
        (JSC::JSFunction::put):
            Reify the prototype property before any put to it.

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

        Reviewed by Geoff Garen.

        Bug 49488 - Only add source specific information to exceptions in Interpreter::throwException

        Three types of source location information are added to errors.

        (1) Divot information.

        This was added with the intention of using it to provide better source highlighting in the inspector.
        We may still want to do so, but we probably should not be exposing these values in a manner visible to
        user scripts – only through an internal C++ interface. The code adding divot properties to objects has
        been removed.

        (2) Line number information.

        Line number information is presently sometimes added at the point the exception is created, and sometimes
        added at the point the exception passes through throwException. Change this so that throwException has
        the sole responsibility for adding line number and source file information.

        (3) Source snippets in the message of certain type errors (e.g. 'doc' in `Result of expression 'doc' [undefined] is not an object.`).

        These messages are currently created at the point the exceptions is raised. Instead reformat the message
        such that the source snippet is located at the end (`Result of expression 'b1' [undefined] is not an object.`
        becomes `'undefined' is not an object (evaluating 'b1.property')`), and append these to the message at
        the in throw Exception. This presents a number of advantages:
          * we no longer need to have source location information to create these TypeErrors.
          * we can chose to append source location information in other error messages, including those where
            passing source location to the point of construction would be inconvenient.
          * we can chose in future to omit to append source location information when running in a non-debug mode.

        This also cleans up some error output, e.g. removing double brackets ('[[]]') around objects in output,
        removing double periods (..) at end of lines, and adding slightly more context to some errors.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::expressionRangeForBytecodeOffset):
            - Separated called to access line and range information.

        * bytecode/CodeBlock.h:
            - Separated called to access line and range information.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::isInvalidParamForIn):
        (JSC::isInvalidParamForInstanceOf):
            - Update parameters passed to error constructors.
        (JSC::appendSourceToError):
            - Update message property to add location information (previously added in createErrorMessage, in ExceptionHelpers)
        (JSC::Interpreter::throwException):
            - Updated to call appendSourceToError. 
        (JSC::Interpreter::privateExecute):
            - Update parameters passed to error constructors.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
            - Update parameters passed to error constructors.

        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        (JSC::hasErrorInfo):
            - Removed divot properties.

        * runtime/Error.h:
            - Removed divot properties.

        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
            - Initialize new property.

        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::appendSourceToMessage):
        (JSC::ErrorInstance::setAppendSourceToMessage):
        (JSC::ErrorInstance::clearAppendSourceToMessage):
            - Added flag to check for errors needing location information appending.
        (JSC::ErrorInstance::isErrorInstance):
            - Added virtual method to check for ErrorInstances.

        * runtime/ExceptionHelpers.cpp:
        (JSC::createUndefinedVariableError):
        (JSC::createInvalidParamError):
        (JSC::createNotAConstructorError):
        (JSC::createNotAFunctionError):
        (JSC::createNotAnObjectError):
            - Update parameters passed to error constructors, stopped adding line number information early, changed TypeError messages.

        * runtime/ExceptionHelpers.h:
            - Updated function signatures.

        * runtime/JSFunction.cpp:
        (JSC::callHostFunctionAsConstructor):
            - Update parameters passed to error constructors.

        * runtime/JSObject.h:
        (JSC::JSObject::isErrorInstance):
            - Added virtual method to check for ErrorInstances.

2010-11-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        CString(const char*) crashes when passed a null pointer
        https://bugs.webkit.org/show_bug.cgi?id=49450

        * wtf/text/CString.cpp:
        (WTF::CString::CString):
        Return early if str is null.

2010-11-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 49420 - Clean up syntax/reference error throw.

        Some errors detected at compile time are thrown at runtime. We currently do so using a op_new_error/op_throw bytecode pair.
        This is not ideal. op_throw is used for explicit user throw statements, and has different requirements in terms or meta data
        attached to the exception (controlled by the explicitThrow parameter passed to Interpreter::throwException). To work around
        this, op_new_error has to add the meta data at an early stage, which is unlike other VM exceptions being raised.

        We can simplify this and bring into line with other exception behaviour by changing new_error from just allocating an
        Exception instance to also throwing it – but as a regular VM throw, correctly passing explicitThrow as false.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::expressionRangeForBytecodeOffset):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitThrowReferenceError):
        (JSC::BytecodeGenerator::emitThrowSyntaxError):
        (JSC::BytecodeGenerator::emitThrowExpressionTooDeepException):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitNodeInConditionContext):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ThrowableExpressionData::emitThrowReferenceError):
        (JSC::ThrowableExpressionData::emitThrowSyntaxError):
        (JSC::RegExpNode::emitBytecode):
        (JSC::PostfixErrorNode::emitBytecode):
        (JSC::PrefixErrorNode::emitBytecode):
        (JSC::AssignErrorNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::LabelNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_throw_reference_error):
        (JSC::JIT::emit_op_throw_syntax_error):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_throw_reference_error):
        (JSC::JIT::emit_op_throw_syntax_error):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * parser/Nodes.h:

2010-11-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Harden some string functions against large lengths
        https://bugs.webkit.org/show_bug.cgi?id=49293

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::create): Fix incorrect use of PassRefPtr. Check for
        strlen results that are too large for StringImpl.
        (WTF::StringImpl::lower): Check for lengths that are too large for
        int32_t.
        (WTF::StringImpl::upper): Fix incorrect use of PassRefPtr. Check for
        lengths that are too large for int32_t.
        (WTF::StringImpl::secure): Fix incorect use of PassRefPtr. Use unsigned
        rather than int and int32_t so we can handle any length.
        (WTF::StringImpl::foldCase): Fix incorrect use of PassRefPtr. Check for
        lengths that are too large for int32_t.
        (WTF::StringImpl::find): Check for strlen results that are too large for
        StringImpl.
        (WTF::StringImpl::findIgnoringCase): Ditto.
        (WTF::StringImpl::replace): Fix incorrect use of PassRefPtr.
        (WTF::StringImpl::createWithTerminatingNullCharacter): Check before
        incrementing length.

2010-11-11  Dan Horák  <dan@danny.cz>

        Reviewed by Andreas Kling.

        Add support for the s390/s390x architectures, it's big-endian
        with s390 being 32-bit and s390x being 64-bit.

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

        * wtf/Platform.h:

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

        Reviewed by David Hyatt.

        HTML5 Ruby support should be mandatory feature
        https://bugs.webkit.org/show_bug.cgi?id=49272

        Remove Ruby as optional feature.

        * Configurations/FeatureDefines.xcconfig:
        * JavaScriptCorePrefix.h:: Touch it to avoid incremental build failure on Windows.

2010-11-10  Peter Rybin  <peter.rybin@gmail.com>

        Reviewed by Adam Barth.

        HTML parser should provide script column position within HTML document to JavaScript engine
        https://bugs.webkit.org/show_bug.cgi?id=45271

        Adds TextPosition* classes -- a structure that stores line/column/generation
        level coordinates inside text document. Adds *BasedNumber classes -- typesafe int
        wrappers that emphasize whether int number is used as zero-based or
        one-based.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/text/TextPosition.h: Added.
        (WTF::TextPosition::TextPosition):
        (WTF::TextPosition::minimumPosition):
        (WTF::TextPosition::belowRangePosition):
        (WTF::ZeroBasedNumber::fromZeroBasedInt):
        (WTF::ZeroBasedNumber::ZeroBasedNumber):
        (WTF::ZeroBasedNumber::zeroBasedInt):
        (WTF::ZeroBasedNumber::base):
        (WTF::ZeroBasedNumber::belowBase):
        (WTF::OneBasedNumber::fromOneBasedInt):
        (WTF::OneBasedNumber::OneBasedNumber):
        (WTF::OneBasedNumber::oneBasedInt):
        (WTF::OneBasedNumber::convertAsZeroBasedInt):
        (WTF::OneBasedNumber::convertToZeroBased):
        (WTF::OneBasedNumber::base):
        (WTF::OneBasedNumber::belowBase):
        (WTF::toZeroBasedTextPosition):
        (WTF::toOneBasedTextPosition):
        (WTF::ZeroBasedNumber::convertToOneBased):

2010-11-09  Gabor Loki  <loki@webkit.org>

        Reviewed by Gavin Barraclough.

        ARM JIT asserts when loading http://reader.google.com in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=48912

        There are several cases when the uninterrupted sequence is larger than
        maximum required offset for pathing the same sequence. Eg.: if in a
        uninterrupted sequence the last macroassembler's instruction is a stub
        call, it emits store instruction(s) which should not be included in the
        calculation of length of uninterrupted sequence. So, the insnSpace and
        constSpace should be upper limit instead of hard limit.

        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::endUninterruptedSequence):

2010-11-09  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/49279> Fix include statements for local headers

        Reviewed by Gavin Barraclough.

        Use "Foo.h" instead of <Foo.h> for local headers.

        * assembler/AbstractMacroAssembler.h: Also fixed sort order.
        * assembler/CodeLocation.h:
        * yarr/RegexJIT.h:
        * yarr/RegexParser.h:

2010-11-08  Adam Roben  <aroben@apple.com>

        Roll out r71532

        It broke the build for Cygwin 1.7 installs. Cygwin 1.7's default
        .bashrc unsets %TEMP%, which broke copy-tools.cmd.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/copy-tools.cmd: Removed.
        * JavaScriptCore.vcproj/JavaScriptCore/show-alert.js: Removed.

2010-11-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        >=webkitgtk-1.2.5: parallel build fails with libtool: link: cannot find the library `libwebkit-1.0.la' or unhandled argument `libwebkit-1.0.la'
        https://bugs.webkit.org/show_bug.cgi?id=49128

        r59042 introduced a C++-style comment in Platform.h, which is often
        included in C source files. Change it to a C-style comment.

        * wtf/Platform.h: Fix the C++-style comment.

2010-11-08  Adam Roben  <aroben@apple.com>

        Show a message and cause the build to immediately fail when any
        .vsprops files are copied

        When $WebKitLibrariesDir is set to a non-standard location, the
        .vsprops files have to be copied from WebKitLibraries/win to
        $WebKitLibrariesDir. When this happens, Visual Studio doesn't pick up
        changes to the .vsprops files until the next time it opens the solution
        file. Before this patch, the build would soldier on with the old
        .vsprops files, leading to strange build failures. Now we detect that
        the .vsprops files have been updated, display a message to the user
        telling them what to do, and make the build fail immediately.

        Fixes <http://webkit.org/b/49181> Windows build fail mysteriously when
        .vsprops files are updated

        Reviewed by Steve Falkenburg.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
        Moved code to copy the tools directory to the new copy-tools.cmd
        script. Moved that after the command that writes the buildfailed file
        so the build will be considered a failure if copy-tools.cmd fails.
        Changed to write the project name into buildfailed like all our other
        projects do, so those other projects will know that the failure was due
        to this project.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        Added new scripts.

        * JavaScriptCore.vcproj/JavaScriptCore/copy-tools.cmd: Added. Copies
        the tools directory to $WebKitLibrariesDir. If any files were copied,
        we display a message to the user and exit with error code 1 to cause
        the build to fail. In non-interactive builds, we just print the message
        to the build log. In interactive builds, we show the message in an
        alert.

        * JavaScriptCore.vcproj/JavaScriptCore/show-alert.js: Added. Uses
        Windows Scripting Host to display a message in an alert.

2010-11-07  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Andreas Kling.

        [Qt] make install does not cause JavaScriptCore to be built
        https://bugs.webkit.org/show_bug.cgi?id=49114

        * JavaScriptCore.pro:

2010-11-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Website consistently crashing TOT in JIT::execute() on news.com.au
        https://bugs.webkit.org/show_bug.cgi?id=48954

        The problem here was the strict pass of this conversion was loading the
        this structure into one register but doing the flags check off a different
        register.  This is clearly wrong.  I have been unable to trigger the crash
        with a reduction, but I've added an assertion to the this conversion to
        attempt to make it more readily catchable in future.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_convert_this_strict):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_convert_this_strict):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

2010-11-04  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Adam Barth.

        Use leakRef instead of releaseRef
        https://bugs.webkit.org/show_bug.cgi?id=48974

        Use leakRef instead of the deprecated releaseRef. This was renamed
        some time ago because 'releaseRef' is too close to 'release',
        which does something completely different.

2010-11-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Gavin Barraclough.

        REGRESSION(49798): Crash in HTMLObjectElement::parseMappedAttribute
        https://bugs.webkit.org/show_bug.cgi?id=48789

        The contract for all String/AtomicString methods seems to be that it's
        safe to call them, even when the String is null (impl() returns 0).
        This contract was broken by r49798 (unintentionally) when optimizing
        for dromeo.
        This patch adds a null check to AtomicString::lower() fixing this
        crash and preventing future confusion.

        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::lower):

2010-11-04  Adam Barth  <abarth@webkit.org>

        Enabled ICCJPEG on Chromium Mac
        https://bugs.webkit.org/show_bug.cgi?id=48977

        * wtf/Platform.h:

2010-11-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Crash in Function.prototype.call.apply
        https://bugs.webkit.org/show_bug.cgi?id=48485

        The problem here was op_load_varargs failing to ensure that
        there was sufficient space for the entire callframe prior to
        op_call_varargs.  This meant that when we then re-entered the
        VM it was possible to stomp over an earlier portion of the
        stack, so causing sub-optimal behaviour.

        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoadVarargs):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ApplyFunctionCallDotNode::emitBytecode):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_load_varargs):

2010-11-03  Kenneth Russell  <kbr@google.com>

        Reviewed by Chris Marrin.

        Redesign extension mechanism in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=46894

        * JavaScriptCore.exp:
         - Exposed String::split(const String&, Vector<String>).

2010-11-03  Adam Roben  <aroben@apple.com>

        Bring WTF.vcproj up to date

        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added filters for the text and
        unicode directories, added new files, removed old files.

2010-11-03  Gabor Loki  <loki@webkit.org>

        Reviewed by Andreas Kling.

        Remove unused initializeWeakRandomNumberGenerator
        https://bugs.webkit.org/show_bug.cgi?id=48899

        WeakRandom class is used instead of weakRandomNumber and its initializer.

        * wtf/RandomNumberSeed.h:

2010-11-03  Gabor Loki  <loki@webkit.org>

        Reviewed by Geoffrey Garen.

        Unused class: JSFastMath with JSValue64
        https://bugs.webkit.org/show_bug.cgi?id=48835

        Remove unused JSFastMath class.

        * runtime/JSImmediate.h:

2010-11-02  Adam Roben  <aroben@apple.com>

        Windows build fix after r71127

        MSVC isn't smart enough to figure out that the definition of the global
        nullptr variable isn't needed, so we provide one for it.

        Fixes <http://webkit.org/b/48862> Windows build is broken due to
        undefined symbol nullptr

        Reviewed by Anders Carlsson.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export nullptr.

        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added NullPtr.cpp and let VS
        resort the files.

        * wtf/NullPtr.cpp: Added.

2010-11-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Remove special handling of HashTableDeletedValue in PlatformRefPtr and manually manage memory that cannot be controlled by HashTraits
        https://bugs.webkit.org/show_bug.cgi?id=48841

        Remove special handling of HashTableDeletedValue in PlatformRefPtr.
        This is better handled on a case-by-case basis, when HashTraits
        cannot account for it.

        * wtf/PlatformRefPtr.h:
        (WTF::PlatformRefPtr::~PlatformRefPtr):
        (WTF::PlatformRefPtr::clear):
        (WTF::::operator):

2010-10-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        REGRESSION: r69429-r69611: Crash in JSC::Interpreter::privateExecute
        https://bugs.webkit.org/show_bug.cgi?id=47573

        I think the interpreter portion of this was introduced by
        an incorrect but silent merge when I updated prior to committing.
        The JIT change is basically just a correctness fix, but it is
        needed to prevent the testcase from asserting in debug builds.

        The basic problem is incorrectly setting the activation object
        on an arguments object.  The crash was due to us setting a null
        activation in the interpreter, in the jit we were setting the
        activation of a strict mode arguments object.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * wtf/Platform.h:

2010-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Roben and David Kilzer.

        Fix and cleanup of build systems
        https://bugs.webkit.org/show_bug.cgi?id=48342

        * Configurations/FeatureDefines.xcconfig: Add missing ENABLE_FULLSCREEN_API

2010-10-28  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Include stddef.h unconditionally in Assertions.h
        https://bugs.webkit.org/show_bug.cgi?id=48573

        There is no reason to have stddef.h include be MSVC-only.

        * wtf/Assertions.h:

2010-10-28  Herczeg Zoltan  <zherczeg@webkit.org>

        Rubber stamped by Csaba Osztrogonác.

        Try to fix interpreter build.

        Needed parentheses around assignment to avoid GCC warning after
        http://trac.webkit.org/changeset/70703

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2010-10-28  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        resetAssertionMatches() is an unused function in YARR Interpreter
        https://bugs.webkit.org/show_bug.cgi?id=48503

        The resetAssertionMatches() function is removed from YARR Interpreter
        because it's never called.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::resetMatches):

2010-10-28  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Andreas Kling.

        Wrong instruction form for BKPT
        https://bugs.webkit.org/show_bug.cgi?id=48427

        One '0' is missing from BKPT instruction.
        Thanks for Jacob Bramley for reporting this error.

        * assembler/ARMAssembler.h:

2010-10-28  Xan Lopez  <xlopez@igalia.com>

        Try to fix Snow Leopard build.

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

2010-10-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Oliver Hunt.

        Do not have two different asCell APIs in JSValue
        https://bugs.webkit.org/show_bug.cgi?id=47979

        Remove JSCell* asCell(JSValue) in favor of only using
        JSValue::asCell().

        * API/APICast.h:
        (toRef):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::testPrototype):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/GetterSetter.h:
        (JSC::asGetterSetter):
        * runtime/JSByteArray.h:
        (JSC::asByteArray):
        * runtime/JSCell.h:
        (JSC::JSCell::getCallData):
        (JSC::JSCell::getConstructData):
        * runtime/JSString.h:
        (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
        (JSC::asString):
        * runtime/JSValue.h:
        * runtime/Operations.cpp:
        (JSC::jsIsObjectType):
        * runtime/Operations.h:
        (JSC::normalizePrototypeChain):
        * runtime/Protect.h:
        (JSC::gcProtect):
        (JSC::gcUnprotect):

2010-10-27  Chao-ying Fu  <fu@mips.com>

        Reviewed by Oliver Hunt.

        Support emit_op_mod() for MIPS on JSVALUE32_64
        https://bugs.webkit.org/show_bug.cgi?id=46511

        This patch uses MIPS div instructions for op_mod to improve performance.

        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_mod):

2010-10-27  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * wtf/Platform.h: Make sure ACCELERATED_COMPOSITING is
        turned off in the WinCairo port.  This isn't supported (yet.)

2010-10-27  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Marrin.

        Add ENABLE_WEB_AUDIO feature enable flag (initially disabled) to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=48279

        * Configurations/FeatureDefines.xcconfig:

2010-10-27  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix.

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

2010-10-27  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 48365 - Remove output parameters from JITStackFrame

        The JIT stub functions presently use the stackframe to provide a couple of additional return values.
          * In the case of uncaught exceptions the exception value is returned on the stackframe.exception property.
          * In the case of caught exceptions the updated value for the callFrame register is returned on the stackframe.callFrame property.

        Change exception returns such that exceptions are always returned on JSGlobalData::exception.
        Change op_catch such that the new CallFrame value is returned from op_throw / vm_throw in regT0.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall):
        (JSC::CachedCall::call):
        * interpreter/CallFrame.h:
        (JSC::ExecState::exception):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        * jit/JITCode.h:
        (JSC::JITCode::execute):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_catch):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_catch):
        * jit/JITStubs.cpp:
        (JSC::ctiTrampoline):
        (JSC::jitThrow):
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):
        * runtime/CallData.cpp:
        (JSC::call):
        * runtime/Completion.cpp:
        (JSC::evaluate):
        * runtime/ConstructData.cpp:
        (JSC::construct):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createErrorForInvalidGlobalAssignment):
        (JSC::throwOutOfMemoryError):
        (JSC::throwStackOverflowError):
        * runtime/ExceptionHelpers.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::sort):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):

2010-10-27  Gabor Loki  <loki@webkit.org>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=48060
        Speed up op_jeq_null and op_jneq_null.

        For both opcodes the NullTag and UndefinedTag are checked to control the
        jump. These values can be simply checked by AboveOrEqual or Below
        condition if they are the two highest unsigned integers from JSValue's
        Tag field.

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        * runtime/JSValue.h:

2010-10-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=41948
        REGRESSION(r60392): Registerfile can be unwound too far following an exception
        
        SunSpider reports no change.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException): Walk the stack to calculate the high
        water mark currently in use. It's not safe to assume that the current
        CallFrame's high water mark is the highest high water mark because
        calls do not always set up at the end of a CallFrame. A large caller
        CallFrame can encompass a small callee CallFrame.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall): Make sure to set a 0 CodeBlock
        in the CallFrame of a host call, like the Interpreter does, instead of
        leaving the CodeBlock field uninitialized. The backtracing code requires
        a valid CodeBlock field in each CallFrame.

2010-10-27  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Add cmn to branch32(reg, imm) on ARM
        https://bugs.webkit.org/show_bug.cgi?id=48062

        The conditional comparison can be done with cmn if the imm value is
        negative and can fit into the cmn instruction.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::branch32):

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

        Interpreter build fix.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2010-10-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove exec and globalData arguments from jsNumber
        https://bugs.webkit.org/show_bug.cgi?id=48270

        Remove the now unused exec and globalData arguments from jsNumber
        and mechanically update all users of jsNumber.

        * API/JSValueRef.cpp:
        (JSValueMakeNumber):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoad):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayNode::emitBytecode):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mod):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_mod):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (functionRun):
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        * runtime/CachedTranscendentalFunction.h:
        (JSC::CachedTranscendentalFunction::operator()):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        (JSC::dateParse):
        (JSC::dateNow):
        (JSC::dateUTC):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncGetFullYear):
        (JSC::dateProtoFuncGetUTCFullYear):
        (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/Error.cpp:
        (JSC::addErrorSourceInfo):
        (JSC::addErrorDivotInfo):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::getIndex):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::lengthGetter):
        (JSC::JSFunction::getOwnPropertyDescriptor):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseInt):
        (JSC::globalFuncParseFloat):
        * runtime/JSNumberCell.h:
        (JSC::JSValue::JSValue):
        (JSC::jsNaN):
        (JSC::JSValue::toJSNumber):
        * runtime/JSONObject.cpp:
        (JSC::unwrapBoxedPrimitive):
        (JSC::PropertyNameForFunctionCall::value):
        (JSC::JSONStringify):
        * runtime/JSString.cpp:
        (JSC::JSString::getStringPropertyDescriptor):
        * runtime/JSString.h:
        (JSC::JSString::getStringPropertySlot):
        * runtime/JSValue.h:
        (JSC::jsDoubleNumber):
        (JSC::jsNumber):
        (JSC::jsNaN):
        (JSC::JSValue::JSValue):
        (JSC::JSValue::toJSNumber):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::parse):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        (JSC::mathProtoFuncAbs):
        (JSC::mathProtoFuncACos):
        (JSC::mathProtoFuncASin):
        (JSC::mathProtoFuncATan):
        (JSC::mathProtoFuncATan2):
        (JSC::mathProtoFuncCeil):
        (JSC::mathProtoFuncCos):
        (JSC::mathProtoFuncExp):
        (JSC::mathProtoFuncFloor):
        (JSC::mathProtoFuncLog):
        (JSC::mathProtoFuncMax):
        (JSC::mathProtoFuncMin):
        (JSC::mathProtoFuncPow):
        (JSC::mathProtoFuncRandom):
        (JSC::mathProtoFuncRound):
        (JSC::mathProtoFuncSin):
        (JSC::mathProtoFuncSqrt):
        (JSC::mathProtoFuncTan):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        (JSC::numberConstructorNaNValue):
        (JSC::numberConstructorNegInfinity):
        (JSC::numberConstructorPosInfinity):
        (JSC::numberConstructorMaxValue):
        (JSC::numberConstructorMinValue):
        (JSC::constructWithNumberConstructor):
        (JSC::callNumberConstructor):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsAdd):
        * runtime/PrototypeFunction.cpp:
        (JSC::PrototypeFunction::PrototypeFunction):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        (JSC::RegExpMatchesArray::fillArrayInstance):
        * runtime/RegExpObject.cpp:
        (JSC::regExpObjectLastIndex):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncCharCodeAt):
        (JSC::stringProtoFuncIndexOf):
        (JSC::stringProtoFuncLastIndexOf):
        (JSC::stringProtoFuncSearch):
        (JSC::stringProtoFuncLocaleCompare):

2010-10-25  David Tapuska  <dtapuska@rim.com>

        Reviewed by David Kilzer.

        Enable VFP if our compiler settings indicated we had a hardware
        VFP.

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

        * assembler/MacroAssemblerARM.cpp:
        (JSC::isVFPPresent):

2010-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70451.
        http://trac.webkit.org/changeset/70451
        https://bugs.webkit.org/show_bug.cgi?id=48249

        Broke set-unloaded-frame-location.html under Qt (Requested by
        caseq on #webkit).

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/text/TextPosition.h: Removed.

2010-10-25  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Replace _countof with WTF_ARRAY_LENGTH
        https://bugs.webkit.org/show_bug.cgi?id=48229

        * wtf/Platform.h:

2010-10-25  Peter Rybin  <peter.rybin@gmail.com>

        Reviewed by Adam Barth.

        HTML parser should provide script column position within HTML document to JavaScript engine
        https://bugs.webkit.org/show_bug.cgi?id=45271

        Adds TextPosition* classes -- a structure that stores line/column/generation
        level coordinates inside text document. Adds *BasedNumber classes -- typesafe int
        wrappers that emphasize whether int number is used as zero-based or
        one-based.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/text/TextPosition.h: Added.
        (WTF::TextPosition::TextPosition):
        (WTF::TextPosition::minimumPosition):
        (WTF::TextPosition::belowRangePosition):
        (WTF::ZeroBasedNumber::fromZeroBasedInt):
        (WTF::ZeroBasedNumber::ZeroBasedNumber):
        (WTF::ZeroBasedNumber::zeroBasedInt):
        (WTF::ZeroBasedNumber::base):
        (WTF::ZeroBasedNumber::belowBase):
        (WTF::OneBasedNumber::fromOneBasedInt):
        (WTF::OneBasedNumber::OneBasedNumber):
        (WTF::OneBasedNumber::oneBasedInt):
        (WTF::OneBasedNumber::convertAsZeroBasedInt):
        (WTF::OneBasedNumber::convertToZeroBased):
        (WTF::OneBasedNumber::base):
        (WTF::OneBasedNumber::belowBase):
        (WTF::toZeroBasedTextPosition):
        (WTF::toOneBasedTextPosition):
        (WTF::ZeroBasedNumber::convertToOneBased):

2010-10-24  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by David Kilzer.

        Check endianness with __BIG_ENDIAN in RVCT.
        https://bugs.webkit.org/show_bug.cgi?id=46122

        RVCT defines __BIG_ENDIAN if compiling for a big-endian target.

        * wtf/Platform.h:

2010-10-24  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Dave Kilzer.

        Removed empty directories.

        * JavaScriptCore: Removed.
        * JavaScriptCore/runtime: Removed.

2010-10-24  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed, fix typo of last build fix.

        * wtf/DateMath.cpp:

2010-10-24  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for chromium.

        * wtf/DateMath.cpp: Added missing include.

2010-10-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Add WTF_ARRAY_LENGTH macro to WTF
        https://bugs.webkit.org/show_bug.cgi?id=32828

        Unify the different implementations and usages.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendQuotedString):
        (JSC::Stringifier::toJSON):
        (JSC::Stringifier::appendStringifiedValue):
        * runtime/UString.cpp:
        (JSC::UString::number):
        * wtf/DateMath.cpp:
        (WTF::parseDateFromNullTerminatedCharacters):
        * wtf/StdLibExtras.h:

2010-10-24  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Filter example Chiseled from SVG Wow! is slow
        https://bugs.webkit.org/show_bug.cgi?id=48174

        Added 'using WTF::ByteArray;' at the end of ByteArray.h

        * wtf/ByteArray.h:

2010-10-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Inline WTF::bitwise_cast and fix style
        https://bugs.webkit.org/show_bug.cgi?id=48208

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

2010-10-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Sam Weinig.

        Unify globalData APIs
        https://bugs.webkit.org/show_bug.cgi?id=47969

        Make JSGlobalObject::globalData return a reference and adapt
        callers. This unifies the API with the existing
        CallFrame::globalData, which also returns a reference.

        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * interpreter/CallFrame.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::dumpRegisters):
        * jsc.cpp:
        (runWithScripts):
        * parser/JSParser.cpp:
        (JSC::jsParse):
        * parser/Parser.cpp:
        (JSC::Parser::parse):
        * parser/Parser.h:
        (JSC::Parser::parse):
        * runtime/Error.cpp:
        (JSC::createError):
        (JSC::createEvalError):
        (JSC::createRangeError):
        (JSC::createReferenceError):
        (JSC::createSyntaxError):
        (JSC::createTypeError):
        (JSC::createURIError):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::~JSGlobalObject):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::globalData):

2010-10-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r70369.
        http://trac.webkit.org/changeset/70369
        https://bugs.webkit.org/show_bug.cgi?id=47974

        Caused weird artifacts in expected results.

        * wtf/Platform.h:

2010-10-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Crashes randomly in cairo_scaled_font_destroy
        https://bugs.webkit.org/show_bug.cgi?id=46794

        Make PlatformRefPtr aware of hashTableDeletedValue. When PlatformRefPtr
        goes away this should probably be handled in the future via some special
        hooks in RefCounted (or its contained type).

        * wtf/PlatformRefPtr.h:
        (WTF::PlatformRefPtr::~PlatformRefPtr):
        (WTF::PlatformRefPtr::clear):
        (WTF::::operator):

2010-10-22  Adam Roben  <aroben@apple.com>

        Remove the QuartzCorePresent.h mechanism

        This header was used to detect whether QuartzCore headers were present
        on the system. Everyone should have these headers now so we no longer
        need to detect.

        Reviewed by Sam Weinig.

        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Remove
        code to generate QuartzCorePresent.h.

        * wtf/Platform.h: Stop including QuartzCorePresent.h on Windows and
        collapse all USE_ACCELERATED_COMPOSITING settings into one #ifdef.

2010-10-22  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r70290.
        http://trac.webkit.org/changeset/70290
        https://bugs.webkit.org/show_bug.cgi?id=48111

        Undelete Android build files.

        * Android.mk: Added.

2010-10-22  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Csaba Osztrogonác.

        JSC interpreter regressions after r69940
        https://bugs.webkit.org/show_bug.cgi?id=47839

        Wrong "if": It should test whether the result exists,
        and not the opposite. It is an interpreter bug, hence
        the bots does not capture it.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolveBase):

2010-10-21  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Remove Android build system
        https://bugs.webkit.org/show_bug.cgi?id=48111

        * Android.mk: Removed.

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

        Reviewed by Kent Tamura.

        [BREWMP] Add a String constructor which takes AECHAR*
        https://bugs.webkit.org/show_bug.cgi?id=45043

        Add String(const AECHAR*) constructor for convenience.

        * wtf/text/WTFString.h:

2010-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use GCharsetConverter instead of g_iconv in TextCodecGtk
        https://bugs.webkit.org/show_bug.cgi?id=47896

        * wtf/gobject/GTypedefs.h:

2010-10-21  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r70174.
        http://trac.webkit.org/changeset/70174
        https://bugs.webkit.org/show_bug.cgi?id=41948

        This patch reverts a change that causes
        http/tests/xmlhttprequest/origin-whitelisting-removal.html to crash.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):

2010-10-20  Simon Fraser  <simon.fraser@apple.com>

        Fix the EFL build.

        * wtf/CMakeLists.txt:

2010-10-20  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build: export needed symbols.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-10-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Gavin Barraclough.

        https://bugs.webkit.org/show_bug.cgi?id=47851
        
        Add methods to DecimalNumber to return the buffer length
        required for decimal and exponential output.
        
        Make some of the DecimalNumber code non-inline (no
        effect on Sunspider), adding DecimalNumber.cpp to various
        build systems.
        
        Make some DecimalNumber methods 'const'.

        * Android.mk:
        * Android.v8.wtf.mk:
        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToPrecision):
        * wtf/DecimalNumber.cpp: Added.
        (WTF::DecimalNumber::bufferLengthForStringDecimal):
        (WTF::DecimalNumber::bufferLengthForStringExponential):
        (WTF::DecimalNumber::toStringDecimal):
        (WTF::DecimalNumber::toStringExponential):
        * wtf/DecimalNumber.h:
        (WTF::DecimalNumber::sign):
        (WTF::DecimalNumber::exponent):
        (WTF::DecimalNumber::significand):
        (WTF::DecimalNumber::precision):
        * wtf/dtoa.cpp:
        (WTF::dtoa):
        * wtf/dtoa.h:
        * wtf/wtf.pri:

2010-10-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70165.
        http://trac.webkit.org/changeset/70165
        https://bugs.webkit.org/show_bug.cgi?id=48007

        It broke tests on Qt bot (Requested by Ossy on #webkit).

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/text/TextPosition.h: Removed.

2010-10-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix the Windows build after r70165. Move the copying of JavaScript headers from JavaScriptCore's post-build
        step to JavaScriptCoreGenerated, so the copying is done even when a cpp file in JavaScriptCore is changed.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:

2010-10-20  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, fixing the Win build.

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:

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

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=41948
        REGRESSION(r60392): Registerfile can be unwound too far following an exception

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException): Walk the stack to calculate the high
        water mark currently in use. It's not safe to assume that the current
        CallFrame's high water mark is the highest high water mark because
        calls do not always set up at the end of a CallFrame. A large caller
        CallFrame can encompass a small callee CallFrame.

2010-10-20  Peter Rybin  <peter.rybin@gmail.com>

        Reviewed by Adam Barth.

        HTML parser should provide script column position within HTML document to JavaScript engine
        https://bugs.webkit.org/show_bug.cgi?id=45271

        Adds TextPosition* classes -- a structure that stores line/column/generation
        level coordinates inside text document. Adds *BasedNumber classes -- typesafe int
        wrappers that emphasize whether int number is used as zero-based or
        one-based.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/text/TextPosition.h: Added.
        (WTF::TextPosition::TextPosition):
        (WTF::TextPosition::minimumPosition):
        (WTF::TextPosition::belowRangePosition):
        (WTF::ZeroBasedNumber::fromZeroBasedInt):
        (WTF::ZeroBasedNumber::ZeroBasedNumber):
        (WTF::ZeroBasedNumber::zeroBasedInt):
        (WTF::ZeroBasedNumber::base):
        (WTF::ZeroBasedNumber::belowBase):
        (WTF::OneBasedNumber::fromOneBasedInt):
        (WTF::OneBasedNumber::OneBasedNumber):
        (WTF::OneBasedNumber::oneBasedInt):
        (WTF::OneBasedNumber::convertAsZeroBasedInt):
        (WTF::OneBasedNumber::convertToZeroBased):
        (WTF::OneBasedNumber::base):
        (WTF::OneBasedNumber::belowBase):
        (WTF::toZeroBasedTextPosition):
        (WTF::toOneBasedTextPosition):
        (WTF::ZeroBasedNumber::convertToOneBased):

2010-10-19  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by David Kilzer.

        [BREWMP] Turn off JIT for simulator build
        https://bugs.webkit.org/show_bug.cgi?id=47937

        We don't need to test x86 JIT.

        * wtf/Platform.h:

2010-10-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Remove support for JSVALUE32 from JSC
        https://bugs.webkit.org/show_bug.cgi?id=47948

        Remove all the code for supporting JSVALUE32 from JSC.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * 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_urshift):
        (JSC::JIT::emitSlow_op_urshift):
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emit_op_jless):
        (JSC::JIT::emitSlow_op_jless):
        (JSC::JIT::emit_op_jlesseq):
        (JSC::JIT::emitSlow_op_jlesseq):
        (JSC::JIT::emit_op_bitand):
        (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_mod):
        (JSC::JIT::emitSlow_op_mod):
        * jit/JITCall.cpp:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitGetFromCallFrameHeaderPtr):
        (JSC::JIT::emitGetFromCallFrameHeader32):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_if_lesseq):
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emit_op_next_pname):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        * jit/JITStubs.h:
        * jit/JSInterfaceJIT.h:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::returnDouble):
        (JSC::SpecializedThunkJIT::tagReturnAsInt32):
        * jit/ThunkGenerators.cpp:
        (JSC::sqrtThunkGenerator):
        (JSC::powThunkGenerator):
        * runtime/Collector.cpp:
        (JSC::isPossibleCell):
        (JSC::typeName):
        * runtime/JSCell.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.h:
        (JSC::Structure::prototypeForLookup):
        * runtime/JSImmediate.h:
        (JSC::reinterpretIntptrToDouble):
        (JSC::JSImmediate::isIntegerNumber):
        (JSC::JSImmediate::isDouble):
        (JSC::JSImmediate::areBothImmediateIntegerNumbers):
        (JSC::JSImmediate::makeDouble):
        (JSC::JSImmediate::doubleValue):
        (JSC::JSImmediate::toBoolean):
        (JSC::JSImmediate::fromNumberOutsideIntegerRange):
        (JSC::JSImmediate::from):
        (JSC::JSImmediate::toDouble):
        (JSC::JSFastMath::rightShiftImmediateNumbers):
        * runtime/JSNumberCell.cpp:
        * runtime/JSNumberCell.h:
        * runtime/JSObject.h:
        (JSC::JSObject::JSObject):
        * runtime/JSValue.h:
        * runtime/NumberObject.h:
        * wtf/Platform.h:

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

        Reviewed by Geoffrey Garen.

        BytecodeGenerator::m_lastOpcodePosition must be initialized in all constructors
        https://bugs.webkit.org/show_bug.cgi?id=47920

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator): Add missing member initialization.

2010-10-19  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by David Kilzer.

        RVCT fails to compile DateMath.cpp due to overloaded function pow
        https://bugs.webkit.org/show_bug.cgi?id=47844

        Choose std::pow(double, double) among multiple overloaded pow functions
        to fix build for RVCT.

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

2010-10-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Use UChar instead of wchar_t in UnicodeWinCE
        https://bugs.webkit.org/show_bug.cgi?id=47904

        Make UnicodeWinCE more portable, so we can use it for other ports too.

        * wtf/unicode/wince/UnicodeWinCE.cpp:
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isSpace):
        (WTF::Unicode::isLetter):
        (WTF::Unicode::isUpper):
        (WTF::Unicode::isLower):
        (WTF::Unicode::isDigit):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::isAlphanumeric):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::digitValue):
        * wtf/unicode/wince/UnicodeWinCE.h:
        (WTF::Unicode::isSeparatorSpace):
        (WTF::Unicode::isHighSurrogate):
        (WTF::Unicode::isLowSurrogate):
        (WTF::Unicode::umemcasecmp):
        (WTF::Unicode::surrogateToUcs4):

2010-10-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Fix style of UnicodeWinCE
        https://bugs.webkit.org/show_bug.cgi?id=47818

        * wtf/unicode/wince/UnicodeWinCE.cpp:
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        * wtf/unicode/wince/UnicodeWinCE.h:

2010-10-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        * GNUmakefile.am: add missing file.

2010-10-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Strict mode: Functions created with the function constructor don't implement strict mode semantics
        https://bugs.webkit.org/show_bug.cgi?id=47860

        When creating the FunctionExecutable for a new function the function constructor
        was always passing false for whether or not a function was strict, rather than
        using the information from the freshly parsed function itself.

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::fromGlobalCode):

2010-10-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Strict mode: |this| should be undefined if it is not explicitly provided
        https://bugs.webkit.org/show_bug.cgi?id=47833

        To make strict mode behave correctly we want to pass undefined instead of null
        as the default this value.  This has no impact on behaviour outside of strict
        mode as both values are replaced with the global object if necessary.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::FunctionCallValueNode::emitBytecode):
        (JSC::FunctionCallResolveNode::emitBytecode):
        (JSC::CallFunctionCallDotNode::emitBytecode):
        (JSC::ApplyFunctionCallDotNode::emitBytecode):


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

        Reviewed by Anders Carlsson.

        Make a nullptr that works with OwnPtr and RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=47756

        * JavaScriptCore.xcodeproj/project.pbxproj: Added NullPtr.h.

        * wtf/NullPtr.h: Added.

        * wtf/OwnArrayPtr.h: Add an overload of = taking nullptr.
        * wtf/OwnPtr.h: Ditto.
        * wtf/PassOwnArrayPtr.h: Ditto.
        * wtf/PassOwnPtr.h: Ditto.
        * wtf/PassRefPtr.h: Ditto.
        * wtf/RefPtr.h: Ditto.
        * wtf/RetainPtr.h: Ditto.

2010-10-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Strict mode: JIT doesn't check for |this| being an immediate before dereferencing
        https://bugs.webkit.org/show_bug.cgi?id=47826

        There's no guarantee that |this| will be a cell in a strict mode function, so
        don't claim that it is.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::isKnownNotImmediate):

2010-10-18  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Oliver Hunt.

        if (0) throw "x" ; else { } throws parse error after r69906
        https://bugs.webkit.org/show_bug.cgi?id=47807

        r69906 introduced a bug: the semicolon is not parsed after a throw
        expression anymore. Thus, the semicolon terminates the "if" parsing
        in the example above, and the else token results a parse error.

        * parser/JSParser.cpp:
        (JSC::JSParser::parseThrowStatement):

2010-10-18  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        Remove some unnecessary lines of code from Parser.cpp
        https://bugs.webkit.org/show_bug.cgi?id=47816

        * parser/Parser.cpp:

2010-10-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Csaba Osztrogonác.

        Build broken with JIT disabled
        https://bugs.webkit.org/show_bug.cgi?id=47801

        This is a regression caused by r69940.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolveBase):

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

        Reviewed by Darin Adler.

        Change FastAllocBase implementation into a macro
        https://bugs.webkit.org/show_bug.cgi?id=42998

        It was investigated in bug #33896 that inheriting classes from FastAllocBase 
        can result in objects getting larger which leads to memory regressions. 
        Using a macro instead of inheriting classes from FastAllocBase would solve the issue. 

        * wtf/FastAllocBase.h: Add a WTF_MAKE_FAST_ALLOCATED macro

2010-10-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Strict mode: arguments is not valid as the base expression for pre- or post-fix expressions
        https://bugs.webkit.org/show_bug.cgi?id=47791

        Simple fix, check for arguments in addition to eval.

        * parser/JSParser.cpp:
        (JSC::JSParser::parseUnaryExpression):

2010-10-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Strict mode: Assignment that would create a global should be a late ReferenceError, not a syntax failure
        https://bugs.webkit.org/show_bug.cgi?id=47788

        Fixing this required a couple of changes:
         * resolve_base now has a flag to indicate whether it is being used for a put in strict mode.
           this allows us to throw an exception when we're doing a completely generic resolve for
           assignment, and that assignment would create a new global.
         * There is a new opcode 'op_ensure_property_exists' that is used to determine whether
           the property being assigned to already exists on the global object.  This currently
           has no caching, but such caching could be added relatively trivially.  It is only used
           in the case where we know that a property will be placed on the global object, and
           we cannot verify that the property already exists.

        In the jit we plant a call to cti_op_resolve_base_strict_put in the effected case rather
        than making op_resolve_base have an additional runtime branch.

        There's also a new helper function to create the exception for the invalid assignment.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitResolveBase):
        (JSC::BytecodeGenerator::emitResolveBaseForPut):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::AssignResolveNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolveBase):
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_resolve_base):
        (JSC::JIT::emit_op_ensure_property_exists):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_resolve_base):
        (JSC::JIT::emit_op_ensure_property_exists):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * parser/JSParser.cpp:
        (JSC::JSParser::parseProgram):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createErrorForInvalidGlobalAssignment):
        * runtime/ExceptionHelpers.h:
        * runtime/Operations.h:
        (JSC::resolveBase):

2010-10-17  Simon Fraser  <simon.fraser@apple.com>

        First part of fix for Windows build failure. Will wait for the
        next set of link errors to determine the mangled forms for dtoaRoundSF
        and dtoaRoundDP.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-10-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Nikolas Zimmermann.

        Very large and small numbers fail to round-trip through CSS
        https://bugs.webkit.org/show_bug.cgi?id=20674
        
        New exports required to use DecimalNumber in WebCore.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2010-10-16  Kyusun Kim  <maniagoon@company100.net>

        Reviewed by Alexey Proskuryakov.

        Add using declarations for currentTimeMS() and parseDateFromNullTerminatedCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=47758

        * wtf/CurrentTime.h:
        * wtf/DateMath.h:

2010-10-16  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename StringHasherFunctions.h to StringHasher.h
        https://bugs.webkit.org/show_bug.cgi?id=47200

        Now StringHasherFunctions.h only contains the StringHasher class, so rename it to the correct name.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/StringHashFunctions.h: Removed.
        * wtf/StringHasher.h: Copied from JavaScriptCore/wtf/StringHashFunctions.h.
        * wtf/text/StringHash.h:
        * wtf/text/StringImpl.h:

2010-10-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Automatic Semicolon Insertion incorrectly inserts semicolon after break, continue, and return followed by a newline
        https://bugs.webkit.org/show_bug.cgi?id=47762

        The old YACC parser depended on the lexer for some classes of semicolon insertion.
        The new parser handles ASI entirely on its own so when the lexer inserts a semicolon
        on its own the net result is a spurious semicolon in the input stream.  This can result
        in incorrect parsing in some cases:

        if (0)
            break
        ;else {}

        Would result in a parse failure as the output from the lexer is essentially

        if (0)
             break
        ;;else

        So the second semicolon is interpreted as a empty statement, which terminates the if,
        making the else an error.


        * parser/JSParser.cpp:
        (JSC::JSParser::parseThrowStatement):
          Parsing of throw statement was wrong, and only worked due to the weird behaviour
          in the lexer
        * parser/Lexer.cpp:
        (JSC::Lexer::lex):
          Remove bogus semicolon insertion from the newline handling

2010-10-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Replace some String::format() usages by StringConcatenate in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=47714

        * wtf/text/StringConcatenate.h: Add UChar specific StringTypeAdapter, to accept single UChars in makeString().

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

        Unreviewed build fix for Debug Leopard which is failng to compile after r69842.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::emitDisjunction):

2010-10-15  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        The parenthetical assertion checking isn't working in some cases with YARR
        Interpreter
        https://bugs.webkit.org/show_bug.cgi?id=46893

        Calculate the countToCheck value of a TypeParentheticalAssertion by
        subtracting the number of characters which follows
        a TypeParentheticalAssertion term with the number of characters which should
        be matched by terms which are contained
        in the TypeParentheticalAssertion term (minimumSize).

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::emitDisjunction):

2010-10-14  Nathan Vander Wilt  <nate@andyet.net>

        Reviewed by Darin Adler.

        Added parser for ECMAScript 5 standard date format, so Date.parse can handle RFC 3339 timestamps: https://bugs.webkit.org/show_bug.cgi?id=44632

        * runtime/DateConversion.cpp:
        (JSC::parseDate):
        * wtf/DateMath.cpp:
        (WTF::ymdhmsToSeconds):
        (WTF::parseES5DateFromNullTerminatedCharacters):
        * wtf/DateMath.h:

2010-10-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Gavin Barraclough.

        Replace lots of String::format() usages by StringConcatenate
        https://bugs.webkit.org/show_bug.cgi?id=47664

        Add StringTypeAdapter<char> to accept single characters for makeString().

        * wtf/text/StringConcatenate.h:
        (WTF::makeString):

2010-10-14  David Goodwin  <david_goodwin@apple.com>

        Reviewed by Darin Adler.

        need way to measure size of JITed ARM code
        https://bugs.webkit.org/show_bug.cgi?id=47121

        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::linkCode):
        (JSC::LinkBuffer::dumpLinkStats):
        (JSC::LinkBuffer::dumpCode):

2010-10-14  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        The backreference checking isn't working in some cases with YARR Interpreter
        https://bugs.webkit.org/show_bug.cgi?id=46904

        The Interpreter::matchBackReference() function returns true without matching
        when a backreference points to the same parentheses where it is.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::matchBackReference):

2010-10-14  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Text breaking is slow: enable ICU as an opt-in
        https://bugs.webkit.org/show_bug.cgi?id=40332

        Added a config flag that enables ICU as an opt-in instead of the Qt specific code.
        Because of the inclusion of ICU headers, some explicit casting was necessary in UnicodeQt4.h

        * JavaScriptCore.pri:
        * wtf/unicode/qt4/UnicodeQt4.h:
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isSeparatorSpace):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::isLower):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::direction):
        (WTF::Unicode::category):

2010-10-14  Anton Faern  <anton@bladehawke.com>

        Reviewed by Csaba Osztrogonác.

        https://bugs.webkit.org/show_bug.cgi?id=47658
        NetBSD was not included in the WTF_PLATFORM_FOO to WTF_OS_FOO
        change.  This means that OS(NETBSD) is also undefined.

        * wtf/Platform.h: s/_PLATFORM_/_OS_/ for NetBSD

2010-10-13  David Goodwin  <david_goodwin@apple.com>

        Reviewed by Oliver Hunt.

        ARMv7 JIT should generated conditional branches when possible
        https://bugs.webkit.org/show_bug.cgi?id=47384

        Use different jump padding sizes for conditional and unconditional
        jumps (12 bytes and 10 bytes respectively). This allows the JIT to
        include the IT instruction as part of the conditional jump sequence
        which in turn allows it to optimize away the IT using an ARMv7 
        conditional branch instruction. Use 2-byte B(T1) and 4-byte B(T3) for
        conditional branches when displacement is in range. Also use IT/B(T4)
        for conditional branch when displacement does not fit in B(T3).

        For unconditional jump, instruction selection options are:
        B(T2), B(T4), MOVW/MOVT/BX. For conditional jump, instruction selection
        options are: B(T1), B(T3), IT/B(T4), ITTT/MOVW/MOVT/BX.

        * assembler/ARMv7Assembler.cpp:
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::JmpSrc::JmpSrc):
        (JSC::ARMv7Assembler::ifThenElse):
        (JSC::ARMv7Assembler::jumpSizeDelta):
        (JSC::ARMv7Assembler::canCompact):
        (JSC::ARMv7Assembler::computeJumpType):
        (JSC::ARMv7Assembler::link):
        (JSC::ARMv7Assembler::canBeJumpT1):
        (JSC::ARMv7Assembler::canBeJumpT3):
        (JSC::ARMv7Assembler::canBeJumpT4):
        (JSC::ARMv7Assembler::linkJumpT1):
        (JSC::ARMv7Assembler::linkJumpT3):
        (JSC::ARMv7Assembler::linkJumpT4):
        (JSC::ARMv7Assembler::linkConditionalJumpT4):
        (JSC::ARMv7Assembler::linkBX):
        (JSC::ARMv7Assembler::linkConditionalBX):
        (JSC::ARMv7Assembler::linkJumpAbsolute):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::linkCode):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::canCompact):
        (JSC::MacroAssemblerARMv7::computeJumpType):
        (JSC::MacroAssemblerARMv7::jumpSizeDelta):
        (JSC::MacroAssemblerARMv7::jump):
        (JSC::MacroAssemblerARMv7::nearCall):
        (JSC::MacroAssemblerARMv7::call):
        (JSC::MacroAssemblerARMv7::ret):
        (JSC::MacroAssemblerARMv7::tailRecursiveCall):
        (JSC::MacroAssemblerARMv7::makeJump):
        (JSC::MacroAssemblerARMv7::makeBranch):

2010-10-13  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Darin Adler.

        Don't depend on Windows on sched_yield and sched.h
        https://bugs.webkit.org/show_bug.cgi?id=45543

        sched.h is part of pthreads and sched_yield is implemented
        in pthreads-win32 as Sleep(0). This patch avoids a gratuitous
        dependency on pthreads-win32 in this file.

        * wtf/TCSpinLock.h:
        (TCMalloc_SlowLock):

2010-10-13  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Port unicode
        https://bugs.webkit.org/show_bug.cgi?id=45716

        Brew MP port uses only the subset of ICU library to reduce the binary size.
        Follow the WinCE's implementation.

        * wtf/Platform.h:
        * wtf/unicode/Unicode.h:
        * wtf/unicode/brew/UnicodeBrew.cpp: Added.
        (WTF::Unicode::toLower):
        (WTF::Unicode::toUpper):
        (WTF::Unicode::foldCase):
        (WTF::Unicode::isPrintableChar):
        (WTF::Unicode::isUpper):
        (WTF::Unicode::isLower):
        (WTF::Unicode::isDigit):
        (WTF::Unicode::isPunct):
        (WTF::Unicode::isAlphanumeric):
        (WTF::Unicode::toTitleCase):
        (WTF::Unicode::direction):
        (WTF::Unicode::category):
        (WTF::Unicode::decompositionType):
        (WTF::Unicode::combiningClass):
        (WTF::Unicode::mirroredChar):
        (WTF::Unicode::digitValue):
        (WTF::Unicode::isSpace):
        (WTF::Unicode::isLetter):
        * wtf/unicode/brew/UnicodeBrew.h: Added.
        (WTF::Unicode::isArabicChar):
        (WTF::Unicode::isSeparatorSpace):
        (WTF::Unicode::hasLineBreakingPropertyComplexContext):
        (WTF::Unicode::hasLineBreakingPropertyComplexContextOrIdeographic):
        (WTF::Unicode::umemcasecmp):

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        [WTFURL] Add URLQueryCanonicalizer
        https://bugs.webkit.org/show_bug.cgi?id=45088

        This class canonicalizes the query component of URLs.  The main tricky
        bit there is the convertCharset function, which I've moved to a
        templated dependency.  There'll likely be more about that in future
        patches.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/url/src/URLEscape.cpp: Added.
        * wtf/url/src/URLEscape.h: Added.
        (WTF::appendEscapedCharacter):
        * wtf/url/src/URLQueryCanonicalizer.h: Added.
        (WTF::URLQueryCanonicalizer::canonicalize):
        (WTF::URLQueryCanonicalizer::isAllASCII):
        (WTF::URLQueryCanonicalizer::appendRaw8BitQueryString):
        (WTF::URLQueryCanonicalizer::convertToQueryEncoding):

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

        Reviewed by Oliver Hunt.

        Bug 43987 - Downloading using XHR is much slower than before
        Change StringBuilder to use overcapacity in a StringImpl, rather than a Vector.
        Fundamentally this should be the same (copies current contents to expand capacity,
        rather than using a rope), but this approach allows the intermadiate state of the
        String to be inspected in the buffer without copying to resolve.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendQuotedString):
        (JSC::Stringifier::Holder::appendNextProperty):
            Renamed StringBuilder::size() -> length() (to match other String types).

        * runtime/UStringBuilder.h:
        (JSC::UStringBuilder::append):
        (JSC::UStringBuilder::toUString):
            Update for changes in parent class, can just 'using' the append methods.

        * wtf/text/StringBuilder.cpp: Added.
        (WTF::StringBuilder::reifyString):
        (WTF::StringBuilder::resize):
        (WTF::StringBuilder::reserveCapacity):
        (WTF::StringBuilder::allocateBuffer):
        (WTF::StringBuilder::appendUninitialized):
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::shrinkToFit):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::StringBuilder):
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::toString):
        (WTF::StringBuilder::toStringPreserveCapacity):
        (WTF::StringBuilder::length):
        (WTF::StringBuilder::isEmpty):
        (WTF::StringBuilder::operator[]):
        (WTF::StringBuilder::clear):
            Class updated to use overcapacity in a StringImpl, rather than a Vector.

        * Android.mk:
        * Android.v8.wtf.mk:
        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/wtf.pri:

2010-10-13  Adam Roben  <aroben@apple.com>

        Export tryFastRealloc for WebKit2's benefit

        Rubber-stamped by Anders Carlsson.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added
        tryFastRealloc. Removed RegExpObject::info, which is now exported via
        JS_EXPORTDATA.

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        [WTFURL] Add a mechanism for classifying types of characters
        https://bugs.webkit.org/show_bug.cgi?id=45085

        Various characters have different escaping rules depending on where
        they are in URLs.  This patch adds a table containing that information.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/url/src/URLCharacterTypes.cpp: Added.
        * wtf/url/src/URLCharacterTypes.h: Added.
        (WTF::URLCharacterTypes::isQueryChar):
        (WTF::URLCharacterTypes::isIPv4Char):
        (WTF::URLCharacterTypes::isHexChar):
        (WTF::URLCharacterTypes::isCharOfType):

2010-10-13  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Csaba Osztrogonác.

        Missing parameters for bytecode dump of next_pname
        https://bugs.webkit.org/show_bug.cgi?id=47590

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump): add missing parameters to the dump.

2010-10-13  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Add wtf/text/StringConcatenate
        https://bugs.webkit.org/show_bug.cgi?id=47584

        Move runtime/StringConcatenate.h to wtf/text, make it work for Strings too.
        Add a special runtime/UStringConcatenate.h class that inherits from StringConcatenate, and extends it for use with UString.
        Exactly the same design that has been followed while refactoring StringBuilder.

        The UString variants can all be removed as soon as WTF::String & JSC::UString converge.

        * GNUmakefile.am: Add wtf/text/StringConcatenate.h and runtime/UStringConcatenate.h.
        * JavaScriptCore.gypi: Ditto.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * bytecode/CodeBlock.cpp: s/makeString/makeUString/
        (JSC::escapeQuotes):
        (JSC::valueToSourceString):
        (JSC::constantName):
        (JSC::idName):
        (JSC::CodeBlock::registerName):
        (JSC::regexpToSourceString):
        (JSC::regexpName):
        * bytecompiler/NodesCodegen.cpp: Ditto.
        (JSC::substitute):
        * profiler/Profiler.cpp: Ditto.
        (JSC::Profiler::createCallIdentifier):
        * runtime/ExceptionHelpers.cpp: Ditto.
        (JSC::createUndefinedVariableError):
        (JSC::createErrorMessage):
        (JSC::createInvalidParamError):
        * runtime/FunctionConstructor.cpp: Ditto.
        (JSC::constructFunction):
        * runtime/FunctionPrototype.cpp: Ditto.
        (JSC::insertSemicolonIfNeeded):
        * runtime/JSONObject.cpp: Ditto.
        (JSC::Stringifier::indent):
        * runtime/JSStringBuilder.h:
        (JSC::jsMakeNontrivialString):
        * runtime/RegExpConstructor.cpp: Ditto.
        (JSC::constructRegExp):
        * runtime/RegExpObject.cpp: Ditto.
        (JSC::RegExpObject::match):
        * runtime/RegExpPrototype.cpp: Ditto.
        (JSC::regExpProtoFuncCompile):
        * runtime/StringConcatenate.h: Removed.
        * runtime/UStringConcatenate.h: Added. Only contains the StringTypeAdapter<JSC::UString> code and the makeUString variants, the rest lives in wtf/text/StringConcatenate.h
        (JSC::makeUString):
        * wtf/text/StringConcatenate.h: Copied from runtime/StringConcatenate.h.
        (WTF::makeString):

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

        Windows build fix.

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

2010-10-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Gavin Barraclough.

        Unify JSC::StringBuilder & WebCore::StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=47538

        Move runtime/StringBuilder.h to wtf/text/StringBuilder.h. Rename build() to toString() and return a WTF::String().
        Move the append(const JSC::UString&) method into runtime/UStringBuilder.h.
        UStringBuilder inherits from StringBuilder.h and adds append(const JSC::UString&) and UString toUString() functionality.

        No new code, just move code around.

        * GNUmakefile.am: Add wtf/text/StringBuilder.h / runtime/UStringBuilder.h. Remove runtime/StringBuilder.h.
        * JavaScriptCore.gypi: Ditto.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::paramString): Use UStringBuilder, instead of StringBuilder. Rename build() -> toUString().
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction): Ditto.
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncUnescape): Ditto.
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::stringify): Ditto.
        (JSC::Stringifier::appendQuotedString): Ditto.
        (JSC::Stringifier::appendStringifiedValue): Ditto.
        (JSC::Stringifier::startNewLine): Ditto.
        (JSC::Stringifier::Holder::appendNextProperty): Ditto.
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::Lexer::lexString): Ditto.
        * runtime/NumberPrototype.cpp: Remove unneeded JSStringBuilder.h / StringBuilder.h include.
        * runtime/StringBuilder.h: Removed.
        * runtime/UStringBuilder.h: Added. Inherits from WTF::StringBuilder, extending it by two methods.
        (JSC::UStringBuilder::append): append(const JSC::UString&)
        (JSC::UStringBuilder::toUString):
        * wtf/text/StringBuilder.h: Copied from runtime/StringBuilder.h. Move JSC::UString parts into runtime/UStringBuilder.h
        (WTF::StringBuilder::append): Renamed m_buffer to buffer everywhere.
        (WTF::StringBuilder::isEmpty): Ditto (+ constify method). 
        (WTF::StringBuilder::reserveCapacity): Ditto.
        (WTF::StringBuilder::resize): Ditto.
        (WTF::StringBuilder::size): Ditto.
        (WTF::StringBuilder::operator[]): Ditto.
        (WTF::StringBuilder::toString): Ditto (+ renamed from build()). Returns a String, not an UString. The old build() method is now named toUString() and lives in UStringBuilder.

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

        Reviewed by Oliver Hunt.

        Cleaned up the processing of replacements after regular expression
        processing, especially the case where there wasn't a match.
        Changed to use empty strings instead of computing a zero length sub
        string.
        https://bugs.webkit.org/show_bug.cgi?id=47506

        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstringsWithSeparators):
        (JSC::stringProtoFuncReplace):

2010-10-11  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed.

        Clang build fix after r69472.
        https://bugs.webkit.org/show_bug.cgi?id=46523

        * wtf/text/StringHash.h:

2010-10-11  Oliver Hunt  <oliver@apple.com>

        Undo last minute change to 32bit build.

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_convert_this_strict):

2010-10-11  Brian Weinstein  <bweinstein@apple.com>

        Build fix for Windows. Add a necessary export from r69516.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-10-11  Oliver Hunt  <oliver@apple.com>

        Fix interpreter build -- was broken by incorrect merge.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

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

        Reviewed by Gavin Barraclough.

        [ES5] Implement strict mode
        https://bugs.webkit.org/show_bug.cgi?id=10701

        Initial strict mode implementation.  This is the simplest
        implementation that could possibly work and adds (hopefully)
        all of the restrictions required by strict mode.  There are
        a number of inefficiencies, especially in the handling of
        arguments and eval as smart implementations would make this
        patch more complicated.  

        The SyntaxChecker AST builder has become somewhat more complex
        as strict mode does require more parse tree information to
        validate the syntax.

        Summary of major changes to the parser:
            * We track when we enter strict mode (this may come as a surprise)
            * Strict mode actually requires a degree of AST knowledge to validate
              so the SyntaxChecker now produces values that can be used to distinguish
              "node" types.
            * We now track variables that are written to.  We do this to
              statically identify writes to global properties that don't exist
              and abort at that point.  This should actually make it possible
              to optimise some other cases in the future but for now it's
              purely for validity checking.  Currently writes are only tracked
              in strict mode code.
            * Labels are now tracked as it is now a syntax error to jump to a label
              that does not exist (or to use break, continue, or return in a context
              where they would be invalid).

        Runtime changes:
            * In order to get correct hanlding of the Arguments object all
              strict mode functions that reference arguments create and tearoff
              the arguments object on entry.  This is not strictly necessary
              but was the least work necessary to get the correct behaviour.
            * PutPropertySlot now tracks whether it is being used for a strict
              mode write, and if so Object::put will throw when a write can't be
              completed.
            * StrictEvalActivation was added as an "activation" object for strict
              mode eval (so that strict eval does not introduce new variables into
              the containing scope).

        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::isStrictMode):
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::createArgumentsIfNecessary):
        (JSC::BytecodeGenerator::emitReturn):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::isStrictMode):
        (JSC::BytecodeGenerator::makeFunction):
        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_convert_this_strict):
        (JSC::JIT::emitSlow_op_convert_this_strict):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_get_pnames):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createFunctionBody):
        (JSC::ASTBuilder::isResolve):
        * parser/JSParser.cpp:
        (JSC::JSParser::next):
        (JSC::JSParser::startLoop):
        (JSC::JSParser::endLoop):
        (JSC::JSParser::startSwitch):
        (JSC::JSParser::endSwitch):
        (JSC::JSParser::setStrictMode):
        (JSC::JSParser::strictMode):
        (JSC::JSParser::isValidStrictMode):
        (JSC::JSParser::declareParameter):
        (JSC::JSParser::breakIsValid):
        (JSC::JSParser::pushLabel):
        (JSC::JSParser::popLabel):
        (JSC::JSParser::hasLabel):
        (JSC::JSParser::DepthManager::DepthManager):
        (JSC::JSParser::DepthManager::~DepthManager):
        (JSC::JSParser::Scope::Scope):
        (JSC::JSParser::Scope::startSwitch):
        (JSC::JSParser::Scope::endSwitch):
        (JSC::JSParser::Scope::startLoop):
        (JSC::JSParser::Scope::endLoop):
        (JSC::JSParser::Scope::inLoop):
        (JSC::JSParser::Scope::breakIsValid):
        (JSC::JSParser::Scope::pushLabel):
        (JSC::JSParser::Scope::popLabel):
        (JSC::JSParser::Scope::hasLabel):
        (JSC::JSParser::Scope::isFunction):
        (JSC::JSParser::Scope::declareVariable):
        (JSC::JSParser::Scope::declareWrite):
        (JSC::JSParser::Scope::deleteProperty):
        (JSC::JSParser::Scope::declareParameter):
        (JSC::JSParser::Scope::setNeedsFullActivation):
        (JSC::JSParser::Scope::collectFreeVariables):
        (JSC::JSParser::Scope::getUncapturedWrittenVariables):
        (JSC::JSParser::Scope::getDeletedVariables):
        (JSC::JSParser::Scope::setStrictMode):
        (JSC::JSParser::Scope::strictMode):
        (JSC::JSParser::Scope::isValidStrictMode):
        (JSC::JSParser::pushScope):
        (JSC::JSParser::popScope):
        (JSC::JSParser::declareVariable):
        (JSC::JSParser::declareWrite):
        (JSC::JSParser::deleteProperty):
        (JSC::jsParse):
        (JSC::JSParser::JSParser):
        (JSC::JSParser::parseProgram):
        (JSC::JSParser::parseSourceElements):
        (JSC::JSParser::parseDoWhileStatement):
        (JSC::JSParser::parseWhileStatement):
        (JSC::JSParser::parseVarDeclarationList):
        (JSC::JSParser::parseConstDeclarationList):
        (JSC::JSParser::parseForStatement):
        (JSC::JSParser::parseBreakStatement):
        (JSC::JSParser::parseContinueStatement):
        (JSC::JSParser::parseReturnStatement):
        (JSC::JSParser::parseWithStatement):
        (JSC::JSParser::parseSwitchStatement):
        (JSC::JSParser::parseSwitchClauses):
        (JSC::JSParser::parseSwitchDefaultClause):
        (JSC::JSParser::parseTryStatement):
        (JSC::JSParser::parseBlockStatement):
        (JSC::JSParser::parseStatement):
        (JSC::JSParser::parseFormalParameters):
        (JSC::JSParser::parseFunctionBody):
        (JSC::JSParser::parseFunctionInfo):
        (JSC::JSParser::parseFunctionDeclaration):
        (JSC::JSParser::parseExpressionOrLabelStatement):
        (JSC::JSParser::parseIfStatement):
        (JSC::JSParser::parseExpression):
        (JSC::JSParser::parseAssignmentExpression):
        (JSC::JSParser::parseConditionalExpression):
        (JSC::JSParser::parseBinaryExpression):
        (JSC::JSParser::parseStrictObjectLiteral):
        (JSC::JSParser::parsePrimaryExpression):
        (JSC::JSParser::parseMemberExpression):
        (JSC::JSParser::parseUnaryExpression):
        * parser/JSParser.h:
        * parser/Lexer.cpp:
        (JSC::Lexer::parseString):
        (JSC::Lexer::lex):
        * parser/Lexer.h:
        (JSC::Lexer::isReparsing):
        * parser/Nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        (JSC::FunctionBodyNode::FunctionBodyNode):
        (JSC::FunctionBodyNode::create):
        * parser/Nodes.h:
        (JSC::ScopeNode::isStrictMode):
        * parser/Parser.cpp:
        (JSC::Parser::parse):
        * parser/Parser.h:
        (JSC::Parser::parse):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::SyntaxChecker):
        (JSC::SyntaxChecker::makeFunctionCallNode):
        (JSC::SyntaxChecker::appendToComma):
        (JSC::SyntaxChecker::createCommaExpr):
        (JSC::SyntaxChecker::makeAssignNode):
        (JSC::SyntaxChecker::makePrefixNode):
        (JSC::SyntaxChecker::makePostfixNode):
        (JSC::SyntaxChecker::makeTypeOfNode):
        (JSC::SyntaxChecker::makeDeleteNode):
        (JSC::SyntaxChecker::makeNegateNode):
        (JSC::SyntaxChecker::makeBitwiseNotNode):
        (JSC::SyntaxChecker::createLogicalNot):
        (JSC::SyntaxChecker::createUnaryPlus):
        (JSC::SyntaxChecker::createVoid):
        (JSC::SyntaxChecker::thisExpr):
        (JSC::SyntaxChecker::createResolve):
        (JSC::SyntaxChecker::createObjectLiteral):
        (JSC::SyntaxChecker::createArray):
        (JSC::SyntaxChecker::createNumberExpr):
        (JSC::SyntaxChecker::createString):
        (JSC::SyntaxChecker::createBoolean):
        (JSC::SyntaxChecker::createNull):
        (JSC::SyntaxChecker::createBracketAccess):
        (JSC::SyntaxChecker::createDotAccess):
        (JSC::SyntaxChecker::createRegex):
        (JSC::SyntaxChecker::createNewExpr):
        (JSC::SyntaxChecker::createConditionalExpr):
        (JSC::SyntaxChecker::createAssignResolve):
        (JSC::SyntaxChecker::createFunctionExpr):
        (JSC::SyntaxChecker::createFunctionBody):
        (JSC::SyntaxChecker::appendBinaryExpressionInfo):
        (JSC::SyntaxChecker::operatorStackPop):
        * runtime/Arguments.cpp:
        (JSC::Arguments::createStrictModeCallerIfNecessary):
        (JSC::Arguments::createStrictModeCalleeIfNecessary):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        (JSC::Arguments::deleteProperty):
        * runtime/Arguments.h:
        (JSC::Arguments::Arguments):
        * runtime/CommonIdentifiers.cpp:
        (JSC::CommonIdentifiers::CommonIdentifiers):
        * runtime/CommonIdentifiers.h:
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
        (JSC::StrictModeTypeErrorFunction::constructThrowTypeError):
        (JSC::StrictModeTypeErrorFunction::getConstructData):
        (JSC::StrictModeTypeErrorFunction::callThrowTypeError):
        (JSC::StrictModeTypeErrorFunction::getCallData):
        (JSC::createTypeErrorFunction):
        * runtime/Error.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::ProgramExecutable::ProgramExecutable):
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::checkSyntax):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::EvalExecutable::reparseExceptionInfo):
        (JSC::FunctionExecutable::fromGlobalCode):
        (JSC::ProgramExecutable::reparseExceptionInfo):
        * runtime/Executable.h:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::ScriptExecutable::isStrictMode):
        (JSC::EvalExecutable::create):
        (JSC::FunctionExecutable::create):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::toStrictThisObject):
        * runtime/JSActivation.h:
        * runtime/JSFunction.cpp:
        (JSC::createDescriptorForThrowingProperty):
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::getOwnPropertyDescriptor):
        (JSC::JSFunction::put):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::internalFunctionStructure):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC::JSObject::toStrictThisObject):
        (JSC::throwTypeError):
        * runtime/JSObject.h:
        (JSC::JSObject::isStrictModeFunction):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirect):
        (JSC::JSValue::putDirect):
        (JSC::JSValue::toStrictThisObject):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::toStrictThisObject):
        * runtime/JSStaticScopeObject.h:
        * runtime/JSValue.h:
        * runtime/JSZombie.h:
        (JSC::JSZombie::toStrictThisObject):
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::PutPropertySlot):
        (JSC::PutPropertySlot::isStrictMode):
        * runtime/StrictEvalActivation.cpp: Added.
        (JSC::StrictEvalActivation::StrictEvalActivation):
        (JSC::StrictEvalActivation::deleteProperty):
        (JSC::StrictEvalActivation::toThisObject):
        (JSC::StrictEvalActivation::toStrictThisObject):
        * runtime/StrictEvalActivation.h: Added.

2010-10-10  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed.

        Windows build fix after r69472.

        * wtf/text/StringHash.h:
        (WTF::CaseFoldingHash::hash):

2010-10-10  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Use WTF::StringHasher in WTF::CaseFoldingHash
        https://bugs.webkit.org/show_bug.cgi?id=46523

        * wtf/text/StringHash.h:
        (WTF::CaseFoldingHash::foldCase):
        (WTF::CaseFoldingHash::hash):

2010-10-09  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=47445
        Remove unused function WTFThreadData::initializeIdentifierTable()

        * wtf/WTFThreadData.h:

2010-10-08  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Added check to start of subexpression being positive before using
        subexpression in replacement.
        https://bugs.webkit.org/show_bug.cgi?id=47324

        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferencesSlow):

2010-10-08  Chris Evans  <cevans@google.com>

        Reviewed by David Levin.

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

        Use unsigned consistently to check for max StringImpl length.
        Add a few integer overflow checks.
        Uses the existing paradigm of CRASH() when we can't reasonably handle a crazily large request.

        * wtf/text/WTFString.cpp:
        * wtf/text/StringImpl.h:
        * wtf/text/StringImpl.cpp:
        Better use of size_t vs. unsigned; check for integer overflows.

2010-10-07  David Goodwin  <david_goodwin@apple.com>

        Reviewed by Oliver Hunt.

        ARM JIT generates undefined operations due to partially uninitialized ShiftTypeAndAmount
        https://bugs.webkit.org/show_bug.cgi?id=47356

        * assembler/ARMv7Assembler.h:

2010-10-06  Chris Evans  <cevans@google.com>

        Reviewed by David Levin.

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

        Use size_t consistently in CString, to prevent theoretical trouble
        with > 4GB strings on 64-bit platforms.

        * wtf/text/CString.h:
        * wtf/text/CString.cpp:
        Use size_t for string lengths.
        * wtf/MD5.cpp:
        (WTF::expectMD5): use suitable format string + cast for size_t.
        * JavaScriptCore.exp:
        Update symbol name.

2010-10-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Start cleaning up Arguments.h
        https://bugs.webkit.org/show_bug.cgi?id=47304

        * wtf/TypeTraits.h:
        * wtf/TypeTraits.cpp:
        Add RemoveReference type trait.

2010-10-06  Rafael Antognolli  <antognolli@profusion.mobi>

        Unreviewed build fix.

        [EFL] Build fix for glib support.
        https://bugs.webkit.org/show_bug.cgi?id=47221

        If compiling with GLib support enabled, we also need to link wtf against
        glib library.

        * wtf/CMakeListsEfl.txt:

2010-10-05  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Gavin Barraclough.

        [BREWMP] Port ExecutableAllocator::cacheFlush to enable ARM JIT
        https://bugs.webkit.org/show_bug.cgi?id=47117

        Use IMemCache1 to flush data cache and invalidate instruction cache.

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

2010-10-05  Leandro Pereira  <leandro@profusion.mobi>

        Unreviewed. Build fix.

        Moved "jsc" directory to "shell", so that the name does not clash with the
        JavaScriptCore shell in some build systems.
        http://webkit.org/b/47049

        * CMakeLists.txt: Changed reference from "jsc" to "shell".
        * jsc: Removed.
        * jsc/CMakeLists.txt: Removed.
        * jsc/CMakeListsEfl.txt: Removed.
        * shell: Copied from JavaScriptCore/jsc.

2010-10-05  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Use PlatformRefPtr in randomNumber
        https://bugs.webkit.org/show_bug.cgi?id=46989

        Use PlatformRefPtr to free memory automatically.

        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):

2010-10-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(r68338): JavaScript error on PowerPC only (crashes on Interpreter built for x86_64)
        https://bugs.webkit.org/show_bug.cgi?id=46690

        Use the correct register value when initialising the arguments
        object in the interpreter.  This is covered by existing tests.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2010-10-04  David Goodwin  <david_goodwin@apple.com>

        Reviewed by Oliver Hunt.

        ARMv7 JIT should take advantage of 2-byte branches to reduce code size
        https://bugs.webkit.org/show_bug.cgi?id=47007

        * assembler/ARMv7Assembler.cpp:
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::computeJumpType):
        (JSC::ARMv7Assembler::link):
        (JSC::ARMv7Assembler::canBeJumpT2):
        (JSC::ARMv7Assembler::canBeJumpT4):
        (JSC::ARMv7Assembler::linkBX):
        (JSC::ARMv7Assembler::linkJumpT4):
        (JSC::ARMv7Assembler::linkJumpT2):
        (JSC::ARMv7Assembler::linkJumpAbsolute):

2010-10-04  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Use fast malloc for WebKit EFL
        https://bugs.webkit.org/show_bug.cgi?id=46691

        Use fast malloc for WebKit EFL because the fast malloc is to allocate
        memory quickly.

        * wtf/CMakeListsEfl.txt:

2010-10-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Lazily create activation objects
        https://bugs.webkit.org/show_bug.cgi?id=47107

        Make it possible to lazily create the activation object
        for a function that needs one.  This allows us to reduce
        the overhead of entering a function that may require
        an activation in some cases, but not always.

        This does make exception handling a little more complex as
        it's now necessary to verify that a callframes activation
        has been created, and create it if not, in all of the
        paths used in exception handling.

        We also need to add logic to check for the existence of
        the activation in the scoped_var opcodes, as well as
        op_ret, op_ret_object_or_this and op_tearoff_activation
        so that we can avoid creating an activation unnecesarily
        on function exit. 

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
        (JSC::CodeBlock::createActivation):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::setActivationRegister):
        (JSC::CodeBlock::activationRegister):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitNewFunctionInternal):
        (JSC::BytecodeGenerator::emitNewFunctionExpression):
        (JSC::BytecodeGenerator::createActivationIfNecessary):
        * bytecompiler/BytecodeGenerator.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::resolveBase):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_ret_object_or_this):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_end):
        (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_ret_object_or_this):
        (JSC::JIT::emit_op_create_activation):
        (JSC::JIT::emit_op_resolve_global_dynamic):
        * jit/JITOpcodes32_64.cpp:
        (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_create_activation):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

2010-10-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Remove ENABLE_SANDBOX
        https://bugs.webkit.org/show_bug.cgi?id=47032

        * Configurations/FeatureDefines.xcconfig:

2010-10-01  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Geoffrey Garen.
        Specify ALWAYS_INLINE at function declaration not function definition
        https://bugs.webkit.org/show_bug.cgi?id=46960

        For functions defined with ALWAYS_INLINE, add the attribute to the declaration as well.

        * bytecompiler/BytecodeGenerator.h:
        * wtf/FastMalloc.cpp:

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

        Unreviewed.

        [BREWMP] Change Collector BLOCK_SIZE to 64KB
        https://bugs.webkit.org/show_bug.cgi?id=46436

        Lower BLOCK_SIZE to 64KB because Brew MP runs on low end devices.

        * runtime/Collector.h:

2010-10-01  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Stack overflow on symbian platform.
        https://bugs.webkit.org/show_bug.cgi?id=40598
        
        Move big allocation in arrayProtoFuncToString from stack to heap.
        JSC::arrayProtoFuncToString function can be called recursivly and
        1K allocation on stack cahse stack overflow.
        Can be useful for other platforms with limited stack size.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):

2010-09-30  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Add a factory function which returns an instance wrapped in PlatformRefPtr.
        https://bugs.webkit.org/show_bug.cgi?id=46373

        A Brew MP instance has reference count 1 when it is created, so call adoptPlatformRef
        to wrap the instance in PlatformRefPtr.

        * wtf/brew/ShellBrew.h:
        (WTF::createRefPtrInstance):

2010-09-30  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Port PlatformRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=46370

        Implement refPlatformPtr and derefPlatformPtr to use PlatformRefPtr in Brew MP.

        * wtf/brew/RefPtrBrew.h: Added.
        (WTF::refPlatformPtr):
        (WTF::derefPlatformPtr):

2010-09-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add additional checks to StringBuffer.
        <rdar://problem/7756381>

        * wtf/text/StringBuffer.h:
        (WTF::StringBuffer::StringBuffer):
        (WTF::StringBuffer::resize):

2010-09-30  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Make 2D accelerated canvas rendering build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=46007
        
        Added ACCELERATED_2D_CANVAS to FeatureDefines

        * Configurations/FeatureDefines.xcconfig:

2010-09-30  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] wxMSW build fix. Make sure we copy the compiler flags and remove exception handling from
        the copy so as not to alter global settings.

        * wscript:

2010-09-30  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        The case-insensitivity backreference checking isn't working with YARR
        Interpreter
        https://bugs.webkit.org/show_bug.cgi?id=46882

        Add ignorecase checking to the Interpreter::tryConsumeBackReference() function.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::tryConsumeBackReference):

2010-09-30  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Andreas Kling.

        [BREWMP] Leave initializeRandomNumberGenerator empty.
        https://bugs.webkit.org/show_bug.cgi?id=46851

        On Brew MP, AEECLSID_RANDOM initializes itself.

        * wtf/RandomNumberSeed.h:
        (WTF::initializeRandomNumberGenerator):

2010-09-30  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove unnecessary cacheFlush calls from Thumb-2
        https://bugs.webkit.org/show_bug.cgi?id=46702

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::relinkCall):
        (JSC::ARMv7Assembler::repatchInt32):
        (JSC::ARMv7Assembler::repatchPointer):

2010-09-29  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed.

        Next try to fix cygwin build.

        * wtf/Assertions.cpp:

2010-09-29  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed.

        Build fix for cygwin #2. It's OS(WINDOWS), not OS(WIN).

        * wtf/Assertions.cpp:

2010-09-29  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed.

        Build fix for cygwin.

        * wtf/Assertions.cpp:

2010-09-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WINCE] Buildfix for Assertions.cpp after r68511.
        https://bugs.webkit.org/show_bug.cgi?id=46807

        Some, but not all WinCE environments have support for IsDebuggerPresent().
        Add HAVE(ISDEBUGGERPRESENT) to make this a build option.
        HAVE(ISDEBUGGERPRESENT) will be 1 for all OS(WIN) by default.

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

2010-09-29  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        JSC compile fails on 32bit platform when Regexp Tracing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=46713

        Fix the cast of pointer in regexp tracing to avoid the warning.

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

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

        Reviewed by Sam Weinig.

        Begin hooking up painting in the plug-in process
        https://bugs.webkit.org/show_bug.cgi?id=46766

        * JavaScriptCore.exp:
        Add tryFastRealloc, used by WebKit2.

2010-09-28  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        Guard GRefPtr/GOwnPtr files with ENABLE(GLIB_SUPPORT)
        https://bugs.webkit.org/show_bug.cgi?id=46721

        Enable GOwnPtr/GRefPtr build only if glib support has been
        explicitly enabled using the WTF_ENABLE_GLIB_SUPPORT macro.

        * wtf/gobject/GOwnPtr.cpp:
        * wtf/gobject/GOwnPtr.h:
        * wtf/gobject/GRefPtr.cpp:
        * wtf/gobject/GRefPtr.h:

2010-09-28  İsmail Dönmez  <ismail@namtrac.org>

        Reviewed by Andreas Kling.

        Test for WINCE instead of WINCEBASIC, compiler always defines WINCE.
        Remove reference to unexisting path JavaScriptCore/os-wince.

        * JavaScriptCore.pri:
        * wtf/Assertions.cpp:

2010-09-27  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Changed the initialization of JSArray objects to have space for 
        3 elements for the constructor that takes a ArgList argument.
        This improves v8-deltablue performance by about 2.8% by reducing 
        the number of realloc() calls.
        https://bugs.webkit.org/show_bug.cgi?id=46664

        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):

2010-09-27  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        Bug 46680 - Inlining string concatenation can regress interpreter performance
        <rdar://problem/8362752> REGRESSION: ~6.4% sunspider regression in interpreter
        Do not inline calls to string concatenation in the interpret loop.

        * interpreter/Interpreter.cpp:
        (JSC::concatenateStrings):
        (JSC::Interpreter::privateExecute):

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

        Fix thinko.

        * runtime/JSCell.h:

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

        Reviewed by Adam Roben.

        Try to fix Windows build.

        * runtime/JSCell.h:
        (JSC::MSVCBugWorkaround::MSVCBugWorkaround):
        (JSC::MSVCBugWorkaround::~MSVCBugWorkaround):

2010-09-27  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler.

        Add operator == for AtomicString and Vector<Uchar>
        https://bugs.webkit.org/show_bug.cgi?id=46509

        * JavaScriptCore.exp:
        * wtf/text/AtomicString.cpp:
        (WTF::operator==):
        * wtf/text/AtomicString.h:
        (WTF::operator==):
        (WTF::operator!=):

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

        Try to fix the Windows build.

        * wtf/Noncopyable.h:

2010-09-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Alexey Proskuryakov and Adam Barth.

        Add WTF_MAKE_NONCOPYABLE macro
        https://bugs.webkit.org/show_bug.cgi?id=46589

        Going forward, we'd like to get rid of the Noncopyable and FastAllocBase classes. The
        reason for this is that the Itanium C++ ABI states that no empty classes of the same type
        can be laid out at the same offset in the class. This can result in objects getting larger
        which leads to memory regressions. (One example of this is the String class which grew by
        sizeof(void*) when both its base class and its first member variable inherited indirectly
        from FastAllocBase).

        * wtf/Noncopyable.h:
        Add a WTF_MAKE_NONCOPYABLE macro and get rid of NoncopyableCustomAllocated.
        
        * runtime/JSCell.h:
        * wtf/RefCounted.h:
        Don't inherit from NoncopyableCustomAllocated. Instead, use WTF_MAKE_NONCOPYABLE.

2010-09-27  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] use ENABLE(GLIB_SUPPORT)
        https://bugs.webkit.org/show_bug.cgi?id=46630

        * wtf/Platform.h: Include GTypedefs.h only if glib support
        is explicitly enabled.

2010-09-25  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        Reviewed by Adam Barth.

        jsc: Document the strcat opcode.
        https://bugs.webkit.org/show_bug.cgi?id=46571

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2010-09-21  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        Reviewed by Adam Barth.

        make-bytecode-docs.pl: Add a comment to the generated HTML
        https://bugs.webkit.org/show_bug.cgi?id=46570

        Generate an HTML Comment that this file was generated from
        Interpreter.cpp with the make-bytecode-docs.pl script.

        * docs/make-bytecode-docs.pl:

2010-09-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Remove WTF::stringHash functions
        https://bugs.webkit.org/show_bug.cgi?id=46520

        Since r68289 the stringHash functions are only wrappers around StringHasher::createHash.
        So use StringHasher::createHash directly and remove stringHash.

        * wtf/StringHashFunctions.h:
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::computeHash): Use WTF::StringHasher::createHash directly.

2010-09-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Add WTF::StringHasher::createBlobHash
        https://bugs.webkit.org/show_bug.cgi?id=46514

        Add this function for hashing FormElementKey and QualifiedNameComponents.

        * wtf/StringHashFunctions.h:
        (WTF::StringHasher::createBlobHash):

2010-09-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION (r68289): Assertion failure in StringHasher::addCharacter() (ch != invalidCharacterValue)
        running websocket/tests/bad-sub-protocol-non-ascii.html
        https://bugs.webkit.org/show_bug.cgi?id=46553

        Because we use StringHasher for binary data too, so the check for invalid unicode input is wrong.
        Add an additional member variable to indicate if we have an pending character
        instead of only using an invalid character for this purpose.

        * wtf/StringHashFunctions.h:
        (WTF::StringHasher::StringHasher):
        (WTF::StringHasher::addCharacters):
        (WTF::StringHasher::addCharacter):
        (WTF::StringHasher::hash):

2010-09-26  Mark Hahnenberg  <mhahnenb@gmail.com>

        Reviewed by Oliver Hunt.

        valueOf called in wrong order in atan2 and date constructors.
        https://bugs.webkit.org/show_bug.cgi?id=26978

        Fixed the bug where the arguments to atan2 were being evaluated 
        out of order.

        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncATan2):

2010-09-26  Mark Hahnenberg  <mhahnenb@gmail.com>

        Reviewed by Oliver Hunt.

        valueOf called in wrong order in atan2 and date constructors.
        https://bugs.webkit.org/show_bug.cgi?id=26978

        Fixed the issue where the parameters to the Date constructor
        were being evaluated to numbers more than once.

        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        (JSC::dateUTC):

2010-09-25  Oliver Hunt  <oliver@apple.com>

        Fix various builds

        Relearning the lesson that last minute changes are bad.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetArgumentsLength):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitSlow_op_get_argument_by_val):

2010-09-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Cameron Zwarich.

        Avoid constructing arguments object when accessing length and index properties
        https://bugs.webkit.org/show_bug.cgi?id=46572

        Add opcodes to read argument length and properties, and then implement them.
        Much like other lazy opcodes these opcodes take a fast path when the arguments
        object has not been instantiated, and fall back on generic access mechanisms
        if they are acting on an instantiated object.

        3% win on v8-earleyboyer, no change elsewhere.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetArgumentsLength):
        (JSC::BytecodeGenerator::emitGetArgumentByVal):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BracketAccessorNode::emitBytecode):
        (JSC::DotAccessorNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_get_arguments_length):
        (JSC::JIT::emitSlow_op_get_arguments_length):
        (JSC::JIT::emit_op_get_argument_by_val):
        (JSC::JIT::emitSlow_op_get_argument_by_val):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_get_arguments_length):
        (JSC::JIT::emitSlow_op_get_arguments_length):
        (JSC::JIT::emit_op_get_argument_by_val):
        (JSC::JIT::emitSlow_op_get_argument_by_val):

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

        Unreviewed.

        Fix typo in StringHasher class
        https://bugs.webkit.org/show_bug.cgi?id=45970

        * wtf/StringHashFunctions.h:
        (WTF::StringHasher::createHash):

2010-09-24  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Gavin Barraclough.

        Add WTF::StringHasher
        https://bugs.webkit.org/show_bug.cgi?id=45970

        StringHasher is a class for calculation stringHash out of character string.
        This class will unify the different usages of the same algorithm.

        * wtf/StringHashFunctions.h:
        (WTF::StringHasher::StringHasher):
        (WTF::StringHasher::addCharacters):
        (WTF::StringHasher::addCharacter):
        (WTF::StringHasher::hash):
        (WTF::StringHasher::createHash):
        (WTF::StringHasher::defaultCoverter):
        (WTF::StringHasher::addCharactersToHash):
        (WTF::stringHash):

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

        Reviewed by Geoffrey Garen.

        Variable declarations inside a catch scope don't get propogated to the parent scope
        https://bugs.webkit.org/show_bug.cgi?id=46501

        Add logic to make variable declaration look for a scope for the
        new variable.  This allows us to create a scope (eg. for catch)
        and then seal it, so that additional variable declarations
        contained are propogated to the correct target.  Strangely this
        comes out as a performance win, but I think it's mostly cache
        effects.

        * parser/JSParser.cpp:
        (JSC::JSParser::Scope::Scope):
        (JSC::JSParser::Scope::preventNewDecls):
        (JSC::JSParser::Scope::allowsNewDecls):
        (JSC::JSParser::declareVariable):
        (JSC::JSParser::parseVarDeclarationList):
        (JSC::JSParser::parseConstDeclarationList):
        (JSC::JSParser::parseTryStatement):
        (JSC::JSParser::parseFormalParameters):
        (JSC::JSParser::parseFunctionDeclaration):

2010-09-24  İsmail Dönmez  <ismail@namtrac.org>

       Reviewed by Csaba Osztrogonác.

       Add a Windows compatible inttypes.h header to fix WinCE build.
       https://bugs.webkit.org/show_bug.cgi?id=46463

       * os-win32/inttypes.h: Added.

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

        Reviewed by Gavin Barraclough.

        REGRESSION(r68223): It broke 2-3 tests on bots (Requested by Ossy on #webkit).
        https://bugs.webkit.org/show_bug.cgi?id=46448

        Roll this back in, with additional logic to prevent us from delaying construction
        of functions named "arguments"

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitInitLazyRegister):
        (JSC::BytecodeGenerator::registerFor):
        (JSC::BytecodeGenerator::createLazyRegisterIfNecessary):
        (JSC::BytecodeGenerator::constRegisterFor):
        (JSC::BytecodeGenerator::emitNewFunction):
        (JSC::BytecodeGenerator::emitLazyNewFunction):
        (JSC::BytecodeGenerator::emitNewFunctionInternal):
        * 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_init_lazy_reg):
        (JSC::JIT::emit_op_new_func):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_init_lazy_reg):
        * parser/Nodes.h:
        (JSC::ScopeNode::needsActivationForMoreThanVariables):

2010-09-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r68223.
        http://trac.webkit.org/changeset/68223
        https://bugs.webkit.org/show_bug.cgi?id=46448

        It broke 2-3 tests on bots (Requested by Ossy on #webkit).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::registerFor):
        (JSC::BytecodeGenerator::constRegisterFor):
        (JSC::BytecodeGenerator::emitNewFunction):
        * 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_new_func):
        (JSC::JIT::emit_op_init_arguments):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_new_func):
        (JSC::JIT::emit_op_init_arguments):
        * parser/Nodes.h:

2010-09-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Delay construction of functions that aren't captured
        https://bugs.webkit.org/show_bug.cgi?id=46433

        If a function isn't captured by an activation there's no
        way it can be accessed indirectly, so we can delay the
        construction until it's used (similar to what we do with
        arguments).  We rename the existing op_init_arguments to
        op_init_lazy_reg and removed its implicit handling of
        the anonymous argument register, and make op_new_function
        take a parameter to indicate whether it should null check
        the target slot before creating the function object.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitInitLazyRegister):
        (JSC::BytecodeGenerator::registerFor):
        (JSC::BytecodeGenerator::createLazyRegisterIfNecessary):
        (JSC::BytecodeGenerator::constRegisterFor):
        (JSC::BytecodeGenerator::emitNewFunction):
        (JSC::BytecodeGenerator::emitLazyNewFunction):
        (JSC::BytecodeGenerator::emitNewFunctionInternal):
        * 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_init_lazy_reg):
        (JSC::JIT::emit_op_new_func):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_init_lazy_reg):
        * parser/Nodes.h:
        (JSC::ScopeNode::needsActivationForMoreThanVariables):

2010-09-23  David Kilzer  <ddkilzer@apple.com>

        <rdar://problem/8460731> ~9.9% speedup when compiling interpreter with llvm-gcc-4.2
        https://bugs.webkit.org/show_bug.cgi?id=46423

        Reviewed by Oliver Hunt.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute): Disable the gcc computed
        goto hacks added in r55564 when compiling with llvm-gcc-4.2.

2010-09-23  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Darin Adler.

        Fix usage of enum as if it was a define
        https://bugs.webkit.org/show_bug.cgi?id=46355

        pthread.h defines PTHREAD_MUTEX_DEFAULT and PTHREAD_MUTEX_NORMAL as an
        enum.  Hence, it cannot be used by the preprocessor which always
        evaluates that condition as true. This was giving a warning when
        compiling with gcc and "-Wundef" flag.

        The second path, when PTHREAD_MUTEX_DEFAULT is not the same of
        PTHREAD_MUTEX_NORMAL, is not slow. So, let's eliminate the first path
        and get rid of that #if.

        * wtf/ThreadingPthreads.cpp: Always call pthread_mutexattr_init() to
        set mutex type to PTHREAD_MUTEX_NORMAL.
        (WTF::Mutex::Mutex):

2010-09-23  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Removed extraneous truncation of ovector on entry and error exit.
        Changed the initialization to -1 of vector to only initialize
        the start indecies, which is sufficient for the pattern/subpatterns.
        Changed the JIT code to not clear the end index for subpatterns
        as it isn't needed.  These changes are worth ~2.7% on v8-regexp.
        https://bugs.webkit.org/show_bug.cgi?id=46404

        * runtime/RegExp.cpp:
        (JSC::RegExp::match):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateParenthesesSingle):

2010-09-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Only copy captured variables into activation
        https://bugs.webkit.org/show_bug.cgi?id=46330

        We now track free variable information which means that
        we no longer need to copy every variable defined in a
        function.  With this patch activations only retain those
        variables needed for correctness.  In order to interact
        safely with the inspector this means that JSActivation
        now provides its own lookup functions so it can avoid 
        trying to read or write to variables that have been
        optimised out.

        * bytecode/CodeBlock.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * parser/Nodes.h:
        (JSC::ScopeNode::capturedVariableCount):
        (JSC::ScopeNode::captures):
        * runtime/Arguments.h:
        (JSC::JSActivation::copyRegisters):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::capturedVariableCount):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::markChildren):
        (JSC::JSActivation::symbolTableGet):
        (JSC::JSActivation::symbolTablePut):
        (JSC::JSActivation::getOwnPropertyNames):
        (JSC::JSActivation::symbolTablePutWithAttributes):
        * runtime/JSActivation.h:

2010-09-23  Ismail Donmez  <ismail@namtrac.org>

        Reviewed by Andreas Kling.

        Fix jsc.exe build for Windows CE

        * jsc.pro: Add mmtimer.lib for Windows CE.

2010-09-23  Ismail Donmez  <ismail@namtrac.org>

        Unreviewed.

        JIT should be disabled on Windows CE. Broken in r64176.

        * wtf/Platform.h:

2010-09-23  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Gavin Barraclough.

        Reduce the number of BOL checks in YARR Interpreter
        https://bugs.webkit.org/show_bug.cgi?id=46260

        Extend the YARR Interpreter with an optimization which reduces the number of
        BOL assertion checks. If a "TypeBodyAlternative" byteTerm is followed by a
        "TypeAssertionBOL" byteTerm it will be checked just one time.

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::ByteCompiler::compile):
        (JSC::Yarr::ByteCompiler::regexBegin):
        (JSC::Yarr::ByteCompiler::alternativeBodyDisjunction):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        * yarr/RegexInterpreter.h:
        (JSC::Yarr::ByteTerm::BodyAlternativeBegin):
        (JSC::Yarr::ByteTerm::BodyAlternativeDisjunction):
        (JSC::Yarr::ByteTerm::BodyAlternativeEnd):
        (JSC::Yarr::ByteTerm::AlternativeBegin):
        (JSC::Yarr::ByteTerm::AlternativeDisjunction):
        (JSC::Yarr::ByteTerm::AlternativeEnd):

2010-09-22  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Fixed the cross over from alternatives executed once and
        those that loop.  This fixed the problem where the index
        was getting messed up for looping alternatives causing an
        infinite loop.
        https://bugs.webkit.org/show_bug.cgi?id=46189

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateDisjunction):

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

        Rubber stamped by Jon Honeycutt.

        Allow jsc.exe to be run against unversioned ICU.

        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:

2010-09-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Laszlo Gombos.

        Use "typedef wchar_t JSChar" when compiled with RVCT
        https://bugs.webkit.org/show_bug.cgi?id=40651

        Use wchar_t for JSChar and UChar when compiled with RVCT.
        Linux is the exception for this rule.

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

2010-09-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [INTERPRETER] Two tests fail with SputnikError: #1.1: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown
        https://bugs.webkit.org/show_bug.cgi?id=44245

        Remove incorrect code from op_load_varargs in the interpreter.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2010-09-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [JIT] fast/js/sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.5/S15.3.5.3_A2_T6.html fails
        https://bugs.webkit.org/show_bug.cgi?id=44246

        JIT code generated for instanceof was not checking to ensure that the prototype property was
        an object, this patch ensures that it does.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):

2010-09-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Inline UTF8SequenceLength
        https://bugs.webkit.org/show_bug.cgi?id=45589

        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::convertUTF8ToUTF16): Use inline version of UTF8SequenceLength to improve performance.

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

        RS=Gavin Barraclough.

        Fix codeblock dumping

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * runtime/Executable.h:
        (JSC::ScriptExecutable::ScriptExecutable):

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

        Reviewed by Geoffrey Garen.

        Speed up function.apply(..., arguments)
        https://bugs.webkit.org/show_bug.cgi?id=46207

        Add code to do argument copying inline in the case
        where we're using Function.apply to forward our arguments
        directly.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
           Splitted op_load_varargs into fast and slow paths, so add the call
           to the slow path generator.
        * jit/JIT.h:
        * jit/JITCall32_64.cpp:
          Remove 32bit specific emit_op_load_varargs as the logic is the
          same for all value representations
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_load_varargs):
          Copy arguments inline
        (JSC::JIT::emitSlow_op_load_varargs):

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

        Reviewed by Oliver Hunt.

        <rdar://problem/8363003> REGRESSION: ~1.4% sunspider regression in
        interpreter due to 54724 and 54596
        
        Fixed a typo (using "UNLIKELY" instead of "LIKELY").
        
        * wtf/PassRefPtr.h:
        (WTF::refIfNotNull):
        (WTF::derefIfNotNull): It is likely that m_ptr != 0 because most RefPtrs
        hold real data. Also, in cases where they do not hold real data, the
        compiler usually sees a call to release() right before the call to the
        destructor, so it can probably optimize out the test completely.

2010-09-21  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Build issues with Windows versions of the GTK+ port
        https://bugs.webkit.org/show_bug.cgi?id=45844

        Link with winmm.dll when necessary and specify the executable extension
        explicitely so that the Programs/jsc-@WEBKITGTK_API_MAJOR_VERSION@
        rule actually works.

        Don't try to build the ThreadSpecificWin.cpp since GTK+ port uses
        a section in ThreadSpecific.cpp

        * GNUmakefile.am:

2010-09-21  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] 'make dist' should be fixed in preparation for the next release
        https://bugs.webkit.org/show_bug.cgi?id=46129

        * GNUmakefile.am: Update the sources list to include missing headers.

2010-09-21  Dave Tapuska  <dtapuska@rim.com>

        Reviewed by Csaba Osztrogonác.

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

        r65596 caused ENABLE_PROFILER_REFERENCE_OFFSET to not be
        8 byte aligned. A non 8 byte divisible value for this will
        cause the sp to become non 8 byte aligned.

        Verify and correct offset values that r65596 effected that
        weren't updated.

        * jit/JITStubs.cpp:
        * jit/JITStubs.h:

2010-09-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Fix Opcode stats compilation
        https://bugs.webkit.org/show_bug.cgi?id=46079

        The FixedArray API had changed, and <stdio.h> was not included for
        printf.

        * bytecode/Opcode.cpp:
        (JSC::OpcodeStats::~OpcodeStats):

2010-09-20  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Fixed detection of alternative smaller than the first alternative
        to only check looping alternatives.
        https://bugs.webkit.org/show_bug.cgi?id=46049

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateDisjunction):

2010-09-20  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Geoffrey Garen.

        REGRESSION(67790): jsc tests are failed with YARR interpreter
        https://bugs.webkit.org/show_bug.cgi?id=46083

        Fix the initializing of the lastSubpatternId member of
        parentheses.

        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::RegexPatternConstructor::atomParenthesesEnd):

2010-09-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 46077 - ASSERT failure in YARR JIT

        We will currently attempt to loop if there are multiple alternatives, they are all
        BOL predicated, and the last alternative is longer then the first - however if all
        alternatives are BOL predicated the head of loop label will not have been set, and
        we'll try to link a jump to an undefined label. Stop doing so.

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateDisjunction):

2010-09-20  Adam Roben  <aroben@apple.com>

        Export RegExpObject::info from JavaScriptCore

        This allows obj->inherits(&RegExpObject::info) to work correctly from
        outside JavaScriptCore.dll on Windows.

        Fixes <http://webkit.org/b/46098>
        fast/loader/stateobjects/pushstate-object-types.html fails on Windows

        Reviewed by John Sullivan.

        * runtime/RegExpObject.h: Added JS_EXPORTDATA to the info member, as
        we already have for some other classes whose info members have to be
        used from outside the DLL.

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

        Windows build fix pt 2.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Windows build fix pt 1.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Build fix - implicit double-to-int conversion invalid on 32-bit.

        * runtime/DatePrototype.cpp:
        (JSC::fillStructuresUsingDateArgs):
        (JSC::dateProtoFuncSetYear):

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

        Reviewed by Oliver Hunt.

        Bug 46065 - Unify implementation of ToInt32 and ToUInt32, don't use fmod.

        These methods implement the same conversion (see discussion in the notes
        of sections of 9.5 and 9.6 of the spec), only differing in how the result
        is interpretted.

        Date prototype is incorrectly using toInt32, and this is causing us to
        provide an output value indicating whether the input to ToInt32 was finite
        (the corresponding methods on Date are actually spec'ed to use ToInteger,
        not ToInt32).  This patch partially fixes this in order to remove this
        bogus output value, hoewever more work will be require to bring Date
        fully up to spec compliance (the constructor is still performing ToInt32
        conversions).

        * JavaScriptCore.exp:
        * runtime/DatePrototype.cpp:
        (JSC::fillStructuresUsingTimeArgs):
        (JSC::fillStructuresUsingDateArgs):
        (JSC::dateProtoFuncSetYear):
        * runtime/JSValue.cpp:
        (JSC::toInt32):
        * runtime/JSValue.h:
        (JSC::toUInt32):
        (JSC::JSValue::toInt32):
        (JSC::JSValue::toUInt32):

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

        First step in fixing Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        Removed incorrect symbol. The build will probably still fail,
        but the failure will tell us what symbol to add.

2010-09-18  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Added code to unroll regular expressions containing ^.
        Alternatives that begin with ^ are tagged during parsing
        and rolled up in containing sub expression structs.
        After parsing, a regular expression flagged as containing
        a ^ (a.k.a. BOL) is processed further in optimizeBOL().
        A copy of the disjunction is made excluding alternatives that
        are rooted with BOL.  The original alternatives are flagged
        to only be executed once.  The copy of the other alternatives are
        added to the original expression.
        In the case that all original alternatives are flagged, there
        won't be any looping alternatives.
        The JIT generator will emit code accordingly, executing the
        original alternatives once and then looping over the
        alternatives that aren't anchored with a BOL (if any).
        https://bugs.webkit.org/show_bug.cgi?id=45787

        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::RegexPatternConstructor::assertionBOL):
        (JSC::Yarr::RegexPatternConstructor::atomParenthesesEnd):
        (JSC::Yarr::RegexPatternConstructor::copyDisjunction):
        (JSC::Yarr::RegexPatternConstructor::copyTerm):
        (JSC::Yarr::RegexPatternConstructor::optimizeBOL):
        (JSC::Yarr::compileRegex):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateDisjunction):
        * yarr/RegexPattern.h:
        (JSC::Yarr::PatternAlternative::PatternAlternative):
        (JSC::Yarr::PatternAlternative::setOnceThrough):
        (JSC::Yarr::PatternAlternative::onceThrough):
        (JSC::Yarr::PatternDisjunction::PatternDisjunction):
        (JSC::Yarr::RegexPattern::RegexPattern):
        (JSC::Yarr::RegexPattern::reset):

2010-09-18  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Rename Wince files to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=37287

        * wtf/unicode/Unicode.h:
        * wtf/unicode/wince/UnicodeWinCE.cpp: Copied from JavaScriptCore/wtf/unicode/wince/UnicodeWince.cpp.
        * wtf/unicode/wince/UnicodeWinCE.h: Copied from JavaScriptCore/wtf/unicode/wince/UnicodeWince.h.
        * wtf/unicode/wince/UnicodeWince.cpp: Removed.
        * wtf/unicode/wince/UnicodeWince.h: Removed.
        * wtf/wince/FastMallocWinCE.h: Copied from JavaScriptCore/wtf/wince/FastMallocWince.h.
        * wtf/wince/FastMallocWince.h: Removed.

2010-09-18  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Enable Platform Strategies on Qt

        [Qt] Turn on PLATFORM_STRATEGIES
        https://bugs.webkit.org/show_bug.cgi?id=45831

        * wtf/Platform.h: Enable Platform Strategies when building QtWebkit

2010-09-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Imprecise tracking of variable capture leads to overly pessimistic creation of activations
        https://bugs.webkit.org/show_bug.cgi?id=46020

        The old logic for track free and captured variables would cause us
        to decide we needed an activation in every function along the scope
        chain between a variable capture and its declaration.  We now track
        captured variables precisely which requires a bit of additional work

        The most substantial change is that the parsing routine needs to
        be passed the list of function parameters when reparsing a function
        as when reparsing we don't parse the function declaration itself only
        its body.

        * JavaScriptCore.exp:
        * parser/JSParser.cpp:
        (JSC::JSParser::Scope::Scope):
        (JSC::JSParser::Scope::needsFullActivation):
           We need to distinguish between use of a feature that requires
           an activation and eval so we now get this additional flag.
        (JSC::JSParser::Scope::collectFreeVariables):
        (JSC::JSParser::Scope::getCapturedVariables):
           We can't simply return the list of "capturedVariables" now as
           is insufficiently precise, so we compute them instead.
        (JSC::JSParser::popScope):
        (JSC::jsParse):
        (JSC::JSParser::JSParser):
        (JSC::JSParser::parseProgram):
        (JSC::JSParser::parseWithStatement):
        (JSC::JSParser::parseTryStatement):
        (JSC::JSParser::parseFunctionInfo):
        (JSC::JSParser::parseFunctionDeclaration):
        (JSC::JSParser::parseProperty):
        (JSC::JSParser::parseMemberExpression):
        * parser/JSParser.h:
        * parser/Parser.cpp:
        (JSC::Parser::parse):
        * parser/Parser.h:
        (JSC::Parser::parse):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::checkSyntax):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::EvalExecutable::reparseExceptionInfo):
        (JSC::FunctionExecutable::fromGlobalCode):
           Pass function parameters (if available) to the parser.

2010-09-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add IsFloatingPoint and IsArithmetic type traits
        https://bugs.webkit.org/show_bug.cgi?id=46018

        * wtf/TypeTraits.h:
        * wtf/TypeTraits.cpp:

2010-09-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        [GTK] FontPlatformDataFreeType should use smart pointers to hold its members
        https://bugs.webkit.org/show_bug.cgi?id=45917

        Added support to PlatformRefPtr for handling HashTableDeletedValue.

        * wtf/PlatformRefPtr.h:
        (WTF::PlatformRefPtr::PlatformRefPtr): Added a constructor that takes HashTableDeletedValue.
        (WTF::PlatformRefPtr::isHashTableDeletedValue): Added.

2010-09-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Crash due to timer triggered GC on one heap while another heap is active
        https://bugs.webkit.org/show_bug.cgi?id=45932
        <rdar://problem/8318446>

        The GC timer may trigger for one heap while another heap is active.  This
        is safe, but requires us to ensure that we have temporarily associated the
        thread's identifierTable with the heap we're collecting on.  Otherwise we
        may end up with the identifier tables in an inconsistent state leading to
        an eventual crash.

        * runtime/Collector.cpp:
        (JSC::Heap::allocate):
        (JSC::Heap::reset):
        (JSC::Heap::collectAllGarbage):
           Add assertions to ensure we have the correct identifierTable active
           while collecting.
        * runtime/GCActivityCallbackCF.cpp:
        (JSC::DefaultGCActivityCallbackPlatformData::trigger):
           Temporarily make the expected IdentifierTable active
        * wtf/WTFThreadData.h:
        (JSC::IdentifierTable::remove):
           Make it possible to see when IdentifierTable::remove has succeeded
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::~StringImpl):
           CRASH if an StringImpl is an Identifier but isn't present in the
           active IdentifierTable.  If we get to this state something has
           gone wrong and we should just crash immediately.

2010-09-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Implement dissolveDragImageToFraction
        https://bugs.webkit.org/show_bug.cgi?id=45826

        * wtf/gobject/GTypedefs.h: Added forward declarations for GtkWindow and GdkEventExpose.

2010-09-16  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Jian Li.

        Unify FILE_SYSTEM and FILE_WRITER enables under the name FILE_SYSTEM.
        https://bugs.webkit.org/show_bug.cgi?id=45798

        * Configurations/FeatureDefines.xcconfig:

2010-09-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Use free variable analysis to improve activation performance
        https://bugs.webkit.org/show_bug.cgi?id=45837

        Adds free and captured variable tracking to the JS parser.  This
        allows us to avoid construction of an activation object in some
        cases.  Future patches will make more use of this information to
        improve those cases where activations are still needed.

        * parser/ASTBuilder.h:
        * parser/JSParser.cpp:
        (JSC::JSParser::Scope::Scope):
        (JSC::JSParser::Scope::declareVariable):
        (JSC::JSParser::Scope::useVariable):
        (JSC::JSParser::Scope::collectFreeVariables):
        (JSC::JSParser::Scope::capturedVariables):
        (JSC::JSParser::ScopeRef::ScopeRef):
        (JSC::JSParser::ScopeRef::operator->):
        (JSC::JSParser::ScopeRef::index):
        (JSC::JSParser::currentScope):
        (JSC::JSParser::pushScope):
        (JSC::JSParser::popScope):
        (JSC::JSParser::parseProgram):
        (JSC::JSParser::parseVarDeclarationList):
        (JSC::JSParser::parseConstDeclarationList):
        (JSC::JSParser::parseTryStatement):
        (JSC::JSParser::parseFormalParameters):
        (JSC::JSParser::parseFunctionInfo):
        (JSC::JSParser::parseFunctionDeclaration):
        (JSC::JSParser::parsePrimaryExpression):
        * parser/Nodes.cpp:
        (JSC::ScopeNodeData::ScopeNodeData):
        (JSC::ScopeNode::ScopeNode):
        (JSC::ProgramNode::ProgramNode):
        (JSC::ProgramNode::create):
        (JSC::EvalNode::EvalNode):
        (JSC::EvalNode::create):
        (JSC::FunctionBodyNode::FunctionBodyNode):
        (JSC::FunctionBodyNode::create):
        * parser/Nodes.h:
        (JSC::ScopeNode::needsActivation):
        (JSC::ScopeNode::hasCapturedVariables):
        * parser/Parser.cpp:
        (JSC::Parser::didFinishParsing):
        * parser/Parser.h:
        (JSC::Parser::parse):
        * parser/SyntaxChecker.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (JSC::ScriptExecutable::needsActivation):
        (JSC::ScriptExecutable::recordParse):

2010-09-14  Hyung Song  <beergun@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Add IMemGroup and IMemSpace to OwnPtr type.
        https://bugs.webkit.org/show_bug.cgi?id=44764

        * wtf/OwnPtrCommon.h:
        * wtf/brew/OwnPtrBrew.cpp:
        (WTF::deleteOwnedPtr):

2010-09-14  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        Sort with non-numeric custom sort function fails on array with length but no values
        https://bugs.webkit.org/show_bug.cgi?id=45781

        * runtime/JSArray.cpp:
        (JSC::JSArray::sort): Replaced early exit for an array of length zero to instead
        exit for any array without values, even if it has a non-0 length.

2010-09-14  Steve Falkenburg  <sfalken@apple.com>

        Windows production build fix.
        Roll out r65143.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:

2010-09-14  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Share UnicodeMacrosFromICU.h
        https://bugs.webkit.org/show_bug.cgi?id=45710

        glib, qt4 and wince use the same macros from ICU.
        Remove the code duplication and use the same header file.

        * wtf/unicode/UnicodeMacrosFromICU.h: Copied from JavaScriptCore/wtf/unicode/glib/UnicodeMacrosFromICU.h.
        * wtf/unicode/glib/UnicodeMacrosFromICU.h: Removed.
        * wtf/unicode/qt4/UnicodeQt4.h:
        * wtf/unicode/wince/UnicodeWince.h:

2010-09-13  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Preparation for eliminating deprecatedParseURL
        https://bugs.webkit.org/show_bug.cgi?id=45695

        * wtf/text/WTFString.h: Added isAllSpecialCharacters, moved here from
        the HTML tree builder.

2010-09-13  Darin Fisher  <darin@chromium.org>

        Reviewed by David Levin.

        Add option to conditionally compile smooth scrolling support.
        https://bugs.webkit.org/show_bug.cgi?id=45689

        ENABLE(SMOOTH_SCROLLING) is disabled by default for all platforms.

        * wtf/Platform.h:

2010-09-13  Adam Roben  <aroben@apple.com>

        Copy JavaScriptCore's generated sources to the right directory

        * JavaScriptCore.vcproj/JavaScriptCore.make: Fixed typo.

2010-09-13  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Don't call _msize
        https://bugs.webkit.org/show_bug.cgi?id=45556

        Because Brew MP uses its own memory allocator, it is not correct to use
        _msize in fastMallocSize. Add !PLATFORM(BREWMP) guard.

        * wtf/FastMalloc.cpp:
        (WTF::fastMallocSize):

2010-09-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] V8 port: webcore project files changes
        https://bugs.webkit.org/show_bug.cgi?id=45141

        * JavaScriptCore.pro: Moved wtf specific files to wtf.pri,
        so that they can also be used from WebCore.pro for v8 builds.
        * wtf/wtf.pri: Added.

2010-09-10  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Andreas Kling.

        Add a define missing when building with glib unicode backend
        https://bugs.webkit.org/show_bug.cgi?id=45544

        * wtf/unicode/glib/UnicodeMacrosFromICU.h:

2010-09-10  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Alexey Proskuryakov.
        
        Refactor JavaScriptCore memory statistics so that WebKit doesn't need to know 
        about the JIT and other implementation details of JavaScriptCore.  Necessary 
        to fix PPC build.
        
        https://bugs.webkit.org/show_bug.cgi?id=45528

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/MemoryStatistics.cpp: Added.
        (JSC::memoryStatistics):
        * runtime/MemoryStatistics.h: Added.

2010-09-09  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Added a regular expression tracing facility.  This tracing is connected
        to jsc.  Every compiled regular expression object is added to a list.
        When the process exits, each regular expression dumps its pattern,
        JIT address, number of times it was executed and the number of matches.
        This tracing is controlled by the macro ENABLE_REGEXP_TRACING in
        wtf/Platform.h.
        https://bugs.webkit.org/show_bug.cgi?id=45401

        * JavaScriptCore.exp:
        * jsc.cpp:
        (runWithScripts):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        (JSC::JSGlobalData::addRegExpToTrace):
        (JSC::JSGlobalData::dumpRegExpTrace):
        * runtime/JSGlobalData.h:
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        (JSC::RegExp::match):
        * runtime/RegExp.h:
        * wtf/Platform.h:
        * yarr/RegexJIT.h:
        (JSC::Yarr::RegexCodeBlock::getAddr):

2010-09-09  John Therrell  <jtherrell@apple.com>

        32-bit build fix.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::committedByteCount):

2010-09-09  John Therrell  <jtherrell@apple.com>

        Reviewed by Alexey Proskuryakov.

        Added statistics sampling and reporting for JavaScriptCore's RegisterFile and ExecutableAllocator classes
        https://bugs.webkit.org/show_bug.cgi?id=45134

        Added thread-safe committed byte counting and reporting functionality to RegisterFile and 
        ExecutableAllocator.

        * JavaScriptCore.exp:
        Exported new symbols to allow for WebKit to get statistics from JavaScriptCore classes.
        
        * interpreter/RegisterFile.cpp:
        (JSC::registerFileStatisticsMutex):
        Added function which returns a static Mutex used for locking during read/write access to
        static committed byte count variable.
        (JSC::RegisterFile::~RegisterFile):
        Added call to addToStatistics since memory is decommitted here.
        (JSC::RegisterFile::releaseExcessCapacity):
        Added call to addToStatistics since memory is decommitted here.
        (JSC::RegisterFile::initializeThreading):
        Added function which calls registerFileStatisticsMutex().
        (JSC::RegisterFile::committedByteCount):
        Added function which returns the current committed byte count for RegisterFile.
        (JSC::RegisterFile::addToCommittedByteCount):
        Added function which updates committed byte count.
        
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        Added call to addToStatistics since memory is committed here.
        (JSC::RegisterFile::grow):
        Added call to addToStatistics since memory is committed here.
        
        * jit/ExecutableAllocator.h:
        Added function prototype for public static function committedByteCount().
        
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::release):
        Added call to addToStatistics since memory is decommitted here.
        (JSC::FixedVMPoolAllocator::reuse):
        Added call to addToStatistics since memory is committed here.
        (JSC::FixedVMPoolAllocator::addToCommittedByteCount):
        Added function which updates committed byte count.
        (JSC::ExecutableAllocator::committedByteCount):
        Added function which returns the current committed byte count for ExecutableAllocator.
        
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        Added call to RegisterFile::initializeThreading.

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

        Reviewed by Oliver Hunt.

        <http://webkit.org/b/45502> JSObjectSetPrivateProperty does not handle NULL values as it claims

        * API/JSObjectRef.cpp:
        (JSObjectSetPrivateProperty): Don't call toJS if we have a NULL value as that will cause an assertion
        failure. Instead map NULL directly to the null JSValue.
        * API/tests/testapi.c:
        (main): Add test coverage for the NULL value case.

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

        Reviewed by Gavin Barraclough.

        [Qt] JSVALUE32_64 not works on Windows platform with MinGW compiler
        https://bugs.webkit.org/show_bug.cgi?id=29268

        * wtf/Platform.h: Enable JSVALUE32_64 for Qt/Windows/MinGW, because it works now.

2010-09-08  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Darin Adler.

        Removing doneSemicolon label in the lexer
        https://bugs.webkit.org/show_bug.cgi?id=45289

        As a side effect of moving the multiline comment parsing
        to a separate function, an opportunity raised to simplify
        the single line comment parsing, and removing doneSemicolon
        label. Slight performance increase on --parse-only
        tests (from 32.8ms to 31.5ms)

        * parser/Lexer.cpp:
        (JSC::Lexer::lex):

2010-09-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Alexey Proskuryakov.

        Remove accessor for private member variable in JSParser
        https://bugs.webkit.org/show_bug.cgi?id=45378

        m_token is private to JSParser, so it does not seem to be useful
        to have an accessor for it. On top of that, the file was both
        using the accessor and directly accessing the member variable,
        only one style should be used.

2010-09-08  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Oliver Hunt.

        [Qt] REGRESSION(63348): jsc is broken
        https://bugs.webkit.org/show_bug.cgi?id=42818

        Need fastcall conventions on Qt/Win/MinGW.
        Based on patches of Gavin Barraclough: r63947 and r63948.

        * jit/JITStubs.cpp:
        * jit/JITStubs.h:

2010-09-08  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        Remove some unnecessary duplicate calls to string functions

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

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

2010-09-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        Re-Disable JIT for MSVC 64bit to fix the build on this compiler.
        https://bugs.webkit.org/show_bug.cgi?id=45382

        It was enabled in the cleanup made in r64176, though it is still
        not implemented.

        * wtf/Platform.h:

2010-09-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Need a WebSocket implementation
        https://bugs.webkit.org/show_bug.cgi?id=45197

        Add a GIO-based WebSocket implementation.

        * wtf/gobject/GRefPtr.cpp: Added PlatformRefPtr support for GSource.
        (WTF::refPlatformPtr):
        (WTF::derefPlatformPtr):
        * wtf/gobject/GRefPtr.h: Added new template specialization declarations.
        * wtf/gobject/GTypedefs.h: Add some more GLib/GIO forward declarations.

2010-08-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Handle MediaQueryExp memory management exclusively with smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=44874
        
        Implemented a non-copying sort function to make it possible to sort a Vector
        of OwnPtrs (which cannot be copied). This is required for the above.

        * wtf/NonCopyingSort.h: Added.
        (WTF::nonCopyingSort): It's secretly heapsort.
        (WTF::heapSort): heapsort implementation.
        (WTF::siftDown): Helper function for heapsort.
        (WTF::heapify): ditto

        Adjust build systems.
        
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2010-09-08  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Darin Adler.

        Refactoring multiline comments in the lexer
        https://bugs.webkit.org/show_bug.cgi?id=45289

        MultiLine comment parsing is moved to a separate function.

        Slight performance increase on --parse-only tests (from 33.6ms to 32.8ms)
        SunSpider reports no change (from 523.1ms to 521.2ms).

        * parser/Lexer.cpp:
        (JSC::Lexer::parseMultilineComment):
        (JSC::Lexer::lex):
        * parser/Lexer.h:

2010-09-07  James Robinson  <jamesr@chromium.org>

        Compile fix attempt for windows.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-09-07  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by James Robinson.

        Fix Windows build after r66936
        https://bugs.webkit.org/show_bug.cgi?id=45348

        Add symbol names that were missing from r66936.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-09-07  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Oliver Hunt.

        pushState and replaceState do not clone RegExp objects correctly
        https://bugs.webkit.org/show_bug.cgi?id=44718
        
        Move internal representation of JSC::RegExp (which depends on wether
        YARR and YARR_JIT is enabled) into RegExpRepresentation which can live
        in the implementation only. This makes it feasible to use RegExp in
        WebCore without bringing in all of YARR.

        * JavaScriptCore.exp: Export RegExp and RegExpObject functions that are
        needed inside WebCore's JSC bindings.
        * runtime/RegExp.cpp:
        (JSC::RegExpRepresentation::~RegExpRepresentation):
        (JSC::RegExp::RegExp):
        (JSC::RegExp::~RegExp):
        (JSC::RegExp::compile):
        (JSC::RegExp::match):
        * runtime/RegExp.h:

2010-09-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8381749> -Wcast-align warning emitted when building with clang

        Remove the -Wcast-align-warning since it isn't really useful, and clang is more aggressive about warning than gcc.

        * Configurations/Base.xcconfig:

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

        Reviewed by Darin Adler.

        REGRESSION(66741): Undefined pthread macros
        https://bugs.webkit.org/show_bug.cgi?id=45246

        PTHREAD_MUTEX_NORMAL and PTHREAD_MUTEX_DEFAULT (introduced in r60487) are not defined on Linux, 
        but used in a statement. Add an additional check to test this.

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

2010-09-06  Oliver Hunt  <oliver@apple.com>

        Windows build fix

2010-09-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        SerializedScriptValue needs to use a flat storage mechanism
        https://bugs.webkit.org/show_bug.cgi?id=45244

        Export JSArray::put

        * JavaScriptCore.exp:

2010-09-06  Chao-ying Fu  <fu@mips.com>

        Reviewed by Oliver Hunt.

        Support JSVALUE32_64 on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=43999

        Add missing functions to support JSVALUE32_64 on MIPS.
        Remove JSVALUE32 as the default for MIPS.

        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::divd):
        (JSC::MIPSAssembler::mthc1):
        (JSC::MIPSAssembler::cvtwd):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::neg32):
        (JSC::MacroAssemblerMIPS::branchOr32):
        (JSC::MacroAssemblerMIPS::set8):
        (JSC::MacroAssemblerMIPS::loadDouble):
        (JSC::MacroAssemblerMIPS::divDouble):
        (JSC::MacroAssemblerMIPS::convertInt32ToDouble):
        (JSC::MacroAssemblerMIPS::branchDouble):
        (JSC::MacroAssemblerMIPS::branchConvertDoubleToInt32):
        (JSC::MacroAssemblerMIPS::zeroDouble):
        * jit/JIT.h:
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        * jit/JITStubs.h:
        * wtf/Platform.h:

2010-09-06  Robert Hogan  <robert@webkit.org>

        Unreviewed, compile fix.

        Fix compile failure in r66843

        Revert to original patch in bugzilla. Leave bug open for
        discussion on potential removal of double utf8 conversion.

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

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

2010-09-06  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] utf8 encoding of console() messages

        Unskip:
        http/tests/security/xssAuditor/embed-tag-null-char.html
        http/tests/security/xssAuditor/object-embed-tag-null-char.html

        Both tests failed because Qt's implementation of String::format()
        is casting a utf8 result to String, which assumes latin1 in
        its constructor. So instead of casting a QString to a String, use
        StringImpl::create() instead. Unfortunately, this involves a lot
        of extra casts but the end result is correct.

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

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

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=45135
        <rdar://problem/7823714> TCMalloc_PageHeap doesn't hold a mutex while manipulating shared data

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::initializeScavenger): Make sure to create a non-recursive mutex
        regardless of platform default, so that we can assert that it's held (this is for platforms
        that don't have libdispatch).
        (WTF::TCMalloc_PageHeap::signalScavenger): Assert that the mutex is held, so we can look
        at m_scavengeThreadActive. For platforms that have libdispatch, assert that pageheap_lock
        is held.
        (WTF::TCMalloc_PageHeap::periodicScavenge): Make sure that pageheap_lock is held before
        manipulating m_scavengeThreadActive. Otherwise, there is an obvious race condition, and we
        can make unbalanced calls to dispatch_resume().

2010-09-03  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Martin Robinson.

        [EFL] Regression (66531) Build break with Glib Support
        https://bugs.webkit.org/show_bug.cgi?id=45011

        Move GtkTypedefs.h to GTypedefs.h and let it inside gobject directory
        since when glib is enabled, EFL port needs it, too.

        * CMakeListsEfl.txt: Include gobject directory to find new header
        file.
        * GNUmakefile.am: Ditto.
        * wtf/CMakeListsEfl.txt: Ditto.
        * wtf/Platform.h: Include header if port is EFL and glib support is
        enabled.
        * wtf/gtk/GtkTypedefs.h: Removed.
        * wtf/gobject/GTypedefs.h: Added. Sections specific to GTK are now
        guarded by PLATFORM(GTK).

2010-09-03  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Simon Hausmann.

        Fix warning in wtf/ByteArray.h
        https://bugs.webkit.org/show_bug.cgi?id=44672

        * wtf/ByteArray.h: Use maximal sized array for MSVC and unsized array for other compilers.

2010-09-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Actually parse a URL from ParsedURL
        https://bugs.webkit.org/show_bug.cgi?id=45080

        This patch only handles standard URLs.  At some point we'll need to
        distinguish between standard URLs and other kinds of URLs.

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

2010-09-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add ParsedURL and URLString to WTFURL API
        https://bugs.webkit.org/show_bug.cgi?id=45078

        Currently there's no actual URL parsing going on, but this patch is a
        start to sketching out the API.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/url/api/ParsedURL.cpp: Added.
        (WTF::ParsedURL::ParsedURL):
        (WTF::ParsedURL::scheme):
        (WTF::ParsedURL::username):
        (WTF::ParsedURL::password):
        (WTF::ParsedURL::host):
        (WTF::ParsedURL::port):
        (WTF::ParsedURL::path):
        (WTF::ParsedURL::query):
        (WTF::ParsedURL::fragment):
        (WTF::ParsedURL::segment):
        * wtf/url/api/ParsedURL.h: Added.
        (WTF::ParsedURL::spec):
        * wtf/url/api/URLString.h: Added.
        (WTF::URLString::URLString):
        (WTF::URLString::string):

2010-09-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add WTFURL to the JavaScriptCore build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=45075

        Building code is good.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2010-09-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=43230
        <rdar://problem/8254215> REGRESSION: Memory leak within JSParser::JSParser

        One can't delete a ThreadSpecific object that has data in it. It's not even possible to
        enumerate data objects in all threads, much less destroy them from a thread that's destroying
        the ThreadSpecific.

        * parser/JSParser.cpp:
        (JSC::JSParser::JSParser):
        * runtime/JSGlobalData.h: 
        * wtf/WTFThreadData.cpp:
        (WTF::WTFThreadData::WTFThreadData):
        * wtf/WTFThreadData.h:
        (WTF::WTFThreadData::approximatedStackStart):
        Moved stack guard tracking from JSGlobalData to WTFThreadData.

        * wtf/ThreadSpecific.h: Made destructor unimplemented. It's dangerous, and we probably won't
        ever face a situation where we'd want to delete a ThreadSpecific object.

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

        Rubber stamped by Oliver Hunt.

        Ecma-262 15.11.1.1 states that if the argument is undefined then an
        Error object's message property should be set to the empty string.

        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        (JSC::ErrorInstance::create):
        * runtime/ErrorInstance.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):

2010-08-31  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::scavenge): Replaced somewhat-quirky code that
        mixed types with code that uses size_t.

        * wtf/TCPageMap.h: Removed names of unused arguments to avoid warning.

2010-08-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Isolate all GTK+ typedefs into one file
        https://bugs.webkit.org/show_bug.cgi?id=44900

        * GNUmakefile.am: Add GtkTypedefs.h to the source lists.
        * wtf/Platform.h: #include GtkTypedefs.h for the GTK+ build.
        * wtf/ThreadingPrimitives.h: Remove GTK+ typedefs.
        * wtf/gobject/GOwnPtr.h: Ditto.
        * wtf/gobject/GRefPtr.h: Ditto.
        * wtf/gtk/GtkTypedefs.h: Added.

2010-08-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Fix 'make dist' in preparation of the 1.3.3 release
        https://bugs.webkit.org/show_bug.cgi?id=44978

        * GNUmakefile.am: Adding missing headers to the sources list.

2010-08-31  Chao-ying Fu  <fu@mips.com>

        Reviewed by Oliver Hunt.

        Support emit_op_mod() for MIPS
        https://bugs.webkit.org/show_bug.cgi?id=42855

        This patch uses MIPS div instructions for op_mod to improve performance.

        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::div):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):

2010-08-31  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Darin Adler.

        Modify ASSERT_UNUSED and UNUSED_PARAM similar to Qt's Q_UNUSED.
        https://bugs.webkit.org/show_bug.cgi?id=44870

        * wtf/Assertions.h:
        * wtf/UnusedParam.h:

2010-08-31  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        JSC TimeoutChecker::didTimeOut overflows on ARM
        https://bugs.webkit.org/show_bug.cgi?id=38538

        Make getCPUTime() return values relative to the first call.
        The previous implementation relied on simply on currentTime(), which
        return a time since epoch and not a time since the thread started. This
        made the return value of getCPUTime() overflow on 32 bits.

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

2010-08-30  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        HISTORY_ALWAYS_ASYNC should be removed (history should always be async)
        https://bugs.webkit.org/show_bug.cgi?id=44315

        Remove ENABLE_HISTORY_ALWAYS_ASYNC #define.

        * wtf/Platform.h: 

2010-08-30  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Fix namespace for wtf/Complex.h and wtf/Vector3.h
        https://bugs.webkit.org/show_bug.cgi?id=44892

        * wtf/Complex.h:
        * wtf/Vector3.h:

2010-08-30  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Carlson.

        Strings returned by asciiDebug() should be NULL-terminated.
        https://bugs.webkit.org/show_bug.cgi?id=44866

        * wtf/text/WTFString.cpp:
        (asciiDebug):

2010-08-30  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Darin Adler.

        Refactor number parsing in the lexer
        https://bugs.webkit.org/show_bug.cgi?id=44104

        Number parsing was full of gotos, and needed a complete
        redesign to remove them (Only one remained). Furthermore
        integer arithmetic is empolyed for fast cases (= small
        integer numbers).

        * parser/Lexer.cpp:
        (JSC::Lexer::parseHex):
        (JSC::Lexer::parseOctal):
        (JSC::Lexer::parseDecimal):
        (JSC::Lexer::parseNumberAfterDecimalPoint):
        (JSC::Lexer::parseNumberAfterExponentIndicator):
        (JSC::Lexer::lex):
        * parser/Lexer.h:

2010-08-29  Darin Adler  <darin@apple.com>

        Fix Qt build.

        * wtf/unicode/glib/UnicodeMacrosFromICU.h: Added U_IS_BMP.
        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
        * wtf/unicode/wince/UnicodeWince.h: Ditto.

2010-08-29  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Port vprintf_stderr_common
        https://bugs.webkit.org/show_bug.cgi?id=33568

        Use BREW's DBGPRINTF to output debug messages.

        * wtf/Assertions.cpp:

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

        Reviewed by Oliver Hunt.

        Bug 44830 - In Array's prototype functyions we're incorrectly handing large index values

        We are in places casting doubles to unsigneds, and unsigneds to ints, without always check
        that the result is within bounds. This is problematic in the case of double-to-unsigned
        conversion because we should be saturating to array length.

        Also, the error return value from Array.splice should be [], not undefined.

        I don't see any security concerns here. These methods are spec'ed in such a way that they
        can be applied to non Array objects, so in all cases the (potentially bogus) indices are
        being passed to functions that will safely check accesses are within bounds.

        * runtime/ArrayPrototype.cpp:
        (JSC::argumentClampedIndexFromStartOrEnd):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncConcat):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSort):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        * runtime/JSValue.h:
        (JSC::JSValue::toUInt32):

2010-08-28  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Dan Bernstein.

        Add an ENABLE define for purgeable memory support
        https://bugs.webkit.org/show_bug.cgi?id=44777

        * wtf/Platform.h:

2010-08-27  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] NPAPI Plugin metadata should be cached, and loading a plugin should not require loading every plugin
        https://bugs.webkit.org/show_bug.cgi?id=43179

        Add ENABLE_NETSCAPE_PLUGIN_METADATA_CACHE flag to enable persistent
        NPAPI Plugin Cache. The flag is enabled by default.

        * wtf/Platform.h: Add ENABLE_NETSCAPE_PLUGIN_METADATA_CACHE

2010-07-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Add JavaScript API to allow a page to go fullscreen.
        rdar://problem/6867795
        https://bugs.webkit.org/show_bug.cgi?id=43099

        * wtf/Platform.h: Enable FULLSCREEN_API mode for the Mac (except iOS).

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

        Windows build fix pt 2.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Windows build fix pt 1.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Reviewed by Oliver Hunt.

        Bug 44745 - Number.toFixed/toExponential/toPrecision are inaccurate.

        These methods should be using a version of dtoa that can generate results accurate
        to the requested precision, whereas our version of dtoa is only currently able to
        support producing results sufficiently accurate to distinguish the value from any
        other IEEE-754 double precision number.

        This change has no impact on benchmarks we track.

        On microbenchmarks for these functions, this is a slight regression where a high
        precision is requested (dtoa now need to iterate further to generate a a greater
        number of digits), but with smaller precision values (hopefully more common) this
        improves performance, since it reduced the accurate of result dtoa is required,
        to produce, and removes the need to pre-round values before calling dtoa. 

        * JavaScriptCore.exp:
            doubleToStringInJavaScriptFormat renamed to numberToString

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
            doubleToStringInJavaScriptFormat renamed to numberToString

        * runtime/UString.cpp:
        (JSC::UString::number):
            doubleToStringInJavaScriptFormat renamed to numberToString

        * wtf/DecimalNumber.h:
        (WTF::DecimalNumber::DecimalNumber):
        (WTF::DecimalNumber::toStringDecimal):
        (WTF::DecimalNumber::toStringExponential):
            Remove all pre-rounding of values, instead call dtoa correctly.

        * wtf/dtoa.cpp:
        (WTF::dtoa):
        * wtf/dtoa.h:
            Reenable support for rounding to specific-figures/decimal-places in dtoa.
            Modify to remove unbiased rounding, provide ECMA required away-from-zero.
            Rewrite doubleToStringInJavaScriptFormat to use DecimalNumber, rename to
            numberToString.

2010-08-27  Chao-ying Fu  <fu@mips.com>

        Reviewed by Oliver Hunt.

        Byte alignment issue on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=29415

        MIPS accesses one byte at a time for now to avoid the help from the
        kernel to fix unaligned accesses.

        * wtf/text/AtomicString.cpp:
        (WebCore::equal):
        * wtf/text/StringHash.h:
        (WebCore::StringHash::equal):

2010-08-27  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Tor Arne Vestbø.

        Fix a couple of typos in comment.

        * bytecode/CodeBlock.h:

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

        Windows build fix.

        * wtf/dtoa.cpp:

2010-08-26  Gavin Barraclough  <baraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 44735 - Clean up dtoa.cpp
        Remove unused & unmaintained code paths, reformat code to match
        coding standard & use platform #defines from Platform.h directly.

        * wtf/dtoa.cpp:
        (WTF::storeInc):
        (WTF::multadd):
        (WTF::s2b):
        (WTF::lo0bits):
        (WTF::mult):
        (WTF::pow5mult):
        (WTF::lshift):
        (WTF::diff):
        (WTF::ulp):
        (WTF::b2d):
        (WTF::d2b):
        (WTF::ratio):
        (WTF::):
        (WTF::strtod):
        (WTF::quorem):
        (WTF::dtoa):

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

        Rubber Stamped by Oliver Hunt.

        Partially revert r65959. The toString changes regressed the v8 tests,
        but keep the toFixed/toExponential/toPrecision changes.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/NumberPrototype.cpp:
        * runtime/UString.cpp:
        (JSC::UString::number):
        * wtf/DecimalNumber.h:
        * wtf/dtoa.cpp:
        (WTF::append):
        (WTF::doubleToStringInJavaScriptFormat):
        * wtf/dtoa.h:
        * wtf/text/WTFString.cpp:
        * wtf/text/WTFString.h:

2010-08-26  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Remove the USE(GLES2_RENDERING) define and associated code
        https://bugs.webkit.org/show_bug.cgi?id=43761

        Remove WTF_USE_GLES2_RENDERING from the list of defines in chromium, it's unused.

        * wtf/Platform.h:

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

        Rolling out r64608, this regressed performance.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::LinkBuffer):
        (JSC::LinkBuffer::~LinkBuffer):
        (JSC::LinkBuffer::performFinalization):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::executableCopy):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::executableCopy):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::initGetByIdProto):
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::initGetByIdSelfList):
        (JSC::StructureStubInfo::initGetByIdProtoList):
        (JSC::StructureStubInfo::initPutByIdTransition):
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutablePool::systemAlloc):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::create):
        (JSC::ExecutableAllocator::ExecutableAllocator):
        (JSC::ExecutableAllocator::poolForSize):
        (JSC::ExecutablePool::ExecutablePool):
        (JSC::ExecutablePool::poolAllocate):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::allocInternal):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::JIT::compileGetByIdProto):
        (JSC::JIT::compileGetByIdSelfList):
        (JSC::JIT::compileGetByIdProtoList):
        (JSC::JIT::compileGetByIdChainList):
        (JSC::JIT::compileGetByIdChain):
        (JSC::JIT::compilePutByIdTransition):
        (JSC::JIT::compilePatchGetArrayLength):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::stringGetByValStubGenerator):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::stringGetByValStubGenerator):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC::getPolymorphicAccessStructureListSlot):
        * jit/JITStubs.h:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::finalize):
        * runtime/ExceptionHelpers.cpp:
        * runtime/ExceptionHelpers.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::EvalExecutable::reparseExceptionInfo):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::compile):

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

        Reviewed by Brady Eidson.

        Bug 44655 - Add debug only convenience methods to obtain a Vector<char> from a String/StringImpl.

        * wtf/text/WTFString.cpp:
        (asciiDebug):
            Return a Vector<char> containing the contents of a string as ASCII.

2010-08-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add PassOwnArrayPtr
        https://bugs.webkit.org/show_bug.cgi?id=44627

        * GNUmakefile.am:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        Add the new files.

        * wtf/Forward.h:
        Forward declare PassOwnArrayPtr.
        
        * wtf/OwnArrayPtr.h:
        Mimic the OwnPtr interface.

        * wtf/OwnArrayPtrCommon.h: Added.
        (WTF::deleteOwnedArrayPtr):
        Move delete function here so it can be shared by OwnArrayPtr and
        PassOwnArrayPtr.

        * wtf/PassOwnArrayPtr.h: Added.
        Mimic the PassOwnPtr interface.

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

        Reviewed by Gavin Barraclough.

        [JSC] JavaScript parsing error when loading Equifax web page
        https://bugs.webkit.org/show_bug.cgi?id=42900

        '-->' is ostensibly only meant to occur when there is only
        whitespace preceeding it on the line.  However firefox treats
        multiline comments as a space character, so they are allowed.
        One side effect of the firefox model is that any line terminators
        inside the multiline comment are ignored, so

            foo/*
            */-->

        is treated as

            foo -->

        and so '-->' will not be a comment in this case.  Happily this simply
        means that to fix this issue all we need to do is stop updating
        m_atLineStart when handling multiline comments.

        * parser/Lexer.cpp:
        (JSC::Lexer::lex):

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

        Reviewed by Geoffrey Garen.

        Improve overflow handling in StringImpl::Replace
        https://bugs.webkit.org/show_bug.cgi?id=42502
        <rdar://problem/8203794>

        Harden StringImpl::replace against overflow -- I can't see how this
        could be abused, but it's better to be safe than sorry.

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

2010-08-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] The GNUmakefile.am files contain a myriad of confusing preprocessor and compiler flag definitions
        https://bugs.webkit.org/show_bug.cgi?id=44624

        Clean up GNUmakefile.am.

        * GNUmakefile.am: Alphabetize the include order in javascriptcore_cppflags. Move
        a couple include lines from the top-level GNUmakefile.am.

2010-08-25  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Kent Tamura.

        Local variables 'k' and 'y' in s2b() in dtoa.cpp are computed but not used
        https://bugs.webkit.org/show_bug.cgi?id=29259

        Remove unused code in dtoa.cpp, spotted by Wan-Teh Chang.

        * wtf/dtoa.cpp:
        (WTF::s2b):

2010-08-25  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kevin Ollivier.

        [BREWMP] Add build system
        https://bugs.webkit.org/show_bug.cgi?id=44645

        Make waf script portable so that we can add more ports.

        * wscript:

2010-08-25  Michael Saboff  <msaboff@apple.com>

        Reviewed by Sam Weinig.

        Remove the single entry regular expression cache introduced as part of
        the fix for https://bugs.webkit.org/show_bug.cgi?id=41238.
        The performance problem in Dromaeo that initiated that bug is no 
        longer present. Dromaeo has been modified so that the regular
        expression tests are somewhat random and don't benefit from a
        single entry cache.

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

2010-08-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        Cairo and EFL port shouldn't depend on glib.
        https://bugs.webkit.org/show_bug.cgi?id=44354

        Replace GRefPtr with PlatformRefPtr. Keep GLib specific bits in
        GRefPtr.h.

        * GNUmakefile.am: Add PlatformRefPtr.h to the source list.
        * wtf/PlatformRefPtr.h: Migrated from GRefPtr.h.
        (WTF::PlatformRefPtr::PlatformRefPtr): Ditto.
        (WTF::PlatformRefPtr::~PlatformRefPtr): Ditto.
        (WTF::PlatformRefPtr::clear): Ditto.
        (WTF::PlatformRefPtr::get): Ditto.
        (WTF::PlatformRefPtr::operator*): Ditto.
        (WTF::PlatformRefPtr::operator->): Ditto.
        (WTF::PlatformRefPtr::operator!): Ditto.
        (WTF::PlatformRefPtr::operator UnspecifiedBoolType): Ditto.
        (WTF::PlatformRefPtr::hashTableDeletedValue): Ditto.
        (WTF::::operator): Ditto.
        (WTF::::swap): Ditto.
        (WTF::swap): Ditto.
        (WTF::operator==): Ditto.
        (WTF::operator!=): Ditto.
        (WTF::static_pointer_cast): Ditto.
        (WTF::const_pointer_cast): Ditto.
        (WTF::getPtr): Ditto.
        (WTF::adoptPlatformRef): Ditto.
        * wtf/gobject/GRefPtr.cpp: Changes to reflect new names.
        (WTF::refPlatformPtr):
        (WTF::derefPlatformPtr):
        * wtf/gobject/GRefPtr.h: Ditto.
        (WTF::refPlatformPtr):
        (WTF::derefPlatformPtr):

2010-08-25  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Alexey Proskuryakov.

        Remove dead code in JSGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=44615

        The recursion data member in the JSGlobalObject and its getter
        plus inc/dec methods seems to be unused, remove them.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObject.h:

2010-08-25  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Changed the initial and subsequent allocation of vector storage to
        Array()s. The changes are to limit sparse arrays to 100000 entries
        and fixed the sparse map to vector storage conversion to use the 
        minimum amount of memory needed to store the current number of entries.
        These changes address https://bugs.webkit.org/show_bug.cgi?id=43707

        * runtime/JSArray.cpp:
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::getNewVectorLength):

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

        Reviewed by Gavin Barraclough.

        Avoid increasing required alignment of target type warning
        https://bugs.webkit.org/show_bug.cgi?id=43963

        Fix platform independent alignment warnings.

        * wtf/ListHashSet.h:
        (WTF::ListHashSetNodeAllocator::pool):

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

        Reviewed by Gavin Barraclough.

        Enable truncated floating point feature on ARM
        https://bugs.webkit.org/show_bug.cgi?id=44233

        Enable truncated floating point feature with the help of VCVTR.S32.F64
        instruction. If VCVTR.S32.F64 can't fit the result into a 32-bit
        integer/register, it saturates at INT_MAX or INT_MIN. Testing this
        looks quicker than testing FPSCR for exception.

        Inspired by Jacob Bramley's patch from JaegerMonkey

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::):
        (JSC::ARMAssembler::cmn_r):
        (JSC::ARMAssembler::vcvtr_s32_f64_r):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerARM::branchTruncateDoubleToInt32):

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/DecimalNumber.h:
        (WTF::DecimalNumber::intPow10):
        * wtf/dtoa.cpp:
        * wtf/dtoa.h:

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

        Reviewed by Oliver Hunt.

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

        Number.toExponential/toFixed/toPrecision all contain a spaghetti of duplicated
        code & unnecessary complexity. Add a new DecimalNumber class to encapsulate
        double to string conversion, share the implementations of rounding &
        decimal-fraction/exponential formatting.

        * JavaScriptCore.exp:
            Update exports.

        * runtime/NumberPrototype.cpp:
        (JSC::toThisNumber):
        (JSC::getIntegerArgumentInRange):
            Helper methods used in implementing toExponential/toFixed/toString.
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToPrecision):
            Reimplemented using new DecimalNumber class.
            
        * runtime/UString.cpp:
        (JSC::UString::number):
            Updated to call numberToString.

        * wtf/DecimalNumber.h: Added.
        (WTF::):
        (WTF::DecimalNumber::DecimalNumber):
        (WTF::DecimalNumber::toStringDecimal):
        (WTF::DecimalNumber::toStringExponential):
        (WTF::DecimalNumber::sign):
        (WTF::DecimalNumber::exponent):
        (WTF::DecimalNumber::significand):
        (WTF::DecimalNumber::precision):
        (WTF::DecimalNumber::init):
        (WTF::DecimalNumber::isZero):
        (WTF::DecimalNumber::roundToPrecision):
            New class to perform double to string conversion.
            Has three constructors, which allow conversion with no rounding,
            rounding to significant-figures, or rounding to decimal-places,
            and two methods for formatting strings, either using decimal
            fraction or exponential encoding. Internal implementation uses
            pre-rounding of the values before calling dtoa rather than
            relying on dtoa to correctly round, which does not produce
            fully accurate results. Hopefully we can address this in the
            near future.

        * wtf/dtoa.cpp:
        (WTF::intPow10):
        * wtf/dtoa.h:
            intPow10 is used internally by DecimalNumber.
            
        * wtf/text/WTFString.cpp:
        (WTF::copyToString):
        (WTF::nanOrInfToString):
            Used internally in numberToString for NaN/Infinity handling.
        (WTF::numberToString):
            Added new method to convert doubles to strings.

        * wtf/text/WTFString.h:
            Added declaration for numberToString. This is here because
            we should switch over to using this for all double to string
            conversion in WebCore (see section 2.4.4.3 of the HTML5 spec).

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-08-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Beth Dakin.

        Make overflow guards in UString::utf8 explicit
        https://bugs.webkit.org/show_bug.cgi?id=44540

        Add an explicit overflow check prior to allocating our buffer,
        rather than implicitly relying on the guard in convertUTF16ToUTF8.

        * runtime/UString.cpp:
        (JSC::UString::utf8):

2010-08-24  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        [Symbian] Fix commit/decommit of system memory using RChunk

        Swap accidentially reversed start and m_base values for determining the
        offset within the RChunk.

        * wtf/PageReservation.h:
        (WTF::PageReservation::systemCommit):
        (WTF::PageReservation::systemDecommit):

2010-08-23  Patrick Gansterer  <paroga@paroga.com>

        Rubber-stamped by Gabor Loki.

        [WINCE] Buildfix for GeneratedJITStubs after r64818
        https://bugs.webkit.org/show_bug.cgi?id=44469

        Use " THUNK_RETURN_ADDRESS_OFFSET" instead of "#offset#".

        * jit/JITStubs.cpp:

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

        Reviewed by Darin Adler.

        [REGRESSION] Interpreter incorrectly excludes prototype chain when validating put_by_id_transition
        https://bugs.webkit.org/show_bug.cgi?id=44240
        <rdar://problem/8328995>

        Fix an error I introduced when cleaning up the interpreter side of the logic
        to prevent setters being called in object initialisers.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2010-08-23  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        Fixed case where a single character search string in a string.replace()
        did not properly handle back reference replacement.  The fix is to 
        check for a '$' as part of the check to see if we can execute the
        single character replace optimization.
        https://bugs.webkit.org/show_bug.cgi?id=44067

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):

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

        Reviewed by Gavin Barraclough.

        JSON.stringify is much slower than Firefox on particular pathological input
        https://bugs.webkit.org/show_bug.cgi?id=44456

        Make StringBuilder::reserveCapacity reserve additional space so we don't end up
        repeatedly copying the entire result string.

        * runtime/StringBuilder.h:
        (JSC::StringBuilder::append):
        (JSC::StringBuilder::reserveCapacity):

2010-08-23  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Handle blob resource.
        https://bugs.webkit.org/show_bug.cgi?id=43941

        * JavaScriptCore.exp: Add an export that is neede by BlobResourceHandle.

2010-08-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Geoffrey Garen.

        JSC: Move the static_cast into to(U)Int32 fast case
        https://bugs.webkit.org/show_bug.cgi?id=44037

        Do the static_cast<(u)int32_t> inline to avoid the function call overhead
        for easily converted values (within (u)int32_t range.)

        * runtime/JSValue.cpp:
        (JSC::toInt32SlowCase):
        (JSC::toUInt32SlowCase):
        * runtime/JSValue.h:
        (JSC::JSValue::toInt32):
        (JSC::JSValue::toUInt32):

2010-08-18  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Geoffrey Garen.

        REGRESSION(r58469): Math.pow() always returns double-backed JSValue which is extremely slow as array subscript
        https://bugs.webkit.org/show_bug.cgi?id=43742

        Add codegen for pow() to return Int32 values when possible.

        * jit/ThunkGenerators.cpp:
        (JSC::powThunkGenerator):

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

        Reviewed by Gavin Barraclough.

        The JITStackFrame is wrong using Thumb-2 JIT with JSVALUE32_64
        https://bugs.webkit.org/show_bug.cgi?id=43897

        A 64 bits wide member in a structure is aligned to 8 bytes on ARM by
        default, but this is not taken into account in the offset defines of
        JITStackFrame.

        * jit/JITStubs.cpp:
        * jit/JITStubs.h:

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

        Rubber stamped by Sam Weinig.

        Rename UString::substr to substringSharingImpl, add to WTF::String.
        Now WTF::String can do everything that JSC::UString can do!

        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::escapeQuotes):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::substitute):
        * parser/SourceProvider.h:
        (JSC::UStringSourceProvider::getRange):
        * runtime/FunctionPrototype.cpp:
        (JSC::insertSemicolonIfNeeded):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::parseInt):
        * runtime/JSONObject.cpp:
        (JSC::gap):
        (JSC::Stringifier::indent):
        (JSC::Stringifier::unindent):
        * runtime/JSString.cpp:
        (JSC::JSString::replaceCharacter):
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToPrecision):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        (JSC::trimString):
        * runtime/UString.cpp:
        (JSC::UString::substringSharingImpl):
        * runtime/UString.h:
        * wtf/text/WTFString.cpp:
        (WTF::String::substringSharingImpl):
        * wtf/text/WTFString.h:

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Reviewed by Sam Weinig.

        Bug 44146 - Remove toDouble/toUInt32 methods from UString.

        These methods all implement JavaScript language specific behaviour, and as such
        are not suited to being on a generic string object.  They are also inefficient
        and incorrectly used, refactor & cleanup.  Uses of these methods really divide
        out into two cases.

        ToNumber:
        Uses of toDouble from JSString and from parseFloat are implementing ecma's
        ToNumber conversion from strings (see ecma-262 9.3.1), so UString::toDouble
        should largely just be moved out to a global jsToNumber function.  ToNumber is
        capable of recognizing either decimal or hexadecimal numbers, but parseFloat
        should only recognize decimal values.  This is currently handled by testing for
        hexadecimal before calling toDouble, which should unnecessary - instead we can
        just split out the two parts to the grammar into separate functions. Also,
        strtod recognizes a set of literals (nan, inf, and infinity - all with any
        capitalization) - which are not defined by any of the specs we are implementing.
        To handle this we need to perform additional work in toDouble to convert the
        unsupported cases of infinities back to NaNs.  Instead we should simply remove
        support for this literals from strtod.  This should provide a more desirable
        behaviour for all clients of strtod.

        Indexed properties:
        Uses of the toStrictUInt32 methods are were all converting property names to
        indices, and all uses of toUInt32 were incorrect; in all cases we should have
        been calling toUInt32.  This error results in some incorrect behaviour in the
        DOM (accessing property "0 " of a NodeList should fail; it currently does not).
        Move this method onto Identifier (our canonical property name), and make it
        always perform a strict conversion. Add a layout test to check NodeList does
        convert indexed property names correctly.

        * JavaScriptCore.exp:
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        (JSC::Arguments::deleteProperty):
        * runtime/Identifier.cpp:
        (JSC::Identifier::toUInt32):
        * runtime/Identifier.h:
        (JSC::Identifier::toUInt32):
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::deleteProperty):
        * runtime/JSArray.h:
        (JSC::Identifier::toArrayIndex):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertySlot):
        (JSC::JSByteArray::getOwnPropertyDescriptor):
        (JSC::JSByteArray::put):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::isInfinity):
        (JSC::jsHexIntegerLiteral):
        (JSC::jsStrDecimalLiteral):
        (JSC::jsToNumber):
        (JSC::parseFloat):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/JSString.cpp:
        (JSC::JSString::getPrimitiveNumber):
        (JSC::JSString::toNumber):
        (JSC::JSString::getStringPropertyDescriptor):
        * runtime/JSString.h:
        (JSC::JSString::getStringPropertySlot):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::put):
        * runtime/StringObject.cpp:
        (JSC::StringObject::deleteProperty):
        * runtime/UString.cpp:
        * runtime/UString.h:
        * wtf/dtoa.cpp:
        (WTF::strtod):

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

        Reviewed by Sam Weinig.

        Bug 44099 - REGRESSION(r65468): Crashes in StringImpl::find

        Bug 44080 introuduced a couple of cases in which array bounds could be overrun.
        One of these was fixed in r65493, this patch fixes the other and address the
        concerns voiced in comment #6 by restructuring the loops to remove the code
        dupliction without introducing an additional if check.

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

2010-08-17  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Move the accelerated compositing build flag to the right place
        https://bugs.webkit.org/show_bug.cgi?id=43882

        * wtf/Platform.h:

2010-08-17  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Avoid uninitialized memory read in StringImpl::find().

        REGRESSION(r65468): Crashes in StringImpl::find
        https://bugs.webkit.org/show_bug.cgi?id=44099

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

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

        Rubber stamped by Sam Weinig

        Add VectorTraits to String & DefaultHash traits to UString to unify behaviour.

        * runtime/UString.h:
        (JSC::UStringHash::hash):
        (JSC::UStringHash::equal):
        (WTF::):
        * wtf/text/WTFString.h:
        (WTF::):

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

        Rubber stamped by Sam Weinig

        Remove unnecessary includes from UString.h, add new includes as necessary.

        * profiler/CallIdentifier.h:
        * profiler/ProfileNode.h:
        * runtime/DateConversion.cpp:
        * runtime/Identifier.h:
        (JSC::IdentifierRepHash::hash):
        * runtime/RegExpCache.h:
        * runtime/RegExpKey.h:
        * runtime/UString.cpp:
        (JSC::UString::substr):
        * runtime/UString.h:
        * wtf/text/WTFString.h:

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

        Reviewed by Sam Weinig

        Bug 44080 - String find/reverseFind methods need tidying up
        These methods have a couple of problems with their interface, and implementation.

        These methods take and int index, and return an int - however this is problematic
        since on 64-bit string indices may have a full 32-bit range.  This spills out into
        surrounding code, which unsafely casts string indices from unsigned to int. Code
        checking the result of these methods check for a mix of "== -1", "< 0", and
        "== notFound".  Clean this up by changing these methods to take an unsigned
        starting index, and return a size_t. with a failed match indicated by notFound.
        reverseFind also has a special meaning for the starting index argument, in that a
        negative index is interpreted as an offset back from the end of the string. Remove
        this functionality, in the (1!) case where it is used we should just calculate the
        offset by subtracting from the string's length.

        The implementation has a few problems too.  The code is not in webkit style, in
        using assorted abbreviations in variable names, and implementations of similar
        find methods with differing argument types were unnecessarily inconsistent. When
        find is passed const char* data the string would be handled as latin1 (zero
        extended to UTF-16) for all characters but the first; this is sign extended.
        Case-insensitive find is broken for unicode strings; the hashing optimization is
        not unicode safe, and could result in false negatives.

        Unify UString find methods to match String.

        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::escapeQuotes):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::substitute):
        * runtime/JSString.cpp:
        (JSC::JSString::replaceCharacter):
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        * runtime/RegExpKey.h:
        (JSC::RegExpKey::getFlagsValue):
        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferencesSlow):
        (JSC::substituteBackreferences):
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncIndexOf):
        (JSC::stringProtoFuncLastIndexOf):
        (JSC::stringProtoFuncSplit):
        * runtime/UString.cpp:
        * runtime/UString.h:
        (JSC::UString::find):
        (JSC::UString::reverseFind):
        * wtf/text/AtomicString.h:
        (WTF::AtomicString::find):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::find):
        (WTF::StringImpl::findCaseInsensitive):
        (WTF::StringImpl::reverseFind):
        (WTF::StringImpl::reverseFindCaseInsensitive):
        (WTF::StringImpl::endsWith):
        (WTF::StringImpl::replace):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::startsWith):
        * wtf/text/WTFString.cpp:
        (WTF::String::split):
        * wtf/text/WTFString.h:
        (WTF::String::find):
        (WTF::String::reverseFind):
        (WTF::String::findCaseInsensitive):
        (WTF::String::reverseFindCaseInsensitive):
        (WTF::String::contains):
        (WTF::find):
        (WTF::reverseFind):

2010-08-16  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, do not build WebCore as a convenience library as this leads to
        errors in the Win build w/export symbols and causes problems with DOM bindings
        debugging in gdb. 

        * wscript:

2010-08-16  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Build fix after r65366.

        * CMakeLists.txt: Use if (VAR) instead of if (${VAR}) to check if
        they're empty.
        * jsc/CMakeLists.txt: Ditto.
        * wtf/CMakeLists.txt: Ditto.

2010-08-15  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, don't build intermediate source in DerivedSources dir.

        * wscript:

2010-08-14  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kenneth Rohde Christiansen.

        [CMake] Add preprocessor detection for generator scripts
        https://bugs.webkit.org/show_bug.cgi?id=43984

        * CMakeLists.txt:

2010-08-14  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kenneth Rohde Christiansen.

        [CMake] Set target properties only if available
        https://bugs.webkit.org/show_bug.cgi?id=43978

        * CMakeLists.txt:
        * jsc/CMakeLists.txt:
        * wtf/CMakeLists.txt:

2010-08-13  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add CString to the list of forwards.

        * wtf/Forward.h:

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

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Rubber stamped by Sam Weinig.
        Switch String::/UString::ascii() to return a CString.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/SamplingTool.cpp:
        (JSC::SamplingTool::dump):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::dumpCaller):
        * jsc.cpp:
        (runWithScripts):
        (runInteractive):
        * runtime/Identifier.h:
        (JSC::Identifier::ascii):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        * runtime/UString.cpp:
        (JSC::UString::ascii):
        (JSC::UString::latin1):
        * runtime/UString.h:
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::asciiOLD):
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.cpp:
        (WTF::String::ascii):
        (WTF::String::latin1):
        * wtf/text/WTFString.h:

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

        Reviewed by Gavin Barraclough.

        Avoid increasing required alignment of target type warning on ARM
        https://bugs.webkit.org/show_bug.cgi?id=38045

        The reinterpret_cast<Type1*>([pointer to Type2]) expressions - where
        sizeof(Type1) > sizeof(Type2) - cause the following warning on ARM:
        increases required alignment of target type warnings.
        Casting the type of [pointer to Type2] object to void* bypasses the
        warning.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::putShortUnchecked):
        (JSC::AssemblerBuffer::putIntUnchecked):
        (JSC::AssemblerBuffer::putInt64Unchecked):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::grow):
        * jit/JITStubs.cpp:
        * pcre/pcre_compile.cpp:
        (jsRegExpCompile):
        * runtime/JSArray.cpp:
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::increaseVectorPrefixLength):
        (JSC::JSArray::shiftCount):
        (JSC::JSArray::unshiftCount):
        * wtf/FastMalloc.cpp:
        (WTF::PageHeapAllocator::New):
        (WTF::TCMalloc_Central_FreeList::Populate):
        * wtf/MD5.cpp:
        (WTF::reverseBytes):
        (WTF::MD5::addBytes):
        (WTF::MD5::checksum):
        * wtf/StdLibExtras.h:
        (isPointerTypeAlignmentOkay):
        (reinterpret_cast_ptr):
        * wtf/Vector.h:
        (WTF::VectorBuffer::inlineBuffer):
        * wtf/qt/StringQt.cpp:
        (WTF::String::String):

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

        Reviewed by Sam Weinig

        Unify UString::UTF8String() & String::utf8() methods,
        remove UString::cost() & make atArrayIndex a free function.

        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::constantName):
        (JSC::idName):
        (JSC::CodeBlock::registerName):
        (JSC::regexpName):
        (JSC::printGlobalResolveInfo):
        (JSC::printStructureStubInfo):
        (JSC::CodeBlock::printStructure):
        (JSC::CodeBlock::printStructures):
        * jsc.cpp:
        (functionPrint):
        (functionDebug):
        (runInteractive):
        (fillBufferWithContentsOfFile):
        * pcre/pcre_exec.cpp:
        (Histogram::~Histogram):
        * profiler/CallIdentifier.h:
        (JSC::CallIdentifier::c_str):
        * profiler/Profile.cpp:
        (JSC::Profile::debugPrintDataSampleStyle):
        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::willExecute):
        (JSC::ProfileGenerator::didExecute):
        * profiler/ProfileNode.cpp:
        (JSC::ProfileNode::debugPrintData):
        (JSC::ProfileNode::debugPrintDataSampleStyle):
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        (JSC::Arguments::deleteProperty):
        * runtime/DateConversion.cpp:
        (JSC::parseDate):
        * runtime/Identifier.h:
        (JSC::Identifier::toStrictUInt32):
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::deleteProperty):
        * runtime/JSArray.h:
        (JSC::toArrayIndex):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::parseInt):
        (JSC::globalFuncJSCPrint):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        * runtime/UString.cpp:
        (JSC::UString::toDouble):
        (JSC::putUTF8Triple):
        (JSC::UString::utf8):
        * runtime/UString.h:
        (JSC::UString::~UString):
        (JSC::UString::isNull):
        (JSC::UString::isEmpty):
        (JSC::UString::impl):
        * wtf/text/WTFString.cpp:
        (WTF::String::utf8):
        * wtf/text/WTFString.h:
        (WTF::String::~String):
        (WTF::String::swap):
        (WTF::String::isNull):
        (WTF::String::isEmpty):
        (WTF::String::impl):
        (WTF::String::length):
        (WTF::String::String):
        (WTF::String::isHashTableDeletedValue):

2010-08-12  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Gavin Barraclough.

        Refactoring the fpu code generator for the ARM port
        https://bugs.webkit.org/show_bug.cgi?id=43842

        Support up to 32 double precision registers, and the
        recent VFP instruction formats. This patch is mainly
        a style change which keeps the current functionality.

        * assembler/ARMAssembler.h:
        (JSC::ARMRegisters::):
        (JSC::ARMAssembler::):
        (JSC::ARMAssembler::emitInst):
        (JSC::ARMAssembler::emitDoublePrecisionInst):
        (JSC::ARMAssembler::emitSinglePrecisionInst):
        (JSC::ARMAssembler::vadd_f64_r):
        (JSC::ARMAssembler::vdiv_f64_r):
        (JSC::ARMAssembler::vsub_f64_r):
        (JSC::ARMAssembler::vmul_f64_r):
        (JSC::ARMAssembler::vcmp_f64_r):
        (JSC::ARMAssembler::vsqrt_f64_r):
        (JSC::ARMAssembler::vmov_vfp_r):
        (JSC::ARMAssembler::vmov_arm_r):
        (JSC::ARMAssembler::vcvt_f64_s32_r):
        (JSC::ARMAssembler::vcvt_s32_f64_r):
        (JSC::ARMAssembler::vmrs_apsr):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::addDouble):
        (JSC::MacroAssemblerARM::divDouble):
        (JSC::MacroAssemblerARM::subDouble):
        (JSC::MacroAssemblerARM::mulDouble):
        (JSC::MacroAssemblerARM::sqrtDouble):
        (JSC::MacroAssemblerARM::convertInt32ToDouble):
        (JSC::MacroAssemblerARM::branchDouble):
        (JSC::MacroAssemblerARM::branchConvertDoubleToInt32):

2010-08-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65295.
        http://trac.webkit.org/changeset/65295
        https://bugs.webkit.org/show_bug.cgi?id=43950

        It broke 4 sputnik tests (Requested by Ossy on #webkit).

        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::constantName):
        (JSC::idName):
        (JSC::CodeBlock::registerName):
        (JSC::regexpName):
        (JSC::printGlobalResolveInfo):
        (JSC::printStructureStubInfo):
        (JSC::CodeBlock::printStructure):
        (JSC::CodeBlock::printStructures):
        * jsc.cpp:
        (functionPrint):
        (functionDebug):
        (runInteractive):
        (fillBufferWithContentsOfFile):
        * pcre/pcre_exec.cpp:
        (Histogram::~Histogram):
        * profiler/CallIdentifier.h:
        (JSC::CallIdentifier::c_str):
        * profiler/Profile.cpp:
        (JSC::Profile::debugPrintDataSampleStyle):
        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::willExecute):
        (JSC::ProfileGenerator::didExecute):
        * profiler/ProfileNode.cpp:
        (JSC::ProfileNode::debugPrintData):
        (JSC::ProfileNode::debugPrintDataSampleStyle):
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        (JSC::Arguments::deleteProperty):
        * runtime/DateConversion.cpp:
        (JSC::parseDate):
        * runtime/Identifier.h:
        (JSC::Identifier::Identifier):
        (JSC::Identifier::toArrayIndex):
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::deleteProperty):
        * runtime/JSArray.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::parseInt):
        (JSC::globalFuncJSCPrint):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        * runtime/UString.cpp:
        (JSC::UString::toDouble):
        (JSC::UString::UTF8String):
        * runtime/UString.h:
        (JSC::UString::isNull):
        (JSC::UString::isEmpty):
        (JSC::UString::impl):
        (JSC::UString::cost):
        (JSC::UString::~UString):
        (JSC::UString::toArrayIndex):
        * wtf/text/WTFString.cpp:
        (WTF::String::utf8):
        * wtf/text/WTFString.h:
        (WTF::String::String):
        (WTF::String::isHashTableDeletedValue):
        (WTF::String::length):
        (WTF::String::operator[]):
        (WTF::String::isNull):
        (WTF::String::isEmpty):
        (WTF::String::impl):

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Reviewed by Sam Weinig

        Unify UString::UTF8String() & String::utf8() methods,
        remove UString::cost() & make atArrayIndex a free function.

        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::constantName):
        (JSC::idName):
        (JSC::CodeBlock::registerName):
        (JSC::regexpName):
        (JSC::printGlobalResolveInfo):
        (JSC::printStructureStubInfo):
        (JSC::CodeBlock::printStructure):
        (JSC::CodeBlock::printStructures):
        * jsc.cpp:
        (functionPrint):
        (functionDebug):
        (runInteractive):
        (fillBufferWithContentsOfFile):
        * pcre/pcre_exec.cpp:
        (Histogram::~Histogram):
        * profiler/CallIdentifier.h:
        (JSC::CallIdentifier::c_str):
        * profiler/Profile.cpp:
        (JSC::Profile::debugPrintDataSampleStyle):
        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::willExecute):
        (JSC::ProfileGenerator::didExecute):
        * profiler/ProfileNode.cpp:
        (JSC::ProfileNode::debugPrintData):
        (JSC::ProfileNode::debugPrintDataSampleStyle):
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        (JSC::Arguments::deleteProperty):
        * runtime/DateConversion.cpp:
        (JSC::parseDate):
        * runtime/Identifier.h:
        (JSC::Identifier::toStrictUInt32):
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::deleteProperty):
        * runtime/JSArray.h:
        (JSC::toArrayIndex):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::parseInt):
        (JSC::globalFuncJSCPrint):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        * runtime/UString.cpp:
        (JSC::UString::toDouble):
        (JSC::putUTF8Triple):
        (JSC::UString::utf8):
        * runtime/UString.h:
        (JSC::UString::~UString):
        (JSC::UString::isNull):
        (JSC::UString::isEmpty):
        (JSC::UString::impl):
        * wtf/text/WTFString.cpp:
        (WTF::String::utf8):
        * wtf/text/WTFString.h:
        (WTF::String::~String):
        (WTF::String::swap):
        (WTF::String::isNull):
        (WTF::String::isEmpty):
        (WTF::String::impl):
        (WTF::String::length):
        (WTF::String::String):
        (WTF::String::isHashTableDeletedValue):

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

        Eeerk! - revert accidentally committed changes in UString!

        * JavaScriptCore.exp:
        * runtime/UString.cpp:
        (JSC::UString::UString):
        * runtime/UString.h:

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

        Reviewed by Sam Weinig

        Change UString constructors to match those in WTF::String.
        This changes behaviour of UString((char*)0) to create null
        strings, akin to UString() rather than UString::empty().
        (This matches String).  Remove unused constructors from
        UString, and add null-terminated UTF-16 constructor, to
        match String.  Move String's constructor into the .cpp to
        match UString.

        * JavaScriptCore.exp:
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::calculatedFunctionName):
        * runtime/RegExpKey.h:
        (JSC::RegExpKey::RegExpKey):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::createSingleCharacterString):
        * runtime/UString.cpp:
        (JSC::UString::UString):
        * runtime/UString.h:
        (JSC::UString::UString):
        (JSC::UString::swap):
        (JSC::UString::adopt):
        (JSC::UString::operator[]):
        * wtf/text/WTFString.h:
        (WTF::String::String):
        (WTF::String::adopt):
        (WTF::String::operator[]):

2010-08-12  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (build fix).

        * runtime/UString.h: Removed unneccessary #include.

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

        Reviewed by Sam Weinig

        Revert changes to ALWAYS_INLINEness of a couple of functions in UString.
        This appears to have degraded performance.

        * runtime/UString.cpp:
        (JSC::UString::ascii):
        * runtime/UString.h:
        (JSC::UString::length):
        (JSC::UString::isEmpty):
        (JSC::UString::~UString):

2010-08-12  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Fix warnings: unknown conversion type character 'l' in format
        https://bugs.webkit.org/show_bug.cgi?id=43359

        Qt port doesn't call any printf in String::format(...), consequently
        using __attribute__((format(printf,m,n))) is incorrect and causes
        false positive warnings on Windows if you build with MinGW.

        Qt port calls QString::vsprintf(...) , which is platform
        independent, and handles %lli, %llu and %llx on all platforms.
        (http://trac.webkit.org/changeset/35712)

        * wtf/text/WTFString.h:

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

        Reviewed by Geoffrey Garen.

        Fix the array subscript is above array bounds warning in ByteArray on ARM.
        https://bugs.webkit.org/show_bug.cgi?id=43358

        The warning is very similar to this one: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37861

        * wtf/ByteArray.cpp:
        (WTF::ByteArray::create):

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

        Reviewed by Martin Robinson.

        [GTK] Use GSettings to save/restore Web Inspector settings
        https://bugs.webkit.org/show_bug.cgi?id=43512

        * wtf/gobject/GRefPtr.cpp: Added support for GVariant, used by our
        GSettings support.
        (WTF::refGPtr):
        (WTF::derefGPtr):
        * wtf/gobject/GRefPtr.h:

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

        Reviewed by Simon Hausmann.

        The scratch register should be saved in YARR with ARM JIT
        https://bugs.webkit.org/show_bug.cgi?id=43910

        Reported by Jocelyn Turcotte.

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateEnter):
        (JSC::Yarr::RegexGenerator::generateReturn):

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

        Windows build fix.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Forward.h:

2010-08-11  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Geoffrey Garen.

        Date("") should be an invalid date. For IE, Firefox and Chrome, Date("") is invalid date,
        which means isNaN(new Date("")) should return true.
        https://bugs.webkit.org/show_bug.cgi?id=43793
        Tests: fast/js/date-constructor.html

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

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

        Windows & !JIT build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/RegExp.cpp:
        (JSC::RegExp::match):

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

        Rubber stamp by sam weinig

        Touch a file to stop the bot rolling a bit change out!

        * runtime/UString.cpp:
        (JSC::UString::ascii):

2010-08-11  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for wx and WebDOM bindings, add CString classes to the list of forwards.

        * wtf/Forward.h:

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

        Rubber stamps by Darin Adler & Sam Weinig.

        Bug 43867 - Some UString cleanup

        Change JSC::UString data(), size(), and from(), to characters(), length(), and number() to match WTF::String.
        Move string concatenation methods to a new header to simplify down UString.h.  Remove is8Bit().

        * API/JSClassRef.cpp:
        (OpaqueJSClass::~OpaqueJSClass):
        (OpaqueJSClass::className):
        * API/OpaqueJSString.cpp:
        (OpaqueJSString::create):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::constantName):
        (JSC::idName):
        (JSC::CodeBlock::registerName):
        (JSC::regexpName):
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ResolveNode::emitBytecode):
        (JSC::FunctionCallResolveNode::emitBytecode):
        (JSC::ReadModifyResolveNode::emitBytecode):
        (JSC::processClauseList):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createRegex):
        * parser/ParserArena.h:
        (JSC::IdentifierArena::makeNumericIdentifier):
        * parser/SourceProvider.h:
        (JSC::UStringSourceProvider::data):
        (JSC::UStringSourceProvider::length):
        * profiler/Profiler.cpp:
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyNames):
        (JSC::Arguments::put):
        (JSC::Arguments::deleteProperty):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        * runtime/ExceptionHelpers.cpp:
        * runtime/FunctionConstructor.cpp:
        * runtime/FunctionPrototype.cpp:
        (JSC::insertSemicolonIfNeeded):
        * runtime/Identifier.h:
        (JSC::Identifier::characters):
        (JSC::Identifier::length):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::decode):
        (JSC::parseInt):
        (JSC::parseFloat):
        (JSC::globalFuncEscape):
        (JSC::globalFuncUnescape):
        * runtime/JSNumberCell.cpp:
        (JSC::JSNumberCell::toString):
        * runtime/JSONObject.cpp:
        (JSC::gap):
        (JSC::Stringifier::appendQuotedString):
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Stringifier::indent):
        (JSC::Stringifier::unindent):
        (JSC::Walker::walk):
        * runtime/JSString.cpp:
        (JSC::JSString::replaceCharacter):
        (JSC::JSString::getIndexSlowCase):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
        (JSC::RopeBuilder::fiberCount):
        (JSC::jsSingleCharacterSubstring):
        (JSC::jsNontrivialString):
        (JSC::JSString::getIndex):
        (JSC::jsString):
        (JSC::jsStringWithFinalizer):
        (JSC::jsSubstring):
        (JSC::jsOwnedString):
        * runtime/JSStringBuilder.h:
        (JSC::JSStringBuilder::append):
        * runtime/LiteralParser.h:
        (JSC::LiteralParser::Lexer::Lexer):
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToString):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToPrecision):
        * runtime/NumericStrings.h:
        (JSC::NumericStrings::add):
        (JSC::NumericStrings::lookupSmallString):
        * runtime/Operations.h:
        (JSC::jsString):
        * runtime/RegExp.cpp:
        (JSC::RegExp::match):
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::create):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getRightContext):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::match):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):
        * runtime/StringBuilder.h:
        (JSC::StringBuilder::append):
        * runtime/StringConcatenate.h: Copied from JavaScriptCore/runtime/UString.h.
        (JSC::):
        (JSC::sumWithOverflow):
        (JSC::tryMakeString):
        (JSC::makeString):
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertyNames):
        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferencesSlow):
        (JSC::localeCompare):
        (JSC::jsSpliceSubstringsWithSeparators):
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):
        (JSC::stringProtoFuncIndexOf):
        (JSC::stringProtoFuncLastIndexOf):
        (JSC::stringProtoFuncSlice):
        (JSC::stringProtoFuncSplit):
        (JSC::stringProtoFuncSubstr):
        (JSC::stringProtoFuncSubstring):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncLink):
        (JSC::trimString):
        * runtime/UString.cpp:
        (JSC::UString::number):
        (JSC::UString::ascii):
        (JSC::UString::operator[]):
        (JSC::UString::toDouble):
        (JSC::UString::find):
        (JSC::UString::rfind):
        (JSC::UString::substr):
        (JSC::operator==):
        (JSC::operator<):
        (JSC::operator>):
        (JSC::UString::UTF8String):
        * runtime/UString.h:
        (JSC::UString::UString):
        (JSC::UString::adopt):
        (JSC::UString::length):
        (JSC::UString::characters):
        (JSC::UString::isNull):
        (JSC::UString::isEmpty):
        (JSC::UString::impl):
        (JSC::UString::cost):
        (JSC::operator==):
        (JSC::operator!=):
        (JSC::codePointCompare):
        (JSC::UString::toArrayIndex):
        (JSC::IdentifierRepHash::hash):
        (WTF::):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::jitCompileRegex):
        * yarr/RegexParser.h:
        (JSC::Yarr::Parser::Parser):

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

        Qt build fix (ARMv7).

        Fix invalid conversion from int to Condition.
        Add ARMv7Assembler.cpp to JavaScriptCore.pro.

        * JavaScriptCore.pro:
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::):
        (JSC::ARMv7Assembler::JmpSrc::JmpSrc):

2010-08-11  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Geoffrey Garen.

        At collection time, we frequently want to mark a cell, while checking
        whether it was originally checked.  Previously, this was a get
        operation follwed by a set operation.  Fusing the two saves
        computation and gives a 0.5% sunspider speedup.

        * runtime/Collector.h:
        (JSC::CollectorBitmap::getset):
        (JSC::Heap::checkMarkCell):
        * runtime/JSArray.h:
        (JSC::MarkStack::drain):
        * runtime/JSCell.h:
        (JSC::MarkStack::append):

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

        Reviewed by Adam Roben.

        Improve vsprops copying for Windows build
        https://bugs.webkit.org/show_bug.cgi?id=41982

        When we detect a new SDK, always copy a new set of vsprops files.
        Previously, if someone updated their SDK after updating their sources,
        they could end up with out-of-date vsprops files.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:

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

        Reviewed by Sam Weinig.

        Add leakRef and clear to all RefPtr variants
        https://bugs.webkit.org/show_bug.cgi?id=42389

        * API/JSRetainPtr.h: Changed all uses of "template <...>" to instead do
        "template<...>". We should probably put this in the style guide and do it
        consitently. Fixed other minor style issues. Defined many of the inlined
        functions outside the class definition, to avoid style checker warnings
        about multiple statements on a single line and for slightly better clarity
        of the class definition itself. Renamed releaseRef to leakRef. Added a
        releaseRef that calls leakRef so we don't have to rename all callers oat
        once. Added a clear function.

        * wtf/PassRefPtr.h: Changed all uses of releaseRef to leakRef.
n
        * wtf/RefPtr.h: Changed all uses of "template <...>" to instead do
        "template<...>". Tidied up declarations and comments a bit.
         Changed all uses of releaseRef to leakRef.

        * wtf/RetainPtr.h: Changed all uses of "template <...>" to instead do
        "template<...>". Defined many of the inlined functions outside the class
        definition, to avoid style checker warnings about multiple statements on
        a single line and for slightly better clarity of the class definition itself.
        Renamed releaseRef to leakRef. Added a releaseRef that calls leakRef so we
        don't have to rename all callers at once. Added a clear function.

2010-08-10  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, reverting an unintentional change to a file submitted in r65108.

        * bytecode/CodeBlock.h:
        (JSC::binaryChop):

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

        Rubber stamped by Sam Weinig

        Bug 43817 - Remove UString::Rep
        UString::Rep has for a long time been replaced by UStringImpl (Rep
        remaining as a typedef).  UStringImpl has since been removed too
        (unified with StringImpl). Remove Rep, rename rep() to impl() and
        m_rep to m_impl.  Also add impl() method to Identifier, and rename
        its UString member from _ustring to m_string.

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::deletePrivateProperty):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertySlot):
        (JSC::::put):
        (JSC::::deleteProperty):
        (JSC::::getOwnPropertyNames):
        (JSC::::staticValueGetter):
        (JSC::::staticFunctionGetter):
        * API/JSClassRef.cpp:
        (tryCreateStringFromUTF8):
        (OpaqueJSClass::OpaqueJSClass):
        (OpaqueJSClass::~OpaqueJSClass):
        (OpaqueJSClassContextData::OpaqueJSClassContextData):
        * API/JSClassRef.h:
        * API/OpaqueJSString.cpp:
        (OpaqueJSString::ustring):
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):
        * bytecode/JumpTable.h:
        (JSC::StringJumpTable::offsetForValue):
        (JSC::StringJumpTable::ctiForValue):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addVar):
        (JSC::BytecodeGenerator::addGlobalVar):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::addParameter):
        (JSC::BytecodeGenerator::registerFor):
        (JSC::BytecodeGenerator::willResolveToArguments):
        (JSC::BytecodeGenerator::uncheckedRegisterForArguments):
        (JSC::BytecodeGenerator::constRegisterFor):
        (JSC::BytecodeGenerator::isLocal):
        (JSC::BytecodeGenerator::isLocalConstant):
        (JSC::BytecodeGenerator::addConstant):
        (JSC::BytecodeGenerator::emitLoad):
        (JSC::BytecodeGenerator::findScopedProperty):
        (JSC::keyForCharacterSwitch):
        (JSC::prepareJumpTableForStringSwitch):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::processClauseList):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * parser/JSParser.cpp:
        (JSC::JSParser::parseStrictObjectLiteral):
        * pcre/pcre_exec.cpp:
        (Histogram::add):
        * profiler/CallIdentifier.h:
        (JSC::CallIdentifier::Hash::hash):
        * profiler/Profile.cpp:
        * profiler/ProfileNode.cpp:
        (JSC::ProfileNode::debugPrintDataSampleStyle):
        * profiler/ProfileNode.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        * runtime/Identifier.cpp:
        (JSC::Identifier::equal):
        (JSC::IdentifierCStringTranslator::hash):
        (JSC::IdentifierCStringTranslator::equal):
        (JSC::IdentifierCStringTranslator::translate):
        (JSC::Identifier::add):
        (JSC::IdentifierUCharBufferTranslator::hash):
        (JSC::IdentifierUCharBufferTranslator::equal):
        (JSC::IdentifierUCharBufferTranslator::translate):
        (JSC::Identifier::addSlowCase):
        * runtime/Identifier.h:
        (JSC::Identifier::Identifier):
        (JSC::Identifier::ustring):
        (JSC::Identifier::impl):
        (JSC::Identifier::data):
        (JSC::Identifier::size):
        (JSC::Identifier::ascii):
        (JSC::Identifier::isNull):
        (JSC::Identifier::isEmpty):
        (JSC::Identifier::toUInt32):
        (JSC::Identifier::toStrictUInt32):
        (JSC::Identifier::toArrayIndex):
        (JSC::Identifier::toDouble):
        (JSC::Identifier::equal):
        (JSC::Identifier::add):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::displayName):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::displayName):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::addStaticGlobals):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        * runtime/JSString.h:
        (JSC::):
        (JSC::RopeBuilder::appendStringInConstruct):
        (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
        (JSC::jsSingleCharacterSubstring):
        (JSC::jsSubstring):
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::deleteProperty):
        (JSC::JSVariableObject::symbolTableGet):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::symbolTableGet):
        (JSC::JSVariableObject::symbolTablePut):
        (JSC::JSVariableObject::symbolTablePutWithAttributes):
        * runtime/Lookup.cpp:
        (JSC::HashTable::createTable):
        (JSC::HashTable::deleteTable):
        * runtime/Lookup.h:
        (JSC::HashEntry::initialize):
        (JSC::HashEntry::setKey):
        (JSC::HashEntry::key):
        (JSC::HashTable::entry):
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyMapEntry::PropertyMapEntry):
        * runtime/PropertyNameArray.cpp:
        (JSC::PropertyNameArray::add):
        * runtime/PropertyNameArray.h:
        (JSC::PropertyNameArray::add):
        (JSC::PropertyNameArray::addKnownUnique):
        * runtime/RegExp.cpp:
        (JSC::RegExp::match):
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::create):
        * runtime/RegExpKey.h:
        (JSC::RegExpKey::RegExpKey):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStringsStorage::rep):
        (JSC::SmallStrings::singleCharacterStringRep):
        * runtime/SmallStrings.h:
        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstringsWithSeparators):
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        * runtime/Structure.cpp:
        (JSC::Structure::~Structure):
        (JSC::Structure::despecifyDictionaryFunction):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::copyPropertyTable):
        (JSC::Structure::get):
        (JSC::Structure::despecifyFunction):
        (JSC::Structure::put):
        (JSC::Structure::hasTransition):
        (JSC::Structure::remove):
        (JSC::Structure::checkConsistency):
        * runtime/Structure.h:
        (JSC::Structure::get):
        (JSC::Structure::hasTransition):
        * runtime/StructureTransitionTable.h:
        * runtime/SymbolTable.h:
        * runtime/UString.cpp:
        (JSC::UString::UString):
        (JSC::UString::toStrictUInt32):
        (JSC::UString::substr):
        * runtime/UString.h:
        (JSC::UString::UString):
        (JSC::UString::adopt):
        (JSC::UString::data):
        (JSC::UString::size):
        (JSC::UString::isNull):
        (JSC::UString::isEmpty):
        (JSC::UString::impl):
        (JSC::UString::cost):
        (JSC::operator==):
        (JSC::codePointCompare):
        (JSC::IdentifierRepHash::hash):
        (WTF::):

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

        Bug 43816 - Remove UStringImpl
        The class was actually removed a long time ago, replaced by StringImpl.
        UStringImpl is just a typedef onto StringImpl.  Remove this.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):
        (JSC::JSString::replaceCharacter):
        * runtime/JSString.h:
        (JSC::RopeBuilder::RopeIterator::operator*):
        (JSC::RopeBuilder::JSString):
        (JSC::RopeBuilder::appendStringInConstruct):
        (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
        (JSC::jsSingleCharacterSubstring):
        (JSC::jsSubstring):
        * runtime/JSStringBuilder.h:
        (JSC::jsMakeNontrivialString):
        * runtime/RopeImpl.cpp:
        (JSC::RopeImpl::derefFibersNonRecursive):
        * runtime/RopeImpl.h:
        (JSC::RopeImpl::deref):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStringsStorage::SmallStringsStorage):
        * runtime/StringConstructor.cpp:
        (JSC::stringFromCharCodeSlowCase):
        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstringsWithSeparators):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncLink):
        * runtime/UString.cpp:
        (JSC::initializeUString):
        * runtime/UString.h:
        (JSC::UString::adopt):
        (JSC::tryMakeString):
        (JSC::makeString):
        * runtime/UStringImpl.h: Removed.

2010-08-10  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        Make FastMalloc more portable.
        https://bugs.webkit.org/show_bug.cgi?id=41790

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_Central_FreeList::Populate):
        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):

2010-08-10  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by David Levin.

        [WINCE] Buildfix for CE 6.0
        https://bugs.webkit.org/show_bug.cgi?id=43027

        CE 6.0 doesn't define localtime in the system include files.

        * wtf/Platform.h: Include ce_time.h on all OS(WINCE).

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

        Rubber stamped by Sam Weinig.

        Bug 43786 - Move AtomicStringHash from WebCore to WTF
        Also remove deprecated string headers from WebCore/platform/text.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/text/AtomicString.h:
        * wtf/text/AtomicStringHash.h: Copied from WebCore/platform/text/AtomicStringHash.h.

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

        Fix Qt/ARM again, this time including the other changed file.

        * jit/JIT.h:

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

        Fix Qt/ARM

        C++ overload resolution I stab at thee

        * jit/JITInlineMethods.h:
        (JSC::JIT::beginUninterruptedSequence):
        (JSC::JIT::endUninterruptedSequence):

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

        Reviewed by Gavin Barraclough.

        Allow an assembler/macroassembler to compact branches to more concise forms when linking
        https://bugs.webkit.org/show_bug.cgi?id=43745

        This patch makes it possible for an assembler to convert jumps into a different
        (presumably more efficient) form at link time.  Currently implemented in the
        ARMv7 JIT as that already had logic to delay linking of jumps until the end of
        compilation already.  The ARMv7 JIT chooses between either a 4 byte short jump
        or a full 32-bit offset (and rewrites ITTT instructions as appropriate), so does
        not yet produce the most compact form possible.  The general design of the linker
        should make it relatively simple to introduce new branch types with little effort,
        as the linker has no knowledge of the exact form of any of the branches.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/ARMv7Assembler.cpp: Added.
        (JSC::):
          Record jump sizes

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::LinkRecord::LinkRecord):
        (JSC::ARMv7Assembler::LinkRecord::from):
        (JSC::ARMv7Assembler::LinkRecord::setFrom):
        (JSC::ARMv7Assembler::LinkRecord::to):
        (JSC::ARMv7Assembler::LinkRecord::type):
        (JSC::ARMv7Assembler::LinkRecord::linkType):
        (JSC::ARMv7Assembler::LinkRecord::setLinkType):
          Encapsulate LinkRecord fields so we can compress the values somewhat

        (JSC::ARMv7Assembler::JmpSrc::JmpSrc):
          Need to record the jump type now

        (JSC::ARMv7Assembler::b):
        (JSC::ARMv7Assembler::blx):
        (JSC::ARMv7Assembler::bx):
          Need to pass the jump types

        (JSC::ARMv7Assembler::executableOffsetFor):
        (JSC::ARMv7Assembler::jumpSizeDelta):
        (JSC::ARMv7Assembler::linkRecordSourceComparator):
        (JSC::ARMv7Assembler::computeJumpType):
        (JSC::ARMv7Assembler::convertJumpTo):
        (JSC::ARMv7Assembler::recordLinkOffsets):
        (JSC::ARMv7Assembler::jumpsToLink):
        (JSC::ARMv7Assembler::link):
        (JSC::ARMv7Assembler::unlinkedCode):
          Helper functions for the linker

        (JSC::ARMv7Assembler::linkJump):
        (JSC::ARMv7Assembler::canBeShortJump):
        (JSC::ARMv7Assembler::linkLongJump):
        (JSC::ARMv7Assembler::linkShortJump):
        (JSC::ARMv7Assembler::linkJumpAbsolute):
           Moving code around for the various jump linking functions

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::beginUninterruptedSequence):
        (JSC::AbstractMacroAssembler::endUninterruptedSequence):
          We have to track uninterrupted sequences in any assembler that compacts
          branches as that's not something we're allowed to do in such sequences.
          AbstractMacroAssembler has a nop version of these functions as it makes the
          code elsewhere nicer.

        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::LinkBuffer):
        (JSC::LinkBuffer::link):
        (JSC::LinkBuffer::patch):
        (JSC::LinkBuffer::locationOf):
        (JSC::LinkBuffer::locationOfNearCall):
        (JSC::LinkBuffer::returnAddressOffset):
        (JSC::LinkBuffer::trampolineAt):
          Updated these functions to adjust for any changed offsets in the linked code

        (JSC::LinkBuffer::applyOffset):
          A helper function to deal with the now potentially moved labels

        (JSC::LinkBuffer::linkCode):
          The new and mighty linker function

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::MacroAssemblerARMv7):
        (JSC::MacroAssemblerARMv7::beginUninterruptedSequence):
        (JSC::MacroAssemblerARMv7::endUninterruptedSequence):
        (JSC::MacroAssemblerARMv7::jumpsToLink):
        (JSC::MacroAssemblerARMv7::unlinkedCode):
        (JSC::MacroAssemblerARMv7::computeJumpType):
        (JSC::MacroAssemblerARMv7::convertJumpTo):
        (JSC::MacroAssemblerARMv7::recordLinkOffsets):
        (JSC::MacroAssemblerARMv7::jumpSizeDelta):
        (JSC::MacroAssemblerARMv7::link):
        (JSC::MacroAssemblerARMv7::jump):
        (JSC::MacroAssemblerARMv7::branchMul32):
        (JSC::MacroAssemblerARMv7::breakpoint):
        (JSC::MacroAssemblerARMv7::nearCall):
        (JSC::MacroAssemblerARMv7::call):
        (JSC::MacroAssemblerARMv7::ret):
        (JSC::MacroAssemblerARMv7::tailRecursiveCall):
        (JSC::MacroAssemblerARMv7::executableOffsetFor):
        (JSC::MacroAssemblerARMv7::inUninterruptedSequence):
        (JSC::MacroAssemblerARMv7::makeJump):
        (JSC::MacroAssemblerARMv7::makeBranch):
           All branches need to pass on their type now

        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::returnLastBytes):
           We can't know ahead of time how much space will be necessary to
           hold the linked code if we're compacting branches, this new
           function allows us to return the unused bytes at the end of linking

        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::JIT::compile):
           The JIT class now needs to take a linker offset so that recompilation
           can generate the same jumps when using branch compaction.
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emitSlow_op_mod):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
          Update for new trampolineAt changes

        * wtf/FastMalloc.cpp:
        (WTF::TCMallocStats::):
        * wtf/Platform.h:

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

        Qt build fix III.

        * wtf/text/WTFString.h:

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

        Qt build fix.

        * wtf/qt/StringQt.cpp:

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

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Forward.h:

2010-08-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64938.
        http://trac.webkit.org/changeset/64938
        https://bugs.webkit.org/show_bug.cgi?id=43685

        Did not compile on several ports (Requested by abarth on
        #webkit).

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/AbstractMacroAssembler.h:
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::load32):
        (JSC::MacroAssemblerX86::store32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movl_rm):
        (JSC::X86Assembler::movl_mr):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate):
        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::):
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::initGetByIdProto):
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::):
        * jit/JIT.h:
        * jit/JITMarkObjects.cpp: Removed.
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::testPrototype):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::testPrototype):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITStubs.cpp:
        (JSC::setupPolymorphicProtoList):
        * wtf/Platform.h:

2010-08-07  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Geoffrey Garen.

        The JIT code contains a number of direct references to GC'd objects.
        When we have movable objects, these references will need to be
        updated.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::int32AtLocation):
        (JSC::AbstractMacroAssembler::pointerAtLocation):
        (JSC::AbstractMacroAssembler::jumpTarget):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::loadPtrWithPatch):
            Normally, loadPtr will optimize when the register is eax.  Since
            the slightly smaller instruction changes the offsets, it messes up
            our ability to repatch the code.  We added this new instruction
            that garuntees a constant size.
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::load32WithPatch):
            Changed load32 in the same way described above.
        (JSC::MacroAssemblerX86::load32):
            Moved the logic to optimize laod32 from movl_mr to load32
        (JSC::MacroAssemblerX86::store32):
            Moved the logic to optimize store32 from movl_rm to store32
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movl_rm):
        (JSC::X86Assembler::movl_mr):
        (JSC::X86Assembler::int32AtLocation):
        (JSC::X86Assembler::pointerAtLocation):
        (JSC::X86Assembler::jumpTarget):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate):
        * bytecode/Instruction.h:
            As described in StructureStubInfo.h, we needed to add additional
            fields to both StructureStubInfo and
            PolymorphicAccessStructureList so that we can determine the
            structure of the JITed code at patch time.
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::markAggregate):
            Added this function to mark the JITed code that correosponds to
            this structure stub info.
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::initGetByIdProto):
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::):
        * jit/JIT.h:
        * jit/JITMarkObjects.cpp: Added.
        (JSC::JIT::patchPrototypeStructureAddress):
        (JSC::JIT::patchGetDirectOffset):
        (JSC::JIT::markGetByIdProto):
        (JSC::JIT::markGetByIdChain):
        (JSC::JIT::markGetByIdProtoList):
        (JSC::JIT::markPutByIdTransition):
        (JSC::JIT::markGlobalObjectReference):
        * jit/JITPropertyAccess.cpp:
            Added asserts for the patch offsets.
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::testPrototype):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::testPrototype):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITStubs.cpp:
        (JSC::setupPolymorphicProtoList):
        * wtf/Platform.h:
            Added ENABLE_MOVABLE_GC_OBJECTS flag

2010-08-07  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Revert JSArray to point to the beginning of the contained ArrayStorage
        struct.  This is described in
        https://bugs.webkit.org/show_bug.cgi?id=43526.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::~JSArray):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::getOwnPropertyNames):
        (JSC::JSArray::getNewVectorLength):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::increaseVectorPrefixLength):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::shiftCount):
        (JSC::JSArray::unshiftCount):
        (JSC::JSArray::sortNumeric):
        (JSC::JSArray::sort):
        (JSC::JSArray::fillArgList):
        (JSC::JSArray::copyToRegisters):
        (JSC::JSArray::compactForSorting):
        (JSC::JSArray::subclassData):
        (JSC::JSArray::setSubclassData):
        (JSC::JSArray::checkConsistency):
        * runtime/JSArray.h:
        (JSC::JSArray::length):
        (JSC::JSArray::canGetIndex):
        (JSC::JSArray::getIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::uncheckedSetIndex):
        (JSC::JSArray::markChildrenDirect):

2010-08-07  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Add ENABLE(YARR) guard around JSGlobalData::m_regexAllocator
        https://bugs.webkit.org/show_bug.cgi?id=43399

        m_regexAllocator is used only by RegExp::compile which is guarded with ENABLE(YARR).

        * runtime/JSGlobalData.h:

2010-08-07  Patrick Roland Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        [Qt] Enable JIT on WinCE
        https://bugs.webkit.org/show_bug.cgi?id=43303

        Add ExtraCompiler for generating GeneratedJITStubs_MSVC.asm.

        * DerivedSources.pro:

2010-08-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Created a separate SimpleFontData constructor exclusively for SVG fonts and moved the CTFontRef
        from SimpleFontData to FontPlatformData.
        https://bugs.webkit.org/show_bug.cgi?id=43674

        * wtf/Platform.h: Moved definitions of WTF_USE_CORE_TEXT and WTF_USE_ATSUI here from WebCore/config.h.

2010-08-07  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Eric Seidel.

        Bitmap.h has no default constructor
        https://bugs.webkit.org/show_bug.cgi?id=43619

        Without a constructor, the initial bits of the Bitmap class
        are undefinied. If only a few, or zero bits are 0, the memory
        area provided by AlignedMemoryAllocator can be easly exhausted.

        Csaba Osztrogonác helped to find this bug.

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

2010-08-06  Rafael Antognolli  <antognolli@profusion.mobi>

        [EFL] Build fix.

        * CMakeLists.txt: add runtime/CGHandle.cpp.

2010-08-06  Jessie Berlin  <jberlin@apple.com>

        Roll out http://trac.webkit.org/changeset/64801, which broke the Safari Windows Build.
        Unreviewed.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Forward.h:

2010-08-06  Jessie Berlin  <jberlin@apple.com>

        Windows Build Fix (continued). Unreviewed.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-08-06  Jessie Berlin  <jberlin@apple.com>

        Windows Build Fix. Unreviewed.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Add GCHandle.h and GCHandle.cpp.

2010-08-06  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Geoffrey Garen.

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

        WeakGCPtr's should instead of directly pointing to the GC'd object
        should be directed to an array of pointers that can be updated for
        movable objects.

        * Android.mk:
        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/Collector.cpp:
        (JSC::Heap::destroy):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlock):
        (JSC::Heap::updateWeakGCHandles):
        (JSC::WeakGCHandlePool::update):
        (JSC::Heap::addWeakGCHandle):
        (JSC::Heap::markRoots):
        * runtime/Collector.h:
        (JSC::Heap::weakGCHandlePool):
        * runtime/GCHandle.cpp: Added.
        (JSC::WeakGCHandle::pool):
        (JSC::WeakGCHandlePool::WeakGCHandlePool):
        (JSC::WeakGCHandlePool::allocate):
        (JSC::WeakGCHandlePool::free):
        (JSC::WeakGCHandlePool::operator new):
        * runtime/GCHandle.h: Added.
        (JSC::WeakGCHandle::isValidPtr):
        (JSC::WeakGCHandle::isPtr):
        (JSC::WeakGCHandle::isNext):
        (JSC::WeakGCHandle::invalidate):
        (JSC::WeakGCHandle::get):
        (JSC::WeakGCHandle::set):
        (JSC::WeakGCHandle::getNextInFreeList):
        (JSC::WeakGCHandle::setNextInFreeList):
        (JSC::WeakGCHandlePool::isFull):
        * runtime/WeakGCPtr.h:
        (JSC::WeakGCPtr::WeakGCPtr):
        (JSC::WeakGCPtr::~WeakGCPtr):
        (JSC::WeakGCPtr::get):
        (JSC::WeakGCPtr::clear):
        (JSC::WeakGCPtr::assign):
        (JSC::get):

2010-08-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Fix warnings about difference in symbol visiblity on Mac OS X

        * jsc.pro:

2010-08-06  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Darin Adler.

        Refactor identifier parsing in lexer
        https://bugs.webkit.org/show_bug.cgi?id=41845

        The code is refactored to avoid gotos. The new code
        has the same performance as the old one.

        SunSpider --parse-only: no change (from 34.0ms to 33.6ms)
        SunSpider: no change (from 523.2ms to 523.5ms)

        * parser/Lexer.cpp:
        (JSC::Lexer::parseIdent):
        (JSC::Lexer::lex):
        * parser/Lexer.h:

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

        Reviewed by Gavin Barraclough.

        The ARM JIT does not support JSValue32_64 with RVCT
        https://bugs.webkit.org/show_bug.cgi?id=43411

        JSValue32_64 is enabled for RVCT by default.

        * create_jit_stubs:
        * jit/JITStubs.cpp:
        (JSC::ctiTrampoline):
        (JSC::ctiVMThrowTrampoline):
        (JSC::ctiOpThrowNotCaught):
        * wtf/Platform.h:

2010-08-05  Chao-ying Fu  <fu@mips.com>

        Reviewed by Darin Adler.

        Define WTF_USE_ARENA_ALLOC_ALIGNMENT_INTEGER for MIPS
        https://bugs.webkit.org/show_bug.cgi?id=43514

        MIPS needs to define WTF_USE_ARENA_ALLOC_ALIGNMENT_INTEGER, so that
        RenderArena::allocate() can return 8-byte aligned memory to avoid
        exceptions on sdc1/ldc1.

        * wtf/Platform.h:

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

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Forward.h:

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

        Reviewed by Mark Rowe.

        Fixed leak seen on buildbot.

        * runtime/GCActivityCallbackCF.cpp:
        (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback):
        (JSC::DefaultGCActivityCallback::~DefaultGCActivityCallback):
        (JSC::DefaultGCActivityCallback::operator()): Make out timer a RetainPtr,
        since anything less would be uncivilized.

2010-08-05  Andy Estes  <aestes@apple.com>

        Reviewed by David Kilzer.

        Rename iOS-related OS and PLATFORM macros.
        https://bugs.webkit.org/show_bug.cgi?id=43493
        
        Rename WTF_OS_IPHONE_OS to WTF_OS_IOS, WTF_PLATFORM_IPHONE to
        WTF_PLATFORM_IOS, and WTF_PLATFORM_IPHONE_SIMULATOR to
        WTF_PLATFORM_IOS_SIMULATOR.

        * jit/ExecutableAllocator.h:
        * jit/JITStubs.cpp:
        * profiler/ProfilerServer.mm:
        (-[ProfilerServer init]):
        * wtf/FastMalloc.cpp:
        (WTF::TCMallocStats::):
        * wtf/Platform.h:
        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::Collator::userDefault):

2010-08-05  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Darin Adler.

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

        Currently, the global object is being embedded in the JavaScriptCore
        bytecode, however since the global object is the same for all opcodes
        in a code block, we can have the global object just be a member of the
        associated code block.

        Additionally, I added an assert inside of emitOpcode that verifies
        that the last generated opcode was of the correct length.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::derefStructures):
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::globalObject):
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        (JSC::ProgramCodeBlock::ProgramCodeBlock):
        (JSC::EvalCodeBlock::EvalCodeBlock):
        (JSC::FunctionCodeBlock::FunctionCodeBlock):
        * bytecode/Opcode.h:
        (JSC::opcodeLength):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitOpcode):
            Added an assert to check that the last generated opcode is the
            correct length.
        (JSC::BytecodeGenerator::rewindBinaryOp):
            Changed the last opcode to op_end since the length will no longer
            be correct.
        (JSC::BytecodeGenerator::rewindUnaryOp):
            Changed the last opcode to op_end since the length will no longer
            be correct.
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitGetScopedVar):
        (JSC::BytecodeGenerator::emitPutScopedVar):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        * bytecompiler/BytecodeGenerator.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::privateExecute):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_get_global_var):
        (JSC::JIT::emit_op_put_global_var):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_resolve_global_dynamic):
        (JSC::JIT::emitSlow_op_resolve_global_dynamic):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_get_global_var):
        (JSC::JIT::emit_op_put_global_var):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emitSlow_op_resolve_global):
        * jit/JITStubs.cpp:
        (JSC::cti_op_resolve_global):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        (JSC::FunctionExecutable::reparseExceptionInfo):

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

        Reviewed by Sam Weinig.

        Bug 43185 - Switch RegisterFile over to use PageAllocation

        Remove platform-specific memory allocation code.

        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::~RegisterFile):
        (JSC::RegisterFile::releaseExcessCapacity):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::grow):
        (JSC::RegisterFile::checkAllocatedOkay):
        * wtf/PageAllocation.cpp:
        (WTF::PageAllocation::lastError):
        * wtf/PageAllocation.h:
        (WTF::PageAllocation::allocate):
        (WTF::PageAllocation::allocateAt):
        (WTF::PageAllocation::allocateAligned):
        (WTF::PageAllocation::pageSize):
        (WTF::PageAllocation::isPageAligned):
        (WTF::PageAllocation::isPowerOfTwo):
        * wtf/PageReservation.h:
        (WTF::PageReservation::commit):
        (WTF::PageReservation::decommit):
        (WTF::PageReservation::reserve):
        (WTF::PageReservation::reserveAt):

2010-08-05  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=43401 where array 
        content aren't properly initialized as part of unshift.  

        * runtime/JSArray.cpp:
        (JSC::JSArray::unshiftCount):

2010-08-05  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Unify blob related feature defines to ENABLE(BLOB).
        https://bugs.webkit.org/show_bug.cgi?id=43081

        * Configurations/FeatureDefines.xcconfig:

2010-08-05  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Remove GHashTable left-overs. GHashTable is ref-counted, and is
        correctly supported by GRefPtr.

        * wtf/gobject/GOwnPtr.h:

2010-08-05  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed.

        Typo fix that makes distcheck happy.

        * GNUmakefile.am:

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

        Reviewed by Oliver Hunt and Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=43461
        Invalid NaN parsing
        
        * wtf/dtoa.cpp: Turn off the dtoa feature that allows you to specify a
        non-standard NaN representation, since our NaN encoding assumes that all
        true NaNs have the standard bit pattern.

        * API/JSValueRef.cpp:
        (JSValueMakeNumber): Don't allow an API client to accidentally specify
        a non-standard NaN either.

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

        Windows build fix part II.

        * wtf/PageReservation.h:
        (WTF::PageReservation::systemReserve):

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

        Windows build fix.

        * wtf/PageReservation.h:
        (WTF::PageReservation::systemReserve):

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

        Build fix - add new header to !Mac projects.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:

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

        Reviewed by Sam Weinig.

        Bug 43515 - Fix small design issues with PageAllocation, split out PageReservation.

        The PageAllocation class has a number of issues:
        * Changes in bug #43269 accidentally switched SYMBIAN over to use malloc/free to allocate
          blocks of memory for the GC heap, instead of allocating RChunks.  Revert this change in
          behaviour.
        * In order for PageAllocation to work correctly on WinCE we should be decommitting memory
          before deallocating.  In order to simplify understanding the expected state at deallocate,
          split behaviour out into PageAllocation and PageReservation classes.  Require that all
          memory be decommitted before calling deallocate on a PageReservation, add asserts to
          enforce this.
        * add many missing asserts.
        * inline more functions.
        * remove ability to create sub-PageAllocations from an existing PageAllocations object -
          this presented an interface that would allow sub regions to be deallocated, which would
          not have provided expected behaviour.
        * remove writable/executable arguments to commit, this value can be cached at the point
          the memory is reserved.
        * remove writable/executable arguments to allocateAligned, protection other than RW is not
          supported.
        * add missing checks for overflow & failed allocation to mmap path through allocateAligned.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::intializePageSize):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::Allocation::Allocation):
        (JSC::ExecutablePool::Allocation::base):
        (JSC::ExecutablePool::Allocation::size):
        (JSC::ExecutablePool::Allocation::operator!):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::reuse):
        (JSC::FixedVMPoolAllocator::coalesceFreeSpace):
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
        (JSC::FixedVMPoolAllocator::alloc):
        (JSC::FixedVMPoolAllocator::free):
        (JSC::FixedVMPoolAllocator::allocInternal):
        * runtime/AlignedMemoryAllocator.h:
        (JSC::::allocate):
        (JSC::::AlignedMemoryAllocator):
        * runtime/Collector.cpp:
        (JSC::Heap::allocateBlock):
        * runtime/Collector.h:
        * wtf/PageAllocation.cpp:
        * wtf/PageAllocation.h:
        (WTF::PageAllocation::operator!):
        (WTF::PageAllocation::allocate):
        (WTF::PageAllocation::allocateAt):
        (WTF::PageAllocation::allocateAligned):
        (WTF::PageAllocation::deallocate):
        (WTF::PageAllocation::pageSize):
        (WTF::PageAllocation::systemAllocate):
        (WTF::PageAllocation::systemAllocateAt):
        (WTF::PageAllocation::systemAllocateAligned):
        (WTF::PageAllocation::systemDeallocate):
        (WTF::PageAllocation::systemPageSize):
        * wtf/PageReservation.h: Copied from JavaScriptCore/wtf/PageAllocation.h.
        (WTF::PageReservation::PageReservation):
        (WTF::PageReservation::commit):
        (WTF::PageReservation::decommit):
        (WTF::PageReservation::reserve):
        (WTF::PageReservation::reserveAt):
        (WTF::PageReservation::deallocate):
        (WTF::PageReservation::systemCommit):
        (WTF::PageReservation::systemDecommit):
        (WTF::PageReservation::systemReserve):
        (WTF::PageReservation::systemReserveAt):
        * wtf/Platform.h:

2010-08-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64655.
        http://trac.webkit.org/changeset/64655
        https://bugs.webkit.org/show_bug.cgi?id=43496

        JavaScriptCore references patch seems to have caused
        regressions in QT and GTK builds (Requested by nlawrence on
        #webkit).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate):
        * runtime/Collector.cpp:
        (JSC::Heap::markConservatively):
        * runtime/JSCell.h:
        (JSC::JSValue::asCell):
        (JSC::MarkStack::append):
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::object):
        * runtime/JSObject.h:
        (JSC::JSObject::prototype):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::markChildren):
        * runtime/JSValue.h:
        (JSC::JSValue::):
        (JSC::JSValue::JSValue):
        (JSC::JSValue::asCell):
        * runtime/MarkStack.h:
        * runtime/NativeErrorConstructor.cpp:
        * runtime/NativeErrorConstructor.h:
        * runtime/Structure.h:
        (JSC::Structure::storedPrototype):

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

        Rubber stamped by Sam Weinig.

        Enable JSVALUE64 for CPU(PPC64).
        Basic browsing seems to work.

        * wtf/Platform.h:

2010-08-04  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Darin Adler.

        Refactoring MarkStack::append to take a reference.  This is in
        preparation for movable objects when we will need to update pointers.
        http://bugs.webkit.org/show_bug.cgi?id=41177

        Unless otherwise noted, all changes are to either return by reference
        or pass a reference to MarkStack::append.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::markAggregate):
        * runtime/Collector.cpp:
        (JSC::Heap::markConservatively):
            Added a temporary variable to prevent marking from changing an
            unknown value on the stack
        * runtime/JSCell.h:
        (JSC::JSValue::asCell):
        (JSC::MarkStack::append):
        (JSC::MarkStack::appendInternal):
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::object):
        * runtime/JSObject.h:
        (JSC::JSObject::prototype):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::markChildren):
        * runtime/JSValue.h:
        (JSC::JSValue::JSValue):
        (JSC::JSValue::asCell):
        * runtime/MarkStack.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::createStructure):
            Changed the structure flags to include a custom markChildren.
        (JSC::NativeErrorConstructor::markChildren):
            Update the prototype of the stored structure.
        * runtime/NativeErrorConstructor.h:
            Added structure flags.
        * runtime/Structure.h:
        (JSC::Structure::storedPrototype):

2010-08-03  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Oliver Hunt.

        Tightened up some get_by_id_chain* code generation
        https://bugs.webkit.org/show_bug.cgi?id=40935

        This is in the style of
        https://bugs.webkit.org/show_bug.cgi?id=30539, and changed code to
        call accessor functions when it was not necessary to directly access
        the private variables.

        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::testPrototype):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::testPrototype):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):

2010-08-03  Adam Roben  <aroben@apple.com>

        Turn on PLATFORM_STRATEGIES on Windows

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

        Reviewed by Anders Carlsson.

        * wtf/Platform.h:

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

        Reviewed by Geoffrey Garen.

        Enable JSValue32_64 for GCC on ARM by default
        https://bugs.webkit.org/show_bug.cgi?id=43410

        * wtf/Platform.h:

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

        Speculative windows build fix.

        * wtf/Bitmap.h:

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

        Build fix following r64624.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/PageAllocation.h:

2010-08-03  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Gavin Barraclough.

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

        Added new allocateAligned methods to PageAllocation.  In order to
        prevent a regress in performance, the function needs to be inlined.

        Additionally, I ported the symbian block allocator to use
        PageAllocation and added a new WTF::Bitmap class to support this.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/AlignedMemoryAllocator.h: Added.
        (JSC::AlignedMemory::deallocate):
        (JSC::AlignedMemory::base):
        (JSC::AlignedMemory::AlignedMemory):
        (JSC::AlignedMemoryAllocator::destroy):
        (JSC::AlignedMemoryAllocator::allocate):
        (JSC::AlignedMemoryAllocator::AlignedMemoryAllocator):
        (JSC::AlignedMemoryAllocator::~AlignedMemoryAllocator):
        (JSC::AlignedMemoryAllocator::free):
        * runtime/Collector.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlock):
        (JSC::Heap::freeBlocks):
        (JSC::Heap::allocate):
        (JSC::Heap::shrinkBlocks):
        (JSC::Heap::markConservatively):
        (JSC::Heap::clearMarkBits):
        (JSC::Heap::markedCells):
        * runtime/Collector.h:
        (JSC::CollectorHeap::collectorBlock):
        * runtime/CollectorHeapIterator.h:
        (JSC::CollectorHeapIterator::operator*):
        (JSC::LiveObjectIterator::operator++):
        (JSC::DeadObjectIterator::operator++):
        * wtf/Bitmap.h: Added.
        (WTF::Bitmap::get):
        (WTF::Bitmap::set):
        (WTF::Bitmap::clear):
        (WTF::Bitmap::clearAll):
        (WTF::Bitmap::advanceToNextFreeBit):
        (WTF::Bitmap::count):
        (WTF::Bitmap::isEmpty):
        (WTF::Bitmap::isFull):
        * wtf/PageAllocation.h:
        (WTF::PageAllocation::operator UnspecifiedBoolType):
        (WTF::PageAllocation::allocateAligned):
        (WTF::PageAllocation::reserveAligned):
        * wtf/Platform.h:
        * wtf/symbian: Removed.
        * wtf/symbian/BlockAllocatorSymbian.cpp: Removed.
        * wtf/symbian/BlockAllocatorSymbian.h: Removed.

2010-08-03  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=43314.  The prior code
        was using the wrong "length" value to move array contents when adding
        space to the beginning of an array for an unshift() or similar
        operation.  Instead of using m_vectorLength, the length of the
        allocated JSValue array, the code was using m_length, the declared
        length of the array.  These two values do not need to match.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSArray.cpp:
        (JSC::JSArray::increaseVectorPrefixLength):

2010-08-03  Chao-ying Fu  <fu@mips.com>

        Reviewed by Gavin Barraclough.

        Fix following https://bugs.webkit.org/show_bug.cgi?id=43089
        (accidentally inverted a compiler version check).

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

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

        Reviewed by Gavin Barraclough.

        Implement DEFINE_STUB_FUNCTION for WinCE.
        https://bugs.webkit.org/show_bug.cgi?id=34953

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

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

        Reviewed by Oliver Hunt.

        Bug 43390 - Do not CRASH if we run out of room for jit code.

        Change the ExecutableAllocator implementations not to crash, and to return 0 if memory cannot be allocated.
        The assemblers should pass this through without trying to use it in executableCopy.
        Change the LinkBuffer to handle this, and to provide an allocationSuccessful() method to test for this.

        Change the JIT to throw an exception if allocation fails.
        Make JIT optimizations fail gracefully if memory cannot be allocated (use non-optimized path).
        Change YARR JIT to fallback to PCRE 

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::executableCopy):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::allocationSuccessful):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::executableCopy):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::executableCopy):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::initGetByIdProto):
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::initGetByIdSelfList):
        (JSC::StructureStubInfo::initGetByIdProtoList):
        (JSC::StructureStubInfo::initPutByIdTransition):
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutablePool::systemAlloc):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::allocInternal):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::JIT::compileGetByIdProto):
        (JSC::JIT::compileGetByIdSelfList):
        (JSC::JIT::compileGetByIdProtoList):
        (JSC::JIT::compileGetByIdChainList):
        (JSC::JIT::compileGetByIdChain):
        (JSC::JIT::compilePutByIdTransition):
        (JSC::JIT::compilePatchGetArrayLength):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::stringGetByValStubGenerator):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::stringGetByValStubGenerator):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC::setupPolymorphicProtoList):
        * jit/JITStubs.h:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::finalize):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createOutOfMemoryError):
        * runtime/ExceptionHelpers.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::EvalExecutable::reparseExceptionInfo):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::compile):

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

        Reviewed by Oliver Hunt.

        Fixed a crash seen on the GTK 64bit buildbot.
        
        When JSArray is allocated for the vptr stealing hack, it's not allocated
        in the heap, so the JSArray constructor can't safely call Heap::heap().
        
        Since this was subtle enough to confuse smart people, I've changed JSArray
        to have an explicit vptr stealing constructor.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        * runtime/JSArray.h:
        (JSC::JSArray::):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs):

2010-08-03  Alex Milowski  <alex@milowski.com>

        Reviewed by Beth Dakin.

        Changed the ENABLE_MATHML value to enable MathML by default.

        * Configurations/FeatureDefines.xcconfig:

2010-08-03  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Change to keep returned pointer from malloc family functions to
        quiet memory leak detect.  The pointer is saved in the new m_allocBase
        member of the ArrayStorage structure.  This fixes the issue found in 
        https://bugs.webkit.org/show_bug.cgi?id=43229.

        As part of this change, we use m_allocBase when reallocating and
        freeing the memory associated with ArrayStorage.

        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::~JSArray):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::increaseVectorPrefixLength):
        * runtime/JSArray.h:

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

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=43444
        PLATFORM(CF) is false on Windows in JavaScriptCore

        Moved some PLATFORM(WIN) #defines down into JavaScriptCore.

        * wtf/Platform.h: Added WTF_PLATFORM_CF 1 and WTF_USE_PTHREADS 0, inherited
        from WebCore/config.h. Removed WTF_USE_WININET 1 since WebCore/config.h
        just #undefined that later.

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

        Try to fix Windows build: Don't use GCActivityCallbackCF on Windows, since
        PLATFORM(CF) is not defined on Windows.
        
        We'll need to enable the GC activity callback some other way, but this
        change should get the build back to normal.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

        * runtime/GCActivityCallbackCF.cpp: Make it easier to detect this error
        in the future with an explicit error message.

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

        Try to fix Windows build: update .def file.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-08-03  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=41318
        GC should reclaim garbage even when new objects are not being allocated rapidly

        Added a callback in JavaScriptCore that gets triggered after an
        allocation causes the heap to reset.  This is useful for adding a
        timer that will trigger garbage collection after the "last" allocation.

        Also needed was to add lock and unlock methods to JSLock that needed
        only a JSGlobalData object versus an ExecState object.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_by_val):
        * runtime/Collector.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::reset):
        (JSC::Heap::setActivityCallback):
        * runtime/Collector.h:
        * runtime/GCActivityCallback.cpp: Added.
        (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback):
        (JSC::DefaultGCActivityCallback::~DefaultGCActivityCallback):
        (JSC::DefaultGCActivityCallback::operator()):
        * runtime/GCActivityCallback.h: Added.
        (JSC::GCActivityCallback::~GCActivityCallback):
        (JSC::GCActivityCallback::operator()):
        (JSC::GCActivityCallback::GCActivityCallback):
        (JSC::DefaultGCActivityCallback::create):
        * runtime/GCActivityCallbackCF.cpp: Added.
        (JSC::DefaultGCActivityCallbackPlatformData::trigger):
        (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback):
        (JSC::DefaultGCActivityCallback::~DefaultGCActivityCallback):
        (JSC::DefaultGCActivityCallback::operator()):
        * runtime/JSLock.cpp:
        (JSC::JSLock::JSLock):
        * runtime/JSLock.h:

2010-08-02  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after removal of need to compile ExecutableAllocatorPosix.cpp

        * wscript:

2010-08-02  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Simon Hausmann.

        [QT] build fix for symbian
        https://bugs.webkit.org/show_bug.cgi?id=43234

        1) wrong order of passing param's
        2) static_cast complains on symbian so using reinterpret_cast

        No new tests added. Just a build fix for qt symbian

        * wtf/PageAllocation.cpp:
        (WTF::PageAllocation::commit):
        (WTF::PageAllocation::decommit):
        (WTF::PageAllocation::reserve):

2010-07-30  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Fraser.

        Enabling view modes to all platforms
        https://bugs.webkit.org/show_bug.cgi?id=37505

        Removing ENABLE_WIDGETS_10_SUPPORT flag.

        As view mode media feature is not part of widget 1.0 specification
        any more the ENABLE_WIDGETS_10_SUPPORT flag may be removed. The only use
        of this flag was related to view mode media feature implementation in Qt. 

        * wtf/Platform.h:

2010-07-30  Andy Estes  <aestes@apple.com>

        Reviewed by David Kilzer.

        Add Xcode support for compiling WebKit against iOS SDKs.
        https://bugs.webkit.org/show_bug.cgi?id=42796

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

2010-07-30  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Davin Levin.

        Added a yield() function.
        https://bugs.webkit.org/show_bug.cgi?id=42843

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::yield):
        * wtf/ThreadingWin.cpp:
        (WTF::yield):
        * wtf/gtk/ThreadingGtk.cpp:
        (WTF::yield):
        * wtf/qt/ThreadingQt.cpp:
        (WTF::yield):

2010-07-30  Rafael Antognolli  <antognolli@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] Add library version and soname to EFL generated libraries and binary.
        https://bugs.webkit.org/show_bug.cgi?id=43212

        Add version and soname to libjavascriptcore.so and libwtf.so in case of
        linking as shared libraries, and version to jsc executable.

        * CMakeLists.txt:
        * jsc/CMakeLists.txt:
        * wtf/CMakeLists.txt:

2010-07-30  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Simon Hausmann.

        [QT] build fix for symbian
        https://bugs.webkit.org/show_bug.cgi?id=43234

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

2010-07-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64313.
        http://trac.webkit.org/changeset/64313
        https://bugs.webkit.org/show_bug.cgi?id=43233

        Some Chromium bots are not happy with it for some unknown
        reason. (Requested by dumi on #webkit).

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        * wtf/ThreadingWin.cpp:
        * wtf/gtk/ThreadingGtk.cpp:
        * wtf/qt/ThreadingQt.cpp:

2010-07-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64302.
        http://trac.webkit.org/changeset/64302
        https://bugs.webkit.org/show_bug.cgi?id=43223

        Assertion is bogus (Requested by olliej on #webkit).

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::putShortUnchecked):
        (JSC::AssemblerBuffer::putIntUnchecked):
        (JSC::AssemblerBuffer::putInt64Unchecked):
        * jit/JITStubs.cpp:
        * pcre/pcre_compile.cpp:
        (jsRegExpCompile):
        * wtf/FastMalloc.cpp:
        (WTF::PageHeapAllocator::New):
        (WTF::TCMalloc_Central_FreeList::Populate):
        * wtf/MD5.cpp:
        (WTF::reverseBytes):
        (WTF::MD5::addBytes):
        (WTF::MD5::checksum):
        * wtf/StdLibExtras.h:
        * wtf/Vector.h:
        (WTF::VectorBuffer::inlineBuffer):
        * wtf/qt/StringQt.cpp:
        (WebCore::String::String):

2010-07-29  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Changed the handling for removing and adding elements at the front
        of an array.  The code now keeps a bias that indicates the amount of
        JSValue sized holes are prior to the ArrayStorage block.  This means
        that shift operations are now memmove's of the header part of
        the ArrayStorage and unshift operations are similar, but may require a
        realloc first to create the space.  Similar operations are performed
        for special cases of splice and slice.
        Also optimized the new Array(size) case so that we don't allocate and
        initialize array elements until the JS code starts using elements.
        The array growth code is slightly more aggressive for initial growth
        based on size growth of any previous array.

        * Configurations/JavaScriptCore.xcconfig:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::~JSArray):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::getOwnPropertyNames):
        (JSC::JSArray::getNewVectorLength):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::increaseVectorPrefixLength):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::shiftCount):
        (JSC::JSArray::unshiftCount):
        (JSC::JSArray::sortNumeric):
        (JSC::JSArray::sort):
        (JSC::JSArray::fillArgList):
        (JSC::JSArray::copyToRegisters):
        (JSC::JSArray::compactForSorting):
        (JSC::JSArray::subclassData):
        (JSC::JSArray::setSubclassData):
        (JSC::JSArray::checkConsistency):
        * runtime/JSArray.h:
        (JSC::JSArray::length):
        (JSC::JSArray::canGetIndex):
        (JSC::JSArray::getIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::uncheckedSetIndex):
        (JSC::JSArray::arrayStorage):
        (JSC::JSArray::setArrayStorage):
        (JSC::JSArray::markChildrenDirect):

2010-07-29  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Changed MINIMUM_CELL_SIZE to be fixed at 64 bytes.

        * runtime/Collector.h:

2010-07-28  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by David Levin.

        Added a yield() function.
        https://bugs.webkit.org/show_bug.cgi?id=42843

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::yield):
        * wtf/ThreadingWin.cpp:
        (WTF::yield):
        * wtf/gtk/ThreadingGtk.cpp:
        (WTF::yield):
        * wtf/qt/ThreadingQt.cpp:
        (WTF::yield):

2010-07-29  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        Fixed issue where RegExp greedy jit code loops when no input is
        consumed.  Changed the code to only loop if some input was consumed,
        but fall through if we successfully match an alternative that 
        doesn't consume any input.
        https://bugs.webkit.org/show_bug.cgi?id=42664

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateParenthesesGreedyNoBacktrack):

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

        Reviewed by Gavin Barraclough.

        Avoid increasing required alignment of target type warning on ARM
        https://bugs.webkit.org/show_bug.cgi?id=38045

        The reinterpret_cast<Type1*>([pointer to Type2]) expressions - where
        sizeof(Type1) > sizeof(Type2) - cause the following warning on ARM:
        increases required alignment of target type warnings.
        Casting the type of [pointer to Type2] object to void* bypasses the
        warning.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::putShortUnchecked):
        (JSC::AssemblerBuffer::putIntUnchecked):
        (JSC::AssemblerBuffer::putInt64Unchecked):
        * jit/JITStubs.cpp:
        * pcre/pcre_compile.cpp:
        (jsRegExpCompile):
        * wtf/FastMalloc.cpp:
        (WTF::PageHeapAllocator::New):
        (WTF::TCMalloc_Central_FreeList::Populate):
        * wtf/MD5.cpp:
        (WTF::reverseBytes):
        (WTF::MD5::addBytes):
        (WTF::MD5::checksum):
        * wtf/StdLibExtras.h:
        (reinterpret_cast_ptr):
        * wtf/Vector.h:
        (WTF::VectorBuffer::inlineBuffer):
        * wtf/qt/StringQt.cpp:
        (WebCore::String::String):

2010-07-29  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed build fix.

        Include a missing header in the source list to fix 'make dist.'

        * GNUmakefile.am: Include missing header.

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

        Reviewed by Darin Adler.

        Bug 43162 - Add support for MADV_FREE to PageAllocation.

        * wtf/PageAllocation.cpp:
        (WTF::PageAllocation::commit):
        (WTF::PageAllocation::decommit):

2010-07-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Add FILE_SYSTEM build flag for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=42915

        * Configurations/FeatureDefines.xcconfig:

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

        Temporarily rolling out http://trac.webkit.org/changeset/64177,
        this seems to give QT ARM/Win a headache (specifically, looks
        like structure layour differs, objects get too large - 
        "..\..\..\JavaScriptCore\runtime\ArrayPrototype.cpp:41:"
        "error: size of array 'dummyclass_fits_in_cell' is negative").

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        * runtime/JSArray.cpp:
        (JSC::increasedVectorLength):
        (JSC::JSArray::JSArray):
        (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::sortNumeric):
        (JSC::JSArray::sort):
        (JSC::JSArray::fillArgList):
        (JSC::JSArray::copyToRegisters):
        (JSC::JSArray::compactForSorting):
        (JSC::JSArray::subclassData):
        (JSC::JSArray::setSubclassData):
        (JSC::JSArray::checkConsistency):
        * runtime/JSArray.h:
        (JSC::JSArray::length):
        (JSC::JSArray::canGetIndex):
        (JSC::JSArray::getIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::uncheckedSetIndex):
        (JSC::JSArray::markChildrenDirect):

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

        Speculative build fix for Chromium/Win

        * wtf/Platform.h:

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

        Oh! that makes more sense!  Maybe C++-style comments are bringing teh bad mojo.

        * wtf/Platform.h:

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

        Speculative build fix for GTK/64 ... seems to be barfing on a comment o_O

        * wtf/Platform.h:

2010-07-27  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Changed the handling for removing and adding elements at the front
        of an array.  The code now keeps a bias that indicates the amount of
        JSValue sized holes are prior to the ArrayStorage block.  This means
        that shift operations are now memmove's of the header part of
        the ArrayStorage and unshift operations are similar, but may require a
        realloc first to create the space.  Similar operations are performed
        for special cases of splice and slice.
        Also optimized the new Array(size) case so that we don't allocate and
        initialize array elements until the JS code starts using elements.
        The array growth code is slightly more aggressive for initial growth
        based on size growth of any previous array.

        * Configurations/JavaScriptCore.xcconfig:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::~JSArray):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::getOwnPropertyNames):
        (JSC::JSArray::getNewVectorLength):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::increaseVectorPrefixLength):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::push):
        (JSC::JSArray::shiftCount):
        (JSC::JSArray::unshiftCount):
        (JSC::JSArray::sortNumeric):
        (JSC::JSArray::sort):
        (JSC::JSArray::fillArgList):
        (JSC::JSArray::copyToRegisters):
        (JSC::JSArray::compactForSorting):
        (JSC::JSArray::subclassData):
        (JSC::JSArray::setSubclassData):
        (JSC::JSArray::checkConsistency):
        * runtime/JSArray.h:
        (JSC::JSArray::length):
        (JSC::JSArray::canGetIndex):
        (JSC::JSArray::getIndex):
        (JSC::JSArray::setIndex):
        (JSC::JSArray::uncheckedSetIndex):
        (JSC::JSArray::arrayStorage):
        (JSC::JSArray::setArrayStorage):
        (JSC::JSArray::markChildrenDirect):

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

        Reviewed by Oliver Hunt.

        Bug 43089 - Cleanup JIT related switched in Platform.h

        The code the enable to JIT checks every permutation of platform & OS individually, but
        now the JIT is enabled on the majority much all x86/x86-64/ARM/MIPS systems.  It should
        be cleaner to just enable by default on these platforms, and explicitly disable on configs
        that don't aren't supported.

        Also, rename ENABLE_JIT_OPTIMIZE_MOD to ENABLE_JIT_USE_SOFT_MODULO.  I always find this
        confusing since enabling this "optimization" would be possible, but would be a regression
        on x86/x86-64 systems!  I think it's clearer to reserve "JIT_OPTIMIZE" for compiler
        technologies applicable to all platforms, and make a more optional behaviour like this a
        "USE".

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * wtf/Platform.h:

2010-07-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Make PLATFORM(CHROMIUM) and not OS(MAC) turn USE(GLES2_RENDERING) on
        https://bugs.webkit.org/show_bug.cgi?id=43084

        This turns USE(GLES2_RENDERING) on for chromium on windows/linux.  This causes no
        change in behavior, that's all controlled by ENABLE() macros that are currently off.

        * wtf/Platform.h:

2010-07-23  Helder Correia  <heldercorreia@codeaurora.org>

        Reviewed by Darin Adler.

        Canvas tests 2d.imageData.object.round and 2d.imageData.object.wrap are
        failing. For canvas image data manipulation, the values passed should
        be truncated and wrapped. Also fix the canvas-ImageData-behaviour test
        to expect wrapping rather than clamping, and add some new checkings.
        https://bugs.webkit.org/show_bug.cgi?id=40272

        * runtime/JSByteArray.h:
        (JSC::JSByteArray::setIndex):
        (JSC::JSByteArray::JSByteArray):

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

        Reviewed by Oliver Hunt.

        Bug 42621 - Add a bump allocator for the YARR interpreter

        The regex engine requires lifo allocation, however currently uses the general purpose
        malloc/free memory allocation.  A simple bump pointer allocator should provide a lower
        overhead allocation solution.

        When using YARR interpreter, 15% progression on v8-regex.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSGlobalData.h:
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        * wtf/BumpPointerAllocator.h: Added.
        (WTF::BumpPointerPool::ensureCapacity):
        (WTF::BumpPointerPool::alloc):
        (WTF::BumpPointerPool::dealloc):
        (WTF::BumpPointerPool::operator new):
        (WTF::BumpPointerPool::BumpPointerPool):
        (WTF::BumpPointerPool::create):
        (WTF::BumpPointerPool::shrink):
        (WTF::BumpPointerPool::destroy):
        (WTF::BumpPointerPool::ensureCapacityCrossPool):
        (WTF::BumpPointerPool::deallocCrossPool):
        (WTF::BumpPointerAllocator::BumpPointerAllocator):
        (WTF::BumpPointerAllocator::~BumpPointerAllocator):
        (WTF::BumpPointerAllocator::startAllocator):
        (WTF::BumpPointerAllocator::stopAllocator):
        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::Interpreter::allocDisjunctionContext):
        (JSC::Yarr::Interpreter::freeDisjunctionContext):
        (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::interpret):
        (JSC::Yarr::Interpreter::Interpreter):
        (JSC::Yarr::ByteCompiler::compile):
        (JSC::Yarr::byteCompileRegex):
        * yarr/RegexInterpreter.h:
        (JSC::Yarr::BytecodePattern::BytecodePattern):

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

        Windows build fix from Chromium/GTK build fix!

        * wtf/PageAllocation.cpp:

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

        Chromium/GTK build fix

        * wtf/PageAllocation.cpp:

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

        Build fix for !Mac platforms.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:

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

        Reviewed by Oliver Hunt.

        Bug 43009 - Abstract out page allocation from executable allocators

        It would be great to have a single platform abstraction for block allocation, rather than copy/paste code.

        In this initial implementation I've made Symbian fall back to use malloc/free for non-executable memory.
        I think this will match current behaviour for the next client we will want to port across (RegisterFile &
        Collector).

        * CMakeListsEfl.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::intializePageSize):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        (JSC::ExecutableAllocator::isValid):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::ExecutablePool):
        (JSC::ExecutablePool::poolAllocate):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::release):
        (JSC::FixedVMPoolAllocator::reuse):
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
        (JSC::FixedVMPoolAllocator::alloc):
        (JSC::FixedVMPoolAllocator::free):
        (JSC::FixedVMPoolAllocator::isValid):
        (JSC::FixedVMPoolAllocator::isWithinVMPool):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        * jit/ExecutableAllocatorPosix.cpp: Removed.
        * jit/ExecutableAllocatorSymbian.cpp: Removed.
        * jit/ExecutableAllocatorWin.cpp: Removed.
        * wscript:
        * wtf/PageAllocator.cpp: Added.
        (WTF::protection):
        (WTF::PageAllocation::commit):
        (WTF::PageAllocation::decommit):
        (WTF::PageAllocator::allocate):
        (WTF::PageAllocator::reserve):
        (WTF::PageAllocator::deallocate):
        (WTF::PageAllocator::pagesize):
        * wtf/PageAllocator.h: Added.
        (WTF::PageAllocation::PageAllocation):
        (WTF::PageAllocation::base):
        (WTF::PageAllocation::size):
        (WTF::PageAllocation::chunk):
        (WTF::PageAllocation::operator!):
        (WTF::PageAllocator::):

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

        Rolling out r64097:64100, oops, more b0rked than I relized by my last changes, sorry!

        * CMakeListsEfl.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::reprotectRegion):
        (JSC::ExecutableAllocator::cacheFlush):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::ExecutablePool):
        (JSC::ExecutablePool::poolAllocate):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::release):
        (JSC::FixedVMPoolAllocator::reuse):
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
        (JSC::FixedVMPoolAllocator::alloc):
        (JSC::FixedVMPoolAllocator::free):
        (JSC::FixedVMPoolAllocator::isValid):
        (JSC::FixedVMPoolAllocator::isWithinVMPool):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        * jit/ExecutableAllocatorPosix.cpp: Added.
        (JSC::ExecutableAllocator::intializePageSize):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        (JSC::ExecutableAllocator::isValid):
        * jit/ExecutableAllocatorSymbian.cpp: Added.
        (JSC::ExecutableAllocator::intializePageSize):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        (JSC::ExecutableAllocator::isValid):
        * jit/ExecutableAllocatorWin.cpp: Added.
        (JSC::ExecutableAllocator::intializePageSize):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        (JSC::ExecutableAllocator::isValid):
        * wscript:
        * wtf/PageAllocation.cpp: Removed.
        * wtf/PageAllocation.h: Removed.

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

        Speculative !debug build fix II.

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

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

        Speculative !debug build fix.

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

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

        Reviewed by Oliver Hunt.

        Bug 43009 - Abstract out page allocation from executable allocators

        It would be great to have a single platform abstraction for block allocation, rather than copy/paste code.

        In this initial implementation I've made Symbian fall back to use malloc/free for non-executable memory.
        I think this will match current behaviour for the next client we will want to port across (RegisterFile &
        Collector).

        * CMakeListsEfl.txt:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::intializePageSize):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        (JSC::ExecutableAllocator::isValid):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::ExecutablePool):
        (JSC::ExecutablePool::poolAllocate):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::release):
        (JSC::FixedVMPoolAllocator::reuse):
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
        (JSC::FixedVMPoolAllocator::alloc):
        (JSC::FixedVMPoolAllocator::free):
        (JSC::FixedVMPoolAllocator::isValid):
        (JSC::FixedVMPoolAllocator::isWithinVMPool):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        * jit/ExecutableAllocatorPosix.cpp: Removed.
        * jit/ExecutableAllocatorSymbian.cpp: Removed.
        * jit/ExecutableAllocatorWin.cpp: Removed.
        * wscript:
        * wtf/PageAllocator.cpp: Added.
        (WTF::protection):
        (WTF::PageAllocation::commit):
        (WTF::PageAllocation::decommit):
        (WTF::PageAllocator::allocate):
        (WTF::PageAllocator::reserve):
        (WTF::PageAllocator::deallocate):
        (WTF::PageAllocator::pagesize):
        * wtf/PageAllocator.h: Added.
        (WTF::PageAllocation::PageAllocation):
        (WTF::PageAllocation::base):
        (WTF::PageAllocation::size):
        (WTF::PageAllocation::chunk):
        (WTF::PageAllocation::operator!):
        (WTF::PageAllocator::):

2009-10-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use the default timeout interval for JS as the HTML tokenizer delay for setHtml()

        This ensures that long-running JavaScript (for example due to a modal alert() dialog),
        will not trigger a deferred load after only 500ms (the default tokenizer delay) while
        still giving a reasonable timeout (10 seconds) to prevent deadlock.

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

        * runtime/TimeoutChecker.h: Add getter for the timeout interval

2010-07-25  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kent Tamura.

        [WINCE] Buildfix for JSC in release mode
        https://bugs.webkit.org/show_bug.cgi?id=42934

        * jsc.cpp: Don't use __try on WinCE.

2010-07-24  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        [MSVC] Ensure 4 byte alignment on ARM
        https://bugs.webkit.org/show_bug.cgi?id=42935

        * jit/JITStubs.h: Added #pragma pack(4) around JITStackFrame.

2010-07-24  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        [WINCE] Cleanup defines in Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=42933

        * wtf/Platform.h:

2010-07-23  Rafael Antognolli  <antognolli@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] Cleanup glib support (make it optional)
        https://bugs.webkit.org/show_bug.cgi?id=42480

        Remove gobject/GRefPtr.cpp if not using soup/glib.

        * wtf/CMakeListsEfl.txt:

2010-07-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Implement TCSpinLock.
        https://bugs.webkit.org/show_bug.cgi?id=41792

        Implement the SpinLock with InterlockedExchange from the Windows API.

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

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

        Unreviewed rolling out r63947 and r63948, because they broke Qt Windows build.

        * jit/JITStubs.cpp:
        * jit/JITStubs.h:

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

        Eeeep! r63947 hosed all non-x86 builds!

        * jit/JITStubs.h:

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

        Reviewed by Oliver Hunt.

        Bug 42818 - [Qt] REGRESSION(63348): jsc is broken
        Speculative fix, need fastcall conventions on Qt/Win.

        * jit/JITStubs.cpp:
        * jit/JITStubs.h:

2010-07-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Do more constant folding
        https://bugs.webkit.org/show_bug.cgi?id=42867

        Constant fold a few more operations.  SunSpider says this is
        a win but I suspect that's just code motion at play.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::makeModNode):
        (JSC::ASTBuilder::makeURightShiftNode):
        (JSC::ASTBuilder::makeBitOrNode):
        (JSC::ASTBuilder::makeBitAndNode):
        (JSC::ASTBuilder::makeBitXOrNode):
        (JSC::ASTBuilder::makeBinaryNode):

2010-07-22  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Kent Tamura.

        Error properties of the Global Object are missing the DontEnum attribute
        https://bugs.webkit.org/show_bug.cgi?id=28771

        Add the attributes to become spec compliant.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):

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

        Reviewed by Adam Roben.

        WebKit on Windows should build optionally with an unversioned ICU DLL
        https://bugs.webkit.org/show_bug.cgi?id=42722
        <rdar://problem/8211743> JavaScriptCore needs to link against unversioned ICU
        
        Dynamically create a new header, ICUVersion.h, as part of build-generated-files.sh.
        Header contains a preprocessor define (U_DISABLE_RENAMING) indicating to ICU whether the ICU API
        should be namespaced with the current ICU version number. Proper value is determined
        by checking for the presence of libicuuc.lib, the unversioned copy of ICU.
        
        To get the proper value for U_DISABLE_RENAMING into all source files, we force
        the include of ICUVersion.h (our generated header) via the compiler options.
        
        Since the versioned and unversioned ICU have different filenames (libicuuc.lib vs icuuc.lib)
        we copy the ICU lib to an intermediate location under obj with a common name. This
        allows us to link properly with either without adding a new build configuration.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        Copy ICU libs into a common location with a common name.
        Add additional library search path to pick up icu lib.
        Change ICU library filename specified to linker.
        Add forced include of ICUVersion.h.
        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Generate ICUVersion.h
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Add forced include of ICUVersion.h.
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
        Copy ICU libs into a common location with a common name.
        Add additional library search path to pick up icu lib.
        Change ICU library filename specified to linker.
        Add forced include of ICUVersion.h.
        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
        Copy ICU libs into a common location with a common name.
        Add additional library search path to pick up icu lib.
        Change ICU library filename specified to linker.
        Add forced include of ICUVersion.h.

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

        Re-save vsprops files after no-op edits in Visual Studio
        to fix manual edit issues.

2010-07-20  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Steve Block.

        Need to be able to configure Geolocation policy regarding user permissions
        https://bugs.webkit.org/show_bug.cgi?id=42068

        If CLIENT_BASED_GEOLOCATION is enabled, enable preemtive permission policy
        by default 

        * wtf/Platform.h:
        
2010-07-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63742.
        http://trac.webkit.org/changeset/63742
        https://bugs.webkit.org/show_bug.cgi?id=42641

        Broke Leopard Intel build. (Requested by bbandix on #webkit).

        * wtf/Platform.h:

2010-07-20  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Steve Block.

        Need to be able to configure Geolocation policy regarding user permissions
        https://bugs.webkit.org/show_bug.cgi?id=42068

        If CLIENT_BASED_GEOLOCATION is enabled, enable preemtive permission policy
        by default 

        * wtf/Platform.h:
        
2010-07-19  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG CleanUp of SVGPathData parsing
        https://bugs.webkit.org/show_bug.cgi?id=41410

        Added piOverTwo to MathExtras.

        * wtf/MathExtras.h:

2010-07-19  Mike Moretti  <mike.moretti@nokia.com>

        Reviewed by Laszlo Gombos.

        [Symbian] Build fix after r63404.

        Implement isValid() function for the Symbian executable allocator.

        * jit/ExecutableAllocatorSymbian.cpp:
        (JSC::ExecutableAllocator::isValid):

2010-07-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42118
        Disable WebGL on Leopard for now. 

        LayoutTests fail on some graphics hardware on Leopard because one of the features we use,
        GL_ARB_framebuffer_object, is not universally available in Leopard like it is in
        SnowLeopard. This will allow LayoutTests to pass on Leopard until we add logic to use a
        software OpenGL driver on machines without this support.

        * Configurations/FeatureDefines.xcconfig:

2010-07-16  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Use OwnPtr for CodeBlock objects
        https://bugs.webkit.org/show_bug.cgi?id=42490

        * runtime/Executable.cpp:
        (JSC::EvalExecutable::EvalExecutable): Moved this here and made it non-inline.
        Eliminated the code that used to initialize the raw pointer since it's now
        an OwnPtr.
        (JSC::EvalExecutable::~EvalExecutable): Removed the explicit delete here.
        (JSC::ProgramExecutable::ProgramExecutable): Ditto.
        (JSC::ProgramExecutable::~ProgramExecutable): Ditto.
        (JSC::FunctionExecutable::FunctionExecutable): Ditto.
        (JSC::FunctionExecutable::~FunctionExecutable): Ditto.
        (JSC::EvalExecutable::compileInternal): Added use of adoptPtr and get.
        (JSC::ProgramExecutable::compileInternal): Ditto.
        (JSC::FunctionExecutable::compileForCallInternal): Ditto.
        (JSC::FunctionExecutable::compileForConstructInternal): Ditto.
        (JSC::FunctionExecutable::recompile): Use clear instead of delete followed
        by assignment of 0.

        * runtime/Executable.h: Moved constructors to the cpp file and changed
        raw pointers to OwnPtr.

2010-07-19  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Fix build on 64-bit systems. According to
        JavaScriptCore/wtf/Platform.h, x86_64 uses fixed allocator, which
        needs jit/ExecutableAllocatorFixedVMPool.cpp to be included in build
        system.
        https://bugs.webkit.org/show_bug.cgi?id=42559

        * CMakeListsEfl.txt: add missing file for x86_64.

2010-07-16  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed build system cleanup.

        Move ExecutableAllocator{FixedVMPool,Posix,Symbian,Win}.cpp from
        root CMakeLists.txt to the platform CMakeLists.txt.

        * CMakeLists.txt:
        * CMakeListsEfl.txt: Add ExecutableAllocatorPosix.cpp.

2010-07-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        ES5 allows use of reserved words as IdentifierName
        https://bugs.webkit.org/show_bug.cgi?id=42471

        Modify the lexer to allow us to avoid identifying reserved
        words in those contexts where they are valid identifiers, and
        we know it's safe.  Additionally tag the reserved word tokens
        so we can easily identify them in those cases where we can't
        guarantee that we've skipped reserved word identification.

        * parser/JSParser.cpp:
        (JSC::JSParser::next):
        (JSC::JSParser::parseProperty):
        (JSC::JSParser::parseMemberExpression):
        * parser/JSParser.h:
        (JSC::):
        * parser/Lexer.cpp:
        (JSC::Lexer::lex):
        * parser/Lexer.h:
        (JSC::Lexer::):

2010-07-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        clang++ build fixes for JavaScriptCore and WebCore
        https://bugs.webkit.org/show_bug.cgi?id=42478

        * runtime/RegExpKey.h:
        (JSC::operator==):
        Move the RegExpKey equals operator into the JSC namespace so it can be found by ADL.

2010-07-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Levin.

        Really add WARN_UNUSED_RESULT to leakRef
        https://bugs.webkit.org/show_bug.cgi?id=42464

        * wtf/PassRefPtr.h:
        (WTF::PassRefPtr::):
        (WTF::NonNullPassRefPtr::):
        Put the WARN_UNUSED_RESULT attribute at the right place.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr::releaseRef):
        Remove WARN_UNUSED_RESULT here for now, it leads to two warnings that need
        to be fixed first.

2010-07-15  Victor Wang  <victorw@chromium.org>

        Reviewed by David Levin.

        [Chromium] Disable c4291 for chromium windows multi dll build.

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

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

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

        Reviewed by Maciej Stachowiak.

        Crash entering mail.yahoo.com
        https://bugs.webkit.org/show_bug.cgi?id=42394
    
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::argumentNumberFor): Added a NULL check. If the
        identifier we're resolving is not a local variable, registerFor returns
        NULL.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::FunctionBodyNode::emitBytecode): Unrelated to the crash, but I
        noticed this while working on it: No need to NULL-check returnNode,
        since an early return has already done so.

2010-07-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        [GTK] Simplify the distribution step
        https://bugs.webkit.org/show_bug.cgi?id=42414

        * GNUmakefile.am: Add extra dist files directly to EXTRA_DIST instead
        of adding them by proxy via javascriptcore_dist. Sort the EXTRA_DIST list.
        Refer to create_hash_table and create_regexp_tables directly, as is the
        behavior with other code generation scripts.

2010-07-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Fix dumping of op_put_by_id.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::printPutByIdOp):

2010-07-15  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Darin Adler.

        Refactoring some parts of the lexer
        https://bugs.webkit.org/show_bug.cgi?id=41845

        This patch is a precursor of refactoring the identifier
        parsing, which currently slows down the lexer, and not
        ready for landing. This patch contains those sources,
        which does not slow down the lexer (mainly style changes).

        SunSpider: no change (529.4ms to 528.7ms)
        --parse-only: no change (31.0ms to 31.2ms)

        * parser/Lexer.cpp:
        (JSC::isIdentStart): using typesOfASCIICharacters to determine
             whether the current character is in identifier start
        (JSC::isIdentPart): using typesOfASCIICharacters to determine
             whether the current character is in identifier part
        (JSC::Lexer::parseString): style fix
        (JSC::Lexer::lex): removing the else after the main which
             which reduces code duplication

2010-07-15  Mark Rowe  <mrowe@apple.com>

        Update the sorting in the Xcode project files.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2010-07-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make sure that mixed interpreter/jit builds don't try to use the jit if the allocator fails
        https://bugs.webkit.org/show_bug.cgi?id=42310

        Add some null checks to deal with the Fixed VM allocator failing
        to get the requested executable region, delay the creation of the
        JITStubs in JSGlobalData until after we know whether we're using
        the JIT.

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::ExecutableAllocator):
        (JSC::ExecutableAllocator::poolForSize):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
        (JSC::FixedVMPoolAllocator::alloc):
        (JSC::FixedVMPoolAllocator::free):
        (JSC::FixedVMPoolAllocator::isValid):
        (JSC::ExecutableAllocator::isValid):
        (JSC::ExecutablePool::systemAlloc):
        (JSC::ExecutablePool::systemRelease):
        * jit/ExecutableAllocatorPosix.cpp:
        (JSC::ExecutableAllocator::isValid):
        * jit/ExecutableAllocatorWin.cpp:
        (JSC::ExecutableAllocator::isValid):
        * jit/JIT.cpp:
        (JSC::JIT::linkCall):
        (JSC::JIT::linkConstruct):
        * jit/JIT.h:
        (JSC::JIT::compileCTIMachineTrampolines):
        (JSC::JIT::compileCTINativeCall):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_mod):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_mod):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::JITThunks::hostFunctionStub):
        * jit/ThunkGenerators.cpp:
        (JSC::charCodeAtThunkGenerator):
        (JSC::charAtThunkGenerator):
        (JSC::fromCharCodeThunkGenerator):
        (JSC::sqrtThunkGenerator):
        (JSC::powThunkGenerator):
        * runtime/Executable.h:
        (JSC::NativeExecutable::create):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::getHostFunction):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::getCTIStub):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::jitCompileRegex):

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

        Speculative Qt/Windows build fix.

        * jit/JITStubs.h:

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=42280
        JIT_STUB_ARGUMENT_VA_LIST is only slowing us down! Remove it!

        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::restoreArgumentReferenceForTrampoline):
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:
        * wtf/Platform.h:

2010-07-14  Oliver Hunt  <oliver@apple.com>

        RS=Geoff Garen.

        Guard the CF path of interpreter vs. jit selection with PLATFORM(CF)

        This allows the code to work on windows as well.  Also unifies the
        environment variable with the preference name.

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

2010-07-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Don Melton.

        Crash when trying to enable JIT and Interpreter in a single build.

        CFPreferences code added at the last minute failed to account for
        the preference not being present and then attempted to CFRelease
        a null value.

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

2010-07-14  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Darin Adler.

        Change indentations in the lexer
        https://bugs.webkit.org/show_bug.cgi?id=41845

        This patch fixes an old, indentation error comes from kjs,
        as webkit has a different style rule for switches, and change
        the indentation of the main switch, which is a temporary
        style error. This change makes easier to see the behavioural
        changes in the follow-up patch.

        No behavioural changes.

        * parser/Lexer.cpp:
        (JSC::singleEscape):
        (JSC::Lexer::lex):

2010-07-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63262.
        http://trac.webkit.org/changeset/63262
        https://bugs.webkit.org/show_bug.cgi?id=42229

        broke Windows compile (Requested by bweinstein on #webkit).

        * API/tests/testapi.c:
        (assertEqualsAsCharactersPtr):
        (main):
        * testapi.pro: Removed.

2010-07-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        ES5 requires BOMs to be treated as whitespace
        https://bugs.webkit.org/show_bug.cgi?id=42218

        Add BOM character to the Lexer's definition of whitespace,
        and remove the logic that dealt with stripping BOMs and
        caching the cleaned string.

        * parser/Lexer.h:
        (JSC::Lexer::isWhiteSpace):
        * parser/SourceProvider.h:
        (JSC::UStringSourceProvider::create):
        (JSC::UStringSourceProvider::UStringSourceProvider):
        * wtf/text/StringImpl.h:

2010-07-13  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Avoid slow-path for put() in Array.splice()
        https://bugs.webkit.org/show_bug.cgi?id=41920

        Defer creation of the returned array until its final size is known
        to avoid growing it while adding elements.

        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray): Add two modes of creation, CreateInitialized (old)
        and CreateCompact (which should only be used when constructing arrays whose
        size and contents are known at the time of creation.)
        (JSC::JSArray::setLength): Skip first consistency check if in CreateCompact
        initialization mode. (Only applies to non-empty arrays.)
        (JSC::JSArray::checkConsistency): Build fix (JSValue::type() is gone)
        * runtime/JSArray.h:
        (JSC::JSArray::uncheckedSetIndex): Added for fast initialization of compact
        arrays. Does no bounds or other sanity checking.
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice): Optimized creation of the returned JSArray.
        * runtime/ArrayConstructor.cpp:
        (JSC::constructArrayWithSizeQuirk): Pass CreateInitialized to ctor.
        * runtime/JSGlobalObject.h:
        (JSC::constructEmptyArray): Pass CreateInitialized to ctor.
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpMatchesArray::RegExpMatchesArray): Pass CreateInitialized to ctor.

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

        Reviewed by Oliver Hunt.

        Bug 42207 - Clean up interface to compile executables, always check for exceptions

        Presently interface to compile executable is inconsistent between eval/program and
        function code, and is error prone in allowing a caller to byte compile without JIT
        compiling an executable (we rely on all executables with codeblocks having JIT code).
        Unify on an interface where all compilation is performed by a single compile (with
        ForCall|ForConstruct variants) method, and make all clients check for errors.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * parser/Parser.h:
        (JSC::Parser::isFunctionBodyNode):
        (JSC::Parser::parse):
        * runtime/ArrayPrototype.cpp:
        (JSC::isNumericCompareFunction):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createStackOverflowError):
        * runtime/ExceptionHelpers.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::checkSyntax):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::EvalExecutable::reparseExceptionInfo):
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/Executable.h:
        (JSC::EvalExecutable::compile):
        (JSC::EvalExecutable::generatedBytecode):
        (JSC::EvalExecutable::generatedJITCode):
        (JSC::ProgramExecutable::compile):
        (JSC::ProgramExecutable::generatedBytecode):
        (JSC::ProgramExecutable::generatedJITCode):
        (JSC::FunctionExecutable::generatedBytecode):
        (JSC::FunctionExecutable::compileForCall):
        (JSC::FunctionExecutable::compileForConstruct):
        (JSC::FunctionExecutable::generatedJITCodeForConstructWithArityCheck):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::argumentsGetter):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::canUseJIT):

2010-07-13  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Oliver Hunt.

        testapi.c depends on the Core Foundation.
        https://bugs.webkit.org/show_bug.cgi?id=40058

        Separate CoreFoundation specific tests in JSC's testapi.c. Enabling it
        to compile in Qt environments.

        All tests should work except for the JSStringCreateWithCharacters() function,
        because its tests depend on Core Foundation specific functions.

        * API/tests/testapi.c:
        (testJSStringRefCF): moved CoreFoundation specific tests to this function.
        (main): The moves plus some minor tweaks.
        * testapi.pro: Added.

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

        Reviewed by Oliver Hunt.

        Bug 42182 - Change how numeric compare functions are detected

        There are three problems with the current mechanism:
          * It requires that a function executable be bytecode compiled without
            being JIT generated (in order to copy the bytecode from the numeric
            compare function).  This is a problem since we have an invariant when
            running with the JIT that functions are never bytecode compiled without
            also being JIT generated (after checking the codeblock we assume the
            function has JIT code).  To help maintain this invariant 
          * This implementation will prevent us from experimenting with alternate
            compilation paths which do not compile via bytecode.
          * It doesn't work.  Functions passing more than two arguments will match
            if they are comparing their last two arguments, not the first two.
            Generally the mapping back from bytecode to semantics may be more
            complex then initially expected.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::setIsNumericCompareFunction):
        (JSC::BytecodeGenerator::argumentNumberFor):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BlockNode::singleStatement):
        (JSC::FunctionBodyNode::emitBytecode):
        * parser/Nodes.h:
        (JSC::ExpressionNode::isSubtract):
        (JSC::BinaryOpNode::lhs):
        (JSC::BinaryOpNode::rhs):
        (JSC::SubNode::isSubtract):
        (JSC::ReturnNode::value):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:

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

        Reviewed by Gavin Barraclough.

        REGRESSION: Crash at JSC::JIT::privateCompile(JSC::MacroAssemblerCodePtr*)
        https://bugs.webkit.org/show_bug.cgi?id=41763

        There are two parts to this patch, the first is to fix the actual
        problem.  When calling copyStringWithoutBOMs on a string we know
        to contain BOMs we return a value indicating that there are no
        BOMs.

        The second part of this fix is simply to harden the path that
        led to a crash when parsing failed.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
           Harden compilation stubs against parser failure.
        * parser/Lexer.cpp:
        (JSC::Lexer::sourceCode):
           Add assertions to ensure that subranges into a source provider
           are always actually braces.  Hopefully this should catch similar
           failures in future.  These assertions fire on existing tests
           without this fix.
        * runtime/Executable.h:
        (JSC::FunctionExecutable::tryJitCodeForCall):
        (JSC::FunctionExecutable::tryJitCodeForConstruct):
        * wtf/text/StringImpl.h:
        (WebCore::StringImpl::copyStringWithoutBOMs):
           Make copyStringWithBOMs do the right thing.

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

        Reviewed by Gavin Barraclough.

        Fix the constant encoding in data transfer instructions on ARM
        https://bugs.webkit.org/show_bug.cgi?id=42166

        The getImm function is designed to produce modified immediate constant
        for data processing instructions. It should not be used to encode
        any constant for data transfer. In the current situation there is no
        way to use any immediate constant for data transfer. So, the moveImm
        function is the desired method to pass the offset value to the data
        transfer instructions.

        Reported by Jacob Bramley.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::dataTransfer32):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::call32):

2010-07-09  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        String to number coercion is not spec compliant
        https://bugs.webkit.org/show_bug.cgi?id=31349

        ToNumber should ignore NBSP (\u00a0)
        https://bugs.webkit.org/show_bug.cgi?id=25490

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::parseIntOverflow): Added a version that works on UChar.
        * runtime/JSGlobalObjectFunctions.h: Ditto.

        * runtime/UString.cpp:
        (JSC::isInfinity): Added helper functions.
        (JSC::UString::toDouble): Use isStrWhiteSpace instead of
        isSASCIISpace to define what we should skip. Got rid of the
        code that used CString and UTF8String, instead processing the
        UChar of the string directly, except for when we call strtod.
        For strtod, use our own home-grown conversion function that
        does not try to do any UTF-16 processing. Tidied up the logic
        a bit as well.

2010-07-12  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] make dist is broken because of missing headers and other miscellaneous reasons
        https://bugs.webkit.org/show_bug.cgi?id=42107

        * GNUmakefile.am: Add missing header to the sources list.

2010-07-12  Adam Roben  <aroben@apple.com>

        Stop generating stripped symbols for Release builds

        It turns out we can strip the symbols after-the-fact using PDBCopy.

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

        Reviewed by Steve Falkenburg.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        Removed the pre-link event, which just created the public\sym
        directory.

2010-07-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add WARN_UNUSED_RETURN to the smart pointer "leak" member functions
        https://bugs.webkit.org/show_bug.cgi?id=42086

        * wtf/OwnPtr.h:
        * wtf/PassOwnPtr.h:
        * wtf/PassRefPtr.h:
        (WTF::PassRefPtr::releaseRef):
        (WTF::NonNullPassRefPtr::leakRef):
        (WTF::NonNullPassRefPtr::releaseRef):
        * wtf/RetainPtr.h:
        (WTF::RetainPtr::releaseRef):

2010-07-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        HAVE_COMPUTED_GOTO is dependent on the interpreter being enabled
        https://bugs.webkit.org/show_bug.cgi?id=42039

        Separate the existence of computed goto support in the compiler
        from whether or not we are using the interpreter.  All the current
        HAVE(COMPUTED_GOTO) guards are for the interpreter, but I'd like
        the option of using it elsewhere.  The interpreter now uses
        ENABLE(COMPUTED_GOTO_INTERPRETER) 

        * bytecode/Instruction.h:
        (JSC::Instruction::Instruction):
        * bytecode/Opcode.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::isOpcode):
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::getOpcode):
        (JSC::Interpreter::getOpcodeID):
        * wtf/Platform.h:

2010-07-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove switches from inner expression loops in the parser
        https://bugs.webkit.org/show_bug.cgi?id=42035

        Use bitmasks and flags on the token types to identify unary and
        binary operators, rather than switching on the token type to
        identify them.

        * parser/JSParser.cpp:
        (JSC::isUnaryOp):
        (JSC::JSParser::isBinaryOperator):
        * parser/JSParser.h:
        (JSC::):

2010-07-09  Leon Clarke  <leonclarke@google.com>

        Reviewed by Adam Barth.

        add support for link prefetching
        https://bugs.webkit.org/show_bug.cgi?id=3652

        * Configurations/FeatureDefines.xcconfig:

2010-07-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Tidy up lexer token ids
        https://bugs.webkit.org/show_bug.cgi?id=42014

        Stop using character literals to identify single character tokens
        and instead use symbolic names for all tokens.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::makeBinaryNode):
        * parser/JSParser.cpp:
        (JSC::JSParser::consume):
        (JSC::JSParser::match):
        (JSC::JSParser::autoSemiColon):
        (JSC::JSParser::JSParser):
        (JSC::JSParser::parseProgram):
        (JSC::JSParser::allowAutomaticSemicolon):
        (JSC::JSParser::parseDoWhileStatement):
        (JSC::JSParser::parseWhileStatement):
        (JSC::JSParser::parseVarDeclarationList):
        (JSC::JSParser::parseConstDeclarationList):
        (JSC::JSParser::parseForStatement):
        (JSC::JSParser::parseReturnStatement):
        (JSC::JSParser::parseWithStatement):
        (JSC::JSParser::parseSwitchStatement):
        (JSC::JSParser::parseSwitchClauses):
        (JSC::JSParser::parseSwitchDefaultClause):
        (JSC::JSParser::parseTryStatement):
        (JSC::JSParser::parseDebuggerStatement):
        (JSC::JSParser::parseStatement):
        (JSC::JSParser::parseFormalParameters):
        (JSC::JSParser::parseFunctionInfo):
        (JSC::JSParser::parseExpressionOrLabelStatement):
        (JSC::JSParser::parseIfStatement):
        (JSC::JSParser::parseExpression):
        (JSC::JSParser::parseAssignmentExpression):
        (JSC::JSParser::parseConditionalExpression):
        (JSC::isUnaryOp):
        (JSC::JSParser::isBinaryOperator):
        (JSC::JSParser::parseBinaryExpression):
        (JSC::JSParser::parseProperty):
        (JSC::JSParser::parseObjectLiteral):
        (JSC::JSParser::parseStrictObjectLiteral):
        (JSC::JSParser::parseArrayLiteral):
        (JSC::JSParser::parsePrimaryExpression):
        (JSC::JSParser::parseArguments):
        (JSC::JSParser::parseMemberExpression):
        (JSC::JSParser::parseUnaryExpression):
        * parser/JSParser.h:
        (JSC::):
        * parser/Lexer.cpp:
        (JSC::):
        (JSC::Lexer::lex):
        * parser/Lexer.h:

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

        Reviewed by Oliver Hunt.

        Bug 42015 - Enable JSValue32_64 on ARMv7

        * Configurations/JavaScriptCore.xcconfig:
        * jit/JIT.h:
        * jit/JITStubs.cpp:
        * wtf/Platform.h:

2010-07-09  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Assertion failure in String::utf8() for certain invalid UTF16 inputs
        https://bugs.webkit.org/show_bug.cgi?id=41983

        * wtf/text/WTFString.cpp:
        (WebCore::String::utf8):
         - Fixed assertion when sourceExhausted is returned from convertUTF16ToUTF8.

2010-07-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Remove a couple of excess writes from the lexer
        https://bugs.webkit.org/show_bug.cgi?id=41981

        Remove a couple of fields from JSTokenInfo, and rename the remaining ones
        to something more accurate

        * parser/JSParser.cpp:
        (JSC::JSParser::next):
        (JSC::JSParser::tokenStart):
        (JSC::JSParser::tokenLine):
        (JSC::JSParser::tokenEnd):
        * parser/JSParser.h:
        (JSC::JSTokenInfo::JSTokenInfo):
        * parser/Lexer.cpp:
        (JSC::Lexer::lex):

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

        Reviewed by Sam Weinig.

        Property declarations in an object literal should not consider the prototype chain when being added to the new object
        https://bugs.webkit.org/show_bug.cgi?id=41929

        To fix this all we need to do is ensure that all new properties are
        added with putDirect rather than a fully generic call to put.  This
        is safe as an object literal is by definition going to produce a
        completely normal object.

        Rather than duplicating all the put_by_id logic we add an additional
        flag to op_put_by_id to indicate it should be using putDirect.  In
        the interpreter this adds a runtime branch, but in the jit this is
        essentially free as the branch is taken at compile time.  This does
        actually improve object literal creation time even in the interpreter
        as we no longer need to walk the prototype chain to verify that the
        cached put is safe.

        We still emit normal put_by_id code when emitting __proto__ as we want
        to get the correct handling for changing the prototype.

        Sunspider claims this is a 0.7% speedup which is conceivably real due
        to the performance improvement in object literals, but I suspect its
        really just the result of code motion.

        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.h:
        (JSC::JIT::compilePutByIdTransition):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchPutByIdReplace):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchPutByIdReplace):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        (JSC::):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSObject.h:
        (JSC::JSObject::putDirect):
        (JSC::JSValue::putDirect):
        * runtime/JSValue.h:

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

        Reviewed by Sam Weinig.

        String.prototype methods should CheckObjectCoercible (test this is not null or undefined).

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):
        (JSC::stringProtoFuncConcat):
        (JSC::stringProtoFuncIndexOf):
        (JSC::stringProtoFuncLastIndexOf):
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        (JSC::stringProtoFuncSlice):
        (JSC::stringProtoFuncSplit):
        (JSC::stringProtoFuncSubstr):
        (JSC::stringProtoFuncSubstring):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        (JSC::stringProtoFuncLocaleCompare):
        (JSC::trimString):

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

        Reviewed by Sam Weinig.

        Date.prototype.toJSON takes one argument, report this correctly.

        * runtime/DatePrototype.cpp:

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

        Reviewed by Sam Weinig.

        RegExp's prototype should be an object of type RegExp.

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

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

        Reviewed by Gavin Barraclough.

        JavaScript parser violates ECMA automatic semicolon insertion rule
        https://bugs.webkit.org/show_bug.cgi?id=41844

        Remove (very) old and bogus logic that automatically inserted a semicolon
        at the end of a script's source.

        * parser/Lexer.cpp:
        (JSC::Lexer::lex):

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

        Reviewed by Anders Carlson.

        Tidy up the lexer

        Remove some of the old yacc/lex-isms still present in the lexer

        * parser/JSParser.h:
        (JSC::):
        * parser/Lexer.cpp:
        (JSC::Lexer::parseString):
        (JSC::Lexer::lex):
        * parser/Lexer.h:

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

        Reviewed by Gavin Barraclough.

        Make object-literal parsing conformant with the spec.
        https://bugs.webkit.org/show_bug.cgi?id=41892

        Bring our parsing of object literals into conformance with the ES5 spec.
        Basically disallow conflicting accessor vs. normal property definitions
        The bulk of this patch is just fiddling to maintain performance.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createGetterOrSetterProperty):
        (JSC::ASTBuilder::createProperty):
        (JSC::ASTBuilder::getName):
        (JSC::ASTBuilder::getType):
        * parser/JSParser.cpp:
        (JSC::jsParse):
        (JSC::JSParser::JSParser):
        (JSC::JSParser::parseProperty):
        (JSC::JSParser::parseObjectLiteral):
        (JSC::JSParser::parseStrictObjectLiteral):
        * parser/JSParser.h:
        * parser/Lexer.cpp:
        (JSC::Lexer::clear):
        * parser/Lexer.h:
        (JSC::Lexer::currentOffset):
        (JSC::Lexer::setOffset):
          Add logic to allow us to roll the lexer back in the input stream.
        * parser/Nodes.h:
        (JSC::PropertyNode::):
        (JSC::PropertyNode::type):
        * parser/Parser.cpp:
        (JSC::Parser::parse):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::SourceProvider):
        (JSC::SourceProvider::isValid):
        (JSC::SourceProvider::setValid):
          SourceProvider now records whether the input text
          has already been validated.
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::SyntaxChecker):
        (JSC::SyntaxChecker::Property::Property):
        (JSC::SyntaxChecker::Property::operator!):
        (JSC::SyntaxChecker::createProperty):
        (JSC::SyntaxChecker::createPropertyList):
        (JSC::SyntaxChecker::createGetterOrSetterProperty):
          The SyntaxChecker mode now needs to maintain a bit more information
          to ensure that we can validate object literals correctly.

2010-07-08  Darin Adler  <darin@apple.com>

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::sharedInstance): Fix typo.

2010-07-08  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Fix assertion seen on the Leopard buildbot.
        The single shared instance of JSGlobalData was not being
        adopted after creation.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::sharedInstance): Do adoptRef and then leakRef.

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

        Reviewed by Sam Weinig.

        BOMs are whitespace.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::isStrWhiteSpace):

2010-07-08  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Try fix the GTK+ build by touching this file.

        * jit/ExecutableAllocatorFixedVMPool.cpp:

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

        GTK build fix take two.

        * GNUmakefile.am:

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

        GTK build fix.

        * GNUmakefile.am:

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-07-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Silence a few noisy build rules.

        * GNUmakefile.am:

2010-07-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62765.
        http://trac.webkit.org/changeset/62765
        https://bugs.webkit.org/show_bug.cgi?id=41840

        All jscore and layout tests crash on Qt bot (Requested by Ossy
        on #webkit).

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

2010-07-08  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Oliver Hunt.

        Interpreter: Crash in op_load_varargs on 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=41795

        Added missing cast of argCount to int32_t in op_load_varargs.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2010-07-08  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Geoffrey Garen.

        Make FastMalloc more portable.
        https://bugs.webkit.org/show_bug.cgi?id=41790

        Use WTF::Mutex instead of pthread_mutex_t and
        replace pthread_cond_t with WTF::ThreadCondition.

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

2010-07-08  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Remove needless #include <fcntl.h> from TCSystemAlloc.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=41777

        * wtf/TCSystemAlloc.cpp:

2010-07-07  Darin Adler  <darin@apple.com>

        Fixed build in configurations like PowerPC.

        * runtime/RegExpConstructor.cpp: Added include of PassOwnPtr.h.
        * runtime/RegExpObject.cpp: Ditto.
        * wtf/SizeLimits.cpp: Changed compile time assertion to work
        even on platforms where two bool members do not end up taking
        the same size as one int member!

2010-07-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Lazy mode of parser allows invalid syntax in object literals.
        https://bugs.webkit.org/show_bug.cgi?id=41809

        Make the parser itself validate getter and setter syntax rather
        than offloading it to the AST builder.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createGetterOrSetterProperty):
        * parser/JSParser.cpp:
        (JSC::JSParser::parseProperty):

2010-07-07  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Roben.

        Revert r62689.
        https://bugs.webkit.org/show_bug.cgi?id=41804

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

2010-07-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Add reverseFind to Vector and deploy in HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=41778

        This method seems generally useful.  I'm slightly surprised we don't
        have it already.

        * wtf/Vector.h:
        (WTF::::reverseFind):

2010-07-07  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Turn on adoptRef assertion for RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=41547

        * wtf/CrossThreadRefCounted.h: Fixed include style. Includes of other
        WTF headers should use "" includes; consistent in most WTF headers.
        Added a call to relaxAdoptionRequirement.

        * wtf/RefCounted.h: Fixed include style. Removed LOOSE_REF_COUNTED.
        Added relaxAdoptionRequirement.

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

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

2010-07-07  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        More OwnPtr work
        https://bugs.webkit.org/show_bug.cgi?id=41727

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::setPrivateProperty): Use adoptPtr.
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject::JSCallbackObject): Ditto.
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock): Ditto.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::createRareDataIfNecessary): Ditto.
        * parser/Nodes.cpp:
        (JSC::ScopeNode::ScopeNode): Ditto.
        * parser/ParserArena.cpp:
        (JSC::ParserArena::ParserArena): Ditto.
        * runtime/Arguments.h:
        (JSC::Arguments::Arguments): Ditto.
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compile): Ditto.
        (JSC::ProgramExecutable::compile): Ditto.
        (JSC::FunctionExecutable::compileForCall): Ditto.
        (JSC::FunctionExecutable::compileForConstruct): Ditto.
        (JSC::FunctionExecutable::reparseExceptionInfo): Ditto.
        (JSC::EvalExecutable::reparseExceptionInfo): Ditto.
        * runtime/JSArray.cpp:
        (JSC::JSArray::sort): Ditto.
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor): Ditto.
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject): Ditto.
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::createSingleCharacterString): Ditto.
        (JSC::SmallStrings::singleCharacterStringRep): Ditto.

        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::Collator::userDefault): Use adoptPtr.
        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::ByteCompiler): Ditto.
        (JSC::Yarr::ByteCompiler::compile): Ditto.
        (JSC::Yarr::ByteCompiler::regexBegin): Ditto.
        (JSC::Yarr::byteCompileRegex): Ditto.
        * yarr/RegexInterpreter.h:
        (JSC::Yarr::BytecodePattern::BytecodePattern): Ditto.

2010-07-07  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Make clear set the pointer to 0 before deletion
        https://bugs.webkit.org/show_bug.cgi?id=41727

        * wtf/OwnArrayPtr.h: Changed code so we always set the pointer to its new
        value before deleting the old one, including in the set function and the
        clear function. This required changing safeDelete.
        * wtf/OwnPtr.h: Ditto. Also removed some extra null checks.
        * wtf/PassOwnPtr.h: Ditto.

        * wtf/PassRefPtr.h: Changed code so we always set the pointer to its new
        value before deref'ing the old one in the clear function. Also added a
        leakRef function for NonNullPassRefPtr.
        * wtf/RefPtr.h: Ditto.

        * wtf/gobject/GOwnPtr.h: More of the same.
        * wtf/gobject/GRefPtr.h: Ditto.

2010-07-07  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Oliver Hunt.

        Refactored string parsing inside the lexer
        https://bugs.webkit.org/show_bug.cgi?id=41606

        Does not use goto. Although the last sunspider
        parse-only tests yields 1.044x speedup, I think the
        patch can have a slight improvement at most.

        * parser/Lexer.cpp:
        (JSC::singleEscape):
        (JSC::Lexer::parseString):
        (JSC::Lexer::lex):
        * parser/Lexer.h:

2010-07-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Make it possible to have both the JIT and Interpreter available in a single build
        https://bugs.webkit.org/show_bug.cgi?id=41722

        Separate the concept of !ENABLE(JIT) and ENABLE(INTERPRETER) and make it possible
        to have both JIT and INTERPRETER enabled at the same time.  This doesn't add
        support for mix mode execution, but it does allow a single build to contain all
        the code needed to use either the interpreter or the jit.

        If both ENABLE(INTERPRETER) and ENABLE(JIT) are true then setting the environment
        variable JSC_FORCE_INTERPRETER will force JSC to use the interpreter.

        This patch basically consists of replacing !ENABLE(JIT) with ENABLE(INTERPRETER),
        or converting #if ENABLE(JIT) ... #else ... into #if ENABLE(JIT) ... #endif
        #if ENABLE(INTERPRETER), etc.  There are also a few functions that need to be
        renamed to resolve return type ambiguity.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        * interpreter/CallFrame.h:
        (JSC::ExecState::returnVPC):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveLastCaller):
        * interpreter/Interpreter.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::isNumericCompareFunction):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::generateJITCode):
        (JSC::ProgramExecutable::generateJITCode):
        (JSC::FunctionExecutable::generateJITCodeForCall):
        (JSC::FunctionExecutable::generateJITCodeForConstruct):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::EvalExecutable::reparseExceptionInfo):
        * runtime/JSFunction.cpp:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::canUseJIT):
        * wtf/Platform.h:

2010-07-06  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Add adoptPtr and leakPtr functions for OwnPtr and PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=41320

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): Use assignment
        instead of set since the result of reparseExceptionInfo is now a
        PassOwnPtr.

        * bytecode/CodeBlock.h: Change extractExceptionInfo to return a
        PassOwnPtr instead of a raw pointer.

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::reparseExceptionInfo): Return a PassOwnPtr.
        (JSC::EvalExecutable::reparseExceptionInfo): Ditto.
        (JSC::ProgramExecutable::reparseExceptionInfo): Added. This was
        in the header before, but it's better to not have it there to reduce
        header dependencies. Return a PassOwnPtr.

        * runtime/Executable.h: Made reparseExceptionInfo return a PassOwnPtr,
        and put it in the private sections of classes other than the base class.

        * wtf/MessageQueue.h:
        (WTF::MessageQueue::append): Use leakPtr instead of release.
        (WTF::MessageQueue::appendAndCheckEmpty): Ditto.
        (WTF::MessageQueue::prepend): Ditto.

        * wtf/OwnPtr.h: Tweaked formatting. Changed the release function to return
        a PassOwnPtr rather than a raw pointer. Added a leakPtr function that
        returns a raw pointer. Put the constructor that takes a raw pointer and
        the set function into a section guarded by LOOSE_OWN_PTR. Adapted to the
        new adoptPtr function from PassOwnPtr.h.

        * wtf/PassOwnPtr.h: Tweaked formatting. Renamed the release function
        to leakPtr. Added an adoptPtr function that creates a new PassOwnPtr.
        Put the constructor and assignment operators that take a raw pointer
        into a section guarded by LOOSE_PASS_OWN_PTR.

2010-07-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler

        Update comment in StringExtras.h to be more accurate.

        * wtf/StringExtras.h:

2010-07-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62511.
        http://trac.webkit.org/changeset/62511
        https://bugs.webkit.org/show_bug.cgi?id=41686

        Breaks Linux/64bit compilation (Requested by xan_ on #webkit).

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

2010-07-05  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-07-05  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        ThreadingPthreads.cpp should use JNIUtility.h on Android, not outdated jni_utility.h
        https://bugs.webkit.org/show_bug.cgi?id=41594

        * wtf/ThreadingPthreads.cpp:

2010-07-04  Mark Rowe  <mrowe@apple.com>

        Build fix after r62456.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute): Be slightly more consistent in using uint32_t to prevent
        warnings about comparisons between signed and unsigned types, and attempts to call an overload
        of std::min that doesn't exist.

2010-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41553
        Make StringExtras.h versions of snprintf and vsnprintf match the unix versions.

        - MSVC does not ensure the buffers are null terminated as the unix versions do.

        * runtime/JSGlobalObjectFunctions.cpp: Cleanup includes.
        * runtime/UString.cpp: Clean up includes.
        (JSC::UString::from): Don't pass sizeof(buf) - 1, that is wrong.
        * wtf/StringExtras.h:
        (snprintf): Ensure null termination of buffer.
        (vsnprintf): Ditto.

2010-07-03  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Make Arguments::MaxArguments clamping work for numbers >= 0x80000000 in
        the interpreter as well as the JIT.

        https://bugs.webkit.org/show_bug.cgi?id=41351
        rdar://problem/8142141

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute): Fix signed integer overflow problem
        in op_load_varargs handling. 0xFFFFFFFF was read as -1.

2010-06-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Support for keys and in-memory storage for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=41252

        Set the role to Private.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2010-07-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Move BOM handling out of the lexer and parser
        https://bugs.webkit.org/show_bug.cgi?id=41539

        Doing the BOM stripping in the lexer meant that we could
        end up having to strip the BOMs from a source multiple times.
        To deal with this we now require all strings provided by
        a SourceProvider to already have had the BOMs stripped.
        This also simplifies some of the lexer logic.

        * parser/Lexer.cpp:
        (JSC::Lexer::setCode):
        (JSC::Lexer::sourceCode):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::SourceProvider):
        (JSC::UStringSourceProvider::create):
        (JSC::UStringSourceProvider::getRange):
        (JSC::UStringSourceProvider::UStringSourceProvider):
        * wtf/text/StringImpl.h:
        (WebCore::StringImpl::copyStringWithoutBOMs):

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

        Reviewed by Kent Tamura.

        [WINCE] Implement Unicode::isAlphanumeric and Unicode::isArabicChar.
        https://bugs.webkit.org/show_bug.cgi?id=41411

        * wtf/unicode/wince/UnicodeWince.cpp:
        (WTF::Unicode::isAlphanumeric):
        * wtf/unicode/wince/UnicodeWince.h:
        (WTF::Unicode::isArabicChar):

2010-07-03  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Change the CRASH() macro to print "WebKit CRASH" log.
        https://bugs.webkit.org/show_bug.cgi?id=41524

        Print "WebKit CRASH" before crashing.

        * wtf/Assertions.h:

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

        Reviewed by Oliver Hunt.

        Bug 41565 - Repatching in ARMv7Assembler::repatchLoadPtrToLEA is broken

        This method tried to repatch a LDR (T2) into an ADD (T3) - but it only
        repatches the first instruction word.  The layout of the fields in the
        second word is different, and also needs repatching.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::repatchLoadPtrToLEA):

2010-07-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Clamp the number of arguments supported by function.apply
        https://bugs.webkit.org/show_bug.cgi?id=41351
        <rdar://problem/8142141>

        Add clamping logic to function.apply similar to that
        enforced by firefox.  We have a smaller clamp than
        firefox as our calling convention means that stack
        usage is proportional to argument count -- the firefox
        limit is larger than you could actually call.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Arguments.h:
        (JSC::Arguments::):

2010-07-02  Chao-ying Fu  <fu@mips.com>

        Reviewed by Oliver Hunt.

        Re-enable JIT_OPTIMIZE_NATIVE_CALL on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=40179

        Add the MIPS part to re-enable JIT_OPTIMIZE_NATIVE_CALL.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * wtf/Platform.h:

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

        Reviewed by Oliver Hunt.

        Bug 41552 - Clean up ARMv7 vfp code generation
        Emit separate opcode individually, remove magic numbers.

        Also remove invalid assert from JSImmediate (number cells are not CELL_MASK aligned).

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::):
        (JSC::ARMv7Assembler::vadd_F64):
        (JSC::ARMv7Assembler::vcmp_F64):
        (JSC::ARMv7Assembler::vcvt_F64_S32):
        (JSC::ARMv7Assembler::vcvtr_S32_F64):
        (JSC::ARMv7Assembler::vdiv_F64):
        (JSC::ARMv7Assembler::vldr):
        (JSC::ARMv7Assembler::vmov_F64_0):
        (JSC::ARMv7Assembler::vmov):
        (JSC::ARMv7Assembler::vmrs):
        (JSC::ARMv7Assembler::vmul_F64):
        (JSC::ARMv7Assembler::vstr):
        (JSC::ARMv7Assembler::vsub_F64):
        (JSC::ARMv7Assembler::VFPOperand::VFPOperand):
        (JSC::ARMv7Assembler::VFPOperand::bits1):
        (JSC::ARMv7Assembler::VFPOperand::bits4):
        (JSC::ARMv7Assembler::vcvtOp):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::vfpOp):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::vfpMemOp):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branchDouble):
        * runtime/JSImmediate.h:
        (JSC::JSValue::isCell):

2010-07-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62410.
        http://trac.webkit.org/changeset/62410
        https://bugs.webkit.org/show_bug.cgi?id=41549

        accursed last minute changes (Requested by olliej on #webkit).

        * parser/Lexer.cpp:
        (JSC::Lexer::setCode):
        (JSC::Lexer::copyCodeWithoutBOMs):
        (JSC::Lexer::sourceCode):
        * parser/SourceProvider.h:
        (JSC::):
        (JSC::SourceProvider::SourceProvider):
        (JSC::SourceProvider::hasBOMs):
        (JSC::UStringSourceProvider::create):
        (JSC::UStringSourceProvider::getRange):
        (JSC::UStringSourceProvider::UStringSourceProvider):
        * wtf/text/StringImpl.h:

2010-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41548
        Use snprintf instead of sprintf everywhere in JavaScriptCore

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::globalFuncEscape):
        * runtime/UString.cpp:
        (JSC::UString::from):

2010-07-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Move BOM handling out of the lexer and parser
        https://bugs.webkit.org/show_bug.cgi?id=41539

        Doing the BOM stripping in the lexer meant that we could
        end up having to strip the BOMs from a source multiple times.
        To deal with this we now require all strings provided by
        a SourceProvider to already have had the BOMs stripped.
        This also simplifies some of the lexer logic.

        * parser/Lexer.cpp:
        (JSC::Lexer::setCode):
        (JSC::Lexer::sourceCode):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::SourceProvider):
        (JSC::UStringSourceProvider::create):
        (JSC::UStringSourceProvider::getRange):
        (JSC::UStringSourceProvider::UStringSourceProvider):
        * wtf/text/StringImpl.h:
        (WebCore::StringImpl::copyStringWithoutBOMs):

2010-07-02  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Oliver Hunt.
        
        [ Updated after rollout. ]

        Merged RegExp constructor and RegExp::create methods.
        Both functions are called with three parameters and check whether 
        flags (the third param) is given or not.
        Avoid extra hash lookups in RegExpCache::create by passing a pre-computed
        iterator parameter.
        https://bugs.webkit.org/show_bug.cgi?id=41055

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        * runtime/RegExp.h:
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::create):
        * runtime/RegExpCache.h:

2010-07-02  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed. Build fix for GTK+.

        Build Lexer.lut.h with the rest of the .lut.h files. Later these should
        all probably be moved to DerivedSources.

        * GNUmakefile.am:

2010-06-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Separate DerivedSources per-project
        https://bugs.webkit.org/show_bug.cgi?id=41109

        Generate JavaScriptCore derived sources in <builddir>/DerivedSources/JavaScriptCore.

        * GNUmakefile.am:

2010-07-02  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Oliver Hunt.

        The alternativeFrameLocation value is wrong in the emitDisjunction function in
        case of PatternTerm::TypeParentheticalAssertion. This value needs to be
        computed from term.frameLocation instead of term.inputPosition. This mistake caused glibc
        memory corruption in some cases.
        Layout test added for checking of TypeParentheticalAssertion case.
        https://bugs.webkit.org/show_bug.cgi?id=41458

        * yarr/RegexInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::emitDisjunction):

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

        Reviewed by Maciej Stachowiak.

        Add a FixedArray template to encapsulate fixed length arrays
        https://bugs.webkit.org/show_bug.cgi?id=41506

        This new type is used in place of fixed length C arrays so
        that debug builds can guard against attempts to go beyond
        the end of the array.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/Opcode.cpp:
        (JSC::OpcodeStats::~OpcodeStats):
        * pcre/pcre_compile.cpp:
        (calculateCompiledPatternLength):
        * runtime/Collector.cpp:
        (JSC::Heap::allocateBlock):
        (JSC::Heap::allocate):
        * runtime/Collector.h:
        (JSC::CollectorBitmap::clearAll):
        * runtime/CollectorHeapIterator.h:
        (JSC::CollectorHeapIterator::operator*):
        * runtime/DateInstanceCache.h:
        * runtime/JSString.cpp:
        (JSC::JSString::replaceCharacter):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSStringFinalizerStruct::):
        * runtime/NumericStrings.h:
        * runtime/RegExpCache.h:
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::singleCharacterStrings):
        * wtf/AVLTree.h:
        * wtf/FixedArray.h: Added.
        (WTF::FixedArray::operator[]):
        (WTF::FixedArray::data):

2010-07-01  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Oliver Hunt.

        Improve the main lexer switch by mapping input characters to their type
        https://bugs.webkit.org/show_bug.cgi?id=41459

        Sunsipder: no change (from 532.9ms to 531.5ms)
        SunSpider --parse-only: 1.025x as fast (from 33.1ms to 32.3ms)

        * parser/Lexer.cpp:
        (JSC::):
        (JSC::Lexer::lex):

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

        Rubber-stamped by Ander Carlsson.

        Define HAVE_HOSTED_CORE_ANIMATION on Snow Leopard.

        * wtf/Platform.h:

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

        Reviewed by Oliver Hunt.

        Bug 41490 - Add missing operations to MacroAssemblerARMv7
        Also, make single, double, quad register numbers in ARMv7Assembler distinct & strongly typed.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMRegisters::):
        (JSC::ARMRegisters::asSingle):
        (JSC::ARMRegisters::asDouble):
        (JSC::VFPImmediate::VFPImmediate):
        (JSC::VFPImmediate::isValid):
        (JSC::VFPImmediate::value):
        (JSC::ARMv7Assembler::singleRegisterMask):
        (JSC::ARMv7Assembler::doubleRegisterMask):
        (JSC::ARMv7Assembler::):
        (JSC::ARMv7Assembler::add_S):
        (JSC::ARMv7Assembler::neg):
        (JSC::ARMv7Assembler::orr_S):
        (JSC::ARMv7Assembler::sub):
        (JSC::ARMv7Assembler::sub_S):
        (JSC::ARMv7Assembler::vadd_F64):
        (JSC::ARMv7Assembler::vcmp_F64):
        (JSC::ARMv7Assembler::vcvt_F64_S32):
        (JSC::ARMv7Assembler::vcvtr_S32_F64):
        (JSC::ARMv7Assembler::vdiv_F64):
        (JSC::ARMv7Assembler::vldr):
        (JSC::ARMv7Assembler::vmov_F64_0):
        (JSC::ARMv7Assembler::vmov):
        (JSC::ARMv7Assembler::vmul_F64):
        (JSC::ARMv7Assembler::vstr):
        (JSC::ARMv7Assembler::vsub_F64):
        (JSC::ARMv7Assembler::vcvt):
        (JSC::ARMv7Assembler::vmem):
        * assembler/AbstractMacroAssembler.h:
        * assembler/MacroAssemblerARM.h:
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::fpTempRegisterAsSingle):
        (JSC::MacroAssemblerARMv7::neg32):
        (JSC::MacroAssemblerARMv7::loadDouble):
        (JSC::MacroAssemblerARMv7::divDouble):
        (JSC::MacroAssemblerARMv7::convertInt32ToDouble):
        (JSC::MacroAssemblerARMv7::branchConvertDoubleToInt32):
        (JSC::MacroAssemblerARMv7::zeroDouble):
        (JSC::MacroAssemblerARMv7::branchOr32):
        (JSC::MacroAssemblerARMv7::set32):
        (JSC::MacroAssemblerARMv7::set8):
        * assembler/MacroAssemblerMIPS.h:
        * assembler/MacroAssemblerX86Common.h:

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

        Reviewed by Geoff Garen.

        Improve reentrancy logic in polymorphic cache stubs
        <https://bugs.webkit.org/show_bug.cgi?id=41482>
        <rdar://problem/8094380>

        Make the polymorphic cache stubs handle reentrancy
        better.

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

2010-07-01  Antti Koivisto  <koivisto@iki.fi>

        Revert accidental commit.

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

2010-06-30  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Add assertion, off by default, for when you forget to do adoptRef
        https://bugs.webkit.org/show_bug.cgi?id=41422

        * wtf/PassRefPtr.h: Tweaked formatting. Added a new adopted
        function, called on the pointer by adoptRef, with an empty inline
        default version, meant to be overloaded. Unified the inlining
        with a macro named REF_DEREF_INLINE to make it clearer what's
        going on in the refIfNotNull/derefIfNotNull functions. Renamed
        releaseRef to leakRef, but left the old name in for compatibility
        for now.

        * wtf/RefCounted.h: Added code to require adoption and assert if
        you don't call adoptRef. For now, it is turned off because of the
        LOOSE_REF_COUNTED define in this header. Later we can turn it on
        once we get everything working without asserting.

2010-06-29  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Bug 41238 - RegExp performance slow on Dromaeo benchmark

        Other javascript engines appear to cache prior results of regular 
        expression operations.

        Suggest adding some sort of caching mechanism to regular expression 
        processing.

        Added a single entry cache of match() results to RegExp class.

        Also added performance improvements to UString == operator.
        First check the impls for equality.  Then get the length of
        each of the non-null impls.  Next check the sizes for equality.
        Then check the data for the case of different impls that point 
        to the same data (most likely due to substrings from the beginning of
        another string).  Lastly we check the underlying data for equality.

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::match):
        * runtime/RegExp.h:
        * runtime/UString.h:
        (JSC::operator==):

2010-06-29  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Geoffrey Garen.

        WTF::HashSet iterators are quasi-mutable.  Changing the value through
        dereferencing an iterator will not change the behavior of methods like
        contains or find, but will change the behavior of iterating.

        * wtf/HashSet.h:
        (WTF::::begin):
        (WTF::::end):
        (WTF::::find):
        (WTF::::remove):
        * wtf/HashTable.h:

2010-06-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Clean up the source lists in the GNUMakefile.am files
        https://bugs.webkit.org/show_bug.cgi?id=41229

        Clean up the GNUMakefile.am a little bit. Alphabetize and conglomerate
        the source lists.

        * GNUmakefile.am:

2010-06-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix QtScript build after QScriptValuePrivate ctor changes
        https://bugs.webkit.org/show_bug.cgi?id=41307

        * qt/api/qscriptvalue_p.h:
        (QScriptValuePrivate::prototype):
        * qt/benchmarks/qscriptengine/qscriptengine.pro:

2010-06-28  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QScriptEngine API should contain a newArray function
        https://bugs.webkit.org/show_bug.cgi?id=39115

        * qt/api/qscriptengine.cpp:
        (QScriptEngine::newArray):
        * qt/api/qscriptengine.h:
        * qt/api/qscriptengine_p.cpp:
        (QScriptEnginePrivate::newArray):
        * qt/api/qscriptengine_p.h:
        * qt/tests/qscriptengine/tst_qscriptengine.cpp:
        (tst_QScriptEngine::newArray):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Install jsc as jsc-X where X is the major API version to allow
        parallel installation of both GTK+ 2.x and 3.x versions.

        * GNUmakefile.am:

2010-06-28  John Gregg  <johnnyg@google.com>

        Reviewed by Kent Tamura.

        add ENABLE_DIRECTORY_UPLOAD build support
        https://bugs.webkit.org/show_bug.cgi?id=41100

        * Configurations/FeatureDefines.xcconfig:

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Revert to build jsc, since the tests expect this.

        * GNUmakefile.am:

2010-06-28  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Oliver Hunt.

        Only one character lookahead should be enough for the lexer
        https://bugs.webkit.org/show_bug.cgi?id=41213

        The lexer had 4 character lookahead before, which required
        a complex shifting mechanism. This can be improved by using
        only one character lookahead for most decisions, and a
        peek() function as a fallback when it is absolutely necessary.

        * parser/Lexer.cpp:
        (JSC::Lexer::currentCharacter):
        (JSC::Lexer::currentOffset):
        (JSC::Lexer::setCode):
        (JSC::Lexer::shift):
        (JSC::Lexer::peek):
        (JSC::Lexer::getUnicodeCharacter):
        (JSC::Lexer::shiftLineTerminator):
        (JSC::Lexer::lastTokenWasRestrKeyword):
        (JSC::Lexer::lex):
        (JSC::Lexer::scanRegExp):
        (JSC::Lexer::skipRegExp):
        * parser/Lexer.h:

2010-06-28  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed build fix.

        [EFL] Build fix for latest version of Ecore library.
        Ecore recently changed return type of callbacks from int to Eina_Bool.

        * wtf/efl/MainThreadEfl.cpp:
        (WTF::timeoutFired): Return Eina_Bool instead of int.

2010-06-28  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QScriptValue should have API for accessing object properties
        https://bugs.webkit.org/show_bug.cgi?id=40903

        Make possible to access properties inside QScriptValues. While this
        still doesn't support the ResolveLocal parameter, it is already useful
        for testing the API.

        The tests from upstream QtScript weren't imported since most of them
        depend on the setProperty() function as well. A simple test was created.

        * qt/api/qscriptvalue.cpp:
        (QScriptValue::property):
        * qt/api/qscriptvalue.h:
        (QScriptValue::):
        * qt/api/qscriptvalue_p.h:
        (QScriptValuePrivate::property):
        * qt/tests/qscriptvalue/tst_qscriptvalue.cpp:
        (tst_QScriptValue::propertySimple):
        * qt/tests/qscriptvalue/tst_qscriptvalue.h:

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Add support for GTK+3
        https://bugs.webkit.org/show_bug.cgi?id=41253

        Suffix jsc with the API version of the library, so that
        libwebkitgtk 1.x and 3.x can install jsc.

        * GNUmakefile.am:

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

        Reviewed by Kent Tamura.

        [BREWMP] Turn ENABLE(SINGLE_THREADED) on.
        https://bugs.webkit.org/show_bug.cgi?id=41135

        Brew MP does not support preemptive multi-threading.
        Disable threading for Brew MP.

        * wtf/Platform.h:

2010-06-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add an ENABLE_WEB_TIMING option for enabling Web Timing support.
        https://bugs.webkit.org/show_bug.cgi?id=38924

        * Configurations/FeatureDefines.xcconfig:

2010-06-25  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Geoffrey Garen.

        We assume in testapi.c that the value aHeapRef refers to will not be
        moved.  When we have movable objects, this will not be the case.

        * API/tests/testapi.c:
        (main):

2010-06-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61924.
        http://trac.webkit.org/changeset/61924
        https://bugs.webkit.org/show_bug.cgi?id=41240

        It was rolled out, but cq+ wasn't removed (Requested by Ossy_
        on #webkit).

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        * runtime/RegExp.h:
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::create):
        * runtime/RegExpCache.h:

2010-06-25  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Geoffrey Garen.

        Merge RegExp constructor and RegExp::create methods into one.
        Both of function are called with tree parameters and check whether 
        flags (the third param) is given or not.
        Simplify hash lookups in RegExpCache::create with giving them an extra 
        iterator parameter.
        https://bugs.webkit.org/show_bug.cgi?id=41055

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        * runtime/RegExp.h:
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::create):
        * runtime/RegExpCache.h:

2010-06-25  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Introduce QtScript benchmarks.

        The QtScript performance should be tested regularly. The patch introduces
        micro benchmarks for existing API.

        [Qt] Performance of the QtScript API is not tested.
        https://bugs.webkit.org/show_bug.cgi?id=40911

        * qt/benchmarks/benchmarks.pri: Copied from JavaScriptCore/qt/tests/tests.pri.
        * qt/benchmarks/benchmarks.pro: Added.
        * qt/benchmarks/qscriptengine/qscriptengine.pro: Added.
        * qt/benchmarks/qscriptengine/tst_qscriptengine.cpp: Added.
        (tst_QScriptEngine::checkSyntax_data):
        (tst_QScriptEngine::checkSyntax):
        (tst_QScriptEngine::constructor):
        (tst_QScriptEngine::evaluateString_data):
        (tst_QScriptEngine::evaluateString):
        (tst_QScriptEngine::evaluateProgram_data):
        (tst_QScriptEngine::evaluateProgram):
        (tst_QScriptEngine::newObject):
        (tst_QScriptEngine::nullValue):
        (tst_QScriptEngine::undefinedValue):
        (tst_QScriptEngine::globalObject):
        (tst_QScriptEngine::toStringHandle):
        * qt/benchmarks/qscriptvalue/qscriptvalue.pro: Added.
        * qt/benchmarks/qscriptvalue/tst_qscriptvalue.cpp: Added.
        (tst_QScriptValue::tst_QScriptValue):
        (tst_QScriptValue::~tst_QScriptValue):
        (tst_QScriptValue::values_data):
        (tst_QScriptValue::ctorBool):
        (tst_QScriptValue::ctorReal):
        (tst_QScriptValue::ctorNumber):
        (tst_QScriptValue::ctorQString):
        (tst_QScriptValue::ctorCString):
        (tst_QScriptValue::ctorSpecial):
        (tst_QScriptValue::ctorQScriptValue):
        (tst_QScriptValue::isValid_data):
        (tst_QScriptValue::isValid):
        (tst_QScriptValue::isBool_data):
        (tst_QScriptValue::isBool):
        (tst_QScriptValue::isNumber_data):
        (tst_QScriptValue::isNumber):
        (tst_QScriptValue::isFunction_data):
        (tst_QScriptValue::isFunction):
        (tst_QScriptValue::isNull_data):
        (tst_QScriptValue::isNull):
        (tst_QScriptValue::isString_data):
        (tst_QScriptValue::isString):
        (tst_QScriptValue::isUndefined_data):
        (tst_QScriptValue::isUndefined):
        (tst_QScriptValue::isObject_data):
        (tst_QScriptValue::isObject):
        (tst_QScriptValue::isError_data):
        (tst_QScriptValue::isError):
        (tst_QScriptValue::toString_data):
        (tst_QScriptValue::toString):
        (tst_QScriptValue::toNumber_data):
        (tst_QScriptValue::toNumber):
        (tst_QScriptValue::toBool_data):
        (tst_QScriptValue::toBool):
        (tst_QScriptValue::toInteger_data):
        (tst_QScriptValue::toInteger):
        (tst_QScriptValue::toInt32_data):
        (tst_QScriptValue::toInt32):
        (tst_QScriptValue::toUInt32_data):
        (tst_QScriptValue::toUInt32):
        (tst_QScriptValue::toUInt16_data):
        (tst_QScriptValue::toUInt16):
        (tst_QScriptValue::toObject_data):
        (tst_QScriptValue::toObject):
        (tst_QScriptValue::equals_data):
        (tst_QScriptValue::equals):
        (tst_QScriptValue::strictlyEquals_data):
        (tst_QScriptValue::strictlyEquals):
        (tst_QScriptValue::instanceOf_data):
        (tst_QScriptValue::instanceOf):

2010-06-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Remove old js parser
        https://bugs.webkit.org/show_bug.cgi?id=41222

        Remove the old yacc parser, this also solves the tiger problem.  Which
        was a conflict between yacc generated token values and those in the
        custom parser

        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pro:
        * GNUmakefile.am:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * parser/Grammar.y: Removed.
        * parser/JSParser.cpp:
        * parser/JSParser.h:
        * parser/Lexer.cpp:
        * parser/NodeConstructors.h:
        (JSC::Node::Node):
        * parser/Parser.cpp:
        (JSC::Parser::parse):
        * wtf/Platform.h:

2010-06-25  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        New QtScript API; setPrototype() and prototype().

        This patch implements QScriptValue's prototype accessors.

        [Qt] QScriptValue should have accessors to a prototype.
        https://bugs.webkit.org/show_bug.cgi?id=39356

        * qt/api/qscriptvalue.cpp:
        (QScriptValue::prototype):
        (QScriptValue::setPrototype):
        * qt/api/qscriptvalue.h:
        * qt/api/qscriptvalue_p.h:
        (QScriptValuePrivate::prototype):
        (QScriptValuePrivate::setPrototype):
        * qt/tests/qscriptvalue/tst_qscriptvalue.cpp:
        (tst_QScriptValue::getSetPrototype):
        * qt/tests/qscriptvalue/tst_qscriptvalue.h:

2010-06-25  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [CMake] Add option to enable JIT.
        JIT is disabled by default, but now it's possible to enable it through
        an option to CMake: -DENABLE_JIT will enable it.
        https://bugs.webkit.org/show_bug.cgi?id=40936

        * CMakeLists.txt: Add missing files and re-sort.

2010-06-25  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        [CMake] Remove unused variable in EFL build system. It was previously
        being used to set the flags of each port but it was superseded by
        other flags.
        https://bugs.webkit.org/show_bug.cgi?id=40931

        * jsc/CMakeLists.txt:

2010-06-25  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Geoffrey Garen.

        Aligning AssemblerBuffer to 128 bytes gives a 0.4% speedup on
        sunspider.

        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::AssemblerBuffer):

2010-06-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61842.
        http://trac.webkit.org/changeset/61842
        https://bugs.webkit.org/show_bug.cgi?id=41208

        It broke Windows build (Requested by Ossy_ on #webkit).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * wtf/OwnPtrCommon.h:
        * wtf/brew/OwnPtrBrew.h: Removed.
        * wtf/win/OwnPtrWin.h: Removed.

2010-06-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61833.
        http://trac.webkit.org/changeset/61833
        https://bugs.webkit.org/show_bug.cgi?id=41205

        It broke Leopard and GTK (Requested by Ossy_ on #webkit).

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        * runtime/RegExp.h:
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::create):
        * runtime/RegExpCache.h:

2010-06-25  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Adam Barth.

        Change OwnPtrCommon to include platform-specific headers
        https://bugs.webkit.org/show_bug.cgi?id=40279

        Adding new type to OwnPtrCommon needlessly causes all ports to do full rebuilds.
        Change OwnPtrCommon to include platform-specific headers to avoid all ports rebuilds.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * wtf/OwnPtrCommon.h:
        * wtf/brew/OwnPtrBrew.h: Added.
        * wtf/win/OwnPtrWin.h: Added.

2010-06-25  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Add the possibility for a head and footer section to create_jit_stubs.
        https://bugs.webkit.org/show_bug.cgi?id=36050

        * create_jit_stubs:

2010-06-24  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Geoffrey Garen.

        Merge RegExp constructor and RegExp::create methods into one.
        Both of function are called with tree parameters and check whether 
        flags (the third param) is given or not.
        Simplify hash lookups in RegExpCache::create with giving them an extra 
        iterator parameter.
        https://bugs.webkit.org/show_bug.cgi?id=41055

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        * runtime/RegExp.h:
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::create):
        * runtime/RegExpCache.h:

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

        Reviewed by Maciej Stachowiak.

        Incorrect use of '+ 4' and 0 instead of tag and payload offsets in JSValue32_64
        https://bugs.webkit.org/show_bug.cgi?id=41193

        I noticed a use of '+ 4' in some of the 32_64 code paths and realised there
        were a few places where endianness was being hardcoded.  This patch fixes
        the errors i could find through code inspection.

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_resolve_global):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):

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

        Build fix

        Temporarily get the tiger bot working again by disabling the
        new JS parser.  GCC on tiger is miscompiling the parser and
        I don't have access to a tiger machine right now.

        * wtf/Platform.h:

 2010-06-21  Nathan Lawrence  <nlawrence@apple.com>

         Reviewed by Geoff Garen.

         https://bugs.webkit.org/show_bug.cgi?id=40128
         Fixed broken debug functionality.

         * interpreter/Interpreter.cpp:
         (JSC::Interpreter::dumpRegisters):
             Fixed to work with updated call frame.
         * runtime/JSImmediate.h:
         (JSC::JSValue::isCell):
             Added assert for aligned cell.
         * runtime/JSValue.cpp:
         (JSC::JSValue::description):
             Fixed to work with current JSValue implementation.
         * runtime/JSZombie.cpp:
         (JSC::JSZombie::leakedZombieStructure):
             JSombies compile again.

2010-06-24  Leandro Pereira  <leandro@profusion.mobi>

        Unreviewed build fix.

        * CMakeLists.txt: Add JSParser.cpp.

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

        Reviewed by Maciej Stachowiak.

        Single character string replacement may replace too many characters
        https://bugs.webkit.org/show_bug.cgi?id=41138
        <rdar://problem/8097496>

        Simple fix to stop the rope path of single character replacement
        once the first replacement occurs.

        * runtime/JSString.cpp:
        (JSC::JSString::replaceCharacter):

2010-06-24  Gabor Loki  <loki@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix the length of instruction stream controlled by constant pool
        https://bugs.webkit.org/show_bug.cgi?id=40293

        The initial/maximum length of instruction stream (m_maxDistance) should
        be set when the first constant arrives to the constant pool. Otherwise
        the constant pool could be placed into an uninterrupted sequence.

        * assembler/AssemblerBufferWithConstantPool.h:
        (JSC::):

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

        Reviewed by Gavin Barraclough.

        We assume bytecodeOffset will always return a value > 1,
        so we adjust the failure case to return 1 instead of 0.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::bytecodeOffset):

2010-06-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Custom-written JavaScript parser
        https://bugs.webkit.org/show_bug.cgi?id=34019

        Implement a recursive descent parser similar to that used by V8 and
        SpiderMonkey.  Greater than 2x improvement in SunSpider parsing tests.

        The parser consists of a JSParser class that uses a TreeBuilder to actually
        build the AST.  There are currently two builders -- the ASTBuilder and
        SyntaxChecker which separate the job of building an AST for code generation
        and simply checking syntactic correctness.

        There's still some less than ideal code remaining in the parser to allow
        us to retain the existing lexing code with minimal changes.  We'll tidy
        this up at a later date.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * parser/ASTBuilder.h: Added.
        (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo):
        (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo):
        (JSC::ASTBuilder::ASTBuilder):
        (JSC::ASTBuilder::createSourceElements):
        (JSC::ASTBuilder::varDeclarations):
        (JSC::ASTBuilder::funcDeclarations):
        (JSC::ASTBuilder::features):
        (JSC::ASTBuilder::numConstants):
        (JSC::ASTBuilder::appendToComma):
        (JSC::ASTBuilder::createCommaExpr):
        (JSC::ASTBuilder::createLogicalNot):
        (JSC::ASTBuilder::createUnaryPlus):
        (JSC::ASTBuilder::createVoid):
        (JSC::ASTBuilder::thisExpr):
        (JSC::ASTBuilder::createResolve):
        (JSC::ASTBuilder::createObjectLiteral):
        (JSC::ASTBuilder::createArray):
        (JSC::ASTBuilder::createNumberExpr):
        (JSC::ASTBuilder::createString):
        (JSC::ASTBuilder::createBoolean):
        (JSC::ASTBuilder::createNull):
        (JSC::ASTBuilder::createBracketAccess):
        (JSC::ASTBuilder::createDotAccess):
        (JSC::ASTBuilder::createRegex):
        (JSC::ASTBuilder::createNewExpr):
        (JSC::ASTBuilder::createConditionalExpr):
        (JSC::ASTBuilder::createAssignResolve):
        (JSC::ASTBuilder::createFunctionExpr):
        (JSC::ASTBuilder::createFunctionBody):
        (JSC::ASTBuilder::createGetterOrSetterProperty):
        (JSC::ASTBuilder::createArguments):
        (JSC::ASTBuilder::createArgumentsList):
        (JSC::ASTBuilder::createProperty):
        (JSC::ASTBuilder::createPropertyList):
        (JSC::ASTBuilder::createElementList):
        (JSC::ASTBuilder::createFormalParameterList):
        (JSC::ASTBuilder::createClause):
        (JSC::ASTBuilder::createClauseList):
        (JSC::ASTBuilder::setUsesArguments):
        (JSC::ASTBuilder::createFuncDeclStatement):
        (JSC::ASTBuilder::createBlockStatement):
        (JSC::ASTBuilder::createExprStatement):
        (JSC::ASTBuilder::createIfStatement):
        (JSC::ASTBuilder::createForLoop):
        (JSC::ASTBuilder::createForInLoop):
        (JSC::ASTBuilder::createEmptyStatement):
        (JSC::ASTBuilder::createVarStatement):
        (JSC::ASTBuilder::createReturnStatement):
        (JSC::ASTBuilder::createBreakStatement):
        (JSC::ASTBuilder::createContinueStatement):
        (JSC::ASTBuilder::createTryStatement):
        (JSC::ASTBuilder::createSwitchStatement):
        (JSC::ASTBuilder::createWhileStatement):
        (JSC::ASTBuilder::createDoWhileStatement):
        (JSC::ASTBuilder::createLabelStatement):
        (JSC::ASTBuilder::createWithStatement):
        (JSC::ASTBuilder::createThrowStatement):
        (JSC::ASTBuilder::createDebugger):
        (JSC::ASTBuilder::createConstStatement):
        (JSC::ASTBuilder::appendConstDecl):
        (JSC::ASTBuilder::appendStatement):
        (JSC::ASTBuilder::addVar):
        (JSC::ASTBuilder::combineCommaNodes):
        (JSC::ASTBuilder::evalCount):
        (JSC::ASTBuilder::appendBinaryExpressionInfo):
        (JSC::ASTBuilder::operatorStackPop):
        (JSC::ASTBuilder::operatorStackHasHigherPrecedence):
        (JSC::ASTBuilder::getFromOperandStack):
        (JSC::ASTBuilder::shrinkOperandStackBy):
        (JSC::ASTBuilder::appendBinaryOperation):
        (JSC::ASTBuilder::operatorStackAppend):
        (JSC::ASTBuilder::popOperandStack):
        (JSC::ASTBuilder::appendUnaryToken):
        (JSC::ASTBuilder::unaryTokenStackLastType):
        (JSC::ASTBuilder::unaryTokenStackLastStart):
        (JSC::ASTBuilder::unaryTokenStackRemoveLast):
        (JSC::ASTBuilder::assignmentStackAppend):
        (JSC::ASTBuilder::createAssignment):
        (JSC::ASTBuilder::Scope::Scope):
        (JSC::ASTBuilder::setExceptionLocation):
        (JSC::ASTBuilder::incConstants):
        (JSC::ASTBuilder::usesThis):
        (JSC::ASTBuilder::usesCatch):
        (JSC::ASTBuilder::usesClosures):
        (JSC::ASTBuilder::usesArguments):
        (JSC::ASTBuilder::usesAssignment):
        (JSC::ASTBuilder::usesWith):
        (JSC::ASTBuilder::usesEval):
        (JSC::ASTBuilder::createNumber):
        (JSC::ASTBuilder::makeTypeOfNode):
        (JSC::ASTBuilder::makeDeleteNode):
        (JSC::ASTBuilder::makeNegateNode):
        (JSC::ASTBuilder::makeBitwiseNotNode):
        (JSC::ASTBuilder::makeMultNode):
        (JSC::ASTBuilder::makeDivNode):
        (JSC::ASTBuilder::makeAddNode):
        (JSC::ASTBuilder::makeSubNode):
        (JSC::ASTBuilder::makeLeftShiftNode):
        (JSC::ASTBuilder::makeRightShiftNode):
        (JSC::ASTBuilder::makeFunctionCallNode):
        (JSC::ASTBuilder::makeBinaryNode):
        (JSC::ASTBuilder::makeAssignNode):
        (JSC::ASTBuilder::makePrefixNode):
        (JSC::ASTBuilder::makePostfixNode):
        * parser/JSParser.cpp: Added.
        (JSC::JSParser::AllowInOverride::AllowInOverride):
        (JSC::JSParser::AllowInOverride::~AllowInOverride):
        (JSC::JSParser::token):
        (JSC::JSParser::next):
        (JSC::JSParser::consume):
        (JSC::JSParser::match):
        (JSC::JSParser::tokenStart):
        (JSC::JSParser::tokenLine):
        (JSC::JSParser::tokenEnd):
        (JSC::JSParser::):
        (JSC::JSParser::autoSemiColon):
        (JSC::JSParser::canRecurse):
        (JSC::JSParser::lastTokenEnd):
        (JSC::jsParse):
        (JSC::JSParser::JSParser):
        (JSC::JSParser::parseProgram):
        (JSC::JSParser::allowAutomaticSemicolon):
        (JSC::JSParser::parseSourceElements):
        (JSC::JSParser::parseVarDeclaration):
        (JSC::JSParser::parseConstDeclaration):
        (JSC::JSParser::parseDoWhileStatement):
        (JSC::JSParser::parseWhileStatement):
        (JSC::JSParser::parseVarDeclarationList):
        (JSC::JSParser::parseConstDeclarationList):
        (JSC::JSParser::parseForStatement):
        (JSC::JSParser::parseBreakStatement):
        (JSC::JSParser::parseContinueStatement):
        (JSC::JSParser::parseReturnStatement):
        (JSC::JSParser::parseThrowStatement):
        (JSC::JSParser::parseWithStatement):
        (JSC::JSParser::parseSwitchStatement):
        (JSC::JSParser::parseSwitchClauses):
        (JSC::JSParser::parseSwitchDefaultClause):
        (JSC::JSParser::parseTryStatement):
        (JSC::JSParser::parseDebuggerStatement):
        (JSC::JSParser::parseBlockStatement):
        (JSC::JSParser::parseStatement):
        (JSC::JSParser::parseFormalParameters):
        (JSC::JSParser::parseFunctionBody):
        (JSC::JSParser::parseFunctionInfo):
        (JSC::JSParser::parseFunctionDeclaration):
        (JSC::JSParser::parseExpressionOrLabelStatement):
        (JSC::JSParser::parseExpressionStatement):
        (JSC::JSParser::parseIfStatement):
        (JSC::JSParser::parseExpression):
        (JSC::JSParser::parseAssignmentExpression):
        (JSC::JSParser::parseConditionalExpression):
        (JSC::isUnaryOp):
        (JSC::JSParser::isBinaryOperator):
        (JSC::JSParser::parseBinaryExpression):
        (JSC::JSParser::parseProperty):
        (JSC::JSParser::parseObjectLiteral):
        (JSC::JSParser::parseArrayLiteral):
        (JSC::JSParser::parsePrimaryExpression):
        (JSC::JSParser::parseArguments):
        (JSC::JSParser::parseMemberExpression):
        (JSC::JSParser::parseUnaryExpression):
        * parser/JSParser.h: Added.
        (JSC::):
        (JSC::JSTokenInfo::JSTokenInfo):
        * parser/Lexer.cpp:
        (JSC::Lexer::lex):
        * parser/Lexer.h:
        (JSC::Lexer::setLastLineNumber):
        (JSC::Lexer::lastLineNumber):
        * parser/NodeConstructors.h:
        (JSC::Node::Node):
        * parser/Parser.cpp:
        (JSC::Parser::parse):
        * parser/SyntaxChecker.h: Added.
        (JSC::SyntaxChecker::SyntaxChecker):
        (JSC::SyntaxChecker::createSourceElements):
        (JSC::SyntaxChecker::makeFunctionCallNode):
        (JSC::SyntaxChecker::appendToComma):
        (JSC::SyntaxChecker::createCommaExpr):
        (JSC::SyntaxChecker::makeAssignNode):
        (JSC::SyntaxChecker::makePrefixNode):
        (JSC::SyntaxChecker::makePostfixNode):
        (JSC::SyntaxChecker::makeTypeOfNode):
        (JSC::SyntaxChecker::makeDeleteNode):
        (JSC::SyntaxChecker::makeNegateNode):
        (JSC::SyntaxChecker::makeBitwiseNotNode):
        (JSC::SyntaxChecker::createLogicalNot):
        (JSC::SyntaxChecker::createUnaryPlus):
        (JSC::SyntaxChecker::createVoid):
        (JSC::SyntaxChecker::thisExpr):
        (JSC::SyntaxChecker::createResolve):
        (JSC::SyntaxChecker::createObjectLiteral):
        (JSC::SyntaxChecker::createArray):
        (JSC::SyntaxChecker::createNumberExpr):
        (JSC::SyntaxChecker::createString):
        (JSC::SyntaxChecker::createBoolean):
        (JSC::SyntaxChecker::createNull):
        (JSC::SyntaxChecker::createBracketAccess):
        (JSC::SyntaxChecker::createDotAccess):
        (JSC::SyntaxChecker::createRegex):
        (JSC::SyntaxChecker::createNewExpr):
        (JSC::SyntaxChecker::createConditionalExpr):
        (JSC::SyntaxChecker::createAssignResolve):
        (JSC::SyntaxChecker::createFunctionExpr):
        (JSC::SyntaxChecker::createFunctionBody):
        (JSC::SyntaxChecker::createArguments):
        (JSC::SyntaxChecker::createArgumentsList):
        (JSC::SyntaxChecker::createProperty):
        (JSC::SyntaxChecker::createPropertyList):
        (JSC::SyntaxChecker::createElementList):
        (JSC::SyntaxChecker::createFormalParameterList):
        (JSC::SyntaxChecker::createClause):
        (JSC::SyntaxChecker::createClauseList):
        (JSC::SyntaxChecker::setUsesArguments):
        (JSC::SyntaxChecker::createFuncDeclStatement):
        (JSC::SyntaxChecker::createBlockStatement):
        (JSC::SyntaxChecker::createExprStatement):
        (JSC::SyntaxChecker::createIfStatement):
        (JSC::SyntaxChecker::createForLoop):
        (JSC::SyntaxChecker::createForInLoop):
        (JSC::SyntaxChecker::createEmptyStatement):
        (JSC::SyntaxChecker::createVarStatement):
        (JSC::SyntaxChecker::createReturnStatement):
        (JSC::SyntaxChecker::createBreakStatement):
        (JSC::SyntaxChecker::createContinueStatement):
        (JSC::SyntaxChecker::createTryStatement):
        (JSC::SyntaxChecker::createSwitchStatement):
        (JSC::SyntaxChecker::createWhileStatement):
        (JSC::SyntaxChecker::createWithStatement):
        (JSC::SyntaxChecker::createDoWhileStatement):
        (JSC::SyntaxChecker::createLabelStatement):
        (JSC::SyntaxChecker::createThrowStatement):
        (JSC::SyntaxChecker::createDebugger):
        (JSC::SyntaxChecker::createConstStatement):
        (JSC::SyntaxChecker::appendConstDecl):
        (JSC::SyntaxChecker::createGetterOrSetterProperty):
        (JSC::SyntaxChecker::appendStatement):
        (JSC::SyntaxChecker::addVar):
        (JSC::SyntaxChecker::combineCommaNodes):
        (JSC::SyntaxChecker::evalCount):
        (JSC::SyntaxChecker::appendBinaryExpressionInfo):
        (JSC::SyntaxChecker::operatorStackPop):
        * runtime/JSGlobalData.h:
        * wtf/Platform.h:
        * wtf/ThreadSpecific.h:
        (WTF::T):

2010-06-23  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Optimization of the QScriptValuePrivate.

        Patch change only internals of the QScriptValuePrivate.
        Most of the QScriptValuePrivate's attributes were moved
        into an union.

        [Qt] Optimization of the QScriptVAluePrivate.
        https://bugs.webkit.org/show_bug.cgi?id=40415

        * qt/api/qscriptengine_p.cpp:
        (QScriptEnginePrivate::globalObject):
        * qt/api/qscriptvalue_p.h:
        (QScriptValuePrivate::):
        (QScriptValuePrivate::~QScriptValuePrivate):
        (QScriptValuePrivate::QScriptValuePrivate):
        (QScriptValuePrivate::toString):
        (QScriptValuePrivate::toNumber):
        (QScriptValuePrivate::toBool):
        (QScriptValuePrivate::toObject):
        (QScriptValuePrivate::equals):
        (QScriptValuePrivate::strictlyEquals):
        (QScriptValuePrivate::assignEngine):
        (QScriptValuePrivate::operator JSValueRef):
        (QScriptValuePrivate::operator JSObjectRef):
        (QScriptValuePrivate::refinedJSValue):

2010-06-23  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Oliver Hunt.

        [GTK] Implement ThreadSpecific with glib
        https://bugs.webkit.org/show_bug.cgi?id=39829

        Implement ThreadSpecific with glib's GStaticPrivate.
        This patch makes it possible to build GTK port without pthread.

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

2010-06-23  Leandro Pereira  <leandro@profusion.mobi>

        Unreviewed build fix.

        * CMakeLists.txt: Add runtime/RegExpCache.cpp.

2010-06-22  Renata Hodovan  <hodovan@inf.u-szeged.hu>

        Reviewed by Geoffrey Garen.

        Adding regular expression caching to JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=38142

        The cache is based on Round Robin eviction policy, and
        can cache at most 256 character long regular expressions,
        and at most 256 of them. These values can be changed at compile time.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::RegExpNode::emitBytecode):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::regExpCache):
        * runtime/RegExpCache.cpp: Added.
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::create):
        (JSC::RegExpCache::RegExpCache):
        * runtime/RegExpCache.h: Added.
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * runtime/RegExpKey.h: Added.
        (JSC::RegExpKey::RegExpKey):
        (JSC::RegExpKey::getFlagsValue):
        (WTF::operator==):
        (WTF::):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):

2010-06-22  Gabor Loki  <loki@webkit.org>

        Reviewed by Geoffrey Garen.

        Add native call support for ARM and Thumb-2 JIT.
        https://bugs.webkit.org/show_bug.cgi?id=40231

        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * wtf/Platform.h:

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

        Reviewed by Geoffrey Garen.

        Make JSC more resilient in the face of parse failures
        https://bugs.webkit.org/show_bug.cgi?id=40951

        A number of recent bugs have occurred due to issues like miscounting
        BOMs, etc which lead to interesting crashes later on.  Adding this
        logic hardens JSC in the face of these errors, and has no impact on
        performance (32bit jit actually gets 0.7% faster but I put that down
        to cache effects).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
        (JSC::CodeBlock::lineNumberForBytecodeOffset):
        (JSC::CodeBlock::expressionRangeForBytecodeOffset):
        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::bytecodeOffset):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::privateExecute):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArrayPrototype.cpp:
        (JSC::isNumericCompareFunction):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::compileForCall):
        (JSC::FunctionExecutable::compileForConstruct):
        (JSC::FunctionExecutable::generateJITCodeForCall):
        (JSC::FunctionExecutable::generateJITCodeForConstruct):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        (JSC::EvalExecutable::reparseExceptionInfo):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::bytecodeForCall):
        (JSC::FunctionExecutable::bytecodeForConstruct):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::numericCompareFunction):

2010-06-21  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben.

        RetainPtr can't be used in HashMaps or HashSets
        <https://bugs.webkit.org/show_bug.cgi?id=40938>
        
        Added hashing knowledge similar to that in COMPtr.h.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr::RetainPtr):
        New function, copied from COMPtr.h but for the type change.
        (WTF::RetainPtr::isHashTableDeletedValue):
        Ditto.
        (WTF::RetainPtr::hashTableDeletedValue):
        Ditto.
        Added template code for HashTraits and PtrHash copied from COMPtr.h but for the type change.
        The only difference is that constructDeletedValue() matches the RefPtr implementation (in HashTraits.h)
        rather than the COMPtr implementation.

2010-06-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Need to ensure that we grow the RegisterFile when creating a callframe for host code
        https://bugs.webkit.org/show_bug.cgi?id=40858
        <rdar://problem/8108986>

        In the past the use of the callframe in hostcode was much more
        limited.  Now that we expect the callframe to always be valid
        we need to grow the RegisterFile so that this is actually the
        case.  In this particular case the problem was failing to grow
        the registerfile could lead to a callframe that extended beyond
        RegisterFiler::end(), so vm re-entry would clobber the callframe
        other scenarios could also lead to badness.

        I was unable to construct a simple testcase to trigger badness,
        and any such testcase would be so dependent on exact vm stack
        layout that it would be unlikely to work as a testcase following
        any callframe or register allocation changes anyway.

        Thankfully the new assertion I added should help to catch these
        failures in future, and triggers on a couple of tests currently.

        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::registerFile):
        * interpreter/CallFrame.h:
        (JSC::ExecState::init):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

2010-06-21  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Speech Input Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=40878

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Kent Tamura.

        [BREWMP] Use global new/delete operator overloading with USE_SYSTEM_MALLOC=1
        https://bugs.webkit.org/show_bug.cgi?id=40653

        Currently, other ports do not use global new/delete operator overloading
        when USE_SYSTEM_MALLOC=1. Brew MP uses system malloc, but it needs to enable
        "global fastMalloc new" because the default new/delete causes crash on device.
        We need to replace them with Brew MP's MALLOC/FREE.

        * wtf/FastMalloc.h:

2010-06-18  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Work around a build problem with libjscore on Symbian.
        https://bugs.webkit.org/show_bug.cgi?id=40840

        Sbsv2 sometimes have problems with debug/release configuration
        determination causing QtWebKit in release to try linking with the debug
        JavaScriptCore static library. This patch limit the jscore/jscored
        r58306 fix necessary for mac builds only to the mac platform to prevent the
        different name problem.

        The real fix would be to fix qmake or the toolchain, this patch might
        help meanwhile.

        * JavaScriptCore.pri:

2010-06-21  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kent Tamura.

        Buildfix after r61338.
        https://bugs.webkit.org/show_bug.cgi?id=40888

        roundUpAllocationSize is needed in RegisterFile.h.

        * jit/ExecutableAllocator.h:

2010-06-19  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Include <string.h> in StringExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=40808

        Without string.h, RVCT 2.2 can't compile StringExtras.h.
        It can't find strlen and strncmp.

        * wtf/StringExtras.h:

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-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Incorrect handling of multiple BOMs scattered through a file.
        https://bugs.webkit.org/show_bug.cgi?id=40865

        When determining the offset of open and close braces in a source
        with BOMs we were finishing our count early as we failed to account
        for BOMs prior to the open/close brace positions effecting those
        positions.

        * parser/Lexer.cpp:
        (JSC::Lexer::sourceCode):

2010-06-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Don't throw away exception information for functions that use exceptions
        https://bugs.webkit.org/show_bug.cgi?id=40786

        Simple patch to stop JSC from throwing away the exception information
        of a function that uses "exceptiony" features like try and throw.  This
        is a speed up for catching expressions but it's difficult to quantify as
        the old cost of reparsing is amortised over all exceptions caught in the
        effected function.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::emitCatch):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitThrow):

2010-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add PlatformStrategies and PluginStrategy classes.
        https://bugs.webkit.org/show_bug.cgi?id=40850

        * wtf/Platform.h:

2010-06-18  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed build fix.

        * wtf/CMakeLists.txt: Add MD5.cpp.

2010-06-17  Shu Chang  <chang.shu@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix the link error on symbian with ENABLE_JIT=0.
        1. Add "#if ENABLE(JIT)" in the header file;
        2. Put feature enable/disable logic to a common.pri so
        that both JavaScriptCore.pri and WebCore.pri can share.

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

        * JavaScriptCore.pri:
        * jit/ExecutableAllocator.h:

2010-06-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Use adoptRef and create functions in more code paths
        https://bugs.webkit.org/show_bug.cgi?id=40760

        * API/JSClassRef.h: Removed unneeded include of RefCounted.h.
        * API/JSWeakObjectMapRefPrivate.cpp: Ditto.

        * bytecode/CodeBlock.h:
        (JSC::FunctionCodeBlock::FunctionCodeBlock): Use the
        SharedSymbolTable::create function instead of calling new directly.

        * runtime/SymbolTable.h: Added a create function to the SharedSymbolTable
        class and made the constructor private.

2010-06-17  Mark Brand  <mabrand@mabrand.nl>

        Reviewed by Simon Hausmann.

        [Qt] use "win32-g++*" scope to match all MinGW makespecs

        The scope "win32-g++" comes from the name of the makespec. However, it
        is frequently used to check for MinGW. This works fine as long as
        win32-g++ is the only makespec for MinGW. Now we need the wildcard
        to cover "win32-g++-cross" as well.

        * JavaScriptCore.pro:

2010-06-16  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Deploy adoptRef in more places, including all HTML and MathML elements
        https://bugs.webkit.org/show_bug.cgi?id=39941

        * wtf/ThreadSafeShared.h: Made the constructor protected and removed the
        unneeded support for initial reference counts other than 1.

2010-06-16  Peter Varga  <pvarga@inf.u-szeged.hu>

        Reviewed by Geoffrey Garen.

        Store matchBegin directly in the array of output instead of the stack.
        https://bugs.webkit.org/show_bug.cgi?id=38988

        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateDisjunction):
        (JSC::Yarr::RegexGenerator::generate):

2010-06-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make JavaScriptCore build with clang++.

        * jit/JITInlineMethods.h:
        (JSC::JIT::emitPutVirtualRegister):
        Explicitly cast to an int.

        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::compileRegex):
        Return 0 instead of false.

2010-06-15  Adam Roben  <aroben@apple.com>

        Make WebCore's and JavaScriptCore's DerivedSources available for debugging in production builds

        Fixes <http://webkit.org/b/40626> <rdar://problem/8094205>.

        Reviewed by Sam Weinig.

        * JavaScriptCore.vcproj/JavaScriptCore.make: Copy the contents of
        JavaScriptCore's DerivedSources directory to
        AppleInternal/Sources/JavaScriptCore.

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

        Rubber-stamped by Eric Seidel.

        Fix invalid access to non-static data member warning in JITPropertyAccess32_64 on ARM
        https://bugs.webkit.org/show_bug.cgi?id=40423

        Using OBJECT_OFFSETOF macro instead of objectof to bypass access to
        non-static data member warning.

        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):

2010-06-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename the rest of the *Tokenizer classes to *DocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=40507

        * wtf/Platform.h:
         - fixed a comment to match new names.

2010-06-11  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Explicit conversions from QtScript types to JSC opaque types were removed.
        https://bugs.webkit.org/show_bug.cgi?id=40412

        Conversion between a JSC C types and a QtScript private types, takes
        main part of the source code. In most cases a mapping between the types
        is one to one. New cast operators were added to simplify the code.

        The QScriptValuePrivate could be casted to the JSValueRef and the JSObjectRef.
        The QScriptEnginePrivate could be casted to the JSGlobalContext.
        The QScriptProgramPrivate could be casted to the JSStringRef.

        * qt/api/qscriptengine_p.cpp:
        (QScriptEnginePrivate::evaluate):
        (QScriptEnginePrivate::newObject):
        (QScriptEnginePrivate::globalObject):
        * qt/api/qscriptengine_p.h:
        (QScriptEnginePrivate::operator JSGlobalContextRef):
        * qt/api/qscriptprogram_p.h:
        (QScriptProgramPrivate::operator JSStringRef):
        * qt/api/qscriptsyntaxcheckresult.cpp:
        (QScriptSyntaxCheckResultPrivate::~QScriptSyntaxCheckResultPrivate):
        (QScriptSyntaxCheckResultPrivate::errorMessage):
        (QScriptSyntaxCheckResultPrivate::errorLineNumber):
        * qt/api/qscriptvalue_p.h:
        (QScriptValuePrivate::~QScriptValuePrivate):
        (QScriptValuePrivate::QScriptValuePrivate):
        (QScriptValuePrivate::isBool):
        (QScriptValuePrivate::isNumber):
        (QScriptValuePrivate::isNull):
        (QScriptValuePrivate::isString):
        (QScriptValuePrivate::isUndefined):
        (QScriptValuePrivate::isFunction):
        (QScriptValuePrivate::toString):
        (QScriptValuePrivate::toNumber):
        (QScriptValuePrivate::toBool):
        (QScriptValuePrivate::toObject):
        (QScriptValuePrivate::equals):
        (QScriptValuePrivate::strictlyEquals):
        (QScriptValuePrivate::instanceOf):
        (QScriptValuePrivate::call):
        (QScriptValuePrivate::operator JSValueRef):
        (QScriptValuePrivate::operator JSObjectRef):
        (QScriptValuePrivate::setValue):
        (QScriptValuePrivate::inherits):
        (QScriptValuePrivate::refinedJSValue):

2010-05-31  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement the simple text code path.
        https://bugs.webkit.org/show_bug.cgi?id=40077

        Remove the FONT_FAST_PATH macro and use the Qt's
        fast text implementation instead of the one of WebKit.

        The Qt::TextBypassShaping flag is used to tell Qt to
        only use the glyph advances.

        Qt 4.7 is needed to get this flag thus the complex path is always
        used if QtWebKit is compiled against an earlier version.

        Contrary to the WebKit's implementation, the complex code path
        is taken if the text is RightToLeft, justified or is formatted
        with non-zero letter or word spacing.

        * wtf/Platform.h:

2010-06-11  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        add codePointCompare to JavaScriptCore.exp
        https://bugs.webkit.org/show_bug.cgi?id=40426

        * JavaScriptCore.exp:

2010-06-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Math Javascript Bug on Safari 5 (webkit 533.16) under "32bit" mode
        https://bugs.webkit.org/show_bug.cgi?id=40367

        If we're in the slow case of right shift we must write the type tag as
        the only reason we hit this code path is because we know we're working
        with a double.  eg. we are guaranteed that the tag cannot be reused.

        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emitRightShiftSlowCase):

2010-06-10  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Remove weakRandomNumber
        https://bugs.webkit.org/show_bug.cgi?id=40291

        weakRandomNumber is used nowhere. Currently, WeakRandom is used instead.

        * wtf/RandomNumber.cpp:
        * wtf/RandomNumber.h:

2010-06-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        Export StringImpl::ascii(). It might be not very useful, but it's a public function.

        * JavaScriptCore.exp:

2010-06-09  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Adam Treat.

        [EFL] Allow building core libraries as shared objects to speed up
        linking time on machines with small amounts of memory.
        http://webkit.org/b/39899

        * CMakeLists.txt: If building with shared core, install the lib.
        * jsc/CMakeListsEfl.txt: Needs Glib and Ecore to link dynamically.
        * wtf/CMakeLists.txt: If building with shared core, install the lib.

2010-06-09  Gabor Loki  <loki@webkit.org>

        Reviewed by David Levin.

        Remove some unused variable warnings from JITOpcodes
        https://bugs.webkit.org/show_bug.cgi?id=40298

        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall):

2010-05-18  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Fix for Bug 34529 -  [CSSOM] issues with cssText and selectorText
        Add U16_LENGTH that is needed to implement CSS character serialization.
        https://bugs.webkit.org/show_bug.cgi?id=34529

        * wtf/unicode/qt4/UnicodeQt4.h:
        * wtf/unicode/wince/UnicodeWince.h:

2010-06-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60830.
        http://trac.webkit.org/changeset/60830
        https://bugs.webkit.org/show_bug.cgi?id=40305

        Broke the Windows build (Requested by abarth on #webkit).

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * wtf/OwnPtrCommon.h:
        * wtf/brew/OwnPtrBrew.h: Removed.
        * wtf/win/OwnPtrWin.h: Removed.

2010-06-08  MORITA Hajime  <morrita@google.com>

        Unreviewed. An attempt to fix test break.

        * Configurations/FeatureDefines.xcconfig:

2010-06-08  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Adam Barth.

        Change OwnPtrCommon to include platform-specific headers
        https://bugs.webkit.org/show_bug.cgi?id=40279

        Adding new type to OwnPtrCommon needlessly causes all ports to do full rebuilds.
        Change OwnPtrCommon to include platform-specific headers to avoid all ports rebuilds.

        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * wtf/OwnPtrCommon.h:
        * wtf/brew/OwnPtrBrew.h: Added.
        * wtf/win/OwnPtrWin.h: Added.

2010-06-07  MORITA Hajime  <morrita@google.com>
        
        Reviewed by Kent Tamura.

        https://bugs.webkit.org/show_bug.cgi?id=40219
        [Mac] ENABLE_METER_TAG should be enabled
        
        Added ENABLE_METER_TAG.

        * Configurations/FeatureDefines.xcconfig:

2010-06-07  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add more types to OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=39667

        Add ISSL and ISocket to the list of OwnPtr-ed type.

        * wtf/OwnPtrCommon.h:
        * wtf/brew/OwnPtrBrew.cpp:
        (WTF::deleteOwnedPtr):

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-06-07  Gabor Loki  <loki@webkit.org>

        Reviewed by NOBODY (JSVALUE32_64 build fix).

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall):

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

        Reviewed by NOBODY (windows build fix pt 2).

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Reviewed by NOBODY (windows build fix pt 1).

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Reviewed by Sam Weinig.

        Bug 40214 - Clean up error construction / throwing in JSC.
        
        The one egregious insanity here is that creating an error requires
        a VM-entry-esqe-host call (the string argument is wrapped as a JS
        object & pushed on the RegisterFile, then unwrapped back to a
        UString).  Changing this also means you only require a global
        object, not an ExecState, to create an error.

        The methods to create error objects are also parameterized
        requiring a switch on the type, which can be made cleaner and
        faster by moving to a separate method per error type.  Code to add
        divot information to error had been duplicated, and is coalesced
        back into a single function.

        Convenience methods added to create & throw type & syntax error
        with a default error message, since this is a common case.

        Also, errors are currently thrown either using
        "throwError(exec, error)" or "exec->setException(error)" - unify
        on the former, since this is more commonly used.  Add
        "throwVMError(exec, error)" equivalents, as a convenience for
        cases where the result was being wrapped in "JSValue::encode(...)".

        * API/JSCallbackConstructor.cpp:
        (JSC::constructJSCallback):
        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::call):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertySlot):
        (JSC::::put):
        (JSC::::deleteProperty):
        (JSC::::construct):
        (JSC::::hasInstance):
        (JSC::::call):
        (JSC::::toNumber):
        (JSC::::toString):
        (JSC::::staticValueGetter):
        (JSC::::staticFunctionGetter):
        (JSC::::callbackGetter):
        * API/JSObjectRef.cpp:
        (JSObjectMakeError):
        * JavaScriptCore.exp:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitNewError):
        (JSC::BytecodeGenerator::emitThrowExpressionTooDeepException):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ThrowableExpressionData::emitThrowError):
        (JSC::RegExpNode::emitBytecode):
        (JSC::PostfixErrorNode::emitBytecode):
        (JSC::PrefixErrorNode::emitBytecode):
        (JSC::AssignErrorNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        (JSC::ContinueNode::emitBytecode):
        (JSC::BreakNode::emitBytecode):
        (JSC::ReturnNode::emitBytecode):
        (JSC::LabelNode::emitBytecode):
        * interpreter/CallFrame.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (functionRun):
        (functionLoad):
        (functionCheckSyntax):
        * parser/Nodes.h:
        * runtime/ArrayConstructor.cpp:
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):
        * runtime/BooleanPrototype.cpp:
        (JSC::booleanProtoFuncToString):
        (JSC::booleanProtoFuncValueOf):
        * 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::dateProtoFuncSetMilliSeconds):
        (JSC::dateProtoFuncSetUTCMilliseconds):
        (JSC::dateProtoFuncSetSeconds):
        (JSC::dateProtoFuncSetUTCSeconds):
        (JSC::dateProtoFuncSetMinutes):
        (JSC::dateProtoFuncSetUTCMinutes):
        (JSC::dateProtoFuncSetHours):
        (JSC::dateProtoFuncSetUTCHours):
        (JSC::dateProtoFuncSetDate):
        (JSC::dateProtoFuncSetUTCDate):
        (JSC::dateProtoFuncSetMonth):
        (JSC::dateProtoFuncSetUTCMonth):
        (JSC::dateProtoFuncSetFullYear):
        (JSC::dateProtoFuncSetUTCFullYear):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear):
        (JSC::dateProtoFuncToJSON):
        * runtime/Error.cpp:
        (JSC::createError):
        (JSC::createEvalError):
        (JSC::createRangeError):
        (JSC::createReferenceError):
        (JSC::createSyntaxError):
        (JSC::createTypeError):
        (JSC::createURIError):
        (JSC::addErrorSourceInfo):
        (JSC::addErrorDivotInfo):
        (JSC::addErrorInfo):
        (JSC::hasErrorInfo):
        (JSC::throwError):
        (JSC::throwTypeError):
        (JSC::throwSyntaxError):
        * runtime/Error.h:
        (JSC::throwVMError):
        (JSC::throwVMTypeError):
        * runtime/ErrorConstructor.cpp:
        (JSC::constructWithErrorConstructor):
        (JSC::callErrorConstructor):
        * runtime/ErrorConstructor.h:
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        (JSC::ErrorInstance::create):
        * runtime/ErrorInstance.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createStackOverflowError):
        (JSC::createUndefinedVariableError):
        (JSC::createInvalidParamError):
        (JSC::createNotAConstructorError):
        (JSC::createNotAFunctionError):
        (JSC::createNotAnObjectError):
        (JSC::throwOutOfMemoryError):
        * runtime/ExceptionHelpers.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compile):
        (JSC::ProgramExecutable::checkSyntax):
        (JSC::ProgramExecutable::compile):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        (JSC::functionProtoFuncApply):
        (JSC::functionProtoFuncCall):
        * runtime/Identifier.cpp:
        (JSC::Identifier::from):
        * runtime/Identifier.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::put):
        * runtime/JSFunction.cpp:
        (JSC::callHostFunctionAsConstructor):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::decode):
        (JSC::globalFuncEval):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Walker::walk):
        (JSC::JSONProtoFuncParse):
        (JSC::JSONProtoFuncStringify):
        * runtime/JSObject.cpp:
        (JSC::throwSetterError):
        (JSC::JSObject::put):
        (JSC::JSObject::putWithAttributes):
        (JSC::JSObject::defaultValue):
        (JSC::JSObject::hasInstance):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        * runtime/JSValue.cpp:
        (JSC::JSValue::toObjectSlowCase):
        (JSC::JSValue::synthesizeObject):
        (JSC::JSValue::synthesizePrototype):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::constructWithNativeErrorConstructor):
        (JSC::callNativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToString):
        (JSC::numberProtoFuncToLocaleString):
        (JSC::numberProtoFuncValueOf):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToPrecision):
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetPrototypeOf):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        (JSC::objectConstructorGetOwnPropertyNames):
        (JSC::objectConstructorKeys):
        (JSC::toPropertyDescriptor):
        (JSC::objectConstructorDefineProperty):
        (JSC::objectConstructorDefineProperties):
        (JSC::objectConstructorCreate):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::match):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTest):
        (JSC::regExpProtoFuncExec):
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoFuncToString):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncToString):

2010-06-05  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add PLATFORM(BREWMP) guard for using std::xxx
        https://bugs.webkit.org/show_bug.cgi?id=39710

        Build fix for BREW MP.

        * wtf/MathExtras.h:

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        HTML5 parser should be within 1% of old parser performance
        https://bugs.webkit.org/show_bug.cgi?id=40172

        Fix cast in this operator= to allow for assignment between vectors with
        different inline capacities (as clearly intended by its author).

        * wtf/Vector.h:
        (WTF::::operator):

2010-06-04  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        New QtScript API; QScriptValue::instanceOf.

        New function create an easy way to check value's prototype hierarchy.

        [Qt] QScriptValue should have an instanceOf method
        https://bugs.webkit.org/show_bug.cgi?id=40120

        * qt/api/qscriptvalue.cpp:
        (QScriptValue::instanceOf):
        * qt/api/qscriptvalue.h:
        * qt/api/qscriptvalue_p.h:
        (QScriptValuePrivate::instanceOf):
        * qt/tests/qscriptvalue/tst_qscriptvalue.h:
        * qt/tests/qscriptvalue/tst_qscriptvalue_generated_comparison.cpp:
        (tst_QScriptValue::instanceOf_initData):
        (tst_QScriptValue::instanceOf_makeData):
        (tst_QScriptValue::instanceOf_test):

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

        Reviewed by NOBODY (interpreter build fix).

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2010-06-04  Mark Rowe  <mrowe@apple.com>

        Silence some warnings seen on the build bot.

        * JavaScriptCore.JSVALUE32_64only.exp: Add a trailing newline.
        * JavaScriptCore.JSVALUE32only.exp: Ditto.
        * JavaScriptCore.JSVALUE64only.exp: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Remove the .exp files from all targets so that Xcode doesn't
        complain about not knowing how to compile them.

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

        Reviewed by Oliver Hunt.

        Bug 40187 - Change function signature of NativeConstructor to match NativeFunction

        Mostly for consistency, but constructor & args arguments are redundant,
        and this will help if we wish to be able to JIT calls to more constructors.

        * API/JSCallbackConstructor.cpp:
        (JSC::constructJSCallback):
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::construct):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeConstruct):
        * interpreter/Interpreter.h:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArrayConstructor.cpp:
        (JSC::constructWithArrayConstructor):
        * runtime/BooleanConstructor.cpp:
        (JSC::constructWithBooleanConstructor):
        * runtime/ConstructData.cpp:
        (JSC::construct):
        * runtime/ConstructData.h:
        * runtime/DateConstructor.cpp:
        (JSC::constructWithDateConstructor):
        * runtime/Error.cpp:
        (JSC::constructNativeError):
        (JSC::Error::create):
        * runtime/ErrorConstructor.cpp:
        (JSC::constructWithErrorConstructor):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructWithFunctionConstructor):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::constructWithNativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::errorStructure):
        * runtime/NumberConstructor.cpp:
        (JSC::constructWithNumberConstructor):
        * runtime/ObjectConstructor.cpp:
        (JSC::constructWithObjectConstructor):
        * runtime/RegExpConstructor.cpp:
        (JSC::constructWithRegExpConstructor):
        * runtime/StringConstructor.cpp:
        (JSC::constructWithStringConstructor):

2010-06-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Add a takeFirst() method to Deque and use it where appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=40089

        * wtf/Deque.h:
        (WTF::::takeFirst):
        * wtf/MainThread.cpp:
        (WTF::dispatchFunctionsFromMainThread):
        * wtf/MessageQueue.h:
        (WTF::::tryGetMessage):

2010-06-04  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Remove a QEXPECT_FAIL flag from an autotest.

        Test tst_QScriptEngine::globalObject pass after 36600 bug
        fix have been applied.

        [Qt] Expected fail in the tst_QScriptEngine::globalObject should be removed.
        https://bugs.webkit.org/show_bug.cgi?id=40114

        * qt/tests/qscriptengine/tst_qscriptengine.cpp:
        (tst_QScriptEngine::globalObject):

2010-06-04  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix QScriptValue::equals.

        Handling for a few edge cases were added. Now comparison between
        NaN, an invalid objects should works as supposed.

        [Qt] QScriptValue::equals problems
        https://bugs.webkit.org/show_bug.cgi?id=40110

        * qt/api/qscriptvalue.cpp:
        (QScriptValue::equals):
        * qt/api/qscriptvalue_p.h:
        (QScriptValuePrivate::equals):
        * qt/tests/qscriptvalue/tst_qscriptvalue.h:
        * qt/tests/qscriptvalue/tst_qscriptvalue_generated_comparison.cpp:
        (tst_QScriptValue::equals_initData):
        (tst_QScriptValue::equals_makeData):
        (tst_QScriptValue::equals_test):

2010-06-03  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        New states in QScriptValuePrivate.

        The CSpecial state was divided into CNull and CUndefined. It simplify
        the QScriptValue code by avoiding a few "cast" and "if".
        Moreover the MSVS compiler didn't like casting between a double and an
        enum which is avoided now.

        [Qt] The QScriptValuePrivate::CSpecial is too generic.
        https://bugs.webkit.org/show_bug.cgi?id=40067

        * qt/api/qscriptvalue_p.h:
        (QScriptValuePrivate::):
        (QScriptValuePrivate::QScriptValuePrivate):
        (QScriptValuePrivate::isNull):
        (QScriptValuePrivate::isUndefined):
        (QScriptValuePrivate::toString):
        (QScriptValuePrivate::toNumber):
        (QScriptValuePrivate::toBool):
        (QScriptValuePrivate::toObject):
        (QScriptValuePrivate::assignEngine):
        (QScriptValuePrivate::isNumberBased):

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

        Reviewed by NOBODY (Qt build fix).

        * wtf/Platform.h:

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

        Reviewed by Mark Rowe.

        Bug 40150 - ENABLE_JIT_OPTIMIZE_NATIVE_CALL on all x86/x86_64 platforms
        This was fixed in bug #40094.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/Platform.h:

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

        Reviewed by NOBODY (Interpreter build fix).

        * JavaScriptCore.JSVALUE32_64only.exp:
        * JavaScriptCore.JSVALUE32only.exp:
        * JavaScriptCore.JSVALUE64only.exp:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

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

        Reviewed by NOBODY (windows build fix II).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Reviewed by NOBODY (windows build fix).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Reviewed by Oliver Hunt.

        Bug 40094 - The return type of NativeFunction should be EncodedJSValue
        On Windows & Linux, using JSVALUE32_64, EncodedJSValue is returned in registers, but JSValue is not.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::call):
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::call):
        * JavaScriptCore.exp:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeCall):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * jsc.cpp:
        (functionPrint):
        (functionDebug):
        (functionGC):
        (functionVersion):
        (functionRun):
        (functionLoad):
        (functionCheckSyntax):
        (functionSetSamplingFlags):
        (functionClearSamplingFlags):
        (functionReadline):
        (functionQuit):
        * runtime/ArrayConstructor.cpp:
        (JSC::callArrayConstructor):
        (JSC::arrayConstructorIsArray):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncConcat):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSort):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        * runtime/BooleanConstructor.cpp:
        (JSC::callBooleanConstructor):
        * runtime/BooleanPrototype.cpp:
        (JSC::booleanProtoFuncToString):
        (JSC::booleanProtoFuncValueOf):
        * runtime/CallData.h:
        * runtime/DateConstructor.cpp:
        (JSC::callDate):
        (JSC::dateParse):
        (JSC::dateNow):
        (JSC::dateUTC):
        * 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::dateProtoFuncSetMilliSeconds):
        (JSC::dateProtoFuncSetUTCMilliseconds):
        (JSC::dateProtoFuncSetSeconds):
        (JSC::dateProtoFuncSetUTCSeconds):
        (JSC::dateProtoFuncSetMinutes):
        (JSC::dateProtoFuncSetUTCMinutes):
        (JSC::dateProtoFuncSetHours):
        (JSC::dateProtoFuncSetUTCHours):
        (JSC::dateProtoFuncSetDate):
        (JSC::dateProtoFuncSetUTCDate):
        (JSC::dateProtoFuncSetMonth):
        (JSC::dateProtoFuncSetUTCMonth):
        (JSC::dateProtoFuncSetFullYear):
        (JSC::dateProtoFuncSetUTCFullYear):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear):
        (JSC::dateProtoFuncToJSON):
        * runtime/ErrorConstructor.cpp:
        (JSC::callErrorConstructor):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/FunctionConstructor.cpp:
        (JSC::callFunctionConstructor):
        * runtime/FunctionPrototype.cpp:
        (JSC::callFunctionPrototype):
        (JSC::functionProtoFuncToString):
        (JSC::functionProtoFuncApply):
        (JSC::functionProtoFuncCall):
        * runtime/JSCell.h:
        (JSC::getCallData):
        (JSC::getConstructData):
        * runtime/JSFunction.cpp:
        (JSC::callHostFunctionAsConstructor):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        (JSC::globalFuncParseInt):
        (JSC::globalFuncParseFloat):
        (JSC::globalFuncIsNaN):
        (JSC::globalFuncIsFinite):
        (JSC::globalFuncDecodeURI):
        (JSC::globalFuncDecodeURIComponent):
        (JSC::globalFuncEncodeURI):
        (JSC::globalFuncEncodeURIComponent):
        (JSC::globalFuncEscape):
        (JSC::globalFuncUnescape):
        (JSC::globalFuncJSCPrint):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        (JSC::JSONProtoFuncStringify):
        * runtime/JSObject.cpp:
        (JSC::callDefaultValueFunction):
        * runtime/JSValue.h:
        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncAbs):
        (JSC::mathProtoFuncACos):
        (JSC::mathProtoFuncASin):
        (JSC::mathProtoFuncATan):
        (JSC::mathProtoFuncATan2):
        (JSC::mathProtoFuncCeil):
        (JSC::mathProtoFuncCos):
        (JSC::mathProtoFuncExp):
        (JSC::mathProtoFuncFloor):
        (JSC::mathProtoFuncLog):
        (JSC::mathProtoFuncMax):
        (JSC::mathProtoFuncMin):
        (JSC::mathProtoFuncPow):
        (JSC::mathProtoFuncRandom):
        (JSC::mathProtoFuncRound):
        (JSC::mathProtoFuncSin):
        (JSC::mathProtoFuncSqrt):
        (JSC::mathProtoFuncTan):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::callNativeErrorConstructor):
        * runtime/NumberConstructor.cpp:
        (JSC::callNumberConstructor):
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToString):
        (JSC::numberProtoFuncToLocaleString):
        (JSC::numberProtoFuncValueOf):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToPrecision):
        * runtime/ObjectConstructor.cpp:
        (JSC::callObjectConstructor):
        (JSC::objectConstructorGetPrototypeOf):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        (JSC::objectConstructorGetOwnPropertyNames):
        (JSC::objectConstructorKeys):
        (JSC::toPropertyDescriptor):
        (JSC::objectConstructorDefineProperty):
        (JSC::objectConstructorDefineProperties):
        (JSC::objectConstructorCreate):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncValueOf):
        (JSC::objectProtoFuncHasOwnProperty):
        (JSC::objectProtoFuncIsPrototypeOf):
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        (JSC::objectProtoFuncLookupGetter):
        (JSC::objectProtoFuncLookupSetter):
        (JSC::objectProtoFuncPropertyIsEnumerable):
        (JSC::objectProtoFuncToLocaleString):
        (JSC::objectProtoFuncToString):
        * runtime/ObjectPrototype.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::callRegExpConstructor):
        * runtime/RegExpObject.cpp:
        (JSC::callRegExpObject):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTest):
        (JSC::regExpProtoFuncExec):
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoFuncToString):
        * runtime/StringConstructor.cpp:
        (JSC::stringFromCharCode):
        (JSC::callStringConstructor):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncToString):
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):
        (JSC::stringProtoFuncConcat):
        (JSC::stringProtoFuncIndexOf):
        (JSC::stringProtoFuncLastIndexOf):
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        (JSC::stringProtoFuncSlice):
        (JSC::stringProtoFuncSplit):
        (JSC::stringProtoFuncSubstr):
        (JSC::stringProtoFuncSubstring):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        (JSC::stringProtoFuncLocaleCompare):
        (JSC::stringProtoFuncBig):
        (JSC::stringProtoFuncSmall):
        (JSC::stringProtoFuncBlink):
        (JSC::stringProtoFuncBold):
        (JSC::stringProtoFuncFixed):
        (JSC::stringProtoFuncItalics):
        (JSC::stringProtoFuncStrike):
        (JSC::stringProtoFuncSub):
        (JSC::stringProtoFuncSup):
        (JSC::stringProtoFuncFontcolor):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncAnchor):
        (JSC::stringProtoFuncLink):
        (JSC::stringProtoFuncTrim):
        (JSC::stringProtoFuncTrimLeft):
        (JSC::stringProtoFuncTrimRight):

2010-06-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Gavin Barraclough.

        Add value-representation specific sections to the mac export file.

        * Configurations/JavaScriptCore.xcconfig:
        * DerivedSources.make:
        * JavaScriptCore.JSVALUE32_64only.exp: Added.
        * JavaScriptCore.JSVALUE32only.exp: Added.
        * JavaScriptCore.JSVALUE64only.exp: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj:

2010-06-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Gavin Barraclough.

        <rdar://problem/8054988> Work around an LLVM GCC code generation bug that results in crashes inside PCRE.

        * pcre/pcre_exec.cpp:
        (repeatInformationFromInstructionOffset): Change the type of instructionOffset to int.  There's no good
        reason for it to be a short, and using int prevents this code from triggering the LLVM GCC bug.

2010-06-02  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix the QScriptValue::strictlyEquals function.

        Handling for a few edge cases was added.

        New autotest that covers the QScriptValue::strictlyEquals function.

        [Qt] QScriptValue::strictlyEquals is broken
        https://bugs.webkit.org/show_bug.cgi?id=36600

        * qt/api/qscriptvalue.cpp:
        (QScriptValue::strictlyEquals):
        * qt/api/qscriptvalue_p.h:
        (QScriptValuePrivate::strictlyEquals):
        * qt/tests/qscriptvalue/qscriptvalue.pro:
        * qt/tests/qscriptvalue/tst_qscriptvalue.h:
        * qt/tests/qscriptvalue/tst_qscriptvalue_generated_comparison.cpp: Added.
        (tst_QScriptValue::strictlyEquals_initData):
        (tst_QScriptValue::strictlyEquals_makeData):
        (tst_QScriptValue::strictlyEquals_test):

2010-06-02  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        New function QScriptEngine::newObject.

        The function creates a object of class Object and returns it
        as a QScriptValue.

        [Qt] QScriptEngine API should contain a newObject function
        https://bugs.webkit.org/show_bug.cgi?id=39114

        * qt/api/qscriptengine.cpp:
        (QScriptEngine::newObject):
        * qt/api/qscriptengine.h:
        * qt/api/qscriptengine_p.cpp:
        (QScriptEnginePrivate::newObject):
        * qt/api/qscriptengine_p.h:
        * qt/tests/qscriptengine/tst_qscriptengine.cpp:
        (tst_QScriptEngine::newObject):

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

        Reviewed by Gavin Barraclough.
        https://bugs.webkit.org/show_bug.cgi?id=40011

        Thumb-2 build fix: The offset parameter of ldrh should be encoded as an
        imm12 immediate constant in load16. If it is not fit in the instruction
        a temporary register has to be used.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::load16):

2010-06-02  Sterling Swigart  <sswigart@google.com>

        Reviewed by David Levin.

        Image Resizer Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=39906

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Sam Weinig.

        Bug 40021 - Refactor bytecode generation for calls so that register for this & args are allocated together

        This is a useful stepping stone towards reversing argument order.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::addParameter):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallEval):
        (JSC::BytecodeGenerator::emitConstruct):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::CallArguments::thisRegister):
        (JSC::CallArguments::argumentRegister):
        (JSC::CallArguments::callFrame):
        (JSC::CallArguments::count):
        (JSC::BytecodeGenerator::shouldEmitProfileHooks):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::NewExprNode::emitBytecode):
        (JSC::CallArguments::CallArguments):
        (JSC::EvalFunctionCallNode::emitBytecode):
        (JSC::FunctionCallValueNode::emitBytecode):
        (JSC::FunctionCallResolveNode::emitBytecode):
        (JSC::FunctionCallBracketNode::emitBytecode):
        (JSC::FunctionCallDotNode::emitBytecode):
        (JSC::CallFunctionCallDotNode::emitBytecode):
        (JSC::ApplyFunctionCallDotNode::emitBytecode):

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

        Reviewed by Darin Adler.

        Explicitly use PTHREAD_MUTEX_NORMAL to create pthread mutex.
        https://bugs.webkit.org/show_bug.cgi?id=39893

        * wtf/ThreadingPthreads.cpp:
        (WTF::Mutex::Mutex):

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

        Reviewed by Xan Lopez.

        [GTK] Use DEFINE_STATIC_LOCAL for threadMapMutex and threadMap
        https://bugs.webkit.org/show_bug.cgi?id=39831

        Use DEFINE_STATIC_LOCAL for static local variables.

        * wtf/gtk/ThreadingGtk.cpp:
        (WTF::threadMapMutex):
        (WTF::threadMap):
        (WTF::identifierByGthreadHandle):

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

        Reviewed by Shinichiro Hamaji.

        Fix style errors of dtoa
        https://bugs.webkit.org/show_bug.cgi?id=39972

        Fix all errors reported by check-webkit-style.

        * wtf/dtoa.cpp:
        * wtf/dtoa.h:

2010-05-30  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        * wtf/OwnArrayPtr.h:
        (WTF::OwnArrayPtr::set): Fix the assertion in here to match the one in OwnPtr.
        At some point someone fixed the "asserts when assigning to 0 and the pointer is
        already 0" issue in OwnPtr but forgot to do it here.

2010-05-29  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Updated exported symbols.
        
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-05-29  Geoffrey Garen  <ggaren@apple.com>

        Disabled ENABLE_JIT_OPTIMIZE_NATIVE_CALL on Windows for now, until I
        can figure out why it's crashing.

        * wtf/Platform.h:

2010-05-29  Geoffrey Garen  <ggaren@apple.com>

        Fixed Windows crash seen on buildbot.

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall): __fastcall puts the first
        argument in ecx.

2010-05-28  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Updated exported symbols.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-05-28  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: disable a little more stuff when JIT_OPTIMIZE_NATIVE_CALL
        is disabled.

        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        * wtf/Platform.h:

2010-05-28  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Updated exported symbols.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2010-05-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig, Gavin Barraclough, Oliver Hunt.

        Simplified the host calling convention.
        
        22.5% speedup on 32-bit host function calls. 9.5% speedup on 64-bit host
        function calls.
        
        No change on SunSpider.
        
        All JS calls (but not constructs, yet) now go through the normal JS
        calling convention via the RegisterFile. As a result, the host calling
        convention, which used to be this

            JSValue (JSC_HOST_CALL *NativeFunction)(ExecState*, JSObject*, JSValue thisValue, const ArgList&)
            
        is now this

            JSValue (JSC_HOST_CALL *NativeFunction)(ExecState*)
            
        Callee, 'this', and argument access all hapen relative to the ExecState*,
        which is a pointer into the RegisterFile.
        
        This patch comes in two parts.
        
        PART ONE: Functional code changes.
        
        * wtf/Platform.h: Disabled optimized calls on platforms I didn't test.
        We can re-enable once we verify that host calls on these platforms are
        correct.

        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::functionName):
        (JSC::DebuggerCallFrame::calculatedFunctionName): Updated for change to
        ExecState::callee().

        (JSC::DebuggerCallFrame::thisObject): Updated for removal of ExecState::thisValue().

        * interpreter/CallFrame.cpp:
        * interpreter/CallFrame.h:
        (JSC::ExecState::callee):
        (JSC::ExecState::scopeChain):
        (JSC::ExecState::init): Changed callee() to be JSObject* instead of
        JSFunction* -- now, it might be some other callable host object.

        (JSC::ExecState::hostThisRegister):
        (JSC::ExecState::hostThisValue):
        (JSC::ExecState::argumentCount):
        (JSC::ExecState::argumentCountIncludingThis):
        (JSC::ExecState::argument):
        (JSC::ExecState::setArgumentCountIncludingThis):
        (JSC::ExecState::setCallee): Added convenient accessors for arguments
        from within a host function. Removed thisValue() because it was too
        tempting to use incorrectly, and it only had one or two clients, anyway.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval): Updated for removal of ExecState::thisValue().

        (JSC::Interpreter::throwException): Be sure to shrink the register file
        before invoking the exception handler, to reduce the chances that the
        handler will re-throw in the case of stack overflow. (Re-throwing is now
        more likely than it used to be, since standardizing the calling convention
        implicitly added stack overflow checks to some places where they used to be missing.)

        (JSC::Interpreter::execute): Clarified the scope of DynamicGlobalObjectScope.
        Updated for CallFrame::init API change.

        (JSC::Interpreter::executeCall): Clarified scope of DynamicGlobalObjectScope.
        Updated for CallFrame::init API change. Added support for calling a host
        function.

        (JSC::Interpreter::executeConstruct): Clarified scope of DynamicGlobalObjectScope.
        Updated for CallFrame::init API change. 

        (JSC::Interpreter::prepareForRepeatCall): Updated for CallFrame::init API change. 

        (JSC::Interpreter::privateExecute): Updated for CallFrame::init API change.
        Added some explicit JSValue(JSObject*) initialization, since relaxing
        the JSFunction* restriction on callee has made register types more ambiguous.
        Removed toThisObject() conversion, since all callees do it themselves now.
        Updated host function call for new host function signature. Updated for
        change to ExecState::argumentCount() API.

        * interpreter/Register.h:
        (JSC::Register::):
        (JSC::Register::operator=):
        (JSC::Register::function): Changed callee() to be JSObject* instead of
        JSFunction* -- now, it might be some other callable host object.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall): Deleted a bunch of code that
        set up the arguments to host functions -- all but one of the arguments
        are gone now. This is the actual optimization.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION): Updated for ExecState and Register API
        changes noted above. Removed toThisObject() conversion, since all callees
        do it themselves now.
        
        * runtime/ArgList.h:
        (JSC::ArgList::ArgList): ArgList is getting close to unused. Added a
        temporary shim for converting from ExecState* to ArgList where it's still
        necessary.

        * runtime/Arguments.h:
        (JSC::Arguments::getArgumentsData):
        (JSC::Arguments::Arguments): Updated for ExecState and Register API
        changes noted above. 

        * runtime/CallData.cpp:
        (JSC::call): Changed call always to call Interpreter::executeCall, even
        for host functions. This ensures that the normal calling convention is
        set up in the RegsiterFile when calling from C++ to host function.

        * runtime/CallData.h: Changed host function signature as described above.

        * runtime/ConstructData.cpp:
        (JSC::construct): Moved JSFunction::construct code here so I could nix
        JSFunction::call and JSFunction::call. We want a JSFunction-agnostic
        way to call and construct, so that everything works naturally for non-
        JSFunction objects. 

        * runtime/JSFunction.cpp:
        (JSC::callHostFunctionAsConstructor):
        * runtime/JSFunction.h: Updated for ExecState and Register API changes
        noted above. Nixed JSFunction::call and JSFunction::construct, noted above.
 
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): Ditto.

        PART TWO: Global search and replace.
        
        In the areas below, I used global search-and-replace to change
            (ExecState*, JSObject*, JSValue, const ArgList&) => (ExecState*)
            args.size() => exec->argumentCount()
            args.at(i) => exec->argument(i)

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::call):
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::call):
        * JavaScriptCore.exp:
        * jsc.cpp:
        (functionPrint):
        (functionDebug):
        (functionGC):
        (functionVersion):
        (functionRun):
        (functionLoad):
        (functionCheckSyntax):
        (functionSetSamplingFlags):
        (functionClearSamplingFlags):
        (functionReadline):
        (functionQuit):
        * runtime/ArrayConstructor.cpp:
        (JSC::callArrayConstructor):
        (JSC::arrayConstructorIsArray):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncConcat):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSort):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        * runtime/BooleanConstructor.cpp:
        (JSC::callBooleanConstructor):
        * runtime/BooleanPrototype.cpp:
        (JSC::booleanProtoFuncToString):
        (JSC::booleanProtoFuncValueOf):
        * runtime/DateConstructor.cpp:
        (JSC::callDate):
        (JSC::dateParse):
        (JSC::dateNow):
        (JSC::dateUTC):
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        (JSC::fillStructuresUsingTimeArgs):
        (JSC::fillStructuresUsingDateArgs):
        (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::dateProtoFuncSetMilliSeconds):
        (JSC::dateProtoFuncSetUTCMilliseconds):
        (JSC::dateProtoFuncSetSeconds):
        (JSC::dateProtoFuncSetUTCSeconds):
        (JSC::dateProtoFuncSetMinutes):
        (JSC::dateProtoFuncSetUTCMinutes):
        (JSC::dateProtoFuncSetHours):
        (JSC::dateProtoFuncSetUTCHours):
        (JSC::dateProtoFuncSetDate):
        (JSC::dateProtoFuncSetUTCDate):
        (JSC::dateProtoFuncSetMonth):
        (JSC::dateProtoFuncSetUTCMonth):
        (JSC::dateProtoFuncSetFullYear):
        (JSC::dateProtoFuncSetUTCFullYear):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear):
        (JSC::dateProtoFuncToJSON):
        * runtime/ErrorConstructor.cpp:
        (JSC::callErrorConstructor):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/FunctionConstructor.cpp:
        (JSC::callFunctionConstructor):
        * runtime/FunctionPrototype.cpp:
        (JSC::callFunctionPrototype):
        (JSC::functionProtoFuncToString):
        (JSC::functionProtoFuncApply):
        (JSC::functionProtoFuncCall):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::decode):
        (JSC::globalFuncEval):
        (JSC::globalFuncParseInt):
        (JSC::globalFuncParseFloat):
        (JSC::globalFuncIsNaN):
        (JSC::globalFuncIsFinite):
        (JSC::globalFuncDecodeURI):
        (JSC::globalFuncDecodeURIComponent):
        (JSC::globalFuncEncodeURI):
        (JSC::globalFuncEncodeURIComponent):
        (JSC::globalFuncEscape):
        (JSC::globalFuncUnescape):
        (JSC::globalFuncJSCPrint):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        (JSC::JSONProtoFuncStringify):
        * runtime/JSString.h:
        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncAbs):
        (JSC::mathProtoFuncACos):
        (JSC::mathProtoFuncASin):
        (JSC::mathProtoFuncATan):
        (JSC::mathProtoFuncATan2):
        (JSC::mathProtoFuncCeil):
        (JSC::mathProtoFuncCos):
        (JSC::mathProtoFuncExp):
        (JSC::mathProtoFuncFloor):
        (JSC::mathProtoFuncLog):
        (JSC::mathProtoFuncMax):
        (JSC::mathProtoFuncMin):
        (JSC::mathProtoFuncPow):
        (JSC::mathProtoFuncRandom):
        (JSC::mathProtoFuncRound):
        (JSC::mathProtoFuncSin):
        (JSC::mathProtoFuncSqrt):
        (JSC::mathProtoFuncTan):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::callNativeErrorConstructor):
        * runtime/NumberConstructor.cpp:
        (JSC::callNumberConstructor):
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToString):
        (JSC::numberProtoFuncToLocaleString):
        (JSC::numberProtoFuncValueOf):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToPrecision):
        * runtime/ObjectConstructor.cpp:
        (JSC::callObjectConstructor):
        (JSC::objectConstructorGetPrototypeOf):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        (JSC::objectConstructorGetOwnPropertyNames):
        (JSC::objectConstructorKeys):
        (JSC::objectConstructorDefineProperty):
        (JSC::objectConstructorDefineProperties):
        (JSC::objectConstructorCreate):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncValueOf):
        (JSC::objectProtoFuncHasOwnProperty):
        (JSC::objectProtoFuncIsPrototypeOf):
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        (JSC::objectProtoFuncLookupGetter):
        (JSC::objectProtoFuncLookupSetter):
        (JSC::objectProtoFuncPropertyIsEnumerable):
        (JSC::objectProtoFuncToLocaleString):
        (JSC::objectProtoFuncToString):
        * runtime/ObjectPrototype.h:
        * runtime/Operations.h:
        (JSC::jsString):
        * runtime/RegExpConstructor.cpp:
        (JSC::callRegExpConstructor):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::test):
        (JSC::RegExpObject::exec):
        (JSC::callRegExpObject):
        (JSC::RegExpObject::match):
        * runtime/RegExpObject.h:
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTest):
        (JSC::regExpProtoFuncExec):
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoFuncToString):
        * runtime/StringConstructor.cpp:
        (JSC::stringFromCharCodeSlowCase):
        (JSC::stringFromCharCode):
        (JSC::callStringConstructor):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncToString):
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):
        (JSC::stringProtoFuncConcat):
        (JSC::stringProtoFuncIndexOf):
        (JSC::stringProtoFuncLastIndexOf):
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        (JSC::stringProtoFuncSlice):
        (JSC::stringProtoFuncSplit):
        (JSC::stringProtoFuncSubstr):
        (JSC::stringProtoFuncSubstring):
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        (JSC::stringProtoFuncLocaleCompare):
        (JSC::stringProtoFuncBig):
        (JSC::stringProtoFuncSmall):
        (JSC::stringProtoFuncBlink):
        (JSC::stringProtoFuncBold):
        (JSC::stringProtoFuncFixed):
        (JSC::stringProtoFuncItalics):
        (JSC::stringProtoFuncStrike):
        (JSC::stringProtoFuncSub):
        (JSC::stringProtoFuncSup):
        (JSC::stringProtoFuncFontcolor):
        (JSC::stringProtoFuncFontsize):
        (JSC::stringProtoFuncAnchor):
        (JSC::stringProtoFuncLink):
        (JSC::stringProtoFuncTrim):
        (JSC::stringProtoFuncTrimLeft):
        (JSC::stringProtoFuncTrimRight):

2010-05-28  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Geoffrey Garen.

        Fix the JSObjectSetPrototype function.

        A cycle in a prototype chain can cause an application hang or
        even crash.
        A check for a prototype chain cycles was added to
        the JSObjectSetPrototype.

        JSObjectSetPrototype doesn't check for cycle in prototype chain.
        https://bugs.webkit.org/show_bug.cgi?id=39360

        * API/JSObjectRef.cpp:
        (JSObjectSetPrototype):
        * API/tests/testapi.c:
        (assertTrue):
        (checkForCycleInPrototypeChain):
        (main):
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        * runtime/JSObject.h:
        (JSC::JSObject::setPrototypeWithCycleCheck):

2010-05-28  Chao-ying Fu  <fu@mips.com>

        Reviewed by Eric Seidel.

        Fix MIPS JIT DoubleGreaterThanOrEqual Operands
        https://bugs.webkit.org/show_bug.cgi?id=39504

        Swapped two operands of left and right for DoubleGreaterThanOrEqual.
        This patch fixed two layout tests as follows.
        fast/js/comparison-operators-greater.html
        fast/js/comparison-operators-less.html

        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::branchDouble):

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

        Reviewed by Geoff Garen.

        Move jit compilation from linking thunks into cti_vm_lazyLink methods.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

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

        Reviewed by Sam Weinig.

        Bug 39898 - Move arity check into callee.
        
        We can reduce the size of the virtual call trampolines by moving the arity check
        into the callee functions.  As a following step we will be able to remove the
        check for native function / codeblocks by performing translation in a lazy stub.
        
        * interpreter/CallFrame.h:
        (JSC::ExecState::init):
        (JSC::ExecState::setReturnPC):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        (JSC::JIT::linkCall):
        (JSC::JIT::linkConstruct):
        * jit/JIT.h:
        (JSC::JIT::compile):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::generateJITCodeForCall):
        (JSC::FunctionExecutable::generateJITCodeForConstruct):
        (JSC::FunctionExecutable::reparseExceptionInfo):
        * runtime/Executable.h:
        (JSC::NativeExecutable::NativeExecutable):
        (JSC::FunctionExecutable::generatedJITCodeForCallWithArityCheck):
        (JSC::FunctionExecutable::generatedJITCodeForConstructWithArityCheck):

2010-05-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Adler.

        UTF-16 code points compare() for String objects
        https://bugs.webkit.org/show_bug.cgi?id=39701

        Moving compare() implementation from UString to StringImpl for it to be shared
        with String. Adding overloaded free functions codePointCompare() in StringImpl
        and WTFString. Renaming function compare in UString to codePointCompare to be
        consistent.

        * runtime/JSArray.cpp:
        (JSC::compareByStringPairForQSort):
        * runtime/UString.cpp:
        * runtime/UString.h:
        (JSC::codePointCompare):
        * wtf/text/StringImpl.cpp:
        (WebCore::codePointCompare):
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.cpp:
        (WebCore::codePointCompare):
        * wtf/text/WTFString.h:

2010-05-26  Darin Adler  <darin@apple.com>

        Reviewed by Kent Tamura.

        Null characters handled incorrectly in ToNumber conversion
        https://bugs.webkit.org/show_bug.cgi?id=38088

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::parseInt): Changed code to use UTF8String().data() instead of
        ascii() to fix the thread safety issue. Code path is covered by existing
        tests in run-javascriptcore-tests.
        (JSC::parseFloat): Moved comment to UString::toDouble since the issue
        affects all clients, not just parseFloat. Specifically, this also affects
        standard JavaScript numeric conversion, ToNumber.

        * runtime/UString.cpp:
        (JSC::UString::toDouble): Added a comment about incorrect space skipping.
        Changed trailing junk check to use the length of the CString instead of
        checking for a null character. Also got rid of a little unneeded logic
        in the case where we tolerate trailing junk.

2010-05-27  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Geoffrey Garen.

        Search for the new allocation one word at a time.  Improves
        performance on SunSpider by approximately 1%.
        http://bugs.webkit.org/show_bug.cgi?id=39758

        * runtime/Collector.cpp:
        (JSC::Heap::allocate):
        * runtime/Collector.h:
        (JSC::CollectorBitmap::advanceToNextPossibleFreeCell):

2010-05-27  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes for Windows after recent changes.

        * wscript:

2010-05-27  Gustavo Noronha Silva  <gns@gnome.org>

        More build fixage for make dist.

        * GNUmakefile.am:

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

        Reviewed by Darin Adler.

        RVCT does not have strnstr.
        https://bugs.webkit.org/show_bug.cgi?id=39719

        Add COMPILER(RVCT) guard to strnstr in StringExtras.h as RVCT does not provide strnstr.

        * wtf/StringExtras.h:

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

        Reviewed by Oliver Hunt.

        Bug 39795 - Add support for YARR JIT generation of greedy quantified parens at the end of the main disjunction.
        (relanding r60267)

        If the last item in a main disjunction is a quantified set of parentheses,
        this is easier to code generate for than the general case for quantified
        parentheses. This is because we never need to backtrack into the parentheses
        - the first match will be the final and accepted match.

        This patch also somewhat reverts a recent change to when fallback to PCRE
        occurs. At the minute the compiler is tracking on patterns which will
        require JIT fallback. This is handy from a performance perspective (it saves
        the failed attempt at JIT compilation), but it means introducing knowledge
        of the JITs capabilities into the other layers of the regex compilers. For
        the specific feature of back-references, add a flag tracking their presence
        on the pattern, and make these expressions fallback without attempting to
        JIT. For parentheses, return to detecting which cases are have or have not
        been handled during JIT compilation.

        18% progression on tagcloud, ~1.5% overall on sunspidey.

        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::RegexPatternConstructor::atomBackReference):
        (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::TermGenerationState::isLastTerm):
        (JSC::Yarr::RegexGenerator::TermGenerationState::isMainDisjunction):
        (JSC::Yarr::RegexGenerator::generateParenthesesGreedyNoBacktrack):
        (JSC::Yarr::RegexGenerator::generateTerm):
        (JSC::Yarr::RegexGenerator::RegexGenerator):
        (JSC::Yarr::RegexGenerator::shouldFallBack):
        (JSC::Yarr::jitCompileRegex):
        * yarr/RegexPattern.h:
        (JSC::Yarr::RegexPattern::RegexPattern):
        (JSC::Yarr::RegexPattern::reset):

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

        Reviewed by NOBODY (revert).

        Temporarily rolling out r60267, I appear to have hoesed perf at the last minute. :-/ Fixing.

        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::RegexPatternConstructor::atomBackReference):
        (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::TermGenerationState::term):
        (JSC::Yarr::RegexGenerator::generateParenthesesSingle):
        (JSC::Yarr::RegexGenerator::generateTerm):
        (JSC::Yarr::RegexGenerator::RegexGenerator):
        (JSC::Yarr::jitCompileRegex):
        * yarr/RegexPattern.h:
        (JSC::Yarr::RegexPattern::RegexPattern):
        (JSC::Yarr::RegexPattern::reset):

2010-05-26  Gustavo Noronha Silva  <gns@gnome.org>

        Build fixes for make distcheck.

        * GNUmakefile.am:

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

        Reviewed by Oliver Hunt.

        Bug 39795 - Add support for YARR JIT generation of greedy quantified parens at the end of the main disjunction.

        If the last item in a main disjunction is a quantified set of parentheses,
        this is easier to code generate for than the general case for quantified
        parentheses. This is because we never need to backtrack into the parentheses
        - the first match will be the final and accepted match.

        This patch also somewhat reverts a recent change to when fallback to PCRE
        occurs. At the minute the compiler is tracking on patterns which will
        require JIT fallback. This is handy from a performance perspective (it saves
        the failed attempt at JIT compilation), but it means introducing knowledge
        of the JITs capabilities into the other layers of the regex compilers. For
        the specific feature of back-references, add a flag tracking their presence
        on the pattern, and make these expressions fallback without attempting to
        JIT. For parentheses, return to detecting which cases are have or have not
        been handled during JIT compilation.

        18% progression on tagcloud, ~1.5% overall on sunspidey.

        * yarr/RegexCompiler.cpp:
        (JSC::Yarr::RegexPatternConstructor::atomBackReference):
        (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::TermGenerationState::isLastTerm):
        (JSC::Yarr::RegexGenerator::TermGenerationState::isMainDisjunction):
        (JSC::Yarr::RegexGenerator::generateParenthesesGreedyNoBacktrack):
        (JSC::Yarr::RegexGenerator::generateTerm):
        (JSC::Yarr::RegexGenerator::RegexGenerator):
        (JSC::Yarr::RegexGenerator::shouldFallBack):
        (JSC::Yarr::jitCompileRegex):
        * yarr/RegexPattern.h:
        (JSC::Yarr::RegexPattern::RegexPattern):
        (JSC::Yarr::RegexPattern::reset):

2010-05-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed a crash seen on the Leopard bot, caused by merge.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION): Get the return address from the callframe,
        since it's no longer passed to us as an argument.

2010-05-25  Geoffrey Garen  <ggaren@apple.com>

        Fixed build failure caused by merge.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION): On error, return a single value, since this
        function no longer returns a pair.

2010-05-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/8020221>
        
        Fixed a crash seen on Windows when calling a function with too many
        arguments.
        
        SunSpider reports no change.
        
        No test because the ASSERT I added fires in existing tests.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION): Make sure to grow the registerFile when too
        many arguments have been provided, since the caller only allocated enough
        registerFile space for the arguments it provided, not enough for the extra
        copy of arguments we're going to need.

2010-05-25  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Build fix for JSFunction
        https://bugs.webkit.org/show_bug.cgi?id=39658

        MSVC can't compile one of JSFunction constructors when JIT is disabled.
        "PassRefPtr<NativeExecutable>" causes the compile error as NativeExecutable is not defined. 
        Add ENABLE(JIT) guard to the constructor.

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

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

        Reviewed by Sam Weinig.

        Bug 39643 - Clean up code generation in the JIT of stub function calls for op_call.

        Presently, as soon as op-call strays off the hot path we set up a set of values on
        the stack to be passed as arguments to cti functions, in case any should be called.

        Instead, hoist the setup of the callframe to happen slightly sooner, and make the
        cti functions to compile & check arity read these values from the callframe. This
        allows up to remove the deprecated methods to manually set up cti arguments, rather
        than using JITStubCall.h.

        * interpreter/CallFrame.h:
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCallVarargsSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCallVarargsSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        (JSC::):

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

        Reviewed by Sam Weinig.
        Relanding r60075.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
        * bytecode/CodeBlock.h:
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitConstruct):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitGetByIdExceptionInfo):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_convert_this):
        (JSC::JIT::emit_op_get_callee):
        (JSC::JIT::emit_op_create_this):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::emit_op_get_callee):
        (JSC::JIT::emit_op_create_this):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC::JITThunks::hostFunctionStub):
        * jit/JITStubs.h:
        (JSC::JITThunks::ctiNativeConstruct):
        (JSC::):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createNotAnObjectError):
        * runtime/Executable.h:
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::NativeExecutable):
        * runtime/JSFunction.cpp:
        (JSC::callHostFunctionAsConstructor):
        * runtime/JSFunction.h:
        * wtf/Platform.h:

== Rolled over to ChangeLog-2010-05-24 ==
